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