2 * Copyright (c) 2007-2015 LSI Corp.
3 * Copyright (c) 2013-2015 Avago Technologies
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
33 * Copyright (c) 2007-2015 LSI Corporation.
34 * Copyright (c) 2013-2015 Avago Technologies
38 * Title: MPI diagnostic tool structures and definitions
39 * Creation Date: March 26, 2007
41 * mpi2_tool.h Version: 02.00.06
46 * Date Version Description
47 * -------- -------- ------------------------------------------------------
48 * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A.
49 * 12-18-07 02.00.01 Added Diagnostic Buffer Post and Diagnostic Release
50 * structures and defines.
51 * 02-29-08 02.00.02 Modified various names to make them 32-character unique.
52 * 05-06-09 02.00.03 Added ISTWI Read Write Tool and Diagnostic CLI Tool.
53 * 07-30-09 02.00.04 Added ExtendedType field to DiagnosticBufferPost request
55 * Added MPI2_DIAG_BUF_TYPE_EXTENDED.
56 * Incremented MPI2_DIAG_BUF_TYPE_COUNT.
57 * 05-12-10 02.00.05 Added Diagnostic Data Upload tool.
58 * 08-11-10 02.00.06 Added defines that were missing for Diagnostic Buffer
60 * --------------------------------------------------------------------------
66 /*****************************************************************************
70 *****************************************************************************/
72 /* defines for the Tools */
73 #define MPI2_TOOLBOX_CLEAN_TOOL (0x00)
74 #define MPI2_TOOLBOX_MEMORY_MOVE_TOOL (0x01)
75 #define MPI2_TOOLBOX_DIAG_DATA_UPLOAD_TOOL (0x02)
76 #define MPI2_TOOLBOX_ISTWI_READ_WRITE_TOOL (0x03)
77 #define MPI2_TOOLBOX_BEACON_TOOL (0x05)
78 #define MPI2_TOOLBOX_DIAGNOSTIC_CLI_TOOL (0x06)
81 /****************************************************************************
83 ****************************************************************************/
85 typedef struct _MPI2_TOOLBOX_REPLY
88 U8 Reserved1; /* 0x01 */
89 U8 MsgLength; /* 0x02 */
90 U8 Function; /* 0x03 */
91 U16 Reserved2; /* 0x04 */
92 U8 Reserved3; /* 0x06 */
93 U8 MsgFlags; /* 0x07 */
96 U16 Reserved4; /* 0x0A */
97 U16 Reserved5; /* 0x0C */
98 U16 IOCStatus; /* 0x0E */
99 U32 IOCLogInfo; /* 0x10 */
100 } MPI2_TOOLBOX_REPLY, MPI2_POINTER PTR_MPI2_TOOLBOX_REPLY,
101 Mpi2ToolboxReply_t, MPI2_POINTER pMpi2ToolboxReply_t;
104 /****************************************************************************
105 * Toolbox Clean Tool request
106 ****************************************************************************/
108 typedef struct _MPI2_TOOLBOX_CLEAN_REQUEST
111 U8 Reserved1; /* 0x01 */
112 U8 ChainOffset; /* 0x02 */
113 U8 Function; /* 0x03 */
114 U16 Reserved2; /* 0x04 */
115 U8 Reserved3; /* 0x06 */
116 U8 MsgFlags; /* 0x07 */
119 U16 Reserved4; /* 0x0A */
120 U32 Flags; /* 0x0C */
121 } MPI2_TOOLBOX_CLEAN_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_CLEAN_REQUEST,
122 Mpi2ToolboxCleanRequest_t, MPI2_POINTER pMpi2ToolboxCleanRequest_t;
124 /* values for the Flags field */
125 #define MPI2_TOOLBOX_CLEAN_BOOT_SERVICES (0x80000000)
126 #define MPI2_TOOLBOX_CLEAN_PERSIST_MANUFACT_PAGES (0x40000000)
127 #define MPI2_TOOLBOX_CLEAN_OTHER_PERSIST_PAGES (0x20000000)
128 #define MPI2_TOOLBOX_CLEAN_FW_CURRENT (0x10000000)
129 #define MPI2_TOOLBOX_CLEAN_FW_BACKUP (0x08000000)
130 #define MPI2_TOOLBOX_CLEAN_MEGARAID (0x02000000)
131 #define MPI2_TOOLBOX_CLEAN_INITIALIZATION (0x01000000)
132 #define MPI2_TOOLBOX_CLEAN_FLASH (0x00000004)
133 #define MPI2_TOOLBOX_CLEAN_SEEPROM (0x00000002)
134 #define MPI2_TOOLBOX_CLEAN_NVSRAM (0x00000001)
137 /****************************************************************************
138 * Toolbox Memory Move request
139 ****************************************************************************/
141 typedef struct _MPI2_TOOLBOX_MEM_MOVE_REQUEST
144 U8 Reserved1; /* 0x01 */
145 U8 ChainOffset; /* 0x02 */
146 U8 Function; /* 0x03 */
147 U16 Reserved2; /* 0x04 */
148 U8 Reserved3; /* 0x06 */
149 U8 MsgFlags; /* 0x07 */
152 U16 Reserved4; /* 0x0A */
153 MPI2_SGE_SIMPLE_UNION SGL; /* 0x0C */
154 } MPI2_TOOLBOX_MEM_MOVE_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_MEM_MOVE_REQUEST,
155 Mpi2ToolboxMemMoveRequest_t, MPI2_POINTER pMpi2ToolboxMemMoveRequest_t;
158 /****************************************************************************
159 * Toolbox Diagnostic Data Upload request
160 ****************************************************************************/
162 typedef struct _MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST
165 U8 Reserved1; /* 0x01 */
166 U8 ChainOffset; /* 0x02 */
167 U8 Function; /* 0x03 */
168 U16 Reserved2; /* 0x04 */
169 U8 Reserved3; /* 0x06 */
170 U8 MsgFlags; /* 0x07 */
173 U16 Reserved4; /* 0x0A */
174 U8 SGLFlags; /* 0x0C */
175 U8 Reserved5; /* 0x0D */
176 U16 Reserved6; /* 0x0E */
177 U32 Flags; /* 0x10 */
178 U32 DataLength; /* 0x14 */
179 MPI2_SGE_SIMPLE_UNION SGL; /* 0x18 */
180 } MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST,
181 MPI2_POINTER PTR_MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST,
182 Mpi2ToolboxDiagDataUploadRequest_t,
183 MPI2_POINTER pMpi2ToolboxDiagDataUploadRequest_t;
185 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
188 typedef struct _MPI2_DIAG_DATA_UPLOAD_HEADER
190 U32 DiagDataLength; /* 00h */
191 U8 FormatCode; /* 04h */
192 U8 Reserved1; /* 05h */
193 U16 Reserved2; /* 06h */
194 } MPI2_DIAG_DATA_UPLOAD_HEADER, MPI2_POINTER PTR_MPI2_DIAG_DATA_UPLOAD_HEADER,
195 Mpi2DiagDataUploadHeader_t, MPI2_POINTER pMpi2DiagDataUploadHeader_t;
198 /****************************************************************************
199 * Toolbox ISTWI Read Write Tool
200 ****************************************************************************/
202 /* Toolbox ISTWI Read Write Tool request message */
203 typedef struct _MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST
206 U8 Reserved1; /* 0x01 */
207 U8 ChainOffset; /* 0x02 */
208 U8 Function; /* 0x03 */
209 U16 Reserved2; /* 0x04 */
210 U8 Reserved3; /* 0x06 */
211 U8 MsgFlags; /* 0x07 */
214 U16 Reserved4; /* 0x0A */
215 U32 Reserved5; /* 0x0C */
216 U32 Reserved6; /* 0x10 */
217 U8 DevIndex; /* 0x14 */
218 U8 Action; /* 0x15 */
219 U8 SGLFlags; /* 0x16 */
220 U8 Reserved7; /* 0x17 */
221 U16 TxDataLength; /* 0x18 */
222 U16 RxDataLength; /* 0x1A */
223 U32 Reserved8; /* 0x1C */
224 U32 Reserved9; /* 0x20 */
225 U32 Reserved10; /* 0x24 */
226 U32 Reserved11; /* 0x28 */
227 U32 Reserved12; /* 0x2C */
228 MPI2_SGE_SIMPLE_UNION SGL; /* 0x30 */
229 } MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST,
230 MPI2_POINTER PTR_MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST,
231 Mpi2ToolboxIstwiReadWriteRequest_t,
232 MPI2_POINTER pMpi2ToolboxIstwiReadWriteRequest_t;
234 /* values for the Action field */
235 #define MPI2_TOOL_ISTWI_ACTION_READ_DATA (0x01)
236 #define MPI2_TOOL_ISTWI_ACTION_WRITE_DATA (0x02)
237 #define MPI2_TOOL_ISTWI_ACTION_SEQUENCE (0x03)
238 #define MPI2_TOOL_ISTWI_ACTION_RESERVE_BUS (0x10)
239 #define MPI2_TOOL_ISTWI_ACTION_RELEASE_BUS (0x11)
240 #define MPI2_TOOL_ISTWI_ACTION_RESET (0x12)
242 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
245 /* Toolbox ISTWI Read Write Tool reply message */
246 typedef struct _MPI2_TOOLBOX_ISTWI_REPLY
249 U8 Reserved1; /* 0x01 */
250 U8 MsgLength; /* 0x02 */
251 U8 Function; /* 0x03 */
252 U16 Reserved2; /* 0x04 */
253 U8 Reserved3; /* 0x06 */
254 U8 MsgFlags; /* 0x07 */
257 U16 Reserved4; /* 0x0A */
258 U16 Reserved5; /* 0x0C */
259 U16 IOCStatus; /* 0x0E */
260 U32 IOCLogInfo; /* 0x10 */
261 U8 DevIndex; /* 0x14 */
262 U8 Action; /* 0x15 */
263 U8 IstwiStatus; /* 0x16 */
264 U8 Reserved6; /* 0x17 */
265 U16 TxDataCount; /* 0x18 */
266 U16 RxDataCount; /* 0x1A */
267 } MPI2_TOOLBOX_ISTWI_REPLY, MPI2_POINTER PTR_MPI2_TOOLBOX_ISTWI_REPLY,
268 Mpi2ToolboxIstwiReply_t, MPI2_POINTER pMpi2ToolboxIstwiReply_t;
271 /****************************************************************************
272 * Toolbox Beacon Tool request
273 ****************************************************************************/
275 typedef struct _MPI2_TOOLBOX_BEACON_REQUEST
278 U8 Reserved1; /* 0x01 */
279 U8 ChainOffset; /* 0x02 */
280 U8 Function; /* 0x03 */
281 U16 Reserved2; /* 0x04 */
282 U8 Reserved3; /* 0x06 */
283 U8 MsgFlags; /* 0x07 */
286 U16 Reserved4; /* 0x0A */
287 U8 Reserved5; /* 0x0C */
288 U8 PhysicalPort; /* 0x0D */
289 U8 Reserved6; /* 0x0E */
291 } MPI2_TOOLBOX_BEACON_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_BEACON_REQUEST,
292 Mpi2ToolboxBeaconRequest_t, MPI2_POINTER pMpi2ToolboxBeaconRequest_t;
294 /* values for the Flags field */
295 #define MPI2_TOOLBOX_FLAGS_BEACONMODE_OFF (0x00)
296 #define MPI2_TOOLBOX_FLAGS_BEACONMODE_ON (0x01)
299 /****************************************************************************
300 * Toolbox Diagnostic CLI Tool
301 ****************************************************************************/
303 #define MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH (0x5C)
305 /* Toolbox Diagnostic CLI Tool request message */
306 typedef struct _MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST
309 U8 Reserved1; /* 0x01 */
310 U8 ChainOffset; /* 0x02 */
311 U8 Function; /* 0x03 */
312 U16 Reserved2; /* 0x04 */
313 U8 Reserved3; /* 0x06 */
314 U8 MsgFlags; /* 0x07 */
317 U16 Reserved4; /* 0x0A */
318 U8 SGLFlags; /* 0x0C */
319 U8 Reserved5; /* 0x0D */
320 U16 Reserved6; /* 0x0E */
321 U32 DataLength; /* 0x10 */
322 U8 DiagnosticCliCommand[MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH]; /* 0x14 */
323 MPI2_SGE_SIMPLE_UNION SGL; /* 0x70 */
324 } MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST,
325 MPI2_POINTER PTR_MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST,
326 Mpi2ToolboxDiagnosticCliRequest_t,
327 MPI2_POINTER pMpi2ToolboxDiagnosticCliRequest_t;
329 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
332 /* Toolbox Diagnostic CLI Tool reply message */
333 typedef struct _MPI2_TOOLBOX_DIAGNOSTIC_CLI_REPLY
336 U8 Reserved1; /* 0x01 */
337 U8 MsgLength; /* 0x02 */
338 U8 Function; /* 0x03 */
339 U16 Reserved2; /* 0x04 */
340 U8 Reserved3; /* 0x06 */
341 U8 MsgFlags; /* 0x07 */
344 U16 Reserved4; /* 0x0A */
345 U16 Reserved5; /* 0x0C */
346 U16 IOCStatus; /* 0x0E */
347 U32 IOCLogInfo; /* 0x10 */
348 U32 ReturnedDataLength; /* 0x14 */
349 } MPI2_TOOLBOX_DIAGNOSTIC_CLI_REPLY,
350 MPI2_POINTER PTR_MPI2_TOOLBOX_DIAG_CLI_REPLY,
351 Mpi2ToolboxDiagnosticCliReply_t,
352 MPI2_POINTER pMpi2ToolboxDiagnosticCliReply_t;
355 /*****************************************************************************
357 * Diagnostic Buffer Messages
359 *****************************************************************************/
362 /****************************************************************************
363 * Diagnostic Buffer Post request
364 ****************************************************************************/
366 typedef struct _MPI2_DIAG_BUFFER_POST_REQUEST
368 U8 ExtendedType; /* 0x00 */
369 U8 BufferType; /* 0x01 */
370 U8 ChainOffset; /* 0x02 */
371 U8 Function; /* 0x03 */
372 U16 Reserved2; /* 0x04 */
373 U8 Reserved3; /* 0x06 */
374 U8 MsgFlags; /* 0x07 */
377 U16 Reserved4; /* 0x0A */
378 U64 BufferAddress; /* 0x0C */
379 U32 BufferLength; /* 0x14 */
380 U32 Reserved5; /* 0x18 */
381 U32 Reserved6; /* 0x1C */
382 U32 Flags; /* 0x20 */
383 U32 ProductSpecific[23]; /* 0x24 */
384 } MPI2_DIAG_BUFFER_POST_REQUEST, MPI2_POINTER PTR_MPI2_DIAG_BUFFER_POST_REQUEST,
385 Mpi2DiagBufferPostRequest_t, MPI2_POINTER pMpi2DiagBufferPostRequest_t;
387 /* values for the ExtendedType field */
388 #define MPI2_DIAG_EXTENDED_TYPE_UTILIZATION (0x02)
390 /* values for the BufferType field */
391 #define MPI2_DIAG_BUF_TYPE_TRACE (0x00)
392 #define MPI2_DIAG_BUF_TYPE_SNAPSHOT (0x01)
393 #define MPI2_DIAG_BUF_TYPE_EXTENDED (0x02)
394 /* count of the number of buffer types */
395 #define MPI2_DIAG_BUF_TYPE_COUNT (0x03)
397 /* values for the Flags field */
398 #define MPI2_DIAG_BUF_FLAG_RELEASE_ON_FULL (0x00000002)
399 #define MPI2_DIAG_BUF_FLAG_IMMEDIATE_RELEASE (0x00000001)
402 /****************************************************************************
403 * Diagnostic Buffer Post reply
404 ****************************************************************************/
406 typedef struct _MPI2_DIAG_BUFFER_POST_REPLY
408 U8 ExtendedType; /* 0x00 */
409 U8 BufferType; /* 0x01 */
410 U8 MsgLength; /* 0x02 */
411 U8 Function; /* 0x03 */
412 U16 Reserved2; /* 0x04 */
413 U8 Reserved3; /* 0x06 */
414 U8 MsgFlags; /* 0x07 */
417 U16 Reserved4; /* 0x0A */
418 U16 Reserved5; /* 0x0C */
419 U16 IOCStatus; /* 0x0E */
420 U32 IOCLogInfo; /* 0x10 */
421 U32 TransferLength; /* 0x14 */
422 } MPI2_DIAG_BUFFER_POST_REPLY, MPI2_POINTER PTR_MPI2_DIAG_BUFFER_POST_REPLY,
423 Mpi2DiagBufferPostReply_t, MPI2_POINTER pMpi2DiagBufferPostReply_t;
426 /****************************************************************************
427 * Diagnostic Release request
428 ****************************************************************************/
430 typedef struct _MPI2_DIAG_RELEASE_REQUEST
432 U8 Reserved1; /* 0x00 */
433 U8 BufferType; /* 0x01 */
434 U8 ChainOffset; /* 0x02 */
435 U8 Function; /* 0x03 */
436 U16 Reserved2; /* 0x04 */
437 U8 Reserved3; /* 0x06 */
438 U8 MsgFlags; /* 0x07 */
441 U16 Reserved4; /* 0x0A */
442 } MPI2_DIAG_RELEASE_REQUEST, MPI2_POINTER PTR_MPI2_DIAG_RELEASE_REQUEST,
443 Mpi2DiagReleaseRequest_t, MPI2_POINTER pMpi2DiagReleaseRequest_t;
446 /****************************************************************************
447 * Diagnostic Buffer Post reply
448 ****************************************************************************/
450 typedef struct _MPI2_DIAG_RELEASE_REPLY
452 U8 Reserved1; /* 0x00 */
453 U8 BufferType; /* 0x01 */
454 U8 MsgLength; /* 0x02 */
455 U8 Function; /* 0x03 */
456 U16 Reserved2; /* 0x04 */
457 U8 Reserved3; /* 0x06 */
458 U8 MsgFlags; /* 0x07 */
461 U16 Reserved4; /* 0x0A */
462 U16 Reserved5; /* 0x0C */
463 U16 IOCStatus; /* 0x0E */
464 U32 IOCLogInfo; /* 0x10 */
465 } MPI2_DIAG_RELEASE_REPLY, MPI2_POINTER PTR_MPI2_DIAG_RELEASE_REPLY,
466 Mpi2DiagReleaseReply_t, MPI2_POINTER pMpi2DiagReleaseReply_t;