1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 #ifndef LINUX_IO_URING_H
   9 #define LINUX_IO_URING_H
  10 
  11 #include <linux/fs.h>
  12 #include <linux/types.h>
  13 
  14 
  15 
  16 
  17 struct io_uring_sqe {
  18         __u8    opcode;         
  19         __u8    flags;          
  20         __u16   ioprio;         
  21         __s32   fd;             
  22         __u64   off;            
  23         __u64   addr;           
  24         __u32   len;            
  25         union {
  26                 __kernel_rwf_t  rw_flags;
  27                 __u32           fsync_flags;
  28                 __u16           poll_events;
  29                 __u32           sync_range_flags;
  30                 __u32           msg_flags;
  31                 __u32           timeout_flags;
  32         };
  33         __u64   user_data;      
  34         union {
  35                 __u16   buf_index;      
  36                 __u64   __pad2[3];
  37         };
  38 };
  39 
  40 
  41 
  42 
  43 #define IOSQE_FIXED_FILE        (1U << 0)       
  44 #define IOSQE_IO_DRAIN          (1U << 1)       
  45 #define IOSQE_IO_LINK           (1U << 2)       
  46 
  47 
  48 
  49 
  50 #define IORING_SETUP_IOPOLL     (1U << 0)       
  51 #define IORING_SETUP_SQPOLL     (1U << 1)       
  52 #define IORING_SETUP_SQ_AFF     (1U << 2)       
  53 
  54 #define IORING_OP_NOP           0
  55 #define IORING_OP_READV         1
  56 #define IORING_OP_WRITEV        2
  57 #define IORING_OP_FSYNC         3
  58 #define IORING_OP_READ_FIXED    4
  59 #define IORING_OP_WRITE_FIXED   5
  60 #define IORING_OP_POLL_ADD      6
  61 #define IORING_OP_POLL_REMOVE   7
  62 #define IORING_OP_SYNC_FILE_RANGE       8
  63 #define IORING_OP_SENDMSG       9
  64 #define IORING_OP_RECVMSG       10
  65 #define IORING_OP_TIMEOUT       11
  66 
  67 
  68 
  69 
  70 #define IORING_FSYNC_DATASYNC   (1U << 0)
  71 
  72 
  73 
  74 
  75 struct io_uring_cqe {
  76         __u64   user_data;      
  77         __s32   res;            
  78         __u32   flags;
  79 };
  80 
  81 
  82 
  83 
  84 #define IORING_OFF_SQ_RING              0ULL
  85 #define IORING_OFF_CQ_RING              0x8000000ULL
  86 #define IORING_OFF_SQES                 0x10000000ULL
  87 
  88 
  89 
  90 
  91 struct io_sqring_offsets {
  92         __u32 head;
  93         __u32 tail;
  94         __u32 ring_mask;
  95         __u32 ring_entries;
  96         __u32 flags;
  97         __u32 dropped;
  98         __u32 array;
  99         __u32 resv1;
 100         __u64 resv2;
 101 };
 102 
 103 
 104 
 105 
 106 #define IORING_SQ_NEED_WAKEUP   (1U << 0) 
 107 
 108 struct io_cqring_offsets {
 109         __u32 head;
 110         __u32 tail;
 111         __u32 ring_mask;
 112         __u32 ring_entries;
 113         __u32 overflow;
 114         __u32 cqes;
 115         __u64 resv[2];
 116 };
 117 
 118 
 119 
 120 
 121 #define IORING_ENTER_GETEVENTS  (1U << 0)
 122 #define IORING_ENTER_SQ_WAKEUP  (1U << 1)
 123 
 124 
 125 
 126 
 127 struct io_uring_params {
 128         __u32 sq_entries;
 129         __u32 cq_entries;
 130         __u32 flags;
 131         __u32 sq_thread_cpu;
 132         __u32 sq_thread_idle;
 133         __u32 features;
 134         __u32 resv[4];
 135         struct io_sqring_offsets sq_off;
 136         struct io_cqring_offsets cq_off;
 137 };
 138 
 139 
 140 
 141 
 142 #define IORING_FEAT_SINGLE_MMAP         (1U << 0)
 143 
 144 
 145 
 146 
 147 #define IORING_REGISTER_BUFFERS         0
 148 #define IORING_UNREGISTER_BUFFERS       1
 149 #define IORING_REGISTER_FILES           2
 150 #define IORING_UNREGISTER_FILES         3
 151 #define IORING_REGISTER_EVENTFD         4
 152 #define IORING_UNREGISTER_EVENTFD       5
 153 
 154 #endif