1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright (c) 2000 to 2009, LSI Corporation.
24 * All rights reserved.
25 *
26 * Redistribution and use in source and binary forms of all code within
27 * this file that is exclusively owned by LSI, with or without
28 * modification, is permitted provided that, in addition to the CDDL 1.0
29 * License requirements, the following conditions are met:
30 *
31 *    Neither the name of the author nor the names of its contributors may be
32 *    used to endorse or promote products derived from this software without
33 *    specific prior written permission.
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
38 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
39 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
40 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
41 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
42 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
43 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
46 * DAMAGE.
47 */
48
49/*
50 *           Name:  mpi2_tool.h
51 *          Title:  MPI diagnostic tool structures and definitions
52 *  Creation Date:  March 26, 2007
53 *
54 *    mpi2_tool.h Version:  02.00.04
55 *
56 *  Version History
57 *  ---------------
58 *
59 *  Date      Version   Description
60 *  --------  --------  ------------------------------------------------------
61 *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
62 *  12-18-07  02.00.01  Added Diagnostic Buffer Post and Diagnostic Release
63 *                      structures and defines.
64 *  02-29-08  02.00.02  Modified various names to make them 32-character unique.
65 *  05-06-09  02.00.03  Added ISTWI Read Write Tool and Diagnostic CLI Tool.
66 *  07-30-09  02.00.04  Added ExtendedType field to DiagnosticBufferPost request
67 *                      and reply messages.
68 *                      Added MPI2_DIAG_BUF_TYPE_EXTENDED.
69 *                      Incremented MPI2_DIAG_BUF_TYPE_COUNT.
70 *  --------------------------------------------------------------------------
71 */
72
73#ifndef MPI2_TOOL_H
74#define MPI2_TOOL_H
75
76/*****************************************************************************
77*
78*               Toolbox Messages
79*
80*****************************************************************************/
81
82/* defines for the Tools */
83#define MPI2_TOOLBOX_CLEAN_TOOL                     (0x00)
84#define MPI2_TOOLBOX_MEMORY_MOVE_TOOL               (0x01)
85#define MPI2_TOOLBOX_ISTWI_READ_WRITE_TOOL          (0x03)
86#define MPI2_TOOLBOX_BEACON_TOOL                    (0x05)
87#define MPI2_TOOLBOX_DIAGNOSTIC_CLI_TOOL            (0x06)
88
89
90/****************************************************************************
91*  Toolbox reply
92****************************************************************************/
93
94typedef struct _MPI2_TOOLBOX_REPLY
95{
96    U8                      Tool;                       /* 0x00 */
97    U8                      Reserved1;                  /* 0x01 */
98    U8                      MsgLength;                  /* 0x02 */
99    U8                      Function;                   /* 0x03 */
100    U16                     Reserved2;                  /* 0x04 */
101    U8                      Reserved3;                  /* 0x06 */
102    U8                      MsgFlags;                   /* 0x07 */
103    U8                      VP_ID;                      /* 0x08 */
104    U8                      VF_ID;                      /* 0x09 */
105    U16                     Reserved4;                  /* 0x0A */
106    U16                     Reserved5;                  /* 0x0C */
107    U16                     IOCStatus;                  /* 0x0E */
108    U32                     IOCLogInfo;                 /* 0x10 */
109} MPI2_TOOLBOX_REPLY, MPI2_POINTER PTR_MPI2_TOOLBOX_REPLY,
110  Mpi2ToolboxReply_t, MPI2_POINTER pMpi2ToolboxReply_t;
111
112
113/****************************************************************************
114*  Toolbox Clean Tool request
115****************************************************************************/
116
117typedef struct _MPI2_TOOLBOX_CLEAN_REQUEST
118{
119    U8                      Tool;                       /* 0x00 */
120    U8                      Reserved1;                  /* 0x01 */
121    U8                      ChainOffset;                /* 0x02 */
122    U8                      Function;                   /* 0x03 */
123    U16                     Reserved2;                  /* 0x04 */
124    U8                      Reserved3;                  /* 0x06 */
125    U8                      MsgFlags;                   /* 0x07 */
126    U8                      VP_ID;                      /* 0x08 */
127    U8                      VF_ID;                      /* 0x09 */
128    U16                     Reserved4;                  /* 0x0A */
129    U32                     Flags;                      /* 0x0C */
130   } MPI2_TOOLBOX_CLEAN_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_CLEAN_REQUEST,
131  Mpi2ToolboxCleanRequest_t, MPI2_POINTER pMpi2ToolboxCleanRequest_t;
132
133/* values for the Flags field */
134#define MPI2_TOOLBOX_CLEAN_BOOT_SERVICES            (0x80000000)
135#define MPI2_TOOLBOX_CLEAN_PERSIST_MANUFACT_PAGES   (0x40000000)
136#define MPI2_TOOLBOX_CLEAN_OTHER_PERSIST_PAGES      (0x20000000)
137#define MPI2_TOOLBOX_CLEAN_FW_CURRENT               (0x10000000)
138#define MPI2_TOOLBOX_CLEAN_FW_BACKUP                (0x08000000)
139#define MPI2_TOOLBOX_CLEAN_MEGARAID                 (0x02000000)
140#define MPI2_TOOLBOX_CLEAN_INITIALIZATION           (0x01000000)
141#define MPI2_TOOLBOX_CLEAN_FLASH                    (0x00000004)
142#define MPI2_TOOLBOX_CLEAN_SEEPROM                  (0x00000002)
143#define MPI2_TOOLBOX_CLEAN_NVSRAM                   (0x00000001)
144
145
146/****************************************************************************
147*  Toolbox Memory Move request
148****************************************************************************/
149
150typedef struct _MPI2_TOOLBOX_MEM_MOVE_REQUEST
151{
152    U8                      Tool;                       /* 0x00 */
153    U8                      Reserved1;                  /* 0x01 */
154    U8                      ChainOffset;                /* 0x02 */
155    U8                      Function;                   /* 0x03 */
156    U16                     Reserved2;                  /* 0x04 */
157    U8                      Reserved3;                  /* 0x06 */
158    U8                      MsgFlags;                   /* 0x07 */
159    U8                      VP_ID;                      /* 0x08 */
160    U8                      VF_ID;                      /* 0x09 */
161    U16                     Reserved4;                  /* 0x0A */
162    MPI2_SGE_SIMPLE_UNION   SGL;                        /* 0x0C */
163} MPI2_TOOLBOX_MEM_MOVE_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_MEM_MOVE_REQUEST,
164  Mpi2ToolboxMemMoveRequest_t, MPI2_POINTER pMpi2ToolboxMemMoveRequest_t;
165
166
167/****************************************************************************
168*  Toolbox ISTWI Read Write Tool
169****************************************************************************/
170
171/* Toolbox ISTWI Read Write Tool request message */
172typedef struct _MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST
173{
174    U8                      Tool;                       /* 0x00 */
175    U8                      Reserved1;                  /* 0x01 */
176    U8                      ChainOffset;                /* 0x02 */
177    U8                      Function;                   /* 0x03 */
178    U16                     Reserved2;                  /* 0x04 */
179    U8                      Reserved3;                  /* 0x06 */
180    U8                      MsgFlags;                   /* 0x07 */
181    U8                      VP_ID;                      /* 0x08 */
182    U8                      VF_ID;                      /* 0x09 */
183    U16                     Reserved4;                  /* 0x0A */
184    U32                     Reserved5;                  /* 0x0C */
185    U32                     Reserved6;                  /* 0x10 */
186    U8                      DevIndex;                   /* 0x14 */
187    U8                      Action;                     /* 0x15 */
188    U8                      SGLFlags;                   /* 0x16 */
189    U8                      Reserved7;                  /* 0x17 */
190    U16                     TxDataLength;               /* 0x18 */
191    U16                     RxDataLength;               /* 0x1A */
192    U32                     Reserved8;                  /* 0x1C */
193    U32                     Reserved9;                  /* 0x20 */
194    U32                     Reserved10;                 /* 0x24 */
195    U32                     Reserved11;                 /* 0x28 */
196    U32                     Reserved12;                 /* 0x2C */
197    MPI2_SGE_SIMPLE_UNION   SGL;                        /* 0x30 */
198} MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST,
199  MPI2_POINTER PTR_MPI2_TOOLBOX_ISTWI_READ_WRITE_REQUEST,
200  Mpi2ToolboxIstwiReadWriteRequest_t,
201  MPI2_POINTER pMpi2ToolboxIstwiReadWriteRequest_t;
202
203/* values for the Action field */
204#define MPI2_TOOL_ISTWI_ACTION_READ_DATA            (0x01)
205#define MPI2_TOOL_ISTWI_ACTION_WRITE_DATA           (0x02)
206#define MPI2_TOOL_ISTWI_ACTION_SEQUENCE             (0x03)
207#define MPI2_TOOL_ISTWI_ACTION_RESERVE_BUS          (0x10)
208#define MPI2_TOOL_ISTWI_ACTION_RELEASE_BUS          (0x11)
209#define MPI2_TOOL_ISTWI_ACTION_RESET                (0x12)
210
211/* values for SGLFlags field are in the SGL section of mpi2.h */
212
213
214/* Toolbox ISTWI Read Write Tool reply message */
215typedef struct _MPI2_TOOLBOX_ISTWI_REPLY
216{
217    U8                      Tool;                       /* 0x00 */
218    U8                      Reserved1;                  /* 0x01 */
219    U8                      MsgLength;                  /* 0x02 */
220    U8                      Function;                   /* 0x03 */
221    U16                     Reserved2;                  /* 0x04 */
222    U8                      Reserved3;                  /* 0x06 */
223    U8                      MsgFlags;                   /* 0x07 */
224    U8                      VP_ID;                      /* 0x08 */
225    U8                      VF_ID;                      /* 0x09 */
226    U16                     Reserved4;                  /* 0x0A */
227    U16                     Reserved5;                  /* 0x0C */
228    U16                     IOCStatus;                  /* 0x0E */
229    U32                     IOCLogInfo;                 /* 0x10 */
230    U8                      DevIndex;                   /* 0x14 */
231    U8                      Action;                     /* 0x15 */
232    U8                      IstwiStatus;                /* 0x16 */
233    U8                      Reserved6;                  /* 0x17 */
234    U16                     TxDataCount;                /* 0x18 */
235    U16                     RxDataCount;                /* 0x1A */
236} MPI2_TOOLBOX_ISTWI_REPLY, MPI2_POINTER PTR_MPI2_TOOLBOX_ISTWI_REPLY,
237  Mpi2ToolboxIstwiReply_t, MPI2_POINTER pMpi2ToolboxIstwiReply_t;
238
239
240/****************************************************************************
241*  Toolbox Beacon Tool request
242****************************************************************************/
243
244typedef struct _MPI2_TOOLBOX_BEACON_REQUEST
245{
246    U8                      Tool;                       /* 0x00 */
247    U8                      Reserved1;                  /* 0x01 */
248    U8                      ChainOffset;                /* 0x02 */
249    U8                      Function;                   /* 0x03 */
250    U16                     Reserved2;                  /* 0x04 */
251    U8                      Reserved3;                  /* 0x06 */
252    U8                      MsgFlags;                   /* 0x07 */
253    U8                      VP_ID;                      /* 0x08 */
254    U8                      VF_ID;                      /* 0x09 */
255    U16                     Reserved4;                  /* 0x0A */
256    U8                      Reserved5;                  /* 0x0C */
257    U8                      PhysicalPort;               /* 0x0D */
258    U8                      Reserved6;                  /* 0x0E */
259    U8                      Flags;                      /* 0x0F */
260} MPI2_TOOLBOX_BEACON_REQUEST, MPI2_POINTER PTR_MPI2_TOOLBOX_BEACON_REQUEST,
261  Mpi2ToolboxBeaconRequest_t, MPI2_POINTER pMpi2ToolboxBeaconRequest_t;
262
263/* values for the Flags field */
264#define MPI2_TOOLBOX_FLAGS_BEACONMODE_OFF       (0x00)
265#define MPI2_TOOLBOX_FLAGS_BEACONMODE_ON        (0x01)
266
267
268/****************************************************************************
269*  Toolbox Diagnostic CLI Tool
270****************************************************************************/
271
272#define MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH    (0x5C)
273
274/* Toolbox Diagnostic CLI Tool request message */
275typedef struct _MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST
276{
277    U8                      Tool;                       /* 0x00 */
278    U8                      Reserved1;                  /* 0x01 */
279    U8                      ChainOffset;                /* 0x02 */
280    U8                      Function;                   /* 0x03 */
281    U16                     Reserved2;                  /* 0x04 */
282    U8                      Reserved3;                  /* 0x06 */
283    U8                      MsgFlags;                   /* 0x07 */
284    U8                      VP_ID;                      /* 0x08 */
285    U8                      VF_ID;                      /* 0x09 */
286    U16                     Reserved4;                  /* 0x0A */
287    U8                      SGLFlags;                   /* 0x0C */
288    U8                      Reserved5;                  /* 0x0D */
289    U16                     Reserved6;                  /* 0x0E */
290    U32                     DataLength;                 /* 0x10 */
291    U8                      DiagnosticCliCommand[MPI2_TOOLBOX_DIAG_CLI_CMD_LENGTH]; /* 0x14 */
292    MPI2_SGE_SIMPLE_UNION   SGL;                        /* 0x70 */
293} MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST,
294  MPI2_POINTER PTR_MPI2_TOOLBOX_DIAGNOSTIC_CLI_REQUEST,
295  Mpi2ToolboxDiagnosticCliRequest_t,
296  MPI2_POINTER pMpi2ToolboxDiagnosticCliRequest_t;
297
298/* values for SGLFlags field are in the SGL section of mpi2.h */
299
300
301/* Toolbox Diagnostic CLI Tool reply message */
302typedef struct _MPI2_TOOLBOX_DIAGNOSTIC_CLI_REPLY
303{
304    U8                      Tool;                       /* 0x00 */
305    U8                      Reserved1;                  /* 0x01 */
306    U8                      MsgLength;                  /* 0x02 */
307    U8                      Function;                   /* 0x03 */
308    U16                     Reserved2;                  /* 0x04 */
309    U8                      Reserved3;                  /* 0x06 */
310    U8                      MsgFlags;                   /* 0x07 */
311    U8                      VP_ID;                      /* 0x08 */
312    U8                      VF_ID;                      /* 0x09 */
313    U16                     Reserved4;                  /* 0x0A */
314    U16                     Reserved5;                  /* 0x0C */
315    U16                     IOCStatus;                  /* 0x0E */
316    U32                     IOCLogInfo;                 /* 0x10 */
317    U32                     ReturnedDataLength;         /* 0x14 */
318} MPI2_TOOLBOX_DIAGNOSTIC_CLI_REPLY,
319  MPI2_POINTER PTR_MPI2_TOOLBOX_DIAG_CLI_REPLY,
320  Mpi2ToolboxDiagnosticCliReply_t,
321  MPI2_POINTER pMpi2ToolboxDiagnosticCliReply_t;
322
323
324/*****************************************************************************
325*
326*       Diagnostic Buffer Messages
327*
328*****************************************************************************/
329
330
331/****************************************************************************
332*  Diagnostic Buffer Post request
333****************************************************************************/
334
335typedef struct _MPI2_DIAG_BUFFER_POST_REQUEST
336{
337    U8                      ExtendedType;               /* 0x00 */
338    U8                      BufferType;                 /* 0x01 */
339    U8                      ChainOffset;                /* 0x02 */
340    U8                      Function;                   /* 0x03 */
341    U16                     Reserved2;                  /* 0x04 */
342    U8                      Reserved3;                  /* 0x06 */
343    U8                      MsgFlags;                   /* 0x07 */
344    U8                      VP_ID;                      /* 0x08 */
345    U8                      VF_ID;                      /* 0x09 */
346    U16                     Reserved4;                  /* 0x0A */
347    U64                     BufferAddress;              /* 0x0C */
348    U32                     BufferLength;               /* 0x14 */
349    U32                     Reserved5;                  /* 0x18 */
350    U32                     Reserved6;                  /* 0x1C */
351    U32                     Flags;                      /* 0x20 */
352    U32                     ProductSpecific[23];        /* 0x24 */
353} MPI2_DIAG_BUFFER_POST_REQUEST, MPI2_POINTER PTR_MPI2_DIAG_BUFFER_POST_REQUEST,
354  Mpi2DiagBufferPostRequest_t, MPI2_POINTER pMpi2DiagBufferPostRequest_t;
355
356/* values for the ExtendedType field */
357#define MPI2_DIAG_EXTENDED_TYPE_UTILIZATION         (0x02)
358
359/* values for the BufferType field */
360#define MPI2_DIAG_BUF_TYPE_TRACE                    (0x00)
361#define MPI2_DIAG_BUF_TYPE_SNAPSHOT                 (0x01)
362#define MPI2_DIAG_BUF_TYPE_EXTENDED                 (0x02)
363/* count of the number of buffer types */
364#define MPI2_DIAG_BUF_TYPE_COUNT                    (0x03)
365
366
367/****************************************************************************
368*  Diagnostic Buffer Post reply
369****************************************************************************/
370
371typedef struct _MPI2_DIAG_BUFFER_POST_REPLY
372{
373    U8                      ExtendedType;               /* 0x00 */
374    U8                      BufferType;                 /* 0x01 */
375    U8                      MsgLength;                  /* 0x02 */
376    U8                      Function;                   /* 0x03 */
377    U16                     Reserved2;                  /* 0x04 */
378    U8                      Reserved3;                  /* 0x06 */
379    U8                      MsgFlags;                   /* 0x07 */
380    U8                      VP_ID;                      /* 0x08 */
381    U8                      VF_ID;                      /* 0x09 */
382    U16                     Reserved4;                  /* 0x0A */
383    U16                     Reserved5;                  /* 0x0C */
384    U16                     IOCStatus;                  /* 0x0E */
385    U32                     IOCLogInfo;                 /* 0x10 */
386    U32                     TransferLength;             /* 0x14 */
387} MPI2_DIAG_BUFFER_POST_REPLY, MPI2_POINTER PTR_MPI2_DIAG_BUFFER_POST_REPLY,
388  Mpi2DiagBufferPostReply_t, MPI2_POINTER pMpi2DiagBufferPostReply_t;
389
390
391/****************************************************************************
392*  Diagnostic Release request
393****************************************************************************/
394
395typedef struct _MPI2_DIAG_RELEASE_REQUEST
396{
397    U8                      Reserved1;                  /* 0x00 */
398    U8                      BufferType;                 /* 0x01 */
399    U8                      ChainOffset;                /* 0x02 */
400    U8                      Function;                   /* 0x03 */
401    U16                     Reserved2;                  /* 0x04 */
402    U8                      Reserved3;                  /* 0x06 */
403    U8                      MsgFlags;                   /* 0x07 */
404    U8                      VP_ID;                      /* 0x08 */
405    U8                      VF_ID;                      /* 0x09 */
406    U16                     Reserved4;                  /* 0x0A */
407} MPI2_DIAG_RELEASE_REQUEST, MPI2_POINTER PTR_MPI2_DIAG_RELEASE_REQUEST,
408  Mpi2DiagReleaseRequest_t, MPI2_POINTER pMpi2DiagReleaseRequest_t;
409
410
411/****************************************************************************
412*  Diagnostic Buffer Post reply
413****************************************************************************/
414
415typedef struct _MPI2_DIAG_RELEASE_REPLY
416{
417    U8                      Reserved1;                  /* 0x00 */
418    U8                      BufferType;                 /* 0x01 */
419    U8                      MsgLength;                  /* 0x02 */
420    U8                      Function;                   /* 0x03 */
421    U16                     Reserved2;                  /* 0x04 */
422    U8                      Reserved3;                  /* 0x06 */
423    U8                      MsgFlags;                   /* 0x07 */
424    U8                      VP_ID;                      /* 0x08 */
425    U8                      VF_ID;                      /* 0x09 */
426    U16                     Reserved4;                  /* 0x0A */
427    U16                     Reserved5;                  /* 0x0C */
428    U16                     IOCStatus;                  /* 0x0E */
429    U32                     IOCLogInfo;                 /* 0x10 */
430} MPI2_DIAG_RELEASE_REPLY, MPI2_POINTER PTR_MPI2_DIAG_RELEASE_REPLY,
431  Mpi2DiagReleaseReply_t, MPI2_POINTER pMpi2DiagReleaseReply_t;
432
433
434#endif
435
436