xref: /freebsd/sys/dev/mpr/mpi/mpi2_tool.h (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1 /*-
2  *  Copyright 2000-2020 Broadcom Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  * 3. Neither the name of the author nor the names of any co-contributors
13  *    may be used to endorse or promote products derived from this software
14  *    without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  * Broadcom Inc. (LSI) MPT-Fusion Host Adapter FreeBSD
29  */
30 
31 /*
32  *  Copyright 2000-2020 Broadcom Inc. All rights reserved.
33  *
34  *
35  *           Name:  mpi2_tool.h
36  *          Title:  MPI diagnostic tool structures and definitions
37  *  Creation Date:  March 26, 2007
38  *
39  *    mpi2_tool.h Version:  02.00.15
40  *
41  *  Version History
42  *  ---------------
43  *
44  *  Date      Version   Description
45  *  --------  --------  ------------------------------------------------------
46  *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
47  *  12-18-07  02.00.01  Added Diagnostic Buffer Post and Diagnostic Release
48  *                      structures and defines.
49  *  02-29-08  02.00.02  Modified various names to make them 32-character unique.
50  *  05-06-09  02.00.03  Added ISTWI Read Write Tool and Diagnostic CLI Tool.
51  *  07-30-09  02.00.04  Added ExtendedType field to DiagnosticBufferPost request
52  *                      and reply messages.
53  *                      Added MPI2_DIAG_BUF_TYPE_EXTENDED.
54  *                      Incremented MPI2_DIAG_BUF_TYPE_COUNT.
55  *  05-12-10  02.00.05  Added Diagnostic Data Upload tool.
56  *  08-11-10  02.00.06  Added defines that were missing for Diagnostic Buffer
57  *                      Post Request.
58  *  05-25-11  02.00.07  Added Flags field and related defines to
59  *                      MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST.
60  *  11-18-11  02.00.08  Incorporating additions for MPI v2.5.
61  *  07-10-12  02.00.09  Add MPI v2.5 Toolbox Diagnostic CLI Tool Request
62  *                      message.
63  *  07-26-12  02.00.10  Modified MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST so that
64  *                      it uses MPI Chain SGE as well as MPI Simple SGE.
65  *  08-19-13  02.00.11  Added MPI2_TOOLBOX_TEXT_DISPLAY_TOOL and related info.
66  *  01-08-14  02.00.12  Added MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC.
67  *  11-18-14  02.00.13  Updated copyright information.
68  *  08-25-16  02.00.14  Added new values for the Flags field of Toolbox Clean
69  *                      Tool Request Message.
70  *  07-22-18  02.00.15  Added defines for new TOOLBOX_PCIE_LANE_MARGINING tool.
71  *                      Added option for DeviceInfo field in ISTWI tool.
72  *  --------------------------------------------------------------------------
73  */
74 
75 #ifndef MPI2_TOOL_H
76 #define MPI2_TOOL_H
77 
78 /*****************************************************************************
79 *
80 *               Toolbox Messages
81 *
82 *****************************************************************************/
83 
84 /* defines for the Tools */
85 #define MPI2_TOOLBOX_CLEAN_TOOL                     (0x00)
86 #define MPI2_TOOLBOX_MEMORY_MOVE_TOOL               (0x01)
87 #define MPI2_TOOLBOX_DIAG_DATA_UPLOAD_TOOL          (0x02)
88 #define MPI2_TOOLBOX_ISTWI_READ_WRITE_TOOL          (0x03)
89 #define MPI2_TOOLBOX_BEACON_TOOL                    (0x05)
90 #define MPI2_TOOLBOX_DIAGNOSTIC_CLI_TOOL            (0x06)
91 #define MPI2_TOOLBOX_TEXT_DISPLAY_TOOL              (0x07)
92 #define MPI26_TOOLBOX_BACKEND_PCIE_LANE_MARGIN      (0x08)
93 
94 /****************************************************************************
95 *  Toolbox reply
96 ****************************************************************************/
97 
98 typedef struct _MPI2_TOOLBOX_REPLY
99 {
100     U8                      Tool;                       /* 0x00 */
101     U8                      Reserved1;                  /* 0x01 */
102     U8                      MsgLength;                  /* 0x02 */
103     U8                      Function;                   /* 0x03 */
104     U16                     Reserved2;                  /* 0x04 */
105     U8                      Reserved3;                  /* 0x06 */
106     U8                      MsgFlags;                   /* 0x07 */
107     U8                      VP_ID;                      /* 0x08 */
108     U8                      VF_ID;                      /* 0x09 */
109     U16                     Reserved4;                  /* 0x0A */
110     U16                     Reserved5;                  /* 0x0C */
111     U16                     IOCStatus;                  /* 0x0E */
112     U32                     IOCLogInfo;                 /* 0x10 */
113 } MPI2_TOOLBOX_REPLY, MPI2_POINTER PTR_MPI2_TOOLBOX_REPLY,
114   Mpi2ToolboxReply_t, MPI2_POINTER pMpi2ToolboxReply_t;
115 
116 /****************************************************************************
117 *  Toolbox Clean Tool request
118 ****************************************************************************/
119 
120 typedef struct _MPI2_TOOLBOX_CLEAN_REQUEST
121 {
122     U8                      Tool;                       /* 0x00 */
123     U8                      Reserved1;                  /* 0x01 */
124     U8                      ChainOffset;                /* 0x02 */
125     U8                      Function;                   /* 0x03 */
126     U16                     Reserved2;                  /* 0x04 */
127     U8                      Reserved3;                  /* 0x06 */
128     U8                      MsgFlags;                   /* 0x07 */
129     U8                      VP_ID;                      /* 0x08 */
130     U8                      VF_ID;                      /* 0x09 */
131     U16                     Reserved4;                  /* 0x0A */
132     U32                     Flags;                      /* 0x0C */
133    } MPI2_TOOLBOX_CLEAN_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_CLEAN_REQUEST,
134   Mpi2ToolboxCleanRequest_t, MPI2_POINTER pMpi2ToolboxCleanRequest_t;
135 
136 /* values for the Flags field */
137 #define MPI2_TOOLBOX_CLEAN_BOOT_SERVICES            (0x80000000)
138 #define MPI2_TOOLBOX_CLEAN_PERSIST_MANUFACT_PAGES   (0x40000000)
139 #define MPI2_TOOLBOX_CLEAN_OTHER_PERSIST_PAGES      (0x20000000)
140 #define MPI2_TOOLBOX_CLEAN_FW_CURRENT               (0x10000000)
141 #define MPI2_TOOLBOX_CLEAN_FW_BACKUP                (0x08000000)
142 #define MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC   (0x04000000)
143 #define MPI2_TOOLBOX_CLEAN_MEGARAID                 (0x02000000)
144 #define MPI2_TOOLBOX_CLEAN_INITIALIZATION           (0x01000000)
145 #define MPI2_TOOLBOX_CLEAN_SBR                      (0x00800000)
146 #define MPI2_TOOLBOX_CLEAN_SBR_BACKUP               (0x00400000)
147 #define MPI2_TOOLBOX_CLEAN_HIIM                     (0x00200000)
148 #define MPI2_TOOLBOX_CLEAN_HIIA                     (0x00100000)
149 #define MPI2_TOOLBOX_CLEAN_CTLR                     (0x00080000)
150 #define MPI2_TOOLBOX_CLEAN_IMR_FIRMWARE             (0x00040000)
151 #define MPI2_TOOLBOX_CLEAN_MR_NVDATA                (0x00020000)
152 #define MPI2_TOOLBOX_CLEAN_RESERVED_5_16            (0x0001FFE0)
153 #define MPI2_TOOLBOX_CLEAN_ALL_BUT_MPB              (0x00000010)
154 #define MPI2_TOOLBOX_CLEAN_ENTIRE_FLASH             (0x00000008)
155 #define MPI2_TOOLBOX_CLEAN_FLASH                    (0x00000004)
156 #define MPI2_TOOLBOX_CLEAN_SEEPROM                  (0x00000002)
157 #define MPI2_TOOLBOX_CLEAN_NVSRAM                   (0x00000001)
158 
159 /****************************************************************************
160 *  Toolbox Memory Move request
161 ****************************************************************************/
162 
163 typedef struct _MPI2_TOOLBOX_MEM_MOVE_REQUEST
164 {
165     U8                      Tool;                       /* 0x00 */
166     U8                      Reserved1;                  /* 0x01 */
167     U8                      ChainOffset;                /* 0x02 */
168     U8                      Function;                   /* 0x03 */
169     U16                     Reserved2;                  /* 0x04 */
170     U8                      Reserved3;                  /* 0x06 */
171     U8                      MsgFlags;                   /* 0x07 */
172     U8                      VP_ID;                      /* 0x08 */
173     U8                      VF_ID;                      /* 0x09 */
174     U16                     Reserved4;                  /* 0x0A */
175     MPI2_SGE_SIMPLE_UNION   SGL;                        /* 0x0C */
176 } MPI2_TOOLBOX_MEM_MOVE_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_MEM_MOVE_REQUEST,
177   Mpi2ToolboxMemMoveRequest_t, MPI2_POINTER pMpi2ToolboxMemMoveRequest_t;
178 
179 /****************************************************************************
180 *  Toolbox Diagnostic Data Upload request
181 ****************************************************************************/
182 
183 typedef struct _MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST
184 {
185     U8                      Tool;                       /* 0x00 */
186     U8                      Reserved1;                  /* 0x01 */
187     U8                      ChainOffset;                /* 0x02 */
188     U8                      Function;                   /* 0x03 */
189     U16                     Reserved2;                  /* 0x04 */
190     U8                      Reserved3;                  /* 0x06 */
191     U8                      MsgFlags;                   /* 0x07 */
192     U8                      VP_ID;                      /* 0x08 */
193     U8                      VF_ID;                      /* 0x09 */
194     U16                     Reserved4;                  /* 0x0A */
195     U8                      SGLFlags;                   /* 0x0C */
196     U8                      Reserved5;                  /* 0x0D */
197     U16                     Reserved6;                  /* 0x0E */
198     U32                     Flags;                      /* 0x10 */
199     U32                     DataLength;                 /* 0x14 */
200     MPI2_SGE_SIMPLE_UNION   SGL;                        /* 0x18 */
201 } MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST,
202   MPI2_POINTER PTR_MPI2_TOOLBOX_DIAG_DATA_UPLOAD_REQUEST,
203   Mpi2ToolboxDiagDataUploadRequest_t,
204   MPI2_POINTER pMpi2ToolboxDiagDataUploadRequest_t;
205 
206 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
207 
208 typedef struct _MPI2_DIAG_DATA_UPLOAD_HEADER
209 {
210     U32                     DiagDataLength;             /* 00h */
211     U8                      FormatCode;                 /* 04h */
212     U8                      Reserved1;                  /* 05h */
213     U16                     Reserved2;                  /* 06h */
214 } MPI2_DIAG_DATA_UPLOAD_HEADER, MPI2_POINTER PTR_MPI2_DIAG_DATA_UPLOAD_HEADER,
215   Mpi2DiagDataUploadHeader_t, MPI2_POINTER pMpi2DiagDataUploadHeader_t;
216 
217 /****************************************************************************
218 *  Toolbox ISTWI Read Write Tool
219 ****************************************************************************/
220 
221 /* Toolbox ISTWI Read Write Tool request message */
222 typedef struct _MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST
223 {
224     U8                      Tool;                       /* 0x00 */
225     U8                      Reserved1;                  /* 0x01 */
226     U8                      ChainOffset;                /* 0x02 */
227     U8                      Function;                   /* 0x03 */
228     U16                     Reserved2;                  /* 0x04 */
229     U8                      Reserved3;                  /* 0x06 */
230     U8                      MsgFlags;                   /* 0x07 */
231     U8                      VP_ID;                      /* 0x08 */
232     U8                      VF_ID;                      /* 0x09 */
233     U16                     Reserved4;                  /* 0x0A */
234     U32                     Reserved5;                  /* 0x0C */
235     U32                     Reserved6;                  /* 0x10 */
236     U8                      DevIndex;                   /* 0x14 */
237     U8                      Action;                     /* 0x15 */
238     U8                      SGLFlags;                   /* 0x16 */
239     U8                      Flags;                      /* 0x17 */
240     U16                     TxDataLength;               /* 0x18 */
241     U16                     RxDataLength;               /* 0x1A */
242     U32                     DeviceInfo[3];              /* 0x1C */
243     U32                     Reserved11;                 /* 0x28 */
244     U32                     Reserved12;                 /* 0x2C */
245     MPI2_SGE_SIMPLE_UNION   SGL;                        /* 0x30 */
246 } MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST,
247   MPI2_POINTER PTR_MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST,
248   Mpi2ToolboxIstwiReadWriteRequest_t,
249   MPI2_POINTER pMpi2ToolboxIstwiReadWriteRequest_t;
250 
251 /* values for the Action field */
252 #define MPI2_TOOL_ISTWI_ACTION_READ_DATA            (0x01)
253 #define MPI2_TOOL_ISTWI_ACTION_WRITE_DATA           (0x02)
254 #define MPI2_TOOL_ISTWI_ACTION_SEQUENCE             (0x03)
255 #define MPI2_TOOL_ISTWI_ACTION_RESERVE_BUS          (0x10)
256 #define MPI2_TOOL_ISTWI_ACTION_RELEASE_BUS          (0x11)
257 #define MPI2_TOOL_ISTWI_ACTION_RESET                (0x12)
258 
259 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
260 
261 /* values for the Flags field */
262 #define MPI2_TOOL_ISTWI_FLAG_AUTO_RESERVE_RELEASE   (0x80)
263 #define MPI2_TOOL_ISTWI_FLAG_PAGE_ADDR_MASK         (0x07)
264 
265 /* MPI26 TOOLBOX Request MsgFlags defines */
266 #define MPI26_TOOLBOX_REQ_MSGFLAGS_ADDRESSING_MASK     (0x01)
267 #define MPI26_TOOLBOX_REQ_MSGFLAGS_ADDRESSING_DEVINDEX (0x00)  /* Request uses Man Page 43 device index addressing */
268 #define MPI26_TOOLBOX_REQ_MSGFLAGS_ADDRESSING_DEVINFO  (0x01)  /* Request uses Man Page 43 device info struct addressing */
269 
270 /* Toolbox ISTWI Read Write Tool reply message */
271 typedef struct _MPI2_TOOLBOX_ISTWI_REPLY
272 {
273     U8                      Tool;                       /* 0x00 */
274     U8                      Reserved1;                  /* 0x01 */
275     U8                      MsgLength;                  /* 0x02 */
276     U8                      Function;                   /* 0x03 */
277     U16                     Reserved2;                  /* 0x04 */
278     U8                      Reserved3;                  /* 0x06 */
279     U8                      MsgFlags;                   /* 0x07 */
280     U8                      VP_ID;                      /* 0x08 */
281     U8                      VF_ID;                      /* 0x09 */
282     U16                     Reserved4;                  /* 0x0A */
283     U16                     Reserved5;                  /* 0x0C */
284     U16                     IOCStatus;                  /* 0x0E */
285     U32                     IOCLogInfo;                 /* 0x10 */
286     U8                      DevIndex;                   /* 0x14 */
287     U8                      Action;                     /* 0x15 */
288     U8                      IstwiStatus;                /* 0x16 */
289     U8                      Reserved6;                  /* 0x17 */
290     U16                     TxDataCount;                /* 0x18 */
291     U16                     RxDataCount;                /* 0x1A */
292 } MPI2_TOOLBOX_ISTWI_REPLY, MPI2_POINTER PTR_MPI2_TOOLBOX_ISTWI_REPLY,
293   Mpi2ToolboxIstwiReply_t, MPI2_POINTER pMpi2ToolboxIstwiReply_t;
294 
295 /****************************************************************************
296 *  Toolbox Beacon Tool request
297 ****************************************************************************/
298 
299 typedef struct _MPI2_TOOLBOX_BEACON_REQUEST
300 {
301     U8                      Tool;                       /* 0x00 */
302     U8                      Reserved1;                  /* 0x01 */
303     U8                      ChainOffset;                /* 0x02 */
304     U8                      Function;                   /* 0x03 */
305     U16                     Reserved2;                  /* 0x04 */
306     U8                      Reserved3;                  /* 0x06 */
307     U8                      MsgFlags;                   /* 0x07 */
308     U8                      VP_ID;                      /* 0x08 */
309     U8                      VF_ID;                      /* 0x09 */
310     U16                     Reserved4;                  /* 0x0A */
311     U8                      Reserved5;                  /* 0x0C */
312     U8                      PhysicalPort;               /* 0x0D */
313     U8                      Reserved6;                  /* 0x0E */
314     U8                      Flags;                      /* 0x0F */
315 } MPI2_TOOLBOX_BEACON_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_BEACON_REQUEST,
316   Mpi2ToolboxBeaconRequest_t, MPI2_POINTER pMpi2ToolboxBeaconRequest_t;
317 
318 /* values for the Flags field */
319 #define MPI2_TOOLBOX_FLAGS_BEACONMODE_OFF       (0x00)
320 #define MPI2_TOOLBOX_FLAGS_BEACONMODE_ON        (0x01)
321 
322 /****************************************************************************
323 *  Toolbox Diagnostic CLI Tool
324 ****************************************************************************/
325 
326 #define MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH    (0x5C)
327 
328 /* MPI v2.0 Toolbox Diagnostic CLI Tool request message */
329 typedef struct _MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST
330 {
331     U8                      Tool;                       /* 0x00 */
332     U8                      Reserved1;                  /* 0x01 */
333     U8                      ChainOffset;                /* 0x02 */
334     U8                      Function;                   /* 0x03 */
335     U16                     Reserved2;                  /* 0x04 */
336     U8                      Reserved3;                  /* 0x06 */
337     U8                      MsgFlags;                   /* 0x07 */
338     U8                      VP_ID;                      /* 0x08 */
339     U8                      VF_ID;                      /* 0x09 */
340     U16                     Reserved4;                  /* 0x0A */
341     U8                      SGLFlags;                   /* 0x0C */
342     U8                      Reserved5;                  /* 0x0D */
343     U16                     Reserved6;                  /* 0x0E */
344     U32                     DataLength;                 /* 0x10 */
345     U8                      DiagnosticCliCommand[MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH]; /* 0x14 */
346     MPI2_MPI_SGE_IO_UNION   SGL;                        /* 0x70 */
347 } MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST,
348   MPI2_POINTER PTR_MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST,
349   Mpi2ToolboxDiagnosticCliRequest_t,
350   MPI2_POINTER pMpi2ToolboxDiagnosticCliRequest_t;
351 
352 /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
353 
354 /* MPI v2.5 Toolbox Diagnostic CLI Tool request message */
355 typedef struct _MPI25_TOOLBOX_DIAGNOSTIC_CLI_REQUEST
356 {
357     U8                      Tool;                       /* 0x00 */
358     U8                      Reserved1;                  /* 0x01 */
359     U8                      ChainOffset;                /* 0x02 */
360     U8                      Function;                   /* 0x03 */
361     U16                     Reserved2;                  /* 0x04 */
362     U8                      Reserved3;                  /* 0x06 */
363     U8                      MsgFlags;                   /* 0x07 */
364     U8                      VP_ID;                      /* 0x08 */
365     U8                      VF_ID;                      /* 0x09 */
366     U16                     Reserved4;                  /* 0x0A */
367     U32                     Reserved5;                  /* 0x0C */
368     U32                     DataLength;                 /* 0x10 */
369     U8                      DiagnosticCliCommand[MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH]; /* 0x14 */
370     MPI25_SGE_IO_UNION      SGL;                        /* 0x70 */
371 } MPI25_TOOLBOX_DIAGNOSTIC_CLI_REQUEST,
372   MPI2_POINTER PTR_MPI25_TOOLBOX_DIAGNOSTIC_CLI_REQUEST,
373   Mpi25ToolboxDiagnosticCliRequest_t,
374   MPI2_POINTER pMpi25ToolboxDiagnosticCliRequest_t;
375 
376 /* Toolbox Diagnostic CLI Tool reply message */
377 typedef struct _MPI2_TOOLBOX_DIAGNOSTIC_CLI_REPLY
378 {
379     U8                      Tool;                       /* 0x00 */
380     U8                      Reserved1;                  /* 0x01 */
381     U8                      MsgLength;                  /* 0x02 */
382     U8                      Function;                   /* 0x03 */
383     U16                     Reserved2;                  /* 0x04 */
384     U8                      Reserved3;                  /* 0x06 */
385     U8                      MsgFlags;                   /* 0x07 */
386     U8                      VP_ID;                      /* 0x08 */
387     U8                      VF_ID;                      /* 0x09 */
388     U16                     Reserved4;                  /* 0x0A */
389     U16                     Reserved5;                  /* 0x0C */
390     U16                     IOCStatus;                  /* 0x0E */
391     U32                     IOCLogInfo;                 /* 0x10 */
392     U32                     ReturnedDataLength;         /* 0x14 */
393 } MPI2_TOOLBOX_DIAGNOSTIC_CLI_REPLY,
394   MPI2_POINTER PTR_MPI2_TOOLBOX_DIAG_CLI_REPLY,
395   Mpi2ToolboxDiagnosticCliReply_t,
396   MPI2_POINTER pMpi2ToolboxDiagnosticCliReply_t;
397 
398 /****************************************************************************
399 *  Toolbox Console Text Display Tool
400 ****************************************************************************/
401 
402 /* Toolbox Console Text Display Tool request message */
403 typedef struct _MPI2_TOOLBOX_TEXT_DISPLAY_REQUEST
404 {
405     U8                      Tool;               /* 0x00 */
406     U8                      Reserved1;          /* 0x01 */
407     U8                      ChainOffset;        /* 0x02 */
408     U8                      Function;           /* 0x03 */
409     U16                     Reserved2;          /* 0x04 */
410     U8                      Reserved3;          /* 0x06 */
411     U8                      MsgFlags;           /* 0x07 */
412     U8                      VP_ID;              /* 0x08 */
413     U8                      VF_ID;              /* 0x09 */
414     U16                     Reserved4;          /* 0x0A */
415     U8                      Console;            /* 0x0C */
416     U8                      Flags;              /* 0x0D */
417     U16                     Reserved6;          /* 0x0E */
418     U8                      TextToDisplay[4];   /* 0x10 */ /* actual length determined at runtime based on frame size */
419 } MPI2_TOOLBOX_TEXT_DISPLAY_REQUEST,
420   MPI2_POINTER PTR_MPI2_TOOLBOX_TEXT_DISPLAY_REQUEST,
421   Mpi2ToolboxTextDisplayRequest_t,
422   MPI2_POINTER pMpi2ToolboxTextDisplayRequest_t;
423 
424 /* defines for the Console field */
425 #define MPI2_TOOLBOX_CONSOLE_TYPE_MASK          (0xF0)
426 #define MPI2_TOOLBOX_CONSOLE_TYPE_DEFAULT       (0x00)
427 #define MPI2_TOOLBOX_CONSOLE_TYPE_UART          (0x10)
428 #define MPI2_TOOLBOX_CONSOLE_TYPE_ETHERNET      (0x20)
429 
430 #define MPI2_TOOLBOX_CONSOLE_NUMBER_MASK        (0x0F)
431 
432 /* defines for the Flags field */
433 #define MPI2_TOOLBOX_CONSOLE_FLAG_TIMESTAMP     (0x01)
434 
435 /****************************************************************************
436 *  Toolbox Backend Lane Margining Tool
437 ****************************************************************************/
438 
439 /* Toolbox Backend Lane Margining Tool request message */
440 typedef struct _MPI26_TOOLBOX_LANE_MARGINING_REQUEST
441 {
442     U8                      Tool;                       /* 0x00 */
443     U8                      Reserved1;                  /* 0x01 */
444     U8                      ChainOffset;                /* 0x02 */
445     U8                      Function;                   /* 0x03 */
446     U16                     Reserved2;                  /* 0x04 */
447     U8                      Reserved3;                  /* 0x06 */
448     U8                      MsgFlags;                   /* 0x07 */
449     U8                      VP_ID;                      /* 0x08 */
450     U8                      VF_ID;                      /* 0x09 */
451     U16                     Reserved4;                  /* 0x0A */
452     U8                      Command;                    /* 0x0C */
453     U8                      SwitchPort;                 /* 0x0D */
454     U16                     DevHandle;                  /* 0x0E */
455     U8                      RegisterOffset;             /* 0x10 */
456     U8                      Reserved5;                  /* 0x11 */
457     U16                     DataLength;                 /* 0x12 */
458     MPI2_SGE_SIMPLE_UNION   SGL;                        /* 0x14 */
459 } MPI26_TOOLBOX_LANE_MARGINING_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_LANE_MARGINING_REQUEST,
460   Mpi26ToolboxLaneMarginingRequest_t, MPI2_POINTER pMpi2ToolboxLaneMarginingRequest_t;
461 
462 /* defines for the Command field */
463 #define MPI26_TOOL_MARGIN_COMMAND_ENTER_MARGIN_MODE        (0x01)
464 #define MPI26_TOOL_MARGIN_COMMAND_READ_REGISTER_DATA       (0x02)
465 #define MPI26_TOOL_MARGIN_COMMAND_WRITE_REGISTER_DATA      (0x03)
466 #define MPI26_TOOL_MARGIN_COMMAND_EXIT_MARGIN_MODE         (0x04)
467 
468 /* Toolbox Backend Lane Margining Tool reply message */
469 typedef struct _MPI26_TOOLBOX_LANE_MARGINING_REPLY
470 {
471     U8                      Tool;                       /* 0x00 */
472     U8                      Reserved1;                  /* 0x01 */
473     U8                      MsgLength;                  /* 0x02 */
474     U8                      Function;                   /* 0x03 */
475     U16                     Reserved2;                  /* 0x04 */
476     U8                      Reserved3;                  /* 0x06 */
477     U8                      MsgFlags;                   /* 0x07 */
478     U8                      VP_ID;                      /* 0x08 */
479     U8                      VF_ID;                      /* 0x09 */
480     U16                     Reserved4;                  /* 0x0A */
481     U16                     Reserved5;                  /* 0x0C */
482     U16                     IOCStatus;                  /* 0x0E */
483     U32                     IOCLogInfo;                 /* 0x10 */
484     U16                     ReturnedDataLength;         /* 0x14 */
485     U16                     Reserved6;                  /* 0x16 */
486 } MPI26_TOOLBOX_LANE_MARGINING_REPLY,
487   MPI2_POINTER PTR_MPI26_TOOLBOX_LANE_MARGINING_REPLY,
488   Mpi26ToolboxLaneMarginingReply_t,
489   MPI2_POINTER pMpi26ToolboxLaneMarginingReply_t;
490 
491 /*****************************************************************************
492 *
493 *       Diagnostic Buffer Messages
494 *
495 *****************************************************************************/
496 
497 /****************************************************************************
498 *  Diagnostic Buffer Post request
499 ****************************************************************************/
500 
501 typedef struct _MPI2_DIAG_BUFFER_POST_REQUEST
502 {
503     U8                      ExtendedType;               /* 0x00 */
504     U8                      BufferType;                 /* 0x01 */
505     U8                      ChainOffset;                /* 0x02 */
506     U8                      Function;                   /* 0x03 */
507     U16                     Reserved2;                  /* 0x04 */
508     U8                      Reserved3;                  /* 0x06 */
509     U8                      MsgFlags;                   /* 0x07 */
510     U8                      VP_ID;                      /* 0x08 */
511     U8                      VF_ID;                      /* 0x09 */
512     U16                     Reserved4;                  /* 0x0A */
513     U64                     BufferAddress;              /* 0x0C */
514     U32                     BufferLength;               /* 0x14 */
515     U32                     Reserved5;                  /* 0x18 */
516     U32                     Reserved6;                  /* 0x1C */
517     U32                     Flags;                      /* 0x20 */
518     U32                     ProductSpecific[23];        /* 0x24 */
519 } MPI2_DIAG_BUFFER_POST_REQUEST, MPI2_POINTER PTR_MPI2_DIAG_BUFFER_POST_REQUEST,
520   Mpi2DiagBufferPostRequest_t, MPI2_POINTER pMpi2DiagBufferPostRequest_t;
521 
522 /* values for the ExtendedType field */
523 #define MPI2_DIAG_EXTENDED_TYPE_UTILIZATION         (0x02)
524 
525 /* values for the BufferType field */
526 #define MPI2_DIAG_BUF_TYPE_TRACE                    (0x00)
527 #define MPI2_DIAG_BUF_TYPE_SNAPSHOT                 (0x01)
528 #define MPI2_DIAG_BUF_TYPE_EXTENDED                 (0x02)
529 /* count of the number of buffer types */
530 #define MPI2_DIAG_BUF_TYPE_COUNT                    (0x03)
531 
532 /* values for the Flags field */
533 #define MPI2_DIAG_BUF_FLAG_RELEASE_ON_FULL          (0x00000002) /* for MPI v2.0 products only */
534 #define MPI2_DIAG_BUF_FLAG_IMMEDIATE_RELEASE        (0x00000001)
535 
536 /****************************************************************************
537 *  Diagnostic Buffer Post reply
538 ****************************************************************************/
539 
540 typedef struct _MPI2_DIAG_BUFFER_POST_REPLY
541 {
542     U8                      ExtendedType;               /* 0x00 */
543     U8                      BufferType;                 /* 0x01 */
544     U8                      MsgLength;                  /* 0x02 */
545     U8                      Function;                   /* 0x03 */
546     U16                     Reserved2;                  /* 0x04 */
547     U8                      Reserved3;                  /* 0x06 */
548     U8                      MsgFlags;                   /* 0x07 */
549     U8                      VP_ID;                      /* 0x08 */
550     U8                      VF_ID;                      /* 0x09 */
551     U16                     Reserved4;                  /* 0x0A */
552     U16                     Reserved5;                  /* 0x0C */
553     U16                     IOCStatus;                  /* 0x0E */
554     U32                     IOCLogInfo;                 /* 0x10 */
555     U32                     TransferLength;             /* 0x14 */
556 } MPI2_DIAG_BUFFER_POST_REPLY, MPI2_POINTER PTR_MPI2_DIAG_BUFFER_POST_REPLY,
557   Mpi2DiagBufferPostReply_t, MPI2_POINTER pMpi2DiagBufferPostReply_t;
558 
559 /****************************************************************************
560 *  Diagnostic Release request
561 ****************************************************************************/
562 
563 typedef struct _MPI2_DIAG_RELEASE_REQUEST
564 {
565     U8                      Reserved1;                  /* 0x00 */
566     U8                      BufferType;                 /* 0x01 */
567     U8                      ChainOffset;                /* 0x02 */
568     U8                      Function;                   /* 0x03 */
569     U16                     Reserved2;                  /* 0x04 */
570     U8                      Reserved3;                  /* 0x06 */
571     U8                      MsgFlags;                   /* 0x07 */
572     U8                      VP_ID;                      /* 0x08 */
573     U8                      VF_ID;                      /* 0x09 */
574     U16                     Reserved4;                  /* 0x0A */
575 } MPI2_DIAG_RELEASE_REQUEST, MPI2_POINTER PTR_MPI2_DIAG_RELEASE_REQUEST,
576   Mpi2DiagReleaseRequest_t, MPI2_POINTER pMpi2DiagReleaseRequest_t;
577 
578 /****************************************************************************
579 *  Diagnostic Buffer Post reply
580 ****************************************************************************/
581 
582 typedef struct _MPI2_DIAG_RELEASE_REPLY
583 {
584     U8                      Reserved1;                  /* 0x00 */
585     U8                      BufferType;                 /* 0x01 */
586     U8                      MsgLength;                  /* 0x02 */
587     U8                      Function;                   /* 0x03 */
588     U16                     Reserved2;                  /* 0x04 */
589     U8                      Reserved3;                  /* 0x06 */
590     U8                      MsgFlags;                   /* 0x07 */
591     U8                      VP_ID;                      /* 0x08 */
592     U8                      VF_ID;                      /* 0x09 */
593     U16                     Reserved4;                  /* 0x0A */
594     U16                     Reserved5;                  /* 0x0C */
595     U16                     IOCStatus;                  /* 0x0E */
596     U32                     IOCLogInfo;                 /* 0x10 */
597 } MPI2_DIAG_RELEASE_REPLY, MPI2_POINTER PTR_MPI2_DIAG_RELEASE_REPLY,
598   Mpi2DiagReleaseReply_t, MPI2_POINTER pMpi2DiagReleaseReply_t;
599 
600 #endif
601