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