Annotation of embedaddon/smartmontools/megaraid.h, revision 1.1.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>