xref: /freebsd/sys/dev/pms/RefTisa/sallsdk/spc/sampidefs.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
1  /*******************************************************************************
2  *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
3  *
4  *Redistribution and use in source and binary forms, with or without modification, are permitted provided
5  *that the following conditions are met:
6  *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
7  *following disclaimer.
8  *2. Redistributions in binary form must reproduce the above copyright notice,
9  *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10  *with the distribution.
11  *
12  *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13  *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14  *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15  *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16  *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17  *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18  *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19  *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
20  *
21  *
22  ********************************************************************************/
23  /*******************************************************************************/
24  /*! \file sampidefs.h
25   *  \brief The file defines the constants used by SAS/SATA LL layer
26   *
27   */
28  
29  /*******************************************************************************/
30  
31  #ifndef  __SAMPIDEFS_H__
32  
33  #define __SAMPIDEFS_H__
34  
35  /* for Request Opcode of IOMB */
36  #define OPC_INB_ECHO                          0x001   /*  */
37  
38  #define OPC_INB_PHYSTART                      0x004   /*  */
39  #define OPC_INB_PHYSTOP                       0x005   /*  */
40  #define OPC_INB_SSPINIIOSTART                 0x006   /*  */
41  #define OPC_INB_SSPINITMSTART                 0x007   /*  */
42  #define OPC_INB_SSPINIEXTIOSTART              0x008   /*  V reserved */
43  #define OPC_INB_DEV_HANDLE_ACCEPT             0x009   /*  */
44  #define OPC_INB_SSPTGTIOSTART                 0x00a   /*  */
45  #define OPC_INB_SSPTGTRSPSTART                0x00b   /*  */
46  #define OPC_INB_SSP_ABORT                     0x00f   /*  */
47  #define OPC_INB_DEREG_DEV_HANDLE              0x010   /* 16 */
48  #define OPC_INB_GET_DEV_HANDLE                0x011   /* 17 */
49  #define OPC_INB_SMP_REQUEST                   0x012   /* 18 */
50  
51  #define OPC_INB_SMP_ABORT                     0x014   /* 20 */
52  
53  #define OPC_INB_SPC_REG_DEV                   0x016   /* 22 V reserved */
54  #define OPC_INB_SATA_HOST_OPSTART             0x017   /* 23 */
55  #define OPC_INB_SATA_ABORT                    0x018   /* 24 */
56  #define OPC_INB_LOCAL_PHY_CONTROL             0x019   /* 25 */
57  #define OPC_INB_SPC_GET_DEV_INFO              0x01a   /* 26 V reserved */
58  
59  #define OPC_INB_FW_FLASH_UPDATE               0x020   /* 32 */
60  
61  #define OPC_INB_GPIO                          0x022    /* 34 */
62  #define OPC_INB_SAS_DIAG_MODE_START_END       0x023    /* 35 */
63  #define OPC_INB_SAS_DIAG_EXECUTE              0x024    /* 36 */
64  #define OPC_INB_SPC_SAS_HW_EVENT_ACK          0x025    /* 37 V reserved */
65  #define OPC_INB_GET_TIME_STAMP                0x026    /* 38 */
66  #define OPC_INB_PORT_CONTROL                  0x027    /* 39 */
67  #define OPC_INB_GET_NVMD_DATA                 0x028    /* 40 */
68  #define OPC_INB_SET_NVMD_DATA                 0x029    /* 41 */
69  #define OPC_INB_SET_DEVICE_STATE              0x02a    /* 42 */
70  #define OPC_INB_GET_DEVICE_STATE              0x02b    /* 43 */
71  #define OPC_INB_SET_DEV_INFO                  0x02c    /* 44 */
72  #define OPC_INB_SAS_RE_INITIALIZE             0x02d    /* 45 V reserved */
73  #define OPC_INB_SGPIO                         0x02e    /* 46 */
74  #define OPC_INB_PCIE_DIAG_EXECUTE             0x02f    /* 47 */
75  
76  #define OPC_INB_SET_CONTROLLER_CONFIG         0x030    /* 48 */
77  #define OPC_INB_GET_CONTROLLER_CONFIG         0x031    /* 49 */
78  
79  #define OPC_INB_REG_DEV                       0x032    /* 50 SPCV */
80  #define OPC_INB_SAS_HW_EVENT_ACK              0x033    /* 51 SPCV */
81  #define OPC_INB_GET_DEV_INFO                  0x034    /* 52 SPCV */
82  #define OPC_INB_GET_PHY_PROFILE               0x035    /* 53 SPCV */
83  #define OPC_INB_FLASH_OP_EXT                  0x036    /* 54 SPCV */
84  #define OPC_INB_SET_PHY_PROFILE               0x037    /* 55 SPCV */
85  #define OPC_INB_GET_DFE_DATA                  0x038    /* 56 SPCV */
86  #define OPC_INB_GET_VHIST_CAP                 0x039    /* 57 SPCV12g */
87  
88  
89  #define OPC_INB_KEK_MANAGEMENT                0x100    /* 256 SPCV */
90  #define OPC_INB_DEK_MANAGEMENT                0x101    /* 257 SPCV */
91  #define OPC_INB_SSP_DIF_ENC_OPSTART           0x102    /* 258 SPCV */
92  #define OPC_INB_SATA_DIF_ENC_OPSTART          0x103    /* 259 SPCV */
93  #define OPC_INB_OPR_MGMT                      0x104    /* 260 SPCV */
94  #define OPC_INB_ENC_TEST_EXECUTE              0x105    /* 261 SPCV */
95  #define OPC_INB_SET_OPERATOR                  0x106    /* 262 SPCV */
96  #define OPC_INB_GET_OPERATOR                  0x107    /* 263 SPCV */
97  #define OPC_INB_DIF_ENC_OFFLOAD_CMD           0x110    /* 272 SPCV */
98  
99  #define OPC_INB_FW_PROFILE                    0x888    /* 2184 SPCV */
100  
101  /* for Response Opcode of IOMB */
102  #define OPC_OUB_ECHO                          0x001    /* 1 */
103  
104  #define OPC_OUB_SPC_HW_EVENT                  0x004    /*  4 V reserved Now OPC_OUB_HW_EVENT */
105  #define OPC_OUB_SSP_COMP                      0x005    /* 5 */
106  #define OPC_OUB_SMP_COMP                      0x006    /* 6 */
107  #define OPC_OUB_LOCAL_PHY_CNTRL               0x007    /* 7 */
108  
109  #define OPC_OUB_SPC_DEV_REGIST                0x00a    /* 10 V reserved Now OPC_OUB_DEV_REGIST */
110  #define OPC_OUB_DEREG_DEV                     0x00b    /* 11 */
111  #define OPC_OUB_GET_DEV_HANDLE                0x00c    /* 12 */
112  #define OPC_OUB_SATA_COMP                     0x00d    /* 13 */
113  #define OPC_OUB_SATA_EVENT                    0x00e    /* 14 */
114  #define OPC_OUB_SSP_EVENT                     0x00f    /* 15 */
115  
116  #define OPC_OUB_SPC_DEV_HANDLE_ARRIV          0x010    /* 16 V reserved Now OPC_OUB_DEV_HANDLE_ARRIV */
117  
118  #define OPC_OUB_SSP_RECV_EVENT                0x012    /* 18 */
119  #define OPC_OUB_SPC_DEV_INFO                  0x013    /* 19 V reserved Now OPC_OUB_DEV_INFO*/
120  #define OPC_OUB_FW_FLASH_UPDATE               0x014    /* 20 */
121  
122  #define OPC_OUB_GPIO_RESPONSE                 0x016    /* 22 */
123  #define OPC_OUB_GPIO_EVENT                    0x017    /* 23 */
124  #define OPC_OUB_GENERAL_EVENT                 0x018    /* 24 */
125  
126  #define OPC_OUB_SSP_ABORT_RSP                 0x01a    /* 26 */
127  #define OPC_OUB_SATA_ABORT_RSP                0x01b    /* 27 */
128  #define OPC_OUB_SAS_DIAG_MODE_START_END       0x01c    /* 28 */
129  #define OPC_OUB_SAS_DIAG_EXECUTE              0x01d    /* 29 */
130  #define OPC_OUB_GET_TIME_STAMP                0x01e    /* 30 */
131  #define OPC_OUB_SPC_SAS_HW_EVENT_ACK          0x01f    /* 31 V reserved Now OPC_OUB_SAS_HW_EVENT_ACK*/
132  #define OPC_OUB_PORT_CONTROL                  0x020    /* 32 */
133  #define OPC_OUB_SKIP_ENTRY                    0x021    /* 33 */
134  #define OPC_OUB_SMP_ABORT_RSP                 0x022    /* 34 */
135  #define OPC_OUB_GET_NVMD_DATA                 0x023    /* 35 */
136  #define OPC_OUB_SET_NVMD_DATA                 0x024    /* 36 */
137  #define OPC_OUB_DEVICE_HANDLE_REMOVAL         0x025    /* 37 */
138  #define OPC_OUB_SET_DEVICE_STATE              0x026    /* 38 */
139  #define OPC_OUB_GET_DEVICE_STATE              0x027    /* 39 */
140  #define OPC_OUB_SET_DEV_INFO                  0x028    /* 40 */
141  #define OPC_OUB_SAS_RE_INITIALIZE             0x029    /* 41 V reserved not replaced */
142  
143  #define OPC_OUB_HW_EVENT                      0x700    /* 1792 SPCV Was OPC_OUB_SPC_HW_EVENT*/
144  #define OPC_OUB_DEV_HANDLE_ARRIV              0x720    /* 1824 SPCV Was OPC_OUB_SPC_DEV_HANDLE_ARRIV*/
145  
146  #define OPC_OUB_PHY_START_RESPONSE            0x804    /* 2052 SPCV */
147  #define OPC_OUB_PHY_STOP_RESPONSE             0x805    /* 2053 SPCV */
148  #define OPC_OUB_SGPIO_RESPONSE                0x82E    /* 2094 SPCV */
149  #define OPC_OUB_PCIE_DIAG_EXECUTE             0x82F    /* 2095 SPCV */
150  
151  #define OPC_OUB_SET_CONTROLLER_CONFIG         0x830    /* 2096 SPCV */
152  #define OPC_OUB_GET_CONTROLLER_CONFIG         0x831    /* 2097 SPCV */
153  #define OPC_OUB_DEV_REGIST                    0x832    /* 2098 SPCV */
154  #define OPC_OUB_SAS_HW_EVENT_ACK              0x833    /* 2099 SPCV */
155  #define OPC_OUB_DEV_INFO                      0x834    /* 2100 SPCV */
156  #define OPC_OUB_GET_PHY_PROFILE_RSP           0x835    /* 2101 SPCV */
157  #define OPC_OUB_FLASH_OP_EXT_RSP              0x836    /* 2102 SPCV */
158  #define OPC_OUB_SET_PHY_PROFILE_RSP           0x837    /* 2103 SPCV */
159  #define OPC_OUB_GET_DFE_DATA_RSP              0x838    /* 2104 SPCV */
160  #define OPC_OUB_GET_VIST_CAP_RSP              0x839    /* Can be 2104 for SPCV12g  */
161  
162  #define OPC_OUB_FW_PROFILE                    0x888    /* 2184 */
163  
164  #define OPC_OUB_KEK_MANAGEMENT                0x900    /* 2304 SPCV */
165  #define OPC_OUB_DEK_MANAGEMENT                0x901    /* 2305 SPCV */
166  #define OPC_OUB_COMBINED_SSP_COMP             0x902    /* 2306 SPCV */
167  #define OPC_OUB_COMBINED_SATA_COMP            0x903    /* 2307 SPCV */
168  #define OPC_OUB_OPR_MGMT                      0x904    /* 2308 SPCV */
169  #define OPC_OUB_ENC_TEST_EXECUTE              0x905    /* 2309 SPCV */
170  #define OPC_OUB_SET_OPERATOR                  0x906    /* 2310 SPCV */
171  #define OPC_OUB_GET_OPERATOR                  0x907    /* 2311 SPCV */
172  #define OPC_OUB_DIF_ENC_OFFLOAD_RSP           0x910    /* 2320 SPCV */
173  
174  /* Definitions for encryption key management */
175  #define KEK_MGMT_SUBOP_INVALIDATE                0x1
176  #define KEK_MGMT_SUBOP_UPDATE                    0x2
177  #define KEK_MGMT_SUBOP_KEYCARDINVALIDATE         0x3
178  #define KEK_MGMT_SUBOP_KEYCARDUPDATE             0x4
179  
180  #define DEK_MGMT_SUBOP_INVALIDATE                0x1
181  #define DEK_MGMT_SUBOP_UPDATE                    0x2
182  
183  /***************************************************
184   *           typedef for IOMB structure
185   ***************************************************/
186  /** \brief the data structure of Echo Command
187   *
188   * use to describe MPI Echo Command (64 bytes)
189   *
190   */
191  typedef struct agsaEchoCmd_s {
192    bit32           tag;
193    bit32           payload[14];
194  } agsaEchoCmd_t;
195  
196  /** \brief the data structure of PHY Start Command
197   *
198   * use to describe MPI PHY Start Command (64 bytes)
199   *
200   */
201  typedef struct agsaPhyStartCmd_s {
202    bit32             tag;
203    bit32             SscdAseSHLmMlrPhyId;
204    agsaSASIdentify_t sasIdentify;
205    bit32             analogSetupIdx;
206    bit32             SAWT_DAWT;
207    bit32             reserved[5];
208  } agsaPhyStartCmd_t;
209  
210  #define SPINHOLD_DISABLE   (0x00 << 14)
211  #define SPINHOLD_ENABLE    (0x01 << 14)
212  #define LINKMODE_SAS       (0x01 << 12)
213  #define LINKMODE_DSATA     (0x02 << 12)
214  #define LINKMODE_AUTO      (0x03 << 12)
215  #define LINKRATE_15        (0x01 << 8)
216  #define LINKRATE_30        (0x02 << 8)
217  #define LINKRATE_60        (0x04 << 8)
218  #define LINKRATE_12        (0x08 << 8)
219  
220  /** \brief the data structure of PHY Stop Command
221   *
222   * use to describe MPI PHY Start Command (64 bytes)
223   *
224   */
225  typedef struct agsaPhyStopCmd_s {
226    bit32             tag;
227    bit32             phyId;
228    bit32             reserved[13];
229  } agsaPhyStopCmd_t;
230  
231  /** \brief the data structure of SSP INI IO Start Command
232   *
233   * use to describe MPI SSP INI IO Start Command (64 bytes)
234   *
235   */
236  typedef struct agsaSSPIniIOStartCmd_s {
237    bit32                tag;
238    bit32                deviceId;
239    bit32                dataLen;
240    bit32                dirMTlr;
241    agsaSSPCmdInfoUnit_t SSPInfoUnit;
242    bit32                AddrLow0;
243    bit32                AddrHi0;
244    bit32                Len0;
245    bit32                E0;
246  } agsaSSPIniIOStartCmd_t;
247  
248  /** \brief the data structure of SSP INI TM Start Command
249   *
250   * use to describe MPI SSP INI TM Start Command (64 bytes)
251   *
252   */
253  typedef struct agsaSSPIniTMStartCmd_s {
254    bit32                tag;
255    bit32                deviceId;
256    bit32                relatedTag;
257    bit32                TMfunction;
258    bit8                 lun[8];
259    bit32                dsAdsMReport;
260    bit32                reserved[8];
261  } agsaSSPIniTMStartCmd_t;
262  
263  /** \brief the data structure of SSP INI Extended IO Start Command
264   *
265   * use to describe MPI SSP INI Extended CDB Start Command (96 bytes to support 32 CDB)
266   *
267   */
268  typedef struct agsaSSPIniExtIOStartCmd_s {
269    bit32                tag;
270    bit32                deviceId;
271    bit32                dataLen;
272    bit32                SSPIuLendirMTlr;
273    bit8                 SSPIu[1];
274    /* variable lengh */
275    /*  bit32            AddrLow0; */
276    /*  bit32            AddrHi0;  */
277    /*  bit32            Len0;     */
278    /*  bit32            E0;       */
279  } agsaSSPIniExtIOStartCmd_t;
280  
281  typedef struct agsaSSPIniEncryptIOStartCmd_s
282  {
283    bit32                tag;                  /* 1 */
284    bit32                deviceId;             /* 2 */
285    bit32                dataLen;              /* 3 */
286    bit32                dirMTlr;              /* 4 */
287    bit32                sspiu_0_3_indcdbalL;  /* 5 */
288    bit32                sspiu_4_7_indcdbalH;  /* 6 */
289    bit32                sspiu_8_11;           /* 7 */
290    bit32                sspiu_12_15;          /* 8 */
291    bit32                sspiu_16_19;          /* 9 */
292    bit32                sspiu_19_23;          /* 10 */
293    bit32                sspiu_24_27;          /* 11 */
294    bit32                epl_descL;            /* 12 */
295    bit32                dpl_descL;            /* 13 */
296    bit32                edpl_descH;           /* 14 */
297    bit32                DIF_flags;            /* 15 */
298    bit32                udt;                  /* 16 0x10 */
299    bit32                udtReplacementLo;     /* 17 */
300    bit32                udtReplacementHi;     /* 18 */
301    bit32                DIF_seed;             /* 19 */
302    bit32                encryptFlagsLo;       /* 20 0x14 */
303    bit32                encryptFlagsHi;       /* 21 */
304    bit32                keyTag_W0;            /* 22 */
305    bit32                keyTag_W1;            /* 23 */
306    bit32                tweakVal_W0;          /* 24 0x18 */
307    bit32                tweakVal_W1;          /* 25 */
308    bit32                tweakVal_W2;          /* 26 */
309    bit32                tweakVal_W3;          /* 27 */
310    bit32                AddrLow0;             /* 28 0x1C */
311    bit32                AddrHi0;              /* 29 */
312    bit32                Len0;                 /* 30 */
313    bit32                E0;                   /* 31 */
314  } agsaSSPIniEncryptIOStartCmd_t;
315  
316  /** \brief the data structure of SSP Abort Command
317   *
318   * use to describe MPI SSP Abort Command (64 bytes)
319   *
320   */
321  typedef struct agsaSSPAbortCmd_s {
322    bit32             tag;
323    bit32             deviceId;
324    bit32             HTagAbort;
325    bit32             abortAll;
326    bit32             reserved[11];
327  } agsaSSPAbortCmd_t;
328  
329  /** \brief the data structure of Register Device Command
330   *
331   * use to describe MPI DEVICE REGISTER Command (64 bytes)
332   *
333   */
334  typedef struct agsaRegDevCmd_s {
335    bit32             tag;
336    bit32             phyIdportId;
337    bit32             dTypeLRateAwtHa;
338    bit32             ITNexusTimeOut;
339    bit32             sasAddrHi;
340    bit32             sasAddrLo;
341    bit32             DeviceId;
342    bit32             reserved[8];
343  } agsaRegDevCmd_t;
344  
345  /** \brief the data structure of Deregister Device Handle Command
346   *
347   * use to describe MPI DEREGISTER DEVIDE HANDLE Command (64 bytes)
348   *
349   */
350  typedef struct agsaDeregDevHandleCmd_s {
351    bit32             tag;
352    bit32             deviceId;
353    bit32             portId;
354    bit32             reserved[12];
355  } agsaDeregDevHandleCmd_t;
356  
357  /** \brief the data structure of Get Device Handle Command
358   *
359   * use to describe MPI GET DEVIDE HANDLE Command (64 bytes)
360   *
361   */
362  typedef struct agsaGetDevHandleCmd_s {
363    bit32             tag;
364    bit32             DevADevTMaxDIDportId;
365    bit32             skipCount;
366    bit32             reserved[12];
367  } agsaGetDevHandleCmd_t;
368  
369  /** \brief the data structure of SMP Request Command
370   *
371   * use to describe MPI SMP REQUEST Command (64 bytes)
372   *
373   */
374  
375  typedef struct agsaSMPCmd_s {
376    bit32                tag;
377    bit32                deviceId;
378    bit32                IR_IP_OV_res_phyId_DPdLen_res;
379                                                 /* Bits [0]  - IR */
380                                                 /* Bits [1] - IP */
381                                                 /* Bits [15:2] - Reserved */
382                                                 /* Bits [23:16] - Len */
383                                                 /* Bits [31:24] - Reserved */
384    bit32                SMPCmd[12];
385  } agsaSMPCmd_t;
386  
387  
388  typedef struct agsaSMPCmd_V_s {
389    bit32                tag;                    /* 1 */
390    bit32                deviceId;               /* 2 */
391    bit32                IR_IP_OV_res_phyId_DPdLen_res;/* 3 */
392                                                 /* Bits [0]  - IR */
393                                                 /* Bits [1] - IP */
394                                                 /* Bits [15:2] - Reserved */
395                                                 /* Bits [23:16] - Len */
396                                                 /* Bits [31:24] - Reserved */
397    bit32                SMPHDR;                 /* 4 */
398    bit32                SMP3_0;                 /* 5 */
399    bit32                SMP7_4;                 /* 6 */
400    bit32                SMP11_8;                /* 7 */
401    bit32                IndirL_SMPRF15_12;      /* 8 */
402    bit32                IndirH_or_SMPRF19_16;   /* 9 */
403    bit32                IndirLen_or_SMPRF23_20; /* 10 */
404    bit32                R_or_SMPRF27_24;        /* 11 */
405    bit32                ISRAL_or_SMPRF31_28;    /* 12 */
406    bit32                ISRAH_or_SMPRF35_32;    /* 13 */
407    bit32                ISRL_or_SMPRF39_36;     /* 14 */
408    bit32                R_or_SMPRF43_40;        /* 15 */
409  } agsaSMPCmd_V_t;
410  
411  /** \brief the data structure of SMP Abort Command
412   *
413   * use to describe MPI SMP Abort Command (64 bytes)
414   *
415   */
416  typedef struct agsaSMPAbortCmd_s {
417    bit32             tag;
418    bit32             deviceId;
419    bit32             HTagAbort;
420    bit32             Scp;
421    bit32             reserved[11];
422  } agsaSMPAbortCmd_t;
423  
424  /** \brief the data structure of SATA Start Command
425   *
426   * use to describe MPI SATA Start Command (64 bytes)
427   *
428   */
429  typedef struct agsaSATAStartCmd_s {
430    bit32                    tag;              /* 1 */
431    bit32                    deviceId;         /* 2 */
432    bit32                    dataLen;          /* 3 */
433    bit32                    optNCQTagataProt; /* 4 */
434    agsaFisRegHostToDevice_t sataFis;          /* 5 6 7 8 9 */
435    bit32                    reserved1;        /* 10 */
436    bit32                    reserved2;        /* 11 */
437    bit32                    AddrLow0;         /* 12 */
438    bit32                    AddrHi0;          /* 13 */
439    bit32                    Len0;             /* 14 */
440    bit32                    E0;               /* 15 */
441    bit32                    ATAPICDB[4];     /* 16-19 */
442  } agsaSATAStartCmd_t;
443  
444  typedef struct agsaSATAEncryptStartCmd_s
445  {
446    bit32                tag;                  /* 1 */
447    bit32                IniDeviceId;          /* 2 */
448    bit32                dataLen;              /* 3 */
449    bit32                optNCQTagataProt;     /* 4 */
450    agsaFisRegHostToDevice_t sataFis;          /* 5 6 7 8 9 */
451    bit32                reserved1;            /* 10 */
452    bit32                Res_EPL_DESCL;        /* 11 */
453    bit32                resSKIPBYTES;         /* 12 */
454    bit32                Res_DPL_DESCL_NDPLR;  /* 13 DIF per LA Address lo if DPLE is 1 */
455    bit32                Res_EDPL_DESCH;       /* 14 DIF per LA Address hi if DPLE is 1 */
456    bit32                DIF_flags;            /* 15 */
457    bit32                udt;                  /* 16 */
458    bit32                udtReplacementLo;     /* 17 */
459    bit32                udtReplacementHi;     /* 18 */
460    bit32                DIF_seed;             /* 19 */
461    bit32                encryptFlagsLo;       /* 20 */
462    bit32                encryptFlagsHi;       /* 21 */
463    bit32                keyTagLo;             /* 22 */
464    bit32                keyTagHi;             /* 23 */
465    bit32                tweakVal_W0;          /* 24 */
466    bit32                tweakVal_W1;          /* 25 */
467    bit32                tweakVal_W2;          /* 26 */
468    bit32                tweakVal_W3;          /* 27 */
469    bit32                AddrLow0;             /* 28 */
470    bit32                AddrHi0;              /* 29 */
471    bit32                Len0;                 /* 30 */
472    bit32                E0;                   /* 31 */
473  } agsaSATAEncryptStartCmd_t;
474  
475  /** \brief the data structure of SATA Abort Command
476   *
477   * use to describe MPI SATA Abort Command (64 bytes)
478   *
479   */
480  typedef struct agsaSATAAbortCmd_s {
481    bit32             tag;
482    bit32             deviceId;
483    bit32             HTagAbort;
484    bit32             abortAll;
485    bit32             reserved[11];
486  } agsaSATAAbortCmd_t;
487  
488  /** \brief the data structure of Local PHY Control Command
489   *
490   * use to describe MPI LOCAL PHY CONTROL Command (64 bytes)
491   *
492   */
493  typedef struct agsaLocalPhyCntrlCmd_s {
494    bit32             tag;
495    bit32             phyOpPhyId;
496    bit32             reserved1[14];
497  } agsaLocalPhyCntrlCmd_t;
498  
499  /** \brief the data structure of Get Device Info Command
500   *
501   * use to describe MPI GET DEVIDE INFO Command (64 bytes)
502   *
503   */
504  typedef struct agsaGetDevInfoCmd_s {
505    bit32             tag;
506    bit32             DeviceId;
507    bit32             reserved[13];
508  } agsaGetDevInfoCmd_t;
509  
510  /** \brief the data structure of HW Reset Command
511   *
512   * use to describe MPI HW Reset Command (64 bytes)
513   *
514   */
515  typedef struct agsaHWResetCmd_s {
516    bit32           option;
517    bit32           reserved[14];
518  } agsaHWResetCmd_t;
519  
520  /** \brief the data structure of Firmware download
521   *
522   * use to describe MPI FW DOWNLOAD Command (64 bytes)
523   */
524  typedef struct agsaFwFlashUpdate_s {
525    bit32             tag;
526    bit32             curImageOffset;
527    bit32             curImageLen;
528    bit32             totalImageLen;
529    bit32             reserved0[7];
530    bit32             SGLAL;
531    bit32             SGLAH;
532    bit32             Len;
533    bit32             extReserved;
534  } agsaFwFlashUpdate_t;
535  
536  
537  /** \brief the data structure EXT Flash Op
538   *
539   * use to describe Extented Flash Operation Command (128 bytes)
540   */
541  typedef struct agsaFwFlashOpExt_s {
542    bit32             tag;
543    bit32             Command;
544    bit32             PartOffset;
545    bit32             DataLength;
546    bit32             Reserved0[7];
547    bit32             SGLAL;
548    bit32             SGLAH;
549    bit32             Len;
550    bit32             E_sgl;
551    bit32             Reserved[15];
552  } agsaFwFlashOpExt_t;
553  
554  /** \brief the data structure EXT Flash Op
555   *
556   * use to describe Extented Flash Operation Command (64 bytes)
557   */
558  typedef struct agsaFwFlashOpExtRsp_s {
559    bit32             tag;
560    bit32             Command;
561    bit32             Status;
562    bit32             Epart_Size;
563    bit32             EpartSectSize;
564    bit32             Reserved[10];
565  } agsaFwFlashOpExtRsp_t;
566  
567  
568  #define FWFLASH_IOMB_RESERVED_LEN 0x07
569  
570  #ifdef SPC_ENABLE_PROFILE
571  typedef struct agsaFwProfileIOMB_s {
572    bit32             tag;
573    bit32             tcid_processor_cmd;
574    bit32             codeStartAdd;
575    bit32             codeEndAdd;
576    bit32             reserved0[7];
577    bit32             SGLAL;
578    bit32             SGLAH;
579    bit32             Len;
580    bit32             extReserved;
581  } agsaFwProfileIOMB_t;
582  #define FWPROFILE_IOMB_RESERVED_LEN 0x07
583  #endif
584  /** \brief the data structure of GPIO Commannd
585   *
586   * use to describe MPI GPIO Command (64 bytes)
587   */
588  typedef struct agsaGPIOCmd_s {
589    bit32             tag;
590    bit32             eOBIDGeGsGrGw;
591    bit32             GpioWrMsk;
592    bit32             GpioWrVal;
593    bit32             GpioIe;
594    bit32             OT11_0;
595    bit32             OT19_12; /* reserved for SPCv controller */
596    bit32             GPIEVChange;
597    bit32             GPIEVRise;
598    bit32             GPIEVFall;
599    bit32             reserved[5];
600  } agsaGPIOCmd_t;
601  
602  
603  #define GPIO_GW_BIT 0x1
604  #define GPIO_GR_BIT 0x2
605  #define GPIO_GS_BIT 0x4
606  #define GPIO_GE_BIT 0x8
607  
608  /** \brief the data structure of SAS Diagnostic Start/End Command
609   *
610   * use to describe MPI SAS Diagnostic Start/End Command (64 bytes)
611   */
612  typedef struct agsaSASDiagStartEndCmd_s {
613    bit32             tag;
614    bit32             OperationPhyId;
615    bit32             reserved[13];
616  } agsaSASDiagStartEndCmd_t;
617  
618  /** \brief the data structure of SAS Diagnostic Execute Command
619   *
620   * use to describe MPI SAS Diagnostic Execute Command for SPCv (128 bytes)
621   */
622  typedef struct agsaSASDiagExecuteCmd_s {
623    bit32             tag;             /* 1 */
624    bit32             CmdTypeDescPhyId;/* 2 */
625    bit32             Pat1Pat2;        /* 3 */
626    bit32             Threshold;       /* 4 */
627    bit32             CodePatErrMsk;   /* 5 */
628    bit32             Pmon;            /* 6 */
629    bit32             PERF1CTL;        /* 7 */
630    bit32             THRSHLD1;        /* 8 */
631    bit32             reserved[23];     /* 9 31 */
632  } agsaSASDiagExecuteCmd_t;
633  
634  
635  /** \brief the data structure of SAS Diagnostic Execute Command
636   *
637   * use to describe MPI SAS Diagnostic Execute Command for SPC (64 bytes)
638   */
639  typedef struct agsa_SPC_SASDiagExecuteCmd_s {
640    bit32             tag;             /* 1 */
641    bit32             CmdTypeDescPhyId;/* 2 */
642    bit32             Pat1Pat2;        /* 3 */
643    bit32             Threshold;       /* 4 */
644    bit32             CodePatErrMsk;   /* 5 */
645    bit32             Pmon;            /* 6 */
646    bit32             PERF1CTL;        /* 7 */
647    bit32             reserved[8];     /* 8 15 */
648  } agsa_SPC_SASDiagExecuteCmd_t;
649  #define SAS_DIAG_PARAM_BYTES 24
650  
651  
652  /** \brief the data structure of SSP TGT IO Start Command
653   *
654   * use to describe MPI SSP TGT IO Start Command (64 bytes)
655   *
656   */
657  typedef struct agsaSSPTgtIOStartCmd_s {
658    bit32              tag;              /*  1 */
659    bit32              deviceId;         /*  2 */
660    bit32              dataLen;          /*  3 */
661    bit32              dataOffset;       /*  4 */
662    bit32              INITagAgrDir;     /*  5 */
663    bit32              reserved;         /*  6 */
664    bit32              DIF_flags;        /*  7 */
665    bit32              udt;              /*  8 */
666    bit32              udtReplacementLo; /*  9 */
667    bit32              udtReplacementHi; /* 10 */
668    bit32              DIF_seed;         /* 11 */
669    bit32              AddrLow0;         /* 12 */
670    bit32              AddrHi0;          /* 13 */
671    bit32              Len0;             /* 14 */
672    bit32              E0;               /* 15 */
673  } agsaSSPTgtIOStartCmd_t;
674  
675  /** \brief the data structure of SSP TGT Response Start Command
676   *
677   * use to describe MPI SSP TGT Response Start Command (64 bytes)
678   *
679   */
680  typedef struct agsaSSPTgtRspStartCmd_s {
681    bit32                    tag;
682    bit32                    deviceId;
683    bit32                    RspLen;
684    bit32                    INITag_IP_AN;
685    bit32                    reserved[7];
686    bit32                    AddrLow0;
687    bit32                    AddrHi0;
688    bit32                    Len0;
689    bit32                    E0;
690  } agsaSSPTgtRspStartCmd_t;
691  
692  /** \brief the data structure of Device Handle Accept Command
693   *
694   * use to describe MPI Device Handle Accept Command (64 bytes)
695   *
696   */
697  typedef struct agsaDevHandleAcceptCmd_s {
698    bit32                    tag;
699    bit32                    Ctag;
700    bit32                    deviceId;
701    bit32                    DevA_MCN_R_R_HA_ITNT;
702    bit32                    reserved[11];
703  } agsaDevHandleAcceptCmd_t;
704  
705  /** \brief the data structure of SAS HW Event Ack Command
706   *
707   * use to describe MPI SAS HW Event Ack Command (64 bytes)
708   *
709   */
710  typedef struct agsaSASHwEventAckCmd_s {
711    bit32                    tag;
712    bit32                    sEaPhyIdPortId;
713    bit32                    Param0;
714    bit32                    Param1;
715    bit32                    reserved[11];
716  } agsaSASHwEventAckCmd_t;
717  
718  /** \brief the data structure of Get Time Stamp Command
719   *
720   * use to describe MPI Get Time Stamp Command (64 bytes)
721   *
722   */
723  typedef struct agsaGetTimeStampCmd_s {
724    bit32                    tag;
725    bit32                    reserved[14];
726  } agsaGetTimeStampCmd_t;
727  
728  /** \brief the data structure of Port Control Command
729   *
730   * use to describe MPI Port Control Command (64 bytes)
731   *
732   */
733  typedef struct agsaPortControlCmd_s {
734    bit32                    tag;
735    bit32                    portOPPortId;
736    bit32                    Param0;
737    bit32                    Param1;
738    bit32                    reserved[11];
739  } agsaPortControlCmd_t;
740  
741  /** \brief the data structure of Set NVM Data Command
742   *
743   * use to describe MPI Set NVM Data Command (64 bytes)
744   *
745   */
746  typedef struct agNVMIndirect_s {
747    bit32           signature;
748    bit32           reserved[7];
749    bit32           ISglAL;
750    bit32           ISglAH;
751    bit32           ILen;
752    bit32           reserved1;
753  } agNVMIndirect_t;
754  
755  typedef union agsaSetNVMData_s {
756    bit32           NVMData[12];
757    agNVMIndirect_t indirectData;
758  } agsaSetNVMData_t;
759  
760  typedef struct agsaSetNVMDataCmd_s {
761    bit32            tag;
762    bit32            LEN_IR_VPDD;
763    bit32            VPDOffset;
764    agsaSetNVMData_t Data;
765  } agsaSetNVMDataCmd_t;
766  
767  /** \brief the data structure of Get NVM Data Command
768   *
769   * use to describe MPI Get NVM Data Command (64 bytes)
770   *
771   */
772  typedef struct agsaGetNVMDataCmd_s {
773    bit32           tag;
774    bit32           LEN_IR_VPDD;
775    bit32           VPDOffset;
776    bit32           reserved[8];
777    bit32           respAddrLo;
778    bit32           respAddrHi;
779    bit32           respLen;
780    bit32           reserved1;
781  } agsaGetNVMDataCmd_t;
782  
783  #define TWI_DEVICE 0x0
784  #define C_SEEPROM  0x1
785  #define VPD_FLASH  0x4
786  #define AAP1_RDUMP 0x5
787  #define IOP_RDUMP  0x6
788  #define EXPAN_ROM  0x7
789  
790  #define DIRECT_MODE   0x0
791  #define INDIRECT_MODE 0x1
792  
793  #define IRMode     0x80000000
794  #define IPMode     0x80000000
795  #define NVMD_TYPE  0x0000000F
796  #define NVMD_STAT  0x0000FFFF
797  #define NVMD_LEN   0xFF000000
798  
799  #define TWI_DEVICE 0x0
800  #define SEEPROM    0x1
801  
802  /** \brief the data structure of Set Device State Command
803   *
804   * use to describe MPI Set Device State Command (64 bytes)
805   *
806   */
807  typedef struct agsaSetDeviceStateCmd_s {
808    bit32           tag;
809    bit32           deviceId;
810    bit32           NDS;
811    bit32           reserved[12];
812  } agsaSetDeviceStateCmd_t;
813  
814  #define DS_OPERATIONAL     0x01
815  #define DS_IN_RECOVERY     0x03
816  #define DS_IN_ERROR        0x04
817  #define DS_NON_OPERATIONAL 0x07
818  
819  /** \brief the data structure of Get Device State Command
820   *
821   * use to describe MPI Get Device State Command (64 bytes)
822   *
823   */
824  typedef struct agsaGetDeviceStateCmd_s {
825    bit32           tag;
826    bit32           deviceId;
827    bit32           reserved[13];
828  } agsaGetDeviceStateCmd_t;
829  
830  /** \brief the data structure of Set Device Info Command
831   *
832   * use to describe MPI OPC_INB_SET_DEV_INFO (0x02c) Command (64 bytes)
833   *
834   */
835  typedef struct agsaSetDevInfoCmd_s {
836    bit32             tag;
837    bit32             deviceId;
838    bit32             SA_SR_SI;
839    bit32             DEVA_MCN_R_ITNT;
840    bit32             reserved[11];
841  } agsaSetDevInfoCmd_t;
842  
843  #define SET_DEV_INFO_V_DW3_MASK    0x0000003F
844  #define SET_DEV_INFO_V_DW4_MASK    0xFF07FFFF
845  #define SET_DEV_INFO_SPC_DW3_MASK  0x7
846  #define SET_DEV_INFO_SPC_DW4_MASK  0x003FFFF
847  
848  #define SET_DEV_INFO_V_DW3_SM_SHIFT 3
849  #define SET_DEV_INFO_V_DW3_SA_SHIFT 2
850  #define SET_DEV_INFO_V_DW3_SR_SHIFT 1
851  #define SET_DEV_INFO_V_DW3_SI_SHIFT 0
852  
853  #define SET_DEV_INFO_V_DW4_MCN_SHIFT     24
854  #define SET_DEV_INFO_V_DW4_AWT_SHIFT     17
855  #define SET_DEV_INFO_V_DW4_RETRY_SHIFT   16
856  #define SET_DEV_INFO_V_DW4_ITNEXUS_SHIFT  0
857  
858  /** \brief the data structure of SAS Re_Initialize Command
859   *
860   * use to describe MPI SAS RE_INITIALIZE Command (64 bytes)
861   *
862   */
863  typedef struct agsaSasReInitializeCmd_s {
864    bit32             tag;
865    bit32             setFlags;
866    bit32             MaxPorts;
867    bit32             openRejReCmdData;
868    bit32             sataHOLTMO;
869    bit32             reserved[10];
870  } agsaSasReInitializeCmd_t;
871  
872  
873  /** \brief the data structure of SGPIO Command
874   *
875   * use to describe MPI serial GPIO Command (64 bytes)
876   *
877   */
878  typedef struct agsaSGpioCmd_s {
879    bit32             tag;
880    bit32             regIndexRegTypeFunctionFrameType;
881    bit32             regCount;
882    bit32             writeData[OSSA_SGPIO_MAX_WRITE_DATA_COUNT];
883  } agsaSGpioCmd_t;
884  
885  /** \brief the data structure of PCIE Diagnostic Command
886   *
887   * use to describe MPI PCIE Diagnostic Command for SPCv (128 bytes)
888   *
889   */
890  typedef struct agsaPCIeDiagExecuteCmd_s {
891    bit32    tag;           /* 1 */
892    bit32    CmdTypeDesc;   /* 2 */
893    bit32    UUM_EDA;       /* 3 */
894    bit32    UDTR1_UDT0;    /* 4 */
895    bit32    UDT5_UDT2;     /* 5 */
896    bit32    UDTR5_UDTR2;   /* 6 */
897    bit32    Res_IOS;       /* 7 */
898    bit32    rdAddrLower;   /* 8 */
899    bit32    rdAddrUpper;   /* 9 */
900    bit32    wrAddrLower;   /* 10 */
901    bit32    wrAddrUpper;   /* 11 */
902    bit32    len;           /* 12 */
903    bit32    pattern;       /* 13 */
904    bit32    reserved2[2];  /* 14 15 */
905    bit32    reserved3[16]; /* 15 31 */
906  } agsaPCIeDiagExecuteCmd_t;
907  
908  
909  /** \brief the data structure of PCI Diagnostic Command for SPC
910   *
911   * use to describe MPI PCI Diagnostic Command for SPC (64 bytes)
912   *
913   */
914  typedef struct agsa_SPC_PCIDiagExecuteCmd_s {
915    bit32    tag;
916    bit32    CmdTypeDesc;
917    bit32    reserved1[5];
918    bit32    rdAddrLower;
919    bit32    rdAddrUpper;
920    bit32    wrAddrLower;
921    bit32    wrAddrUpper;
922    bit32    len;
923    bit32    pattern;
924    bit32    reserved2[2];
925  } agsa_SPC_PCIDiagExecuteCmd_t;
926  
927  /** \brief the data structure of GET DFE Data Command
928   *
929   * use to describe GET DFE Data Command for SPCv (128 bytes)
930   *
931   */
932  typedef struct agsaGetDDEFDataCmd_s {
933    bit32    tag;           /* 1 */
934    bit32    reserved_In_Ln;/* 2 */
935    bit32    MCNT;          /* 3 */
936    bit32    reserved1[3];  /* 4 - 6 */
937    bit32    Buf_AddrL;     /* 7 */
938    bit32    Buf_AddrH;     /* 8 */
939    bit32    Buf_Len;       /* 9 */
940    bit32    E_reserved;    /* 10 */
941    bit32    reserved2[21]; /* 11 - 31 */
942  } agsaGetDDEFDataCmd_t;
943  
944  
945  /***********************************************
946   * outbound IOMBs
947   ***********************************************/
948  /** \brief the data structure of Echo Response
949   *
950   * use to describe MPI Echo Response (64 bytes)
951   *
952   */
953  typedef struct agsaEchoRsp_s {
954    bit32           tag;
955    bit32           payload[14];
956  } agsaEchoRsp_t;
957  
958  /** \brief the data structure of HW Event from Outbound
959   *
960   * use to describe MPI HW Event (64 bytes)
961   *
962   */
963  typedef struct agsaHWEvent_SPC_OUB_s {
964    bit32             LRStatusEventPhyIdPortId;
965    bit32             EVParam;
966    bit32             NpipPortState;
967    agsaSASIdentify_t sasIdentify;
968    agsaFisRegDeviceToHost_t sataFis;
969  } agsaHWEvent_SPC_OUB_t;
970  
971  #define PHY_ID_BITS    0x000000F0
972  #define LINK_RATE_MASK 0xF0000000
973  #define STATUS_BITS    0x0F000000
974  #define HW_EVENT_BITS  0x00FFFF00
975  
976  typedef struct agsaHWEvent_Phy_OUB_s {
977    bit32             tag;
978    bit32             Status;
979    bit32             ReservedPhyId;
980  } agsaHWEvent_Phy_OUB_t;
981  
982  /** \brief the data structure of HW Event from Outbound
983   *
984   * use to describe MPI HW Event (64 bytes)
985   *
986   */
987  typedef struct agsaHWEvent_V_OUB_s {
988    bit32             LRStatEventPortId;
989    bit32             EVParam;
990    bit32             RsvPhyIdNpipRsvPortState;
991    agsaSASIdentify_t sasIdentify;
992    agsaFisRegDeviceToHost_t sataFis;
993  } agsaHWEvent_V_OUB_t;
994  
995  #define PHY_ID_V_BITS  0x00FF0000
996  #define NIPP_V_BITS    0x0000FF00
997  
998  
999  
1000  /** \brief the data structure of SSP Completion Response
1001   *
1002   * use to describe MPI SSP Completion Response (1024 bytes)
1003   *
1004   */
1005  typedef struct agsaSSPCompletionRsp_s {
1006    bit32                     tag;
1007    bit32                     status;
1008    bit32                     param;
1009    bit32                     SSPTag;
1010    agsaSSPResponseInfoUnit_t SSPrsp;
1011    bit32                     respData;
1012    bit32                     senseData[5];
1013    bit32                     respData1[239];
1014  } agsaSSPCompletionRsp_t;
1015  
1016  
1017  /** \brief the data structure of SSP Completion DIF Response
1018   *
1019   * use to describe MPI SSP Completion DIF Response (1024 bytes)
1020   *
1021   */
1022  typedef struct agsaSSPCompletionDifRsp_s {
1023    bit32 tag;
1024    bit32 status;
1025    bit32 param;
1026    bit32 SSPTag;
1027    bit32 Device_Id;
1028    bit32 UpperLBA;
1029    bit32 LowerLBA;
1030    bit32 sasAddressHi;
1031    bit32 sasAddressLo;
1032    bit32 ExpectedCRCUDT01;
1033    bit32 ExpectedUDT2345;
1034    bit32 ActualCRCUDT01;
1035    bit32 ActualUDT2345;
1036    bit32 DIFErrDevID;
1037    bit32 ErrBoffsetEDataLen;
1038    bit32 EDATA_FRM;
1039  
1040  } agsaSSPCompletionDifRsp_t;
1041  
1042  
1043  /* SSPTag bit fields Bits [31:16] */
1044  #define SSP_RESCV_BIT       0x00010000  /* Bits [16] */
1045  #define SSP_RESCV_PAD       0x00060000  /* Bits [18:17] */
1046  #define SSP_RESCV_PAD_SHIFT 17
1047  #define SSP_AGR_S_BIT       (1 << 19)   /* Bits [19] */
1048  
1049  /** \brief the data structure of SMP Completion Response
1050   *
1051   * use to describe MPI SMP Completion Response (1024 bytes)
1052   *
1053   */
1054  typedef struct agsaSMPCompletionRsp_s {
1055    bit32                     tag;
1056    bit32                     status;
1057    bit32                     param;
1058    bit32                     SMPrsp[252];
1059  } agsaSMPCompletionRsp_t;
1060  
1061  /** \brief the data structure of Deregister Device Response
1062   *
1063   * use to describe MPI Deregister Device Response (64 bytes)
1064   *
1065   */
1066  typedef struct agsaDeregDevHandleRsp_s {
1067    bit32                     tag;
1068    bit32                     status;
1069    bit32                     deviceId;
1070    bit32                     reserved[12];
1071  } agsaDeregDevHandleRsp_t;
1072  
1073  /** \brief the data structure of Get Device Handle Response
1074   *
1075   * use to describe MPI Get Device Handle Response (64 bytes)
1076   *
1077   */
1078  typedef struct agsaGetDevHandleRsp_s {
1079    bit32                     tag;
1080    bit32                     DeviceIdcPortId;
1081    bit32                     deviceId[13];
1082  } agsaGetDevHandleRsp_t;
1083  
1084  #define DEVICE_IDC_BITS 0x00FFFF00
1085  #define DEVICE_ID_BITS  0x00000FFF
1086  
1087  /** \brief the data structure of Local Phy Control Response
1088   *
1089   * use to describe MPI Local Phy Control Response (64 bytes)
1090   *
1091   */
1092  typedef struct agsaLocalPhyCntrlRsp_s {
1093    bit32                     tag;
1094    bit32                     phyOpId;
1095    bit32                     status;
1096    bit32                     reserved[12];
1097  } agsaLocalPhyCntrlRsp_t;
1098  
1099  #define LOCAL_PHY_OP_BITS 0x0000FF00
1100  #define LOCAL_PHY_PHYID   0x000000FF
1101  
1102  /** \brief the data structure of DEVICE_REGISTRATION Response
1103   *
1104   * use to describe device registration response (64 bytes)
1105   *
1106   */
1107  typedef struct agsaDeviceRegistrationRsp_s {
1108    bit32             tag;
1109    bit32             status;
1110    bit32             deviceId;
1111    bit32             reserved[12];
1112  } agsaDeviceRegistrationRsp_t;
1113  
1114  
1115  #define FAILURE_OUT_OF_RESOURCE             0x01 /* The device registration failed because the SPC 8x6G is running out of device handle resources. The parameter DEVICE_ID is not used. */
1116  #define FAILURE_DEVICE_ALREADY_REGISTERED   0x02 /* The device registration failed because the SPC 8x6G detected an existing device handle with a similar SAS address. The parameter DEVICE_ID contains the existing  DEVICE _ID assigned to the SAS device. */
1117  #define FAILURE_INVALID_PHY_ID              0x03 /* Only for directly-attached SATA registration. The device registration failed because the SPC 8x6G detected an invalid (out-of-range) PHY ID. */
1118  #define FAILURE_PHY_ID_ALREADY_REGISTERED   0x04 /* Only for directly-attached SATA registration. The device registration failed because the SPC 8x6G detected an already -registered PHY ID for a directly attached SATA drive. */
1119  #define FAILURE_PORT_ID_OUT_OF_RANGE        0x05 /* PORT_ID specified in the REGISTER_DEVICE Command is out-of range (0-7).  */
1120  #define FAILURE_PORT_NOT_VALID_STATE        0x06 /* The PORT_ID specified in the REGISTER_DEVICE Command is not in PORT_VALID state. */
1121  #define FAILURE_DEVICE_TYPE_NOT_VALID       0x07 /* The device type, specified in the �S field in the REGISTER_DEVICE Command is not valid. */
1122  
1123  #define MPI_ERR_DEVICE_HANDLE_UNAVAILABLE   0x1020 /* The device registration failed because the SPCv controller is running out of device handle resources. The parameter DEVICE_ID is not used. */
1124  #define MPI_ERR_DEVICE_ALREADY_REGISTERED   0x1021 /* The device registration failed because the SPCv controller detected an existing device handle with the same SAS address. The parameter DEVICE_ID contains the existing DEVICE _ID assigned to the SAS device. */
1125  #define MPI_ERR_DEVICE_TYPE_NOT_VALID       0x1022 /* The device type, specified in the �S field in the REGISTER_DEVICE_HANDLE Command (page 274) is not valid. */
1126  #define MPI_ERR_PORT_INVALID_PORT_ID        0x1041 /* specified in the REGISTER_DEVICE_HANDLE Command (page 274) is invalid. i.e Out of supported range  */
1127  #define MPI_ERR_PORT_STATE_NOT_VALID        0x1042 /* The PORT_ID specified in the REGISTER_DEVICE_HANDLE Command (page 274) is not in PORT_VALID state.  */
1128  #define MPI_ERR_PORT_STATE_NOT_IN_USE       0x1043
1129  #define MPI_ERR_PORT_OP_NOT_SUPPORTED       0x1044
1130  #define MPI_ERR_PORT_SMP_PHY_WIDTH_EXCEED   0x1045
1131  #define MPI_ERR_PORT_NOT_IN_CORRECT_STATE   0x1047 /*MPI_ERR_DEVICE_ACCEPT_PENDING*/
1132  
1133  
1134  #define MPI_ERR_PHY_ID_INVALID              0x1061 /* Only for directly-attached SATA registration. The device registration failed because the SPCv controller detected an invalid (out-of-range) PHY ID. */
1135  #define MPI_ERR_PHY_ID_ALREADY_REGISTERED   0x1062 /* Only for directly-attached SATA registration. The device registration failed because the SPCv controller detected an alreadyregistered PHY ID for a directly-attached SATA drive. */
1136  
1137  
1138  
1139  
1140  /** \brief the data structure of SATA Completion Response
1141   *
1142   * use to describe MPI SATA Completion Response (64 bytes)
1143   *
1144   */
1145  typedef struct agsaSATACompletionRsp_s {
1146    bit32                     tag;
1147    bit32                     status;
1148    bit32                     param;
1149    bit32                     FSATArsp;
1150    bit32                     respData[11];
1151  } agsaSATACompletionRsp_t;
1152  
1153  /** \brief the data structure of SATA Event Response
1154   *
1155   * use to describe MPI SATA Event Response (64 bytes)
1156   *
1157   */
1158  typedef struct agsaSATAEventRsp_s {
1159    bit32                     tag;
1160    bit32                     event;
1161    bit32                     portId;
1162    bit32                     deviceId;
1163    bit32                     reserved[11];
1164  } agsaSATAEventRsp_t;
1165  
1166  /** \brief the data structure of SSP Event Response
1167   *
1168   * use to describe MPI SSP Event Response (64 bytes)
1169   *
1170   */
1171  typedef struct agsaSSPEventRsp_s {
1172    bit32                     tag;
1173    bit32                     event;
1174    bit32                     portId;
1175    bit32                     deviceId;
1176    bit32                     SSPTag;
1177    bit32                     EVT_PARAM0_or_LBAH;
1178    bit32                     EVT_PARAM1_or_LBAL;
1179    bit32                     SAS_ADDRH;
1180    bit32                     SAS_ADDRL;
1181    bit32                     UDT1_E_UDT0_E_CRC_E;
1182    bit32                     UDT5_E_UDT4_E_UDT3_E_UDT2_E;
1183    bit32                     UDT1_A_UDT0_A_CRC_A;
1184    bit32                     UDT5_A_UDT4_A_UDT3_A_UDT2_A;
1185    bit32                     HW_DEVID_Reserved_DIF_ERR;
1186    bit32                     EDATA_LEN_ERR_BOFF;
1187    bit32                     EDATA_FRM;
1188  } agsaSSPEventRsp_t;
1189  
1190  #define SSPTAG_BITS 0x0000FFFF
1191  
1192  /** \brief the data structure of Get Device Info Response
1193   *
1194   * use to describe MPI Get Device Info Response (64 bytes)
1195   *
1196   */
1197  typedef struct agsaGetDevInfoRspSpc_s {
1198    bit32           tag;
1199    bit32           status;
1200    bit32           deviceId;
1201    bit32           dTypeSrateSMPTOArPortID;
1202    bit32           FirstBurstSizeITNexusTimeOut;
1203    bit8            sasAddrHi[4];
1204    bit8            sasAddrLow[4];
1205    bit32           reserved[8];
1206  } agsaGetDevInfoRsp_t;
1207  
1208  #define SMPTO_BITS     0xFFFF
1209  #define NEXUSTO_BITS   0xFFFF
1210  #define FIRST_BURST    0xFFFF
1211  #define FLAG_BITS      0x3
1212  #define LINK_RATE_BITS 0xFF
1213  #define DEV_TYPE_BITS  0x30000000
1214  
1215  /** \brief the data structure of Get Device Info Response V
1216   *
1217   * use to describe MPI Get Device Info Response (64 bytes)
1218   *
1219   */
1220  typedef struct agsaGetDevInfoRspV_s {
1221    bit32           tag;
1222    bit32           status;
1223    bit32           deviceId;
1224    bit32           ARSrateSMPTimeOutPortID;
1225    bit32           IRMcnITNexusTimeOut;
1226    bit8            sasAddrHi[4];
1227    bit8            sasAddrLow[4];
1228    bit32           reserved[8];
1229  } agsaGetDevInfoRspV_t;
1230  
1231  #define SMPTO_VBITS     0xFFFF
1232  #define NEXUSTO_VBITS   0xFFFF
1233  #define FIRST_BURST_MCN 0xF
1234  #define FLAG_VBITS      0x3
1235  #define LINK_RATE_VBITS 0xFF
1236  #define DEV_TYPE_VBITS  0x10000000
1237  
1238  
1239  /** \brief the data structure of Get Phy Profile Command IOMB V
1240   *
1241   */
1242  typedef struct agsaGetPhyProfileCmd_V_s {
1243    bit32           tag;
1244    bit32           Reserved_Ppc_SOP_PHYID;
1245    bit32           reserved[29];
1246  } agsaGetPhyProfileCmd_V_t;
1247  
1248  
1249  /** \brief the data structure of Get Phy Profile Response IOMB V
1250   *
1251   */
1252  typedef struct agsaGetPhyProfileRspV_s {
1253    bit32           tag;
1254    bit32           status;
1255    bit32           Reserved_Ppc_SOP_PHYID;
1256    bit32           PageSpecificArea[12];
1257  } agsaGetPhyProfileRspV_t;
1258  
1259  /** \brief the data structure of Set Phy Profile Command IOMB V
1260   *
1261   */
1262  typedef struct agsaSetPhyProfileCmd_V_s {
1263    bit32           tag;
1264    bit32           Reserved_Ppc_SOP_PHYID;
1265    bit32           PageSpecificArea[29];
1266  } agsaSetPhyProfileCmd_V_t;
1267  
1268  /** \brief the data structure of GetVis Command IOMB V
1269   *  OPC_OUB_GET_VIST_CAP_RSP
1270   */
1271  typedef struct agsaGetVHistCap_V_s {
1272    bit32           tag;
1273    bit32           Channel;
1274    bit32           NumBitLo;
1275    bit32           NumBitHi;
1276    bit32           reserved0;
1277    bit32           reserved1;
1278    bit32           PcieAddrLo;
1279    bit32           PcieAddrHi;
1280    bit32           ByteCount;
1281    bit32           reserved2[22];
1282  } agsaGetVHistCap_V_t;
1283  
1284  /** \brief the data structure of Set Phy Profile Response IOMB V
1285   *
1286   */
1287  typedef struct agsaSetPhyProfileRspV_s {
1288    bit32           tag;
1289    bit32           status;
1290    bit32           Reserved_Ppc_PHYID;
1291    bit32           PageSpecificArea[12];
1292  } agsaSetPhyProfileRspV_t;
1293  
1294  typedef struct agsaGetPhyInfoV_s {
1295    bit32           tag;
1296    bit32           Reserved_SOP_PHYID;
1297    bit32           reserved[28];
1298  } agsaGetPhyInfoV_t;
1299  
1300  
1301  #define SPC_GET_SAS_PHY_ERR_COUNTERS      1
1302  #define SPC_GET_SAS_PHY_ERR_COUNTERS_CLR  2
1303  #define SPC_GET_SAS_PHY_BW_COUNTERS       3
1304  
1305  
1306  /** \brief the data structure of FW_FLASH_UPDATE Response
1307   *
1308   * use to describe MPI FW_FLASH_UPDATE Response (64 bytes)
1309   *
1310   */
1311  typedef struct agsaFwFlashUpdateRsp_s {
1312    bit32             tag;
1313    bit32             status;
1314    bit32             reserved[13];
1315  } agsaFwFlashUpdateRsp_t;
1316  
1317  #ifdef SPC_ENABLE_PROFILE
1318  typedef struct agsaFwProfileRsp_s {
1319    bit32             tag;
1320    bit32             status;
1321    bit32             len;
1322    bit32             reserved[12];
1323  } agsaFwProfileRsp_t;
1324  #endif
1325  /** \brief the data structure of GPIO Response
1326   *
1327   * use to describe MPI GPIO Response (64 bytes)
1328   */
1329  typedef struct agsaGPIORsp_s {
1330    bit32             tag;
1331    bit32             reserved[2];
1332    bit32             GpioRdVal;
1333    bit32             GpioIe;
1334    bit32             OT11_0;
1335    bit32             OT19_12;
1336    bit32             GPIEVChange;
1337    bit32             GPIEVRise;
1338    bit32             GPIEVFall;
1339    bit32             reserved1[5];
1340  } agsaGPIORsp_t;
1341  
1342  /** \brief the data structure of GPIO Event
1343   *
1344   * use to describe MPI GPIO Event Response (64 bytes)
1345   */
1346  typedef struct agsaGPIOEvent_s {
1347    bit32             GpioEvent;
1348    bit32             reserved[14];
1349  } agsaGPIOEvent_t;
1350  
1351  /** \brief the data structure of GENERAL_EVENT Response
1352   *
1353   * use to describe MPI GENERNAL_EVENT Notification (64 bytes)
1354   *
1355   */
1356  typedef struct agsaGenernalEventRsp_s {
1357    bit32             status;
1358    bit32             inboundIOMB[14];
1359  } agsaGenernalEventRsp_t;
1360  
1361  /** \brief the data structure of SSP_ABORT Response
1362   *
1363   * use to describe MPI SSP_ABORT (64 bytes)
1364   *
1365   */
1366  typedef struct agsaSSPAbortRsp_s {
1367    bit32             tag;
1368    bit32             status;
1369    bit32             scp;
1370    bit32             reserved[12];
1371  } agsaSSPAbortRsp_t;
1372  
1373  /** \brief the data structure of SATA_ABORT Response
1374   *
1375   * use to describe MPI SATA_ABORT (64 bytes)
1376   *
1377   */
1378  typedef struct agsaSATAAbortRsp_s {
1379    bit32             tag;
1380    bit32             status;
1381    bit32             scp;
1382    bit32             reserved[12];
1383  } agsaSATAAbortRsp_t;
1384  
1385  /** \brief the data structure of SAS Diagnostic Start/End Response
1386   *
1387   * use to describe MPI SAS Diagnostic Start/End Response (64 bytes)
1388   *
1389   */
1390  typedef struct agsaSASDiagStartEndRsp_s {
1391    bit32             tag;
1392    bit32             Status;
1393    bit32             reserved[13];
1394  } agsaSASDiagStartEndRsp_t;
1395  
1396  /** \brief the data structure of SAS Diagnostic Execute Response
1397   *
1398   * use to describe MPI SAS Diagnostic Execute Response (64 bytes)
1399   *
1400   */
1401  typedef struct agsaSASDiagExecuteRsp_s {
1402    bit32             tag;
1403    bit32             CmdTypeDescPhyId;
1404    bit32             Status;
1405    bit32             ReportData;
1406    bit32             reserved[11];
1407  } agsaSASDiagExecuteRsp_t;
1408  
1409  /** \brief the data structure of General Event Notification Response
1410   *
1411   * use to describe MPI General Event Notification Response (64 bytes)
1412   *
1413   */
1414  typedef struct agsaGeneralEventRsp_s {
1415    bit32             status;
1416    bit32             inbIOMBpayload[14];
1417  } agsaGeneralEventRsp_t;
1418  
1419  #define GENERAL_EVENT_PAYLOAD 14
1420  #define OPCODE_BITS           0x00000fff
1421  
1422  /*
1423  Table 171 GENERAL_EVENT Notification Status Field Codes
1424  Value Name Description
1425  */
1426  #define GEN_EVENT_IOMB_V_BIT_NOT_SET             0x01 /* INBOUND_ Inbound IOMB is received with the V bit in the IOMB header not set. */
1427  #define GEN_EVENT_INBOUND_IOMB_OPC_NOT_SUPPORTED 0x02 /* Inbound IOMB is received with an unsupported OPC. */
1428  #define GEN_EVENT_IOMB_INVALID_OBID              0x03 /* INBOUND Inbound IOMB is received with an invalid OBID. */
1429  #define GEN_EVENT_DS_IN_NON_OPERATIONAL          0x39 /* DEVICE_HANDLE_ACCEPT command failed due to the device being in DS_NON_OPERATIONAL state. */
1430  #define GEN_EVENT_DS_IN_RECOVERY                 0x3A /* DEVICE_HANDLE_ACCEPT command failed due to device being in DS_IN_RECOVERY state. */
1431  #define GEN_EVENT_DS_INVALID                     0x49 /* DEVICE_HANDLE_ACCEPT command failed due to device being in DS_INVALID state. */
1432  
1433  #define GEN_EVENT_IO_XFER_READ_COMPL_ERR         0x50 /* Indicates the PCIe Read Request to fetch one or more inbound IOMBs received
1434                                                          a failed completion response. The first and second Dwords of the
1435                                                          INBOUND IOMB field ( Dwords 2 and 3) contains information to identifying
1436                                                          the location in the inbound queue where the error occurred.
1437                                                          Dword 2 bits[15:0] contains the inbound queue number.
1438                                                          Dword 2 bits[31:16] specifies how many consecutive IOMBs were affected
1439                                                          by the failed DMA.
1440                                                          Dword 3 specifies the Consumer Index [CI] of the inbound queue where
1441                                                          the DMA operation failed.*/
1442  
1443  /** \brief the data structure of SSP Request Received Notification
1444   *
1445   * use to describe MPI SSP Request Received Notification ( 1024 bytes)
1446   *
1447   */
1448  typedef struct agsaSSPReqReceivedNotify_s {
1449    bit32             deviceId;
1450    bit32             iniTagSSPIul;
1451    bit32             frameTypeHssa;
1452    bit32             TlrHdsa;
1453    bit32             SSPIu[251];
1454  } agsaSSPReqReceivedNotify_t;
1455  
1456  #define SSPIUL_BITS  0x0000FFFF
1457  #define INITTAG_BITS 0x0000FFFF
1458  #define FRAME_TYPE   0x000000FF
1459  #define TLR_BITS     0x00000300
1460  
1461  /** \brief the data structure of Device Handle Arrived Notification
1462   *
1463   * use to describe MPI Device Handle Arrived Notification ( 64 bytes)
1464   *
1465   */
1466  typedef struct agsaDeviceHandleArrivedNotify_s {
1467    bit32             CTag;
1468    bit32             HostAssignedIdFwdDeviceId;
1469    bit32             ProtConrPortId;
1470    bit8              sasAddrHi[4];
1471    bit8              sasAddrLow[4];
1472    bit32             reserved[10];
1473  
1474  } agsaDeviceHandleArrivedNotify_t;
1475  
1476  
1477  #define Conrate_V_MASK 0x0000F000
1478  #define Conrate_V_SHIFT 12
1479  #define Conrate_SPC_MASK  0x0000F000
1480  #define Conrate_SPC_SHIFT 4
1481  
1482  #define Protocol_SPC_MASK 0x00000700
1483  #define Protocol_SPC_SHIFT 8
1484  #define Protocol_SPC_MASK 0x00000700
1485  #define Protocol_SPC_SHIFT 8
1486  
1487  #define PortId_V_MASK   0xFF
1488  #define PortId_SPC_MASK 0x0F
1489  
1490  #define PROTOCOL_BITS        0x00000700
1491  #define PROTOCOL_SHIFT       8
1492  
1493  #define SHIFT_REG_64K_MASK   0xffff0000
1494  #define SHIFT_REG_BIT_SHIFT  8
1495  #define SPC_GSM_SM_OFFSET    0x400000
1496  #define SPCV_GSM_SM_OFFSET   0x0
1497  
1498  /** \brief the data structure of Get Time Stamp Response
1499   *
1500   * use to describe MPI Get TIme Stamp Response ( 64 bytes)
1501   *
1502   */
1503  typedef struct agsaGetTimeStampRsp_s {
1504    bit32             tag;
1505    bit32             timeStampLower;
1506    bit32             timeStampUpper;
1507    bit32             reserved[12];
1508  } agsaGetTimeStampRsp_t;
1509  
1510  /** \brief the data structure of SAS HW Event Ack Response
1511   *
1512   * use to describe SAS HW Event Ack Response ( 64 bytes)
1513   *
1514   */
1515  typedef struct agsaSASHwEventAckRsp_s {
1516    bit32             tag;
1517    bit32             status;
1518    bit32             reserved[13];
1519  } agsaSASHwEventAckRsp_t;
1520  
1521  /** \brief the data structure of Port Control Response
1522   *
1523   * use to describe Port Control Response ( 64 bytes)
1524   *
1525   */
1526  typedef struct agsaPortControlRsp_s {
1527    bit32             tag;
1528    bit32             portOPPortId;
1529    bit32             status;
1530    bit32             rsvdPortState;
1531    bit32             reserved[11];
1532  } agsaPortControlRsp_t;
1533  
1534  /** \brief the data structure of SMP Abort Response
1535   *
1536   * use to describe SMP Abort Response ( 64 bytes)
1537   *
1538   */
1539  typedef struct agsaSMPAbortRsp_s {
1540    bit32             tag;
1541    bit32             status;
1542    bit32             scp;
1543    bit32             reserved[12];
1544  } agsaSMPAbortRsp_t;
1545  
1546  /** \brief the data structure of Get NVMD Data Response
1547   *
1548   * use to describe MPI Get NVMD Data Response (64 bytes)
1549   *
1550   */
1551  typedef struct agsaGetNVMDataRsp_s {
1552    bit32           tag;
1553    bit32           iRTdaBnDpsAsNvm;
1554    bit32           DlenStatus;
1555    bit32           NVMData[12];
1556  } agsaGetNVMDataRsp_t;
1557  
1558  /** \brief the data structure of Set NVMD Data Response
1559   *
1560   * use to describe MPI Set NVMD Data Response (64 bytes)
1561   *
1562   */
1563  typedef struct agsaSetNVMDataRsp_s {
1564    bit32           tag;
1565    bit32           iPTdaBnDpsAsNvm;
1566    bit32           status;
1567    bit32           reserved[12];
1568  } agsaSetNVMDataRsp_t;
1569  
1570  /** \brief the data structure of Device Handle Removal
1571   *
1572   * use to describe MPI Device Handle Removel Notification (64 bytes)
1573   *
1574   */
1575  typedef struct agsaDeviceHandleRemoval_s {
1576    bit32           portId;
1577    bit32           deviceId;
1578    bit32           reserved[13];
1579  } agsaDeviceHandleRemoval_t;
1580  
1581  /** \brief the data structure of Set Device State Response
1582   *
1583   * use to describe MPI Set Device State Response (64 bytes)
1584   *
1585   */
1586  typedef struct agsaSetDeviceStateRsp_s {
1587    bit32           tag;
1588    bit32           status;
1589    bit32           deviceId;
1590    bit32           pds_nds;
1591    bit32           reserved[11];
1592  } agsaSetDeviceStateRsp_t;
1593  
1594  #define NDS_BITS 0x0F
1595  #define PDS_BITS 0xF0
1596  
1597  /** \brief the data structure of Get Device State Response
1598   *
1599   * use to describe MPI Get Device State Response (64 bytes)
1600   *
1601   */
1602  typedef struct agsaGetDeviceStateRsp_s {
1603    bit32           tag;
1604    bit32           status;
1605    bit32           deviceId;
1606    bit32           ds;
1607    bit32           reserved[11];
1608  } agsaGetDeviceStateRsp_t;
1609  
1610  /** \brief the data structure of Set Device Info Response
1611   *
1612   * use to describe MPI Set Device Info Response (64 bytes)
1613   *
1614   */
1615  typedef struct agsaSetDeviceInfoRsp_s {
1616    bit32           tag;
1617    bit32           status;
1618    bit32           deviceId;
1619    bit32           SA_SR_SI;
1620    bit32           A_R_ITNT;
1621    bit32           reserved[10];
1622  } agsaSetDeviceInfoRsp_t;
1623  
1624  /** \brief the data structure of SAS Re_Initialize Response
1625   *
1626   * use to describe MPI SAS RE_INITIALIZE Response (64 bytes)
1627   *
1628   */
1629  typedef struct agsaSasReInitializeRsp_s {
1630    bit32             tag;
1631    bit32             status;
1632    bit32             setFlags;
1633    bit32             MaxPorts;
1634    bit32             openRejReCmdData;
1635    bit32             sataHOLTMO;
1636    bit32             reserved[9];
1637  } agsaSasReInitializeRsp_t;
1638  
1639  /** \brief the data structure of SGPIO Response
1640   *
1641   * use to describe MPI serial GPIO Response IOMB (64 bytes)
1642   *
1643   */
1644  typedef struct agsaSGpioRsp_s {
1645    bit32             tag;
1646    bit32             resultFunctionFrameType;
1647    bit32             readData[OSSA_SGPIO_MAX_READ_DATA_COUNT];
1648  } agsaSGpioRsp_t;
1649  
1650  
1651  /** \brief the data structure of PCIe diag response
1652   *
1653   * use to describe PCIe diag response IOMB (64 bytes)
1654   *
1655   */
1656  
1657  typedef struct agsaPCIeDiagExecuteRsp_s {
1658    bit32    tag;               /* 1 */
1659    bit32    CmdTypeDesc;       /* 2 */
1660    bit32    Status;            /* 3 */
1661    bit32    reservedDW4;       /* 4 */
1662    bit32    reservedDW5;       /* 5 */
1663    bit32    ERR_BLKH;          /* 6 */
1664    bit32    ERR_BLKL;          /* 7 */
1665    bit32    DWord8;            /* 8 */
1666    bit32    DWord9;            /* 9 */
1667    bit32    DWord10;           /* 10 */
1668    bit32    DWord11;           /* 11 */
1669    bit32    DIF_ERR;           /* 12 */
1670    bit32    reservedDW13;      /* 13 */
1671    bit32    reservedDW14;      /* 14 */
1672    bit32    reservedDW15;      /* 15 */
1673  } agsaPCIeDiagExecuteRsp_t;
1674  
1675  /** \brief the data structure of PCI diag response
1676   *
1677   * use to describe PCI diag response IOMB  for SPC (64 bytes)
1678   *
1679   */
1680  
1681  typedef struct agsa_SPC_PCIeDiagExecuteRsp_s {
1682    bit32    tag;               /* 1 */
1683    bit32    CmdTypeDesc;       /* 2 */
1684    bit32    Status;            /* 3 */
1685    bit32    reserved[12];      /* 4 15 */
1686  } agsa_SPC_PCIeDiagExecuteRsp_t;
1687  
1688  /** \brief the data structure of GET DFE Data Response
1689   *
1690   * use to describe GET DFE Data Response for SPCv (64 bytes)
1691   *
1692   */
1693  typedef struct agsaGetDDEFDataRsp_s {
1694    bit32    tag;           /* 1 */
1695    bit32    status;        /* 2 */
1696    bit32    reserved_In_Ln;/* 3 */
1697    bit32    MCNT;          /* 4 */
1698    bit32    NBT;           /* 5 */
1699    bit32    reserved[10];  /* 6 - 15 */
1700  } agsaGetDDEFDataRsp_t;
1701  
1702  /** \brief the data structure of GET Vis Data Response
1703   *
1704   * use to describe GET Vis Data Response for SPCv (64 bytes)
1705   *
1706   */
1707  typedef struct agsaGetVHistCapRsp_s {
1708    bit32    tag;           /* 1 */
1709    bit32    status;        /* 2 */
1710    bit32    channel;       /* 3 */
1711    bit32    BistLo;        /* 4 */
1712    bit32    BistHi;        /* 5 */
1713    bit32    BytesXfered;   /* 6 */
1714    bit32    PciLo;         /* 7 */
1715    bit32    PciHi;         /* 8 */
1716    bit32    PciBytecount;  /* 9 */
1717    bit32    reserved[5];  /* 10 - 15 */
1718  } agsaGetVHistCapRsp_t;
1719  
1720  typedef struct agsaSetControllerConfigCmd_s {
1721    bit32             tag;
1722    bit32             pageCode;
1723    bit32             configPage[13];     /* Page code specific fields */
1724  } agsaSetControllerConfigCmd_t;
1725  
1726  
1727  typedef struct agsaSetControllerConfigRsp_s {
1728    bit32             tag;
1729    bit32             status;
1730    bit32             errorQualifierPage;
1731    bit32             reserved[12];
1732  } agsaSetControllerConfigRsp_t;
1733  
1734  typedef struct agsaGetControllerConfigCmd_s {
1735    bit32             tag;
1736    bit32             pageCode;
1737    bit32             INT_VEC_MSK0;
1738    bit32             INT_VEC_MSK1;
1739    bit32             reserved[11];
1740  } agsaGetControllerConfigCmd_t;
1741  
1742  typedef struct agsaGetControllerConfigRsp_s {
1743    bit32             tag;
1744    bit32             status;
1745    bit32             errorQualifier;
1746    bit32             configPage[12];     /* Page code specific fields */
1747  } agsaGetControllerConfigRsp_t;
1748  
1749  typedef struct agsaDekManagementCmd_s {
1750    bit32             tag;
1751    bit32             KEKIDX_Reserved_TBLS_DSOP;
1752    bit32             dekIndex;
1753    bit32             tableAddrLo;
1754    bit32             tableAddrHi;
1755    bit32             tableEntries;
1756    bit32             Reserved_DBF_TBL_SIZE;
1757  } agsaDekManagementCmd_t;
1758  
1759  typedef struct agsaDekManagementRsp_s {
1760    bit32             tag;
1761    bit32             status;
1762    bit32             flags;
1763    bit32             dekIndex;
1764    bit32             errorQualifier;
1765    bit32             reserved[12];
1766  } agsaDekManagementRsp_t;
1767  
1768  typedef struct agsaKekManagementCmd_s {
1769    bit32             tag;
1770    bit32             NEWKIDX_CURKIDX_KBF_Reserved_SKNV_KSOP;
1771    bit32             reserved;
1772    bit32             kekBlob[12];
1773  } agsaKekManagementCmd_t;
1774  
1775  typedef struct agsaKekManagementRsp_s {
1776    bit32             tag;
1777    bit32             status;
1778    bit32             flags;
1779    bit32             errorQualifier;
1780    bit32             reserved[12];
1781  } agsaKekManagementRsp_t;
1782  
1783  
1784  typedef struct agsaCoalSspComplCxt_s {
1785      bit32            tag;
1786      bit16            SSPTag;
1787      bit16            reserved;
1788  } agsaCoalSspComplCxt_t;
1789  
1790  /** \brief the data structure of SSP Completion Response
1791   *
1792   * use to describe MPI SSP Completion Response (1024 bytes)
1793   *
1794   */
1795  typedef struct agsaSSPCoalescedCompletionRsp_s {
1796    bit32                     coalescedCount;
1797    agsaCoalSspComplCxt_t     sspComplCxt[1]; /* Open ended array */
1798  } agsaSSPCoalescedCompletionRsp_t;
1799  
1800  
1801  /** \brief the data structure of SATA Completion Response
1802   *
1803   * use to describe MPI SATA Completion Response (1024 bytes)
1804   *
1805   */
1806  typedef struct agsaCoalStpComplCxt_s {
1807      bit32            tag;
1808      bit16            reserved;
1809  } agsaCoalStpComplCxt_t;
1810  
1811  typedef struct agsaSATACoalescedCompletionRsp_s {
1812    bit32                     coalescedCount;
1813    agsaCoalStpComplCxt_t     stpComplCxt[1]; /* Open ended array */
1814  } agsaSATACoalescedCompletionRsp_t;
1815  
1816  
1817  /** \brief the data structure of Operator Mangement Command
1818   *
1819   * use to describe OPR_MGMT  Command (128 bytes)
1820   *
1821   */
1822  typedef struct  agsaOperatorMangmentCmd_s{
1823    bit32                tag;               /* 1 */
1824    bit32                OPRIDX_AUTIDX_R_KBF_PKT_OMO;/* 2 */
1825    bit8                 IDString_Role[32];    /*  3 10 */
1826  #ifndef HAILEAH_HOST_6G_COMPITIBILITY_FLAG
1827    agsaEncryptKekBlob_t Kblob;            /* 11 22 */
1828  #endif
1829    bit32                reserved[8];      /* 23 31 */
1830  } agsaOperatorMangmentCmd_t;
1831  
1832  
1833  /*
1834   *
1835   * use to describe OPR_MGMT Response (64 bytes)
1836   *
1837   */
1838  typedef struct agsaOperatorMangmentRsp_s {
1839    bit32            tag;                    /* 1 */
1840    bit32            status;                 /* 2 */
1841    bit32            OPRIDX_AUTIDX_R_OMO;    /* 3 */
1842    bit32            errorQualifier;         /* 4 */
1843    bit32            reserved[10];           /* 5 15 */
1844  } agsaOperatorMangmenRsp_t;
1845  
1846  /** \brief the data structure of Set Operator Command
1847   *
1848   * use to describe Set Operator  Command (64 bytes)
1849   *
1850   */
1851  typedef struct  agsaSetOperatorCmd_s{
1852    bit32                tag;               /* 1 */
1853    bit32                OPRIDX_PIN_ACS;    /* 2 */
1854    bit32                cert[10];          /* 3 12 */
1855    bit32                reserved[3];       /* 13 15 */
1856  } agsaSetOperatorCmd_t;
1857  
1858  /*
1859   *
1860   * use to describe Set Operator Response (64 bytes)
1861   *
1862   */
1863  typedef struct agsaSetOperatorRsp_s {
1864    bit32            tag;                    /* 1 */
1865    bit32            status;                 /* 2 */
1866    bit32            ERR_QLFR_OPRIDX_PIN_ACS;/* 3 */
1867    bit32            reserved[12];           /* 4 15 */
1868  } agsaSetOperatorRsp_t;
1869  
1870  /** \brief the data structure of Get Operator Command
1871   *
1872   * use to describe Get Operator Command (64 bytes)
1873   *
1874   */
1875  typedef struct  agsaGetOperatorCmd_s{
1876    bit32                tag;               /* 1 */
1877    bit32                option;            /* 2 */
1878    bit32                OprBufAddrLo;      /* 3 */
1879    bit32                OprBufAddrHi;      /* 4*/
1880    bit32                reserved[11];      /*5 15*/
1881  } agsaGetOperatorCmd_t;
1882  
1883  /*
1884   *
1885   * use to describe Get Operator Response (64 bytes)
1886   *
1887   */
1888  typedef struct agsaGetOperatorRsp_s {
1889    bit32            tag;                    /* 1 */
1890    bit32            status;                 /* 2 */
1891    bit32            Num_Option;             /* 3 */
1892    bit32            IDString[8];            /* 4 11*/
1893    bit32            reserved[4];            /* 12 15*/
1894  } agsaGetOperatorRsp_t;
1895  
1896  /*
1897   *
1898   * use to start Encryption BIST (128 bytes)
1899   * 0x105
1900   */
1901  typedef struct agsaEncryptBist_s {
1902    bit32 tag;               /* 1 */
1903    bit32 r_subop;           /* 2 */
1904    bit32 testDiscption[28]; /* 3 31 */
1905  } agsaEncryptBist_t;
1906  
1907  /*
1908   *
1909   * use to describe Encryption BIST Response (64 bytes)
1910   * 0x905
1911   */
1912  
1913  typedef struct agsaEncryptBistRsp_s {
1914    bit32 tag;             /* 1 */
1915    bit32 status;          /* 2 */
1916    bit32 subop;           /* 3 */
1917    bit32 testResults[11]; /* 4 15 */
1918  } agsaEncryptBistRsp_t;
1919  
1920  /** \brief the data structure of DifEncOffload Command
1921   *
1922   * use to describe Set DifEncOffload Command (128 bytes)
1923   *
1924   */
1925  typedef struct  agsaDifEncOffloadCmd_s{
1926    bit32                tag;                      /* 1 */
1927    bit32                option;                   /* 2 */
1928    bit32                reserved[2];              /* 3-4 */
1929    bit32                Src_Data_Len;             /* 5 */
1930    bit32                Dst_Data_Len;             /* 6 */
1931    bit32                flags;                    /* 7 */
1932    bit32                UDTR01UDT01;              /* 8 */
1933    bit32                UDT2345;                  /* 9 */
1934    bit32                UDTR2345;                 /* 10 */
1935    bit32                DPLR0SecCnt_IOSeed;       /* 11 */
1936    bit32                DPL_Addr_Lo;              /* 12 */
1937    bit32                DPL_Addr_Hi;              /* 13 */
1938    bit32                KeyIndex_CMode_KTS_ENT_R; /* 14 */
1939    bit32                EPLR0SecCnt_KS_ENSS;      /* 15 */
1940    bit32                keyTag_W0;                /* 16 */
1941    bit32                keyTag_W1;                /* 17 */
1942    bit32                tweakVal_W0;              /* 18 */
1943    bit32                tweakVal_W1;              /* 19 */
1944    bit32                tweakVal_W2;              /* 20 */
1945    bit32                tweakVal_W3;              /* 21 */
1946    bit32                EPL_Addr_Lo;              /* 22 */
1947    bit32                EPL_Addr_Hi;              /* 23 */
1948    agsaSgl_t            SrcSgl;                   /* 24-27 */
1949    agsaSgl_t            DstSgl;                   /* 28-31 */
1950  } agsaDifEncOffloadCmd_t;
1951  
1952  /*
1953   *
1954   * use to describe DIF/Encryption Offload Response (32 bytes)
1955   * 0x910
1956   */
1957  typedef struct agsaDifEncOffloadRspV_s {
1958    bit32                 tag;
1959    bit32                 status;
1960    bit32                 ExpectedCRCUDT01;
1961    bit32                 ExpectedUDT2345;
1962    bit32                 ActualCRCUDT01;
1963    bit32                 ActualUDT2345;
1964    bit32                 DIFErr;
1965    bit32                 ErrBoffset;
1966  } agsaDifEncOffloadRspV_t;
1967  
1968  #endif  /*__SAMPIDEFS_H__ */
1969