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 __TARGET_CORE_USER_H
8 #define __TARGET_CORE_USER_H
9 #include <linux/types.h>
10 #include <linux/uio.h>
11 #define TCMU_VERSION "2.0"
12 #define TCMU_MAILBOX_VERSION 2
13 #define ALIGN_SIZE 64
14 #define TCMU_MAILBOX_FLAG_CAP_OOOC (1 << 0)
15 #define TCMU_MAILBOX_FLAG_CAP_READ_LEN (1 << 1)
16 #define TCMU_MAILBOX_FLAG_CAP_TMR (1 << 2)
17 #define TCMU_MAILBOX_FLAG_CAP_KEEP_BUF (1 << 3)
18 struct tcmu_mailbox {
19   __u16 version;
20   __u16 flags;
21   __u32 cmdr_off;
22   __u32 cmdr_size;
23   __u32 cmd_head;
24   __u32 cmd_tail __attribute__((__aligned__(ALIGN_SIZE)));
25 } __attribute__((__packed__));
26 enum tcmu_opcode {
27   TCMU_OP_PAD = 0,
28   TCMU_OP_CMD,
29   TCMU_OP_TMR,
30 };
31 struct tcmu_cmd_entry_hdr {
32   __u32 len_op;
33   __u16 cmd_id;
34   __u8 kflags;
35 #define TCMU_UFLAG_UNKNOWN_OP 0x1
36 #define TCMU_UFLAG_READ_LEN 0x2
37 #define TCMU_UFLAG_KEEP_BUF 0x4
38   __u8 uflags;
39 } __attribute__((__packed__));
40 #define TCMU_OP_MASK 0x7
41 #define TCMU_SENSE_BUFFERSIZE 96
42 struct tcmu_cmd_entry {
43   struct tcmu_cmd_entry_hdr hdr;
44   union {
45     struct {
46       __u32 iov_cnt;
47       __u32 iov_bidi_cnt;
48       __u32 iov_dif_cnt;
49       __u64 cdb_off;
50       __u64 __pad1;
51       __u64 __pad2;
52       __DECLARE_FLEX_ARRAY(struct iovec, iov);
53     } req;
54     struct {
55       __u8 scsi_status;
56       __u8 __pad1;
57       __u16 __pad2;
58       __u32 read_len;
59       char sense_buffer[TCMU_SENSE_BUFFERSIZE];
60     } rsp;
61   };
62 } __attribute__((__packed__));
63 struct tcmu_tmr_entry {
64   struct tcmu_cmd_entry_hdr hdr;
65 #define TCMU_TMR_UNKNOWN 0
66 #define TCMU_TMR_ABORT_TASK 1
67 #define TCMU_TMR_ABORT_TASK_SET 2
68 #define TCMU_TMR_CLEAR_ACA 3
69 #define TCMU_TMR_CLEAR_TASK_SET 4
70 #define TCMU_TMR_LUN_RESET 5
71 #define TCMU_TMR_TARGET_WARM_RESET 6
72 #define TCMU_TMR_TARGET_COLD_RESET 7
73 #define TCMU_TMR_LUN_RESET_PRO 128
74   __u8 tmr_type;
75   __u8 __pad1;
76   __u16 __pad2;
77   __u32 cmd_cnt;
78   __u64 __pad3;
79   __u64 __pad4;
80   __u16 cmd_ids[];
81 } __attribute__((__packed__));
82 #define TCMU_OP_ALIGN_SIZE sizeof(__u64)
83 enum tcmu_genl_cmd {
84   TCMU_CMD_UNSPEC,
85   TCMU_CMD_ADDED_DEVICE,
86   TCMU_CMD_REMOVED_DEVICE,
87   TCMU_CMD_RECONFIG_DEVICE,
88   TCMU_CMD_ADDED_DEVICE_DONE,
89   TCMU_CMD_REMOVED_DEVICE_DONE,
90   TCMU_CMD_RECONFIG_DEVICE_DONE,
91   TCMU_CMD_SET_FEATURES,
92   __TCMU_CMD_MAX,
93 };
94 #define TCMU_CMD_MAX (__TCMU_CMD_MAX - 1)
95 enum tcmu_genl_attr {
96   TCMU_ATTR_UNSPEC,
97   TCMU_ATTR_DEVICE,
98   TCMU_ATTR_MINOR,
99   TCMU_ATTR_PAD,
100   TCMU_ATTR_DEV_CFG,
101   TCMU_ATTR_DEV_SIZE,
102   TCMU_ATTR_WRITECACHE,
103   TCMU_ATTR_CMD_STATUS,
104   TCMU_ATTR_DEVICE_ID,
105   TCMU_ATTR_SUPP_KERN_CMD_REPLY,
106   __TCMU_ATTR_MAX,
107 };
108 #define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1)
109 #endif
110