7 #include "../../include/uapi/linux/io_uring.h"
10 * Library interface to io_uring
16 unsigned *kring_entries;
20 struct io_uring_sqe *sqes;
32 unsigned *kring_entries;
34 struct io_uring_cqe *cqes;
40 struct io_uring_sq sq;
41 struct io_uring_cq cq;
48 extern int io_uring_setup(unsigned entries, struct io_uring_params *p);
49 extern int io_uring_enter(unsigned fd, unsigned to_submit,
50 unsigned min_complete, unsigned flags, sigset_t *sig);
51 extern int io_uring_register(int fd, unsigned int opcode, void *arg,
52 unsigned int nr_args);
57 extern int io_uring_queue_init(unsigned entries, struct io_uring *ring,
59 extern int io_uring_queue_mmap(int fd, struct io_uring_params *p,
60 struct io_uring *ring);
61 extern void io_uring_queue_exit(struct io_uring *ring);
62 extern int io_uring_get_completion(struct io_uring *ring,
63 struct io_uring_cqe **cqe_ptr);
64 extern int io_uring_wait_completion(struct io_uring *ring,
65 struct io_uring_cqe **cqe_ptr);
66 extern int io_uring_submit(struct io_uring *ring);
67 extern struct io_uring_sqe *io_uring_get_sqe(struct io_uring *ring);
70 * Command prep helpers
72 static inline void io_uring_sqe_set_data(struct io_uring_sqe *sqe, void *data)
74 sqe->user_data = (unsigned long) data;
77 static inline void io_uring_prep_rw(int op, struct io_uring_sqe *sqe, int fd,
78 void *addr, unsigned len, off_t offset)
80 memset(sqe, 0, sizeof(*sqe));
84 sqe->addr = (unsigned long) addr;
88 static inline void io_uring_prep_readv(struct io_uring_sqe *sqe, int fd,
89 struct iovec *iovecs, unsigned nr_vecs,
92 io_uring_prep_rw(IORING_OP_READV, sqe, fd, iovecs, nr_vecs, offset);
95 static inline void io_uring_prep_read_fixed(struct io_uring_sqe *sqe, int fd,
96 void *buf, unsigned nbytes,
99 io_uring_prep_rw(IORING_OP_READ_FIXED, sqe, fd, buf, nbytes, offset);
102 static inline void io_uring_prep_writev(struct io_uring_sqe *sqe, int fd,
103 struct iovec *iovecs, unsigned nr_vecs,
106 io_uring_prep_rw(IORING_OP_WRITEV, sqe, fd, iovecs, nr_vecs, offset);
109 static inline void io_uring_prep_write_fixed(struct io_uring_sqe *sqe, int fd,
110 void *buf, unsigned nbytes,
113 io_uring_prep_rw(IORING_OP_WRITE_FIXED, sqe, fd, buf, nbytes, offset);
116 static inline void io_uring_prep_poll_add(struct io_uring_sqe *sqe, int fd,
119 memset(sqe, 0, sizeof(*sqe));
120 sqe->opcode = IORING_OP_POLL_ADD;
122 sqe->poll_events = poll_mask;
125 static inline void io_uring_prep_poll_remove(struct io_uring_sqe *sqe,
128 memset(sqe, 0, sizeof(*sqe));
129 sqe->opcode = IORING_OP_POLL_REMOVE;
130 sqe->addr = (unsigned long) user_data;
133 static inline void io_uring_prep_fsync(struct io_uring_sqe *sqe, int fd,
136 memset(sqe, 0, sizeof(*sqe));
137 sqe->opcode = IORING_OP_FSYNC;
140 sqe->fsync_flags = IORING_FSYNC_DATASYNC;