Annotation of embedaddon/smartmontools/megaraid.h, revision 1.1
1.1 ! misho 1: int megaraid_io_interface(int device, int target, struct scsi_cmnd_io *, int);
! 2:
! 3: #undef u32
! 4:
! 5: #define u8 uint8_t
! 6: #define u16 uint16_t
! 7: #define u32 uint32_t
! 8: #define u64 uint64_t
! 9:
! 10: /*======================================================
! 11: * PERC2/3/4 Passthrough SCSI Command Interface
! 12: *
! 13: * Contents from:
! 14: * drivers/scsi/megaraid/megaraid_ioctl.h
! 15: * drivers/scsi/megaraid/mbox_defs.h
! 16: *======================================================*/
! 17: #define MEGAIOC_MAGIC 'm'
! 18: #define MEGAIOCCMD _IOWR(MEGAIOC_MAGIC, 0, struct uioctl_t)
! 19:
! 20: /* Following subopcode work for opcode == 0x82 */
! 21: #define MKADAP(adapno) (MEGAIOC_MAGIC << 8 | adapno)
! 22: #define MEGAIOC_QNADAP 'm'
! 23: #define MEGAIOC_QDRVRVER 'e'
! 24: #define MEGAIOC_QADAPINFO 'g'
! 25:
! 26: #define MEGA_MBOXCMD_PASSTHRU 0x03
! 27:
! 28: #define MAX_REQ_SENSE_LEN 0x20
! 29: #define MAX_CDB_LEN 10
! 30:
! 31: typedef struct
! 32: {
! 33: uint8_t timeout : 3;
! 34: uint8_t ars : 1;
! 35: uint8_t reserved : 3;
! 36: uint8_t islogical : 1;
! 37: uint8_t logdrv;
! 38: uint8_t channel;
! 39: uint8_t target;
! 40: uint8_t queuetag;
! 41: uint8_t queueaction;
! 42: uint8_t cdb[MAX_CDB_LEN];
! 43: uint8_t cdblen;
! 44: uint8_t reqsenselen;
! 45: uint8_t reqsensearea[MAX_REQ_SENSE_LEN];
! 46: uint8_t numsgelements;
! 47: uint8_t scsistatus;
! 48: uint32_t dataxferaddr;
! 49: uint32_t dataxferlen;
! 50: } __attribute__((packed)) mega_passthru;
! 51:
! 52: typedef struct
! 53: {
! 54: uint8_t cmd;
! 55: uint8_t cmdid;
! 56: uint8_t opcode;
! 57: uint8_t subopcode;
! 58: uint32_t lba;
! 59: uint32_t xferaddr;
! 60: uint8_t logdrv;
! 61: uint8_t resvd[3];
! 62: uint8_t numstatus;
! 63: uint8_t status;
! 64: } __attribute__((packed)) megacmd_t;
! 65:
! 66: typedef union {
! 67: uint8_t *pointer;
! 68: uint8_t pad[8];
! 69: } ptr_t;
! 70:
! 71: // The above definition assumes sizeof(void*) <= 8.
! 72: // This assumption also exists in the linux megaraid device driver.
! 73: // So define a macro to check expected size of ptr_t at compile time using
! 74: // a dummy typedef. On size mismatch, compiler reports a negative array
! 75: // size. If you see an error message of this form, it means that
! 76: // you have an unexpected pointer size on your platform and can not
! 77: // use megaraid support in smartmontools.
! 78: typedef char assert_sizeof_ptr_t[sizeof(ptr_t) == 8 ? 1 : -1];
! 79:
! 80: struct uioctl_t
! 81: {
! 82: uint32_t inlen;
! 83: uint32_t outlen;
! 84: union {
! 85: uint8_t fca[16];
! 86: struct {
! 87: uint8_t opcode;
! 88: uint8_t subopcode;
! 89: uint16_t adapno;
! 90: ptr_t buffer;
! 91: uint32_t length;
! 92: } __attribute__((packed)) fcs;
! 93: } __attribute__((packed)) ui;
! 94:
! 95: megacmd_t mbox;
! 96: mega_passthru pthru;
! 97: ptr_t data;
! 98: } __attribute__((packed));
! 99:
! 100: /*===================================================
! 101: * PERC5/6 Passthrough SCSI Command Interface
! 102: *
! 103: * Contents from:
! 104: * drivers/scsi/megaraid/megaraid_sas.h
! 105: *===================================================*/
! 106: #define MEGASAS_MAGIC 'M'
! 107: #define MEGASAS_IOC_FIRMWARE _IOWR(MEGASAS_MAGIC, 1, struct megasas_iocpacket)
! 108:
! 109: #define MFI_CMD_PD_SCSI_IO 0x04
! 110: #define MFI_FRAME_SGL64 0x02
! 111: #define MFI_FRAME_DIR_READ 0x10
! 112:
! 113: #define MAX_IOCTL_SGE 16
! 114:
! 115: struct megasas_sge32 {
! 116:
! 117: u32 phys_addr;
! 118: u32 length;
! 119:
! 120: } __attribute__ ((packed));
! 121:
! 122: struct megasas_sge64 {
! 123:
! 124: u64 phys_addr;
! 125: u32 length;
! 126:
! 127: } __attribute__ ((packed));
! 128:
! 129: union megasas_sgl {
! 130:
! 131: struct megasas_sge32 sge32[1];
! 132: struct megasas_sge64 sge64[1];
! 133:
! 134: } __attribute__ ((packed));
! 135:
! 136: struct megasas_header {
! 137:
! 138: u8 cmd; /*00h */
! 139: u8 sense_len; /*01h */
! 140: u8 cmd_status; /*02h */
! 141: u8 scsi_status; /*03h */
! 142:
! 143: u8 target_id; /*04h */
! 144: u8 lun; /*05h */
! 145: u8 cdb_len; /*06h */
! 146: u8 sge_count; /*07h */
! 147:
! 148: u32 context; /*08h */
! 149: u32 pad_0; /*0Ch */
! 150:
! 151: u16 flags; /*10h */
! 152: u16 timeout; /*12h */
! 153: u32 data_xferlen; /*14h */
! 154:
! 155: } __attribute__ ((packed));
! 156:
! 157: struct megasas_pthru_frame {
! 158:
! 159: u8 cmd; /*00h */
! 160: u8 sense_len; /*01h */
! 161: u8 cmd_status; /*02h */
! 162: u8 scsi_status; /*03h */
! 163:
! 164: u8 target_id; /*04h */
! 165: u8 lun; /*05h */
! 166: u8 cdb_len; /*06h */
! 167: u8 sge_count; /*07h */
! 168:
! 169: u32 context; /*08h */
! 170: u32 pad_0; /*0Ch */
! 171:
! 172: u16 flags; /*10h */
! 173: u16 timeout; /*12h */
! 174: u32 data_xfer_len; /*14h */
! 175:
! 176: u32 sense_buf_phys_addr_lo; /*18h */
! 177: u32 sense_buf_phys_addr_hi; /*1Ch */
! 178:
! 179: u8 cdb[16]; /*20h */
! 180: union megasas_sgl sgl; /*30h */
! 181:
! 182: } __attribute__ ((packed));
! 183:
! 184: struct megasas_dcmd_frame {
! 185:
! 186: u8 cmd; /*00h */
! 187: u8 reserved_0; /*01h */
! 188: u8 cmd_status; /*02h */
! 189: u8 reserved_1[4]; /*03h */
! 190: u8 sge_count; /*07h */
! 191:
! 192: u32 context; /*08h */
! 193: u32 pad_0; /*0Ch */
! 194:
! 195: u16 flags; /*10h */
! 196: u16 timeout; /*12h */
! 197:
! 198: u32 data_xfer_len; /*14h */
! 199: u32 opcode; /*18h */
! 200:
! 201: union { /*1Ch */
! 202: u8 b[12];
! 203: u16 s[6];
! 204: u32 w[3];
! 205: } mbox;
! 206:
! 207: union megasas_sgl sgl; /*28h */
! 208:
! 209: } __attribute__ ((packed));
! 210:
! 211: struct megasas_iocpacket {
! 212:
! 213: u16 host_no;
! 214: u16 __pad1;
! 215: u32 sgl_off;
! 216: u32 sge_count;
! 217: u32 sense_off;
! 218: u32 sense_len;
! 219: union {
! 220: u8 raw[128];
! 221: struct megasas_header hdr;
! 222: struct megasas_pthru_frame pthru;
! 223: } frame;
! 224:
! 225: struct iovec sgl[MAX_IOCTL_SGE];
! 226:
! 227: } __attribute__ ((packed));
! 228:
! 229: #undef u8
! 230: #undef u16
! 231: #undef u32
! 232: #undef u64
! 233:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>