1 //! libc syscalls supporting `rustix::io_uring`.
2 
3 use crate::backend::c;
4 use crate::backend::conv::{borrowed_fd, ret_owned_fd, ret_u32};
5 use crate::fd::{BorrowedFd, OwnedFd};
6 use crate::io;
7 use crate::io_uring::{io_uring_params, IoringEnterFlags, IoringRegisterOp};
8 
9 #[inline]
io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd>10 pub(crate) fn io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd> {
11     syscall! {
12         fn io_uring_setup(
13             entries: u32,
14             params: *mut io_uring_params
15         ) via SYS_io_uring_setup -> c::c_int
16     }
17     unsafe { ret_owned_fd(io_uring_setup(entries, params)) }
18 }
19 
20 #[inline]
io_uring_register( fd: BorrowedFd<'_>, opcode: IoringRegisterOp, arg: *const c::c_void, nr_args: u32, ) -> io::Result<u32>21 pub(crate) unsafe fn io_uring_register(
22     fd: BorrowedFd<'_>,
23     opcode: IoringRegisterOp,
24     arg: *const c::c_void,
25     nr_args: u32,
26 ) -> io::Result<u32> {
27     syscall! {
28         fn io_uring_register(
29             fd: c::c_uint,
30             opcode: c::c_uint,
31             arg: *const c::c_void,
32             nr_args: c::c_uint
33         ) via SYS_io_uring_register -> c::c_int
34     }
35     ret_u32(io_uring_register(
36         borrowed_fd(fd) as _,
37         opcode as u32,
38         arg,
39         nr_args,
40     ))
41 }
42 
43 #[inline]
io_uring_enter( fd: BorrowedFd<'_>, to_submit: u32, min_complete: u32, flags: IoringEnterFlags, arg: *const c::c_void, size: usize, ) -> io::Result<u32>44 pub(crate) unsafe fn io_uring_enter(
45     fd: BorrowedFd<'_>,
46     to_submit: u32,
47     min_complete: u32,
48     flags: IoringEnterFlags,
49     arg: *const c::c_void,
50     size: usize,
51 ) -> io::Result<u32> {
52     syscall! {
53         fn io_uring_enter2(
54             fd: c::c_uint,
55             to_submit: c::c_uint,
56             min_complete: c::c_uint,
57             flags: c::c_uint,
58             arg: *const c::c_void,
59             size: usize
60         ) via SYS_io_uring_enter -> c::c_int
61     }
62     ret_u32(io_uring_enter2(
63         borrowed_fd(fd) as _,
64         to_submit,
65         min_complete,
66         bitflags_bits!(flags),
67         arg,
68         size,
69     ))
70 }
71