1 int megaraid_io_interface(int device
, int target
, struct scsi_cmnd_io
*, int);
10 /*======================================================
11 * PERC2/3/4 Passthrough SCSI Command Interface
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)
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'
26 #define MEGA_MBOXCMD_PASSTHRU 0x03
28 #define MAX_REQ_SENSE_LEN 0x20
29 #define MAX_CDB_LEN 10
36 uint8_t islogical
: 1;
42 uint8_t cdb
[MAX_CDB_LEN
];
45 uint8_t reqsensearea
[MAX_REQ_SENSE_LEN
];
46 uint8_t numsgelements
;
48 uint32_t dataxferaddr
;
50 } __attribute__((packed
)) mega_passthru
;
64 } __attribute__((packed
)) megacmd_t
;
68 #if BITS_PER_LONG == 32
85 } __attribute__((packed
)) fcs
;
86 } __attribute__((packed
)) ui
;
91 } __attribute__((packed
));
93 /*===================================================
94 * PERC5/6 Passthrough SCSI Command Interface
97 * drivers/scsi/megaraid/megaraid_sas.h
98 *===================================================*/
99 #define MEGASAS_MAGIC 'M'
100 #define MEGASAS_IOC_FIRMWARE _IOWR(MEGASAS_MAGIC, 1, struct megasas_iocpacket)
102 #define MFI_CMD_PD_SCSI_IO 0x04
103 #define MFI_FRAME_SGL64 0x02
104 #define MFI_FRAME_DIR_READ 0x10
106 #define MAX_IOCTL_SGE 16
108 struct megasas_sge32
{
113 } __attribute__ ((packed
));
115 struct megasas_sge64
{
120 } __attribute__ ((packed
));
124 struct megasas_sge32 sge32
[1];
125 struct megasas_sge64 sge64
[1];
127 } __attribute__ ((packed
));
129 struct megasas_header
{
132 u8 sense_len
; /*01h */
133 u8 cmd_status
; /*02h */
134 u8 scsi_status
; /*03h */
136 u8 target_id
; /*04h */
139 u8 sge_count
; /*07h */
141 u32 context
; /*08h */
145 u16 timeout
; /*12h */
146 u32 data_xferlen
; /*14h */
148 } __attribute__ ((packed
));
150 struct megasas_pthru_frame
{
153 u8 sense_len
; /*01h */
154 u8 cmd_status
; /*02h */
155 u8 scsi_status
; /*03h */
157 u8 target_id
; /*04h */
160 u8 sge_count
; /*07h */
162 u32 context
; /*08h */
166 u16 timeout
; /*12h */
167 u32 data_xfer_len
; /*14h */
169 u32 sense_buf_phys_addr_lo
; /*18h */
170 u32 sense_buf_phys_addr_hi
; /*1Ch */
173 union megasas_sgl sgl
; /*30h */
175 } __attribute__ ((packed
));
177 struct megasas_dcmd_frame
{
180 u8 reserved_0
; /*01h */
181 u8 cmd_status
; /*02h */
182 u8 reserved_1
[4]; /*03h */
183 u8 sge_count
; /*07h */
185 u32 context
; /*08h */
189 u16 timeout
; /*12h */
191 u32 data_xfer_len
; /*14h */
200 union megasas_sgl sgl
; /*28h */
202 } __attribute__ ((packed
));
204 struct megasas_iocpacket
{
214 struct megasas_header hdr
;
217 struct iovec sgl
[MAX_IOCTL_SGE
];
219 } __attribute__ ((packed
));