diff options
Diffstat (limited to 'drivers/message/fusion/lsi/mpi.h')
-rw-r--r-- | drivers/message/fusion/lsi/mpi.h | 746 |
1 files changed, 746 insertions, 0 deletions
diff --git a/drivers/message/fusion/lsi/mpi.h b/drivers/message/fusion/lsi/mpi.h new file mode 100644 index 000000000000..9dbb061265fe --- /dev/null +++ b/drivers/message/fusion/lsi/mpi.h | |||
@@ -0,0 +1,746 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2000-2003 LSI Logic Corporation. | ||
3 | * | ||
4 | * | ||
5 | * Name: mpi.h | ||
6 | * Title: MPI Message independent structures and definitions | ||
7 | * Creation Date: July 27, 2000 | ||
8 | * | ||
9 | * mpi.h Version: 01.05.xx | ||
10 | * | ||
11 | * Version History | ||
12 | * --------------- | ||
13 | * | ||
14 | * Date Version Description | ||
15 | * -------- -------- ------------------------------------------------------ | ||
16 | * 05-08-00 00.10.01 Original release for 0.10 spec dated 4/26/2000. | ||
17 | * 05-24-00 00.10.02 Added MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH definition. | ||
18 | * 06-06-00 01.00.01 Update MPI_VERSION_MAJOR and MPI_VERSION_MINOR. | ||
19 | * 06-22-00 01.00.02 Added MPI_IOCSTATUS_LAN_ definitions. | ||
20 | * Removed LAN_SUSPEND function definition. | ||
21 | * Added MPI_MSGFLAGS_CONTINUATION_REPLY definition. | ||
22 | * 06-30-00 01.00.03 Added MPI_CONTEXT_REPLY_TYPE_LAN definition. | ||
23 | * Added MPI_GET/SET_CONTEXT_REPLY_TYPE macros. | ||
24 | * 07-27-00 01.00.04 Added MPI_FAULT_ definitions. | ||
25 | * Removed MPI_IOCSTATUS_MSG/DATA_XFER_ERROR definitions. | ||
26 | * Added MPI_IOCSTATUS_INTERNAL_ERROR definition. | ||
27 | * Added MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH. | ||
28 | * 11-02-00 01.01.01 Original release for post 1.0 work. | ||
29 | * 12-04-00 01.01.02 Added new function codes. | ||
30 | * 01-09-01 01.01.03 Added more definitions to the system interface section | ||
31 | * Added MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT. | ||
32 | * 01-25-01 01.01.04 Changed MPI_VERSION_MINOR from 0x00 to 0x01. | ||
33 | * 02-20-01 01.01.05 Started using MPI_POINTER. | ||
34 | * Fixed value for MPI_DIAG_RW_ENABLE. | ||
35 | * Added defines for MPI_DIAG_PREVENT_IOC_BOOT and | ||
36 | * MPI_DIAG_CLEAR_FLASH_BAD_SIG. | ||
37 | * Obsoleted MPI_IOCSTATUS_TARGET_FC_ defines. | ||
38 | * 02-27-01 01.01.06 Removed MPI_HOST_INDEX_REGISTER define. | ||
39 | * Added function codes for RAID. | ||
40 | * 04-09-01 01.01.07 Added alternate define for MPI_DOORBELL_ACTIVE, | ||
41 | * MPI_DOORBELL_USED, to better match the spec. | ||
42 | * 08-08-01 01.02.01 Original release for v1.2 work. | ||
43 | * Changed MPI_VERSION_MINOR from 0x01 to 0x02. | ||
44 | * Added define MPI_FUNCTION_TOOLBOX. | ||
45 | * 09-28-01 01.02.02 New function code MPI_SCSI_ENCLOSURE_PROCESSOR. | ||
46 | * 11-01-01 01.02.03 Changed name to MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR. | ||
47 | * 03-14-02 01.02.04 Added MPI_HEADER_VERSION_ defines. | ||
48 | * 05-31-02 01.02.05 Bumped MPI_HEADER_VERSION_UNIT. | ||
49 | * 07-12-02 01.02.06 Added define for MPI_FUNCTION_MAILBOX. | ||
50 | * 09-16-02 01.02.07 Bumped value for MPI_HEADER_VERSION_UNIT. | ||
51 | * 11-15-02 01.02.08 Added define MPI_IOCSTATUS_TARGET_INVALID_IO_INDEX and | ||
52 | * obsoleted define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX. | ||
53 | * 04-01-03 01.02.09 New IOCStatus code: MPI_IOCSTATUS_FC_EXCHANGE_CANCELED | ||
54 | * 06-26-03 01.02.10 Bumped MPI_HEADER_VERSION_UNIT value. | ||
55 | * -------------------------------------------------------------------------- | ||
56 | */ | ||
57 | |||
58 | #ifndef MPI_H | ||
59 | #define MPI_H | ||
60 | |||
61 | |||
62 | /***************************************************************************** | ||
63 | * | ||
64 | * M P I V e r s i o n D e f i n i t i o n s | ||
65 | * | ||
66 | *****************************************************************************/ | ||
67 | |||
68 | #define MPI_VERSION_MAJOR (0x01) | ||
69 | #define MPI_VERSION_MINOR (0x05) | ||
70 | #define MPI_VERSION_MAJOR_MASK (0xFF00) | ||
71 | #define MPI_VERSION_MAJOR_SHIFT (8) | ||
72 | #define MPI_VERSION_MINOR_MASK (0x00FF) | ||
73 | #define MPI_VERSION_MINOR_SHIFT (0) | ||
74 | #define MPI_VERSION ((MPI_VERSION_MAJOR << MPI_VERSION_MAJOR_SHIFT) | \ | ||
75 | MPI_VERSION_MINOR) | ||
76 | |||
77 | #define MPI_VERSION_01_00 (0x0100) | ||
78 | #define MPI_VERSION_01_01 (0x0101) | ||
79 | #define MPI_VERSION_01_02 (0x0102) | ||
80 | #define MPI_VERSION_01_03 (0x0103) | ||
81 | #define MPI_VERSION_01_05 (0x0105) | ||
82 | /* Note: The major versions of 0xe0 through 0xff are reserved */ | ||
83 | |||
84 | /* versioning for this MPI header set */ | ||
85 | #define MPI_HEADER_VERSION_UNIT (0x00) | ||
86 | #define MPI_HEADER_VERSION_DEV (0x00) | ||
87 | #define MPI_HEADER_VERSION_UNIT_MASK (0xFF00) | ||
88 | #define MPI_HEADER_VERSION_UNIT_SHIFT (8) | ||
89 | #define MPI_HEADER_VERSION_DEV_MASK (0x00FF) | ||
90 | #define MPI_HEADER_VERSION_DEV_SHIFT (0) | ||
91 | #define MPI_HEADER_VERSION ((MPI_HEADER_VERSION_UNIT << 8) | MPI_HEADER_VERSION_DEV) | ||
92 | |||
93 | /***************************************************************************** | ||
94 | * | ||
95 | * I O C S t a t e D e f i n i t i o n s | ||
96 | * | ||
97 | *****************************************************************************/ | ||
98 | |||
99 | #define MPI_IOC_STATE_RESET (0x00000000) | ||
100 | #define MPI_IOC_STATE_READY (0x10000000) | ||
101 | #define MPI_IOC_STATE_OPERATIONAL (0x20000000) | ||
102 | #define MPI_IOC_STATE_FAULT (0x40000000) | ||
103 | |||
104 | #define MPI_IOC_STATE_MASK (0xF0000000) | ||
105 | #define MPI_IOC_STATE_SHIFT (28) | ||
106 | |||
107 | /* Fault state codes (product independent range 0x8000-0xFFFF) */ | ||
108 | |||
109 | #define MPI_FAULT_REQUEST_MESSAGE_PCI_PARITY_ERROR (0x8111) | ||
110 | #define MPI_FAULT_REQUEST_MESSAGE_PCI_BUS_FAULT (0x8112) | ||
111 | #define MPI_FAULT_REPLY_MESSAGE_PCI_PARITY_ERROR (0x8113) | ||
112 | #define MPI_FAULT_REPLY_MESSAGE_PCI_BUS_FAULT (0x8114) | ||
113 | #define MPI_FAULT_DATA_SEND_PCI_PARITY_ERROR (0x8115) | ||
114 | #define MPI_FAULT_DATA_SEND_PCI_BUS_FAULT (0x8116) | ||
115 | #define MPI_FAULT_DATA_RECEIVE_PCI_PARITY_ERROR (0x8117) | ||
116 | #define MPI_FAULT_DATA_RECEIVE_PCI_BUS_FAULT (0x8118) | ||
117 | |||
118 | |||
119 | /***************************************************************************** | ||
120 | * | ||
121 | * P C I S y s t e m I n t e r f a c e R e g i s t e r s | ||
122 | * | ||
123 | *****************************************************************************/ | ||
124 | |||
125 | /* S y s t e m D o o r b e l l */ | ||
126 | #define MPI_DOORBELL_OFFSET (0x00000000) | ||
127 | #define MPI_DOORBELL_ACTIVE (0x08000000) /* DoorbellUsed */ | ||
128 | #define MPI_DOORBELL_USED (MPI_DOORBELL_ACTIVE) | ||
129 | #define MPI_DOORBELL_ACTIVE_SHIFT (27) | ||
130 | #define MPI_DOORBELL_WHO_INIT_MASK (0x07000000) | ||
131 | #define MPI_DOORBELL_WHO_INIT_SHIFT (24) | ||
132 | #define MPI_DOORBELL_FUNCTION_MASK (0xFF000000) | ||
133 | #define MPI_DOORBELL_FUNCTION_SHIFT (24) | ||
134 | #define MPI_DOORBELL_ADD_DWORDS_MASK (0x00FF0000) | ||
135 | #define MPI_DOORBELL_ADD_DWORDS_SHIFT (16) | ||
136 | #define MPI_DOORBELL_DATA_MASK (0x0000FFFF) | ||
137 | |||
138 | |||
139 | #define MPI_WRITE_SEQUENCE_OFFSET (0x00000004) | ||
140 | #define MPI_WRSEQ_KEY_VALUE_MASK (0x0000000F) | ||
141 | #define MPI_WRSEQ_1ST_KEY_VALUE (0x04) | ||
142 | #define MPI_WRSEQ_2ND_KEY_VALUE (0x0B) | ||
143 | #define MPI_WRSEQ_3RD_KEY_VALUE (0x02) | ||
144 | #define MPI_WRSEQ_4TH_KEY_VALUE (0x07) | ||
145 | #define MPI_WRSEQ_5TH_KEY_VALUE (0x0D) | ||
146 | |||
147 | #define MPI_DIAGNOSTIC_OFFSET (0x00000008) | ||
148 | #define MPI_DIAG_CLEAR_FLASH_BAD_SIG (0x00000400) | ||
149 | #define MPI_DIAG_PREVENT_IOC_BOOT (0x00000200) | ||
150 | #define MPI_DIAG_DRWE (0x00000080) | ||
151 | #define MPI_DIAG_FLASH_BAD_SIG (0x00000040) | ||
152 | #define MPI_DIAG_RESET_HISTORY (0x00000020) | ||
153 | #define MPI_DIAG_RW_ENABLE (0x00000010) | ||
154 | #define MPI_DIAG_RESET_ADAPTER (0x00000004) | ||
155 | #define MPI_DIAG_DISABLE_ARM (0x00000002) | ||
156 | #define MPI_DIAG_MEM_ENABLE (0x00000001) | ||
157 | |||
158 | #define MPI_TEST_BASE_ADDRESS_OFFSET (0x0000000C) | ||
159 | |||
160 | #define MPI_DIAG_RW_DATA_OFFSET (0x00000010) | ||
161 | |||
162 | #define MPI_DIAG_RW_ADDRESS_OFFSET (0x00000014) | ||
163 | |||
164 | #define MPI_HOST_INTERRUPT_STATUS_OFFSET (0x00000030) | ||
165 | #define MPI_HIS_IOP_DOORBELL_STATUS (0x80000000) | ||
166 | #define MPI_HIS_REPLY_MESSAGE_INTERRUPT (0x00000008) | ||
167 | #define MPI_HIS_DOORBELL_INTERRUPT (0x00000001) | ||
168 | |||
169 | #define MPI_HOST_INTERRUPT_MASK_OFFSET (0x00000034) | ||
170 | #define MPI_HIM_RIM (0x00000008) | ||
171 | #define MPI_HIM_DIM (0x00000001) | ||
172 | |||
173 | #define MPI_REQUEST_QUEUE_OFFSET (0x00000040) | ||
174 | #define MPI_REQUEST_POST_FIFO_OFFSET (0x00000040) | ||
175 | |||
176 | #define MPI_REPLY_QUEUE_OFFSET (0x00000044) | ||
177 | #define MPI_REPLY_POST_FIFO_OFFSET (0x00000044) | ||
178 | #define MPI_REPLY_FREE_FIFO_OFFSET (0x00000044) | ||
179 | |||
180 | #define MPI_HI_PRI_REQUEST_QUEUE_OFFSET (0x00000048) | ||
181 | |||
182 | |||
183 | |||
184 | /***************************************************************************** | ||
185 | * | ||
186 | * M e s s a g e F r a m e D e s c r i p t o r s | ||
187 | * | ||
188 | *****************************************************************************/ | ||
189 | |||
190 | #define MPI_REQ_MF_DESCRIPTOR_NB_MASK (0x00000003) | ||
191 | #define MPI_REQ_MF_DESCRIPTOR_F_BIT (0x00000004) | ||
192 | #define MPI_REQ_MF_DESCRIPTOR_ADDRESS_MASK (0xFFFFFFF8) | ||
193 | |||
194 | #define MPI_ADDRESS_REPLY_A_BIT (0x80000000) | ||
195 | #define MPI_ADDRESS_REPLY_ADDRESS_MASK (0x7FFFFFFF) | ||
196 | |||
197 | #define MPI_CONTEXT_REPLY_A_BIT (0x80000000) | ||
198 | #define MPI_CONTEXT_REPLY_TYPE_MASK (0x60000000) | ||
199 | #define MPI_CONTEXT_REPLY_TYPE_SCSI_INIT (0x00) | ||
200 | #define MPI_CONTEXT_REPLY_TYPE_SCSI_TARGET (0x01) | ||
201 | #define MPI_CONTEXT_REPLY_TYPE_LAN (0x02) | ||
202 | #define MPI_CONTEXT_REPLY_TYPE_SHIFT (29) | ||
203 | #define MPI_CONTEXT_REPLY_CONTEXT_MASK (0x1FFFFFFF) | ||
204 | |||
205 | |||
206 | /****************************************************************************/ | ||
207 | /* Context Reply macros */ | ||
208 | /****************************************************************************/ | ||
209 | |||
210 | #define MPI_GET_CONTEXT_REPLY_TYPE(x) (((x) & MPI_CONTEXT_REPLY_TYPE_MASK) \ | ||
211 | >> MPI_CONTEXT_REPLY_TYPE_SHIFT) | ||
212 | |||
213 | #define MPI_SET_CONTEXT_REPLY_TYPE(x, typ) \ | ||
214 | ((x) = ((x) & ~MPI_CONTEXT_REPLY_TYPE_MASK) | \ | ||
215 | (((typ) << MPI_CONTEXT_REPLY_TYPE_SHIFT) & \ | ||
216 | MPI_CONTEXT_REPLY_TYPE_MASK)) | ||
217 | |||
218 | |||
219 | /***************************************************************************** | ||
220 | * | ||
221 | * M e s s a g e F u n c t i o n s | ||
222 | * 0x80 -> 0x8F reserved for private message use per product | ||
223 | * | ||
224 | * | ||
225 | *****************************************************************************/ | ||
226 | |||
227 | #define MPI_FUNCTION_SCSI_IO_REQUEST (0x00) | ||
228 | #define MPI_FUNCTION_SCSI_TASK_MGMT (0x01) | ||
229 | #define MPI_FUNCTION_IOC_INIT (0x02) | ||
230 | #define MPI_FUNCTION_IOC_FACTS (0x03) | ||
231 | #define MPI_FUNCTION_CONFIG (0x04) | ||
232 | #define MPI_FUNCTION_PORT_FACTS (0x05) | ||
233 | #define MPI_FUNCTION_PORT_ENABLE (0x06) | ||
234 | #define MPI_FUNCTION_EVENT_NOTIFICATION (0x07) | ||
235 | #define MPI_FUNCTION_EVENT_ACK (0x08) | ||
236 | #define MPI_FUNCTION_FW_DOWNLOAD (0x09) | ||
237 | #define MPI_FUNCTION_TARGET_CMD_BUFFER_POST (0x0A) | ||
238 | #define MPI_FUNCTION_TARGET_ASSIST (0x0B) | ||
239 | #define MPI_FUNCTION_TARGET_STATUS_SEND (0x0C) | ||
240 | #define MPI_FUNCTION_TARGET_MODE_ABORT (0x0D) | ||
241 | #define MPI_FUNCTION_FC_LINK_SRVC_BUF_POST (0x0E) | ||
242 | #define MPI_FUNCTION_FC_LINK_SRVC_RSP (0x0F) | ||
243 | #define MPI_FUNCTION_FC_EX_LINK_SRVC_SEND (0x10) | ||
244 | #define MPI_FUNCTION_FC_ABORT (0x11) | ||
245 | #define MPI_FUNCTION_FW_UPLOAD (0x12) | ||
246 | #define MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND (0x13) | ||
247 | #define MPI_FUNCTION_FC_PRIMITIVE_SEND (0x14) | ||
248 | |||
249 | #define MPI_FUNCTION_RAID_ACTION (0x15) | ||
250 | #define MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH (0x16) | ||
251 | |||
252 | #define MPI_FUNCTION_TOOLBOX (0x17) | ||
253 | |||
254 | #define MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR (0x18) | ||
255 | |||
256 | #define MPI_FUNCTION_MAILBOX (0x19) | ||
257 | |||
258 | #define MPI_FUNCTION_SMP_PASSTHROUGH (0x1A) | ||
259 | #define MPI_FUNCTION_SAS_IO_UNIT_CONTROL (0x1B) | ||
260 | |||
261 | #define MPI_DIAG_BUFFER_POST (0x1D) | ||
262 | #define MPI_DIAG_RELEASE (0x1E) | ||
263 | |||
264 | #define MPI_FUNCTION_SCSI_IO_32 (0x1F) | ||
265 | |||
266 | #define MPI_FUNCTION_LAN_SEND (0x20) | ||
267 | #define MPI_FUNCTION_LAN_RECEIVE (0x21) | ||
268 | #define MPI_FUNCTION_LAN_RESET (0x22) | ||
269 | |||
270 | #define MPI_FUNCTION_INBAND_BUFFER_POST (0x28) | ||
271 | #define MPI_FUNCTION_INBAND_SEND (0x29) | ||
272 | #define MPI_FUNCTION_INBAND_RSP (0x2A) | ||
273 | #define MPI_FUNCTION_INBAND_ABORT (0x2B) | ||
274 | |||
275 | #define MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET (0x40) | ||
276 | #define MPI_FUNCTION_IO_UNIT_RESET (0x41) | ||
277 | #define MPI_FUNCTION_HANDSHAKE (0x42) | ||
278 | #define MPI_FUNCTION_REPLY_FRAME_REMOVAL (0x43) | ||
279 | |||
280 | |||
281 | /* standard version format */ | ||
282 | typedef struct _MPI_VERSION_STRUCT | ||
283 | { | ||
284 | U8 Dev; /* 00h */ | ||
285 | U8 Unit; /* 01h */ | ||
286 | U8 Minor; /* 02h */ | ||
287 | U8 Major; /* 03h */ | ||
288 | } MPI_VERSION_STRUCT, MPI_POINTER PTR_MPI_VERSION_STRUCT, | ||
289 | MpiVersionStruct_t, MPI_POINTER pMpiVersionStruct; | ||
290 | |||
291 | typedef union _MPI_VERSION_FORMAT | ||
292 | { | ||
293 | MPI_VERSION_STRUCT Struct; | ||
294 | U32 Word; | ||
295 | } MPI_VERSION_FORMAT, MPI_POINTER PTR_MPI_VERSION_FORMAT, | ||
296 | MpiVersionFormat_t, MPI_POINTER pMpiVersionFormat_t; | ||
297 | |||
298 | |||
299 | /***************************************************************************** | ||
300 | * | ||
301 | * S c a t t e r G a t h e r E l e m e n t s | ||
302 | * | ||
303 | *****************************************************************************/ | ||
304 | |||
305 | /****************************************************************************/ | ||
306 | /* Simple element structures */ | ||
307 | /****************************************************************************/ | ||
308 | |||
309 | typedef struct _SGE_SIMPLE32 | ||
310 | { | ||
311 | U32 FlagsLength; | ||
312 | U32 Address; | ||
313 | } SGE_SIMPLE32, MPI_POINTER PTR_SGE_SIMPLE32, | ||
314 | SGESimple32_t, MPI_POINTER pSGESimple32_t; | ||
315 | |||
316 | typedef struct _SGE_SIMPLE64 | ||
317 | { | ||
318 | U32 FlagsLength; | ||
319 | U64 Address; | ||
320 | } SGE_SIMPLE64, MPI_POINTER PTR_SGE_SIMPLE64, | ||
321 | SGESimple64_t, MPI_POINTER pSGESimple64_t; | ||
322 | |||
323 | typedef struct _SGE_SIMPLE_UNION | ||
324 | { | ||
325 | U32 FlagsLength; | ||
326 | union | ||
327 | { | ||
328 | U32 Address32; | ||
329 | U64 Address64; | ||
330 | }u; | ||
331 | } SGESimpleUnion_t, MPI_POINTER pSGESimpleUnion_t, | ||
332 | SGE_SIMPLE_UNION, MPI_POINTER PTR_SGE_SIMPLE_UNION; | ||
333 | |||
334 | /****************************************************************************/ | ||
335 | /* Chain element structures */ | ||
336 | /****************************************************************************/ | ||
337 | |||
338 | typedef struct _SGE_CHAIN32 | ||
339 | { | ||
340 | U16 Length; | ||
341 | U8 NextChainOffset; | ||
342 | U8 Flags; | ||
343 | U32 Address; | ||
344 | } SGE_CHAIN32, MPI_POINTER PTR_SGE_CHAIN32, | ||
345 | SGEChain32_t, MPI_POINTER pSGEChain32_t; | ||
346 | |||
347 | typedef struct _SGE_CHAIN64 | ||
348 | { | ||
349 | U16 Length; | ||
350 | U8 NextChainOffset; | ||
351 | U8 Flags; | ||
352 | U64 Address; | ||
353 | } SGE_CHAIN64, MPI_POINTER PTR_SGE_CHAIN64, | ||
354 | SGEChain64_t, MPI_POINTER pSGEChain64_t; | ||
355 | |||
356 | typedef struct _SGE_CHAIN_UNION | ||
357 | { | ||
358 | U16 Length; | ||
359 | U8 NextChainOffset; | ||
360 | U8 Flags; | ||
361 | union | ||
362 | { | ||
363 | U32 Address32; | ||
364 | U64 Address64; | ||
365 | }u; | ||
366 | } SGE_CHAIN_UNION, MPI_POINTER PTR_SGE_CHAIN_UNION, | ||
367 | SGEChainUnion_t, MPI_POINTER pSGEChainUnion_t; | ||
368 | |||
369 | /****************************************************************************/ | ||
370 | /* Transaction Context element */ | ||
371 | /****************************************************************************/ | ||
372 | |||
373 | typedef struct _SGE_TRANSACTION32 | ||
374 | { | ||
375 | U8 Reserved; | ||
376 | U8 ContextSize; | ||
377 | U8 DetailsLength; | ||
378 | U8 Flags; | ||
379 | U32 TransactionContext[1]; | ||
380 | U32 TransactionDetails[1]; | ||
381 | } SGE_TRANSACTION32, MPI_POINTER PTR_SGE_TRANSACTION32, | ||
382 | SGETransaction32_t, MPI_POINTER pSGETransaction32_t; | ||
383 | |||
384 | typedef struct _SGE_TRANSACTION64 | ||
385 | { | ||
386 | U8 Reserved; | ||
387 | U8 ContextSize; | ||
388 | U8 DetailsLength; | ||
389 | U8 Flags; | ||
390 | U32 TransactionContext[2]; | ||
391 | U32 TransactionDetails[1]; | ||
392 | } SGE_TRANSACTION64, MPI_POINTER PTR_SGE_TRANSACTION64, | ||
393 | SGETransaction64_t, MPI_POINTER pSGETransaction64_t; | ||
394 | |||
395 | typedef struct _SGE_TRANSACTION96 | ||
396 | { | ||
397 | U8 Reserved; | ||
398 | U8 ContextSize; | ||
399 | U8 DetailsLength; | ||
400 | U8 Flags; | ||
401 | U32 TransactionContext[3]; | ||
402 | U32 TransactionDetails[1]; | ||
403 | } SGE_TRANSACTION96, MPI_POINTER PTR_SGE_TRANSACTION96, | ||
404 | SGETransaction96_t, MPI_POINTER pSGETransaction96_t; | ||
405 | |||
406 | typedef struct _SGE_TRANSACTION128 | ||
407 | { | ||
408 | U8 Reserved; | ||
409 | U8 ContextSize; | ||
410 | U8 DetailsLength; | ||
411 | U8 Flags; | ||
412 | U32 TransactionContext[4]; | ||
413 | U32 TransactionDetails[1]; | ||
414 | } SGE_TRANSACTION128, MPI_POINTER PTR_SGE_TRANSACTION128, | ||
415 | SGETransaction_t128, MPI_POINTER pSGETransaction_t128; | ||
416 | |||
417 | typedef struct _SGE_TRANSACTION_UNION | ||
418 | { | ||
419 | U8 Reserved; | ||
420 | U8 ContextSize; | ||
421 | U8 DetailsLength; | ||
422 | U8 Flags; | ||
423 | union | ||
424 | { | ||
425 | U32 TransactionContext32[1]; | ||
426 | U32 TransactionContext64[2]; | ||
427 | U32 TransactionContext96[3]; | ||
428 | U32 TransactionContext128[4]; | ||
429 | }u; | ||
430 | U32 TransactionDetails[1]; | ||
431 | } SGE_TRANSACTION_UNION, MPI_POINTER PTR_SGE_TRANSACTION_UNION, | ||
432 | SGETransactionUnion_t, MPI_POINTER pSGETransactionUnion_t; | ||
433 | |||
434 | |||
435 | /****************************************************************************/ | ||
436 | /* SGE IO types union for IO SGL's */ | ||
437 | /****************************************************************************/ | ||
438 | |||
439 | typedef struct _SGE_IO_UNION | ||
440 | { | ||
441 | union | ||
442 | { | ||
443 | SGE_SIMPLE_UNION Simple; | ||
444 | SGE_CHAIN_UNION Chain; | ||
445 | } u; | ||
446 | } SGE_IO_UNION, MPI_POINTER PTR_SGE_IO_UNION, | ||
447 | SGEIOUnion_t, MPI_POINTER pSGEIOUnion_t; | ||
448 | |||
449 | /****************************************************************************/ | ||
450 | /* SGE union for SGL's with Simple and Transaction elements */ | ||
451 | /****************************************************************************/ | ||
452 | |||
453 | typedef struct _SGE_TRANS_SIMPLE_UNION | ||
454 | { | ||
455 | union | ||
456 | { | ||
457 | SGE_SIMPLE_UNION Simple; | ||
458 | SGE_TRANSACTION_UNION Transaction; | ||
459 | } u; | ||
460 | } SGE_TRANS_SIMPLE_UNION, MPI_POINTER PTR_SGE_TRANS_SIMPLE_UNION, | ||
461 | SGETransSimpleUnion_t, MPI_POINTER pSGETransSimpleUnion_t; | ||
462 | |||
463 | /****************************************************************************/ | ||
464 | /* All SGE types union */ | ||
465 | /****************************************************************************/ | ||
466 | |||
467 | typedef struct _SGE_MPI_UNION | ||
468 | { | ||
469 | union | ||
470 | { | ||
471 | SGE_SIMPLE_UNION Simple; | ||
472 | SGE_CHAIN_UNION Chain; | ||
473 | SGE_TRANSACTION_UNION Transaction; | ||
474 | } u; | ||
475 | } SGE_MPI_UNION, MPI_POINTER PTR_SGE_MPI_UNION, | ||
476 | MPI_SGE_UNION_t, MPI_POINTER pMPI_SGE_UNION_t, | ||
477 | SGEAllUnion_t, MPI_POINTER pSGEAllUnion_t; | ||
478 | |||
479 | |||
480 | /****************************************************************************/ | ||
481 | /* SGE field definition and masks */ | ||
482 | /****************************************************************************/ | ||
483 | |||
484 | /* Flags field bit definitions */ | ||
485 | |||
486 | #define MPI_SGE_FLAGS_LAST_ELEMENT (0x80) | ||
487 | #define MPI_SGE_FLAGS_END_OF_BUFFER (0x40) | ||
488 | #define MPI_SGE_FLAGS_ELEMENT_TYPE_MASK (0x30) | ||
489 | #define MPI_SGE_FLAGS_LOCAL_ADDRESS (0x08) | ||
490 | #define MPI_SGE_FLAGS_DIRECTION (0x04) | ||
491 | #define MPI_SGE_FLAGS_ADDRESS_SIZE (0x02) | ||
492 | #define MPI_SGE_FLAGS_END_OF_LIST (0x01) | ||
493 | |||
494 | #define MPI_SGE_FLAGS_SHIFT (24) | ||
495 | |||
496 | #define MPI_SGE_LENGTH_MASK (0x00FFFFFF) | ||
497 | #define MPI_SGE_CHAIN_LENGTH_MASK (0x0000FFFF) | ||
498 | |||
499 | /* Element Type */ | ||
500 | |||
501 | #define MPI_SGE_FLAGS_TRANSACTION_ELEMENT (0x00) | ||
502 | #define MPI_SGE_FLAGS_SIMPLE_ELEMENT (0x10) | ||
503 | #define MPI_SGE_FLAGS_CHAIN_ELEMENT (0x30) | ||
504 | #define MPI_SGE_FLAGS_ELEMENT_MASK (0x30) | ||
505 | |||
506 | /* Address location */ | ||
507 | |||
508 | #define MPI_SGE_FLAGS_SYSTEM_ADDRESS (0x00) | ||
509 | |||
510 | /* Direction */ | ||
511 | |||
512 | #define MPI_SGE_FLAGS_IOC_TO_HOST (0x00) | ||
513 | #define MPI_SGE_FLAGS_HOST_TO_IOC (0x04) | ||
514 | |||
515 | /* Address Size */ | ||
516 | |||
517 | #define MPI_SGE_FLAGS_32_BIT_ADDRESSING (0x00) | ||
518 | #define MPI_SGE_FLAGS_64_BIT_ADDRESSING (0x02) | ||
519 | |||
520 | /* Context Size */ | ||
521 | |||
522 | #define MPI_SGE_FLAGS_32_BIT_CONTEXT (0x00) | ||
523 | #define MPI_SGE_FLAGS_64_BIT_CONTEXT (0x02) | ||
524 | #define MPI_SGE_FLAGS_96_BIT_CONTEXT (0x04) | ||
525 | #define MPI_SGE_FLAGS_128_BIT_CONTEXT (0x06) | ||
526 | |||
527 | #define MPI_SGE_CHAIN_OFFSET_MASK (0x00FF0000) | ||
528 | #define MPI_SGE_CHAIN_OFFSET_SHIFT (16) | ||
529 | |||
530 | |||
531 | /****************************************************************************/ | ||
532 | /* SGE operation Macros */ | ||
533 | /****************************************************************************/ | ||
534 | |||
535 | /* SIMPLE FlagsLength manipulations... */ | ||
536 | #define MPI_SGE_SET_FLAGS(f) ((U32)(f) << MPI_SGE_FLAGS_SHIFT) | ||
537 | #define MPI_SGE_GET_FLAGS(fl) (((fl) & ~MPI_SGE_LENGTH_MASK) >> MPI_SGE_FLAGS_SHIFT) | ||
538 | #define MPI_SGE_LENGTH(fl) ((fl) & MPI_SGE_LENGTH_MASK) | ||
539 | #define MPI_SGE_CHAIN_LENGTH(fl) ((fl) & MPI_SGE_CHAIN_LENGTH_MASK) | ||
540 | |||
541 | #define MPI_SGE_SET_FLAGS_LENGTH(f,l) (MPI_SGE_SET_FLAGS(f) | MPI_SGE_LENGTH(l)) | ||
542 | |||
543 | #define MPI_pSGE_GET_FLAGS(psg) MPI_SGE_GET_FLAGS((psg)->FlagsLength) | ||
544 | #define MPI_pSGE_GET_LENGTH(psg) MPI_SGE_LENGTH((psg)->FlagsLength) | ||
545 | #define MPI_pSGE_SET_FLAGS_LENGTH(psg,f,l) (psg)->FlagsLength = MPI_SGE_SET_FLAGS_LENGTH(f,l) | ||
546 | /* CAUTION - The following are READ-MODIFY-WRITE! */ | ||
547 | #define MPI_pSGE_SET_FLAGS(psg,f) (psg)->FlagsLength |= MPI_SGE_SET_FLAGS(f) | ||
548 | #define MPI_pSGE_SET_LENGTH(psg,l) (psg)->FlagsLength |= MPI_SGE_LENGTH(l) | ||
549 | |||
550 | #define MPI_GET_CHAIN_OFFSET(x) ((x&MPI_SGE_CHAIN_OFFSET_MASK)>>MPI_SGE_CHAIN_OFFSET_SHIFT) | ||
551 | |||
552 | |||
553 | |||
554 | /***************************************************************************** | ||
555 | * | ||
556 | * S t a n d a r d M e s s a g e S t r u c t u r e s | ||
557 | * | ||
558 | *****************************************************************************/ | ||
559 | |||
560 | /****************************************************************************/ | ||
561 | /* Standard message request header for all request messages */ | ||
562 | /****************************************************************************/ | ||
563 | |||
564 | typedef struct _MSG_REQUEST_HEADER | ||
565 | { | ||
566 | U8 Reserved[2]; /* function specific */ | ||
567 | U8 ChainOffset; | ||
568 | U8 Function; | ||
569 | U8 Reserved1[3]; /* function specific */ | ||
570 | U8 MsgFlags; | ||
571 | U32 MsgContext; | ||
572 | } MSG_REQUEST_HEADER, MPI_POINTER PTR_MSG_REQUEST_HEADER, | ||
573 | MPIHeader_t, MPI_POINTER pMPIHeader_t; | ||
574 | |||
575 | |||
576 | /****************************************************************************/ | ||
577 | /* Default Reply */ | ||
578 | /****************************************************************************/ | ||
579 | |||
580 | typedef struct _MSG_DEFAULT_REPLY | ||
581 | { | ||
582 | U8 Reserved[2]; /* function specific */ | ||
583 | U8 MsgLength; | ||
584 | U8 Function; | ||
585 | U8 Reserved1[3]; /* function specific */ | ||
586 | U8 MsgFlags; | ||
587 | U32 MsgContext; | ||
588 | U8 Reserved2[2]; /* function specific */ | ||
589 | U16 IOCStatus; | ||
590 | U32 IOCLogInfo; | ||
591 | } MSG_DEFAULT_REPLY, MPI_POINTER PTR_MSG_DEFAULT_REPLY, | ||
592 | MPIDefaultReply_t, MPI_POINTER pMPIDefaultReply_t; | ||
593 | |||
594 | |||
595 | /* MsgFlags definition for all replies */ | ||
596 | |||
597 | #define MPI_MSGFLAGS_CONTINUATION_REPLY (0x80) | ||
598 | |||
599 | |||
600 | /***************************************************************************** | ||
601 | * | ||
602 | * I O C S t a t u s V a l u e s | ||
603 | * | ||
604 | *****************************************************************************/ | ||
605 | |||
606 | /****************************************************************************/ | ||
607 | /* Common IOCStatus values for all replies */ | ||
608 | /****************************************************************************/ | ||
609 | |||
610 | #define MPI_IOCSTATUS_SUCCESS (0x0000) | ||
611 | #define MPI_IOCSTATUS_INVALID_FUNCTION (0x0001) | ||
612 | #define MPI_IOCSTATUS_BUSY (0x0002) | ||
613 | #define MPI_IOCSTATUS_INVALID_SGL (0x0003) | ||
614 | #define MPI_IOCSTATUS_INTERNAL_ERROR (0x0004) | ||
615 | #define MPI_IOCSTATUS_RESERVED (0x0005) | ||
616 | #define MPI_IOCSTATUS_INSUFFICIENT_RESOURCES (0x0006) | ||
617 | #define MPI_IOCSTATUS_INVALID_FIELD (0x0007) | ||
618 | #define MPI_IOCSTATUS_INVALID_STATE (0x0008) | ||
619 | #define MPI_IOCSTATUS_OP_STATE_NOT_SUPPORTED (0x0009) | ||
620 | |||
621 | /****************************************************************************/ | ||
622 | /* Config IOCStatus values */ | ||
623 | /****************************************************************************/ | ||
624 | |||
625 | #define MPI_IOCSTATUS_CONFIG_INVALID_ACTION (0x0020) | ||
626 | #define MPI_IOCSTATUS_CONFIG_INVALID_TYPE (0x0021) | ||
627 | #define MPI_IOCSTATUS_CONFIG_INVALID_PAGE (0x0022) | ||
628 | #define MPI_IOCSTATUS_CONFIG_INVALID_DATA (0x0023) | ||
629 | #define MPI_IOCSTATUS_CONFIG_NO_DEFAULTS (0x0024) | ||
630 | #define MPI_IOCSTATUS_CONFIG_CANT_COMMIT (0x0025) | ||
631 | |||
632 | /****************************************************************************/ | ||
633 | /* SCSIIO Reply (SPI & FCP) initiator values */ | ||
634 | /****************************************************************************/ | ||
635 | |||
636 | #define MPI_IOCSTATUS_SCSI_RECOVERED_ERROR (0x0040) | ||
637 | #define MPI_IOCSTATUS_SCSI_INVALID_BUS (0x0041) | ||
638 | #define MPI_IOCSTATUS_SCSI_INVALID_TARGETID (0x0042) | ||
639 | #define MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE (0x0043) | ||
640 | #define MPI_IOCSTATUS_SCSI_DATA_OVERRUN (0x0044) | ||
641 | #define MPI_IOCSTATUS_SCSI_DATA_UNDERRUN (0x0045) | ||
642 | #define MPI_IOCSTATUS_SCSI_IO_DATA_ERROR (0x0046) | ||
643 | #define MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR (0x0047) | ||
644 | #define MPI_IOCSTATUS_SCSI_TASK_TERMINATED (0x0048) | ||
645 | #define MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH (0x0049) | ||
646 | #define MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED (0x004A) | ||
647 | #define MPI_IOCSTATUS_SCSI_IOC_TERMINATED (0x004B) | ||
648 | #define MPI_IOCSTATUS_SCSI_EXT_TERMINATED (0x004C) | ||
649 | |||
650 | /****************************************************************************/ | ||
651 | /* For use by SCSI Initiator and SCSI Target end-to-end data protection */ | ||
652 | /****************************************************************************/ | ||
653 | |||
654 | #define MPI_IOCSTATUS_EEDP_CRC_ERROR (0x004D) | ||
655 | #define MPI_IOCSTATUS_EEDP_LBA_TAG_ERROR (0x004E) | ||
656 | #define MPI_IOCSTATUS_EEDP_APP_TAG_ERROR (0x004F) | ||
657 | |||
658 | |||
659 | /****************************************************************************/ | ||
660 | /* SCSI (SPI & FCP) target values */ | ||
661 | /****************************************************************************/ | ||
662 | |||
663 | #define MPI_IOCSTATUS_TARGET_PRIORITY_IO (0x0060) | ||
664 | #define MPI_IOCSTATUS_TARGET_INVALID_PORT (0x0061) | ||
665 | #define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX (0x0062) /* obsolete */ | ||
666 | #define MPI_IOCSTATUS_TARGET_INVALID_IO_INDEX (0x0062) | ||
667 | #define MPI_IOCSTATUS_TARGET_ABORTED (0x0063) | ||
668 | #define MPI_IOCSTATUS_TARGET_NO_CONN_RETRYABLE (0x0064) | ||
669 | #define MPI_IOCSTATUS_TARGET_NO_CONNECTION (0x0065) | ||
670 | #define MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH (0x006A) | ||
671 | #define MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT (0x006B) | ||
672 | |||
673 | /****************************************************************************/ | ||
674 | /* Additional FCP target values (obsolete) */ | ||
675 | /****************************************************************************/ | ||
676 | |||
677 | #define MPI_IOCSTATUS_TARGET_FC_ABORTED (0x0066) /* obsolete */ | ||
678 | #define MPI_IOCSTATUS_TARGET_FC_RX_ID_INVALID (0x0067) /* obsolete */ | ||
679 | #define MPI_IOCSTATUS_TARGET_FC_DID_INVALID (0x0068) /* obsolete */ | ||
680 | #define MPI_IOCSTATUS_TARGET_FC_NODE_LOGGED_OUT (0x0069) /* obsolete */ | ||
681 | |||
682 | /****************************************************************************/ | ||
683 | /* Fibre Channel Direct Access values */ | ||
684 | /****************************************************************************/ | ||
685 | |||
686 | #define MPI_IOCSTATUS_FC_ABORTED (0x0066) | ||
687 | #define MPI_IOCSTATUS_FC_RX_ID_INVALID (0x0067) | ||
688 | #define MPI_IOCSTATUS_FC_DID_INVALID (0x0068) | ||
689 | #define MPI_IOCSTATUS_FC_NODE_LOGGED_OUT (0x0069) | ||
690 | #define MPI_IOCSTATUS_FC_EXCHANGE_CANCELED (0x006C) | ||
691 | |||
692 | /****************************************************************************/ | ||
693 | /* LAN values */ | ||
694 | /****************************************************************************/ | ||
695 | |||
696 | #define MPI_IOCSTATUS_LAN_DEVICE_NOT_FOUND (0x0080) | ||
697 | #define MPI_IOCSTATUS_LAN_DEVICE_FAILURE (0x0081) | ||
698 | #define MPI_IOCSTATUS_LAN_TRANSMIT_ERROR (0x0082) | ||
699 | #define MPI_IOCSTATUS_LAN_TRANSMIT_ABORTED (0x0083) | ||
700 | #define MPI_IOCSTATUS_LAN_RECEIVE_ERROR (0x0084) | ||
701 | #define MPI_IOCSTATUS_LAN_RECEIVE_ABORTED (0x0085) | ||
702 | #define MPI_IOCSTATUS_LAN_PARTIAL_PACKET (0x0086) | ||
703 | #define MPI_IOCSTATUS_LAN_CANCELED (0x0087) | ||
704 | |||
705 | /****************************************************************************/ | ||
706 | /* Serial Attached SCSI values */ | ||
707 | /****************************************************************************/ | ||
708 | |||
709 | #define MPI_IOCSTATUS_SAS_SMP_REQUEST_FAILED (0x0090) | ||
710 | |||
711 | /****************************************************************************/ | ||
712 | /* Inband values */ | ||
713 | /****************************************************************************/ | ||
714 | |||
715 | #define MPI_IOCSTATUS_INBAND_ABORTED (0x0098) | ||
716 | #define MPI_IOCSTATUS_INBAND_NO_CONNECTION (0x0099) | ||
717 | |||
718 | /****************************************************************************/ | ||
719 | /* Diagnostic Tools values */ | ||
720 | /****************************************************************************/ | ||
721 | |||
722 | #define MPI_IOCSTATUS_DIAGNOSTIC_RELEASED (0x00A0) | ||
723 | |||
724 | |||
725 | /****************************************************************************/ | ||
726 | /* IOCStatus flag to indicate that log info is available */ | ||
727 | /****************************************************************************/ | ||
728 | |||
729 | #define MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE (0x8000) | ||
730 | #define MPI_IOCSTATUS_MASK (0x7FFF) | ||
731 | |||
732 | /****************************************************************************/ | ||
733 | /* LogInfo Types */ | ||
734 | /****************************************************************************/ | ||
735 | |||
736 | #define MPI_IOCLOGINFO_TYPE_MASK (0xF0000000) | ||
737 | #define MPI_IOCLOGINFO_TYPE_SHIFT (28) | ||
738 | #define MPI_IOCLOGINFO_TYPE_NONE (0x0) | ||
739 | #define MPI_IOCLOGINFO_TYPE_SCSI (0x1) | ||
740 | #define MPI_IOCLOGINFO_TYPE_FC (0x2) | ||
741 | #define MPI_IOCLOGINFO_TYPE_SAS (0x3) | ||
742 | #define MPI_IOCLOGINFO_TYPE_ISCSI (0x4) | ||
743 | #define MPI_IOCLOGINFO_LOG_DATA_MASK (0x0FFFFFFF) | ||
744 | |||
745 | |||
746 | #endif | ||