]>
git.ipfire.org Git - thirdparty/kernel/linux.git/blob - tools/io_uring/liburing.h
cab0f50257babc29eb359fd4b20319ce662b7840
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
;