xref: /freebsd-src/sys/dev/mps/mpi/mpi2_raid.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1d043c564SKenneth D. Merry /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
4ef065d89SStephen McConnell  * Copyright (c) 2007-2015 LSI Corp.
5ef065d89SStephen McConnell  * Copyright (c) 2013-2015 Avago Technologies
6d043c564SKenneth D. Merry  * All rights reserved.
7d043c564SKenneth D. Merry  *
8d043c564SKenneth D. Merry  * Redistribution and use in source and binary forms, with or without
9d043c564SKenneth D. Merry  * modification, are permitted provided that the following conditions
10d043c564SKenneth D. Merry  * are met:
11d043c564SKenneth D. Merry  * 1. Redistributions of source code must retain the above copyright
12d043c564SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer.
13d043c564SKenneth D. Merry  * 2. Redistributions in binary form must reproduce the above copyright
14d043c564SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer in the
15d043c564SKenneth D. Merry  *    documentation and/or other materials provided with the distribution.
16d043c564SKenneth D. Merry  *
17d043c564SKenneth D. Merry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18d043c564SKenneth D. Merry  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19d043c564SKenneth D. Merry  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20d043c564SKenneth D. Merry  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21d043c564SKenneth D. Merry  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22d043c564SKenneth D. Merry  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23d043c564SKenneth D. Merry  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24d043c564SKenneth D. Merry  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25d043c564SKenneth D. Merry  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26d043c564SKenneth D. Merry  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27d043c564SKenneth D. Merry  * SUCH DAMAGE.
28d043c564SKenneth D. Merry  *
29ef065d89SStephen McConnell  * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
30d043c564SKenneth D. Merry  */
31d043c564SKenneth D. Merry 
32d3c7b9a0SKenneth D. Merry /*
33ef065d89SStephen McConnell  *  Copyright (c) 2007-2015 LSI Corporation.
34ef065d89SStephen McConnell  *  Copyright (c) 2013-2015 Avago Technologies
35d3c7b9a0SKenneth D. Merry  *
36d3c7b9a0SKenneth D. Merry  *
37d3c7b9a0SKenneth D. Merry  *           Name:  mpi2_raid.h
38d3c7b9a0SKenneth D. Merry  *          Title:  MPI Integrated RAID messages and structures
39d3c7b9a0SKenneth D. Merry  *  Creation Date:  April 26, 2007
40d3c7b9a0SKenneth D. Merry  *
41d043c564SKenneth D. Merry  *    mpi2_raid.h Version:  02.00.05
42d3c7b9a0SKenneth D. Merry  *
43d3c7b9a0SKenneth D. Merry  *  Version History
44d3c7b9a0SKenneth D. Merry  *  ---------------
45d3c7b9a0SKenneth D. Merry  *
46d3c7b9a0SKenneth D. Merry  *  Date      Version   Description
47d3c7b9a0SKenneth D. Merry  *  --------  --------  ------------------------------------------------------
48d3c7b9a0SKenneth D. Merry  *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
49d3c7b9a0SKenneth D. Merry  *  08-31-07  02.00.01  Modifications to RAID Action request and reply,
50d3c7b9a0SKenneth D. Merry  *                      including the Actions and ActionData.
51d3c7b9a0SKenneth D. Merry  *  02-29-08  02.00.02  Added MPI2_RAID_ACTION_ADATA_DISABL_FULL_REBUILD.
52d3c7b9a0SKenneth D. Merry  *  05-21-08  02.00.03  Added MPI2_RAID_VOL_CREATION_NUM_PHYSDISKS so that
53d3c7b9a0SKenneth D. Merry  *                      the PhysDisk array in MPI2_RAID_VOLUME_CREATION_STRUCT
54d3c7b9a0SKenneth D. Merry  *                      can be sized by the build environment.
55d3c7b9a0SKenneth D. Merry  *  07-30-09  02.00.04  Added proper define for the Use Default Settings bit of
56d3c7b9a0SKenneth D. Merry  *                      VolumeCreationFlags and marked the old one as obsolete.
57d043c564SKenneth D. Merry  *  05-12-10  02.00.05  Added MPI2_RAID_VOL_FLAGS_OP_MDC define.
58d3c7b9a0SKenneth D. Merry  *  --------------------------------------------------------------------------
59d3c7b9a0SKenneth D. Merry  */
60d3c7b9a0SKenneth D. Merry 
61d3c7b9a0SKenneth D. Merry #ifndef MPI2_RAID_H
62d3c7b9a0SKenneth D. Merry #define MPI2_RAID_H
63d3c7b9a0SKenneth D. Merry 
64d3c7b9a0SKenneth D. Merry /*****************************************************************************
65d3c7b9a0SKenneth D. Merry *
66d3c7b9a0SKenneth D. Merry *               Integrated RAID Messages
67d3c7b9a0SKenneth D. Merry *
68d3c7b9a0SKenneth D. Merry *****************************************************************************/
69d3c7b9a0SKenneth D. Merry 
70d3c7b9a0SKenneth D. Merry /****************************************************************************
71d3c7b9a0SKenneth D. Merry *  RAID Action messages
72d3c7b9a0SKenneth D. Merry ****************************************************************************/
73d3c7b9a0SKenneth D. Merry 
74d3c7b9a0SKenneth D. Merry /* ActionDataWord defines for use with MPI2_RAID_ACTION_DELETE_VOLUME action */
75d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_ADATA_KEEP_LBA0            (0x00000000)
76d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_ADATA_ZERO_LBA0            (0x00000001)
77d3c7b9a0SKenneth D. Merry 
78d3c7b9a0SKenneth D. Merry /* use MPI2_RAIDVOL0_SETTING_ defines from mpi2_cnfg.h for MPI2_RAID_ACTION_CHANGE_VOL_WRITE_CACHE action */
79d3c7b9a0SKenneth D. Merry 
80d3c7b9a0SKenneth D. Merry /* ActionDataWord defines for use with MPI2_RAID_ACTION_DISABLE_ALL_VOLUMES action */
81d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_ADATA_DISABL_FULL_REBUILD  (0x00000001)
82d3c7b9a0SKenneth D. Merry 
83d3c7b9a0SKenneth D. Merry /* ActionDataWord for MPI2_RAID_ACTION_SET_RAID_FUNCTION_RATE Action */
84d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACTION_RATE_DATA
85d3c7b9a0SKenneth D. Merry {
86d3c7b9a0SKenneth D. Merry     U8              RateToChange;               /* 0x00 */
87d3c7b9a0SKenneth D. Merry     U8              RateOrMode;                 /* 0x01 */
88d3c7b9a0SKenneth D. Merry     U16             DataScrubDuration;          /* 0x02 */
89d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_RATE_DATA, MPI2_POINTER PTR_MPI2_RAID_ACTION_RATE_DATA,
90d3c7b9a0SKenneth D. Merry   Mpi2RaidActionRateData_t, MPI2_POINTER pMpi2RaidActionRateData_t;
91d3c7b9a0SKenneth D. Merry 
92d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_SET_RATE_RESYNC            (0x00)
93d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_SET_RATE_DATA_SCRUB        (0x01)
94d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_SET_RATE_POWERSAVE_MODE    (0x02)
95d3c7b9a0SKenneth D. Merry 
96d3c7b9a0SKenneth D. Merry /* ActionDataWord for MPI2_RAID_ACTION_START_RAID_FUNCTION Action */
97d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACTION_START_RAID_FUNCTION
98d3c7b9a0SKenneth D. Merry {
99d3c7b9a0SKenneth D. Merry     U8              RAIDFunction;                       /* 0x00 */
100d3c7b9a0SKenneth D. Merry     U8              Flags;                              /* 0x01 */
101d3c7b9a0SKenneth D. Merry     U16             Reserved1;                          /* 0x02 */
102d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_START_RAID_FUNCTION,
103d3c7b9a0SKenneth D. Merry   MPI2_POINTER PTR_MPI2_RAID_ACTION_START_RAID_FUNCTION,
104d3c7b9a0SKenneth D. Merry   Mpi2RaidActionStartRaidFunction_t,
105d3c7b9a0SKenneth D. Merry   MPI2_POINTER pMpi2RaidActionStartRaidFunction_t;
106d3c7b9a0SKenneth D. Merry 
107d3c7b9a0SKenneth D. Merry /* defines for the RAIDFunction field */
108d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_START_BACKGROUND_INIT      (0x00)
109d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_START_ONLINE_CAP_EXPANSION (0x01)
110d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_START_CONSISTENCY_CHECK    (0x02)
111d3c7b9a0SKenneth D. Merry 
112d3c7b9a0SKenneth D. Merry /* defines for the Flags field */
113d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_START_NEW                  (0x00)
114d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_START_RESUME               (0x01)
115d3c7b9a0SKenneth D. Merry 
116d3c7b9a0SKenneth D. Merry /* ActionDataWord for MPI2_RAID_ACTION_STOP_RAID_FUNCTION Action */
117d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACTION_STOP_RAID_FUNCTION
118d3c7b9a0SKenneth D. Merry {
119d3c7b9a0SKenneth D. Merry     U8              RAIDFunction;                       /* 0x00 */
120d3c7b9a0SKenneth D. Merry     U8              Flags;                              /* 0x01 */
121d3c7b9a0SKenneth D. Merry     U16             Reserved1;                          /* 0x02 */
122d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_STOP_RAID_FUNCTION,
123d3c7b9a0SKenneth D. Merry   MPI2_POINTER PTR_MPI2_RAID_ACTION_STOP_RAID_FUNCTION,
124d3c7b9a0SKenneth D. Merry   Mpi2RaidActionStopRaidFunction_t,
125d3c7b9a0SKenneth D. Merry   MPI2_POINTER pMpi2RaidActionStopRaidFunction_t;
126d3c7b9a0SKenneth D. Merry 
127d3c7b9a0SKenneth D. Merry /* defines for the RAIDFunction field */
128d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_STOP_BACKGROUND_INIT       (0x00)
129d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_STOP_ONLINE_CAP_EXPANSION  (0x01)
130d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_STOP_CONSISTENCY_CHECK     (0x02)
131d3c7b9a0SKenneth D. Merry 
132d3c7b9a0SKenneth D. Merry /* defines for the Flags field */
133d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_STOP_ABORT                 (0x00)
134d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_STOP_PAUSE                 (0x01)
135d3c7b9a0SKenneth D. Merry 
136d3c7b9a0SKenneth D. Merry /* ActionDataWord for MPI2_RAID_ACTION_CREATE_HOT_SPARE Action */
137d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACTION_HOT_SPARE
138d3c7b9a0SKenneth D. Merry {
139d3c7b9a0SKenneth D. Merry     U8              HotSparePool;               /* 0x00 */
140d3c7b9a0SKenneth D. Merry     U8              Reserved1;                  /* 0x01 */
141d3c7b9a0SKenneth D. Merry     U16             DevHandle;                  /* 0x02 */
142d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_HOT_SPARE, MPI2_POINTER PTR_MPI2_RAID_ACTION_HOT_SPARE,
143d3c7b9a0SKenneth D. Merry   Mpi2RaidActionHotSpare_t, MPI2_POINTER pMpi2RaidActionHotSpare_t;
144d3c7b9a0SKenneth D. Merry 
145d3c7b9a0SKenneth D. Merry /* ActionDataWord for MPI2_RAID_ACTION_DEVICE_FW_UPDATE_MODE Action */
146d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACTION_FW_UPDATE_MODE
147d3c7b9a0SKenneth D. Merry {
148d3c7b9a0SKenneth D. Merry     U8              Flags;                              /* 0x00 */
149d3c7b9a0SKenneth D. Merry     U8              DeviceFirmwareUpdateModeTimeout;    /* 0x01 */
150d3c7b9a0SKenneth D. Merry     U16             Reserved1;                          /* 0x02 */
151d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_FW_UPDATE_MODE,
152d3c7b9a0SKenneth D. Merry   MPI2_POINTER PTR_MPI2_RAID_ACTION_FW_UPDATE_MODE,
153d3c7b9a0SKenneth D. Merry   Mpi2RaidActionFwUpdateMode_t, MPI2_POINTER pMpi2RaidActionFwUpdateMode_t;
154d3c7b9a0SKenneth D. Merry 
155d3c7b9a0SKenneth D. Merry /* ActionDataWord defines for use with MPI2_RAID_ACTION_DEVICE_FW_UPDATE_MODE action */
156d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_ADATA_DISABLE_FW_UPDATE        (0x00)
157d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_ADATA_ENABLE_FW_UPDATE         (0x01)
158d3c7b9a0SKenneth D. Merry 
159d3c7b9a0SKenneth D. Merry typedef union _MPI2_RAID_ACTION_DATA
160d3c7b9a0SKenneth D. Merry {
161d3c7b9a0SKenneth D. Merry     U32                                     Word;
162d3c7b9a0SKenneth D. Merry     MPI2_RAID_ACTION_RATE_DATA              Rates;
163d3c7b9a0SKenneth D. Merry     MPI2_RAID_ACTION_START_RAID_FUNCTION    StartRaidFunction;
164d3c7b9a0SKenneth D. Merry     MPI2_RAID_ACTION_STOP_RAID_FUNCTION     StopRaidFunction;
165d3c7b9a0SKenneth D. Merry     MPI2_RAID_ACTION_HOT_SPARE              HotSpare;
166d3c7b9a0SKenneth D. Merry     MPI2_RAID_ACTION_FW_UPDATE_MODE         FwUpdateMode;
167d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_DATA, MPI2_POINTER PTR_MPI2_RAID_ACTION_DATA,
168d3c7b9a0SKenneth D. Merry   Mpi2RaidActionData_t, MPI2_POINTER pMpi2RaidActionData_t;
169d3c7b9a0SKenneth D. Merry 
170d3c7b9a0SKenneth D. Merry /* RAID Action Request Message */
171d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACTION_REQUEST
172d3c7b9a0SKenneth D. Merry {
173d3c7b9a0SKenneth D. Merry     U8                      Action;                         /* 0x00 */
174d3c7b9a0SKenneth D. Merry     U8                      Reserved1;                      /* 0x01 */
175d3c7b9a0SKenneth D. Merry     U8                      ChainOffset;                    /* 0x02 */
176d3c7b9a0SKenneth D. Merry     U8                      Function;                       /* 0x03 */
177d3c7b9a0SKenneth D. Merry     U16                     VolDevHandle;                   /* 0x04 */
178d3c7b9a0SKenneth D. Merry     U8                      PhysDiskNum;                    /* 0x06 */
179d3c7b9a0SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
180d3c7b9a0SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
181d3c7b9a0SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
182d3c7b9a0SKenneth D. Merry     U16                     Reserved2;                      /* 0x0A */
183d3c7b9a0SKenneth D. Merry     U32                     Reserved3;                      /* 0x0C */
184d3c7b9a0SKenneth D. Merry     MPI2_RAID_ACTION_DATA   ActionDataWord;                 /* 0x10 */
185d3c7b9a0SKenneth D. Merry     MPI2_SGE_SIMPLE_UNION   ActionDataSGE;                  /* 0x14 */
186d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_REQUEST, MPI2_POINTER PTR_MPI2_RAID_ACTION_REQUEST,
187d3c7b9a0SKenneth D. Merry   Mpi2RaidActionRequest_t, MPI2_POINTER pMpi2RaidActionRequest_t;
188d3c7b9a0SKenneth D. Merry 
189d3c7b9a0SKenneth D. Merry /* RAID Action request Action values */
190d3c7b9a0SKenneth D. Merry 
191d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_INDICATOR_STRUCT           (0x01)
192d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_CREATE_VOLUME              (0x02)
193d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_DELETE_VOLUME              (0x03)
194d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_DISABLE_ALL_VOLUMES        (0x04)
195d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_ENABLE_ALL_VOLUMES         (0x05)
196d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_PHYSDISK_OFFLINE           (0x0A)
197d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_PHYSDISK_ONLINE            (0x0B)
198d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_FAIL_PHYSDISK              (0x0F)
199d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_ACTIVATE_VOLUME            (0x11)
200d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_DEVICE_FW_UPDATE_MODE      (0x15)
201d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_CHANGE_VOL_WRITE_CACHE     (0x17)
202d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_SET_VOLUME_NAME            (0x18)
203d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_SET_RAID_FUNCTION_RATE     (0x19)
204d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_ENABLE_FAILED_VOLUME       (0x1C)
205d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_CREATE_HOT_SPARE           (0x1D)
206d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_DELETE_HOT_SPARE           (0x1E)
207d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_SYSTEM_SHUTDOWN_INITIATED  (0x20)
208d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_START_RAID_FUNCTION        (0x21)
209d3c7b9a0SKenneth D. Merry #define MPI2_RAID_ACTION_STOP_RAID_FUNCTION         (0x22)
210d3c7b9a0SKenneth D. Merry 
211d3c7b9a0SKenneth D. Merry /* RAID Volume Creation Structure */
212d3c7b9a0SKenneth D. Merry 
213d3c7b9a0SKenneth D. Merry /*
214d3c7b9a0SKenneth D. Merry  * The following define can be customized for the targeted product.
215d3c7b9a0SKenneth D. Merry  */
216d3c7b9a0SKenneth D. Merry #ifndef MPI2_RAID_VOL_CREATION_NUM_PHYSDISKS
217d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_CREATION_NUM_PHYSDISKS        (1)
218d3c7b9a0SKenneth D. Merry #endif
219d3c7b9a0SKenneth D. Merry 
220d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_VOLUME_PHYSDISK
221d3c7b9a0SKenneth D. Merry {
222d3c7b9a0SKenneth D. Merry     U8                      RAIDSetNum;                     /* 0x00 */
223d3c7b9a0SKenneth D. Merry     U8                      PhysDiskMap;                    /* 0x01 */
224d3c7b9a0SKenneth D. Merry     U16                     PhysDiskDevHandle;              /* 0x02 */
225d3c7b9a0SKenneth D. Merry } MPI2_RAID_VOLUME_PHYSDISK, MPI2_POINTER PTR_MPI2_RAID_VOLUME_PHYSDISK,
226d3c7b9a0SKenneth D. Merry   Mpi2RaidVolumePhysDisk_t, MPI2_POINTER pMpi2RaidVolumePhysDisk_t;
227d3c7b9a0SKenneth D. Merry 
228d3c7b9a0SKenneth D. Merry /* defines for the PhysDiskMap field */
229d3c7b9a0SKenneth D. Merry #define MPI2_RAIDACTION_PHYSDISK_PRIMARY            (0x01)
230d3c7b9a0SKenneth D. Merry #define MPI2_RAIDACTION_PHYSDISK_SECONDARY          (0x02)
231d3c7b9a0SKenneth D. Merry 
232d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_VOLUME_CREATION_STRUCT
233d3c7b9a0SKenneth D. Merry {
234d3c7b9a0SKenneth D. Merry     U8                          NumPhysDisks;               /* 0x00 */
235d3c7b9a0SKenneth D. Merry     U8                          VolumeType;                 /* 0x01 */
236d3c7b9a0SKenneth D. Merry     U16                         Reserved1;                  /* 0x02 */
237d3c7b9a0SKenneth D. Merry     U32                         VolumeCreationFlags;        /* 0x04 */
238d3c7b9a0SKenneth D. Merry     U32                         VolumeSettings;             /* 0x08 */
239d3c7b9a0SKenneth D. Merry     U8                          Reserved2;                  /* 0x0C */
240d3c7b9a0SKenneth D. Merry     U8                          ResyncRate;                 /* 0x0D */
241d3c7b9a0SKenneth D. Merry     U16                         DataScrubDuration;          /* 0x0E */
242d3c7b9a0SKenneth D. Merry     U64                         VolumeMaxLBA;               /* 0x10 */
243d3c7b9a0SKenneth D. Merry     U32                         StripeSize;                 /* 0x18 */
244d3c7b9a0SKenneth D. Merry     U8                          Name[16];                   /* 0x1C */
245d3c7b9a0SKenneth D. Merry     MPI2_RAID_VOLUME_PHYSDISK   PhysDisk[MPI2_RAID_VOL_CREATION_NUM_PHYSDISKS];/* 0x2C */
246d3c7b9a0SKenneth D. Merry } MPI2_RAID_VOLUME_CREATION_STRUCT,
247d3c7b9a0SKenneth D. Merry   MPI2_POINTER PTR_MPI2_RAID_VOLUME_CREATION_STRUCT,
248d3c7b9a0SKenneth D. Merry   Mpi2RaidVolumeCreationStruct_t, MPI2_POINTER pMpi2RaidVolumeCreationStruct_t;
249d3c7b9a0SKenneth D. Merry 
250d3c7b9a0SKenneth D. Merry /* use MPI2_RAID_VOL_TYPE_ defines from mpi2_cnfg.h for VolumeType */
251d3c7b9a0SKenneth D. Merry 
252d3c7b9a0SKenneth D. Merry /* defines for the VolumeCreationFlags field */
253d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_CREATION_DEFAULT_SETTINGS     (0x80000000)
254d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_CREATION_BACKGROUND_INIT      (0x00000004)
255d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_CREATION_LOW_LEVEL_INIT       (0x00000002)
256d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_CREATION_MIGRATE_DATA         (0x00000001)
257d3c7b9a0SKenneth D. Merry /* The following is an obsolete define.
258d3c7b9a0SKenneth D. Merry  * It must be shifted left 24 bits in order to set the proper bit.
259d3c7b9a0SKenneth D. Merry  */
260d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_CREATION_USE_DEFAULT_SETTINGS (0x80)
261d3c7b9a0SKenneth D. Merry 
262d3c7b9a0SKenneth D. Merry /* RAID Online Capacity Expansion Structure */
263d3c7b9a0SKenneth D. Merry 
264d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ONLINE_CAPACITY_EXPANSION
265d3c7b9a0SKenneth D. Merry {
266d3c7b9a0SKenneth D. Merry     U32                     Flags;                          /* 0x00 */
267d3c7b9a0SKenneth D. Merry     U16                     DevHandle0;                     /* 0x04 */
268d3c7b9a0SKenneth D. Merry     U16                     Reserved1;                      /* 0x06 */
269d3c7b9a0SKenneth D. Merry     U16                     DevHandle1;                     /* 0x08 */
270d3c7b9a0SKenneth D. Merry     U16                     Reserved2;                      /* 0x0A */
271d3c7b9a0SKenneth D. Merry } MPI2_RAID_ONLINE_CAPACITY_EXPANSION,
272d3c7b9a0SKenneth D. Merry   MPI2_POINTER PTR_MPI2_RAID_ONLINE_CAPACITY_EXPANSION,
273d3c7b9a0SKenneth D. Merry   Mpi2RaidOnlineCapacityExpansion_t,
274d3c7b9a0SKenneth D. Merry   MPI2_POINTER pMpi2RaidOnlineCapacityExpansion_t;
275d3c7b9a0SKenneth D. Merry 
276d3c7b9a0SKenneth D. Merry /* RAID Volume Indicator Structure */
277d3c7b9a0SKenneth D. Merry 
278d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_VOL_INDICATOR
279d3c7b9a0SKenneth D. Merry {
280d3c7b9a0SKenneth D. Merry     U64                     TotalBlocks;                    /* 0x00 */
281d3c7b9a0SKenneth D. Merry     U64                     BlocksRemaining;                /* 0x08 */
282d3c7b9a0SKenneth D. Merry     U32                     Flags;                          /* 0x10 */
283d3c7b9a0SKenneth D. Merry } MPI2_RAID_VOL_INDICATOR, MPI2_POINTER PTR_MPI2_RAID_VOL_INDICATOR,
284d3c7b9a0SKenneth D. Merry   Mpi2RaidVolIndicator_t, MPI2_POINTER pMpi2RaidVolIndicator_t;
285d3c7b9a0SKenneth D. Merry 
286d3c7b9a0SKenneth D. Merry /* defines for RAID Volume Indicator Flags field */
287d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_FLAGS_OP_MASK                 (0x0000000F)
288d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_FLAGS_OP_BACKGROUND_INIT      (0x00000000)
289d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_FLAGS_OP_ONLINE_CAP_EXPANSION (0x00000001)
290d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_FLAGS_OP_CONSISTENCY_CHECK    (0x00000002)
291d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_FLAGS_OP_RESYNC               (0x00000003)
292d043c564SKenneth D. Merry #define MPI2_RAID_VOL_FLAGS_OP_MDC                  (0x00000004)
293d3c7b9a0SKenneth D. Merry 
294d3c7b9a0SKenneth D. Merry /* RAID Action Reply ActionData union */
295d3c7b9a0SKenneth D. Merry typedef union _MPI2_RAID_ACTION_REPLY_DATA
296d3c7b9a0SKenneth D. Merry {
297d3c7b9a0SKenneth D. Merry     U32                     Word[5];
298d3c7b9a0SKenneth D. Merry     MPI2_RAID_VOL_INDICATOR RaidVolumeIndicator;
299d3c7b9a0SKenneth D. Merry     U16                     VolDevHandle;
300d3c7b9a0SKenneth D. Merry     U8                      VolumeState;
301d3c7b9a0SKenneth D. Merry     U8                      PhysDiskNum;
302d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_REPLY_DATA, MPI2_POINTER PTR_MPI2_RAID_ACTION_REPLY_DATA,
303d3c7b9a0SKenneth D. Merry   Mpi2RaidActionReplyData_t, MPI2_POINTER pMpi2RaidActionReplyData_t;
304d3c7b9a0SKenneth D. Merry 
305d3c7b9a0SKenneth D. Merry /* use MPI2_RAIDVOL0_SETTING_ defines from mpi2_cnfg.h for MPI2_RAID_ACTION_CHANGE_VOL_WRITE_CACHE action */
306d3c7b9a0SKenneth D. Merry 
307d3c7b9a0SKenneth D. Merry /* RAID Action Reply Message */
308d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACTION_REPLY
309d3c7b9a0SKenneth D. Merry {
310d3c7b9a0SKenneth D. Merry     U8                          Action;                     /* 0x00 */
311d3c7b9a0SKenneth D. Merry     U8                          Reserved1;                  /* 0x01 */
312d3c7b9a0SKenneth D. Merry     U8                          MsgLength;                  /* 0x02 */
313d3c7b9a0SKenneth D. Merry     U8                          Function;                   /* 0x03 */
314d3c7b9a0SKenneth D. Merry     U16                         VolDevHandle;               /* 0x04 */
315d3c7b9a0SKenneth D. Merry     U8                          PhysDiskNum;                /* 0x06 */
316d3c7b9a0SKenneth D. Merry     U8                          MsgFlags;                   /* 0x07 */
317d3c7b9a0SKenneth D. Merry     U8                          VP_ID;                      /* 0x08 */
318d3c7b9a0SKenneth D. Merry     U8                          VF_ID;                      /* 0x09 */
319d3c7b9a0SKenneth D. Merry     U16                         Reserved2;                  /* 0x0A */
320d3c7b9a0SKenneth D. Merry     U16                         Reserved3;                  /* 0x0C */
321d3c7b9a0SKenneth D. Merry     U16                         IOCStatus;                  /* 0x0E */
322d3c7b9a0SKenneth D. Merry     U32                         IOCLogInfo;                 /* 0x10 */
323d3c7b9a0SKenneth D. Merry     MPI2_RAID_ACTION_REPLY_DATA ActionData;                 /* 0x14 */
324d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACTION_REPLY, MPI2_POINTER PTR_MPI2_RAID_ACTION_REPLY,
325d3c7b9a0SKenneth D. Merry   Mpi2RaidActionReply_t, MPI2_POINTER pMpi2RaidActionReply_t;
326d3c7b9a0SKenneth D. Merry 
327d3c7b9a0SKenneth D. Merry #endif
328