xref: /freebsd/sys/dev/pms/RefTisa/sallsdk/spc/spcdefs.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
1*4e1bc9a0SAchim Leubner /*******************************************************************************
2*4e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
3*4e1bc9a0SAchim Leubner *
4*4e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided
5*4e1bc9a0SAchim Leubner *that the following conditions are met:
6*4e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
7*4e1bc9a0SAchim Leubner *following disclaimer.
8*4e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice,
9*4e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10*4e1bc9a0SAchim Leubner *with the distribution.
11*4e1bc9a0SAchim Leubner *
12*4e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13*4e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14*4e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15*4e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16*4e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17*4e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18*4e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19*4e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
20*4e1bc9a0SAchim Leubner *
21*4e1bc9a0SAchim Leubner *
22*4e1bc9a0SAchim Leubner ********************************************************************************/
23*4e1bc9a0SAchim Leubner /*******************************************************************************/
24*4e1bc9a0SAchim Leubner /*! \file spcdefs.h
25*4e1bc9a0SAchim Leubner  *  \brief The file defines the MPI Application Programming Interface (API)
26*4e1bc9a0SAchim Leubner  *
27*4e1bc9a0SAchim Leubner  * The file defines the MPI Application Programming Interfacde (API)
28*4e1bc9a0SAchim Leubner  *
29*4e1bc9a0SAchim Leubner  */
30*4e1bc9a0SAchim Leubner /*******************************************************************************/
31*4e1bc9a0SAchim Leubner #ifndef __SPCDEFS_H__
32*4e1bc9a0SAchim Leubner #define __SPCDEFS_H__
33*4e1bc9a0SAchim Leubner 
34*4e1bc9a0SAchim Leubner /*******************************************************************************/
35*4e1bc9a0SAchim Leubner /*******************************************************************************/
36*4e1bc9a0SAchim Leubner /* CONSTANTS                                                                    */
37*4e1bc9a0SAchim Leubner /*******************************************************************************/
38*4e1bc9a0SAchim Leubner /*******************************************************************************/
39*4e1bc9a0SAchim Leubner /*******************************************************************************/
40*4e1bc9a0SAchim Leubner /* MSGU CONFIGURATION TABLE                                                    */
41*4e1bc9a0SAchim Leubner /*******************************************************************************/
42*4e1bc9a0SAchim Leubner #define SPC_MSGU_CFG_TABLE_UPDATE               0x001   /* Inbound doorbell bit0 */
43*4e1bc9a0SAchim Leubner #define SPC_MSGU_CFG_TABLE_RESET                0x002   /* Inbound doorbell bit1 */
44*4e1bc9a0SAchim Leubner #define SPC_MSGU_CFG_TABLE_FREEZE               0x004   /* Inbound doorbell bit2 */
45*4e1bc9a0SAchim Leubner #define SPC_MSGU_CFG_TABLE_UNFREEZE             0x008   /* Inbound doorbell bit4 */
46*4e1bc9a0SAchim Leubner #define SPCV_MSGU_CFG_TABLE_TRANSFER_DEBUG_INFO 0x080   /* Inbound doorbell bit7 SPCV */
47*4e1bc9a0SAchim Leubner #define SPCV_MSGU_HALT_CPUS                     0x100   /* Inbound doorbell bit8 SPCV */
48*4e1bc9a0SAchim Leubner 
49*4e1bc9a0SAchim Leubner /***** Notes *****/
50*4e1bc9a0SAchim Leubner /* The firmware side is using Little Endian (MIPs). */
51*4e1bc9a0SAchim Leubner /* So anything sending or receiving from FW must be in Little Endian */
52*4e1bc9a0SAchim Leubner /*******************************************************************************/
53*4e1bc9a0SAchim Leubner /** \struct mpiMsgHeader_s
54*4e1bc9a0SAchim Leubner  *  \brief MPI message header
55*4e1bc9a0SAchim Leubner  *
56*4e1bc9a0SAchim Leubner  * The mpiMsgHeader_s defines the fields in the header of every message
57*4e1bc9a0SAchim Leubner  */
58*4e1bc9a0SAchim Leubner /*******************************************************************************/
59*4e1bc9a0SAchim Leubner /* This structire defines the fields in the header of every message */
60*4e1bc9a0SAchim Leubner 
61*4e1bc9a0SAchim Leubner 
62*4e1bc9a0SAchim Leubner struct mpiMsgHeader_s
63*4e1bc9a0SAchim Leubner {
64*4e1bc9a0SAchim Leubner   bit32 Header;             /* Bits [11:0]  - Message operation code */
65*4e1bc9a0SAchim Leubner                             /* Bits [15:12] - Message Category */
66*4e1bc9a0SAchim Leubner                             /* Bits [21:16] - Outboundqueue ID for the operation completion message */
67*4e1bc9a0SAchim Leubner                             /* Bits [23:22] - Reserved */
68*4e1bc9a0SAchim Leubner                             /* Bits [28:24] - Buffer Count, indicates how many buffer are allocated for the massage */
69*4e1bc9a0SAchim Leubner                             /* Bits [30:29] - Reserved */
70*4e1bc9a0SAchim Leubner                             /* Bits [31]    - Message Valid bit */
71*4e1bc9a0SAchim Leubner };
72*4e1bc9a0SAchim Leubner 
73*4e1bc9a0SAchim Leubner typedef struct mpiMsgHeader_s  mpiMsgHeader_t;
74*4e1bc9a0SAchim Leubner 
75*4e1bc9a0SAchim Leubner #define V_BIT          0x1
76*4e1bc9a0SAchim Leubner 
77*4e1bc9a0SAchim Leubner #define V_MASK         0x1
78*4e1bc9a0SAchim Leubner #define BC_MASK        0x1F
79*4e1bc9a0SAchim Leubner #define OBID_MASK      0x3F
80*4e1bc9a0SAchim Leubner #define CAT_MASK       0x0F
81*4e1bc9a0SAchim Leubner #define OPCODE_MASK    0xFFF
82*4e1bc9a0SAchim Leubner #define HEADER_V_MASK  0x80000000
83*4e1bc9a0SAchim Leubner #define HEADER_BC_MASK 0x1f000000
84*4e1bc9a0SAchim Leubner 
85*4e1bc9a0SAchim Leubner #ifndef SPC_CONFIG
86*4e1bc9a0SAchim Leubner /*******************************************************************************/
87*4e1bc9a0SAchim Leubner /** \struct spc_ConfigMainDescriptor_s
88*4e1bc9a0SAchim Leubner  *  \brief This structure is used to configure main part of Configuration Table
89*4e1bc9a0SAchim Leubner  *
90*4e1bc9a0SAchim Leubner  * This structure specifies all required attributes to configuration table
91*4e1bc9a0SAchim Leubner  */
92*4e1bc9a0SAchim Leubner /*******************************************************************************/
93*4e1bc9a0SAchim Leubner /* new MPI configuration main table */
94*4e1bc9a0SAchim Leubner struct  spc_configMainDescriptor_s
95*4e1bc9a0SAchim Leubner {
96*4e1bc9a0SAchim Leubner   bit8  Signature[4];                      /**< DW0 signature - Indicate coherent table */
97*4e1bc9a0SAchim Leubner   bit32 InterfaceRev;                      /**< DW1 Revsion of Interface */
98*4e1bc9a0SAchim Leubner   bit32 FWRevision;                        /**< DW2 Revsion of FW */
99*4e1bc9a0SAchim Leubner   bit32 MaxOutstandingIO;                  /**< DW3 Max outstanding IO */
100*4e1bc9a0SAchim Leubner   bit32 MDevMaxSGL;                        /**< DW4 Maximum SGL elements  & Max Devices */
101*4e1bc9a0SAchim Leubner         /* bit0-15  Maximum SGL */
102*4e1bc9a0SAchim Leubner         /* bit16-31 Maximum Devices */
103*4e1bc9a0SAchim Leubner   bit32 ContrlCapFlag;                     /**< DW5 Controller Capability */
104*4e1bc9a0SAchim Leubner         /* bit0-7   Max number of inbound queue */
105*4e1bc9a0SAchim Leubner         /* bit8-15  Max number of outbound queue */
106*4e1bc9a0SAchim Leubner         /* bit16    high priority of inbound queue is supported */
107*4e1bc9a0SAchim Leubner         /* bit17    reserved */
108*4e1bc9a0SAchim Leubner         /* bit18    interrupt coalescing is supported, SPCV-reserved */
109*4e1bc9a0SAchim Leubner         /* bit19-24 Maximum number of valid phys */
110*4e1bc9a0SAchim Leubner         /* bit25-31 SAS Revision SPecification */
111*4e1bc9a0SAchim Leubner   bit32 GSTOffset;                         /**< DW6 General Status Table */
112*4e1bc9a0SAchim Leubner   bit32 inboundQueueOffset;                /**< DW7 inbound configuration table offset */
113*4e1bc9a0SAchim Leubner         /* bit23-0  inbound queue table offset */
114*4e1bc9a0SAchim Leubner         /* bit31-24 entry size, new in SPCV */
115*4e1bc9a0SAchim Leubner   bit32 outboundQueueOffset;               /**< DW8 outbound configuration table offset */
116*4e1bc9a0SAchim Leubner         /* bit23-0  outbound queue table offset */
117*4e1bc9a0SAchim Leubner         /* bit31-24 entry size, new in SPCV */
118*4e1bc9a0SAchim Leubner   bit32 iQNPPD_HPPD_GEvent;                /**< DW9 inbound Queue Process depth and General Event */
119*4e1bc9a0SAchim Leubner         /* bit0-7   inbound normal priority process depth */
120*4e1bc9a0SAchim Leubner         /* bit8-15  inbound high priority process depth */
121*4e1bc9a0SAchim Leubner         /* bit16-23 OQ number to receive GENERAL_EVENT Notification */
122*4e1bc9a0SAchim Leubner         /* bit24-31 OQ number to receive DEVICE_HANDLE_REMOVAL Notification */
123*4e1bc9a0SAchim Leubner   bit32 outboundHWEventPID0_3;             /**< DWA outbound HW event for PortId 0 to 3, SPCV-reserved */
124*4e1bc9a0SAchim Leubner         /* bit0-7   outbound queue number of SAS_HW event for PhyId 0 */
125*4e1bc9a0SAchim Leubner         /* bit8-15  outbound queue number of SAS_HW event for PhyId 1 */
126*4e1bc9a0SAchim Leubner         /* bit16-23 outbound queue number of SAS_HW event for PhyId 2 */
127*4e1bc9a0SAchim Leubner         /* bit24-31 outbound queue number of SAS_HW event for PhyId 3 */
128*4e1bc9a0SAchim Leubner   bit32 outboundHWEventPID4_7;             /**< DWB outbound HW event for PortId 4 to 7, SPCV-reserved */
129*4e1bc9a0SAchim Leubner         /* bit0-7   outbound queue number of SAS_HW event for PhyId 4 */
130*4e1bc9a0SAchim Leubner         /* bit8-15  outbound queue number of SAS_HW event for PhyId 5 */
131*4e1bc9a0SAchim Leubner         /* bit16-23 outbound queue number of SAS_HW event for PhyId 6 */
132*4e1bc9a0SAchim Leubner         /* bit24-31 outbound queue number of SAS_HW event for PhyId 7 */
133*4e1bc9a0SAchim Leubner   bit32 outboundNCQEventPID0_3;            /**< DWC outbound NCQ event for PortId 0 to 3, SPCV-reserved */
134*4e1bc9a0SAchim Leubner         /* bit0-7   outbound queue number of SATA_NCQ event for PhyId 0 */
135*4e1bc9a0SAchim Leubner         /* bit8-15  outbound queue number of SATA_NCQ event for PhyId 1 */
136*4e1bc9a0SAchim Leubner         /* bit16-23 outbound queue number of SATA_NCQ event for PhyId 2 */
137*4e1bc9a0SAchim Leubner         /* bit24-31 outbound queue number of SATA_NCQ event for PortId 3 */
138*4e1bc9a0SAchim Leubner   bit32 outboundNCQEventPID4_7;            /**< DWD outbound NCQ event for PortId 4 to 7, SPCV-reserved*/
139*4e1bc9a0SAchim Leubner         /* bit0-7   outbound queue number of SATA_NCQ event for PhyId 4 */
140*4e1bc9a0SAchim Leubner         /* bit8-15  outbound queue number of SATA_NCQ event for PhyId 5 */
141*4e1bc9a0SAchim Leubner         /* bit16-23 outbound queue number of SATA_NCQ event for PhyId 6 */
142*4e1bc9a0SAchim Leubner         /* bit24-31 outbound queue number of SATA_NCQ event for PhyId 7 */
143*4e1bc9a0SAchim Leubner   bit32 outboundTargetITNexusEventPID0_3;  /**< DWE outbound target ITNexus Event for PortId 0 to 3, SPCV-reserved */
144*4e1bc9a0SAchim Leubner         /* bit0-7   outbound queue number of ITNexus event for PhyId 0 */
145*4e1bc9a0SAchim Leubner         /* bit8-15  outbound queue number of ITNexus event for PhyId 1 */
146*4e1bc9a0SAchim Leubner         /* bit16-23 outbound queue number of ITNexus event for PhyId 2 */
147*4e1bc9a0SAchim Leubner         /* bit24-31 outbound queue number of ITNexus event for PhyId 3 */
148*4e1bc9a0SAchim Leubner   bit32 outboundTargetITNexusEventPID4_7;  /**< DWF outbound target ITNexus Event for PortId 4 to 7, SPCV-reserved */
149*4e1bc9a0SAchim Leubner         /* bit0-7   outbound queue number of ITNexus event for PhyId 4 */
150*4e1bc9a0SAchim Leubner         /* bit8-15  outbound queue number of ITNexus event for PhyId 5 */
151*4e1bc9a0SAchim Leubner         /* bit16-23 outbound queue number of ITNexus event for PhyId 6 */
152*4e1bc9a0SAchim Leubner         /* bit24-31 outbound queue number of ITNexus event for PhyId 7 */
153*4e1bc9a0SAchim Leubner   bit32 outboundTargetSSPEventPID0_3;      /**< DW10 outbound target SSP event for PordId 0 to 3, SPCV-reserved */
154*4e1bc9a0SAchim Leubner         /* bit0-7   outbound queue number of SSP event for PhyId 0 */
155*4e1bc9a0SAchim Leubner         /* bit8-15  outbound queue number of SSP event for PhyId 1 */
156*4e1bc9a0SAchim Leubner         /* bit16-23 outbound queue number of SSP event for PhyId 2 */
157*4e1bc9a0SAchim Leubner         /* bit24-31 outbound queue number of SSP event for PhyId 3 */
158*4e1bc9a0SAchim Leubner   bit32 outboundTargetSSPEventPID4_7;      /**< DW11 outbound target SSP event for PordId 4 to 7, SPCV-reserved */
159*4e1bc9a0SAchim Leubner         /* bit0-7   outbound queue number of SSP event for PhyId 4 */
160*4e1bc9a0SAchim Leubner         /* bit8-15  outbound queue number of SSP event for PhyId 5 */
161*4e1bc9a0SAchim Leubner         /* bit16-23 outbound queue number of SSP event for PhyId 6 */
162*4e1bc9a0SAchim Leubner         /* bit24-31 outbound queue number of SSP event for PhyId 7 */
163*4e1bc9a0SAchim Leubner   bit32 ioAbortDelay;                      /**< DW12 IO Abort Delay (bit15:0) MPI_TABLE_CHANGE*/
164*4e1bc9a0SAchim Leubner   bit32 custset;                           /**< DW13 custset */
165*4e1bc9a0SAchim Leubner   bit32 upperEventLogAddress;              /**< DW14 Upper physical MSGU Event log address */
166*4e1bc9a0SAchim Leubner   bit32 lowerEventLogAddress;              /**< DW15 Lower physical MSGU Event log address */
167*4e1bc9a0SAchim Leubner   bit32 eventLogSize;                      /**< DW16 Size of MSGU Event log, 0 means log disable */
168*4e1bc9a0SAchim Leubner   bit32 eventLogOption;                    /**< DW17 Option of MSGU Event log */
169*4e1bc9a0SAchim Leubner         /* bit3-0 log severity, 0x0 Disable Logging */
170*4e1bc9a0SAchim Leubner         /*                      0x1 Critical Error */
171*4e1bc9a0SAchim Leubner         /*                      0x2 Minor Error    */
172*4e1bc9a0SAchim Leubner         /*                      0x3 Warning        */
173*4e1bc9a0SAchim Leubner         /*                      0x4 Information    */
174*4e1bc9a0SAchim Leubner         /*                      0x5 Debugging      */
175*4e1bc9a0SAchim Leubner         /*                      0x6 - 0xF Reserved */
176*4e1bc9a0SAchim Leubner   bit32 upperIOPeventLogAddress;           /**< DW18 Upper physical IOP Event log address */
177*4e1bc9a0SAchim Leubner   bit32 lowerIOPeventLogAddress;           /**< DW19 Lower physical IOP Event log address */
178*4e1bc9a0SAchim Leubner   bit32 IOPeventLogSize;                   /**< DW1A Size of IOP Event log, 0 means log disable */
179*4e1bc9a0SAchim Leubner   bit32 IOPeventLogOption;                 /**< DW1B Option of IOP Event log */
180*4e1bc9a0SAchim Leubner         /* bit3-0 log severity, 0x0 Critical Error */
181*4e1bc9a0SAchim Leubner         /*                      0x1 Minor Error    */
182*4e1bc9a0SAchim Leubner         /*                      0x2 Warning        */
183*4e1bc9a0SAchim Leubner         /*                      0x3 Information    */
184*4e1bc9a0SAchim Leubner         /*                      0x4 Unknown        */
185*4e1bc9a0SAchim Leubner         /*                      0x5 - 0xF Reserved */
186*4e1bc9a0SAchim Leubner   bit32 FatalErrorInterrupt;               /**< DW1C Fatal Error Interrupt enable and vector */
187*4e1bc9a0SAchim Leubner         /* bit0     Fatal Error Interrupt Enable   */
188*4e1bc9a0SAchim Leubner         /* bit1     PI/CI 64bit address            */
189*4e1bc9a0SAchim Leubner         /* bit2     SGPIO IOMB support */
190*4e1bc9a0SAchim Leubner         /* bit6-2   Reserved                       */
191*4e1bc9a0SAchim Leubner         /* bit7     OQ NP/HPriority Path enable    */
192*4e1bc9a0SAchim Leubner         /* bit15-8  Fatal Error Interrupt Vector   */
193*4e1bc9a0SAchim Leubner         /* bit16    Enable IQ/OQ 64                */
194*4e1bc9a0SAchim Leubner         /* bit17    Interrupt Reassertion Enable   */
195*4e1bc9a0SAchim Leubner         /* bit18    Interrupt Reassertion Delay in ms          */
196*4e1bc9a0SAchim Leubner         /* bit31-19 Interrupt Reassertion delay, 0-default 1ms */
197*4e1bc9a0SAchim Leubner   bit32 FatalErrorDumpOffset0;             /**< DW1D FERDOMS-GU Fatal Error Register Dump Offset for MSGU */
198*4e1bc9a0SAchim Leubner   bit32 FatalErrorDumpLength0;             /**< DW1E FERDLMS-GU Fatal Error Register Dump Length for MSGU */
199*4e1bc9a0SAchim Leubner   bit32 FatalErrorDumpOffset1;             /**< DW1F FERDO-SSTRUCPCS Fatal Error Register Dump Offset for IOP */
200*4e1bc9a0SAchim Leubner   bit32 FatalErrorDumpLength1;             /**< DW20 FERDLSTRUCTTPCS  Fatal Error Register Dump Length for IOP */
201*4e1bc9a0SAchim Leubner   bit32 HDAModeFlags;                      /**< DW21 HDA Mode Flags, SPCV-reserved */
202*4e1bc9a0SAchim Leubner   bit32 analogSetupTblOffset;              /**< DW22 SPASTO Phy Calibration Table offset */
203*4e1bc9a0SAchim Leubner         /* bit23-0  phy calib table offset */
204*4e1bc9a0SAchim Leubner         /* bit31-24 entry size */
205*4e1bc9a0SAchim Leubner   bit32 InterruptVecTblOffset;             /**< DW23 Interrupt Vector Table MPI_TABLE_CHANG */
206*4e1bc9a0SAchim Leubner         /* bit23-0  interrupt vector table offset */
207*4e1bc9a0SAchim Leubner         /* bit31-24 entry size */
208*4e1bc9a0SAchim Leubner   bit32 phyAttributeTblOffset;             /**< DW24 SAS Phy Attribute Table Offset MPI_TABLE_CHANG*/
209*4e1bc9a0SAchim Leubner         /* bit23-0  phy attribute table offset */
210*4e1bc9a0SAchim Leubner         /* bit31-24 entry size */
211*4e1bc9a0SAchim Leubner   bit32 portRecoveryResetTimer;            /* Offset 0x25 [31:16] Port recovery timer default that is 0
212*4e1bc9a0SAchim Leubner                                               used for all SAS ports. Granularity of this timer is 100ms. The host can
213*4e1bc9a0SAchim Leubner                                               change the individual port recovery timer by using the PORT_CONTROL
214*4e1bc9a0SAchim Leubner                                               [15:0] Port reset timer default that is used 3 (i.e 300ms) for all
215*4e1bc9a0SAchim Leubner                                               SAS ports. Granularity of this timer is 100ms. Host can change the
216*4e1bc9a0SAchim Leubner                                               individual port recovery timer by using PORT_CONTROL Command */
217*4e1bc9a0SAchim Leubner   bit32 interruptReassertionDelay;         /* Offset 0x26 [23:0] Remind host of outbound completion 0 disabled 100usec per increment */
218*4e1bc9a0SAchim Leubner 
219*4e1bc9a0SAchim Leubner   bit32     ilaRevision;                   /* Offset 0x27 */
220*4e1bc9a0SAchim Leubner };
221*4e1bc9a0SAchim Leubner 
222*4e1bc9a0SAchim Leubner /* main configuration offset - byte offset */
223*4e1bc9a0SAchim Leubner #define MAIN_SIGNATURE_OFFSET          0x00    /* DWORD 0x00 (R) */
224*4e1bc9a0SAchim Leubner #define MAIN_INTERFACE_REVISION        0x04    /* DWORD 0x01 (R) */
225*4e1bc9a0SAchim Leubner #define MAIN_FW_REVISION               0x08    /* DWORD 0x02 (R) */
226*4e1bc9a0SAchim Leubner #define MAIN_MAX_OUTSTANDING_IO_OFFSET 0x0C    /* DWORD 0x03 (R) */
227*4e1bc9a0SAchim Leubner #define MAIN_MAX_SGL_OFFSET            0x10    /* DWORD 0x04 (R) */
228*4e1bc9a0SAchim Leubner #define MAIN_CNTRL_CAP_OFFSET          0x14    /* DWORD 0x05 (R) */
229*4e1bc9a0SAchim Leubner #define MAIN_GST_OFFSET                0x18    /* DWORD 0x06 (R) */
230*4e1bc9a0SAchim Leubner #define MAIN_IBQ_OFFSET                0x1C    /* DWORD 0x07 (R) */
231*4e1bc9a0SAchim Leubner #define MAIN_OBQ_OFFSET                0x20    /* DWORD 0x08 (R) */
232*4e1bc9a0SAchim Leubner #define MAIN_IQNPPD_HPPD_OFFSET        0x24    /* DWORD 0x09 (W) */
233*4e1bc9a0SAchim Leubner #define MAIN_OB_HW_EVENT_PID03_OFFSET  0x28    /* DWORD 0x0A (W) */ /* reserved for SPCV */
234*4e1bc9a0SAchim Leubner #define MAIN_OB_HW_EVENT_PID47_OFFSET  0x2C    /* DWORD 0x0B (W) */ /* reserved for SPCV */
235*4e1bc9a0SAchim Leubner #define MAIN_OB_NCQ_EVENT_PID03_OFFSET 0x30    /* DWORD 0x0C (W) */ /* reserved for SPCV */
236*4e1bc9a0SAchim Leubner #define MAIN_OB_NCQ_EVENT_PID47_OFFSET 0x34    /* DWORD 0x0D (W) */ /* reserved for SPCV */
237*4e1bc9a0SAchim Leubner #define MAIN_TITNX_EVENT_PID03_OFFSET  0x38    /* DWORD 0x0E (W) */ /* reserved for SPCV */
238*4e1bc9a0SAchim Leubner #define MAIN_TITNX_EVENT_PID47_OFFSET  0x3C    /* DWORD 0x0F (W) */ /* reserved for SPCV */
239*4e1bc9a0SAchim Leubner #define MAIN_OB_SSP_EVENT_PID03_OFFSET 0x40    /* DWORD 0x10 (W) */ /* reserved for SPCV */
240*4e1bc9a0SAchim Leubner #define MAIN_OB_SSP_EVENT_PID47_OFFSET 0x44    /* DWORD 0x11 (W) */ /* reserved for SPCV */
241*4e1bc9a0SAchim Leubner #define MAIN_IO_ABORT_DELAY            0x48    /* DWORD 0x12 (W) */ /* reserved for SPCV */
242*4e1bc9a0SAchim Leubner #define MAIN_CUSTOMER_SETTING          0x4C    /* DWORD 0x13 (W) */ /* reserved for SPCV */
243*4e1bc9a0SAchim Leubner #define MAIN_EVENT_LOG_ADDR_HI         0x50    /* DWORD 0x14 (W) */
244*4e1bc9a0SAchim Leubner #define MAIN_EVENT_LOG_ADDR_LO         0x54    /* DWORD 0x15 (W) */
245*4e1bc9a0SAchim Leubner #define MAIN_EVENT_LOG_BUFF_SIZE       0x58    /* DWORD 0x16 (W) */
246*4e1bc9a0SAchim Leubner #define MAIN_EVENT_LOG_OPTION          0x5C    /* DWORD 0x17 (W) */
247*4e1bc9a0SAchim Leubner #define MAIN_IOP_EVENT_LOG_ADDR_HI     0x60    /* DWORD 0x18 (W) */
248*4e1bc9a0SAchim Leubner #define MAIN_IOP_EVENT_LOG_ADDR_LO     0x64    /* DWORD 0x19 (W) */
249*4e1bc9a0SAchim Leubner #define MAIN_IOP_EVENT_LOG_BUFF_SIZE   0x68    /* DWORD 0x1A (W) */
250*4e1bc9a0SAchim Leubner #define MAIN_IOP_EVENT_LOG_OPTION      0x6C    /* DWORD 0x1B (W) */
251*4e1bc9a0SAchim Leubner #define MAIN_FATAL_ERROR_INTERRUPT     0x70    /* DWORD 0x1C (W) */
252*4e1bc9a0SAchim Leubner #define MAIN_FATAL_ERROR_RDUMP0_OFFSET 0x74    /* DWORD 0x1D (R) */
253*4e1bc9a0SAchim Leubner #define MAIN_FATAL_ERROR_RDUMP0_LENGTH 0x78    /* DWORD 0x1E (R) */
254*4e1bc9a0SAchim Leubner #define MAIN_FATAL_ERROR_RDUMP1_OFFSET 0x7C    /* DWORD 0x1F (R) */
255*4e1bc9a0SAchim Leubner #define MAIN_FATAL_ERROR_RDUMP1_LENGTH 0x80    /* DWORD 0x20 (R) */
256*4e1bc9a0SAchim Leubner #define MAIN_HDA_FLAGS_OFFSET          0x84    /* DWORD 0x21 (R) */ /* reserved for SPCV */
257*4e1bc9a0SAchim Leubner #define MAIN_ANALOG_SETUP_OFFSET       0x88    /* DWORD 0x22 (R) */
258*4e1bc9a0SAchim Leubner #define MAIN_INT_VEC_TABLE_OFFSET      0x8C    /* DWORD 0x23 (W) */ /*  for SPCV */
259*4e1bc9a0SAchim Leubner #define MAIN_PHY_ATTRIBUTE_OFFSET      0x90    /* DWORD 0x24 (W) */ /*  for SPCV */
260*4e1bc9a0SAchim Leubner #define MAIN_PRECTD_PRESETD            0x94    /* DWORD 0x25 (W) */ /*  for SPCV */
261*4e1bc9a0SAchim Leubner #define MAIN_IRAD_RESERVED             0x98    /* DWORD 0x26 (W) */ /*  for SPCV */
262*4e1bc9a0SAchim Leubner #define MAIN_MOQFOT_MOQFOES            0x9C    /* DWORD 0x27 (W) */ /*  for SPCV */
263*4e1bc9a0SAchim Leubner #define MAIN_MERRDCTO_MERRDCES         0xA0    /* DWORD 0x28 (W) */ /*  for SPCV */
264*4e1bc9a0SAchim Leubner #define MAIN_ILAT_ILAV_ILASMRN_ILAMRN_ILAMJN  0xA4 /* DWORD 0x29 (W) */ /*  for SPCV */
265*4e1bc9a0SAchim Leubner #define MAIN_INACTIVE_ILA_REVSION      0xA8    /* DWORD 0x2A (W) */ /*  for SPCV V 3.02 */
266*4e1bc9a0SAchim Leubner #define MAIN_SEEPROM_REVSION           0xAC    /* DWORD 0x2B (W) */ /*  for SPCV V 3.02 */
267*4e1bc9a0SAchim Leubner #define MAIN_UNKNOWN1                  0xB0    /* DWORD 0x2C (W) */ /*  for SPCV V 3.03 */
268*4e1bc9a0SAchim Leubner #define MAIN_UNKNOWN2                  0xB4    /* DWORD 0x2D (W) */ /*  for SPCV V 3.03 */
269*4e1bc9a0SAchim Leubner #define MAIN_UNKNOWN3                  0xB8    /* DWORD 0x2E (W) */ /*  for SPCV V 3.03 */
270*4e1bc9a0SAchim Leubner #define MAIN_XCBI_REF_TAG_PAT          0xBC    /* DWORD 0x2F (W) */ /*  for SPCV V 3.03 */
271*4e1bc9a0SAchim Leubner #define MAIN_AWT_MIDRANGE              0xC0    /* DWORD 0x30 (W) */ /*  for SPCV V 3.03 */
272*4e1bc9a0SAchim Leubner 
273*4e1bc9a0SAchim Leubner 
274*4e1bc9a0SAchim Leubner typedef struct spc_configMainDescriptor_s spc_configMainDescriptor_t;
275*4e1bc9a0SAchim Leubner #define SPC_CONFIG
276*4e1bc9a0SAchim Leubner #endif
277*4e1bc9a0SAchim Leubner 
278*4e1bc9a0SAchim Leubner /* bit to disable end to end crc checking ins SPCv */
279*4e1bc9a0SAchim Leubner #define MAIN_IO_ABORT_DELAY_END_TO_END_CRC_DISABLE 0x00010000
280*4e1bc9a0SAchim Leubner 
281*4e1bc9a0SAchim Leubner /* bit mask for field Controller Capability in main part */
282*4e1bc9a0SAchim Leubner #define MAIN_MAX_IB_MASK               0x000000ff  /* bit7-0 */
283*4e1bc9a0SAchim Leubner #define MAIN_MAX_OB_MASK               0x0000ff00  /* bit15-8 */
284*4e1bc9a0SAchim Leubner #define MAIN_PHY_COUNT_MASK            0x01f80000  /* bit24-19 */
285*4e1bc9a0SAchim Leubner #define MAIN_QSUPPORT_BITS             0x0007ffff
286*4e1bc9a0SAchim Leubner #define MAIN_SAS_SUPPORT_BITS          0xfe000000
287*4e1bc9a0SAchim Leubner 
288*4e1bc9a0SAchim Leubner /* bit mask for field max sgl in main part */
289*4e1bc9a0SAchim Leubner #define MAIN_MAX_SGL_BITS              0xFFFF
290*4e1bc9a0SAchim Leubner #define MAIN_MAX_DEV_BITS              0xFFFF0000
291*4e1bc9a0SAchim Leubner 
292*4e1bc9a0SAchim Leubner /* bit mask for HDA flags field */
293*4e1bc9a0SAchim Leubner #define MAIN_HDA_FLAG_BITS             0x000000FF
294*4e1bc9a0SAchim Leubner 
295*4e1bc9a0SAchim Leubner #define FATAL_ERROR_INT_BITS           0xFF
296*4e1bc9a0SAchim Leubner #define INT_REASRT_ENABLE              0x00020000
297*4e1bc9a0SAchim Leubner #define INT_REASRT_MS_ENABLE           0x00040000
298*4e1bc9a0SAchim Leubner #define INT_REASRT_DELAY_BITS          0xFFF80000
299*4e1bc9a0SAchim Leubner 
300*4e1bc9a0SAchim Leubner #define MAX_VALID_PHYS                 8
301*4e1bc9a0SAchim Leubner #define IB_QUEUE_CFGSIZE               64
302*4e1bc9a0SAchim Leubner #define OB_QUEUE_CFGSIZE               64
303*4e1bc9a0SAchim Leubner 
304*4e1bc9a0SAchim Leubner /* inbound queue configuration offset - byte offset */
305*4e1bc9a0SAchim Leubner #define IB_PROPERITY_OFFSET            0x00
306*4e1bc9a0SAchim Leubner #define IB_BASE_ADDR_HI_OFFSET         0x04
307*4e1bc9a0SAchim Leubner #define IB_BASE_ADDR_LO_OFFSET         0x08
308*4e1bc9a0SAchim Leubner #define IB_CI_BASE_ADDR_HI_OFFSET      0x0C
309*4e1bc9a0SAchim Leubner #define IB_CI_BASE_ADDR_LO_OFFSET      0x10
310*4e1bc9a0SAchim Leubner #define IB_PIPCI_BAR                   0x14
311*4e1bc9a0SAchim Leubner #define IB_PIPCI_BAR_OFFSET            0x18
312*4e1bc9a0SAchim Leubner #define IB_RESERVED_OFFSET             0x1C
313*4e1bc9a0SAchim Leubner 
314*4e1bc9a0SAchim Leubner /* outbound queue configuration offset - byte offset */
315*4e1bc9a0SAchim Leubner #define OB_PROPERITY_OFFSET            0x00
316*4e1bc9a0SAchim Leubner #define OB_BASE_ADDR_HI_OFFSET         0x04
317*4e1bc9a0SAchim Leubner #define OB_BASE_ADDR_LO_OFFSET         0x08
318*4e1bc9a0SAchim Leubner #define OB_PI_BASE_ADDR_HI_OFFSET      0x0C
319*4e1bc9a0SAchim Leubner #define OB_PI_BASE_ADDR_LO_OFFSET      0x10
320*4e1bc9a0SAchim Leubner #define OB_CIPCI_BAR                   0x14
321*4e1bc9a0SAchim Leubner #define OB_CIPCI_BAR_OFFSET            0x18
322*4e1bc9a0SAchim Leubner #define OB_INTERRUPT_COALES_OFFSET     0x1C
323*4e1bc9a0SAchim Leubner #define OB_DYNAMIC_COALES_OFFSET       0x20
324*4e1bc9a0SAchim Leubner 
325*4e1bc9a0SAchim Leubner #define OB_PROPERTY_INT_ENABLE         0x40000000
326*4e1bc9a0SAchim Leubner 
327*4e1bc9a0SAchim Leubner /* General Status Table offset - byte offset */
328*4e1bc9a0SAchim Leubner #define GST_GSTLEN_MPIS_OFFSET         0x00
329*4e1bc9a0SAchim Leubner #define GST_IQ_FREEZE_STATE0_OFFSET    0x04
330*4e1bc9a0SAchim Leubner #define GST_IQ_FREEZE_STATE1_OFFSET    0x08
331*4e1bc9a0SAchim Leubner #define GST_MSGUTCNT_OFFSET            0x0C
332*4e1bc9a0SAchim Leubner #define GST_IOPTCNT_OFFSET             0x10
333*4e1bc9a0SAchim Leubner #define GST_IOP1TCNT_OFFSET            0x14
334*4e1bc9a0SAchim Leubner #define GST_PHYSTATE_OFFSET            0x18  /* SPCV reserved */
335*4e1bc9a0SAchim Leubner #define GST_PHYSTATE0_OFFSET           0x18  /* SPCV reserved */
336*4e1bc9a0SAchim Leubner #define GST_PHYSTATE1_OFFSET           0x1C  /* SPCV reserved */
337*4e1bc9a0SAchim Leubner #define GST_PHYSTATE2_OFFSET           0x20  /* SPCV reserved */
338*4e1bc9a0SAchim Leubner #define GST_PHYSTATE3_OFFSET           0x24  /* SPCV reserved */
339*4e1bc9a0SAchim Leubner #define GST_PHYSTATE4_OFFSET           0x28  /* SPCV reserved */
340*4e1bc9a0SAchim Leubner #define GST_PHYSTATE5_OFFSET           0x2C  /* SPCV reserved */
341*4e1bc9a0SAchim Leubner #define GST_PHYSTATE6_OFFSET           0x30  /* SPCV reserved */
342*4e1bc9a0SAchim Leubner #define GST_PHYSTATE7_OFFSET           0x34  /* SPCV reserved */
343*4e1bc9a0SAchim Leubner #define GST_GPIO_PINS_OFFSET           0x38
344*4e1bc9a0SAchim Leubner #define GST_RERRINFO_OFFSET            0x44
345*4e1bc9a0SAchim Leubner 
346*4e1bc9a0SAchim Leubner /* General Status Table - MPI state */
347*4e1bc9a0SAchim Leubner #define GST_MPI_STATE_UNINIT           0x00
348*4e1bc9a0SAchim Leubner #define GST_MPI_STATE_INIT             0x01
349*4e1bc9a0SAchim Leubner #define GST_MPI_STATE_TERMINATION      0x02
350*4e1bc9a0SAchim Leubner #define GST_MPI_STATE_ERROR            0x03
351*4e1bc9a0SAchim Leubner #define GST_MPI_STATE_MASK             0x07
352*4e1bc9a0SAchim Leubner 
353*4e1bc9a0SAchim Leubner #define GST_INF_STATE_BITS             0xfffe0007
354*4e1bc9a0SAchim Leubner 
355*4e1bc9a0SAchim Leubner 
356*4e1bc9a0SAchim Leubner /* MPI fatal and non fatal offset mask */
357*4e1bc9a0SAchim Leubner #define MPI_FATAL_ERROR_TABLE_OFFSET_MASK 0xFFFFFF
358*4e1bc9a0SAchim Leubner #define MPI_FATAL_ERROR_TABLE_SIZE(value) ((0xFF000000 & value) >> SHIFT24)    /*  for SPCV */
359*4e1bc9a0SAchim Leubner 
360*4e1bc9a0SAchim Leubner /* MPI fatal and non fatal Error dump capture table offset - byte offset */
361*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_LO_OFFSET            0x00     /* HNFBUFL */
362*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_HI_OFFSET            0x04     /* HNFBUFH */
363*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_LENGTH               0x08     /* HNFBLEN */
364*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_HANDSHAKE            0x0C     /* FDDHSHK */
365*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_STATUS               0x10     /* FDDTSTAT */
366*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_ACCUM_LEN            0x14     /* ACCDDLEN */
367*4e1bc9a0SAchim Leubner /*  */
368*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_HANDSHAKE_RDY              0x1
369*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_HANDSHAKE_BUSY             0x0
370*4e1bc9a0SAchim Leubner /*  */
371*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_STAT_RSVD                 0x0
372*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_STAT_DMA_FAILED           0x1
373*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_STAT_NF_SUCCESS_MORE_DATA 0x2
374*4e1bc9a0SAchim Leubner #define MPI_FATAL_EDUMP_TABLE_STAT_NF_SUCCESS_DONE      0x3
375*4e1bc9a0SAchim Leubner 
376*4e1bc9a0SAchim Leubner #define IOCTL_ERROR_NO_FATAL_ERROR           0x77
377*4e1bc9a0SAchim Leubner 
378*4e1bc9a0SAchim Leubner /*******************************************************************************/
379*4e1bc9a0SAchim Leubner /** \struct spc_GSTableDescriptor_s
380*4e1bc9a0SAchim Leubner  *  \brief This structure is used for SPC MPI General Status Table
381*4e1bc9a0SAchim Leubner  *
382*4e1bc9a0SAchim Leubner  * This structure specifies all required attributes to Gereral Status Table
383*4e1bc9a0SAchim Leubner  */
384*4e1bc9a0SAchim Leubner /*******************************************************************************/
385*4e1bc9a0SAchim Leubner struct spc_GSTableDescriptor_s
386*4e1bc9a0SAchim Leubner {
387*4e1bc9a0SAchim Leubner   bit32    GSTLenMPIS;           /**< DW0 - GST Length, MPI State */
388*4e1bc9a0SAchim Leubner                                   /**< bit02-00 MPI state */
389*4e1bc9a0SAchim Leubner                                   /**< 000 - not initialized, 001 - initialized,
390*4e1bc9a0SAchim Leubner                                        010 - Configuration termination in progress */
391*4e1bc9a0SAchim Leubner                                   /**< bit3 - IQ Frozen */
392*4e1bc9a0SAchim Leubner                                   /**< bit15-04 GST Length */
393*4e1bc9a0SAchim Leubner                                   /**< bit31-16 MPI-S Initialize Error */
394*4e1bc9a0SAchim Leubner   bit32    IQFreezeState0;       /**< DW1 - Inbound Queue Freeze State0 */
395*4e1bc9a0SAchim Leubner   bit32    IQFreezeState1;       /**< DW2 - Inbound Qeue Freeze State1 */
396*4e1bc9a0SAchim Leubner   bit32    MsguTcnt;             /**< DW3 - MSGU Tick count */
397*4e1bc9a0SAchim Leubner   bit32    IopTcnt;              /**< DW4 - IOP Tick count */
398*4e1bc9a0SAchim Leubner   bit32    Iop1Tcnt;             /**< DW5 - IOP1 Tick count */
399*4e1bc9a0SAchim Leubner   bit32    PhyState[MAX_VALID_PHYS];  /* SPCV = reserved */
400*4e1bc9a0SAchim Leubner                                  /**< DW6 to DW 0D - Phy Link state 0 to 7, Phy Start State 0 to 7 */
401*4e1bc9a0SAchim Leubner                                   /**< bit00 Phy Start state n, 0 not started, 1 started */
402*4e1bc9a0SAchim Leubner                                   /**< bit01 Phy Link state n, 0 link down, 1 link up */
403*4e1bc9a0SAchim Leubner                                   /**< bit31-2 Reserved */
404*4e1bc9a0SAchim Leubner   bit32    GPIOpins;             /**< DWE - GPIO pins */
405*4e1bc9a0SAchim Leubner   bit32    reserved1;            /**< DWF - reserved */
406*4e1bc9a0SAchim Leubner   bit32    reserved2;            /**< DW10 - reserved */
407*4e1bc9a0SAchim Leubner   bit32    recoverErrInfo[8];    /**< DW11 to DW18 - Recoverable Error Information */
408*4e1bc9a0SAchim Leubner };
409*4e1bc9a0SAchim Leubner 
410*4e1bc9a0SAchim Leubner typedef struct spc_GSTableDescriptor_s spc_GSTableDescriptor_t;
411*4e1bc9a0SAchim Leubner 
412*4e1bc9a0SAchim Leubner /*******************************************************************************/
413*4e1bc9a0SAchim Leubner /** \struct spc_SPASTable_s
414*4e1bc9a0SAchim Leubner  *  \brief SAS Phy Analog Setup Table
415*4e1bc9a0SAchim Leubner  *
416*4e1bc9a0SAchim Leubner  * The spc_SPASTable_s structure is used to set Phy Calibration
417*4e1bc9a0SAchim Leubner  * attributes
418*4e1bc9a0SAchim Leubner  */
419*4e1bc9a0SAchim Leubner /*******************************************************************************/
420*4e1bc9a0SAchim Leubner struct spc_SPASTable_s
421*4e1bc9a0SAchim Leubner {
422*4e1bc9a0SAchim Leubner   bit32   spaReg0;            /* transmitter per port configuration 1 SAS_SATA G1 */
423*4e1bc9a0SAchim Leubner   bit32   spaReg1;            /* transmitter per port configuration 2 SAS_SATA G1*/
424*4e1bc9a0SAchim Leubner   bit32   spaReg2;            /* transmitter per port configuration 3 SAS_SATA G1*/
425*4e1bc9a0SAchim Leubner   bit32   spaReg3;            /* transmitter configuration 1 */
426*4e1bc9a0SAchim Leubner   bit32   spaReg4;            /* reveiver per port configuration 1 SAS_SATA G1G2 */
427*4e1bc9a0SAchim Leubner   bit32   spaReg5;            /* reveiver per port configuration 2 SAS_SATA G3 */
428*4e1bc9a0SAchim Leubner   bit32   spaReg6;            /* reveiver per configuration 1 */
429*4e1bc9a0SAchim Leubner   bit32   spaReg7;            /* reveiver per configuration 2 */
430*4e1bc9a0SAchim Leubner   bit32   reserved[2];        /* reserved */
431*4e1bc9a0SAchim Leubner };
432*4e1bc9a0SAchim Leubner 
433*4e1bc9a0SAchim Leubner typedef struct spc_SPASTable_s spc_SPASTable_t;
434*4e1bc9a0SAchim Leubner 
435*4e1bc9a0SAchim Leubner /*******************************************************************************/
436*4e1bc9a0SAchim Leubner /** \struct spc_inboundQueueDescriptor_s
437*4e1bc9a0SAchim Leubner  *  \brief This structure is used to configure inbound queues
438*4e1bc9a0SAchim Leubner  *
439*4e1bc9a0SAchim Leubner  * This structure specifies all required attributes to configure inbound queues
440*4e1bc9a0SAchim Leubner  */
441*4e1bc9a0SAchim Leubner /*******************************************************************************/
442*4e1bc9a0SAchim Leubner struct spc_inboundQueueDescriptor_s
443*4e1bc9a0SAchim Leubner {
444*4e1bc9a0SAchim Leubner   bit32    elementPriSizeCount;  /**< Priority, Size, Count in the queue */
445*4e1bc9a0SAchim Leubner                                   /**< bit00-15 Count */
446*4e1bc9a0SAchim Leubner                                   /**< When set to 0, this queue is disabled */
447*4e1bc9a0SAchim Leubner                                   /**< bit16-29 Size */
448*4e1bc9a0SAchim Leubner                                   /**< bit30-31 Priority 00:Normal, 01:High Priority */
449*4e1bc9a0SAchim Leubner   bit32    upperBaseAddress;     /**< Upper address bits for the queue message buffer pool */
450*4e1bc9a0SAchim Leubner   bit32    lowerBaseAddress;     /**< Lower address bits for the queue message buffer pool */
451*4e1bc9a0SAchim Leubner   bit32    ciUpperBaseAddress;   /**< Upper physical address for inbound queue CI */
452*4e1bc9a0SAchim Leubner   bit32    ciLowerBaseAddress;   /**< Lower physical address for inbound queue CI */
453*4e1bc9a0SAchim Leubner   bit32    PIPCIBar;             /**< PCI BAR for PI Offset */
454*4e1bc9a0SAchim Leubner   bit32    PIOffset;             /**< Offset address for inbound queue PI */
455*4e1bc9a0SAchim Leubner   bit32    reserved;             /**< reserved */
456*4e1bc9a0SAchim Leubner };
457*4e1bc9a0SAchim Leubner 
458*4e1bc9a0SAchim Leubner typedef struct spc_inboundQueueDescriptor_s spc_inboundQueueDescriptor_t;
459*4e1bc9a0SAchim Leubner 
460*4e1bc9a0SAchim Leubner /*******************************************************************************/
461*4e1bc9a0SAchim Leubner /** \struct spc_outboundQueueDescriptor_s
462*4e1bc9a0SAchim Leubner  *  \brief This structure is used to configure outbound queues
463*4e1bc9a0SAchim Leubner  *
464*4e1bc9a0SAchim Leubner  * This structure specifies all required attributes to configure outbound queues
465*4e1bc9a0SAchim Leubner  */
466*4e1bc9a0SAchim Leubner /*******************************************************************************/
467*4e1bc9a0SAchim Leubner struct spc_outboundQueueDescriptor_s
468*4e1bc9a0SAchim Leubner {
469*4e1bc9a0SAchim Leubner   bit32    elementSizeCount;      /**< Size & Count of each element (slot) in the queue) */
470*4e1bc9a0SAchim Leubner                                    /**< bit00-15 Count */
471*4e1bc9a0SAchim Leubner                                    /**< When set to 0, this queue is disabled */
472*4e1bc9a0SAchim Leubner                                    /**< bit16-29 Size */
473*4e1bc9a0SAchim Leubner                                    /**< bit30    Interrupt enable/disable */
474*4e1bc9a0SAchim Leubner                                    /**< bit31    reserved */
475*4e1bc9a0SAchim Leubner   bit32    upperBaseAddress;      /**< Upper address bits for the queue message buffer pool */
476*4e1bc9a0SAchim Leubner   bit32    lowerBaseAddress;      /**< Lower address bits for the queue message buffer pool */
477*4e1bc9a0SAchim Leubner   bit32    piUpperBaseAddress;    /**< PI Upper Base Address for outbound queue */
478*4e1bc9a0SAchim Leubner   bit32    piLowerBaseAddress;    /**< PI Lower Base Address for outbound queue */
479*4e1bc9a0SAchim Leubner   bit32    CIPCIBar;              /**< PCI BAR for CI Offset */
480*4e1bc9a0SAchim Leubner   bit32    CIOffset;              /**< Offset address for outbound queue CI */
481*4e1bc9a0SAchim Leubner   bit32    interruptVecCntDelay;  /**< Delay in microseconds before the interrupt is asserted */
482*4e1bc9a0SAchim Leubner                                    /**< if the interrupt threshold has not been reached */
483*4e1bc9a0SAchim Leubner                                    /**< Number of interrupt events before the interrupt is asserted */
484*4e1bc9a0SAchim Leubner                                    /**< If set to 0, interrupts for this queue are disable */
485*4e1bc9a0SAchim Leubner                                    /**< Interrupt vector number for this queue */
486*4e1bc9a0SAchim Leubner                                    /**< Note that the interrupt type can be MSI or MSI-X */
487*4e1bc9a0SAchim Leubner                                    /**< depending on the system configuration */
488*4e1bc9a0SAchim Leubner                                    /**< bit00-15 Delay */
489*4e1bc9a0SAchim Leubner                                    /**< bit16-23 Count */
490*4e1bc9a0SAchim Leubner                                    /**< bit24-31 Vector */
491*4e1bc9a0SAchim Leubner   bit32    DInterruptTOPCIOffset; /**< Dynamic Interrupt Coalescing Timeout PCI Bar Offset */
492*4e1bc9a0SAchim Leubner };
493*4e1bc9a0SAchim Leubner 
494*4e1bc9a0SAchim Leubner typedef struct spc_outboundQueueDescriptor_s spc_outboundQueueDescriptor_t;
495*4e1bc9a0SAchim Leubner 
496*4e1bc9a0SAchim Leubner typedef struct InterruptVT_s
497*4e1bc9a0SAchim Leubner {
498*4e1bc9a0SAchim Leubner   bit32 iccict;        /**< DW0 - Interrupt Colescing Control and Timer */
499*4e1bc9a0SAchim Leubner   bit32 iraeirad;      /**< DW1 - Interrupt Reassertion Enable/Delay */
500*4e1bc9a0SAchim Leubner } InterruptVT_t;
501*4e1bc9a0SAchim Leubner 
502*4e1bc9a0SAchim Leubner typedef struct mpiInterruptVT_s
503*4e1bc9a0SAchim Leubner {
504*4e1bc9a0SAchim Leubner   InterruptVT_t IntVecTble[MAX_NUM_VECTOR << 1];
505*4e1bc9a0SAchim Leubner } mpiInterruptVT_t;
506*4e1bc9a0SAchim Leubner 
507*4e1bc9a0SAchim Leubner #define INT_VT_Coal_CNT_TO 0
508*4e1bc9a0SAchim Leubner #define INT_VT_Coal_ReAssert_Enab 4
509*4e1bc9a0SAchim Leubner 
510*4e1bc9a0SAchim Leubner typedef struct phyAttrb_s
511*4e1bc9a0SAchim Leubner {
512*4e1bc9a0SAchim Leubner   bit32    phyState;
513*4e1bc9a0SAchim Leubner   bit32    phyEventOQ;
514*4e1bc9a0SAchim Leubner } phyAttrb_t;
515*4e1bc9a0SAchim Leubner 
516*4e1bc9a0SAchim Leubner typedef struct sasPhyAttribute_s
517*4e1bc9a0SAchim Leubner {
518*4e1bc9a0SAchim Leubner   phyAttrb_t phyAttribute[MAX_VALID_PHYS];
519*4e1bc9a0SAchim Leubner }sasPhyAttribute_t;
520*4e1bc9a0SAchim Leubner 
521*4e1bc9a0SAchim Leubner 
522*4e1bc9a0SAchim Leubner #define PHY_STATE    0
523*4e1bc9a0SAchim Leubner #define PHY_EVENT_OQ 4
524*4e1bc9a0SAchim Leubner 
525*4e1bc9a0SAchim Leubner /*******************************************************************************/
526*4e1bc9a0SAchim Leubner /** \struct spcMSGUConfig_s
527*4e1bc9a0SAchim Leubner  *  \brief This structure is used to configure controller's message unit
528*4e1bc9a0SAchim Leubner  *
529*4e1bc9a0SAchim Leubner  */
530*4e1bc9a0SAchim Leubner /*******************************************************************************/
531*4e1bc9a0SAchim Leubner typedef struct fwMSGUConfig_s
532*4e1bc9a0SAchim Leubner {
533*4e1bc9a0SAchim Leubner   spc_configMainDescriptor_t      mainConfiguration;                /**< main part of Configuration Table */
534*4e1bc9a0SAchim Leubner   spc_GSTableDescriptor_t         GeneralStatusTable;               /**< MPI general status table */
535*4e1bc9a0SAchim Leubner   spc_inboundQueueDescriptor_t    inboundQueue[IB_QUEUE_CFGSIZE];   /**< Inbound queue configuration array */
536*4e1bc9a0SAchim Leubner   spc_outboundQueueDescriptor_t   outboundQueue[OB_QUEUE_CFGSIZE];  /**< Outbound queue configuration array */
537*4e1bc9a0SAchim Leubner   agsaPhyAnalogSetupTable_t       phyAnalogConfig;
538*4e1bc9a0SAchim Leubner   mpiInterruptVT_t                interruptVTable;
539*4e1bc9a0SAchim Leubner   sasPhyAttribute_t               phyAttributeTable;
540*4e1bc9a0SAchim Leubner }fwMSGUConfig_t;
541*4e1bc9a0SAchim Leubner 
542*4e1bc9a0SAchim Leubner 
543*4e1bc9a0SAchim Leubner typedef void (*EnadDisabHandler_t)(
544*4e1bc9a0SAchim Leubner                             agsaRoot_t  *agRoot,
545*4e1bc9a0SAchim Leubner                             bit32       interruptVectorIndex
546*4e1bc9a0SAchim Leubner                               );
547*4e1bc9a0SAchim Leubner 
548*4e1bc9a0SAchim Leubner typedef bit32 (*InterruptOurs_t)(
549*4e1bc9a0SAchim Leubner                             agsaRoot_t  *agRoot,
550*4e1bc9a0SAchim Leubner                             bit32       interruptVectorIndex
551*4e1bc9a0SAchim Leubner                               );
552*4e1bc9a0SAchim Leubner #endif /* __SPC_DEFS__ */
553