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