1 /*
2  *  Copyright (c) 2001-2003 LSI Logic Corporation.
3  *
4  *
5  *           Name:  mpi_raid.h
6  *          Title:  MPI RAID message and structures
7  *  Creation Date:  February 27, 2001
8  *
9  *    mpi_raid.h Version:  01.05.xx
10  *
11  *  Version History
12  *  ---------------
13  *
14  *  Date      Version   Description
15  *  --------  --------  ------------------------------------------------------
16  *  02-27-01  01.01.01  Original release for this file.
17  *  03-27-01  01.01.02  Added structure offset comments.
18  *  08-08-01  01.02.01  Original release for v1.2 work.
19  *  09-28-01  01.02.02  Major rework for MPI v1.2 Integrated RAID changes.
20  *  10-04-01  01.02.03  Added ActionData defines for
21  *                      MPI_RAID_ACTION_DELETE_VOLUME action.
22  *  11-01-01  01.02.04  Added define for MPI_RAID_ACTION_ADATA_DO_NOT_SYNC.
23  *  03-14-02  01.02.05  Added define for MPI_RAID_ACTION_ADATA_LOW_LEVEL_INIT.
24  *  05-07-02  01.02.06  Added define for MPI_RAID_ACTION_ACTIVATE_VOLUME,
25  *                      MPI_RAID_ACTION_INACTIVATE_VOLUME, and
26  *                      MPI_RAID_ACTION_ADATA_INACTIVATE_ALL.
27  *  07-12-02  01.02.07  Added structures for Mailbox request and reply.
28  *  11-15-02  01.02.08  Added missing MsgContext field to MSG_MAILBOX_REQUEST.
29  *  04-01-03  01.02.09  New action data option flag for
30  *                      MPI_RAID_ACTION_DELETE_VOLUME.
31  *  --------------------------------------------------------------------------
32  */
33 
34 #ifndef MPI_RAID_H
35 #define MPI_RAID_H
36 
37 
38 /******************************************************************************
39 *
40 *        R A I D    M e s s a g e s
41 *
42 *******************************************************************************/
43 
44 
45 /****************************************************************************/
46 /* RAID Action Request                                                      */
47 /****************************************************************************/
48 
49 typedef struct _MSG_RAID_ACTION
50 {
51     U8                      Action;             /* 00h */
52     U8                      Reserved1;          /* 01h */
53     U8                      ChainOffset;        /* 02h */
54     U8                      Function;           /* 03h */
55     U8                      VolumeID;           /* 04h */
56     U8                      VolumeBus;          /* 05h */
57     U8                      PhysDiskNum;        /* 06h */
58     U8                      MsgFlags;           /* 07h */
59     U32                     MsgContext;         /* 08h */
60     U32                     Reserved2;          /* 0Ch */
61     U32                     ActionDataWord;     /* 10h */
62     SGE_SIMPLE_UNION        ActionDataSGE;      /* 14h */
63 } MSG_RAID_ACTION_REQUEST, MPI_POINTER PTR_MSG_RAID_ACTION_REQUEST,
64   MpiRaidActionRequest_t , MPI_POINTER pMpiRaidActionRequest_t;
65 
66 
67 /* RAID Action request Action values */
68 
69 #define MPI_RAID_ACTION_STATUS                      (0x00)
70 #define MPI_RAID_ACTION_INDICATOR_STRUCT            (0x01)
71 #define MPI_RAID_ACTION_CREATE_VOLUME               (0x02)
72 #define MPI_RAID_ACTION_DELETE_VOLUME               (0x03)
73 #define MPI_RAID_ACTION_DISABLE_VOLUME              (0x04)
74 #define MPI_RAID_ACTION_ENABLE_VOLUME               (0x05)
75 #define MPI_RAID_ACTION_QUIESCE_PHYS_IO             (0x06)
76 #define MPI_RAID_ACTION_ENABLE_PHYS_IO              (0x07)
77 #define MPI_RAID_ACTION_CHANGE_VOLUME_SETTINGS      (0x08)
78 #define MPI_RAID_ACTION_PHYSDISK_OFFLINE            (0x0A)
79 #define MPI_RAID_ACTION_PHYSDISK_ONLINE             (0x0B)
80 #define MPI_RAID_ACTION_CHANGE_PHYSDISK_SETTINGS    (0x0C)
81 #define MPI_RAID_ACTION_CREATE_PHYSDISK             (0x0D)
82 #define MPI_RAID_ACTION_DELETE_PHYSDISK             (0x0E)
83 #define MPI_RAID_ACTION_FAIL_PHYSDISK               (0x0F)
84 #define MPI_RAID_ACTION_REPLACE_PHYSDISK            (0x10)
85 #define MPI_RAID_ACTION_ACTIVATE_VOLUME             (0x11)
86 #define MPI_RAID_ACTION_INACTIVATE_VOLUME           (0x12)
87 
88 /* ActionDataWord defines for use with MPI_RAID_ACTION_CREATE_VOLUME action */
89 #define MPI_RAID_ACTION_ADATA_DO_NOT_SYNC           (0x00000001)
90 #define MPI_RAID_ACTION_ADATA_LOW_LEVEL_INIT        (0x00000002)
91 
92 /* ActionDataWord defines for use with MPI_RAID_ACTION_DELETE_VOLUME action */
93 #define MPI_RAID_ACTION_ADATA_KEEP_PHYS_DISKS       (0x00000000)
94 #define MPI_RAID_ACTION_ADATA_DEL_PHYS_DISKS        (0x00000001)
95 
96 #define MPI_RAID_ACTION_ADATA_KEEP_LBA0             (0x00000000)
97 #define MPI_RAID_ACTION_ADATA_ZERO_LBA0             (0x00000002)
98 
99 /* ActionDataWord defines for use with MPI_RAID_ACTION_ACTIVATE_VOLUME action */
100 #define MPI_RAID_ACTION_ADATA_INACTIVATE_ALL        (0x00000001)
101 
102 
103 /* RAID Action reply message */
104 
105 typedef struct _MSG_RAID_ACTION_REPLY
106 {
107     U8                      Action;             /* 00h */
108     U8                      Reserved;           /* 01h */
109     U8                      MsgLength;          /* 02h */
110     U8                      Function;           /* 03h */
111     U8                      VolumeID;           /* 04h */
112     U8                      VolumeBus;          /* 05h */
113     U8                      PhysDiskNum;        /* 06h */
114     U8                      MsgFlags;           /* 07h */
115     U32                     MsgContext;         /* 08h */
116     U16                     ActionStatus;       /* 0Ch */
117     U16                     IOCStatus;          /* 0Eh */
118     U32                     IOCLogInfo;         /* 10h */
119     U32                     VolumeStatus;       /* 14h */
120     U32                     ActionData;         /* 18h */
121 } MSG_RAID_ACTION_REPLY, MPI_POINTER PTR_MSG_RAID_ACTION_REPLY,
122   MpiRaidActionReply_t, MPI_POINTER pMpiRaidActionReply_t;
123 
124 
125 /* RAID Volume reply ActionStatus values */
126 
127 #define MPI_RAID_ACTION_ASTATUS_SUCCESS             (0x0000)
128 #define MPI_RAID_ACTION_ASTATUS_INVALID_ACTION      (0x0001)
129 #define MPI_RAID_ACTION_ASTATUS_FAILURE             (0x0002)
130 #define MPI_RAID_ACTION_ASTATUS_IN_PROGRESS         (0x0003)
131 
132 
133 /* RAID Volume reply RAID Volume Indicator structure */
134 
135 typedef struct _MPI_RAID_VOL_INDICATOR
136 {
137     U64                     TotalBlocks;        /* 00h */
138     U64                     BlocksRemaining;    /* 08h */
139 } MPI_RAID_VOL_INDICATOR, MPI_POINTER PTR_MPI_RAID_VOL_INDICATOR,
140   MpiRaidVolIndicator_t, MPI_POINTER pMpiRaidVolIndicator_t;
141 
142 
143 /****************************************************************************/
144 /* SCSI IO RAID Passthrough Request                                         */
145 /****************************************************************************/
146 
147 typedef struct _MSG_SCSI_IO_RAID_PT_REQUEST
148 {
149     U8                      PhysDiskNum;        /* 00h */
150     U8                      Reserved1;          /* 01h */
151     U8                      ChainOffset;        /* 02h */
152     U8                      Function;           /* 03h */
153     U8                      CDBLength;          /* 04h */
154     U8                      SenseBufferLength;  /* 05h */
155     U8                      Reserved2;          /* 06h */
156     U8                      MsgFlags;           /* 07h */
157     U32                     MsgContext;         /* 08h */
158     U8                      LUN[8];             /* 0Ch */
159     U32                     Control;            /* 14h */
160     U8                      CDB[16];            /* 18h */
161     U32                     DataLength;         /* 28h */
162     U32                     SenseBufferLowAddr; /* 2Ch */
163     SGE_IO_UNION            SGL;                /* 30h */
164 } MSG_SCSI_IO_RAID_PT_REQUEST, MPI_POINTER PTR_MSG_SCSI_IO_RAID_PT_REQUEST,
165   SCSIIORaidPassthroughRequest_t, MPI_POINTER pSCSIIORaidPassthroughRequest_t;
166 
167 
168 /* SCSI IO RAID Passthrough reply structure */
169 
170 typedef struct _MSG_SCSI_IO_RAID_PT_REPLY
171 {
172     U8                      PhysDiskNum;        /* 00h */
173     U8                      Reserved1;          /* 01h */
174     U8                      MsgLength;          /* 02h */
175     U8                      Function;           /* 03h */
176     U8                      CDBLength;          /* 04h */
177     U8                      SenseBufferLength;  /* 05h */
178     U8                      Reserved2;          /* 06h */
179     U8                      MsgFlags;           /* 07h */
180     U32                     MsgContext;         /* 08h */
181     U8                      SCSIStatus;         /* 0Ch */
182     U8                      SCSIState;          /* 0Dh */
183     U16                     IOCStatus;          /* 0Eh */
184     U32                     IOCLogInfo;         /* 10h */
185     U32                     TransferCount;      /* 14h */
186     U32                     SenseCount;         /* 18h */
187     U32                     ResponseInfo;       /* 1Ch */
188 } MSG_SCSI_IO_RAID_PT_REPLY, MPI_POINTER PTR_MSG_SCSI_IO_RAID_PT_REPLY,
189   SCSIIORaidPassthroughReply_t, MPI_POINTER pSCSIIORaidPassthroughReply_t;
190 
191 
192 /****************************************************************************/
193 /* Mailbox reqeust structure */
194 /****************************************************************************/
195 
196 typedef struct _MSG_MAILBOX_REQUEST
197 {
198     U16                     Reserved1;
199     U8                      ChainOffset;
200     U8                      Function;
201     U16                     Reserved2;
202     U8                      Reserved3;
203     U8                      MsgFlags;
204     U32                     MsgContext;
205     U8                      Command[10];
206     U16                     Reserved4;
207     SGE_IO_UNION            SGL;
208 } MSG_MAILBOX_REQUEST, MPI_POINTER PTR_MSG_MAILBOX_REQUEST,
209   MailboxRequest_t, MPI_POINTER pMailboxRequest_t;
210 
211 
212 /* Mailbox reply structure */
213 typedef struct _MSG_MAILBOX_REPLY
214 {
215     U16                     Reserved1;          /* 00h */
216     U8                      MsgLength;          /* 02h */
217     U8                      Function;           /* 03h */
218     U16                     Reserved2;          /* 04h */
219     U8                      Reserved3;          /* 06h */
220     U8                      MsgFlags;           /* 07h */
221     U32                     MsgContext;         /* 08h */
222     U16                     MailboxStatus;      /* 0Ch */
223     U16                     IOCStatus;          /* 0Eh */
224     U32                     IOCLogInfo;         /* 10h */
225     U32                     Reserved4;          /* 14h */
226 } MSG_MAILBOX_REPLY, MPI_POINTER PTR_MSG_MAILBOX_REPLY,
227   MailboxReply_t, MPI_POINTER pMailboxReply_t;
228 
229 #endif
230 
231 
232 
233