1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
pub mod squeue; pub mod cqueue; use std::io; use squeue::SubmissionQueue; use cqueue::CompletionQueue; pub struct IoUring { ring: crate::IoUring } unsafe impl Send for IoUring {} unsafe impl Sync for IoUring {} impl IoUring { pub fn new(ring: crate::IoUring) -> IoUring { IoUring { ring } } pub unsafe fn enter(&self, to_submit: u32, min_complete: u32, flag: u32, sig: Option<&libc::sigset_t>) -> io::Result<usize> { self.ring.enter(to_submit, min_complete, flag, sig) } pub fn submit(&self) -> io::Result<usize> { self.ring.submit() } pub fn submit_and_wait(&self, want: usize) -> io::Result<usize> { self.ring.submit_and_wait(want) } pub fn submission(&self) -> SubmissionQueue<'_> { SubmissionQueue { queue: &self.ring.sq, ring_mask: unsafe { self.ring.sq.ring_mask.read_volatile() }, ring_entries: unsafe { self.ring.sq.ring_entries.read_volatile() }, } } pub fn completion(&self) -> CompletionQueue<'_> { CompletionQueue { queue: &self.ring.cq, ring_mask: unsafe { self.ring.cq.ring_mask.read_volatile() }, ring_entries: unsafe { self.ring.cq.ring_entries.read_volatile() } } } pub fn into_inner(self) -> crate::IoUring { self.ring } }