xref: /dflybsd-src/sys/dev/raid/mpr/mpi/mpi2_raid.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_raid.h 299263 2016-05-09 16:12:32Z 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_raid.h
42*fd501800SSascha Wildner  *          Title:  MPI Integrated RAID messages and structures
43*fd501800SSascha Wildner  *  Creation Date:  April 26, 2007
44*fd501800SSascha Wildner  *
45*fd501800SSascha Wildner  *    mpi2_raid.h Version:  02.00.11
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  *  08-31-07  02.00.01  Modifications to RAID Action request and reply,
54*fd501800SSascha Wildner  *                      including the Actions and ActionData.
55*fd501800SSascha Wildner  *  02-29-08  02.00.02  Added MPI2_RAID_ACTION_ADATA_DISABL_FULL_REBUILD.
56*fd501800SSascha Wildner  *  05-21-08  02.00.03  Added MPI2_RAID_VOL_CREATION_NUM_PHYSDISKS so that
57*fd501800SSascha Wildner  *                      the PhysDisk array in MPI2_RAID_VOLUME_CREATION_STRUCT
58*fd501800SSascha Wildner  *                      can be sized by the build environment.
59*fd501800SSascha Wildner  *  07-30-09  02.00.04  Added proper define for the Use Default Settings bit of
60*fd501800SSascha Wildner  *                      VolumeCreationFlags and marked the old one as obsolete.
61*fd501800SSascha Wildner  *  05-12-10  02.00.05  Added MPI2_RAID_VOL_FLAGS_OP_MDC define.
62*fd501800SSascha Wildner  *  08-24-10  02.00.06  Added MPI2_RAID_ACTION_COMPATIBILITY_CHECK along with
63*fd501800SSascha Wildner  *                      related structures and defines.
64*fd501800SSascha Wildner  *                      Added product-specific range to RAID Action values.
65*fd501800SSascha Wildner  *  11-18-11  02.00.07  Incorporating additions for MPI v2.5.
66*fd501800SSascha Wildner  *  02-06-12  02.00.08  Added MPI2_RAID_ACTION_PHYSDISK_HIDDEN.
67*fd501800SSascha Wildner  *  07-26-12  02.00.09  Added ElapsedSeconds field to MPI2_RAID_VOL_INDICATOR.
68*fd501800SSascha Wildner  *                      Added MPI2_RAID_VOL_FLAGS_ELAPSED_SECONDS_VALID define.
69*fd501800SSascha Wildner  *  04-17-13  02.00.10  Added MPI25_RAID_ACTION_ADATA_ALLOW_PI.
70*fd501800SSascha Wildner  *  11-18-14  02.00.11  Updated copyright information.
71*fd501800SSascha Wildner  *  --------------------------------------------------------------------------
72*fd501800SSascha Wildner  */
73*fd501800SSascha Wildner 
74*fd501800SSascha Wildner #ifndef MPI2_RAID_H
75*fd501800SSascha Wildner #define MPI2_RAID_H
76*fd501800SSascha Wildner 
77*fd501800SSascha Wildner /*****************************************************************************
78*fd501800SSascha Wildner *
79*fd501800SSascha Wildner *               Integrated RAID Messages
80*fd501800SSascha Wildner *
81*fd501800SSascha Wildner *****************************************************************************/
82*fd501800SSascha Wildner 
83*fd501800SSascha Wildner /****************************************************************************
84*fd501800SSascha Wildner *  RAID Action messages
85*fd501800SSascha Wildner ****************************************************************************/
86*fd501800SSascha Wildner 
87*fd501800SSascha Wildner /* ActionDataWord defines for use with MPI2_RAID_ACTION_CREATE_VOLUME action */
88*fd501800SSascha Wildner #define MPI25_RAID_ACTION_ADATA_ALLOW_PI            (0x80000000)
89*fd501800SSascha Wildner 
90*fd501800SSascha Wildner /* ActionDataWord defines for use with MPI2_RAID_ACTION_DELETE_VOLUME action */
91*fd501800SSascha Wildner #define MPI2_RAID_ACTION_ADATA_KEEP_LBA0            (0x00000000)
92*fd501800SSascha Wildner #define MPI2_RAID_ACTION_ADATA_ZERO_LBA0            (0x00000001)
93*fd501800SSascha Wildner 
94*fd501800SSascha Wildner /* use MPI2_RAIDVOL0_SETTING_ defines from mpi2_cnfg.h for MPI2_RAID_ACTION_CHANGE_VOL_WRITE_CACHE action */
95*fd501800SSascha Wildner 
96*fd501800SSascha Wildner /* ActionDataWord defines for use with MPI2_RAID_ACTION_DISABLE_ALL_VOLUMES action */
97*fd501800SSascha Wildner #define MPI2_RAID_ACTION_ADATA_DISABL_FULL_REBUILD  (0x00000001)
98*fd501800SSascha Wildner 
99*fd501800SSascha Wildner /* ActionDataWord for MPI2_RAID_ACTION_SET_RAID_FUNCTION_RATE Action */
100*fd501800SSascha Wildner typedef struct _MPI2_RAID_ACTION_RATE_DATA
101*fd501800SSascha Wildner {
102*fd501800SSascha Wildner     U8              RateToChange;               /* 0x00 */
103*fd501800SSascha Wildner     U8              RateOrMode;                 /* 0x01 */
104*fd501800SSascha Wildner     U16             DataScrubDuration;          /* 0x02 */
105*fd501800SSascha Wildner } MPI2_RAID_ACTION_RATE_DATA, MPI2_POINTER PTR_MPI2_RAID_ACTION_RATE_DATA,
106*fd501800SSascha Wildner   Mpi2RaidActionRateData_t, MPI2_POINTER pMpi2RaidActionRateData_t;
107*fd501800SSascha Wildner 
108*fd501800SSascha Wildner #define MPI2_RAID_ACTION_SET_RATE_RESYNC            (0x00)
109*fd501800SSascha Wildner #define MPI2_RAID_ACTION_SET_RATE_DATA_SCRUB        (0x01)
110*fd501800SSascha Wildner #define MPI2_RAID_ACTION_SET_RATE_POWERSAVE_MODE    (0x02)
111*fd501800SSascha Wildner 
112*fd501800SSascha Wildner /* ActionDataWord for MPI2_RAID_ACTION_START_RAID_FUNCTION Action */
113*fd501800SSascha Wildner typedef struct _MPI2_RAID_ACTION_START_RAID_FUNCTION
114*fd501800SSascha Wildner {
115*fd501800SSascha Wildner     U8              RAIDFunction;                       /* 0x00 */
116*fd501800SSascha Wildner     U8              Flags;                              /* 0x01 */
117*fd501800SSascha Wildner     U16             Reserved1;                          /* 0x02 */
118*fd501800SSascha Wildner } MPI2_RAID_ACTION_START_RAID_FUNCTION,
119*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_RAID_ACTION_START_RAID_FUNCTION,
120*fd501800SSascha Wildner   Mpi2RaidActionStartRaidFunction_t,
121*fd501800SSascha Wildner   MPI2_POINTER pMpi2RaidActionStartRaidFunction_t;
122*fd501800SSascha Wildner 
123*fd501800SSascha Wildner /* defines for the RAIDFunction field */
124*fd501800SSascha Wildner #define MPI2_RAID_ACTION_START_BACKGROUND_INIT      (0x00)
125*fd501800SSascha Wildner #define MPI2_RAID_ACTION_START_ONLINE_CAP_EXPANSION (0x01)
126*fd501800SSascha Wildner #define MPI2_RAID_ACTION_START_CONSISTENCY_CHECK    (0x02)
127*fd501800SSascha Wildner 
128*fd501800SSascha Wildner /* defines for the Flags field */
129*fd501800SSascha Wildner #define MPI2_RAID_ACTION_START_NEW                  (0x00)
130*fd501800SSascha Wildner #define MPI2_RAID_ACTION_START_RESUME               (0x01)
131*fd501800SSascha Wildner 
132*fd501800SSascha Wildner /* ActionDataWord for MPI2_RAID_ACTION_STOP_RAID_FUNCTION Action */
133*fd501800SSascha Wildner typedef struct _MPI2_RAID_ACTION_STOP_RAID_FUNCTION
134*fd501800SSascha Wildner {
135*fd501800SSascha Wildner     U8              RAIDFunction;                       /* 0x00 */
136*fd501800SSascha Wildner     U8              Flags;                              /* 0x01 */
137*fd501800SSascha Wildner     U16             Reserved1;                          /* 0x02 */
138*fd501800SSascha Wildner } MPI2_RAID_ACTION_STOP_RAID_FUNCTION,
139*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_RAID_ACTION_STOP_RAID_FUNCTION,
140*fd501800SSascha Wildner   Mpi2RaidActionStopRaidFunction_t,
141*fd501800SSascha Wildner   MPI2_POINTER pMpi2RaidActionStopRaidFunction_t;
142*fd501800SSascha Wildner 
143*fd501800SSascha Wildner /* defines for the RAIDFunction field */
144*fd501800SSascha Wildner #define MPI2_RAID_ACTION_STOP_BACKGROUND_INIT       (0x00)
145*fd501800SSascha Wildner #define MPI2_RAID_ACTION_STOP_ONLINE_CAP_EXPANSION  (0x01)
146*fd501800SSascha Wildner #define MPI2_RAID_ACTION_STOP_CONSISTENCY_CHECK     (0x02)
147*fd501800SSascha Wildner 
148*fd501800SSascha Wildner /* defines for the Flags field */
149*fd501800SSascha Wildner #define MPI2_RAID_ACTION_STOP_ABORT                 (0x00)
150*fd501800SSascha Wildner #define MPI2_RAID_ACTION_STOP_PAUSE                 (0x01)
151*fd501800SSascha Wildner 
152*fd501800SSascha Wildner /* ActionDataWord for MPI2_RAID_ACTION_CREATE_HOT_SPARE Action */
153*fd501800SSascha Wildner typedef struct _MPI2_RAID_ACTION_HOT_SPARE
154*fd501800SSascha Wildner {
155*fd501800SSascha Wildner     U8              HotSparePool;               /* 0x00 */
156*fd501800SSascha Wildner     U8              Reserved1;                  /* 0x01 */
157*fd501800SSascha Wildner     U16             DevHandle;                  /* 0x02 */
158*fd501800SSascha Wildner } MPI2_RAID_ACTION_HOT_SPARE, MPI2_POINTER PTR_MPI2_RAID_ACTION_HOT_SPARE,
159*fd501800SSascha Wildner   Mpi2RaidActionHotSpare_t, MPI2_POINTER pMpi2RaidActionHotSpare_t;
160*fd501800SSascha Wildner 
161*fd501800SSascha Wildner /* ActionDataWord for MPI2_RAID_ACTION_DEVICE_FW_UPDATE_MODE Action */
162*fd501800SSascha Wildner typedef struct _MPI2_RAID_ACTION_FW_UPDATE_MODE
163*fd501800SSascha Wildner {
164*fd501800SSascha Wildner     U8              Flags;                              /* 0x00 */
165*fd501800SSascha Wildner     U8              DeviceFirmwareUpdateModeTimeout;    /* 0x01 */
166*fd501800SSascha Wildner     U16             Reserved1;                          /* 0x02 */
167*fd501800SSascha Wildner } MPI2_RAID_ACTION_FW_UPDATE_MODE,
168*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_RAID_ACTION_FW_UPDATE_MODE,
169*fd501800SSascha Wildner   Mpi2RaidActionFwUpdateMode_t, MPI2_POINTER pMpi2RaidActionFwUpdateMode_t;
170*fd501800SSascha Wildner 
171*fd501800SSascha Wildner /* ActionDataWord defines for use with MPI2_RAID_ACTION_DEVICE_FW_UPDATE_MODE action */
172*fd501800SSascha Wildner #define MPI2_RAID_ACTION_ADATA_DISABLE_FW_UPDATE        (0x00)
173*fd501800SSascha Wildner #define MPI2_RAID_ACTION_ADATA_ENABLE_FW_UPDATE         (0x01)
174*fd501800SSascha Wildner 
175*fd501800SSascha Wildner typedef union _MPI2_RAID_ACTION_DATA
176*fd501800SSascha Wildner {
177*fd501800SSascha Wildner     U32                                     Word;
178*fd501800SSascha Wildner     MPI2_RAID_ACTION_RATE_DATA              Rates;
179*fd501800SSascha Wildner     MPI2_RAID_ACTION_START_RAID_FUNCTION    StartRaidFunction;
180*fd501800SSascha Wildner     MPI2_RAID_ACTION_STOP_RAID_FUNCTION     StopRaidFunction;
181*fd501800SSascha Wildner     MPI2_RAID_ACTION_HOT_SPARE              HotSpare;
182*fd501800SSascha Wildner     MPI2_RAID_ACTION_FW_UPDATE_MODE         FwUpdateMode;
183*fd501800SSascha Wildner } MPI2_RAID_ACTION_DATA, MPI2_POINTER PTR_MPI2_RAID_ACTION_DATA,
184*fd501800SSascha Wildner   Mpi2RaidActionData_t, MPI2_POINTER pMpi2RaidActionData_t;
185*fd501800SSascha Wildner 
186*fd501800SSascha Wildner 
187*fd501800SSascha Wildner /* RAID Action Request Message */
188*fd501800SSascha Wildner typedef struct _MPI2_RAID_ACTION_REQUEST
189*fd501800SSascha Wildner {
190*fd501800SSascha Wildner     U8                      Action;                         /* 0x00 */
191*fd501800SSascha Wildner     U8                      Reserved1;                      /* 0x01 */
192*fd501800SSascha Wildner     U8                      ChainOffset;                    /* 0x02 */
193*fd501800SSascha Wildner     U8                      Function;                       /* 0x03 */
194*fd501800SSascha Wildner     U16                     VolDevHandle;                   /* 0x04 */
195*fd501800SSascha Wildner     U8                      PhysDiskNum;                    /* 0x06 */
196*fd501800SSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
197*fd501800SSascha Wildner     U8                      VP_ID;                          /* 0x08 */
198*fd501800SSascha Wildner     U8                      VF_ID;                          /* 0x09 */
199*fd501800SSascha Wildner     U16                     Reserved2;                      /* 0x0A */
200*fd501800SSascha Wildner     U32                     Reserved3;                      /* 0x0C */
201*fd501800SSascha Wildner     MPI2_RAID_ACTION_DATA   ActionDataWord;                 /* 0x10 */
202*fd501800SSascha Wildner     MPI2_SGE_SIMPLE_UNION   ActionDataSGE;                  /* 0x14 */
203*fd501800SSascha Wildner } MPI2_RAID_ACTION_REQUEST, MPI2_POINTER PTR_MPI2_RAID_ACTION_REQUEST,
204*fd501800SSascha Wildner   Mpi2RaidActionRequest_t, MPI2_POINTER pMpi2RaidActionRequest_t;
205*fd501800SSascha Wildner 
206*fd501800SSascha Wildner /* RAID Action request Action values */
207*fd501800SSascha Wildner 
208*fd501800SSascha Wildner #define MPI2_RAID_ACTION_INDICATOR_STRUCT           (0x01)
209*fd501800SSascha Wildner #define MPI2_RAID_ACTION_CREATE_VOLUME              (0x02)
210*fd501800SSascha Wildner #define MPI2_RAID_ACTION_DELETE_VOLUME              (0x03)
211*fd501800SSascha Wildner #define MPI2_RAID_ACTION_DISABLE_ALL_VOLUMES        (0x04)
212*fd501800SSascha Wildner #define MPI2_RAID_ACTION_ENABLE_ALL_VOLUMES         (0x05)
213*fd501800SSascha Wildner #define MPI2_RAID_ACTION_PHYSDISK_OFFLINE           (0x0A)
214*fd501800SSascha Wildner #define MPI2_RAID_ACTION_PHYSDISK_ONLINE            (0x0B)
215*fd501800SSascha Wildner #define MPI2_RAID_ACTION_FAIL_PHYSDISK              (0x0F)
216*fd501800SSascha Wildner #define MPI2_RAID_ACTION_ACTIVATE_VOLUME            (0x11)
217*fd501800SSascha Wildner #define MPI2_RAID_ACTION_DEVICE_FW_UPDATE_MODE      (0x15)
218*fd501800SSascha Wildner #define MPI2_RAID_ACTION_CHANGE_VOL_WRITE_CACHE     (0x17)
219*fd501800SSascha Wildner #define MPI2_RAID_ACTION_SET_VOLUME_NAME            (0x18)
220*fd501800SSascha Wildner #define MPI2_RAID_ACTION_SET_RAID_FUNCTION_RATE     (0x19)
221*fd501800SSascha Wildner #define MPI2_RAID_ACTION_ENABLE_FAILED_VOLUME       (0x1C)
222*fd501800SSascha Wildner #define MPI2_RAID_ACTION_CREATE_HOT_SPARE           (0x1D)
223*fd501800SSascha Wildner #define MPI2_RAID_ACTION_DELETE_HOT_SPARE           (0x1E)
224*fd501800SSascha Wildner #define MPI2_RAID_ACTION_SYSTEM_SHUTDOWN_INITIATED  (0x20)
225*fd501800SSascha Wildner #define MPI2_RAID_ACTION_START_RAID_FUNCTION        (0x21)
226*fd501800SSascha Wildner #define MPI2_RAID_ACTION_STOP_RAID_FUNCTION         (0x22)
227*fd501800SSascha Wildner #define MPI2_RAID_ACTION_COMPATIBILITY_CHECK        (0x23)
228*fd501800SSascha Wildner #define MPI2_RAID_ACTION_PHYSDISK_HIDDEN            (0x24)
229*fd501800SSascha Wildner #define MPI2_RAID_ACTION_MIN_PRODUCT_SPECIFIC       (0x80)
230*fd501800SSascha Wildner #define MPI2_RAID_ACTION_MAX_PRODUCT_SPECIFIC       (0xFF)
231*fd501800SSascha Wildner 
232*fd501800SSascha Wildner 
233*fd501800SSascha Wildner /* RAID Volume Creation Structure */
234*fd501800SSascha Wildner 
235*fd501800SSascha Wildner /*
236*fd501800SSascha Wildner  * The following define can be customized for the targeted product.
237*fd501800SSascha Wildner  */
238*fd501800SSascha Wildner #ifndef MPI2_RAID_VOL_CREATION_NUM_PHYSDISKS
239*fd501800SSascha Wildner #define MPI2_RAID_VOL_CREATION_NUM_PHYSDISKS        (1)
240*fd501800SSascha Wildner #endif
241*fd501800SSascha Wildner 
242*fd501800SSascha Wildner typedef struct _MPI2_RAID_VOLUME_PHYSDISK
243*fd501800SSascha Wildner {
244*fd501800SSascha Wildner     U8                      RAIDSetNum;                     /* 0x00 */
245*fd501800SSascha Wildner     U8                      PhysDiskMap;                    /* 0x01 */
246*fd501800SSascha Wildner     U16                     PhysDiskDevHandle;              /* 0x02 */
247*fd501800SSascha Wildner } MPI2_RAID_VOLUME_PHYSDISK, MPI2_POINTER PTR_MPI2_RAID_VOLUME_PHYSDISK,
248*fd501800SSascha Wildner   Mpi2RaidVolumePhysDisk_t, MPI2_POINTER pMpi2RaidVolumePhysDisk_t;
249*fd501800SSascha Wildner 
250*fd501800SSascha Wildner /* defines for the PhysDiskMap field */
251*fd501800SSascha Wildner #define MPI2_RAIDACTION_PHYSDISK_PRIMARY            (0x01)
252*fd501800SSascha Wildner #define MPI2_RAIDACTION_PHYSDISK_SECONDARY          (0x02)
253*fd501800SSascha Wildner 
254*fd501800SSascha Wildner typedef struct _MPI2_RAID_VOLUME_CREATION_STRUCT
255*fd501800SSascha Wildner {
256*fd501800SSascha Wildner     U8                          NumPhysDisks;               /* 0x00 */
257*fd501800SSascha Wildner     U8                          VolumeType;                 /* 0x01 */
258*fd501800SSascha Wildner     U16                         Reserved1;                  /* 0x02 */
259*fd501800SSascha Wildner     U32                         VolumeCreationFlags;        /* 0x04 */
260*fd501800SSascha Wildner     U32                         VolumeSettings;             /* 0x08 */
261*fd501800SSascha Wildner     U8                          Reserved2;                  /* 0x0C */
262*fd501800SSascha Wildner     U8                          ResyncRate;                 /* 0x0D */
263*fd501800SSascha Wildner     U16                         DataScrubDuration;          /* 0x0E */
264*fd501800SSascha Wildner     U64                         VolumeMaxLBA;               /* 0x10 */
265*fd501800SSascha Wildner     U32                         StripeSize;                 /* 0x18 */
266*fd501800SSascha Wildner     U8                          Name[16];                   /* 0x1C */
267*fd501800SSascha Wildner     MPI2_RAID_VOLUME_PHYSDISK   PhysDisk[MPI2_RAID_VOL_CREATION_NUM_PHYSDISKS];/* 0x2C */
268*fd501800SSascha Wildner } MPI2_RAID_VOLUME_CREATION_STRUCT,
269*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_RAID_VOLUME_CREATION_STRUCT,
270*fd501800SSascha Wildner   Mpi2RaidVolumeCreationStruct_t, MPI2_POINTER pMpi2RaidVolumeCreationStruct_t;
271*fd501800SSascha Wildner 
272*fd501800SSascha Wildner /* use MPI2_RAID_VOL_TYPE_ defines from mpi2_cnfg.h for VolumeType */
273*fd501800SSascha Wildner 
274*fd501800SSascha Wildner /* defines for the VolumeCreationFlags field */
275*fd501800SSascha Wildner #define MPI2_RAID_VOL_CREATION_DEFAULT_SETTINGS     (0x80000000)
276*fd501800SSascha Wildner #define MPI2_RAID_VOL_CREATION_BACKGROUND_INIT      (0x00000004) /* MPI 2.0 only */
277*fd501800SSascha Wildner #define MPI2_RAID_VOL_CREATION_LOW_LEVEL_INIT       (0x00000002)
278*fd501800SSascha Wildner #define MPI2_RAID_VOL_CREATION_MIGRATE_DATA         (0x00000001)
279*fd501800SSascha Wildner /* The following is an obsolete define.
280*fd501800SSascha Wildner  * It must be shifted left 24 bits in order to set the proper bit.
281*fd501800SSascha Wildner  */
282*fd501800SSascha Wildner #define MPI2_RAID_VOL_CREATION_USE_DEFAULT_SETTINGS (0x80)
283*fd501800SSascha Wildner 
284*fd501800SSascha Wildner 
285*fd501800SSascha Wildner /* RAID Online Capacity Expansion Structure */
286*fd501800SSascha Wildner 
287*fd501800SSascha Wildner typedef struct _MPI2_RAID_ONLINE_CAPACITY_EXPANSION
288*fd501800SSascha Wildner {
289*fd501800SSascha Wildner     U32                     Flags;                          /* 0x00 */
290*fd501800SSascha Wildner     U16                     DevHandle0;                     /* 0x04 */
291*fd501800SSascha Wildner     U16                     Reserved1;                      /* 0x06 */
292*fd501800SSascha Wildner     U16                     DevHandle1;                     /* 0x08 */
293*fd501800SSascha Wildner     U16                     Reserved2;                      /* 0x0A */
294*fd501800SSascha Wildner } MPI2_RAID_ONLINE_CAPACITY_EXPANSION,
295*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_RAID_ONLINE_CAPACITY_EXPANSION,
296*fd501800SSascha Wildner   Mpi2RaidOnlineCapacityExpansion_t,
297*fd501800SSascha Wildner   MPI2_POINTER pMpi2RaidOnlineCapacityExpansion_t;
298*fd501800SSascha Wildner 
299*fd501800SSascha Wildner 
300*fd501800SSascha Wildner /* RAID Compatibility Input Structure */
301*fd501800SSascha Wildner 
302*fd501800SSascha Wildner typedef struct _MPI2_RAID_COMPATIBILITY_INPUT_STRUCT
303*fd501800SSascha Wildner {
304*fd501800SSascha Wildner     U16                     SourceDevHandle;                /* 0x00 */
305*fd501800SSascha Wildner     U16                     CandidateDevHandle;             /* 0x02 */
306*fd501800SSascha Wildner     U32                     Flags;                          /* 0x04 */
307*fd501800SSascha Wildner     U32                     Reserved1;                      /* 0x08 */
308*fd501800SSascha Wildner     U32                     Reserved2;                      /* 0x0C */
309*fd501800SSascha Wildner } MPI2_RAID_COMPATIBILITY_INPUT_STRUCT,
310*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_RAID_COMPATIBILITY_INPUT_STRUCT,
311*fd501800SSascha Wildner   Mpi2RaidCompatibilityInputStruct_t,
312*fd501800SSascha Wildner   MPI2_POINTER pMpi2RaidCompatibilityInputStruct_t;
313*fd501800SSascha Wildner 
314*fd501800SSascha Wildner /* defines for RAID Compatibility Structure Flags field */
315*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_SOURCE_IS_VOLUME_FLAG      (0x00000002)
316*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_REPORT_SOURCE_INFO_FLAG    (0x00000001)
317*fd501800SSascha Wildner 
318*fd501800SSascha Wildner 
319*fd501800SSascha Wildner /* RAID Volume Indicator Structure */
320*fd501800SSascha Wildner 
321*fd501800SSascha Wildner typedef struct _MPI2_RAID_VOL_INDICATOR
322*fd501800SSascha Wildner {
323*fd501800SSascha Wildner     U64                     TotalBlocks;                    /* 0x00 */
324*fd501800SSascha Wildner     U64                     BlocksRemaining;                /* 0x08 */
325*fd501800SSascha Wildner     U32                     Flags;                          /* 0x10 */
326*fd501800SSascha Wildner     U32                     ElapsedSeconds;                 /* 0x14 */
327*fd501800SSascha Wildner } MPI2_RAID_VOL_INDICATOR, MPI2_POINTER PTR_MPI2_RAID_VOL_INDICATOR,
328*fd501800SSascha Wildner   Mpi2RaidVolIndicator_t, MPI2_POINTER pMpi2RaidVolIndicator_t;
329*fd501800SSascha Wildner 
330*fd501800SSascha Wildner /* defines for RAID Volume Indicator Flags field */
331*fd501800SSascha Wildner #define MPI2_RAID_VOL_FLAGS_ELAPSED_SECONDS_VALID   (0x80000000)
332*fd501800SSascha Wildner 
333*fd501800SSascha Wildner #define MPI2_RAID_VOL_FLAGS_OP_MASK                 (0x0000000F)
334*fd501800SSascha Wildner #define MPI2_RAID_VOL_FLAGS_OP_BACKGROUND_INIT      (0x00000000)
335*fd501800SSascha Wildner #define MPI2_RAID_VOL_FLAGS_OP_ONLINE_CAP_EXPANSION (0x00000001)
336*fd501800SSascha Wildner #define MPI2_RAID_VOL_FLAGS_OP_CONSISTENCY_CHECK    (0x00000002)
337*fd501800SSascha Wildner #define MPI2_RAID_VOL_FLAGS_OP_RESYNC               (0x00000003)
338*fd501800SSascha Wildner #define MPI2_RAID_VOL_FLAGS_OP_MDC                  (0x00000004)
339*fd501800SSascha Wildner 
340*fd501800SSascha Wildner 
341*fd501800SSascha Wildner /* RAID Compatibility Result Structure */
342*fd501800SSascha Wildner 
343*fd501800SSascha Wildner typedef struct _MPI2_RAID_COMPATIBILITY_RESULT_STRUCT
344*fd501800SSascha Wildner {
345*fd501800SSascha Wildner     U8                      State;                          /* 0x00 */
346*fd501800SSascha Wildner     U8                      Reserved1;                      /* 0x01 */
347*fd501800SSascha Wildner     U16                     Reserved2;                      /* 0x02 */
348*fd501800SSascha Wildner     U32                     GenericAttributes;              /* 0x04 */
349*fd501800SSascha Wildner     U32                     OEMSpecificAttributes;          /* 0x08 */
350*fd501800SSascha Wildner     U32                     Reserved3;                      /* 0x0C */
351*fd501800SSascha Wildner     U32                     Reserved4;                      /* 0x10 */
352*fd501800SSascha Wildner } MPI2_RAID_COMPATIBILITY_RESULT_STRUCT,
353*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_RAID_COMPATIBILITY_RESULT_STRUCT,
354*fd501800SSascha Wildner   Mpi2RaidCompatibilityResultStruct_t,
355*fd501800SSascha Wildner   MPI2_POINTER pMpi2RaidCompatibilityResultStruct_t;
356*fd501800SSascha Wildner 
357*fd501800SSascha Wildner /* defines for RAID Compatibility Result Structure State field */
358*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_STATE_COMPATIBLE           (0x00)
359*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_STATE_NOT_COMPATIBLE       (0x01)
360*fd501800SSascha Wildner 
361*fd501800SSascha Wildner /* defines for RAID Compatibility Result Structure GenericAttributes field */
362*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_GENATTRIB_4K_SECTOR            (0x00000010)
363*fd501800SSascha Wildner 
364*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_GENATTRIB_MEDIA_MASK           (0x0000000C)
365*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_GENATTRIB_SOLID_STATE_DRIVE    (0x00000008)
366*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_GENATTRIB_HARD_DISK_DRIVE      (0x00000004)
367*fd501800SSascha Wildner 
368*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_GENATTRIB_PROTOCOL_MASK        (0x00000003)
369*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_GENATTRIB_SAS_PROTOCOL         (0x00000002)
370*fd501800SSascha Wildner #define MPI2_RAID_COMPAT_GENATTRIB_SATA_PROTOCOL        (0x00000001)
371*fd501800SSascha Wildner 
372*fd501800SSascha Wildner 
373*fd501800SSascha Wildner /* RAID Action Reply ActionData union */
374*fd501800SSascha Wildner typedef union _MPI2_RAID_ACTION_REPLY_DATA
375*fd501800SSascha Wildner {
376*fd501800SSascha Wildner     U32                                     Word[6];
377*fd501800SSascha Wildner     MPI2_RAID_VOL_INDICATOR                 RaidVolumeIndicator;
378*fd501800SSascha Wildner     U16                                     VolDevHandle;
379*fd501800SSascha Wildner     U8                                      VolumeState;
380*fd501800SSascha Wildner     U8                                      PhysDiskNum;
381*fd501800SSascha Wildner     MPI2_RAID_COMPATIBILITY_RESULT_STRUCT   RaidCompatibilityResult;
382*fd501800SSascha Wildner } MPI2_RAID_ACTION_REPLY_DATA, MPI2_POINTER PTR_MPI2_RAID_ACTION_REPLY_DATA,
383*fd501800SSascha Wildner   Mpi2RaidActionReplyData_t, MPI2_POINTER pMpi2RaidActionReplyData_t;
384*fd501800SSascha Wildner 
385*fd501800SSascha Wildner /* use MPI2_RAIDVOL0_SETTING_ defines from mpi2_cnfg.h for MPI2_RAID_ACTION_CHANGE_VOL_WRITE_CACHE action */
386*fd501800SSascha Wildner 
387*fd501800SSascha Wildner 
388*fd501800SSascha Wildner /* RAID Action Reply Message */
389*fd501800SSascha Wildner typedef struct _MPI2_RAID_ACTION_REPLY
390*fd501800SSascha Wildner {
391*fd501800SSascha Wildner     U8                          Action;                     /* 0x00 */
392*fd501800SSascha Wildner     U8                          Reserved1;                  /* 0x01 */
393*fd501800SSascha Wildner     U8                          MsgLength;                  /* 0x02 */
394*fd501800SSascha Wildner     U8                          Function;                   /* 0x03 */
395*fd501800SSascha Wildner     U16                         VolDevHandle;               /* 0x04 */
396*fd501800SSascha Wildner     U8                          PhysDiskNum;                /* 0x06 */
397*fd501800SSascha Wildner     U8                          MsgFlags;                   /* 0x07 */
398*fd501800SSascha Wildner     U8                          VP_ID;                      /* 0x08 */
399*fd501800SSascha Wildner     U8                          VF_ID;                      /* 0x09 */
400*fd501800SSascha Wildner     U16                         Reserved2;                  /* 0x0A */
401*fd501800SSascha Wildner     U16                         Reserved3;                  /* 0x0C */
402*fd501800SSascha Wildner     U16                         IOCStatus;                  /* 0x0E */
403*fd501800SSascha Wildner     U32                         IOCLogInfo;                 /* 0x10 */
404*fd501800SSascha Wildner     MPI2_RAID_ACTION_REPLY_DATA ActionData;                 /* 0x14 */
405*fd501800SSascha Wildner } MPI2_RAID_ACTION_REPLY, MPI2_POINTER PTR_MPI2_RAID_ACTION_REPLY,
406*fd501800SSascha Wildner   Mpi2RaidActionReply_t, MPI2_POINTER pMpi2RaidActionReply_t;
407*fd501800SSascha Wildner 
408*fd501800SSascha Wildner 
409*fd501800SSascha Wildner #endif
410*fd501800SSascha Wildner 
411