xref: /aosp_15_r20/bionic/libc/kernel/uapi/linux/ublk_cmd.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker  * This file is auto-generated. Modifications will be lost.
3*8d67ca89SAndroid Build Coastguard Worker  *
4*8d67ca89SAndroid Build Coastguard Worker  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5*8d67ca89SAndroid Build Coastguard Worker  * for more information.
6*8d67ca89SAndroid Build Coastguard Worker  */
7*8d67ca89SAndroid Build Coastguard Worker #ifndef USER_BLK_DRV_CMD_INC_H
8*8d67ca89SAndroid Build Coastguard Worker #define USER_BLK_DRV_CMD_INC_H
9*8d67ca89SAndroid Build Coastguard Worker #include <linux/types.h>
10*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_GET_QUEUE_AFFINITY 0x01
11*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_GET_DEV_INFO 0x02
12*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_ADD_DEV 0x04
13*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_DEL_DEV 0x05
14*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_START_DEV 0x06
15*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_STOP_DEV 0x07
16*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_SET_PARAMS 0x08
17*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_GET_PARAMS 0x09
18*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_START_USER_RECOVERY 0x10
19*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_END_USER_RECOVERY 0x11
20*8d67ca89SAndroid Build Coastguard Worker #define UBLK_CMD_GET_DEV_INFO2 0x12
21*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_GET_QUEUE_AFFINITY _IOR('u', UBLK_CMD_GET_QUEUE_AFFINITY, struct ublksrv_ctrl_cmd)
22*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_GET_DEV_INFO _IOR('u', UBLK_CMD_GET_DEV_INFO, struct ublksrv_ctrl_cmd)
23*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_ADD_DEV _IOWR('u', UBLK_CMD_ADD_DEV, struct ublksrv_ctrl_cmd)
24*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_DEL_DEV _IOWR('u', UBLK_CMD_DEL_DEV, struct ublksrv_ctrl_cmd)
25*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_START_DEV _IOWR('u', UBLK_CMD_START_DEV, struct ublksrv_ctrl_cmd)
26*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_STOP_DEV _IOWR('u', UBLK_CMD_STOP_DEV, struct ublksrv_ctrl_cmd)
27*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_SET_PARAMS _IOWR('u', UBLK_CMD_SET_PARAMS, struct ublksrv_ctrl_cmd)
28*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_GET_PARAMS _IOR('u', UBLK_CMD_GET_PARAMS, struct ublksrv_ctrl_cmd)
29*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_START_USER_RECOVERY _IOWR('u', UBLK_CMD_START_USER_RECOVERY, struct ublksrv_ctrl_cmd)
30*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_END_USER_RECOVERY _IOWR('u', UBLK_CMD_END_USER_RECOVERY, struct ublksrv_ctrl_cmd)
31*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_GET_DEV_INFO2 _IOR('u', UBLK_CMD_GET_DEV_INFO2, struct ublksrv_ctrl_cmd)
32*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_GET_FEATURES _IOR('u', 0x13, struct ublksrv_ctrl_cmd)
33*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_CMD_DEL_DEV_ASYNC _IOR('u', 0x14, struct ublksrv_ctrl_cmd)
34*8d67ca89SAndroid Build Coastguard Worker #define UBLK_FEATURES_LEN 8
35*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_FETCH_REQ 0x20
36*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_COMMIT_AND_FETCH_REQ 0x21
37*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_NEED_GET_DATA 0x22
38*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_IO_FETCH_REQ _IOWR('u', UBLK_IO_FETCH_REQ, struct ublksrv_io_cmd)
39*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_IO_COMMIT_AND_FETCH_REQ _IOWR('u', UBLK_IO_COMMIT_AND_FETCH_REQ, struct ublksrv_io_cmd)
40*8d67ca89SAndroid Build Coastguard Worker #define UBLK_U_IO_NEED_GET_DATA _IOWR('u', UBLK_IO_NEED_GET_DATA, struct ublksrv_io_cmd)
41*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_RES_OK 0
42*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_RES_NEED_GET_DATA 1
43*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_RES_ABORT (- ENODEV)
44*8d67ca89SAndroid Build Coastguard Worker #define UBLKSRV_CMD_BUF_OFFSET 0
45*8d67ca89SAndroid Build Coastguard Worker #define UBLKSRV_IO_BUF_OFFSET 0x80000000
46*8d67ca89SAndroid Build Coastguard Worker #define UBLK_MAX_QUEUE_DEPTH 4096
47*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_BUF_OFF 0
48*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_BUF_BITS 25
49*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_BUF_BITS_MASK ((1ULL << UBLK_IO_BUF_BITS) - 1)
50*8d67ca89SAndroid Build Coastguard Worker #define UBLK_TAG_OFF UBLK_IO_BUF_BITS
51*8d67ca89SAndroid Build Coastguard Worker #define UBLK_TAG_BITS 16
52*8d67ca89SAndroid Build Coastguard Worker #define UBLK_TAG_BITS_MASK ((1ULL << UBLK_TAG_BITS) - 1)
53*8d67ca89SAndroid Build Coastguard Worker #define UBLK_QID_OFF (UBLK_TAG_OFF + UBLK_TAG_BITS)
54*8d67ca89SAndroid Build Coastguard Worker #define UBLK_QID_BITS 12
55*8d67ca89SAndroid Build Coastguard Worker #define UBLK_QID_BITS_MASK ((1ULL << UBLK_QID_BITS) - 1)
56*8d67ca89SAndroid Build Coastguard Worker #define UBLK_MAX_NR_QUEUES (1U << UBLK_QID_BITS)
57*8d67ca89SAndroid Build Coastguard Worker #define UBLKSRV_IO_BUF_TOTAL_BITS (UBLK_QID_OFF + UBLK_QID_BITS)
58*8d67ca89SAndroid Build Coastguard Worker #define UBLKSRV_IO_BUF_TOTAL_SIZE (1ULL << UBLKSRV_IO_BUF_TOTAL_BITS)
59*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_SUPPORT_ZERO_COPY (1ULL << 0)
60*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_URING_CMD_COMP_IN_TASK (1ULL << 1)
61*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_NEED_GET_DATA (1UL << 2)
62*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_USER_RECOVERY (1UL << 3)
63*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_USER_RECOVERY_REISSUE (1UL << 4)
64*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_UNPRIVILEGED_DEV (1UL << 5)
65*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_CMD_IOCTL_ENCODE (1UL << 6)
66*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_USER_COPY (1UL << 7)
67*8d67ca89SAndroid Build Coastguard Worker #define UBLK_F_ZONED (1ULL << 8)
68*8d67ca89SAndroid Build Coastguard Worker #define UBLK_S_DEV_DEAD 0
69*8d67ca89SAndroid Build Coastguard Worker #define UBLK_S_DEV_LIVE 1
70*8d67ca89SAndroid Build Coastguard Worker #define UBLK_S_DEV_QUIESCED 2
71*8d67ca89SAndroid Build Coastguard Worker struct ublksrv_ctrl_cmd {
72*8d67ca89SAndroid Build Coastguard Worker   __u32 dev_id;
73*8d67ca89SAndroid Build Coastguard Worker   __u16 queue_id;
74*8d67ca89SAndroid Build Coastguard Worker   __u16 len;
75*8d67ca89SAndroid Build Coastguard Worker   __u64 addr;
76*8d67ca89SAndroid Build Coastguard Worker   __u64 data[1];
77*8d67ca89SAndroid Build Coastguard Worker   __u16 dev_path_len;
78*8d67ca89SAndroid Build Coastguard Worker   __u16 pad;
79*8d67ca89SAndroid Build Coastguard Worker   __u32 reserved;
80*8d67ca89SAndroid Build Coastguard Worker };
81*8d67ca89SAndroid Build Coastguard Worker struct ublksrv_ctrl_dev_info {
82*8d67ca89SAndroid Build Coastguard Worker   __u16 nr_hw_queues;
83*8d67ca89SAndroid Build Coastguard Worker   __u16 queue_depth;
84*8d67ca89SAndroid Build Coastguard Worker   __u16 state;
85*8d67ca89SAndroid Build Coastguard Worker   __u16 pad0;
86*8d67ca89SAndroid Build Coastguard Worker   __u32 max_io_buf_bytes;
87*8d67ca89SAndroid Build Coastguard Worker   __u32 dev_id;
88*8d67ca89SAndroid Build Coastguard Worker   __s32 ublksrv_pid;
89*8d67ca89SAndroid Build Coastguard Worker   __u32 pad1;
90*8d67ca89SAndroid Build Coastguard Worker   __u64 flags;
91*8d67ca89SAndroid Build Coastguard Worker   __u64 ublksrv_flags;
92*8d67ca89SAndroid Build Coastguard Worker   __u32 owner_uid;
93*8d67ca89SAndroid Build Coastguard Worker   __u32 owner_gid;
94*8d67ca89SAndroid Build Coastguard Worker   __u64 reserved1;
95*8d67ca89SAndroid Build Coastguard Worker   __u64 reserved2;
96*8d67ca89SAndroid Build Coastguard Worker };
97*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_READ 0
98*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_WRITE 1
99*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_FLUSH 2
100*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_DISCARD 3
101*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_WRITE_SAME 4
102*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_WRITE_ZEROES 5
103*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_ZONE_OPEN 10
104*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_ZONE_CLOSE 11
105*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_ZONE_FINISH 12
106*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_ZONE_APPEND 13
107*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_ZONE_RESET_ALL 14
108*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_ZONE_RESET 15
109*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_OP_REPORT_ZONES 18
110*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_F_FAILFAST_DEV (1U << 8)
111*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_F_FAILFAST_TRANSPORT (1U << 9)
112*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_F_FAILFAST_DRIVER (1U << 10)
113*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_F_META (1U << 11)
114*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_F_FUA (1U << 13)
115*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_F_NOUNMAP (1U << 15)
116*8d67ca89SAndroid Build Coastguard Worker #define UBLK_IO_F_SWAP (1U << 16)
117*8d67ca89SAndroid Build Coastguard Worker struct ublksrv_io_desc {
118*8d67ca89SAndroid Build Coastguard Worker   __u32 op_flags;
119*8d67ca89SAndroid Build Coastguard Worker   union {
120*8d67ca89SAndroid Build Coastguard Worker     __u32 nr_sectors;
121*8d67ca89SAndroid Build Coastguard Worker     __u32 nr_zones;
122*8d67ca89SAndroid Build Coastguard Worker   };
123*8d67ca89SAndroid Build Coastguard Worker   __u64 start_sector;
124*8d67ca89SAndroid Build Coastguard Worker   __u64 addr;
125*8d67ca89SAndroid Build Coastguard Worker };
126*8d67ca89SAndroid Build Coastguard Worker struct ublksrv_io_cmd {
127*8d67ca89SAndroid Build Coastguard Worker   __u16 q_id;
128*8d67ca89SAndroid Build Coastguard Worker   __u16 tag;
129*8d67ca89SAndroid Build Coastguard Worker   __s32 result;
130*8d67ca89SAndroid Build Coastguard Worker   union {
131*8d67ca89SAndroid Build Coastguard Worker     __u64 addr;
132*8d67ca89SAndroid Build Coastguard Worker     __u64 zone_append_lba;
133*8d67ca89SAndroid Build Coastguard Worker   };
134*8d67ca89SAndroid Build Coastguard Worker };
135*8d67ca89SAndroid Build Coastguard Worker struct ublk_param_basic {
136*8d67ca89SAndroid Build Coastguard Worker #define UBLK_ATTR_READ_ONLY (1 << 0)
137*8d67ca89SAndroid Build Coastguard Worker #define UBLK_ATTR_ROTATIONAL (1 << 1)
138*8d67ca89SAndroid Build Coastguard Worker #define UBLK_ATTR_VOLATILE_CACHE (1 << 2)
139*8d67ca89SAndroid Build Coastguard Worker #define UBLK_ATTR_FUA (1 << 3)
140*8d67ca89SAndroid Build Coastguard Worker   __u32 attrs;
141*8d67ca89SAndroid Build Coastguard Worker   __u8 logical_bs_shift;
142*8d67ca89SAndroid Build Coastguard Worker   __u8 physical_bs_shift;
143*8d67ca89SAndroid Build Coastguard Worker   __u8 io_opt_shift;
144*8d67ca89SAndroid Build Coastguard Worker   __u8 io_min_shift;
145*8d67ca89SAndroid Build Coastguard Worker   __u32 max_sectors;
146*8d67ca89SAndroid Build Coastguard Worker   __u32 chunk_sectors;
147*8d67ca89SAndroid Build Coastguard Worker   __u64 dev_sectors;
148*8d67ca89SAndroid Build Coastguard Worker   __u64 virt_boundary_mask;
149*8d67ca89SAndroid Build Coastguard Worker };
150*8d67ca89SAndroid Build Coastguard Worker struct ublk_param_discard {
151*8d67ca89SAndroid Build Coastguard Worker   __u32 discard_alignment;
152*8d67ca89SAndroid Build Coastguard Worker   __u32 discard_granularity;
153*8d67ca89SAndroid Build Coastguard Worker   __u32 max_discard_sectors;
154*8d67ca89SAndroid Build Coastguard Worker   __u32 max_write_zeroes_sectors;
155*8d67ca89SAndroid Build Coastguard Worker   __u16 max_discard_segments;
156*8d67ca89SAndroid Build Coastguard Worker   __u16 reserved0;
157*8d67ca89SAndroid Build Coastguard Worker };
158*8d67ca89SAndroid Build Coastguard Worker struct ublk_param_devt {
159*8d67ca89SAndroid Build Coastguard Worker   __u32 char_major;
160*8d67ca89SAndroid Build Coastguard Worker   __u32 char_minor;
161*8d67ca89SAndroid Build Coastguard Worker   __u32 disk_major;
162*8d67ca89SAndroid Build Coastguard Worker   __u32 disk_minor;
163*8d67ca89SAndroid Build Coastguard Worker };
164*8d67ca89SAndroid Build Coastguard Worker struct ublk_param_zoned {
165*8d67ca89SAndroid Build Coastguard Worker   __u32 max_open_zones;
166*8d67ca89SAndroid Build Coastguard Worker   __u32 max_active_zones;
167*8d67ca89SAndroid Build Coastguard Worker   __u32 max_zone_append_sectors;
168*8d67ca89SAndroid Build Coastguard Worker   __u8 reserved[20];
169*8d67ca89SAndroid Build Coastguard Worker };
170*8d67ca89SAndroid Build Coastguard Worker struct ublk_params {
171*8d67ca89SAndroid Build Coastguard Worker   __u32 len;
172*8d67ca89SAndroid Build Coastguard Worker #define UBLK_PARAM_TYPE_BASIC (1 << 0)
173*8d67ca89SAndroid Build Coastguard Worker #define UBLK_PARAM_TYPE_DISCARD (1 << 1)
174*8d67ca89SAndroid Build Coastguard Worker #define UBLK_PARAM_TYPE_DEVT (1 << 2)
175*8d67ca89SAndroid Build Coastguard Worker #define UBLK_PARAM_TYPE_ZONED (1 << 3)
176*8d67ca89SAndroid Build Coastguard Worker   __u32 types;
177*8d67ca89SAndroid Build Coastguard Worker   struct ublk_param_basic basic;
178*8d67ca89SAndroid Build Coastguard Worker   struct ublk_param_discard discard;
179*8d67ca89SAndroid Build Coastguard Worker   struct ublk_param_devt devt;
180*8d67ca89SAndroid Build Coastguard Worker   struct ublk_param_zoned zoned;
181*8d67ca89SAndroid Build Coastguard Worker };
182*8d67ca89SAndroid Build Coastguard Worker #endif
183