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