Print this page
Initial modifications using the code changes present between
the LSI source code for FreeBSD drivers. Specifically the changes
between from mpslsi-source-17.00.00.00 -> mpslsi-source-03.00.00.00.
This mainly involves using a different scatter/gather element in
frame setup.
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/uts/common/sys/scsi/adapters/mpt_sas3/mpi/mpi2_init.h
+++ new/usr/src/uts/common/sys/scsi/adapters/mpt_sas3/mpi/mpi2_init.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
↓ open down ↓ |
12 lines elided |
↑ open up ↑ |
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21
22 22 /*
23 - * Copyright (c) 2000 to 2009, LSI Corporation.
24 - * All rights reserved.
23 + * Copyright (c) 2000-2012 LSI Corporation.
25 24 *
26 25 * Redistribution and use in source and binary forms of all code within
27 26 * this file that is exclusively owned by LSI, with or without
28 27 * modification, is permitted provided that, in addition to the CDDL 1.0
29 28 * License requirements, the following conditions are met:
30 29 *
31 30 * Neither the name of the author nor the names of its contributors may be
32 31 * used to endorse or promote products derived from this software without
33 32 * specific prior written permission.
34 33 *
35 34 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36 35 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37 36 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
38 37 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
39 38 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
40 39 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
41 40 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
42 41 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
43 42 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
↓ open down ↓ |
9 lines elided |
↑ open up ↑ |
44 43 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45 44 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
46 45 * DAMAGE.
47 46 */
48 47
49 48 /*
50 49 * Name: mpi2_init.h
51 50 * Title: MPI SCSI initiator mode messages and structures
52 51 * Creation Date: June 23, 2006
53 52 *
54 - * mpi2_init.h Version: 02.00.07
53 + * mpi2_init.h Version: 02.00.xx
54 + *
55 + * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
56 + * prefix are for use only on MPI v2.5 products, and must not be used
57 + * with MPI v2.0 products. Unless otherwise noted, names beginning with
58 + * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products.
55 59 *
56 60 * Version History
57 61 * ---------------
58 62 *
59 63 * Date Version Description
60 64 * -------- -------- ------------------------------------------------------
61 65 * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A.
62 66 * 10-31-07 02.00.01 Fixed name for pMpi2SCSITaskManagementRequest_t.
63 67 * 12-18-07 02.00.02 Modified Task Management Target Reset Method defines.
64 68 * 02-29-08 02.00.03 Added Query Task Set and Query Unit Attention.
65 69 * 03-03-08 02.00.04 Fixed name of struct _MPI2_SCSI_TASK_MANAGE_REPLY.
66 70 * 05-21-08 02.00.05 Fixed typo in name of Mpi2SepRequest_t.
67 71 * 10-02-08 02.00.06 Removed Untagged and No Disconnect values from SCSI IO
68 72 * Control field Task Attribute flags.
69 73 * Moved LUN field defines to mpi2.h becasue they are
70 74 * common to many structures.
71 75 * 05-06-09 02.00.07 Changed task management type of Query Unit Attention to
72 76 * Query Asynchronous Event.
73 77 * Defined two new bits in the SlotStatus field of the SCSI
74 78 * Enclosure Processor Request and Reply.
79 + * 10-28-09 02.00.08 Added defines for decoding the ResponseInfo bytes for
80 + * both SCSI IO Error Reply and SCSI Task Management Reply.
81 + * Added ResponseInfo field to MPI2_SCSI_TASK_MANAGE_REPLY.
82 + * Added MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG define.
83 + * 02-10-10 02.00.09 Removed unused structure that had "#if 0" around it.
84 + * 05-12-10 02.00.10 Added optional vendor-unique region to SCSI IO Request.
85 + * 11-10-10 02.00.11 Added MPI2_SCSIIO_NUM_SGLOFFSETS define.
75 86 * --------------------------------------------------------------------------
76 87 */
77 88
78 89 #ifndef MPI2_INIT_H
79 90 #define MPI2_INIT_H
80 91
81 92 /*****************************************************************************
82 93 *
83 94 * SCSI Initiator Messages
84 95 *
85 96 *****************************************************************************/
86 97
87 98 /****************************************************************************
88 99 * SCSI IO messages and associated structures
89 100 ****************************************************************************/
90 101
↓ open down ↓ |
6 lines elided |
↑ open up ↑ |
91 102 typedef struct
92 103 {
93 104 U8 CDB[20]; /* 0x00 */
94 105 U32 PrimaryReferenceTag; /* 0x14 */
95 106 U16 PrimaryApplicationTag; /* 0x18 */
96 107 U16 PrimaryApplicationTagMask; /* 0x1A */
97 108 U32 TransferLength; /* 0x1C */
98 109 } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32,
99 110 Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t;
100 111
101 -/* TBD: I don't think this is needed for MPI2/Gen2 */
102 -#if 0
103 -typedef struct
104 -{
105 - U8 CDB[16]; /* 0x00 */
106 - U32 DataLength; /* 0x10 */
107 - U32 PrimaryReferenceTag; /* 0x14 */
108 - U16 PrimaryApplicationTag; /* 0x18 */
109 - U16 PrimaryApplicationTagMask; /* 0x1A */
110 - U32 TransferLength; /* 0x1C */
111 -} MPI2_SCSI_IO32_CDB_EEDP16, MPI2_POINTER PTR_MPI2_SCSI_IO32_CDB_EEDP16,
112 - Mpi2ScsiIo32CdbEedp16_t, MPI2_POINTER pMpi2ScsiIo32CdbEedp16_t;
113 -#endif
114 -
115 112 typedef union
116 113 {
117 114 U8 CDB32[32];
118 115 MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
119 116 MPI2_SGE_SIMPLE_UNION SGE;
120 117 } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION,
121 118 Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t;
122 119
123 -/* SCSI IO Request Message */
120 +/* MPI v2.0 SCSI IO Request Message */
124 121 typedef struct _MPI2_SCSI_IO_REQUEST
125 122 {
126 123 U16 DevHandle; /* 0x00 */
127 124 U8 ChainOffset; /* 0x02 */
128 125 U8 Function; /* 0x03 */
129 126 U16 Reserved1; /* 0x04 */
130 127 U8 Reserved2; /* 0x06 */
131 128 U8 MsgFlags; /* 0x07 */
132 129 U8 VP_ID; /* 0x08 */
133 130 U8 VF_ID; /* 0x09 */
134 131 U16 Reserved3; /* 0x0A */
135 132 U32 SenseBufferLowAddress; /* 0x0C */
136 133 U16 SGLFlags; /* 0x10 */
137 134 U8 SenseBufferLength; /* 0x12 */
138 135 U8 Reserved4; /* 0x13 */
139 136 U8 SGLOffset0; /* 0x14 */
140 137 U8 SGLOffset1; /* 0x15 */
141 138 U8 SGLOffset2; /* 0x16 */
142 139 U8 SGLOffset3; /* 0x17 */
143 140 U32 SkipCount; /* 0x18 */
144 141 U32 DataLength; /* 0x1C */
145 142 U32 BidirectionalDataLength; /* 0x20 */
146 143 U16 IoFlags; /* 0x24 */
147 144 U16 EEDPFlags; /* 0x26 */
148 145 U32 EEDPBlockSize; /* 0x28 */
149 146 U32 SecondaryReferenceTag; /* 0x2C */
150 147 U16 SecondaryApplicationTag; /* 0x30 */
151 148 U16 ApplicationTagTranslationMask; /* 0x32 */
152 149 U8 LUN[8]; /* 0x34 */
153 150 U32 Control; /* 0x3C */
154 151 MPI2_SCSI_IO_CDB_UNION CDB; /* 0x40 */
155 152 MPI2_SGE_IO_UNION SGL; /* 0x60 */
156 153 } MPI2_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST,
157 154 Mpi2SCSIIORequest_t, MPI2_POINTER pMpi2SCSIIORequest_t;
158 155
159 156 /* SCSI IO MsgFlags bits */
160 157
161 158 /* MsgFlags for SenseBufferAddressSpace */
162 159 #define MPI2_SCSIIO_MSGFLAGS_MASK_SENSE_ADDR (0x0C)
163 160 #define MPI2_SCSIIO_MSGFLAGS_SYSTEM_SENSE_ADDR (0x00)
164 161 #define MPI2_SCSIIO_MSGFLAGS_IOCDDR_SENSE_ADDR (0x04)
165 162 #define MPI2_SCSIIO_MSGFLAGS_IOCPLB_SENSE_ADDR (0x08)
166 163 #define MPI2_SCSIIO_MSGFLAGS_IOCPLBNTA_SENSE_ADDR (0x0C)
167 164
168 165 /* SCSI IO SGLFlags bits */
169 166
170 167 /* base values for Data Location Address Space */
171 168 #define MPI2_SCSIIO_SGLFLAGS_ADDR_MASK (0x0C)
172 169 #define MPI2_SCSIIO_SGLFLAGS_SYSTEM_ADDR (0x00)
173 170 #define MPI2_SCSIIO_SGLFLAGS_IOCDDR_ADDR (0x04)
174 171 #define MPI2_SCSIIO_SGLFLAGS_IOCPLB_ADDR (0x08)
175 172 #define MPI2_SCSIIO_SGLFLAGS_IOCPLBNTA_ADDR (0x0C)
176 173
177 174 /* base values for Type */
178 175 #define MPI2_SCSIIO_SGLFLAGS_TYPE_MASK (0x03)
↓ open down ↓ |
45 lines elided |
↑ open up ↑ |
179 176 #define MPI2_SCSIIO_SGLFLAGS_TYPE_MPI (0x00)
180 177 #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE32 (0x01)
181 178 #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE64 (0x02)
182 179
183 180 /* shift values for each sub-field */
184 181 #define MPI2_SCSIIO_SGLFLAGS_SGL3_SHIFT (12)
185 182 #define MPI2_SCSIIO_SGLFLAGS_SGL2_SHIFT (8)
186 183 #define MPI2_SCSIIO_SGLFLAGS_SGL1_SHIFT (4)
187 184 #define MPI2_SCSIIO_SGLFLAGS_SGL0_SHIFT (0)
188 185
186 +/* number of SGLOffset fields */
187 +#define MPI2_SCSIIO_NUM_SGLOFFSETS (4)
188 +
189 189 /* SCSI IO IoFlags bits */
190 190
191 191 /* Large CDB Address Space */
192 192 #define MPI2_SCSIIO_CDB_ADDR_MASK (0x6000)
193 193 #define MPI2_SCSIIO_CDB_ADDR_SYSTEM (0x0000)
194 194 #define MPI2_SCSIIO_CDB_ADDR_IOCDDR (0x2000)
195 195 #define MPI2_SCSIIO_CDB_ADDR_IOCPLB (0x4000)
196 196 #define MPI2_SCSIIO_CDB_ADDR_IOCPLBNTA (0x6000)
197 197
198 198 #define MPI2_SCSIIO_IOFLAGS_LARGE_CDB (0x1000)
199 199 #define MPI2_SCSIIO_IOFLAGS_BIDIRECTIONAL (0x0800)
200 200 #define MPI2_SCSIIO_IOFLAGS_MULTICAST (0x0400)
201 201 #define MPI2_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR (0x0200)
202 202 #define MPI2_SCSIIO_IOFLAGS_CDBLENGTH_MASK (0x01FF)
203 203
204 204 /* SCSI IO EEDPFlags bits */
205 205
206 206 #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG (0x8000)
207 207 #define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_REFTAG (0x4000)
208 208 #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_APPTAG (0x2000)
209 209 #define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_APPTAG (0x1000)
210 210
211 211 #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG (0x0400)
212 212 #define MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG (0x0200)
213 213 #define MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD (0x0100)
214 214
215 215 #define MPI2_SCSIIO_EEDPFLAGS_PASSTHRU_REFTAG (0x0008)
216 216
217 217 #define MPI2_SCSIIO_EEDPFLAGS_MASK_OP (0x0007)
218 218 #define MPI2_SCSIIO_EEDPFLAGS_NOOP_OP (0x0000)
219 219 #define MPI2_SCSIIO_EEDPFLAGS_CHECK_OP (0x0001)
220 220 #define MPI2_SCSIIO_EEDPFLAGS_STRIP_OP (0x0002)
221 221 #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP (0x0003)
222 222 #define MPI2_SCSIIO_EEDPFLAGS_INSERT_OP (0x0004)
223 223 #define MPI2_SCSIIO_EEDPFLAGS_REPLACE_OP (0x0006)
224 224 #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REGEN_OP (0x0007)
225 225
226 226 /* SCSI IO LUN fields: use MPI2_LUN_ from mpi2.h */
227 227
228 228 /* SCSI IO Control bits */
229 229 #define MPI2_SCSIIO_CONTROL_ADDCDBLEN_MASK (0xFC000000)
230 230 #define MPI2_SCSIIO_CONTROL_ADDCDBLEN_SHIFT (26)
231 231
232 232 #define MPI2_SCSIIO_CONTROL_DATADIRECTION_MASK (0x03000000)
233 233 #define MPI2_SCSIIO_CONTROL_NODATATRANSFER (0x00000000)
234 234 #define MPI2_SCSIIO_CONTROL_WRITE (0x01000000)
235 235 #define MPI2_SCSIIO_CONTROL_READ (0x02000000)
236 236 #define MPI2_SCSIIO_CONTROL_BIDIRECTIONAL (0x03000000)
237 237
238 238 #define MPI2_SCSIIO_CONTROL_TASKPRI_MASK (0x00007800)
239 239 #define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT (11)
240 240
241 241 #define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK (0x00000700)
242 242 #define MPI2_SCSIIO_CONTROL_SIMPLEQ (0x00000000)
↓ open down ↓ |
44 lines elided |
↑ open up ↑ |
243 243 #define MPI2_SCSIIO_CONTROL_HEADOFQ (0x00000100)
244 244 #define MPI2_SCSIIO_CONTROL_ORDEREDQ (0x00000200)
245 245 #define MPI2_SCSIIO_CONTROL_ACAQ (0x00000400)
246 246
247 247 #define MPI2_SCSIIO_CONTROL_TLR_MASK (0x000000C0)
248 248 #define MPI2_SCSIIO_CONTROL_NO_TLR (0x00000000)
249 249 #define MPI2_SCSIIO_CONTROL_TLR_ON (0x00000040)
250 250 #define MPI2_SCSIIO_CONTROL_TLR_OFF (0x00000080)
251 251
252 252
253 +/* MPI v2.5 CDB field */
254 +typedef union _MPI25_SCSI_IO_CDB_UNION
255 +{
256 + U8 CDB32[32];
257 + MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
258 + MPI2_IEEE_SGE_SIMPLE64 SGE;
259 +} MPI25_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI25_SCSI_IO_CDB_UNION,
260 + Mpi25ScsiIoCdb_t, MPI2_POINTER pMpi25ScsiIoCdb_t;
261 +
262 +/* MPI v2.5 SCSI IO Request Message */
263 +typedef struct _MPI25_SCSI_IO_REQUEST
264 +{
265 + U16 DevHandle; /* 0x00 */
266 + U8 ChainOffset; /* 0x02 */
267 + U8 Function; /* 0x03 */
268 + U16 Reserved1; /* 0x04 */
269 + U8 Reserved2; /* 0x06 */
270 + U8 MsgFlags; /* 0x07 */
271 + U8 VP_ID; /* 0x08 */
272 + U8 VF_ID; /* 0x09 */
273 + U16 Reserved3; /* 0x0A */
274 + U32 SenseBufferLowAddress; /* 0x0C */
275 + U8 DMAFlags; /* 0x10 */
276 + U8 Reserved5; /* 0x11 */
277 + U8 SenseBufferLength; /* 0x12 */
278 + U8 Reserved4; /* 0x13 */
279 + U8 SGLOffset0; /* 0x14 */
280 + U8 SGLOffset1; /* 0x15 */
281 + U8 SGLOffset2; /* 0x16 */
282 + U8 SGLOffset3; /* 0x17 */
283 + U32 SkipCount; /* 0x18 */
284 + U32 DataLength; /* 0x1C */
285 + U32 BidirectionalDataLength; /* 0x20 */
286 + U16 IoFlags; /* 0x24 */
287 + U16 EEDPFlags; /* 0x26 */
288 + U16 EEDPBlockSize; /* 0x28 */
289 + U16 Reserved6; /* 0x2A */
290 + U32 SecondaryReferenceTag; /* 0x2C */
291 + U16 SecondaryApplicationTag; /* 0x30 */
292 + U16 ApplicationTagTranslationMask; /* 0x32 */
293 + U8 LUN[8]; /* 0x34 */
294 + U32 Control; /* 0x3C */
295 + MPI25_SCSI_IO_CDB_UNION CDB; /* 0x40 */
296 +
297 +#ifdef MPI25_SCSI_IO_VENDOR_UNIQUE_REGION /* typically this is left undefined */
298 + MPI25_SCSI_IO_VENDOR_UNIQUE VendorRegion;
299 +#endif
300 +
301 + MPI25_SGE_IO_UNION SGL; /* 0x60 */
302 +
303 +} MPI25_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI25_SCSI_IO_REQUEST,
304 + Mpi25SCSIIORequest_t, MPI2_POINTER pMpi25SCSIIORequest_t;
305 +
306 +/* use MPI2_SCSIIO_MSGFLAGS_ defines for the MsgFlags field */
307 +
308 +/* Defines for the DMAFlags field
309 + * Each setting affects 4 SGLS, from SGL0 to SGL3.
310 + * D = Data
311 + * C = Cache DIF
312 + * I = Interleaved
313 + * H = Host DIF
314 + */
315 +#define MPI25_SCSIIO_DMAFLAGS_OP_MASK (0x0F)
316 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_D (0x00)
317 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_C (0x01)
318 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_I (0x02)
319 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_C (0x03)
320 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_I (0x04)
321 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_I_I (0x05)
322 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_C (0x06)
323 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_I (0x07)
324 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_I_I (0x08)
325 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_I_I_I (0x09)
326 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_D (0x0A)
327 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_C (0x0B)
328 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_I (0x0C)
329 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_C (0x0D)
330 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_I (0x0E)
331 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_I_I (0x0F)
332 +
333 +/* number of SGLOffset fields */
334 +#define MPI25_SCSIIO_NUM_SGLOFFSETS (4)
335 +
336 +/* defines for the IoFlags field */
337 +#define MPI25_SCSIIO_IOFLAGS_IO_PATH_MASK (0xC000)
338 +#define MPI25_SCSIIO_IOFLAGS_NORMAL_PATH (0x0000)
339 +#define MPI25_SCSIIO_IOFLAGS_FAST_PATH (0x4000)
340 +
341 +#define MPI25_SCSIIO_IOFLAGS_LARGE_CDB (0x1000)
342 +#define MPI25_SCSIIO_IOFLAGS_BIDIRECTIONAL (0x0800)
343 +#define MPI25_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR (0x0200)
344 +#define MPI25_SCSIIO_IOFLAGS_CDBLENGTH_MASK (0x01FF)
345 +
346 +/* MPI v2.5 defines for the EEDPFlags bits */
347 +/* use MPI2_SCSIIO_EEDPFLAGS_ defines for the other EEDPFlags bits */
348 +#define MPI25_SCSIIO_EEDPFLAGS_ESCAPE_MODE_MASK (0x00C0)
349 +#define MPI25_SCSIIO_EEDPFLAGS_COMPATIBLE_MODE (0x0000)
350 +#define MPI25_SCSIIO_EEDPFLAGS_DO_NOT_DISABLE_MODE (0x0040)
351 +#define MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE (0x0080)
352 +#define MPI25_SCSIIO_EEDPFLAGS_APPTAG_REFTAG_DISABLE_MODE (0x00C0)
353 +
354 +#define MPI25_SCSIIO_EEDPFLAGS_HOST_GUARD_METHOD_MASK (0x0030)
355 +#define MPI25_SCSIIO_EEDPFLAGS_T10_CRC_HOST_GUARD (0x0000)
356 +#define MPI25_SCSIIO_EEDPFLAGS_IP_CHKSUM_HOST_GUARD (0x0010)
357 +
358 +/* use MPI2_LUN_ defines from mpi2.h for the LUN field */
359 +
360 +/* use MPI2_SCSIIO_CONTROL_ defines for the Control field */
361 +
362 +
363 +/* NOTE: The SCSI IO Reply is the same for MPI 2.0 and MPI 2.5, so
364 + * MPI2_SCSI_IO_REPLY is used for both.
365 + */
366 +
253 367 /* SCSI IO Error Reply Message */
254 368 typedef struct _MPI2_SCSI_IO_REPLY
255 369 {
256 370 U16 DevHandle; /* 0x00 */
257 371 U8 MsgLength; /* 0x02 */
258 372 U8 Function; /* 0x03 */
259 373 U16 Reserved1; /* 0x04 */
260 374 U8 Reserved2; /* 0x06 */
261 375 U8 MsgFlags; /* 0x07 */
262 376 U8 VP_ID; /* 0x08 */
263 377 U8 VF_ID; /* 0x09 */
264 378 U16 Reserved3; /* 0x0A */
265 379 U8 SCSIStatus; /* 0x0C */
266 380 U8 SCSIState; /* 0x0D */
267 381 U16 IOCStatus; /* 0x0E */
268 382 U32 IOCLogInfo; /* 0x10 */
269 383 U32 TransferCount; /* 0x14 */
270 384 U32 SenseCount; /* 0x18 */
271 385 U32 ResponseInfo; /* 0x1C */
272 386 U16 TaskTag; /* 0x20 */
273 387 U16 Reserved4; /* 0x22 */
274 388 U32 BidirectionalTransferCount; /* 0x24 */
275 389 U32 Reserved5; /* 0x28 */
276 390 U32 Reserved6; /* 0x2C */
277 391 } MPI2_SCSI_IO_REPLY, MPI2_POINTER PTR_MPI2_SCSI_IO_REPLY,
278 392 Mpi2SCSIIOReply_t, MPI2_POINTER pMpi2SCSIIOReply_t;
279 393
280 394 /* SCSI IO Reply SCSIStatus values (SAM-4 status codes) */
281 395
282 396 #define MPI2_SCSI_STATUS_GOOD (0x00)
283 397 #define MPI2_SCSI_STATUS_CHECK_CONDITION (0x02)
284 398 #define MPI2_SCSI_STATUS_CONDITION_MET (0x04)
285 399 #define MPI2_SCSI_STATUS_BUSY (0x08)
286 400 #define MPI2_SCSI_STATUS_INTERMEDIATE (0x10)
287 401 #define MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET (0x14)
288 402 #define MPI2_SCSI_STATUS_RESERVATION_CONFLICT (0x18)
289 403 #define MPI2_SCSI_STATUS_COMMAND_TERMINATED (0x22) /* obsolete */
290 404 #define MPI2_SCSI_STATUS_TASK_SET_FULL (0x28)
291 405 #define MPI2_SCSI_STATUS_ACA_ACTIVE (0x30)
↓ open down ↓ |
29 lines elided |
↑ open up ↑ |
292 406 #define MPI2_SCSI_STATUS_TASK_ABORTED (0x40)
293 407
294 408 /* SCSI IO Reply SCSIState flags */
295 409
296 410 #define MPI2_SCSI_STATE_RESPONSE_INFO_VALID (0x10)
297 411 #define MPI2_SCSI_STATE_TERMINATED (0x08)
298 412 #define MPI2_SCSI_STATE_NO_SCSI_STATUS (0x04)
299 413 #define MPI2_SCSI_STATE_AUTOSENSE_FAILED (0x02)
300 414 #define MPI2_SCSI_STATE_AUTOSENSE_VALID (0x01)
301 415
416 +/* masks and shifts for the ResponseInfo field */
417 +
418 +#define MPI2_SCSI_RI_MASK_REASONCODE (0x000000FF)
419 +#define MPI2_SCSI_RI_SHIFT_REASONCODE (0)
420 +
302 421 #define MPI2_SCSI_TASKTAG_UNKNOWN (0xFFFF)
303 422
304 423
305 424 /****************************************************************************
306 425 * SCSI Task Management messages
307 426 ****************************************************************************/
308 427
309 428 /* SCSI Task Management Request Message */
310 429 typedef struct _MPI2_SCSI_TASK_MANAGE_REQUEST
311 430 {
312 431 U16 DevHandle; /* 0x00 */
313 432 U8 ChainOffset; /* 0x02 */
314 433 U8 Function; /* 0x03 */
315 434 U8 Reserved1; /* 0x04 */
316 435 U8 TaskType; /* 0x05 */
317 436 U8 Reserved2; /* 0x06 */
318 437 U8 MsgFlags; /* 0x07 */
319 438 U8 VP_ID; /* 0x08 */
320 439 U8 VF_ID; /* 0x09 */
321 440 U16 Reserved3; /* 0x0A */
322 441 U8 LUN[8]; /* 0x0C */
323 442 U32 Reserved4[7]; /* 0x14 */
324 443 U16 TaskMID; /* 0x30 */
325 444 U16 Reserved5; /* 0x32 */
326 445 } MPI2_SCSI_TASK_MANAGE_REQUEST,
327 446 MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REQUEST,
328 447 Mpi2SCSITaskManagementRequest_t,
329 448 MPI2_POINTER pMpi2SCSITaskManagementRequest_t;
330 449
331 450 /* TaskType values */
332 451
333 452 #define MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK (0x01)
334 453 #define MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET (0x02)
335 454 #define MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET (0x03)
336 455 #define MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET (0x05)
337 456 #define MPI2_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET (0x06)
338 457 #define MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK (0x07)
339 458 #define MPI2_SCSITASKMGMT_TASKTYPE_CLR_ACA (0x08)
340 459 #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_TASK_SET (0x09)
341 460 #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT (0x0A)
342 461
343 462 /* obsolete TaskType name */
344 463 #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_UNIT_ATTENTION (MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT)
345 464
346 465 /* MsgFlags bits */
347 466
348 467 #define MPI2_SCSITASKMGMT_MSGFLAGS_MASK_TARGET_RESET (0x18)
349 468 #define MPI2_SCSITASKMGMT_MSGFLAGS_LINK_RESET (0x00)
350 469 #define MPI2_SCSITASKMGMT_MSGFLAGS_NEXUS_RESET_SRST (0x08)
351 470 #define MPI2_SCSITASKMGMT_MSGFLAGS_SAS_HARD_LINK_RESET (0x10)
352 471
353 472 #define MPI2_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU (0x01)
354 473
355 474
356 475
357 476 /* SCSI Task Management Reply Message */
358 477 typedef struct _MPI2_SCSI_TASK_MANAGE_REPLY
359 478 {
360 479 U16 DevHandle; /* 0x00 */
361 480 U8 MsgLength; /* 0x02 */
362 481 U8 Function; /* 0x03 */
363 482 U8 ResponseCode; /* 0x04 */
↓ open down ↓ |
52 lines elided |
↑ open up ↑ |
364 483 U8 TaskType; /* 0x05 */
365 484 U8 Reserved1; /* 0x06 */
366 485 U8 MsgFlags; /* 0x07 */
367 486 U8 VP_ID; /* 0x08 */
368 487 U8 VF_ID; /* 0x09 */
369 488 U16 Reserved2; /* 0x0A */
370 489 U16 Reserved3; /* 0x0C */
371 490 U16 IOCStatus; /* 0x0E */
372 491 U32 IOCLogInfo; /* 0x10 */
373 492 U32 TerminationCount; /* 0x14 */
493 + U32 ResponseInfo; /* 0x18 */
374 494 } MPI2_SCSI_TASK_MANAGE_REPLY,
375 495 MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REPLY,
376 496 Mpi2SCSITaskManagementReply_t, MPI2_POINTER pMpi2SCSIManagementReply_t;
377 497
378 498 /* ResponseCode values */
379 499
380 500 #define MPI2_SCSITASKMGMT_RSP_TM_COMPLETE (0x00)
381 501 #define MPI2_SCSITASKMGMT_RSP_INVALID_FRAME (0x02)
382 502 #define MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED (0x04)
383 503 #define MPI2_SCSITASKMGMT_RSP_TM_FAILED (0x05)
384 504 #define MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED (0x08)
385 505 #define MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN (0x09)
506 +#define MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG (0x0A)
386 507 #define MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC (0x80)
387 508
509 +/* masks and shifts for the ResponseInfo field */
510 +
511 +#define MPI2_SCSITASKMGMT_RI_MASK_REASONCODE (0x000000FF)
512 +#define MPI2_SCSITASKMGMT_RI_SHIFT_REASONCODE (0)
513 +#define MPI2_SCSITASKMGMT_RI_MASK_ARI2 (0x0000FF00)
514 +#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI2 (8)
515 +#define MPI2_SCSITASKMGMT_RI_MASK_ARI1 (0x00FF0000)
516 +#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI1 (16)
517 +#define MPI2_SCSITASKMGMT_RI_MASK_ARI0 (0xFF000000)
518 +#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI0 (24)
519 +
388 520
389 521 /****************************************************************************
390 522 * SCSI Enclosure Processor messages
391 523 ****************************************************************************/
392 524
393 525 /* SCSI Enclosure Processor Request Message */
394 526 typedef struct _MPI2_SEP_REQUEST
395 527 {
396 528 U16 DevHandle; /* 0x00 */
397 529 U8 ChainOffset; /* 0x02 */
398 530 U8 Function; /* 0x03 */
399 531 U8 Action; /* 0x04 */
400 532 U8 Flags; /* 0x05 */
401 533 U8 Reserved1; /* 0x06 */
402 534 U8 MsgFlags; /* 0x07 */
403 535 U8 VP_ID; /* 0x08 */
404 536 U8 VF_ID; /* 0x09 */
405 537 U16 Reserved2; /* 0x0A */
406 538 U32 SlotStatus; /* 0x0C */
407 539 U32 Reserved3; /* 0x10 */
408 540 U32 Reserved4; /* 0x14 */
409 541 U32 Reserved5; /* 0x18 */
410 542 U16 Slot; /* 0x1C */
411 543 U16 EnclosureHandle; /* 0x1E */
412 544 } MPI2_SEP_REQUEST, MPI2_POINTER PTR_MPI2_SEP_REQUEST,
413 545 Mpi2SepRequest_t, MPI2_POINTER pMpi2SepRequest_t;
414 546
415 547 /* Action defines */
416 548 #define MPI2_SEP_REQ_ACTION_WRITE_STATUS (0x00)
417 549 #define MPI2_SEP_REQ_ACTION_READ_STATUS (0x01)
418 550
419 551 /* Flags defines */
420 552 #define MPI2_SEP_REQ_FLAGS_DEVHANDLE_ADDRESS (0x00)
421 553 #define MPI2_SEP_REQ_FLAGS_ENCLOSURE_SLOT_ADDRESS (0x01)
422 554
423 555 /* SlotStatus defines */
424 556 #define MPI2_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE (0x00040000)
425 557 #define MPI2_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST (0x00020000)
426 558 #define MPI2_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED (0x00000200)
427 559 #define MPI2_SEP_REQ_SLOTSTATUS_HOT_SPARE (0x00000100)
428 560 #define MPI2_SEP_REQ_SLOTSTATUS_UNCONFIGURED (0x00000080)
429 561 #define MPI2_SEP_REQ_SLOTSTATUS_PREDICTED_FAULT (0x00000040)
430 562 #define MPI2_SEP_REQ_SLOTSTATUS_IN_CRITICAL_ARRAY (0x00000010)
431 563 #define MPI2_SEP_REQ_SLOTSTATUS_IN_FAILED_ARRAY (0x00000008)
432 564 #define MPI2_SEP_REQ_SLOTSTATUS_DEV_REBUILDING (0x00000004)
433 565 #define MPI2_SEP_REQ_SLOTSTATUS_DEV_FAULTY (0x00000002)
434 566 #define MPI2_SEP_REQ_SLOTSTATUS_NO_ERROR (0x00000001)
435 567
436 568
437 569 /* SCSI Enclosure Processor Reply Message */
438 570 typedef struct _MPI2_SEP_REPLY
439 571 {
440 572 U16 DevHandle; /* 0x00 */
441 573 U8 MsgLength; /* 0x02 */
442 574 U8 Function; /* 0x03 */
443 575 U8 Action; /* 0x04 */
444 576 U8 Flags; /* 0x05 */
445 577 U8 Reserved1; /* 0x06 */
446 578 U8 MsgFlags; /* 0x07 */
447 579 U8 VP_ID; /* 0x08 */
448 580 U8 VF_ID; /* 0x09 */
449 581 U16 Reserved2; /* 0x0A */
450 582 U16 Reserved3; /* 0x0C */
451 583 U16 IOCStatus; /* 0x0E */
452 584 U32 IOCLogInfo; /* 0x10 */
453 585 U32 SlotStatus; /* 0x14 */
454 586 U32 Reserved4; /* 0x18 */
455 587 U16 Slot; /* 0x1C */
456 588 U16 EnclosureHandle; /* 0x1E */
457 589 } MPI2_SEP_REPLY, MPI2_POINTER PTR_MPI2_SEP_REPLY,
458 590 Mpi2SepReply_t, MPI2_POINTER pMpi2SepReply_t;
459 591
460 592 /* SlotStatus defines */
461 593 #define MPI2_SEP_REPLY_SLOTSTATUS_REMOVE_READY (0x00040000)
462 594 #define MPI2_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST (0x00020000)
463 595 #define MPI2_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED (0x00000200)
464 596 #define MPI2_SEP_REPLY_SLOTSTATUS_HOT_SPARE (0x00000100)
465 597 #define MPI2_SEP_REPLY_SLOTSTATUS_UNCONFIGURED (0x00000080)
466 598 #define MPI2_SEP_REPLY_SLOTSTATUS_PREDICTED_FAULT (0x00000040)
467 599 #define MPI2_SEP_REPLY_SLOTSTATUS_IN_CRITICAL_ARRAY (0x00000010)
468 600 #define MPI2_SEP_REPLY_SLOTSTATUS_IN_FAILED_ARRAY (0x00000008)
469 601 #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_REBUILDING (0x00000004)
470 602 #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_FAULTY (0x00000002)
471 603 #define MPI2_SEP_REPLY_SLOTSTATUS_NO_ERROR (0x00000001)
472 604
473 605
474 606 #endif
475 607
476 608
↓ open down ↓ |
79 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX