#![cfg(target_pointer_width = "64")]
mod fun;
use core::{ffi::c_void, marker::PhantomData};
use rustix::{
fd::RawFd,
io_uring::{
addr3_struct, addr_or_splice_off_in_union, buf_union, io_uring_params, io_uring_user_data,
ioprio_union, len_union, off_or_addr2_union, op_flags_union,
splice_fd_in_or_file_index_union, IoringCqeFlags, IoringOp, IoringSqeFlags, Timespec,
},
};
#[allow(non_camel_case_types)]
#[repr(C)]
pub struct io_uring {
_pad: [u64; 32],
_marker: PhantomData<*mut ()>,
}
#[allow(non_camel_case_types)]
#[repr(C)]
#[derive(Clone, Copy)]
pub struct io_uring_sqe {
pub opcode: IoringOp,
pub flags: IoringSqeFlags,
pub ioprio: ioprio_union,
pub fd: RawFd,
pub off_or_addr2: off_or_addr2_union,
pub addr_or_splice_off_in: addr_or_splice_off_in_union,
pub len: len_union,
pub op_flags: op_flags_union,
pub user_data: io_uring_user_data,
pub buf: buf_union,
pub personality: u16,
pub splice_fd_in_or_file_index: splice_fd_in_or_file_index_union,
pub addr3: addr3_struct,
}
#[allow(non_camel_case_types)]
#[repr(C)]
#[derive(Clone, Copy)]
pub struct io_uring_cqe {
pub user_data: io_uring_user_data,
pub res: i32,
pub flags: IoringCqeFlags,
}
pub unsafe fn io_uring_queue_init_params(
entries: u32,
ring: *mut io_uring,
p: *mut io_uring_params,
) -> i32 {
fun::init(entries, ring as _, p as _)
}
pub unsafe fn io_uring_get_sqe(ring: *mut io_uring) -> *mut io_uring_sqe {
fun::get_sqe(ring as _) as _
}
pub unsafe fn io_uring_submit_and_wait_timeout(
ring: *mut io_uring,
cqe_ptr: *mut *mut io_uring_cqe,
wait_nr: u32,
ts: *mut Timespec,
sigmask: *mut c_void,
) -> i32 {
fun::submit_and_wait(ring as _, cqe_ptr as _, wait_nr, ts as _, sigmask as _)
}
pub unsafe fn io_uring_cq_advance(ring: *mut io_uring, nr: u32) {
fun::cq_advance(ring as _, nr)
}
pub unsafe fn io_uring_queue_exit(ring: *mut io_uring) {
fun::exit(ring as _)
}