1 /* 2 * This file is auto-generated. Modifications will be lost. 3 * 4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5 * for more information. 6 */ 7 #ifndef LINUX_IO_URING_H 8 #define LINUX_IO_URING_H 9 #include <linux/fs.h> 10 #include <linux/types.h> 11 #ifndef UAPI_LINUX_IO_URING_H_SKIP_LINUX_TIME_TYPES_H 12 #include <linux/time_types.h> 13 #endif 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 struct io_uring_sqe { 18 __u8 opcode; 19 __u8 flags; 20 __u16 ioprio; 21 __s32 fd; 22 union { 23 __u64 off; 24 __u64 addr2; 25 struct { 26 __u32 cmd_op; 27 __u32 __pad1; 28 }; 29 }; 30 union { 31 __u64 addr; 32 __u64 splice_off_in; 33 struct { 34 __u32 level; 35 __u32 optname; 36 }; 37 }; 38 __u32 len; 39 union { 40 __kernel_rwf_t rw_flags; 41 __u32 fsync_flags; 42 __u16 poll_events; 43 __u32 poll32_events; 44 __u32 sync_range_flags; 45 __u32 msg_flags; 46 __u32 timeout_flags; 47 __u32 accept_flags; 48 __u32 cancel_flags; 49 __u32 open_flags; 50 __u32 statx_flags; 51 __u32 fadvise_advice; 52 __u32 splice_flags; 53 __u32 rename_flags; 54 __u32 unlink_flags; 55 __u32 hardlink_flags; 56 __u32 xattr_flags; 57 __u32 msg_ring_flags; 58 __u32 uring_cmd_flags; 59 __u32 waitid_flags; 60 __u32 futex_flags; 61 __u32 install_fd_flags; 62 __u32 nop_flags; 63 }; 64 __u64 user_data; 65 union { 66 __u16 buf_index; 67 __u16 buf_group; 68 } __attribute__((packed)); 69 __u16 personality; 70 union { 71 __s32 splice_fd_in; 72 __u32 file_index; 73 __u32 optlen; 74 struct { 75 __u16 addr_len; 76 __u16 __pad3[1]; 77 }; 78 }; 79 union { 80 struct { 81 __u64 addr3; 82 __u64 __pad2[1]; 83 }; 84 __u64 optval; 85 __u8 cmd[0]; 86 }; 87 }; 88 #define IORING_FILE_INDEX_ALLOC (~0U) 89 enum io_uring_sqe_flags_bit { 90 IOSQE_FIXED_FILE_BIT, 91 IOSQE_IO_DRAIN_BIT, 92 IOSQE_IO_LINK_BIT, 93 IOSQE_IO_HARDLINK_BIT, 94 IOSQE_ASYNC_BIT, 95 IOSQE_BUFFER_SELECT_BIT, 96 IOSQE_CQE_SKIP_SUCCESS_BIT, 97 }; 98 #define IOSQE_FIXED_FILE (1U << IOSQE_FIXED_FILE_BIT) 99 #define IOSQE_IO_DRAIN (1U << IOSQE_IO_DRAIN_BIT) 100 #define IOSQE_IO_LINK (1U << IOSQE_IO_LINK_BIT) 101 #define IOSQE_IO_HARDLINK (1U << IOSQE_IO_HARDLINK_BIT) 102 #define IOSQE_ASYNC (1U << IOSQE_ASYNC_BIT) 103 #define IOSQE_BUFFER_SELECT (1U << IOSQE_BUFFER_SELECT_BIT) 104 #define IOSQE_CQE_SKIP_SUCCESS (1U << IOSQE_CQE_SKIP_SUCCESS_BIT) 105 #define IORING_SETUP_IOPOLL (1U << 0) 106 #define IORING_SETUP_SQPOLL (1U << 1) 107 #define IORING_SETUP_SQ_AFF (1U << 2) 108 #define IORING_SETUP_CQSIZE (1U << 3) 109 #define IORING_SETUP_CLAMP (1U << 4) 110 #define IORING_SETUP_ATTACH_WQ (1U << 5) 111 #define IORING_SETUP_R_DISABLED (1U << 6) 112 #define IORING_SETUP_SUBMIT_ALL (1U << 7) 113 #define IORING_SETUP_COOP_TASKRUN (1U << 8) 114 #define IORING_SETUP_TASKRUN_FLAG (1U << 9) 115 #define IORING_SETUP_SQE128 (1U << 10) 116 #define IORING_SETUP_CQE32 (1U << 11) 117 #define IORING_SETUP_SINGLE_ISSUER (1U << 12) 118 #define IORING_SETUP_DEFER_TASKRUN (1U << 13) 119 #define IORING_SETUP_NO_MMAP (1U << 14) 120 #define IORING_SETUP_REGISTERED_FD_ONLY (1U << 15) 121 #define IORING_SETUP_NO_SQARRAY (1U << 16) 122 enum io_uring_op { 123 IORING_OP_NOP, 124 IORING_OP_READV, 125 IORING_OP_WRITEV, 126 IORING_OP_FSYNC, 127 IORING_OP_READ_FIXED, 128 IORING_OP_WRITE_FIXED, 129 IORING_OP_POLL_ADD, 130 IORING_OP_POLL_REMOVE, 131 IORING_OP_SYNC_FILE_RANGE, 132 IORING_OP_SENDMSG, 133 IORING_OP_RECVMSG, 134 IORING_OP_TIMEOUT, 135 IORING_OP_TIMEOUT_REMOVE, 136 IORING_OP_ACCEPT, 137 IORING_OP_ASYNC_CANCEL, 138 IORING_OP_LINK_TIMEOUT, 139 IORING_OP_CONNECT, 140 IORING_OP_FALLOCATE, 141 IORING_OP_OPENAT, 142 IORING_OP_CLOSE, 143 IORING_OP_FILES_UPDATE, 144 IORING_OP_STATX, 145 IORING_OP_READ, 146 IORING_OP_WRITE, 147 IORING_OP_FADVISE, 148 IORING_OP_MADVISE, 149 IORING_OP_SEND, 150 IORING_OP_RECV, 151 IORING_OP_OPENAT2, 152 IORING_OP_EPOLL_CTL, 153 IORING_OP_SPLICE, 154 IORING_OP_PROVIDE_BUFFERS, 155 IORING_OP_REMOVE_BUFFERS, 156 IORING_OP_TEE, 157 IORING_OP_SHUTDOWN, 158 IORING_OP_RENAMEAT, 159 IORING_OP_UNLINKAT, 160 IORING_OP_MKDIRAT, 161 IORING_OP_SYMLINKAT, 162 IORING_OP_LINKAT, 163 IORING_OP_MSG_RING, 164 IORING_OP_FSETXATTR, 165 IORING_OP_SETXATTR, 166 IORING_OP_FGETXATTR, 167 IORING_OP_GETXATTR, 168 IORING_OP_SOCKET, 169 IORING_OP_URING_CMD, 170 IORING_OP_SEND_ZC, 171 IORING_OP_SENDMSG_ZC, 172 IORING_OP_READ_MULTISHOT, 173 IORING_OP_WAITID, 174 IORING_OP_FUTEX_WAIT, 175 IORING_OP_FUTEX_WAKE, 176 IORING_OP_FUTEX_WAITV, 177 IORING_OP_FIXED_FD_INSTALL, 178 IORING_OP_FTRUNCATE, 179 IORING_OP_BIND, 180 IORING_OP_LISTEN, 181 IORING_OP_LAST, 182 }; 183 #define IORING_URING_CMD_FIXED (1U << 0) 184 #define IORING_URING_CMD_MASK IORING_URING_CMD_FIXED 185 #define IORING_FSYNC_DATASYNC (1U << 0) 186 #define IORING_TIMEOUT_ABS (1U << 0) 187 #define IORING_TIMEOUT_UPDATE (1U << 1) 188 #define IORING_TIMEOUT_BOOTTIME (1U << 2) 189 #define IORING_TIMEOUT_REALTIME (1U << 3) 190 #define IORING_LINK_TIMEOUT_UPDATE (1U << 4) 191 #define IORING_TIMEOUT_ETIME_SUCCESS (1U << 5) 192 #define IORING_TIMEOUT_MULTISHOT (1U << 6) 193 #define IORING_TIMEOUT_CLOCK_MASK (IORING_TIMEOUT_BOOTTIME | IORING_TIMEOUT_REALTIME) 194 #define IORING_TIMEOUT_UPDATE_MASK (IORING_TIMEOUT_UPDATE | IORING_LINK_TIMEOUT_UPDATE) 195 #define SPLICE_F_FD_IN_FIXED (1U << 31) 196 #define IORING_POLL_ADD_MULTI (1U << 0) 197 #define IORING_POLL_UPDATE_EVENTS (1U << 1) 198 #define IORING_POLL_UPDATE_USER_DATA (1U << 2) 199 #define IORING_POLL_ADD_LEVEL (1U << 3) 200 #define IORING_ASYNC_CANCEL_ALL (1U << 0) 201 #define IORING_ASYNC_CANCEL_FD (1U << 1) 202 #define IORING_ASYNC_CANCEL_ANY (1U << 2) 203 #define IORING_ASYNC_CANCEL_FD_FIXED (1U << 3) 204 #define IORING_ASYNC_CANCEL_USERDATA (1U << 4) 205 #define IORING_ASYNC_CANCEL_OP (1U << 5) 206 #define IORING_RECVSEND_POLL_FIRST (1U << 0) 207 #define IORING_RECV_MULTISHOT (1U << 1) 208 #define IORING_RECVSEND_FIXED_BUF (1U << 2) 209 #define IORING_SEND_ZC_REPORT_USAGE (1U << 3) 210 #define IORING_RECVSEND_BUNDLE (1U << 4) 211 #define IORING_NOTIF_USAGE_ZC_COPIED (1U << 31) 212 #define IORING_ACCEPT_MULTISHOT (1U << 0) 213 #define IORING_ACCEPT_DONTWAIT (1U << 1) 214 #define IORING_ACCEPT_POLL_FIRST (1U << 2) 215 enum io_uring_msg_ring_flags { 216 IORING_MSG_DATA, 217 IORING_MSG_SEND_FD, 218 }; 219 #define IORING_MSG_RING_CQE_SKIP (1U << 0) 220 #define IORING_MSG_RING_FLAGS_PASS (1U << 1) 221 #define IORING_FIXED_FD_NO_CLOEXEC (1U << 0) 222 #define IORING_NOP_INJECT_RESULT (1U << 0) 223 struct io_uring_cqe { 224 __u64 user_data; 225 __s32 res; 226 __u32 flags; 227 __u64 big_cqe[]; 228 }; 229 #define IORING_CQE_F_BUFFER (1U << 0) 230 #define IORING_CQE_F_MORE (1U << 1) 231 #define IORING_CQE_F_SOCK_NONEMPTY (1U << 2) 232 #define IORING_CQE_F_NOTIF (1U << 3) 233 #define IORING_CQE_BUFFER_SHIFT 16 234 #define IORING_OFF_SQ_RING 0ULL 235 #define IORING_OFF_CQ_RING 0x8000000ULL 236 #define IORING_OFF_SQES 0x10000000ULL 237 #define IORING_OFF_PBUF_RING 0x80000000ULL 238 #define IORING_OFF_PBUF_SHIFT 16 239 #define IORING_OFF_MMAP_MASK 0xf8000000ULL 240 struct io_sqring_offsets { 241 __u32 head; 242 __u32 tail; 243 __u32 ring_mask; 244 __u32 ring_entries; 245 __u32 flags; 246 __u32 dropped; 247 __u32 array; 248 __u32 resv1; 249 __u64 user_addr; 250 }; 251 #define IORING_SQ_NEED_WAKEUP (1U << 0) 252 #define IORING_SQ_CQ_OVERFLOW (1U << 1) 253 #define IORING_SQ_TASKRUN (1U << 2) 254 struct io_cqring_offsets { 255 __u32 head; 256 __u32 tail; 257 __u32 ring_mask; 258 __u32 ring_entries; 259 __u32 overflow; 260 __u32 cqes; 261 __u32 flags; 262 __u32 resv1; 263 __u64 user_addr; 264 }; 265 #define IORING_CQ_EVENTFD_DISABLED (1U << 0) 266 #define IORING_ENTER_GETEVENTS (1U << 0) 267 #define IORING_ENTER_SQ_WAKEUP (1U << 1) 268 #define IORING_ENTER_SQ_WAIT (1U << 2) 269 #define IORING_ENTER_EXT_ARG (1U << 3) 270 #define IORING_ENTER_REGISTERED_RING (1U << 4) 271 struct io_uring_params { 272 __u32 sq_entries; 273 __u32 cq_entries; 274 __u32 flags; 275 __u32 sq_thread_cpu; 276 __u32 sq_thread_idle; 277 __u32 features; 278 __u32 wq_fd; 279 __u32 resv[3]; 280 struct io_sqring_offsets sq_off; 281 struct io_cqring_offsets cq_off; 282 }; 283 #define IORING_FEAT_SINGLE_MMAP (1U << 0) 284 #define IORING_FEAT_NODROP (1U << 1) 285 #define IORING_FEAT_SUBMIT_STABLE (1U << 2) 286 #define IORING_FEAT_RW_CUR_POS (1U << 3) 287 #define IORING_FEAT_CUR_PERSONALITY (1U << 4) 288 #define IORING_FEAT_FAST_POLL (1U << 5) 289 #define IORING_FEAT_POLL_32BITS (1U << 6) 290 #define IORING_FEAT_SQPOLL_NONFIXED (1U << 7) 291 #define IORING_FEAT_EXT_ARG (1U << 8) 292 #define IORING_FEAT_NATIVE_WORKERS (1U << 9) 293 #define IORING_FEAT_RSRC_TAGS (1U << 10) 294 #define IORING_FEAT_CQE_SKIP (1U << 11) 295 #define IORING_FEAT_LINKED_FILE (1U << 12) 296 #define IORING_FEAT_REG_REG_RING (1U << 13) 297 #define IORING_FEAT_RECVSEND_BUNDLE (1U << 14) 298 enum io_uring_register_op { 299 IORING_REGISTER_BUFFERS = 0, 300 IORING_UNREGISTER_BUFFERS = 1, 301 IORING_REGISTER_FILES = 2, 302 IORING_UNREGISTER_FILES = 3, 303 IORING_REGISTER_EVENTFD = 4, 304 IORING_UNREGISTER_EVENTFD = 5, 305 IORING_REGISTER_FILES_UPDATE = 6, 306 IORING_REGISTER_EVENTFD_ASYNC = 7, 307 IORING_REGISTER_PROBE = 8, 308 IORING_REGISTER_PERSONALITY = 9, 309 IORING_UNREGISTER_PERSONALITY = 10, 310 IORING_REGISTER_RESTRICTIONS = 11, 311 IORING_REGISTER_ENABLE_RINGS = 12, 312 IORING_REGISTER_FILES2 = 13, 313 IORING_REGISTER_FILES_UPDATE2 = 14, 314 IORING_REGISTER_BUFFERS2 = 15, 315 IORING_REGISTER_BUFFERS_UPDATE = 16, 316 IORING_REGISTER_IOWQ_AFF = 17, 317 IORING_UNREGISTER_IOWQ_AFF = 18, 318 IORING_REGISTER_IOWQ_MAX_WORKERS = 19, 319 IORING_REGISTER_RING_FDS = 20, 320 IORING_UNREGISTER_RING_FDS = 21, 321 IORING_REGISTER_PBUF_RING = 22, 322 IORING_UNREGISTER_PBUF_RING = 23, 323 IORING_REGISTER_SYNC_CANCEL = 24, 324 IORING_REGISTER_FILE_ALLOC_RANGE = 25, 325 IORING_REGISTER_PBUF_STATUS = 26, 326 IORING_REGISTER_NAPI = 27, 327 IORING_UNREGISTER_NAPI = 28, 328 IORING_REGISTER_LAST, 329 IORING_REGISTER_USE_REGISTERED_RING = 1U << 31 330 }; 331 enum io_wq_type { 332 IO_WQ_BOUND, 333 IO_WQ_UNBOUND, 334 }; 335 struct io_uring_files_update { 336 __u32 offset; 337 __u32 resv; 338 __aligned_u64 fds; 339 }; 340 #define IORING_RSRC_REGISTER_SPARSE (1U << 0) 341 struct io_uring_rsrc_register { 342 __u32 nr; 343 __u32 flags; 344 __u64 resv2; 345 __aligned_u64 data; 346 __aligned_u64 tags; 347 }; 348 struct io_uring_rsrc_update { 349 __u32 offset; 350 __u32 resv; 351 __aligned_u64 data; 352 }; 353 struct io_uring_rsrc_update2 { 354 __u32 offset; 355 __u32 resv; 356 __aligned_u64 data; 357 __aligned_u64 tags; 358 __u32 nr; 359 __u32 resv2; 360 }; 361 #define IORING_REGISTER_FILES_SKIP (- 2) 362 #define IO_URING_OP_SUPPORTED (1U << 0) 363 struct io_uring_probe_op { 364 __u8 op; 365 __u8 resv; 366 __u16 flags; 367 __u32 resv2; 368 }; 369 struct io_uring_probe { 370 __u8 last_op; 371 __u8 ops_len; 372 __u16 resv; 373 __u32 resv2[3]; 374 struct io_uring_probe_op ops[]; 375 }; 376 struct io_uring_restriction { 377 __u16 opcode; 378 union { 379 __u8 register_op; 380 __u8 sqe_op; 381 __u8 sqe_flags; 382 }; 383 __u8 resv; 384 __u32 resv2[3]; 385 }; 386 struct io_uring_buf { 387 __u64 addr; 388 __u32 len; 389 __u16 bid; 390 __u16 resv; 391 }; 392 struct io_uring_buf_ring { 393 union { 394 struct { 395 __u64 resv1; 396 __u32 resv2; 397 __u16 resv3; 398 __u16 tail; 399 }; 400 __DECLARE_FLEX_ARRAY(struct io_uring_buf, bufs); 401 }; 402 }; 403 enum io_uring_register_pbuf_ring_flags { 404 IOU_PBUF_RING_MMAP = 1, 405 }; 406 struct io_uring_buf_reg { 407 __u64 ring_addr; 408 __u32 ring_entries; 409 __u16 bgid; 410 __u16 flags; 411 __u64 resv[3]; 412 }; 413 struct io_uring_buf_status { 414 __u32 buf_group; 415 __u32 head; 416 __u32 resv[8]; 417 }; 418 struct io_uring_napi { 419 __u32 busy_poll_to; 420 __u8 prefer_busy_poll; 421 __u8 pad[3]; 422 __u64 resv; 423 }; 424 enum io_uring_register_restriction_op { 425 IORING_RESTRICTION_REGISTER_OP = 0, 426 IORING_RESTRICTION_SQE_OP = 1, 427 IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2, 428 IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3, 429 IORING_RESTRICTION_LAST 430 }; 431 struct io_uring_getevents_arg { 432 __u64 sigmask; 433 __u32 sigmask_sz; 434 __u32 pad; 435 __u64 ts; 436 }; 437 struct io_uring_sync_cancel_reg { 438 __u64 addr; 439 __s32 fd; 440 __u32 flags; 441 struct __kernel_timespec timeout; 442 __u8 opcode; 443 __u8 pad[7]; 444 __u64 pad2[3]; 445 }; 446 struct io_uring_file_index_range { 447 __u32 off; 448 __u32 len; 449 __u64 resv; 450 }; 451 struct io_uring_recvmsg_out { 452 __u32 namelen; 453 __u32 controllen; 454 __u32 payloadlen; 455 __u32 flags; 456 }; 457 enum io_uring_socket_op { 458 SOCKET_URING_OP_SIOCINQ = 0, 459 SOCKET_URING_OP_SIOCOUTQ, 460 SOCKET_URING_OP_GETSOCKOPT, 461 SOCKET_URING_OP_SETSOCKOPT, 462 }; 463 #ifdef __cplusplus 464 } 465 #endif 466 #endif 467