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