This source file includes following definitions.
- tcmu_hdr_get_op
- tcmu_hdr_set_op
- tcmu_hdr_get_len
- tcmu_hdr_set_len
   1 
   2 #ifndef __TARGET_CORE_USER_H
   3 #define __TARGET_CORE_USER_H
   4 
   5 
   6 
   7 #include <linux/types.h>
   8 #include <linux/uio.h>
   9 
  10 #define TCMU_VERSION "2.0"
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 
  43 
  44 #define TCMU_MAILBOX_VERSION 2
  45 #define ALIGN_SIZE 64 
  46 #define TCMU_MAILBOX_FLAG_CAP_OOOC (1 << 0) 
  47 #define TCMU_MAILBOX_FLAG_CAP_READ_LEN (1 << 1) 
  48 
  49 struct tcmu_mailbox {
  50         __u16 version;
  51         __u16 flags;
  52         __u32 cmdr_off;
  53         __u32 cmdr_size;
  54 
  55         __u32 cmd_head;
  56 
  57         
  58         __u32 cmd_tail __attribute__((__aligned__(ALIGN_SIZE)));
  59 
  60 } __packed;
  61 
  62 enum tcmu_opcode {
  63         TCMU_OP_PAD = 0,
  64         TCMU_OP_CMD,
  65 };
  66 
  67 
  68 
  69 
  70 struct tcmu_cmd_entry_hdr {
  71         __u32 len_op;
  72         __u16 cmd_id;
  73         __u8 kflags;
  74 #define TCMU_UFLAG_UNKNOWN_OP 0x1
  75 #define TCMU_UFLAG_READ_LEN   0x2
  76         __u8 uflags;
  77 
  78 } __packed;
  79 
  80 #define TCMU_OP_MASK 0x7
  81 
  82 static inline enum tcmu_opcode tcmu_hdr_get_op(__u32 len_op)
  83 {
  84         return len_op & TCMU_OP_MASK;
  85 }
  86 
  87 static inline void tcmu_hdr_set_op(__u32 *len_op, enum tcmu_opcode op)
  88 {
  89         *len_op &= ~TCMU_OP_MASK;
  90         *len_op |= (op & TCMU_OP_MASK);
  91 }
  92 
  93 static inline __u32 tcmu_hdr_get_len(__u32 len_op)
  94 {
  95         return len_op & ~TCMU_OP_MASK;
  96 }
  97 
  98 static inline void tcmu_hdr_set_len(__u32 *len_op, __u32 len)
  99 {
 100         *len_op &= TCMU_OP_MASK;
 101         *len_op |= len;
 102 }
 103 
 104 
 105 #define TCMU_SENSE_BUFFERSIZE 96
 106 
 107 struct tcmu_cmd_entry {
 108         struct tcmu_cmd_entry_hdr hdr;
 109 
 110         union {
 111                 struct {
 112                         __u32 iov_cnt;
 113                         __u32 iov_bidi_cnt;
 114                         __u32 iov_dif_cnt;
 115                         __u64 cdb_off;
 116                         __u64 __pad1;
 117                         __u64 __pad2;
 118                         struct iovec iov[0];
 119                 } req;
 120                 struct {
 121                         __u8 scsi_status;
 122                         __u8 __pad1;
 123                         __u16 __pad2;
 124                         __u32 read_len;
 125                         char sense_buffer[TCMU_SENSE_BUFFERSIZE];
 126                 } rsp;
 127         };
 128 
 129 } __packed;
 130 
 131 #define TCMU_OP_ALIGN_SIZE sizeof(__u64)
 132 
 133 enum tcmu_genl_cmd {
 134         TCMU_CMD_UNSPEC,
 135         TCMU_CMD_ADDED_DEVICE,
 136         TCMU_CMD_REMOVED_DEVICE,
 137         TCMU_CMD_RECONFIG_DEVICE,
 138         TCMU_CMD_ADDED_DEVICE_DONE,
 139         TCMU_CMD_REMOVED_DEVICE_DONE,
 140         TCMU_CMD_RECONFIG_DEVICE_DONE,
 141         TCMU_CMD_SET_FEATURES,
 142         __TCMU_CMD_MAX,
 143 };
 144 #define TCMU_CMD_MAX (__TCMU_CMD_MAX - 1)
 145 
 146 enum tcmu_genl_attr {
 147         TCMU_ATTR_UNSPEC,
 148         TCMU_ATTR_DEVICE,
 149         TCMU_ATTR_MINOR,
 150         TCMU_ATTR_PAD,
 151         TCMU_ATTR_DEV_CFG,
 152         TCMU_ATTR_DEV_SIZE,
 153         TCMU_ATTR_WRITECACHE,
 154         TCMU_ATTR_CMD_STATUS,
 155         TCMU_ATTR_DEVICE_ID,
 156         TCMU_ATTR_SUPP_KERN_CMD_REPLY,
 157         __TCMU_ATTR_MAX,
 158 };
 159 #define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1)
 160 
 161 #endif