1 /**************************************************************************** 2 **************************************************************************** 3 *** 4 *** This header was automatically generated from a Linux kernel header 5 *** of the same name, to make information necessary for userspace to 6 *** call into the kernel available to libc. It contains only constants, 7 *** structures, and macros generated from the original header, and thus, 8 *** contains no copyrightable information. 9 *** 10 *** To edit the content of this header, modify the corresponding 11 *** source file (e.g. under external/kernel-headers/original/) then 12 *** run bionic/libc/kernel/tools/update_all.py 13 *** 14 *** Any manual change here will be lost the next time this script will 15 *** be run. You've been warned! 16 *** 17 **************************************************************************** 18 ****************************************************************************/ 19 #ifndef __TARGET_CORE_USER_H 20 #define __TARGET_CORE_USER_H 21 #include <linux/types.h> 22 #include <linux/uio.h> 23 #define TCMU_VERSION "2.0" 24 #define TCMU_MAILBOX_VERSION 2 25 #define ALIGN_SIZE 64 26 #define TCMU_MAILBOX_FLAG_CAP_OOOC (1 << 0) 27 #define TCMU_MAILBOX_FLAG_CAP_READ_LEN (1 << 1) 28 #define TCMU_MAILBOX_FLAG_CAP_TMR (1 << 2) 29 #define TCMU_MAILBOX_FLAG_CAP_KEEP_BUF (1 << 3) 30 struct tcmu_mailbox { 31 __u16 version; 32 __u16 flags; 33 __u32 cmdr_off; 34 __u32 cmdr_size; 35 __u32 cmd_head; 36 __u32 cmd_tail __attribute__((__aligned__(ALIGN_SIZE))); 37 } __attribute__((__packed__)); 38 enum tcmu_opcode { 39 TCMU_OP_PAD = 0, 40 TCMU_OP_CMD, 41 TCMU_OP_TMR, 42 }; 43 struct tcmu_cmd_entry_hdr { 44 __u32 len_op; 45 __u16 cmd_id; 46 __u8 kflags; 47 #define TCMU_UFLAG_UNKNOWN_OP 0x1 48 #define TCMU_UFLAG_READ_LEN 0x2 49 #define TCMU_UFLAG_KEEP_BUF 0x4 50 __u8 uflags; 51 } __attribute__((__packed__)); 52 #define TCMU_OP_MASK 0x7 53 #define TCMU_SENSE_BUFFERSIZE 96 54 struct tcmu_cmd_entry { 55 struct tcmu_cmd_entry_hdr hdr; 56 union { 57 struct { 58 __u32 iov_cnt; 59 __u32 iov_bidi_cnt; 60 __u32 iov_dif_cnt; 61 __u64 cdb_off; 62 __u64 __pad1; 63 __u64 __pad2; 64 struct iovec iov[0]; 65 } req; 66 struct { 67 __u8 scsi_status; 68 __u8 __pad1; 69 __u16 __pad2; 70 __u32 read_len; 71 char sense_buffer[TCMU_SENSE_BUFFERSIZE]; 72 } rsp; 73 }; 74 } __attribute__((__packed__)); 75 struct tcmu_tmr_entry { 76 struct tcmu_cmd_entry_hdr hdr; 77 #define TCMU_TMR_UNKNOWN 0 78 #define TCMU_TMR_ABORT_TASK 1 79 #define TCMU_TMR_ABORT_TASK_SET 2 80 #define TCMU_TMR_CLEAR_ACA 3 81 #define TCMU_TMR_CLEAR_TASK_SET 4 82 #define TCMU_TMR_LUN_RESET 5 83 #define TCMU_TMR_TARGET_WARM_RESET 6 84 #define TCMU_TMR_TARGET_COLD_RESET 7 85 #define TCMU_TMR_LUN_RESET_PRO 128 86 __u8 tmr_type; 87 __u8 __pad1; 88 __u16 __pad2; 89 __u32 cmd_cnt; 90 __u64 __pad3; 91 __u64 __pad4; 92 __u16 cmd_ids[]; 93 } __attribute__((__packed__)); 94 #define TCMU_OP_ALIGN_SIZE sizeof(__u64) 95 enum tcmu_genl_cmd { 96 TCMU_CMD_UNSPEC, 97 TCMU_CMD_ADDED_DEVICE, 98 TCMU_CMD_REMOVED_DEVICE, 99 TCMU_CMD_RECONFIG_DEVICE, 100 TCMU_CMD_ADDED_DEVICE_DONE, 101 TCMU_CMD_REMOVED_DEVICE_DONE, 102 TCMU_CMD_RECONFIG_DEVICE_DONE, 103 TCMU_CMD_SET_FEATURES, 104 __TCMU_CMD_MAX, 105 }; 106 #define TCMU_CMD_MAX (__TCMU_CMD_MAX - 1) 107 enum tcmu_genl_attr { 108 TCMU_ATTR_UNSPEC, 109 TCMU_ATTR_DEVICE, 110 TCMU_ATTR_MINOR, 111 TCMU_ATTR_PAD, 112 TCMU_ATTR_DEV_CFG, 113 TCMU_ATTR_DEV_SIZE, 114 TCMU_ATTR_WRITECACHE, 115 TCMU_ATTR_CMD_STATUS, 116 TCMU_ATTR_DEVICE_ID, 117 TCMU_ATTR_SUPP_KERN_CMD_REPLY, 118 __TCMU_ATTR_MAX, 119 }; 120 #define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1) 121 #endif 122