xref: /linux/include/uapi/linux/io_uring.h (revision cf30da90bc3a26911d369f199411f38b701394de)
19f5834c8SLukas Bulwahn /* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT */
22b188cc1SJens Axboe /*
32b188cc1SJens Axboe  * Header file for the io_uring interface.
42b188cc1SJens Axboe  *
52b188cc1SJens Axboe  * Copyright (C) 2019 Jens Axboe
62b188cc1SJens Axboe  * Copyright (C) 2019 Christoph Hellwig
72b188cc1SJens Axboe  */
82b188cc1SJens Axboe #ifndef LINUX_IO_URING_H
92b188cc1SJens Axboe #define LINUX_IO_URING_H
102b188cc1SJens Axboe 
112b188cc1SJens Axboe #include <linux/fs.h>
122b188cc1SJens Axboe #include <linux/types.h>
132b188cc1SJens Axboe 
142b188cc1SJens Axboe /*
152b188cc1SJens Axboe  * IO submission data structure (Submission Queue Entry)
162b188cc1SJens Axboe  */
172b188cc1SJens Axboe struct io_uring_sqe {
182b188cc1SJens Axboe 	__u8	opcode;		/* type of operation for this sqe */
196b06314cSJens Axboe 	__u8	flags;		/* IOSQE_ flags */
202b188cc1SJens Axboe 	__u16	ioprio;		/* ioprio for the request */
212b188cc1SJens Axboe 	__s32	fd;		/* file descriptor to do IO on */
2217f2fe35SJens Axboe 	union {
232b188cc1SJens Axboe 		__u64	off;	/* offset into file */
2417f2fe35SJens Axboe 		__u64	addr2;
2517f2fe35SJens Axboe 	};
267d67af2cSPavel Begunkov 	union {
272b188cc1SJens Axboe 		__u64	addr;	/* pointer to buffer or iovecs */
287d67af2cSPavel Begunkov 		__u64	splice_off_in;
297d67af2cSPavel Begunkov 	};
302b188cc1SJens Axboe 	__u32	len;		/* buffer size or number of iovecs */
312b188cc1SJens Axboe 	union {
322b188cc1SJens Axboe 		__kernel_rwf_t	rw_flags;
33c992fe29SChristoph Hellwig 		__u32		fsync_flags;
345769a351SJiufei Xue 		__u16		poll_events;	/* compatibility */
355769a351SJiufei Xue 		__u32		poll32_events;	/* word-reversed for BE */
365d17b4a4SJens Axboe 		__u32		sync_range_flags;
370fa03c62SJens Axboe 		__u32		msg_flags;
385262f567SJens Axboe 		__u32		timeout_flags;
3917f2fe35SJens Axboe 		__u32		accept_flags;
4062755e35SJens Axboe 		__u32		cancel_flags;
4115b71abeSJens Axboe 		__u32		open_flags;
42eddc7ef5SJens Axboe 		__u32		statx_flags;
434840e418SJens Axboe 		__u32		fadvise_advice;
447d67af2cSPavel Begunkov 		__u32		splice_flags;
4580a261fdSJens Axboe 		__u32		rename_flags;
4614a1143bSJens Axboe 		__u32		unlink_flags;
47*cf30da90SDmitry Kadashev 		__u32		hardlink_flags;
482b188cc1SJens Axboe 	};
492b188cc1SJens Axboe 	__u64	user_data;	/* data to be passed back at completion time */
50ddf0322dSJens Axboe 	/* pack this to avoid bogus arm OABI complaints */
51ddf0322dSJens Axboe 	union {
5275c6a039SJens Axboe 		/* index into fixed buffers, if used */
5375c6a039SJens Axboe 		__u16	buf_index;
54ddf0322dSJens Axboe 		/* for grouped buffer selection */
55ddf0322dSJens Axboe 		__u16	buf_group;
56ddf0322dSJens Axboe 	} __attribute__((packed));
5775c6a039SJens Axboe 	/* personality to use, if used */
5875c6a039SJens Axboe 	__u16	personality;
597d67af2cSPavel Begunkov 	__s32	splice_fd_in;
609ba6a1c0SPavel Begunkov 	__u64	__pad2[2];
61edafcceeSJens Axboe };
622b188cc1SJens Axboe 
636b47ee6eSPavel Begunkov enum {
646b47ee6eSPavel Begunkov 	IOSQE_FIXED_FILE_BIT,
656b47ee6eSPavel Begunkov 	IOSQE_IO_DRAIN_BIT,
666b47ee6eSPavel Begunkov 	IOSQE_IO_LINK_BIT,
676b47ee6eSPavel Begunkov 	IOSQE_IO_HARDLINK_BIT,
686b47ee6eSPavel Begunkov 	IOSQE_ASYNC_BIT,
69bcda7baaSJens Axboe 	IOSQE_BUFFER_SELECT_BIT,
706b47ee6eSPavel Begunkov };
716b47ee6eSPavel Begunkov 
72def596e9SJens Axboe /*
736b06314cSJens Axboe  * sqe->flags
746b06314cSJens Axboe  */
756b47ee6eSPavel Begunkov /* use fixed fileset */
766b47ee6eSPavel Begunkov #define IOSQE_FIXED_FILE	(1U << IOSQE_FIXED_FILE_BIT)
776b47ee6eSPavel Begunkov /* issue after inflight IO */
786b47ee6eSPavel Begunkov #define IOSQE_IO_DRAIN		(1U << IOSQE_IO_DRAIN_BIT)
796b47ee6eSPavel Begunkov /* links next sqe */
806b47ee6eSPavel Begunkov #define IOSQE_IO_LINK		(1U << IOSQE_IO_LINK_BIT)
816b47ee6eSPavel Begunkov /* like LINK, but stronger */
826b47ee6eSPavel Begunkov #define IOSQE_IO_HARDLINK	(1U << IOSQE_IO_HARDLINK_BIT)
836b47ee6eSPavel Begunkov /* always go async */
846b47ee6eSPavel Begunkov #define IOSQE_ASYNC		(1U << IOSQE_ASYNC_BIT)
85bcda7baaSJens Axboe /* select buffer from sqe->buf_group */
86bcda7baaSJens Axboe #define IOSQE_BUFFER_SELECT	(1U << IOSQE_BUFFER_SELECT_BIT)
876b06314cSJens Axboe 
886b06314cSJens Axboe /*
89def596e9SJens Axboe  * io_uring_setup() flags
90def596e9SJens Axboe  */
91def596e9SJens Axboe #define IORING_SETUP_IOPOLL	(1U << 0)	/* io_context is polled */
926c271ce2SJens Axboe #define IORING_SETUP_SQPOLL	(1U << 1)	/* SQ poll thread */
936c271ce2SJens Axboe #define IORING_SETUP_SQ_AFF	(1U << 2)	/* sq_thread_cpu is valid */
9433a107f0SJens Axboe #define IORING_SETUP_CQSIZE	(1U << 3)	/* app defines CQ size */
958110c1a6SJens Axboe #define IORING_SETUP_CLAMP	(1U << 4)	/* clamp SQ/CQ ring sizes */
9624369c2eSPavel Begunkov #define IORING_SETUP_ATTACH_WQ	(1U << 5)	/* attach to existing wq */
977e84e1c7SStefano Garzarella #define IORING_SETUP_R_DISABLED	(1U << 6)	/* start with ring disabled */
98def596e9SJens Axboe 
999e3aa61aSJens Axboe enum {
1009e3aa61aSJens Axboe 	IORING_OP_NOP,
1019e3aa61aSJens Axboe 	IORING_OP_READV,
1029e3aa61aSJens Axboe 	IORING_OP_WRITEV,
1039e3aa61aSJens Axboe 	IORING_OP_FSYNC,
1049e3aa61aSJens Axboe 	IORING_OP_READ_FIXED,
1059e3aa61aSJens Axboe 	IORING_OP_WRITE_FIXED,
1069e3aa61aSJens Axboe 	IORING_OP_POLL_ADD,
1079e3aa61aSJens Axboe 	IORING_OP_POLL_REMOVE,
1089e3aa61aSJens Axboe 	IORING_OP_SYNC_FILE_RANGE,
1099e3aa61aSJens Axboe 	IORING_OP_SENDMSG,
1109e3aa61aSJens Axboe 	IORING_OP_RECVMSG,
1119e3aa61aSJens Axboe 	IORING_OP_TIMEOUT,
1129e3aa61aSJens Axboe 	IORING_OP_TIMEOUT_REMOVE,
1139e3aa61aSJens Axboe 	IORING_OP_ACCEPT,
1149e3aa61aSJens Axboe 	IORING_OP_ASYNC_CANCEL,
1159e3aa61aSJens Axboe 	IORING_OP_LINK_TIMEOUT,
1169e3aa61aSJens Axboe 	IORING_OP_CONNECT,
117d63d1b5eSJens Axboe 	IORING_OP_FALLOCATE,
11815b71abeSJens Axboe 	IORING_OP_OPENAT,
119b5dba59eSJens Axboe 	IORING_OP_CLOSE,
12005f3fb3cSJens Axboe 	IORING_OP_FILES_UPDATE,
121eddc7ef5SJens Axboe 	IORING_OP_STATX,
1223a6820f2SJens Axboe 	IORING_OP_READ,
1233a6820f2SJens Axboe 	IORING_OP_WRITE,
1244840e418SJens Axboe 	IORING_OP_FADVISE,
125c1ca757bSJens Axboe 	IORING_OP_MADVISE,
126fddafaceSJens Axboe 	IORING_OP_SEND,
127fddafaceSJens Axboe 	IORING_OP_RECV,
128cebdb986SJens Axboe 	IORING_OP_OPENAT2,
1293e4827b0SJens Axboe 	IORING_OP_EPOLL_CTL,
1307d67af2cSPavel Begunkov 	IORING_OP_SPLICE,
131ddf0322dSJens Axboe 	IORING_OP_PROVIDE_BUFFERS,
132067524e9SJens Axboe 	IORING_OP_REMOVE_BUFFERS,
133f2a8d5c7SPavel Begunkov 	IORING_OP_TEE,
13436f4fa68SJens Axboe 	IORING_OP_SHUTDOWN,
13580a261fdSJens Axboe 	IORING_OP_RENAMEAT,
13614a1143bSJens Axboe 	IORING_OP_UNLINKAT,
137e34a02dcSDmitry Kadashev 	IORING_OP_MKDIRAT,
1387a8721f8SDmitry Kadashev 	IORING_OP_SYMLINKAT,
139*cf30da90SDmitry Kadashev 	IORING_OP_LINKAT,
1409e3aa61aSJens Axboe 
1419e3aa61aSJens Axboe 	/* this goes last, obviously */
1429e3aa61aSJens Axboe 	IORING_OP_LAST,
1439e3aa61aSJens Axboe };
144c992fe29SChristoph Hellwig 
145c992fe29SChristoph Hellwig /*
146c992fe29SChristoph Hellwig  * sqe->fsync_flags
147c992fe29SChristoph Hellwig  */
148c992fe29SChristoph Hellwig #define IORING_FSYNC_DATASYNC	(1U << 0)
1492b188cc1SJens Axboe 
1502b188cc1SJens Axboe /*
151a41525abSJens Axboe  * sqe->timeout_flags
152a41525abSJens Axboe  */
153a41525abSJens Axboe #define IORING_TIMEOUT_ABS	(1U << 0)
1549c8e11b3SPavel Begunkov #define IORING_TIMEOUT_UPDATE	(1U << 1)
155a41525abSJens Axboe 
156a41525abSJens Axboe /*
1577d67af2cSPavel Begunkov  * sqe->splice_flags
1587d67af2cSPavel Begunkov  * extends splice(2) flags
1597d67af2cSPavel Begunkov  */
1607d67af2cSPavel Begunkov #define SPLICE_F_FD_IN_FIXED	(1U << 31) /* the last bit of __u32 */
1617d67af2cSPavel Begunkov 
1627d67af2cSPavel Begunkov /*
16388e41cf9SJens Axboe  * POLL_ADD flags. Note that since sqe->poll_events is the flag space, the
16488e41cf9SJens Axboe  * command flags for POLL_ADD are stored in sqe->len.
16588e41cf9SJens Axboe  *
16688e41cf9SJens Axboe  * IORING_POLL_ADD_MULTI	Multishot poll. Sets IORING_CQE_F_MORE if
16788e41cf9SJens Axboe  *				the poll handler will continue to report
16888e41cf9SJens Axboe  *				CQEs on behalf of the same SQE.
169b69de288SJens Axboe  *
170b69de288SJens Axboe  * IORING_POLL_UPDATE		Update existing poll request, matching
171b69de288SJens Axboe  *				sqe->addr as the old user_data field.
17288e41cf9SJens Axboe  */
17388e41cf9SJens Axboe #define IORING_POLL_ADD_MULTI	(1U << 0)
174b69de288SJens Axboe #define IORING_POLL_UPDATE_EVENTS	(1U << 1)
175b69de288SJens Axboe #define IORING_POLL_UPDATE_USER_DATA	(1U << 2)
17688e41cf9SJens Axboe 
17788e41cf9SJens Axboe /*
1782b188cc1SJens Axboe  * IO completion data structure (Completion Queue Entry)
1792b188cc1SJens Axboe  */
1802b188cc1SJens Axboe struct io_uring_cqe {
1812b188cc1SJens Axboe 	__u64	user_data;	/* sqe->data submission passed back */
1822b188cc1SJens Axboe 	__s32	res;		/* result code for this event */
1832b188cc1SJens Axboe 	__u32	flags;
1842b188cc1SJens Axboe };
1852b188cc1SJens Axboe 
1862b188cc1SJens Axboe /*
187bcda7baaSJens Axboe  * cqe->flags
188bcda7baaSJens Axboe  *
189bcda7baaSJens Axboe  * IORING_CQE_F_BUFFER	If set, the upper 16 bits are the buffer ID
19088e41cf9SJens Axboe  * IORING_CQE_F_MORE	If set, parent SQE will generate more CQE entries
191bcda7baaSJens Axboe  */
192bcda7baaSJens Axboe #define IORING_CQE_F_BUFFER		(1U << 0)
19388e41cf9SJens Axboe #define IORING_CQE_F_MORE		(1U << 1)
194bcda7baaSJens Axboe 
195bcda7baaSJens Axboe enum {
196bcda7baaSJens Axboe 	IORING_CQE_BUFFER_SHIFT		= 16,
197bcda7baaSJens Axboe };
198bcda7baaSJens Axboe 
199bcda7baaSJens Axboe /*
2002b188cc1SJens Axboe  * Magic offsets for the application to mmap the data it needs
2012b188cc1SJens Axboe  */
2022b188cc1SJens Axboe #define IORING_OFF_SQ_RING		0ULL
2032b188cc1SJens Axboe #define IORING_OFF_CQ_RING		0x8000000ULL
2042b188cc1SJens Axboe #define IORING_OFF_SQES			0x10000000ULL
2052b188cc1SJens Axboe 
2062b188cc1SJens Axboe /*
2072b188cc1SJens Axboe  * Filled with the offset for mmap(2)
2082b188cc1SJens Axboe  */
2092b188cc1SJens Axboe struct io_sqring_offsets {
2102b188cc1SJens Axboe 	__u32 head;
2112b188cc1SJens Axboe 	__u32 tail;
2122b188cc1SJens Axboe 	__u32 ring_mask;
2132b188cc1SJens Axboe 	__u32 ring_entries;
2142b188cc1SJens Axboe 	__u32 flags;
2152b188cc1SJens Axboe 	__u32 dropped;
2162b188cc1SJens Axboe 	__u32 array;
2172b188cc1SJens Axboe 	__u32 resv1;
2182b188cc1SJens Axboe 	__u64 resv2;
2192b188cc1SJens Axboe };
2202b188cc1SJens Axboe 
2216c271ce2SJens Axboe /*
2226c271ce2SJens Axboe  * sq_ring->flags
2236c271ce2SJens Axboe  */
2246c271ce2SJens Axboe #define IORING_SQ_NEED_WAKEUP	(1U << 0) /* needs io_uring_enter wakeup */
2256d5f9049SXiaoguang Wang #define IORING_SQ_CQ_OVERFLOW	(1U << 1) /* CQ ring is overflown */
2266c271ce2SJens Axboe 
2272b188cc1SJens Axboe struct io_cqring_offsets {
2282b188cc1SJens Axboe 	__u32 head;
2292b188cc1SJens Axboe 	__u32 tail;
2302b188cc1SJens Axboe 	__u32 ring_mask;
2312b188cc1SJens Axboe 	__u32 ring_entries;
2322b188cc1SJens Axboe 	__u32 overflow;
2332b188cc1SJens Axboe 	__u32 cqes;
2340d9b5b3aSStefano Garzarella 	__u32 flags;
2350d9b5b3aSStefano Garzarella 	__u32 resv1;
2360d9b5b3aSStefano Garzarella 	__u64 resv2;
2372b188cc1SJens Axboe };
2382b188cc1SJens Axboe 
2392b188cc1SJens Axboe /*
2407e55a19cSStefano Garzarella  * cq_ring->flags
2417e55a19cSStefano Garzarella  */
2427e55a19cSStefano Garzarella 
2437e55a19cSStefano Garzarella /* disable eventfd notifications */
2447e55a19cSStefano Garzarella #define IORING_CQ_EVENTFD_DISABLED	(1U << 0)
2457e55a19cSStefano Garzarella 
2467e55a19cSStefano Garzarella /*
2472b188cc1SJens Axboe  * io_uring_enter(2) flags
2482b188cc1SJens Axboe  */
2492b188cc1SJens Axboe #define IORING_ENTER_GETEVENTS	(1U << 0)
2506c271ce2SJens Axboe #define IORING_ENTER_SQ_WAKEUP	(1U << 1)
25190554200SJens Axboe #define IORING_ENTER_SQ_WAIT	(1U << 2)
252c73ebb68SHao Xu #define IORING_ENTER_EXT_ARG	(1U << 3)
2532b188cc1SJens Axboe 
2542b188cc1SJens Axboe /*
2552b188cc1SJens Axboe  * Passed in for io_uring_setup(2). Copied back with updated info on success
2562b188cc1SJens Axboe  */
2572b188cc1SJens Axboe struct io_uring_params {
2582b188cc1SJens Axboe 	__u32 sq_entries;
2592b188cc1SJens Axboe 	__u32 cq_entries;
2602b188cc1SJens Axboe 	__u32 flags;
2616c271ce2SJens Axboe 	__u32 sq_thread_cpu;
2626c271ce2SJens Axboe 	__u32 sq_thread_idle;
263ac90f249SJens Axboe 	__u32 features;
26424369c2eSPavel Begunkov 	__u32 wq_fd;
26524369c2eSPavel Begunkov 	__u32 resv[3];
2662b188cc1SJens Axboe 	struct io_sqring_offsets sq_off;
2672b188cc1SJens Axboe 	struct io_cqring_offsets cq_off;
2682b188cc1SJens Axboe };
2692b188cc1SJens Axboe 
270edafcceeSJens Axboe /*
271ac90f249SJens Axboe  * io_uring_params->features flags
272ac90f249SJens Axboe  */
273ac90f249SJens Axboe #define IORING_FEAT_SINGLE_MMAP		(1U << 0)
2741d7bb1d5SJens Axboe #define IORING_FEAT_NODROP		(1U << 1)
275da8c9690SJens Axboe #define IORING_FEAT_SUBMIT_STABLE	(1U << 2)
276ba04291eSJens Axboe #define IORING_FEAT_RW_CUR_POS		(1U << 3)
277cccf0ee8SJens Axboe #define IORING_FEAT_CUR_PERSONALITY	(1U << 4)
278d7718a9dSJens Axboe #define IORING_FEAT_FAST_POLL		(1U << 5)
2795769a351SJiufei Xue #define IORING_FEAT_POLL_32BITS 	(1U << 6)
28028cea78aSJens Axboe #define IORING_FEAT_SQPOLL_NONFIXED	(1U << 7)
281c73ebb68SHao Xu #define IORING_FEAT_EXT_ARG		(1U << 8)
2821c0aa1faSJens Axboe #define IORING_FEAT_NATIVE_WORKERS	(1U << 9)
2839690557eSPavel Begunkov #define IORING_FEAT_RSRC_TAGS		(1U << 10)
284ac90f249SJens Axboe 
285ac90f249SJens Axboe /*
286edafcceeSJens Axboe  * io_uring_register(2) opcodes and arguments
287edafcceeSJens Axboe  */
2889d4a75efSStefano Garzarella enum {
2899d4a75efSStefano Garzarella 	IORING_REGISTER_BUFFERS			= 0,
2909d4a75efSStefano Garzarella 	IORING_UNREGISTER_BUFFERS		= 1,
2919d4a75efSStefano Garzarella 	IORING_REGISTER_FILES			= 2,
2929d4a75efSStefano Garzarella 	IORING_UNREGISTER_FILES			= 3,
2939d4a75efSStefano Garzarella 	IORING_REGISTER_EVENTFD			= 4,
2949d4a75efSStefano Garzarella 	IORING_UNREGISTER_EVENTFD		= 5,
2959d4a75efSStefano Garzarella 	IORING_REGISTER_FILES_UPDATE		= 6,
2969d4a75efSStefano Garzarella 	IORING_REGISTER_EVENTFD_ASYNC		= 7,
2979d4a75efSStefano Garzarella 	IORING_REGISTER_PROBE			= 8,
2989d4a75efSStefano Garzarella 	IORING_REGISTER_PERSONALITY		= 9,
2999d4a75efSStefano Garzarella 	IORING_UNREGISTER_PERSONALITY		= 10,
30021b55dbcSStefano Garzarella 	IORING_REGISTER_RESTRICTIONS		= 11,
3017e84e1c7SStefano Garzarella 	IORING_REGISTER_ENABLE_RINGS		= 12,
302992da01aSPavel Begunkov 
303992da01aSPavel Begunkov 	/* extended with tagging */
304992da01aSPavel Begunkov 	IORING_REGISTER_FILES2			= 13,
305992da01aSPavel Begunkov 	IORING_REGISTER_FILES_UPDATE2		= 14,
306992da01aSPavel Begunkov 	IORING_REGISTER_BUFFERS2		= 15,
307992da01aSPavel Begunkov 	IORING_REGISTER_BUFFERS_UPDATE		= 16,
3089d4a75efSStefano Garzarella 
309fe76421dSJens Axboe 	/* set/clear io-wq thread affinities */
310fe76421dSJens Axboe 	IORING_REGISTER_IOWQ_AFF		= 17,
311fe76421dSJens Axboe 	IORING_UNREGISTER_IOWQ_AFF		= 18,
312fe76421dSJens Axboe 
3139d4a75efSStefano Garzarella 	/* this goes last */
3149d4a75efSStefano Garzarella 	IORING_REGISTER_LAST
3159d4a75efSStefano Garzarella };
316c3a31e60SJens Axboe 
317269bbe5fSBijan Mottahedeh /* deprecated, see struct io_uring_rsrc_update */
318c3a31e60SJens Axboe struct io_uring_files_update {
319c3a31e60SJens Axboe 	__u32 offset;
3201292e972SEugene Syromiatnikov 	__u32 resv;
3211292e972SEugene Syromiatnikov 	__aligned_u64 /* __s32 * */ fds;
322c3a31e60SJens Axboe };
323edafcceeSJens Axboe 
324792e3582SPavel Begunkov struct io_uring_rsrc_register {
325792e3582SPavel Begunkov 	__u32 nr;
326992da01aSPavel Begunkov 	__u32 resv;
327992da01aSPavel Begunkov 	__u64 resv2;
328792e3582SPavel Begunkov 	__aligned_u64 data;
329792e3582SPavel Begunkov 	__aligned_u64 tags;
330792e3582SPavel Begunkov };
331792e3582SPavel Begunkov 
332c3bdad02SPavel Begunkov struct io_uring_rsrc_update {
333c3bdad02SPavel Begunkov 	__u32 offset;
334c3bdad02SPavel Begunkov 	__u32 resv;
335c3bdad02SPavel Begunkov 	__aligned_u64 data;
336c3bdad02SPavel Begunkov };
337c3bdad02SPavel Begunkov 
338c3bdad02SPavel Begunkov struct io_uring_rsrc_update2 {
339c3bdad02SPavel Begunkov 	__u32 offset;
340c3bdad02SPavel Begunkov 	__u32 resv;
341c3bdad02SPavel Begunkov 	__aligned_u64 data;
342c3bdad02SPavel Begunkov 	__aligned_u64 tags;
343c3bdad02SPavel Begunkov 	__u32 nr;
344992da01aSPavel Begunkov 	__u32 resv2;
345c3bdad02SPavel Begunkov };
346c3bdad02SPavel Begunkov 
3474e0377a1Snoah /* Skip updating fd indexes set to this value in the fd table */
3484e0377a1Snoah #define IORING_REGISTER_FILES_SKIP	(-2)
3494e0377a1Snoah 
35066f4af93SJens Axboe #define IO_URING_OP_SUPPORTED	(1U << 0)
35166f4af93SJens Axboe 
35266f4af93SJens Axboe struct io_uring_probe_op {
35366f4af93SJens Axboe 	__u8 op;
35466f4af93SJens Axboe 	__u8 resv;
35566f4af93SJens Axboe 	__u16 flags;	/* IO_URING_OP_* flags */
35666f4af93SJens Axboe 	__u32 resv2;
35766f4af93SJens Axboe };
35866f4af93SJens Axboe 
35966f4af93SJens Axboe struct io_uring_probe {
36066f4af93SJens Axboe 	__u8 last_op;	/* last opcode supported */
36166f4af93SJens Axboe 	__u8 ops_len;	/* length of ops[] array below */
36266f4af93SJens Axboe 	__u16 resv;
36366f4af93SJens Axboe 	__u32 resv2[3];
36466f4af93SJens Axboe 	struct io_uring_probe_op ops[0];
36566f4af93SJens Axboe };
36666f4af93SJens Axboe 
36721b55dbcSStefano Garzarella struct io_uring_restriction {
36821b55dbcSStefano Garzarella 	__u16 opcode;
36921b55dbcSStefano Garzarella 	union {
37021b55dbcSStefano Garzarella 		__u8 register_op; /* IORING_RESTRICTION_REGISTER_OP */
37121b55dbcSStefano Garzarella 		__u8 sqe_op;      /* IORING_RESTRICTION_SQE_OP */
37221b55dbcSStefano Garzarella 		__u8 sqe_flags;   /* IORING_RESTRICTION_SQE_FLAGS_* */
37321b55dbcSStefano Garzarella 	};
37421b55dbcSStefano Garzarella 	__u8 resv;
37521b55dbcSStefano Garzarella 	__u32 resv2[3];
37621b55dbcSStefano Garzarella };
37721b55dbcSStefano Garzarella 
37821b55dbcSStefano Garzarella /*
37921b55dbcSStefano Garzarella  * io_uring_restriction->opcode values
38021b55dbcSStefano Garzarella  */
38121b55dbcSStefano Garzarella enum {
38221b55dbcSStefano Garzarella 	/* Allow an io_uring_register(2) opcode */
38321b55dbcSStefano Garzarella 	IORING_RESTRICTION_REGISTER_OP		= 0,
38421b55dbcSStefano Garzarella 
38521b55dbcSStefano Garzarella 	/* Allow an sqe opcode */
38621b55dbcSStefano Garzarella 	IORING_RESTRICTION_SQE_OP		= 1,
38721b55dbcSStefano Garzarella 
38821b55dbcSStefano Garzarella 	/* Allow sqe flags */
38921b55dbcSStefano Garzarella 	IORING_RESTRICTION_SQE_FLAGS_ALLOWED	= 2,
39021b55dbcSStefano Garzarella 
39121b55dbcSStefano Garzarella 	/* Require sqe flags (these flags must be set on each submission) */
39221b55dbcSStefano Garzarella 	IORING_RESTRICTION_SQE_FLAGS_REQUIRED	= 3,
39321b55dbcSStefano Garzarella 
39421b55dbcSStefano Garzarella 	IORING_RESTRICTION_LAST
39521b55dbcSStefano Garzarella };
39621b55dbcSStefano Garzarella 
397c73ebb68SHao Xu struct io_uring_getevents_arg {
398c73ebb68SHao Xu 	__u64	sigmask;
399c73ebb68SHao Xu 	__u32	sigmask_sz;
400c73ebb68SHao Xu 	__u32	pad;
401c73ebb68SHao Xu 	__u64	ts;
402c73ebb68SHao Xu };
403c73ebb68SHao Xu 
4042b188cc1SJens Axboe #endif
405