1*fd501800SSascha Wildner /*- 2*fd501800SSascha Wildner * Copyright (c) 2012-2015 LSI Corp. 3*fd501800SSascha Wildner * Copyright (c) 2013-2016 Avago Technologies 4*fd501800SSascha Wildner * All rights reserved. 5*fd501800SSascha Wildner * 6*fd501800SSascha Wildner * Redistribution and use in source and binary forms, with or without 7*fd501800SSascha Wildner * modification, are permitted provided that the following conditions 8*fd501800SSascha Wildner * are met: 9*fd501800SSascha Wildner * 1. Redistributions of source code must retain the above copyright 10*fd501800SSascha Wildner * notice, this list of conditions and the following disclaimer. 11*fd501800SSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 12*fd501800SSascha Wildner * notice, this list of conditions and the following disclaimer in the 13*fd501800SSascha Wildner * documentation and/or other materials provided with the distribution. 14*fd501800SSascha Wildner * 3. Neither the name of the author nor the names of any co-contributors 15*fd501800SSascha Wildner * may be used to endorse or promote products derived from this software 16*fd501800SSascha Wildner * without specific prior written permission. 17*fd501800SSascha Wildner * 18*fd501800SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19*fd501800SSascha Wildner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*fd501800SSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*fd501800SSascha Wildner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22*fd501800SSascha Wildner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23*fd501800SSascha Wildner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24*fd501800SSascha Wildner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25*fd501800SSascha Wildner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26*fd501800SSascha Wildner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27*fd501800SSascha Wildner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28*fd501800SSascha Wildner * SUCH DAMAGE. 29*fd501800SSascha Wildner * 30*fd501800SSascha Wildner * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD 31*fd501800SSascha Wildner * 32*fd501800SSascha Wildner * $FreeBSD: head/sys/dev/mpr/mpi/mpi2_cnfg.h 331228 2018-03-19 23:21:45Z mav $ 33*fd501800SSascha Wildner */ 34*fd501800SSascha Wildner 35*fd501800SSascha Wildner /* 36*fd501800SSascha Wildner * Copyright (c) 2000-2015 LSI Corporation. 37*fd501800SSascha Wildner * Copyright (c) 2013-2016 Avago Technologies 38*fd501800SSascha Wildner * All rights reserved. 39*fd501800SSascha Wildner * 40*fd501800SSascha Wildner * 41*fd501800SSascha Wildner * Name: mpi2_cnfg.h 42*fd501800SSascha Wildner * Title: MPI Configuration messages and pages 43*fd501800SSascha Wildner * Creation Date: November 10, 2006 44*fd501800SSascha Wildner * 45*fd501800SSascha Wildner * mpi2_cnfg.h Version: 02.00.40 46*fd501800SSascha Wildner * 47*fd501800SSascha Wildner * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 48*fd501800SSascha Wildner * prefix are for use only on MPI v2.5 products, and must not be used 49*fd501800SSascha Wildner * with MPI v2.0 products. Unless otherwise noted, names beginning with 50*fd501800SSascha Wildner * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. 51*fd501800SSascha Wildner * 52*fd501800SSascha Wildner * Version History 53*fd501800SSascha Wildner * --------------- 54*fd501800SSascha Wildner * 55*fd501800SSascha Wildner * Date Version Description 56*fd501800SSascha Wildner * -------- -------- ------------------------------------------------------ 57*fd501800SSascha Wildner * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 58*fd501800SSascha Wildner * 06-04-07 02.00.01 Added defines for SAS IO Unit Page 2 PhyFlags. 59*fd501800SSascha Wildner * Added Manufacturing Page 11. 60*fd501800SSascha Wildner * Added MPI2_SAS_EXPANDER0_FLAGS_CONNECTOR_END_DEVICE 61*fd501800SSascha Wildner * define. 62*fd501800SSascha Wildner * 06-26-07 02.00.02 Adding generic structure for product-specific 63*fd501800SSascha Wildner * Manufacturing pages: MPI2_CONFIG_PAGE_MANUFACTURING_PS. 64*fd501800SSascha Wildner * Rework of BIOS Page 2 configuration page. 65*fd501800SSascha Wildner * Fixed MPI2_BIOSPAGE2_BOOT_DEVICE to be a union of the 66*fd501800SSascha Wildner * forms. 67*fd501800SSascha Wildner * Added configuration pages IOC Page 8 and Driver 68*fd501800SSascha Wildner * Persistent Mapping Page 0. 69*fd501800SSascha Wildner * 08-31-07 02.00.03 Modified configuration pages dealing with Integrated 70*fd501800SSascha Wildner * RAID (Manufacturing Page 4, RAID Volume Pages 0 and 1, 71*fd501800SSascha Wildner * RAID Physical Disk Pages 0 and 1, RAID Configuration 72*fd501800SSascha Wildner * Page 0). 73*fd501800SSascha Wildner * Added new value for AccessStatus field of SAS Device 74*fd501800SSascha Wildner * Page 0 (_SATA_NEEDS_INITIALIZATION). 75*fd501800SSascha Wildner * 10-31-07 02.00.04 Added missing SEPDevHandle field to 76*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0. 77*fd501800SSascha Wildner * 12-18-07 02.00.05 Modified IO Unit Page 0 to use 32-bit version fields for 78*fd501800SSascha Wildner * NVDATA. 79*fd501800SSascha Wildner * Modified IOC Page 7 to use masks and added field for 80*fd501800SSascha Wildner * SASBroadcastPrimitiveMasks. 81*fd501800SSascha Wildner * Added MPI2_CONFIG_PAGE_BIOS_4. 82*fd501800SSascha Wildner * Added MPI2_CONFIG_PAGE_LOG_0. 83*fd501800SSascha Wildner * 02-29-08 02.00.06 Modified various names to make them 32-character unique. 84*fd501800SSascha Wildner * Added SAS Device IDs. 85*fd501800SSascha Wildner * Updated Integrated RAID configuration pages including 86*fd501800SSascha Wildner * Manufacturing Page 4, IOC Page 6, and RAID Configuration 87*fd501800SSascha Wildner * Page 0. 88*fd501800SSascha Wildner * 05-21-08 02.00.07 Added define MPI2_MANPAGE4_MIX_SSD_SAS_SATA. 89*fd501800SSascha Wildner * Added define MPI2_MANPAGE4_PHYSDISK_128MB_COERCION. 90*fd501800SSascha Wildner * Fixed define MPI2_IOCPAGE8_FLAGS_ENCLOSURE_SLOT_MAPPING. 91*fd501800SSascha Wildner * Added missing MaxNumRoutedSasAddresses field to 92*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_EXPANDER_0. 93*fd501800SSascha Wildner * Added SAS Port Page 0. 94*fd501800SSascha Wildner * Modified structure layout for 95*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_DRIVER_MAPPING_0. 96*fd501800SSascha Wildner * 06-27-08 02.00.08 Changed MPI2_CONFIG_PAGE_RD_PDISK_1 to use 97*fd501800SSascha Wildner * MPI2_RAID_PHYS_DISK1_PATH_MAX to size the array. 98*fd501800SSascha Wildner * 10-02-08 02.00.09 Changed MPI2_RAID_PGAD_CONFIGNUM_MASK from 0x0000FFFF 99*fd501800SSascha Wildner * to 0x000000FF. 100*fd501800SSascha Wildner * Added two new values for the Physical Disk Coercion Size 101*fd501800SSascha Wildner * bits in the Flags field of Manufacturing Page 4. 102*fd501800SSascha Wildner * Added product-specific Manufacturing pages 16 to 31. 103*fd501800SSascha Wildner * Modified Flags bits for controlling write cache on SATA 104*fd501800SSascha Wildner * drives in IO Unit Page 1. 105*fd501800SSascha Wildner * Added new bit to AdditionalControlFlags of SAS IO Unit 106*fd501800SSascha Wildner * Page 1 to control Invalid Topology Correction. 107*fd501800SSascha Wildner * Added additional defines for RAID Volume Page 0 108*fd501800SSascha Wildner * VolumeStatusFlags field. 109*fd501800SSascha Wildner * Modified meaning of RAID Volume Page 0 VolumeSettings 110*fd501800SSascha Wildner * define for auto-configure of hot-swap drives. 111*fd501800SSascha Wildner * Added SupportedPhysDisks field to RAID Volume Page 1 and 112*fd501800SSascha Wildner * added related defines. 113*fd501800SSascha Wildner * Added PhysDiskAttributes field (and related defines) to 114*fd501800SSascha Wildner * RAID Physical Disk Page 0. 115*fd501800SSascha Wildner * Added MPI2_SAS_PHYINFO_PHY_VACANT define. 116*fd501800SSascha Wildner * Added three new DiscoveryStatus bits for SAS IO Unit 117*fd501800SSascha Wildner * Page 0 and SAS Expander Page 0. 118*fd501800SSascha Wildner * Removed multiplexing information from SAS IO Unit pages. 119*fd501800SSascha Wildner * Added BootDeviceWaitTime field to SAS IO Unit Page 4. 120*fd501800SSascha Wildner * Removed Zone Address Resolved bit from PhyInfo and from 121*fd501800SSascha Wildner * Expander Page 0 Flags field. 122*fd501800SSascha Wildner * Added two new AccessStatus values to SAS Device Page 0 123*fd501800SSascha Wildner * for indicating routing problems. Added 3 reserved words 124*fd501800SSascha Wildner * to this page. 125*fd501800SSascha Wildner * 01-19-09 02.00.10 Fixed defines for GPIOVal field of IO Unit Page 3. 126*fd501800SSascha Wildner * Inserted missing reserved field into structure for IOC 127*fd501800SSascha Wildner * Page 6. 128*fd501800SSascha Wildner * Added more pending task bits to RAID Volume Page 0 129*fd501800SSascha Wildner * VolumeStatusFlags defines. 130*fd501800SSascha Wildner * Added MPI2_PHYSDISK0_STATUS_FLAG_NOT_CERTIFIED define. 131*fd501800SSascha Wildner * Added a new DiscoveryStatus bit for SAS IO Unit Page 0 132*fd501800SSascha Wildner * and SAS Expander Page 0 to flag a downstream initiator 133*fd501800SSascha Wildner * when in simplified routing mode. 134*fd501800SSascha Wildner * Removed SATA Init Failure defines for DiscoveryStatus 135*fd501800SSascha Wildner * fields of SAS IO Unit Page 0 and SAS Expander Page 0. 136*fd501800SSascha Wildner * Added MPI2_SAS_DEVICE0_ASTATUS_DEVICE_BLOCKED define. 137*fd501800SSascha Wildner * Added PortGroups, DmaGroup, and ControlGroup fields to 138*fd501800SSascha Wildner * SAS Device Page 0. 139*fd501800SSascha Wildner * 05-06-09 02.00.11 Added structures and defines for IO Unit Page 5 and IO 140*fd501800SSascha Wildner * Unit Page 6. 141*fd501800SSascha Wildner * Added expander reduced functionality data to SAS 142*fd501800SSascha Wildner * Expander Page 0. 143*fd501800SSascha Wildner * Added SAS PHY Page 2 and SAS PHY Page 3. 144*fd501800SSascha Wildner * 07-30-09 02.00.12 Added IO Unit Page 7. 145*fd501800SSascha Wildner * Added new device ids. 146*fd501800SSascha Wildner * Added SAS IO Unit Page 5. 147*fd501800SSascha Wildner * Added partial and slumber power management capable flags 148*fd501800SSascha Wildner * to SAS Device Page 0 Flags field. 149*fd501800SSascha Wildner * Added PhyInfo defines for power condition. 150*fd501800SSascha Wildner * Added Ethernet configuration pages. 151*fd501800SSascha Wildner * 10-28-09 02.00.13 Added MPI2_IOUNITPAGE1_ENABLE_HOST_BASED_DISCOVERY. 152*fd501800SSascha Wildner * Added SAS PHY Page 4 structure and defines. 153*fd501800SSascha Wildner * 02-10-10 02.00.14 Modified the comments for the configuration page 154*fd501800SSascha Wildner * structures that contain an array of data. The host 155*fd501800SSascha Wildner * should use the "count" field in the page data (e.g. the 156*fd501800SSascha Wildner * NumPhys field) to determine the number of valid elements 157*fd501800SSascha Wildner * in the array. 158*fd501800SSascha Wildner * Added/modified some MPI2_MFGPAGE_DEVID_SAS defines. 159*fd501800SSascha Wildner * Added PowerManagementCapabilities to IO Unit Page 7. 160*fd501800SSascha Wildner * Added PortWidthModGroup field to 161*fd501800SSascha Wildner * MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS. 162*fd501800SSascha Wildner * Added MPI2_CONFIG_PAGE_SASIOUNIT_6 and related defines. 163*fd501800SSascha Wildner * Added MPI2_CONFIG_PAGE_SASIOUNIT_7 and related defines. 164*fd501800SSascha Wildner * Added MPI2_CONFIG_PAGE_SASIOUNIT_8 and related defines. 165*fd501800SSascha Wildner * 05-12-10 02.00.15 Added MPI2_RAIDVOL0_STATUS_FLAG_VOL_NOT_CONSISTENT 166*fd501800SSascha Wildner * define. 167*fd501800SSascha Wildner * Added MPI2_PHYSDISK0_INCOMPATIBLE_MEDIA_TYPE define. 168*fd501800SSascha Wildner * Added MPI2_SAS_NEG_LINK_RATE_UNSUPPORTED_PHY define. 169*fd501800SSascha Wildner * 08-11-10 02.00.16 Removed IO Unit Page 1 device path (multi-pathing) 170*fd501800SSascha Wildner * defines. 171*fd501800SSascha Wildner * 11-10-10 02.00.17 Added ReceptacleID field (replacing Reserved1) to 172*fd501800SSascha Wildner * MPI2_MANPAGE7_CONNECTOR_INFO and reworked defines for 173*fd501800SSascha Wildner * the Pinout field. 174*fd501800SSascha Wildner * Added BoardTemperature and BoardTemperatureUnits fields 175*fd501800SSascha Wildner * to MPI2_CONFIG_PAGE_IO_UNIT_7. 176*fd501800SSascha Wildner * Added MPI2_CONFIG_EXTPAGETYPE_EXT_MANUFACTURING define 177*fd501800SSascha Wildner * and MPI2_CONFIG_PAGE_EXT_MAN_PS structure. 178*fd501800SSascha Wildner * 02-23-11 02.00.18 Added ProxyVF_ID field to MPI2_CONFIG_REQUEST. 179*fd501800SSascha Wildner * Added IO Unit Page 8, IO Unit Page 9, 180*fd501800SSascha Wildner * and IO Unit Page 10. 181*fd501800SSascha Wildner * Added SASNotifyPrimitiveMasks field to 182*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_IOC_7. 183*fd501800SSascha Wildner * 03-09-11 02.00.19 Fixed IO Unit Page 10 (to match the spec). 184*fd501800SSascha Wildner * 05-25-11 02.00.20 Cleaned up a few comments. 185*fd501800SSascha Wildner * 08-24-11 02.00.21 Marked the IO Unit Page 7 PowerManagementCapabilities 186*fd501800SSascha Wildner * for PCIe link as obsolete. 187*fd501800SSascha Wildner * Added SpinupFlags field containing a Disable Spin-up bit 188*fd501800SSascha Wildner * to the MPI2_SAS_IOUNIT4_SPINUP_GROUP fields of SAS IO 189*fd501800SSascha Wildner * Unit Page 4. 190*fd501800SSascha Wildner * 11-18-11 02.00.22 Added define MPI2_IOCPAGE6_CAP_FLAGS_4K_SECTORS_SUPPORT. 191*fd501800SSascha Wildner * Added UEFIVersion field to BIOS Page 1 and defined new 192*fd501800SSascha Wildner * BiosOptions bits. 193*fd501800SSascha Wildner * Incorporating additions for MPI v2.5. 194*fd501800SSascha Wildner * 11-27-12 02.00.23 Added MPI2_MANPAGE7_FLAG_EVENTREPLAY_SLOT_ORDER. 195*fd501800SSascha Wildner * Added MPI2_BIOSPAGE1_OPTIONS_MASK_OEM_ID. 196*fd501800SSascha Wildner * 12-20-12 02.00.24 Marked MPI2_SASIOUNIT1_CONTROL_CLEAR_AFFILIATION as 197*fd501800SSascha Wildner * obsolete for MPI v2.5 and later. 198*fd501800SSascha Wildner * Added some defines for 12G SAS speeds. 199*fd501800SSascha Wildner * 04-09-13 02.00.25 Added MPI2_IOUNITPAGE1_ATA_SECURITY_FREEZE_LOCK. 200*fd501800SSascha Wildner * Fixed MPI2_IOUNITPAGE5_DMA_CAP_MASK_MAX_REQUESTS to 201*fd501800SSascha Wildner * match the specification. 202*fd501800SSascha Wildner * 08-19-13 02.00.26 Added reserved words to MPI2_CONFIG_PAGE_IO_UNIT_7 for 203*fd501800SSascha Wildner * future use. 204*fd501800SSascha Wildner * 12-05-13 02.00.27 Added MPI2_MANPAGE7_FLAG_BASE_ENCLOSURE_LEVEL for 205*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_MAN_7. 206*fd501800SSascha Wildner * Added EnclosureLevel and ConnectorName fields to 207*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_SAS_DEV_0. 208*fd501800SSascha Wildner * Added MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID for 209*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_SAS_DEV_0. 210*fd501800SSascha Wildner * Added EnclosureLevel field to 211*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0. 212*fd501800SSascha Wildner * Added MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID for 213*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0. 214*fd501800SSascha Wildner * 01-08-14 02.00.28 Added more defines for the BiosOptions field of 215*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_BIOS_1. 216*fd501800SSascha Wildner * 06-13-14 02.00.29 Added SSUTimeout field to MPI2_CONFIG_PAGE_BIOS_1, and 217*fd501800SSascha Wildner * more defines for the BiosOptions field. 218*fd501800SSascha Wildner * 11-18-14 02.00.30 Updated copyright information. 219*fd501800SSascha Wildner * Added MPI2_BIOSPAGE1_OPTIONS_ADVANCED_CONFIG. 220*fd501800SSascha Wildner * Added AdapterOrderAux fields to BIOS Page 3. 221*fd501800SSascha Wildner * 03-16-15 02.00.31 Updated for MPI v2.6. 222*fd501800SSascha Wildner * Added BoardPowerRequirement, PCISlotPowerAllocation, and 223*fd501800SSascha Wildner * Flags field to IO Unit Page 7. 224*fd501800SSascha Wildner * Added IO Unit Page 11. 225*fd501800SSascha Wildner * Added new SAS Phy Event codes 226*fd501800SSascha Wildner * Added PCIe configuration pages. 227*fd501800SSascha Wildner * 03-19-15 02.00.32 Fixed PCIe Link Config page structure names to be 228*fd501800SSascha Wildner * unique in first 32 characters. 229*fd501800SSascha Wildner * 05-25-15 02.00.33 Added more defines for the BiosOptions field of 230*fd501800SSascha Wildner * MPI2_CONFIG_PAGE_BIOS_1. 231*fd501800SSascha Wildner * 08-25-15 02.00.34 Added PCIe Device Page 2 SGL format capability. 232*fd501800SSascha Wildner * 12-18-15 02.00.35 Added SATADeviceWaitTime to SAS IO Unit Page 4. 233*fd501800SSascha Wildner * 01-21-16 02.00.36 Added/modified MPI2_MFGPAGE_DEVID_SAS defines. 234*fd501800SSascha Wildner * Added Link field to PCIe Link Pages 235*fd501800SSascha Wildner * Added EnclosureLevel and ConnectorName to PCIe 236*fd501800SSascha Wildner * Device Page 0. 237*fd501800SSascha Wildner * Added define for PCIE IoUnit page 1 max rate shift. 238*fd501800SSascha Wildner * Added comment for reserved ExtPageTypes. 239*fd501800SSascha Wildner * Added SAS 4 22.5 gbs speed support. 240*fd501800SSascha Wildner * Added PCIe 4 16.0 GT/sec speec support. 241*fd501800SSascha Wildner * Removed AHCI support. 242*fd501800SSascha Wildner * Removed SOP support. 243*fd501800SSascha Wildner * Added NegotiatedLinkRate and NegotiatedPortWidth to 244*fd501800SSascha Wildner * PCIe device page 0. 245*fd501800SSascha Wildner * 04-10-16 02.00.37 Fixed MPI2_MFGPAGE_DEVID_SAS3616/3708 defines 246*fd501800SSascha Wildner * 07-01-16 02.00.38 Added Manufacturing page 7 Connector types. 247*fd501800SSascha Wildner * Changed declaration of ConnectorName in PCIe DevicePage0 248*fd501800SSascha Wildner * to match SAS DevicePage 0. 249*fd501800SSascha Wildner * Added SATADeviceWaitTime to IO Unit Page 11. 250*fd501800SSascha Wildner * Added MPI26_MFGPAGE_DEVID_SAS4008 251*fd501800SSascha Wildner * Added x16 PCIe width to IO Unit Page 7 252*fd501800SSascha Wildner * Added LINKFLAGS to control SRIS in PCIe IO Unit page 1 253*fd501800SSascha Wildner * phy data. 254*fd501800SSascha Wildner * Added InitStatus to PCIe IO Unit Page 1 header. 255*fd501800SSascha Wildner * 09-01-16 02.00.39 Added MPI26_CONFIG_PAGE_ENCLOSURE_0 and related defines. 256*fd501800SSascha Wildner * Added MPI26_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE and 257*fd501800SSascha Wildner * MPI26_ENCLOS_PGAD_FORM_HANDLE page address formats. 258*fd501800SSascha Wildner * 02-02-17 02.00.40 Added MPI2_MANPAGE7_SLOT_UNKNOWN. 259*fd501800SSascha Wildner * Added ChassisSlot field to SAS Enclosure Page 0. 260*fd501800SSascha Wildner * Added ChassisSlot Valid bit (bit 5) to the Flags field 261*fd501800SSascha Wildner * in SAS Enclosure Page 0. 262*fd501800SSascha Wildner * -------------------------------------------------------------------------- 263*fd501800SSascha Wildner */ 264*fd501800SSascha Wildner 265*fd501800SSascha Wildner #ifndef MPI2_CNFG_H 266*fd501800SSascha Wildner #define MPI2_CNFG_H 267*fd501800SSascha Wildner 268*fd501800SSascha Wildner /***************************************************************************** 269*fd501800SSascha Wildner * Configuration Page Header and defines 270*fd501800SSascha Wildner *****************************************************************************/ 271*fd501800SSascha Wildner 272*fd501800SSascha Wildner /* Config Page Header */ 273*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_HEADER 274*fd501800SSascha Wildner { 275*fd501800SSascha Wildner U8 PageVersion; /* 0x00 */ 276*fd501800SSascha Wildner U8 PageLength; /* 0x01 */ 277*fd501800SSascha Wildner U8 PageNumber; /* 0x02 */ 278*fd501800SSascha Wildner U8 PageType; /* 0x03 */ 279*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_HEADER, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_HEADER, 280*fd501800SSascha Wildner Mpi2ConfigPageHeader_t, MPI2_POINTER pMpi2ConfigPageHeader_t; 281*fd501800SSascha Wildner 282*fd501800SSascha Wildner typedef union _MPI2_CONFIG_PAGE_HEADER_UNION 283*fd501800SSascha Wildner { 284*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Struct; 285*fd501800SSascha Wildner U8 Bytes[4]; 286*fd501800SSascha Wildner U16 Word16[2]; 287*fd501800SSascha Wildner U32 Word32; 288*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_HEADER_UNION, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_HEADER_UNION, 289*fd501800SSascha Wildner Mpi2ConfigPageHeaderUnion, MPI2_POINTER pMpi2ConfigPageHeaderUnion; 290*fd501800SSascha Wildner 291*fd501800SSascha Wildner /* Extended Config Page Header */ 292*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_EXTENDED_PAGE_HEADER 293*fd501800SSascha Wildner { 294*fd501800SSascha Wildner U8 PageVersion; /* 0x00 */ 295*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 296*fd501800SSascha Wildner U8 PageNumber; /* 0x02 */ 297*fd501800SSascha Wildner U8 PageType; /* 0x03 */ 298*fd501800SSascha Wildner U16 ExtPageLength; /* 0x04 */ 299*fd501800SSascha Wildner U8 ExtPageType; /* 0x06 */ 300*fd501800SSascha Wildner U8 Reserved2; /* 0x07 */ 301*fd501800SSascha Wildner } MPI2_CONFIG_EXTENDED_PAGE_HEADER, 302*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_EXTENDED_PAGE_HEADER, 303*fd501800SSascha Wildner Mpi2ConfigExtendedPageHeader_t, MPI2_POINTER pMpi2ConfigExtendedPageHeader_t; 304*fd501800SSascha Wildner 305*fd501800SSascha Wildner typedef union _MPI2_CONFIG_EXT_PAGE_HEADER_UNION 306*fd501800SSascha Wildner { 307*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Struct; 308*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Ext; 309*fd501800SSascha Wildner U8 Bytes[8]; 310*fd501800SSascha Wildner U16 Word16[4]; 311*fd501800SSascha Wildner U32 Word32[2]; 312*fd501800SSascha Wildner } MPI2_CONFIG_EXT_PAGE_HEADER_UNION, MPI2_POINTER PTR_MPI2_CONFIG_EXT_PAGE_HEADER_UNION, 313*fd501800SSascha Wildner Mpi2ConfigPageExtendedHeaderUnion, MPI2_POINTER pMpi2ConfigPageExtendedHeaderUnion; 314*fd501800SSascha Wildner 315*fd501800SSascha Wildner 316*fd501800SSascha Wildner /* PageType field values */ 317*fd501800SSascha Wildner #define MPI2_CONFIG_PAGEATTR_READ_ONLY (0x00) 318*fd501800SSascha Wildner #define MPI2_CONFIG_PAGEATTR_CHANGEABLE (0x10) 319*fd501800SSascha Wildner #define MPI2_CONFIG_PAGEATTR_PERSISTENT (0x20) 320*fd501800SSascha Wildner #define MPI2_CONFIG_PAGEATTR_MASK (0xF0) 321*fd501800SSascha Wildner 322*fd501800SSascha Wildner #define MPI2_CONFIG_PAGETYPE_IO_UNIT (0x00) 323*fd501800SSascha Wildner #define MPI2_CONFIG_PAGETYPE_IOC (0x01) 324*fd501800SSascha Wildner #define MPI2_CONFIG_PAGETYPE_BIOS (0x02) 325*fd501800SSascha Wildner #define MPI2_CONFIG_PAGETYPE_RAID_VOLUME (0x08) 326*fd501800SSascha Wildner #define MPI2_CONFIG_PAGETYPE_MANUFACTURING (0x09) 327*fd501800SSascha Wildner #define MPI2_CONFIG_PAGETYPE_RAID_PHYSDISK (0x0A) 328*fd501800SSascha Wildner #define MPI2_CONFIG_PAGETYPE_EXTENDED (0x0F) 329*fd501800SSascha Wildner #define MPI2_CONFIG_PAGETYPE_MASK (0x0F) 330*fd501800SSascha Wildner 331*fd501800SSascha Wildner #define MPI2_CONFIG_TYPENUM_MASK (0x0FFF) 332*fd501800SSascha Wildner 333*fd501800SSascha Wildner 334*fd501800SSascha Wildner /* ExtPageType field values */ 335*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_SAS_IO_UNIT (0x10) 336*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_SAS_EXPANDER (0x11) 337*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_SAS_DEVICE (0x12) 338*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_SAS_PHY (0x13) 339*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_LOG (0x14) 340*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_ENCLOSURE (0x15) 341*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_RAID_CONFIG (0x16) 342*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_DRIVER_MAPPING (0x17) 343*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_SAS_PORT (0x18) 344*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_ETHERNET (0x19) 345*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_EXT_MANUFACTURING (0x1A) 346*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_PCIE_IO_UNIT (0x1B) /* MPI v2.6 and later */ 347*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_PCIE_SWITCH (0x1C) /* MPI v2.6 and later */ 348*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_PCIE_DEVICE (0x1D) /* MPI v2.6 and later */ 349*fd501800SSascha Wildner #define MPI2_CONFIG_EXTPAGETYPE_PCIE_LINK (0x1E) /* MPI v2.6 and later */ 350*fd501800SSascha Wildner /* Product specific reserved values 0xE0 - 0xEF */ 351*fd501800SSascha Wildner /* Vendor specific reserved values 0xF0 - 0xFF */ 352*fd501800SSascha Wildner 353*fd501800SSascha Wildner 354*fd501800SSascha Wildner /***************************************************************************** 355*fd501800SSascha Wildner * PageAddress defines 356*fd501800SSascha Wildner *****************************************************************************/ 357*fd501800SSascha Wildner 358*fd501800SSascha Wildner /* RAID Volume PageAddress format */ 359*fd501800SSascha Wildner #define MPI2_RAID_VOLUME_PGAD_FORM_MASK (0xF0000000) 360*fd501800SSascha Wildner #define MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 361*fd501800SSascha Wildner #define MPI2_RAID_VOLUME_PGAD_FORM_HANDLE (0x10000000) 362*fd501800SSascha Wildner 363*fd501800SSascha Wildner #define MPI2_RAID_VOLUME_PGAD_HANDLE_MASK (0x0000FFFF) 364*fd501800SSascha Wildner 365*fd501800SSascha Wildner 366*fd501800SSascha Wildner /* RAID Physical Disk PageAddress format */ 367*fd501800SSascha Wildner #define MPI2_PHYSDISK_PGAD_FORM_MASK (0xF0000000) 368*fd501800SSascha Wildner #define MPI2_PHYSDISK_PGAD_FORM_GET_NEXT_PHYSDISKNUM (0x00000000) 369*fd501800SSascha Wildner #define MPI2_PHYSDISK_PGAD_FORM_PHYSDISKNUM (0x10000000) 370*fd501800SSascha Wildner #define MPI2_PHYSDISK_PGAD_FORM_DEVHANDLE (0x20000000) 371*fd501800SSascha Wildner 372*fd501800SSascha Wildner #define MPI2_PHYSDISK_PGAD_PHYSDISKNUM_MASK (0x000000FF) 373*fd501800SSascha Wildner #define MPI2_PHYSDISK_PGAD_DEVHANDLE_MASK (0x0000FFFF) 374*fd501800SSascha Wildner 375*fd501800SSascha Wildner 376*fd501800SSascha Wildner /* SAS Expander PageAddress format */ 377*fd501800SSascha Wildner #define MPI2_SAS_EXPAND_PGAD_FORM_MASK (0xF0000000) 378*fd501800SSascha Wildner #define MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL (0x00000000) 379*fd501800SSascha Wildner #define MPI2_SAS_EXPAND_PGAD_FORM_HNDL_PHY_NUM (0x10000000) 380*fd501800SSascha Wildner #define MPI2_SAS_EXPAND_PGAD_FORM_HNDL (0x20000000) 381*fd501800SSascha Wildner 382*fd501800SSascha Wildner #define MPI2_SAS_EXPAND_PGAD_HANDLE_MASK (0x0000FFFF) 383*fd501800SSascha Wildner #define MPI2_SAS_EXPAND_PGAD_PHYNUM_MASK (0x00FF0000) 384*fd501800SSascha Wildner #define MPI2_SAS_EXPAND_PGAD_PHYNUM_SHIFT (16) 385*fd501800SSascha Wildner 386*fd501800SSascha Wildner 387*fd501800SSascha Wildner /* SAS Device PageAddress format */ 388*fd501800SSascha Wildner #define MPI2_SAS_DEVICE_PGAD_FORM_MASK (0xF0000000) 389*fd501800SSascha Wildner #define MPI2_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 390*fd501800SSascha Wildner #define MPI2_SAS_DEVICE_PGAD_FORM_HANDLE (0x20000000) 391*fd501800SSascha Wildner 392*fd501800SSascha Wildner #define MPI2_SAS_DEVICE_PGAD_HANDLE_MASK (0x0000FFFF) 393*fd501800SSascha Wildner 394*fd501800SSascha Wildner 395*fd501800SSascha Wildner /* SAS PHY PageAddress format */ 396*fd501800SSascha Wildner #define MPI2_SAS_PHY_PGAD_FORM_MASK (0xF0000000) 397*fd501800SSascha Wildner #define MPI2_SAS_PHY_PGAD_FORM_PHY_NUMBER (0x00000000) 398*fd501800SSascha Wildner #define MPI2_SAS_PHY_PGAD_FORM_PHY_TBL_INDEX (0x10000000) 399*fd501800SSascha Wildner 400*fd501800SSascha Wildner #define MPI2_SAS_PHY_PGAD_PHY_NUMBER_MASK (0x000000FF) 401*fd501800SSascha Wildner #define MPI2_SAS_PHY_PGAD_PHY_TBL_INDEX_MASK (0x0000FFFF) 402*fd501800SSascha Wildner 403*fd501800SSascha Wildner 404*fd501800SSascha Wildner /* SAS Port PageAddress format */ 405*fd501800SSascha Wildner #define MPI2_SASPORT_PGAD_FORM_MASK (0xF0000000) 406*fd501800SSascha Wildner #define MPI2_SASPORT_PGAD_FORM_GET_NEXT_PORT (0x00000000) 407*fd501800SSascha Wildner #define MPI2_SASPORT_PGAD_FORM_PORT_NUM (0x10000000) 408*fd501800SSascha Wildner 409*fd501800SSascha Wildner #define MPI2_SASPORT_PGAD_PORTNUMBER_MASK (0x00000FFF) 410*fd501800SSascha Wildner 411*fd501800SSascha Wildner 412*fd501800SSascha Wildner /* SAS Enclosure PageAddress format */ 413*fd501800SSascha Wildner #define MPI2_SAS_ENCLOS_PGAD_FORM_MASK (0xF0000000) 414*fd501800SSascha Wildner #define MPI2_SAS_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 415*fd501800SSascha Wildner #define MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE (0x10000000) 416*fd501800SSascha Wildner 417*fd501800SSascha Wildner #define MPI2_SAS_ENCLOS_PGAD_HANDLE_MASK (0x0000FFFF) 418*fd501800SSascha Wildner 419*fd501800SSascha Wildner /* Enclosure PageAddress format */ 420*fd501800SSascha Wildner #define MPI26_ENCLOS_PGAD_FORM_MASK (0xF0000000) 421*fd501800SSascha Wildner #define MPI26_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 422*fd501800SSascha Wildner #define MPI26_ENCLOS_PGAD_FORM_HANDLE (0x10000000) 423*fd501800SSascha Wildner 424*fd501800SSascha Wildner #define MPI26_ENCLOS_PGAD_HANDLE_MASK (0x0000FFFF) 425*fd501800SSascha Wildner 426*fd501800SSascha Wildner /* RAID Configuration PageAddress format */ 427*fd501800SSascha Wildner #define MPI2_RAID_PGAD_FORM_MASK (0xF0000000) 428*fd501800SSascha Wildner #define MPI2_RAID_PGAD_FORM_GET_NEXT_CONFIGNUM (0x00000000) 429*fd501800SSascha Wildner #define MPI2_RAID_PGAD_FORM_CONFIGNUM (0x10000000) 430*fd501800SSascha Wildner #define MPI2_RAID_PGAD_FORM_ACTIVE_CONFIG (0x20000000) 431*fd501800SSascha Wildner 432*fd501800SSascha Wildner #define MPI2_RAID_PGAD_CONFIGNUM_MASK (0x000000FF) 433*fd501800SSascha Wildner 434*fd501800SSascha Wildner 435*fd501800SSascha Wildner /* Driver Persistent Mapping PageAddress format */ 436*fd501800SSascha Wildner #define MPI2_DPM_PGAD_FORM_MASK (0xF0000000) 437*fd501800SSascha Wildner #define MPI2_DPM_PGAD_FORM_ENTRY_RANGE (0x00000000) 438*fd501800SSascha Wildner 439*fd501800SSascha Wildner #define MPI2_DPM_PGAD_ENTRY_COUNT_MASK (0x0FFF0000) 440*fd501800SSascha Wildner #define MPI2_DPM_PGAD_ENTRY_COUNT_SHIFT (16) 441*fd501800SSascha Wildner #define MPI2_DPM_PGAD_START_ENTRY_MASK (0x0000FFFF) 442*fd501800SSascha Wildner 443*fd501800SSascha Wildner 444*fd501800SSascha Wildner /* Ethernet PageAddress format */ 445*fd501800SSascha Wildner #define MPI2_ETHERNET_PGAD_FORM_MASK (0xF0000000) 446*fd501800SSascha Wildner #define MPI2_ETHERNET_PGAD_FORM_IF_NUM (0x00000000) 447*fd501800SSascha Wildner 448*fd501800SSascha Wildner #define MPI2_ETHERNET_PGAD_IF_NUMBER_MASK (0x000000FF) 449*fd501800SSascha Wildner 450*fd501800SSascha Wildner 451*fd501800SSascha Wildner /* PCIe Switch PageAddress format */ 452*fd501800SSascha Wildner #define MPI26_PCIE_SWITCH_PGAD_FORM_MASK (0xF0000000) 453*fd501800SSascha Wildner #define MPI26_PCIE_SWITCH_PGAD_FORM_GET_NEXT_HNDL (0x00000000) 454*fd501800SSascha Wildner #define MPI26_PCIE_SWITCH_PGAD_FORM_HNDL_PORTNUM (0x10000000) 455*fd501800SSascha Wildner #define MPI26_PCIE_SWITCH_EXPAND_PGAD_FORM_HNDL (0x20000000) 456*fd501800SSascha Wildner 457*fd501800SSascha Wildner #define MPI26_PCIE_SWITCH_PGAD_HANDLE_MASK (0x0000FFFF) 458*fd501800SSascha Wildner #define MPI26_PCIE_SWITCH_PGAD_PORTNUM_MASK (0x00FF0000) 459*fd501800SSascha Wildner #define MPI26_PCIE_SWITCH_PGAD_PORTNUM_SHIFT (16) 460*fd501800SSascha Wildner 461*fd501800SSascha Wildner 462*fd501800SSascha Wildner /* PCIe Device PageAddress format */ 463*fd501800SSascha Wildner #define MPI26_PCIE_DEVICE_PGAD_FORM_MASK (0xF0000000) 464*fd501800SSascha Wildner #define MPI26_PCIE_DEVICE_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 465*fd501800SSascha Wildner #define MPI26_PCIE_DEVICE_PGAD_FORM_HANDLE (0x20000000) 466*fd501800SSascha Wildner 467*fd501800SSascha Wildner #define MPI26_PCIE_DEVICE_PGAD_HANDLE_MASK (0x0000FFFF) 468*fd501800SSascha Wildner 469*fd501800SSascha Wildner /* PCIe Link PageAddress format */ 470*fd501800SSascha Wildner #define MPI26_PCIE_LINK_PGAD_FORM_MASK (0xF0000000) 471*fd501800SSascha Wildner #define MPI26_PCIE_LINK_PGAD_FORM_GET_NEXT_LINK (0x00000000) 472*fd501800SSascha Wildner #define MPI26_PCIE_LINK_PGAD_FORM_LINK_NUM (0x10000000) 473*fd501800SSascha Wildner 474*fd501800SSascha Wildner #define MPI26_PCIE_DEVICE_PGAD_LINKNUM_MASK (0x000000FF) 475*fd501800SSascha Wildner 476*fd501800SSascha Wildner 477*fd501800SSascha Wildner 478*fd501800SSascha Wildner /**************************************************************************** 479*fd501800SSascha Wildner * Configuration messages 480*fd501800SSascha Wildner ****************************************************************************/ 481*fd501800SSascha Wildner 482*fd501800SSascha Wildner /* Configuration Request Message */ 483*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_REQUEST 484*fd501800SSascha Wildner { 485*fd501800SSascha Wildner U8 Action; /* 0x00 */ 486*fd501800SSascha Wildner U8 SGLFlags; /* 0x01 */ 487*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 488*fd501800SSascha Wildner U8 Function; /* 0x03 */ 489*fd501800SSascha Wildner U16 ExtPageLength; /* 0x04 */ 490*fd501800SSascha Wildner U8 ExtPageType; /* 0x06 */ 491*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 492*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 493*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 494*fd501800SSascha Wildner U16 Reserved1; /* 0x0A */ 495*fd501800SSascha Wildner U8 Reserved2; /* 0x0C */ 496*fd501800SSascha Wildner U8 ProxyVF_ID; /* 0x0D */ 497*fd501800SSascha Wildner U16 Reserved4; /* 0x0E */ 498*fd501800SSascha Wildner U32 Reserved3; /* 0x10 */ 499*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x14 */ 500*fd501800SSascha Wildner U32 PageAddress; /* 0x18 */ 501*fd501800SSascha Wildner MPI2_SGE_IO_UNION PageBufferSGE; /* 0x1C */ 502*fd501800SSascha Wildner } MPI2_CONFIG_REQUEST, MPI2_POINTER PTR_MPI2_CONFIG_REQUEST, 503*fd501800SSascha Wildner Mpi2ConfigRequest_t, MPI2_POINTER pMpi2ConfigRequest_t; 504*fd501800SSascha Wildner 505*fd501800SSascha Wildner /* values for the Action field */ 506*fd501800SSascha Wildner #define MPI2_CONFIG_ACTION_PAGE_HEADER (0x00) 507*fd501800SSascha Wildner #define MPI2_CONFIG_ACTION_PAGE_READ_CURRENT (0x01) 508*fd501800SSascha Wildner #define MPI2_CONFIG_ACTION_PAGE_WRITE_CURRENT (0x02) 509*fd501800SSascha Wildner #define MPI2_CONFIG_ACTION_PAGE_DEFAULT (0x03) 510*fd501800SSascha Wildner #define MPI2_CONFIG_ACTION_PAGE_WRITE_NVRAM (0x04) 511*fd501800SSascha Wildner #define MPI2_CONFIG_ACTION_PAGE_READ_DEFAULT (0x05) 512*fd501800SSascha Wildner #define MPI2_CONFIG_ACTION_PAGE_READ_NVRAM (0x06) 513*fd501800SSascha Wildner #define MPI2_CONFIG_ACTION_PAGE_GET_CHANGEABLE (0x07) 514*fd501800SSascha Wildner 515*fd501800SSascha Wildner /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ 516*fd501800SSascha Wildner 517*fd501800SSascha Wildner 518*fd501800SSascha Wildner /* Config Reply Message */ 519*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_REPLY 520*fd501800SSascha Wildner { 521*fd501800SSascha Wildner U8 Action; /* 0x00 */ 522*fd501800SSascha Wildner U8 SGLFlags; /* 0x01 */ 523*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 524*fd501800SSascha Wildner U8 Function; /* 0x03 */ 525*fd501800SSascha Wildner U16 ExtPageLength; /* 0x04 */ 526*fd501800SSascha Wildner U8 ExtPageType; /* 0x06 */ 527*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 528*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 529*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 530*fd501800SSascha Wildner U16 Reserved1; /* 0x0A */ 531*fd501800SSascha Wildner U16 Reserved2; /* 0x0C */ 532*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 533*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 534*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x14 */ 535*fd501800SSascha Wildner } MPI2_CONFIG_REPLY, MPI2_POINTER PTR_MPI2_CONFIG_REPLY, 536*fd501800SSascha Wildner Mpi2ConfigReply_t, MPI2_POINTER pMpi2ConfigReply_t; 537*fd501800SSascha Wildner 538*fd501800SSascha Wildner 539*fd501800SSascha Wildner 540*fd501800SSascha Wildner /***************************************************************************** 541*fd501800SSascha Wildner * 542*fd501800SSascha Wildner * C o n f i g u r a t i o n P a g e s 543*fd501800SSascha Wildner * 544*fd501800SSascha Wildner *****************************************************************************/ 545*fd501800SSascha Wildner 546*fd501800SSascha Wildner /**************************************************************************** 547*fd501800SSascha Wildner * Manufacturing Config pages 548*fd501800SSascha Wildner ****************************************************************************/ 549*fd501800SSascha Wildner 550*fd501800SSascha Wildner #define MPI2_MFGPAGE_VENDORID_LSI (0x1000) 551*fd501800SSascha Wildner 552*fd501800SSascha Wildner /* MPI v2.0 SAS products */ 553*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2004 (0x0070) 554*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2008 (0x0072) 555*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2108_1 (0x0074) 556*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2108_2 (0x0076) 557*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2108_3 (0x0077) 558*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2116_1 (0x0064) 559*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2116_2 (0x0065) 560*fd501800SSascha Wildner 561*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SSS6200 (0x007E) 562*fd501800SSascha Wildner 563*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2208_1 (0x0080) 564*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2208_2 (0x0081) 565*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2208_3 (0x0082) 566*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2208_4 (0x0083) 567*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2208_5 (0x0084) 568*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2208_6 (0x0085) 569*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2308_1 (0x0086) 570*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2308_2 (0x0087) 571*fd501800SSascha Wildner #define MPI2_MFGPAGE_DEVID_SAS2308_3 (0x006E) 572*fd501800SSascha Wildner 573*fd501800SSascha Wildner /* MPI v2.5 SAS products */ 574*fd501800SSascha Wildner #define MPI25_MFGPAGE_DEVID_SAS3004 (0x0096) 575*fd501800SSascha Wildner #define MPI25_MFGPAGE_DEVID_SAS3008 (0x0097) 576*fd501800SSascha Wildner #define MPI25_MFGPAGE_DEVID_SAS3108_1 (0x0090) 577*fd501800SSascha Wildner #define MPI25_MFGPAGE_DEVID_SAS3108_2 (0x0091) 578*fd501800SSascha Wildner #define MPI25_MFGPAGE_DEVID_SAS3108_5 (0x0094) 579*fd501800SSascha Wildner #define MPI25_MFGPAGE_DEVID_SAS3108_6 (0x0095) 580*fd501800SSascha Wildner 581*fd501800SSascha Wildner /* MPI v2.6 SAS Products */ 582*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3216 (0x00C9) 583*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3224 (0x00C4) 584*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3316_1 (0x00C5) 585*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3316_2 (0x00C6) 586*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3316_3 (0x00C7) 587*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3316_4 (0x00C8) 588*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3324_1 (0x00C0) 589*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3324_2 (0x00C1) 590*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3324_3 (0x00C2) 591*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3324_4 (0x00C3) 592*fd501800SSascha Wildner 593*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3516 (0x00AA) 594*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3516_1 (0x00AB) 595*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3416 (0x00AC) 596*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3508 (0x00AD) 597*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3508_1 (0x00AE) 598*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3408 (0x00AF) 599*fd501800SSascha Wildner 600*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3716 (0x00D0) 601*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3616 (0x00D1) 602*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS3708 (0x00D2) 603*fd501800SSascha Wildner 604*fd501800SSascha Wildner #define MPI26_MFGPAGE_DEVID_SAS4008 (0x00A1) 605*fd501800SSascha Wildner 606*fd501800SSascha Wildner 607*fd501800SSascha Wildner /* Manufacturing Page 0 */ 608*fd501800SSascha Wildner 609*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_0 610*fd501800SSascha Wildner { 611*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 612*fd501800SSascha Wildner U8 ChipName[16]; /* 0x04 */ 613*fd501800SSascha Wildner U8 ChipRevision[8]; /* 0x14 */ 614*fd501800SSascha Wildner U8 BoardName[16]; /* 0x1C */ 615*fd501800SSascha Wildner U8 BoardAssembly[16]; /* 0x2C */ 616*fd501800SSascha Wildner U8 BoardTracerNumber[16]; /* 0x3C */ 617*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_0, 618*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_0, 619*fd501800SSascha Wildner Mpi2ManufacturingPage0_t, MPI2_POINTER pMpi2ManufacturingPage0_t; 620*fd501800SSascha Wildner 621*fd501800SSascha Wildner #define MPI2_MANUFACTURING0_PAGEVERSION (0x00) 622*fd501800SSascha Wildner 623*fd501800SSascha Wildner 624*fd501800SSascha Wildner /* Manufacturing Page 1 */ 625*fd501800SSascha Wildner 626*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_1 627*fd501800SSascha Wildner { 628*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 629*fd501800SSascha Wildner U8 VPD[256]; /* 0x04 */ 630*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_1, 631*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_1, 632*fd501800SSascha Wildner Mpi2ManufacturingPage1_t, MPI2_POINTER pMpi2ManufacturingPage1_t; 633*fd501800SSascha Wildner 634*fd501800SSascha Wildner #define MPI2_MANUFACTURING1_PAGEVERSION (0x00) 635*fd501800SSascha Wildner 636*fd501800SSascha Wildner 637*fd501800SSascha Wildner typedef struct _MPI2_CHIP_REVISION_ID 638*fd501800SSascha Wildner { 639*fd501800SSascha Wildner U16 DeviceID; /* 0x00 */ 640*fd501800SSascha Wildner U8 PCIRevisionID; /* 0x02 */ 641*fd501800SSascha Wildner U8 Reserved; /* 0x03 */ 642*fd501800SSascha Wildner } MPI2_CHIP_REVISION_ID, MPI2_POINTER PTR_MPI2_CHIP_REVISION_ID, 643*fd501800SSascha Wildner Mpi2ChipRevisionId_t, MPI2_POINTER pMpi2ChipRevisionId_t; 644*fd501800SSascha Wildner 645*fd501800SSascha Wildner 646*fd501800SSascha Wildner /* Manufacturing Page 2 */ 647*fd501800SSascha Wildner 648*fd501800SSascha Wildner /* 649*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 650*fd501800SSascha Wildner * one and check Header.PageLength at runtime. 651*fd501800SSascha Wildner */ 652*fd501800SSascha Wildner #ifndef MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS 653*fd501800SSascha Wildner #define MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS (1) 654*fd501800SSascha Wildner #endif 655*fd501800SSascha Wildner 656*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_2 657*fd501800SSascha Wildner { 658*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 659*fd501800SSascha Wildner MPI2_CHIP_REVISION_ID ChipId; /* 0x04 */ 660*fd501800SSascha Wildner U32 HwSettings[MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS];/* 0x08 */ 661*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_2, 662*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_2, 663*fd501800SSascha Wildner Mpi2ManufacturingPage2_t, MPI2_POINTER pMpi2ManufacturingPage2_t; 664*fd501800SSascha Wildner 665*fd501800SSascha Wildner #define MPI2_MANUFACTURING2_PAGEVERSION (0x00) 666*fd501800SSascha Wildner 667*fd501800SSascha Wildner 668*fd501800SSascha Wildner /* Manufacturing Page 3 */ 669*fd501800SSascha Wildner 670*fd501800SSascha Wildner /* 671*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 672*fd501800SSascha Wildner * one and check Header.PageLength at runtime. 673*fd501800SSascha Wildner */ 674*fd501800SSascha Wildner #ifndef MPI2_MAN_PAGE_3_INFO_WORDS 675*fd501800SSascha Wildner #define MPI2_MAN_PAGE_3_INFO_WORDS (1) 676*fd501800SSascha Wildner #endif 677*fd501800SSascha Wildner 678*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_3 679*fd501800SSascha Wildner { 680*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 681*fd501800SSascha Wildner MPI2_CHIP_REVISION_ID ChipId; /* 0x04 */ 682*fd501800SSascha Wildner U32 Info[MPI2_MAN_PAGE_3_INFO_WORDS];/* 0x08 */ 683*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_3, 684*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_3, 685*fd501800SSascha Wildner Mpi2ManufacturingPage3_t, MPI2_POINTER pMpi2ManufacturingPage3_t; 686*fd501800SSascha Wildner 687*fd501800SSascha Wildner #define MPI2_MANUFACTURING3_PAGEVERSION (0x00) 688*fd501800SSascha Wildner 689*fd501800SSascha Wildner 690*fd501800SSascha Wildner /* Manufacturing Page 4 */ 691*fd501800SSascha Wildner 692*fd501800SSascha Wildner typedef struct _MPI2_MANPAGE4_PWR_SAVE_SETTINGS 693*fd501800SSascha Wildner { 694*fd501800SSascha Wildner U8 PowerSaveFlags; /* 0x00 */ 695*fd501800SSascha Wildner U8 InternalOperationsSleepTime; /* 0x01 */ 696*fd501800SSascha Wildner U8 InternalOperationsRunTime; /* 0x02 */ 697*fd501800SSascha Wildner U8 HostIdleTime; /* 0x03 */ 698*fd501800SSascha Wildner } MPI2_MANPAGE4_PWR_SAVE_SETTINGS, 699*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_MANPAGE4_PWR_SAVE_SETTINGS, 700*fd501800SSascha Wildner Mpi2ManPage4PwrSaveSettings_t, MPI2_POINTER pMpi2ManPage4PwrSaveSettings_t; 701*fd501800SSascha Wildner 702*fd501800SSascha Wildner /* defines for the PowerSaveFlags field */ 703*fd501800SSascha Wildner #define MPI2_MANPAGE4_MASK_POWERSAVE_MODE (0x03) 704*fd501800SSascha Wildner #define MPI2_MANPAGE4_POWERSAVE_MODE_DISABLED (0x00) 705*fd501800SSascha Wildner #define MPI2_MANPAGE4_CUSTOM_POWERSAVE_MODE (0x01) 706*fd501800SSascha Wildner #define MPI2_MANPAGE4_FULL_POWERSAVE_MODE (0x02) 707*fd501800SSascha Wildner 708*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_4 709*fd501800SSascha Wildner { 710*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 711*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 712*fd501800SSascha Wildner U32 Flags; /* 0x08 */ 713*fd501800SSascha Wildner U8 InquirySize; /* 0x0C */ 714*fd501800SSascha Wildner U8 Reserved2; /* 0x0D */ 715*fd501800SSascha Wildner U16 Reserved3; /* 0x0E */ 716*fd501800SSascha Wildner U8 InquiryData[56]; /* 0x10 */ 717*fd501800SSascha Wildner U32 RAID0VolumeSettings; /* 0x48 */ 718*fd501800SSascha Wildner U32 RAID1EVolumeSettings; /* 0x4C */ 719*fd501800SSascha Wildner U32 RAID1VolumeSettings; /* 0x50 */ 720*fd501800SSascha Wildner U32 RAID10VolumeSettings; /* 0x54 */ 721*fd501800SSascha Wildner U32 Reserved4; /* 0x58 */ 722*fd501800SSascha Wildner U32 Reserved5; /* 0x5C */ 723*fd501800SSascha Wildner MPI2_MANPAGE4_PWR_SAVE_SETTINGS PowerSaveSettings; /* 0x60 */ 724*fd501800SSascha Wildner U8 MaxOCEDisks; /* 0x64 */ 725*fd501800SSascha Wildner U8 ResyncRate; /* 0x65 */ 726*fd501800SSascha Wildner U16 DataScrubDuration; /* 0x66 */ 727*fd501800SSascha Wildner U8 MaxHotSpares; /* 0x68 */ 728*fd501800SSascha Wildner U8 MaxPhysDisksPerVol; /* 0x69 */ 729*fd501800SSascha Wildner U8 MaxPhysDisks; /* 0x6A */ 730*fd501800SSascha Wildner U8 MaxVolumes; /* 0x6B */ 731*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_4, 732*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_4, 733*fd501800SSascha Wildner Mpi2ManufacturingPage4_t, MPI2_POINTER pMpi2ManufacturingPage4_t; 734*fd501800SSascha Wildner 735*fd501800SSascha Wildner #define MPI2_MANUFACTURING4_PAGEVERSION (0x0A) 736*fd501800SSascha Wildner 737*fd501800SSascha Wildner /* Manufacturing Page 4 Flags field */ 738*fd501800SSascha Wildner #define MPI2_MANPAGE4_METADATA_SIZE_MASK (0x00030000) 739*fd501800SSascha Wildner #define MPI2_MANPAGE4_METADATA_512MB (0x00000000) 740*fd501800SSascha Wildner 741*fd501800SSascha Wildner #define MPI2_MANPAGE4_MIX_SSD_SAS_SATA (0x00008000) 742*fd501800SSascha Wildner #define MPI2_MANPAGE4_MIX_SSD_AND_NON_SSD (0x00004000) 743*fd501800SSascha Wildner #define MPI2_MANPAGE4_HIDE_PHYSDISK_NON_IR (0x00002000) 744*fd501800SSascha Wildner 745*fd501800SSascha Wildner #define MPI2_MANPAGE4_MASK_PHYSDISK_COERCION (0x00001C00) 746*fd501800SSascha Wildner #define MPI2_MANPAGE4_PHYSDISK_COERCION_1GB (0x00000000) 747*fd501800SSascha Wildner #define MPI2_MANPAGE4_PHYSDISK_128MB_COERCION (0x00000400) 748*fd501800SSascha Wildner #define MPI2_MANPAGE4_PHYSDISK_ADAPTIVE_COERCION (0x00000800) 749*fd501800SSascha Wildner #define MPI2_MANPAGE4_PHYSDISK_ZERO_COERCION (0x00000C00) 750*fd501800SSascha Wildner 751*fd501800SSascha Wildner #define MPI2_MANPAGE4_MASK_BAD_BLOCK_MARKING (0x00000300) 752*fd501800SSascha Wildner #define MPI2_MANPAGE4_DEFAULT_BAD_BLOCK_MARKING (0x00000000) 753*fd501800SSascha Wildner #define MPI2_MANPAGE4_TABLE_BAD_BLOCK_MARKING (0x00000100) 754*fd501800SSascha Wildner #define MPI2_MANPAGE4_WRITE_LONG_BAD_BLOCK_MARKING (0x00000200) 755*fd501800SSascha Wildner 756*fd501800SSascha Wildner #define MPI2_MANPAGE4_FORCE_OFFLINE_FAILOVER (0x00000080) 757*fd501800SSascha Wildner #define MPI2_MANPAGE4_RAID10_DISABLE (0x00000040) 758*fd501800SSascha Wildner #define MPI2_MANPAGE4_RAID1E_DISABLE (0x00000020) 759*fd501800SSascha Wildner #define MPI2_MANPAGE4_RAID1_DISABLE (0x00000010) 760*fd501800SSascha Wildner #define MPI2_MANPAGE4_RAID0_DISABLE (0x00000008) 761*fd501800SSascha Wildner #define MPI2_MANPAGE4_IR_MODEPAGE8_DISABLE (0x00000004) 762*fd501800SSascha Wildner #define MPI2_MANPAGE4_IM_RESYNC_CACHE_ENABLE (0x00000002) 763*fd501800SSascha Wildner #define MPI2_MANPAGE4_IR_NO_MIX_SAS_SATA (0x00000001) 764*fd501800SSascha Wildner 765*fd501800SSascha Wildner 766*fd501800SSascha Wildner /* Manufacturing Page 5 */ 767*fd501800SSascha Wildner 768*fd501800SSascha Wildner /* 769*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 770*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 771*fd501800SSascha Wildner */ 772*fd501800SSascha Wildner #ifndef MPI2_MAN_PAGE_5_PHY_ENTRIES 773*fd501800SSascha Wildner #define MPI2_MAN_PAGE_5_PHY_ENTRIES (1) 774*fd501800SSascha Wildner #endif 775*fd501800SSascha Wildner 776*fd501800SSascha Wildner typedef struct _MPI2_MANUFACTURING5_ENTRY 777*fd501800SSascha Wildner { 778*fd501800SSascha Wildner U64 WWID; /* 0x00 */ 779*fd501800SSascha Wildner U64 DeviceName; /* 0x08 */ 780*fd501800SSascha Wildner } MPI2_MANUFACTURING5_ENTRY, MPI2_POINTER PTR_MPI2_MANUFACTURING5_ENTRY, 781*fd501800SSascha Wildner Mpi2Manufacturing5Entry_t, MPI2_POINTER pMpi2Manufacturing5Entry_t; 782*fd501800SSascha Wildner 783*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_5 784*fd501800SSascha Wildner { 785*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 786*fd501800SSascha Wildner U8 NumPhys; /* 0x04 */ 787*fd501800SSascha Wildner U8 Reserved1; /* 0x05 */ 788*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 789*fd501800SSascha Wildner U32 Reserved3; /* 0x08 */ 790*fd501800SSascha Wildner U32 Reserved4; /* 0x0C */ 791*fd501800SSascha Wildner MPI2_MANUFACTURING5_ENTRY Phy[MPI2_MAN_PAGE_5_PHY_ENTRIES];/* 0x08 */ 792*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_5, 793*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_5, 794*fd501800SSascha Wildner Mpi2ManufacturingPage5_t, MPI2_POINTER pMpi2ManufacturingPage5_t; 795*fd501800SSascha Wildner 796*fd501800SSascha Wildner #define MPI2_MANUFACTURING5_PAGEVERSION (0x03) 797*fd501800SSascha Wildner 798*fd501800SSascha Wildner 799*fd501800SSascha Wildner /* Manufacturing Page 6 */ 800*fd501800SSascha Wildner 801*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_6 802*fd501800SSascha Wildner { 803*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 804*fd501800SSascha Wildner U32 ProductSpecificInfo;/* 0x04 */ 805*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_6, 806*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_6, 807*fd501800SSascha Wildner Mpi2ManufacturingPage6_t, MPI2_POINTER pMpi2ManufacturingPage6_t; 808*fd501800SSascha Wildner 809*fd501800SSascha Wildner #define MPI2_MANUFACTURING6_PAGEVERSION (0x00) 810*fd501800SSascha Wildner 811*fd501800SSascha Wildner 812*fd501800SSascha Wildner /* Manufacturing Page 7 */ 813*fd501800SSascha Wildner 814*fd501800SSascha Wildner typedef struct _MPI2_MANPAGE7_CONNECTOR_INFO 815*fd501800SSascha Wildner { 816*fd501800SSascha Wildner U32 Pinout; /* 0x00 */ 817*fd501800SSascha Wildner U8 Connector[16]; /* 0x04 */ 818*fd501800SSascha Wildner U8 Location; /* 0x14 */ 819*fd501800SSascha Wildner U8 ReceptacleID; /* 0x15 */ 820*fd501800SSascha Wildner U16 Slot; /* 0x16 */ 821*fd501800SSascha Wildner U32 Reserved2; /* 0x18 */ 822*fd501800SSascha Wildner } MPI2_MANPAGE7_CONNECTOR_INFO, MPI2_POINTER PTR_MPI2_MANPAGE7_CONNECTOR_INFO, 823*fd501800SSascha Wildner Mpi2ManPage7ConnectorInfo_t, MPI2_POINTER pMpi2ManPage7ConnectorInfo_t; 824*fd501800SSascha Wildner 825*fd501800SSascha Wildner /* defines for the Pinout field */ 826*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_LANE_MASK (0x0000FF00) 827*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_LANE_SHIFT (8) 828*fd501800SSascha Wildner 829*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_TYPE_MASK (0x000000FF) 830*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_TYPE_UNKNOWN (0x00) 831*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SATA_SINGLE (0x01) 832*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8482 (0x02) 833*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8486 (0x03) 834*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8484 (0x04) 835*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8087 (0x05) 836*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8643_4I (0x06) 837*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8643_8I (0x07) 838*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8470 (0x08) 839*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8088 (0x09) 840*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8644_4X (0x0A) 841*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8644_8X (0x0B) 842*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8644_16X (0x0C) 843*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8436 (0x0D) 844*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8088_A (0x0E) 845*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8643_16i (0x0F) 846*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8654_4i (0x10) 847*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8654_8i (0x11) 848*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8611_4i (0x12) 849*fd501800SSascha Wildner #define MPI2_MANPAGE7_PINOUT_SFF_8611_8i (0x13) 850*fd501800SSascha Wildner 851*fd501800SSascha Wildner /* defines for the Location field */ 852*fd501800SSascha Wildner #define MPI2_MANPAGE7_LOCATION_UNKNOWN (0x01) 853*fd501800SSascha Wildner #define MPI2_MANPAGE7_LOCATION_INTERNAL (0x02) 854*fd501800SSascha Wildner #define MPI2_MANPAGE7_LOCATION_EXTERNAL (0x04) 855*fd501800SSascha Wildner #define MPI2_MANPAGE7_LOCATION_SWITCHABLE (0x08) 856*fd501800SSascha Wildner #define MPI2_MANPAGE7_LOCATION_AUTO (0x10) 857*fd501800SSascha Wildner #define MPI2_MANPAGE7_LOCATION_NOT_PRESENT (0x20) 858*fd501800SSascha Wildner #define MPI2_MANPAGE7_LOCATION_NOT_CONNECTED (0x80) 859*fd501800SSascha Wildner 860*fd501800SSascha Wildner /* defines for the Slot field */ 861*fd501800SSascha Wildner #define MPI2_MANPAGE7_SLOT_UNKNOWN (0xFFFF) 862*fd501800SSascha Wildner 863*fd501800SSascha Wildner /* 864*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 865*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 866*fd501800SSascha Wildner */ 867*fd501800SSascha Wildner #ifndef MPI2_MANPAGE7_CONNECTOR_INFO_MAX 868*fd501800SSascha Wildner #define MPI2_MANPAGE7_CONNECTOR_INFO_MAX (1) 869*fd501800SSascha Wildner #endif 870*fd501800SSascha Wildner 871*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_7 872*fd501800SSascha Wildner { 873*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 874*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 875*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 876*fd501800SSascha Wildner U32 Flags; /* 0x0C */ 877*fd501800SSascha Wildner U8 EnclosureName[16]; /* 0x10 */ 878*fd501800SSascha Wildner U8 NumPhys; /* 0x20 */ 879*fd501800SSascha Wildner U8 Reserved3; /* 0x21 */ 880*fd501800SSascha Wildner U16 Reserved4; /* 0x22 */ 881*fd501800SSascha Wildner MPI2_MANPAGE7_CONNECTOR_INFO ConnectorInfo[MPI2_MANPAGE7_CONNECTOR_INFO_MAX]; /* 0x24 */ 882*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_7, 883*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_7, 884*fd501800SSascha Wildner Mpi2ManufacturingPage7_t, MPI2_POINTER pMpi2ManufacturingPage7_t; 885*fd501800SSascha Wildner 886*fd501800SSascha Wildner #define MPI2_MANUFACTURING7_PAGEVERSION (0x01) 887*fd501800SSascha Wildner 888*fd501800SSascha Wildner /* defines for the Flags field */ 889*fd501800SSascha Wildner #define MPI2_MANPAGE7_FLAG_BASE_ENCLOSURE_LEVEL (0x00000008) 890*fd501800SSascha Wildner #define MPI2_MANPAGE7_FLAG_EVENTREPLAY_SLOT_ORDER (0x00000002) 891*fd501800SSascha Wildner #define MPI2_MANPAGE7_FLAG_USE_SLOT_INFO (0x00000001) 892*fd501800SSascha Wildner 893*fd501800SSascha Wildner 894*fd501800SSascha Wildner /* 895*fd501800SSascha Wildner * Generic structure to use for product-specific manufacturing pages 896*fd501800SSascha Wildner * (currently Manufacturing Page 8 through Manufacturing Page 31). 897*fd501800SSascha Wildner */ 898*fd501800SSascha Wildner 899*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_MAN_PS 900*fd501800SSascha Wildner { 901*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 902*fd501800SSascha Wildner U32 ProductSpecificInfo;/* 0x04 */ 903*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_MAN_PS, 904*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_PS, 905*fd501800SSascha Wildner Mpi2ManufacturingPagePS_t, MPI2_POINTER pMpi2ManufacturingPagePS_t; 906*fd501800SSascha Wildner 907*fd501800SSascha Wildner #define MPI2_MANUFACTURING8_PAGEVERSION (0x00) 908*fd501800SSascha Wildner #define MPI2_MANUFACTURING9_PAGEVERSION (0x00) 909*fd501800SSascha Wildner #define MPI2_MANUFACTURING10_PAGEVERSION (0x00) 910*fd501800SSascha Wildner #define MPI2_MANUFACTURING11_PAGEVERSION (0x00) 911*fd501800SSascha Wildner #define MPI2_MANUFACTURING12_PAGEVERSION (0x00) 912*fd501800SSascha Wildner #define MPI2_MANUFACTURING13_PAGEVERSION (0x00) 913*fd501800SSascha Wildner #define MPI2_MANUFACTURING14_PAGEVERSION (0x00) 914*fd501800SSascha Wildner #define MPI2_MANUFACTURING15_PAGEVERSION (0x00) 915*fd501800SSascha Wildner #define MPI2_MANUFACTURING16_PAGEVERSION (0x00) 916*fd501800SSascha Wildner #define MPI2_MANUFACTURING17_PAGEVERSION (0x00) 917*fd501800SSascha Wildner #define MPI2_MANUFACTURING18_PAGEVERSION (0x00) 918*fd501800SSascha Wildner #define MPI2_MANUFACTURING19_PAGEVERSION (0x00) 919*fd501800SSascha Wildner #define MPI2_MANUFACTURING20_PAGEVERSION (0x00) 920*fd501800SSascha Wildner #define MPI2_MANUFACTURING21_PAGEVERSION (0x00) 921*fd501800SSascha Wildner #define MPI2_MANUFACTURING22_PAGEVERSION (0x00) 922*fd501800SSascha Wildner #define MPI2_MANUFACTURING23_PAGEVERSION (0x00) 923*fd501800SSascha Wildner #define MPI2_MANUFACTURING24_PAGEVERSION (0x00) 924*fd501800SSascha Wildner #define MPI2_MANUFACTURING25_PAGEVERSION (0x00) 925*fd501800SSascha Wildner #define MPI2_MANUFACTURING26_PAGEVERSION (0x00) 926*fd501800SSascha Wildner #define MPI2_MANUFACTURING27_PAGEVERSION (0x00) 927*fd501800SSascha Wildner #define MPI2_MANUFACTURING28_PAGEVERSION (0x00) 928*fd501800SSascha Wildner #define MPI2_MANUFACTURING29_PAGEVERSION (0x00) 929*fd501800SSascha Wildner #define MPI2_MANUFACTURING30_PAGEVERSION (0x00) 930*fd501800SSascha Wildner #define MPI2_MANUFACTURING31_PAGEVERSION (0x00) 931*fd501800SSascha Wildner 932*fd501800SSascha Wildner 933*fd501800SSascha Wildner /**************************************************************************** 934*fd501800SSascha Wildner * IO Unit Config Pages 935*fd501800SSascha Wildner ****************************************************************************/ 936*fd501800SSascha Wildner 937*fd501800SSascha Wildner /* IO Unit Page 0 */ 938*fd501800SSascha Wildner 939*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_0 940*fd501800SSascha Wildner { 941*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 942*fd501800SSascha Wildner U64 UniqueValue; /* 0x04 */ 943*fd501800SSascha Wildner MPI2_VERSION_UNION NvdataVersionDefault; /* 0x08 */ 944*fd501800SSascha Wildner MPI2_VERSION_UNION NvdataVersionPersistent; /* 0x0A */ 945*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_0, 946*fd501800SSascha Wildner Mpi2IOUnitPage0_t, MPI2_POINTER pMpi2IOUnitPage0_t; 947*fd501800SSascha Wildner 948*fd501800SSascha Wildner #define MPI2_IOUNITPAGE0_PAGEVERSION (0x02) 949*fd501800SSascha Wildner 950*fd501800SSascha Wildner 951*fd501800SSascha Wildner /* IO Unit Page 1 */ 952*fd501800SSascha Wildner 953*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_1 954*fd501800SSascha Wildner { 955*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 956*fd501800SSascha Wildner U32 Flags; /* 0x04 */ 957*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_1, 958*fd501800SSascha Wildner Mpi2IOUnitPage1_t, MPI2_POINTER pMpi2IOUnitPage1_t; 959*fd501800SSascha Wildner 960*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_PAGEVERSION (0x04) 961*fd501800SSascha Wildner 962*fd501800SSascha Wildner /* IO Unit Page 1 Flags defines */ 963*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_ATA_SECURITY_FREEZE_LOCK (0x00004000) 964*fd501800SSascha Wildner #define MPI25_IOUNITPAGE1_NEW_DEVICE_FAST_PATH_DISABLE (0x00002000) 965*fd501800SSascha Wildner #define MPI25_IOUNITPAGE1_DISABLE_FAST_PATH (0x00001000) 966*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_ENABLE_HOST_BASED_DISCOVERY (0x00000800) 967*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_MASK_SATA_WRITE_CACHE (0x00000600) 968*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_SATA_WRITE_CACHE_SHIFT (9) 969*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_ENABLE_SATA_WRITE_CACHE (0x00000000) 970*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_DISABLE_SATA_WRITE_CACHE (0x00000200) 971*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_UNCHANGED_SATA_WRITE_CACHE (0x00000400) 972*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_NATIVE_COMMAND_Q_DISABLE (0x00000100) 973*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_DISABLE_IR (0x00000040) 974*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_DISABLE_TASK_SET_FULL_HANDLING (0x00000020) 975*fd501800SSascha Wildner #define MPI2_IOUNITPAGE1_IR_USE_STATIC_VOLUME_ID (0x00000004) 976*fd501800SSascha Wildner 977*fd501800SSascha Wildner 978*fd501800SSascha Wildner /* IO Unit Page 3 */ 979*fd501800SSascha Wildner 980*fd501800SSascha Wildner /* 981*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 982*fd501800SSascha Wildner * one and check the value returned for GPIOCount at runtime. 983*fd501800SSascha Wildner */ 984*fd501800SSascha Wildner #ifndef MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX 985*fd501800SSascha Wildner #define MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX (1) 986*fd501800SSascha Wildner #endif 987*fd501800SSascha Wildner 988*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_3 989*fd501800SSascha Wildner { 990*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 991*fd501800SSascha Wildner U8 GPIOCount; /* 0x04 */ 992*fd501800SSascha Wildner U8 Reserved1; /* 0x05 */ 993*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 994*fd501800SSascha Wildner U16 GPIOVal[MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX];/* 0x08 */ 995*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_3, 996*fd501800SSascha Wildner Mpi2IOUnitPage3_t, MPI2_POINTER pMpi2IOUnitPage3_t; 997*fd501800SSascha Wildner 998*fd501800SSascha Wildner #define MPI2_IOUNITPAGE3_PAGEVERSION (0x01) 999*fd501800SSascha Wildner 1000*fd501800SSascha Wildner /* defines for IO Unit Page 3 GPIOVal field */ 1001*fd501800SSascha Wildner #define MPI2_IOUNITPAGE3_GPIO_FUNCTION_MASK (0xFFFC) 1002*fd501800SSascha Wildner #define MPI2_IOUNITPAGE3_GPIO_FUNCTION_SHIFT (2) 1003*fd501800SSascha Wildner #define MPI2_IOUNITPAGE3_GPIO_SETTING_OFF (0x0000) 1004*fd501800SSascha Wildner #define MPI2_IOUNITPAGE3_GPIO_SETTING_ON (0x0001) 1005*fd501800SSascha Wildner 1006*fd501800SSascha Wildner 1007*fd501800SSascha Wildner /* IO Unit Page 5 */ 1008*fd501800SSascha Wildner 1009*fd501800SSascha Wildner /* 1010*fd501800SSascha Wildner * Upper layer code (drivers, utilities, etc.) should leave this define set to 1011*fd501800SSascha Wildner * one and check the value returned for NumDmaEngines at runtime. 1012*fd501800SSascha Wildner */ 1013*fd501800SSascha Wildner #ifndef MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES 1014*fd501800SSascha Wildner #define MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES (1) 1015*fd501800SSascha Wildner #endif 1016*fd501800SSascha Wildner 1017*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_5 1018*fd501800SSascha Wildner { 1019*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1020*fd501800SSascha Wildner U64 RaidAcceleratorBufferBaseAddress; /* 0x04 */ 1021*fd501800SSascha Wildner U64 RaidAcceleratorBufferSize; /* 0x0C */ 1022*fd501800SSascha Wildner U64 RaidAcceleratorControlBaseAddress; /* 0x14 */ 1023*fd501800SSascha Wildner U8 RAControlSize; /* 0x1C */ 1024*fd501800SSascha Wildner U8 NumDmaEngines; /* 0x1D */ 1025*fd501800SSascha Wildner U8 RAMinControlSize; /* 0x1E */ 1026*fd501800SSascha Wildner U8 RAMaxControlSize; /* 0x1F */ 1027*fd501800SSascha Wildner U32 Reserved1; /* 0x20 */ 1028*fd501800SSascha Wildner U32 Reserved2; /* 0x24 */ 1029*fd501800SSascha Wildner U32 Reserved3; /* 0x28 */ 1030*fd501800SSascha Wildner U32 DmaEngineCapabilities[MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES]; /* 0x2C */ 1031*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_5, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_5, 1032*fd501800SSascha Wildner Mpi2IOUnitPage5_t, MPI2_POINTER pMpi2IOUnitPage5_t; 1033*fd501800SSascha Wildner 1034*fd501800SSascha Wildner #define MPI2_IOUNITPAGE5_PAGEVERSION (0x00) 1035*fd501800SSascha Wildner 1036*fd501800SSascha Wildner /* defines for IO Unit Page 5 DmaEngineCapabilities field */ 1037*fd501800SSascha Wildner #define MPI2_IOUNITPAGE5_DMA_CAP_MASK_MAX_REQUESTS (0xFFFF0000) 1038*fd501800SSascha Wildner #define MPI2_IOUNITPAGE5_DMA_CAP_SHIFT_MAX_REQUESTS (16) 1039*fd501800SSascha Wildner 1040*fd501800SSascha Wildner #define MPI2_IOUNITPAGE5_DMA_CAP_EEDP (0x0008) 1041*fd501800SSascha Wildner #define MPI2_IOUNITPAGE5_DMA_CAP_PARITY_GENERATION (0x0004) 1042*fd501800SSascha Wildner #define MPI2_IOUNITPAGE5_DMA_CAP_HASHING (0x0002) 1043*fd501800SSascha Wildner #define MPI2_IOUNITPAGE5_DMA_CAP_ENCRYPTION (0x0001) 1044*fd501800SSascha Wildner 1045*fd501800SSascha Wildner 1046*fd501800SSascha Wildner /* IO Unit Page 6 */ 1047*fd501800SSascha Wildner 1048*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_6 1049*fd501800SSascha Wildner { 1050*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1051*fd501800SSascha Wildner U16 Flags; /* 0x04 */ 1052*fd501800SSascha Wildner U8 RAHostControlSize; /* 0x06 */ 1053*fd501800SSascha Wildner U8 Reserved0; /* 0x07 */ 1054*fd501800SSascha Wildner U64 RaidAcceleratorHostControlBaseAddress; /* 0x08 */ 1055*fd501800SSascha Wildner U32 Reserved1; /* 0x10 */ 1056*fd501800SSascha Wildner U32 Reserved2; /* 0x14 */ 1057*fd501800SSascha Wildner U32 Reserved3; /* 0x18 */ 1058*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_6, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_6, 1059*fd501800SSascha Wildner Mpi2IOUnitPage6_t, MPI2_POINTER pMpi2IOUnitPage6_t; 1060*fd501800SSascha Wildner 1061*fd501800SSascha Wildner #define MPI2_IOUNITPAGE6_PAGEVERSION (0x00) 1062*fd501800SSascha Wildner 1063*fd501800SSascha Wildner /* defines for IO Unit Page 6 Flags field */ 1064*fd501800SSascha Wildner #define MPI2_IOUNITPAGE6_FLAGS_ENABLE_RAID_ACCELERATOR (0x0001) 1065*fd501800SSascha Wildner 1066*fd501800SSascha Wildner 1067*fd501800SSascha Wildner /* IO Unit Page 7 */ 1068*fd501800SSascha Wildner 1069*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_7 1070*fd501800SSascha Wildner { 1071*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1072*fd501800SSascha Wildner U8 CurrentPowerMode; /* 0x04 */ /* reserved in MPI 2.0 */ 1073*fd501800SSascha Wildner U8 PreviousPowerMode; /* 0x05 */ /* reserved in MPI 2.0 */ 1074*fd501800SSascha Wildner U8 PCIeWidth; /* 0x06 */ 1075*fd501800SSascha Wildner U8 PCIeSpeed; /* 0x07 */ 1076*fd501800SSascha Wildner U32 ProcessorState; /* 0x08 */ 1077*fd501800SSascha Wildner U32 PowerManagementCapabilities; /* 0x0C */ 1078*fd501800SSascha Wildner U16 IOCTemperature; /* 0x10 */ 1079*fd501800SSascha Wildner U8 IOCTemperatureUnits; /* 0x12 */ 1080*fd501800SSascha Wildner U8 IOCSpeed; /* 0x13 */ 1081*fd501800SSascha Wildner U16 BoardTemperature; /* 0x14 */ 1082*fd501800SSascha Wildner U8 BoardTemperatureUnits; /* 0x16 */ 1083*fd501800SSascha Wildner U8 Reserved3; /* 0x17 */ 1084*fd501800SSascha Wildner U32 BoardPowerRequirement; /* 0x18 */ /* reserved prior to MPI v2.6 */ 1085*fd501800SSascha Wildner U32 PCISlotPowerAllocation; /* 0x1C */ /* reserved prior to MPI v2.6 */ 1086*fd501800SSascha Wildner U8 Flags; /* 0x20 */ /* reserved prior to MPI v2.6 */ 1087*fd501800SSascha Wildner U8 Reserved6; /* 0x21 */ 1088*fd501800SSascha Wildner U16 Reserved7; /* 0x22 */ 1089*fd501800SSascha Wildner U32 Reserved8; /* 0x24 */ 1090*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_7, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_7, 1091*fd501800SSascha Wildner Mpi2IOUnitPage7_t, MPI2_POINTER pMpi2IOUnitPage7_t; 1092*fd501800SSascha Wildner 1093*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PAGEVERSION (0x05) 1094*fd501800SSascha Wildner 1095*fd501800SSascha Wildner /* defines for IO Unit Page 7 CurrentPowerMode and PreviousPowerMode fields */ 1096*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_INIT_MASK (0xC0) 1097*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_INIT_UNAVAILABLE (0x00) 1098*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_INIT_HOST (0x40) 1099*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_INIT_IO_UNIT (0x80) 1100*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_INIT_PCIE_DPA (0xC0) 1101*fd501800SSascha Wildner 1102*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_MODE_MASK (0x07) 1103*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_MODE_UNAVAILABLE (0x00) 1104*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_MODE_UNKNOWN (0x01) 1105*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_MODE_FULL_POWER (0x04) 1106*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_MODE_REDUCED_POWER (0x05) 1107*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PM_MODE_STANDBY (0x06) 1108*fd501800SSascha Wildner 1109*fd501800SSascha Wildner 1110*fd501800SSascha Wildner /* defines for IO Unit Page 7 PCIeWidth field */ 1111*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X1 (0x01) 1112*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X2 (0x02) 1113*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X4 (0x04) 1114*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X8 (0x08) 1115*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X16 (0x10) 1116*fd501800SSascha Wildner 1117*fd501800SSascha Wildner /* defines for IO Unit Page 7 PCIeSpeed field */ 1118*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_SPEED_2_5_GBPS (0x00) 1119*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_SPEED_5_0_GBPS (0x01) 1120*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_SPEED_8_0_GBPS (0x02) 1121*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PCIE_SPEED_16_0_GBPS (0x03) 1122*fd501800SSascha Wildner 1123*fd501800SSascha Wildner /* defines for IO Unit Page 7 ProcessorState field */ 1124*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PSTATE_MASK_SECOND (0x0000000F) 1125*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PSTATE_SHIFT_SECOND (0) 1126*fd501800SSascha Wildner 1127*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PSTATE_NOT_PRESENT (0x00) 1128*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PSTATE_DISABLED (0x01) 1129*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PSTATE_ENABLED (0x02) 1130*fd501800SSascha Wildner 1131*fd501800SSascha Wildner /* defines for IO Unit Page 7 PowerManagementCapabilities field */ 1132*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_DPA_FULL_PWR_MODE (0x00400000) 1133*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_DPA_REDUCED_PWR_MODE (0x00200000) 1134*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_DPA_STANDBY_MODE (0x00100000) 1135*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_HOST_FULL_PWR_MODE (0x00040000) 1136*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_HOST_REDUCED_PWR_MODE (0x00020000) 1137*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_HOST_STANDBY_MODE (0x00010000) 1138*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_IO_FULL_PWR_MODE (0x00004000) 1139*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_IO_REDUCED_PWR_MODE (0x00002000) 1140*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_IO_STANDBY_MODE (0x00001000) 1141*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_HOST_12_5_PCT_IOCSPEED (0x00000400) 1142*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_HOST_25_0_PCT_IOCSPEED (0x00000200) 1143*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_HOST_50_0_PCT_IOCSPEED (0x00000100) 1144*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_IO_12_5_PCT_IOCSPEED (0x00000040) 1145*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_IO_25_0_PCT_IOCSPEED (0x00000020) 1146*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_IO_50_0_PCT_IOCSPEED (0x00000010) 1147*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_HOST_WIDTH_CHANGE_PCIE (0x00000008) /* obsolete */ 1148*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_HOST_SPEED_CHANGE_PCIE (0x00000004) /* obsolete */ 1149*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_IO_WIDTH_CHANGE_PCIE (0x00000002) /* obsolete */ 1150*fd501800SSascha Wildner #define MPI25_IOUNITPAGE7_PMCAP_IO_SPEED_CHANGE_PCIE (0x00000001) /* obsolete */ 1151*fd501800SSascha Wildner 1152*fd501800SSascha Wildner /* obsolete names for the PowerManagementCapabilities bits (above) */ 1153*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_12_5_PCT_IOCSPEED (0x00000400) 1154*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_25_0_PCT_IOCSPEED (0x00000200) 1155*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_50_0_PCT_IOCSPEED (0x00000100) 1156*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_PCIE_WIDTH_CHANGE (0x00000008) /* obsolete */ 1157*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_PMCAP_PCIE_SPEED_CHANGE (0x00000004) /* obsolete */ 1158*fd501800SSascha Wildner 1159*fd501800SSascha Wildner 1160*fd501800SSascha Wildner /* defines for IO Unit Page 7 IOCTemperatureUnits field */ 1161*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_IOC_TEMP_NOT_PRESENT (0x00) 1162*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_IOC_TEMP_FAHRENHEIT (0x01) 1163*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_IOC_TEMP_CELSIUS (0x02) 1164*fd501800SSascha Wildner 1165*fd501800SSascha Wildner /* defines for IO Unit Page 7 IOCSpeed field */ 1166*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_IOC_SPEED_FULL (0x01) 1167*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_IOC_SPEED_HALF (0x02) 1168*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_IOC_SPEED_QUARTER (0x04) 1169*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_IOC_SPEED_EIGHTH (0x08) 1170*fd501800SSascha Wildner 1171*fd501800SSascha Wildner /* defines for IO Unit Page 7 BoardTemperatureUnits field */ 1172*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_BOARD_TEMP_NOT_PRESENT (0x00) 1173*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_BOARD_TEMP_FAHRENHEIT (0x01) 1174*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_BOARD_TEMP_CELSIUS (0x02) 1175*fd501800SSascha Wildner 1176*fd501800SSascha Wildner /* defines for IO Unit Page 7 Flags field */ 1177*fd501800SSascha Wildner #define MPI2_IOUNITPAGE7_FLAG_CABLE_POWER_EXC (0x01) 1178*fd501800SSascha Wildner 1179*fd501800SSascha Wildner 1180*fd501800SSascha Wildner /* IO Unit Page 8 */ 1181*fd501800SSascha Wildner 1182*fd501800SSascha Wildner #define MPI2_IOUNIT8_NUM_THRESHOLDS (4) 1183*fd501800SSascha Wildner 1184*fd501800SSascha Wildner typedef struct _MPI2_IOUNIT8_SENSOR 1185*fd501800SSascha Wildner { 1186*fd501800SSascha Wildner U16 Flags; /* 0x00 */ 1187*fd501800SSascha Wildner U16 Reserved1; /* 0x02 */ 1188*fd501800SSascha Wildner U16 Threshold[MPI2_IOUNIT8_NUM_THRESHOLDS]; /* 0x04 */ 1189*fd501800SSascha Wildner U32 Reserved2; /* 0x0C */ 1190*fd501800SSascha Wildner U32 Reserved3; /* 0x10 */ 1191*fd501800SSascha Wildner U32 Reserved4; /* 0x14 */ 1192*fd501800SSascha Wildner } MPI2_IOUNIT8_SENSOR, MPI2_POINTER PTR_MPI2_IOUNIT8_SENSOR, 1193*fd501800SSascha Wildner Mpi2IOUnit8Sensor_t, MPI2_POINTER pMpi2IOUnit8Sensor_t; 1194*fd501800SSascha Wildner 1195*fd501800SSascha Wildner /* defines for IO Unit Page 8 Sensor Flags field */ 1196*fd501800SSascha Wildner #define MPI2_IOUNIT8_SENSOR_FLAGS_T3_ENABLE (0x0008) 1197*fd501800SSascha Wildner #define MPI2_IOUNIT8_SENSOR_FLAGS_T2_ENABLE (0x0004) 1198*fd501800SSascha Wildner #define MPI2_IOUNIT8_SENSOR_FLAGS_T1_ENABLE (0x0002) 1199*fd501800SSascha Wildner #define MPI2_IOUNIT8_SENSOR_FLAGS_T0_ENABLE (0x0001) 1200*fd501800SSascha Wildner 1201*fd501800SSascha Wildner /* 1202*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1203*fd501800SSascha Wildner * one and check the value returned for NumSensors at runtime. 1204*fd501800SSascha Wildner */ 1205*fd501800SSascha Wildner #ifndef MPI2_IOUNITPAGE8_SENSOR_ENTRIES 1206*fd501800SSascha Wildner #define MPI2_IOUNITPAGE8_SENSOR_ENTRIES (1) 1207*fd501800SSascha Wildner #endif 1208*fd501800SSascha Wildner 1209*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_8 1210*fd501800SSascha Wildner { 1211*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1212*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 1213*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 1214*fd501800SSascha Wildner U8 NumSensors; /* 0x0C */ 1215*fd501800SSascha Wildner U8 PollingInterval; /* 0x0D */ 1216*fd501800SSascha Wildner U16 Reserved3; /* 0x0E */ 1217*fd501800SSascha Wildner MPI2_IOUNIT8_SENSOR Sensor[MPI2_IOUNITPAGE8_SENSOR_ENTRIES];/* 0x10 */ 1218*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_8, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_8, 1219*fd501800SSascha Wildner Mpi2IOUnitPage8_t, MPI2_POINTER pMpi2IOUnitPage8_t; 1220*fd501800SSascha Wildner 1221*fd501800SSascha Wildner #define MPI2_IOUNITPAGE8_PAGEVERSION (0x00) 1222*fd501800SSascha Wildner 1223*fd501800SSascha Wildner 1224*fd501800SSascha Wildner /* IO Unit Page 9 */ 1225*fd501800SSascha Wildner 1226*fd501800SSascha Wildner typedef struct _MPI2_IOUNIT9_SENSOR 1227*fd501800SSascha Wildner { 1228*fd501800SSascha Wildner U16 CurrentTemperature; /* 0x00 */ 1229*fd501800SSascha Wildner U16 Reserved1; /* 0x02 */ 1230*fd501800SSascha Wildner U8 Flags; /* 0x04 */ 1231*fd501800SSascha Wildner U8 Reserved2; /* 0x05 */ 1232*fd501800SSascha Wildner U16 Reserved3; /* 0x06 */ 1233*fd501800SSascha Wildner U32 Reserved4; /* 0x08 */ 1234*fd501800SSascha Wildner U32 Reserved5; /* 0x0C */ 1235*fd501800SSascha Wildner } MPI2_IOUNIT9_SENSOR, MPI2_POINTER PTR_MPI2_IOUNIT9_SENSOR, 1236*fd501800SSascha Wildner Mpi2IOUnit9Sensor_t, MPI2_POINTER pMpi2IOUnit9Sensor_t; 1237*fd501800SSascha Wildner 1238*fd501800SSascha Wildner /* defines for IO Unit Page 9 Sensor Flags field */ 1239*fd501800SSascha Wildner #define MPI2_IOUNIT9_SENSOR_FLAGS_TEMP_VALID (0x01) 1240*fd501800SSascha Wildner 1241*fd501800SSascha Wildner /* 1242*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1243*fd501800SSascha Wildner * one and check the value returned for NumSensors at runtime. 1244*fd501800SSascha Wildner */ 1245*fd501800SSascha Wildner #ifndef MPI2_IOUNITPAGE9_SENSOR_ENTRIES 1246*fd501800SSascha Wildner #define MPI2_IOUNITPAGE9_SENSOR_ENTRIES (1) 1247*fd501800SSascha Wildner #endif 1248*fd501800SSascha Wildner 1249*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_9 1250*fd501800SSascha Wildner { 1251*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1252*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 1253*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 1254*fd501800SSascha Wildner U8 NumSensors; /* 0x0C */ 1255*fd501800SSascha Wildner U8 Reserved4; /* 0x0D */ 1256*fd501800SSascha Wildner U16 Reserved3; /* 0x0E */ 1257*fd501800SSascha Wildner MPI2_IOUNIT9_SENSOR Sensor[MPI2_IOUNITPAGE9_SENSOR_ENTRIES];/* 0x10 */ 1258*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_9, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_9, 1259*fd501800SSascha Wildner Mpi2IOUnitPage9_t, MPI2_POINTER pMpi2IOUnitPage9_t; 1260*fd501800SSascha Wildner 1261*fd501800SSascha Wildner #define MPI2_IOUNITPAGE9_PAGEVERSION (0x00) 1262*fd501800SSascha Wildner 1263*fd501800SSascha Wildner 1264*fd501800SSascha Wildner /* IO Unit Page 10 */ 1265*fd501800SSascha Wildner 1266*fd501800SSascha Wildner typedef struct _MPI2_IOUNIT10_FUNCTION 1267*fd501800SSascha Wildner { 1268*fd501800SSascha Wildner U8 CreditPercent; /* 0x00 */ 1269*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1270*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 1271*fd501800SSascha Wildner } MPI2_IOUNIT10_FUNCTION, MPI2_POINTER PTR_MPI2_IOUNIT10_FUNCTION, 1272*fd501800SSascha Wildner Mpi2IOUnit10Function_t, MPI2_POINTER pMpi2IOUnit10Function_t; 1273*fd501800SSascha Wildner 1274*fd501800SSascha Wildner /* 1275*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1276*fd501800SSascha Wildner * one and check the value returned for NumFunctions at runtime. 1277*fd501800SSascha Wildner */ 1278*fd501800SSascha Wildner #ifndef MPI2_IOUNITPAGE10_FUNCTION_ENTRIES 1279*fd501800SSascha Wildner #define MPI2_IOUNITPAGE10_FUNCTION_ENTRIES (1) 1280*fd501800SSascha Wildner #endif 1281*fd501800SSascha Wildner 1282*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_10 1283*fd501800SSascha Wildner { 1284*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1285*fd501800SSascha Wildner U8 NumFunctions; /* 0x04 */ 1286*fd501800SSascha Wildner U8 Reserved1; /* 0x05 */ 1287*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 1288*fd501800SSascha Wildner U32 Reserved3; /* 0x08 */ 1289*fd501800SSascha Wildner U32 Reserved4; /* 0x0C */ 1290*fd501800SSascha Wildner MPI2_IOUNIT10_FUNCTION Function[MPI2_IOUNITPAGE10_FUNCTION_ENTRIES]; /* 0x10 */ 1291*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IO_UNIT_10, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_10, 1292*fd501800SSascha Wildner Mpi2IOUnitPage10_t, MPI2_POINTER pMpi2IOUnitPage10_t; 1293*fd501800SSascha Wildner 1294*fd501800SSascha Wildner #define MPI2_IOUNITPAGE10_PAGEVERSION (0x01) 1295*fd501800SSascha Wildner 1296*fd501800SSascha Wildner 1297*fd501800SSascha Wildner /* IO Unit Page 11 (for MPI v2.6 and later) */ 1298*fd501800SSascha Wildner 1299*fd501800SSascha Wildner typedef struct _MPI26_IOUNIT11_SPINUP_GROUP 1300*fd501800SSascha Wildner { 1301*fd501800SSascha Wildner U8 MaxTargetSpinup; /* 0x00 */ 1302*fd501800SSascha Wildner U8 SpinupDelay; /* 0x01 */ 1303*fd501800SSascha Wildner U8 SpinupFlags; /* 0x02 */ 1304*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 1305*fd501800SSascha Wildner } MPI26_IOUNIT11_SPINUP_GROUP, MPI2_POINTER PTR_MPI26_IOUNIT11_SPINUP_GROUP, 1306*fd501800SSascha Wildner Mpi26IOUnit11SpinupGroup_t, MPI2_POINTER pMpi26IOUnit11SpinupGroup_t; 1307*fd501800SSascha Wildner 1308*fd501800SSascha Wildner /* defines for IO Unit Page 11 SpinupFlags */ 1309*fd501800SSascha Wildner #define MPI26_IOUNITPAGE11_SPINUP_DISABLE_FLAG (0x01) 1310*fd501800SSascha Wildner 1311*fd501800SSascha Wildner 1312*fd501800SSascha Wildner /* 1313*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1314*fd501800SSascha Wildner * four and check the value returned for NumPhys at runtime. 1315*fd501800SSascha Wildner */ 1316*fd501800SSascha Wildner #ifndef MPI26_IOUNITPAGE11_PHY_MAX 1317*fd501800SSascha Wildner #define MPI26_IOUNITPAGE11_PHY_MAX (4) 1318*fd501800SSascha Wildner #endif 1319*fd501800SSascha Wildner 1320*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_IO_UNIT_11 1321*fd501800SSascha Wildner { 1322*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1323*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 1324*fd501800SSascha Wildner MPI26_IOUNIT11_SPINUP_GROUP SpinupGroupParameters[4]; /* 0x08 */ 1325*fd501800SSascha Wildner U32 Reserved2; /* 0x18 */ 1326*fd501800SSascha Wildner U32 Reserved3; /* 0x1C */ 1327*fd501800SSascha Wildner U32 Reserved4; /* 0x20 */ 1328*fd501800SSascha Wildner U8 BootDeviceWaitTime; /* 0x24 */ 1329*fd501800SSascha Wildner U8 SATADeviceWaitTime; /* 0x25 */ 1330*fd501800SSascha Wildner U16 Reserved6; /* 0x26 */ 1331*fd501800SSascha Wildner U8 NumPhys; /* 0x28 */ 1332*fd501800SSascha Wildner U8 PEInitialSpinupDelay; /* 0x29 */ 1333*fd501800SSascha Wildner U8 PEReplyDelay; /* 0x2A */ 1334*fd501800SSascha Wildner U8 Flags; /* 0x2B */ 1335*fd501800SSascha Wildner U8 PHY[MPI26_IOUNITPAGE11_PHY_MAX];/* 0x2C */ 1336*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_IO_UNIT_11, 1337*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_CONFIG_PAGE_IO_UNIT_11, 1338*fd501800SSascha Wildner Mpi26IOUnitPage11_t, MPI2_POINTER pMpi26IOUnitPage11_t; 1339*fd501800SSascha Wildner 1340*fd501800SSascha Wildner #define MPI26_IOUNITPAGE11_PAGEVERSION (0x00) 1341*fd501800SSascha Wildner 1342*fd501800SSascha Wildner /* defines for Flags field */ 1343*fd501800SSascha Wildner #define MPI26_IOUNITPAGE11_FLAGS_AUTO_PORTENABLE (0x01) 1344*fd501800SSascha Wildner 1345*fd501800SSascha Wildner /* defines for PHY field */ 1346*fd501800SSascha Wildner #define MPI26_IOUNITPAGE11_PHY_SPINUP_GROUP_MASK (0x03) 1347*fd501800SSascha Wildner 1348*fd501800SSascha Wildner 1349*fd501800SSascha Wildner 1350*fd501800SSascha Wildner /**************************************************************************** 1351*fd501800SSascha Wildner * IOC Config Pages 1352*fd501800SSascha Wildner ****************************************************************************/ 1353*fd501800SSascha Wildner 1354*fd501800SSascha Wildner /* IOC Page 0 */ 1355*fd501800SSascha Wildner 1356*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IOC_0 1357*fd501800SSascha Wildner { 1358*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1359*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 1360*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 1361*fd501800SSascha Wildner U16 VendorID; /* 0x0C */ 1362*fd501800SSascha Wildner U16 DeviceID; /* 0x0E */ 1363*fd501800SSascha Wildner U8 RevisionID; /* 0x10 */ 1364*fd501800SSascha Wildner U8 Reserved3; /* 0x11 */ 1365*fd501800SSascha Wildner U16 Reserved4; /* 0x12 */ 1366*fd501800SSascha Wildner U32 ClassCode; /* 0x14 */ 1367*fd501800SSascha Wildner U16 SubsystemVendorID; /* 0x18 */ 1368*fd501800SSascha Wildner U16 SubsystemID; /* 0x1A */ 1369*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IOC_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_0, 1370*fd501800SSascha Wildner Mpi2IOCPage0_t, MPI2_POINTER pMpi2IOCPage0_t; 1371*fd501800SSascha Wildner 1372*fd501800SSascha Wildner #define MPI2_IOCPAGE0_PAGEVERSION (0x02) 1373*fd501800SSascha Wildner 1374*fd501800SSascha Wildner 1375*fd501800SSascha Wildner /* IOC Page 1 */ 1376*fd501800SSascha Wildner 1377*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IOC_1 1378*fd501800SSascha Wildner { 1379*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1380*fd501800SSascha Wildner U32 Flags; /* 0x04 */ 1381*fd501800SSascha Wildner U32 CoalescingTimeout; /* 0x08 */ 1382*fd501800SSascha Wildner U8 CoalescingDepth; /* 0x0C */ 1383*fd501800SSascha Wildner U8 PCISlotNum; /* 0x0D */ 1384*fd501800SSascha Wildner U8 PCIBusNum; /* 0x0E */ 1385*fd501800SSascha Wildner U8 PCIDomainSegment; /* 0x0F */ 1386*fd501800SSascha Wildner U32 Reserved1; /* 0x10 */ 1387*fd501800SSascha Wildner U32 Reserved2; /* 0x14 */ 1388*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IOC_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_1, 1389*fd501800SSascha Wildner Mpi2IOCPage1_t, MPI2_POINTER pMpi2IOCPage1_t; 1390*fd501800SSascha Wildner 1391*fd501800SSascha Wildner #define MPI2_IOCPAGE1_PAGEVERSION (0x05) 1392*fd501800SSascha Wildner 1393*fd501800SSascha Wildner /* defines for IOC Page 1 Flags field */ 1394*fd501800SSascha Wildner #define MPI2_IOCPAGE1_REPLY_COALESCING (0x00000001) 1395*fd501800SSascha Wildner 1396*fd501800SSascha Wildner #define MPI2_IOCPAGE1_PCISLOTNUM_UNKNOWN (0xFF) 1397*fd501800SSascha Wildner #define MPI2_IOCPAGE1_PCIBUSNUM_UNKNOWN (0xFF) 1398*fd501800SSascha Wildner #define MPI2_IOCPAGE1_PCIDOMAIN_UNKNOWN (0xFF) 1399*fd501800SSascha Wildner 1400*fd501800SSascha Wildner /* IOC Page 6 */ 1401*fd501800SSascha Wildner 1402*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IOC_6 1403*fd501800SSascha Wildner { 1404*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1405*fd501800SSascha Wildner U32 CapabilitiesFlags; /* 0x04 */ 1406*fd501800SSascha Wildner U8 MaxDrivesRAID0; /* 0x08 */ 1407*fd501800SSascha Wildner U8 MaxDrivesRAID1; /* 0x09 */ 1408*fd501800SSascha Wildner U8 MaxDrivesRAID1E; /* 0x0A */ 1409*fd501800SSascha Wildner U8 MaxDrivesRAID10; /* 0x0B */ 1410*fd501800SSascha Wildner U8 MinDrivesRAID0; /* 0x0C */ 1411*fd501800SSascha Wildner U8 MinDrivesRAID1; /* 0x0D */ 1412*fd501800SSascha Wildner U8 MinDrivesRAID1E; /* 0x0E */ 1413*fd501800SSascha Wildner U8 MinDrivesRAID10; /* 0x0F */ 1414*fd501800SSascha Wildner U32 Reserved1; /* 0x10 */ 1415*fd501800SSascha Wildner U8 MaxGlobalHotSpares; /* 0x14 */ 1416*fd501800SSascha Wildner U8 MaxPhysDisks; /* 0x15 */ 1417*fd501800SSascha Wildner U8 MaxVolumes; /* 0x16 */ 1418*fd501800SSascha Wildner U8 MaxConfigs; /* 0x17 */ 1419*fd501800SSascha Wildner U8 MaxOCEDisks; /* 0x18 */ 1420*fd501800SSascha Wildner U8 Reserved2; /* 0x19 */ 1421*fd501800SSascha Wildner U16 Reserved3; /* 0x1A */ 1422*fd501800SSascha Wildner U32 SupportedStripeSizeMapRAID0; /* 0x1C */ 1423*fd501800SSascha Wildner U32 SupportedStripeSizeMapRAID1E; /* 0x20 */ 1424*fd501800SSascha Wildner U32 SupportedStripeSizeMapRAID10; /* 0x24 */ 1425*fd501800SSascha Wildner U32 Reserved4; /* 0x28 */ 1426*fd501800SSascha Wildner U32 Reserved5; /* 0x2C */ 1427*fd501800SSascha Wildner U16 DefaultMetadataSize; /* 0x30 */ 1428*fd501800SSascha Wildner U16 Reserved6; /* 0x32 */ 1429*fd501800SSascha Wildner U16 MaxBadBlockTableEntries; /* 0x34 */ 1430*fd501800SSascha Wildner U16 Reserved7; /* 0x36 */ 1431*fd501800SSascha Wildner U32 IRNvsramVersion; /* 0x38 */ 1432*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IOC_6, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_6, 1433*fd501800SSascha Wildner Mpi2IOCPage6_t, MPI2_POINTER pMpi2IOCPage6_t; 1434*fd501800SSascha Wildner 1435*fd501800SSascha Wildner #define MPI2_IOCPAGE6_PAGEVERSION (0x05) 1436*fd501800SSascha Wildner 1437*fd501800SSascha Wildner /* defines for IOC Page 6 CapabilitiesFlags */ 1438*fd501800SSascha Wildner #define MPI2_IOCPAGE6_CAP_FLAGS_4K_SECTORS_SUPPORT (0x00000020) 1439*fd501800SSascha Wildner #define MPI2_IOCPAGE6_CAP_FLAGS_RAID10_SUPPORT (0x00000010) 1440*fd501800SSascha Wildner #define MPI2_IOCPAGE6_CAP_FLAGS_RAID1_SUPPORT (0x00000008) 1441*fd501800SSascha Wildner #define MPI2_IOCPAGE6_CAP_FLAGS_RAID1E_SUPPORT (0x00000004) 1442*fd501800SSascha Wildner #define MPI2_IOCPAGE6_CAP_FLAGS_RAID0_SUPPORT (0x00000002) 1443*fd501800SSascha Wildner #define MPI2_IOCPAGE6_CAP_FLAGS_GLOBAL_HOT_SPARE (0x00000001) 1444*fd501800SSascha Wildner 1445*fd501800SSascha Wildner 1446*fd501800SSascha Wildner /* IOC Page 7 */ 1447*fd501800SSascha Wildner 1448*fd501800SSascha Wildner #define MPI2_IOCPAGE7_EVENTMASK_WORDS (4) 1449*fd501800SSascha Wildner 1450*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IOC_7 1451*fd501800SSascha Wildner { 1452*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1453*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 1454*fd501800SSascha Wildner U32 EventMasks[MPI2_IOCPAGE7_EVENTMASK_WORDS];/* 0x08 */ 1455*fd501800SSascha Wildner U16 SASBroadcastPrimitiveMasks; /* 0x18 */ 1456*fd501800SSascha Wildner U16 SASNotifyPrimitiveMasks; /* 0x1A */ 1457*fd501800SSascha Wildner U32 Reserved3; /* 0x1C */ 1458*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IOC_7, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_7, 1459*fd501800SSascha Wildner Mpi2IOCPage7_t, MPI2_POINTER pMpi2IOCPage7_t; 1460*fd501800SSascha Wildner 1461*fd501800SSascha Wildner #define MPI2_IOCPAGE7_PAGEVERSION (0x02) 1462*fd501800SSascha Wildner 1463*fd501800SSascha Wildner 1464*fd501800SSascha Wildner /* IOC Page 8 */ 1465*fd501800SSascha Wildner 1466*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_IOC_8 1467*fd501800SSascha Wildner { 1468*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1469*fd501800SSascha Wildner U8 NumDevsPerEnclosure; /* 0x04 */ 1470*fd501800SSascha Wildner U8 Reserved1; /* 0x05 */ 1471*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 1472*fd501800SSascha Wildner U16 MaxPersistentEntries; /* 0x08 */ 1473*fd501800SSascha Wildner U16 MaxNumPhysicalMappedIDs; /* 0x0A */ 1474*fd501800SSascha Wildner U16 Flags; /* 0x0C */ 1475*fd501800SSascha Wildner U16 Reserved3; /* 0x0E */ 1476*fd501800SSascha Wildner U16 IRVolumeMappingFlags; /* 0x10 */ 1477*fd501800SSascha Wildner U16 Reserved4; /* 0x12 */ 1478*fd501800SSascha Wildner U32 Reserved5; /* 0x14 */ 1479*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_IOC_8, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_8, 1480*fd501800SSascha Wildner Mpi2IOCPage8_t, MPI2_POINTER pMpi2IOCPage8_t; 1481*fd501800SSascha Wildner 1482*fd501800SSascha Wildner #define MPI2_IOCPAGE8_PAGEVERSION (0x00) 1483*fd501800SSascha Wildner 1484*fd501800SSascha Wildner /* defines for IOC Page 8 Flags field */ 1485*fd501800SSascha Wildner #define MPI2_IOCPAGE8_FLAGS_DA_START_SLOT_1 (0x00000020) 1486*fd501800SSascha Wildner #define MPI2_IOCPAGE8_FLAGS_RESERVED_TARGETID_0 (0x00000010) 1487*fd501800SSascha Wildner 1488*fd501800SSascha Wildner #define MPI2_IOCPAGE8_FLAGS_MASK_MAPPING_MODE (0x0000000E) 1489*fd501800SSascha Wildner #define MPI2_IOCPAGE8_FLAGS_DEVICE_PERSISTENCE_MAPPING (0x00000000) 1490*fd501800SSascha Wildner #define MPI2_IOCPAGE8_FLAGS_ENCLOSURE_SLOT_MAPPING (0x00000002) 1491*fd501800SSascha Wildner 1492*fd501800SSascha Wildner #define MPI2_IOCPAGE8_FLAGS_DISABLE_PERSISTENT_MAPPING (0x00000001) 1493*fd501800SSascha Wildner #define MPI2_IOCPAGE8_FLAGS_ENABLE_PERSISTENT_MAPPING (0x00000000) 1494*fd501800SSascha Wildner 1495*fd501800SSascha Wildner /* defines for IOC Page 8 IRVolumeMappingFlags */ 1496*fd501800SSascha Wildner #define MPI2_IOCPAGE8_IRFLAGS_MASK_VOLUME_MAPPING_MODE (0x00000003) 1497*fd501800SSascha Wildner #define MPI2_IOCPAGE8_IRFLAGS_LOW_VOLUME_MAPPING (0x00000000) 1498*fd501800SSascha Wildner #define MPI2_IOCPAGE8_IRFLAGS_HIGH_VOLUME_MAPPING (0x00000001) 1499*fd501800SSascha Wildner 1500*fd501800SSascha Wildner 1501*fd501800SSascha Wildner /**************************************************************************** 1502*fd501800SSascha Wildner * BIOS Config Pages 1503*fd501800SSascha Wildner ****************************************************************************/ 1504*fd501800SSascha Wildner 1505*fd501800SSascha Wildner /* BIOS Page 1 */ 1506*fd501800SSascha Wildner 1507*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_BIOS_1 1508*fd501800SSascha Wildner { 1509*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1510*fd501800SSascha Wildner U32 BiosOptions; /* 0x04 */ 1511*fd501800SSascha Wildner U32 IOCSettings; /* 0x08 */ 1512*fd501800SSascha Wildner U8 SSUTimeout; /* 0x0C */ 1513*fd501800SSascha Wildner U8 Reserved1; /* 0x0D */ 1514*fd501800SSascha Wildner U16 Reserved2; /* 0x0E */ 1515*fd501800SSascha Wildner U32 DeviceSettings; /* 0x10 */ 1516*fd501800SSascha Wildner U16 NumberOfDevices; /* 0x14 */ 1517*fd501800SSascha Wildner U16 UEFIVersion; /* 0x16 */ 1518*fd501800SSascha Wildner U16 IOTimeoutBlockDevicesNonRM; /* 0x18 */ 1519*fd501800SSascha Wildner U16 IOTimeoutSequential; /* 0x1A */ 1520*fd501800SSascha Wildner U16 IOTimeoutOther; /* 0x1C */ 1521*fd501800SSascha Wildner U16 IOTimeoutBlockDevicesRM; /* 0x1E */ 1522*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_BIOS_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_1, 1523*fd501800SSascha Wildner Mpi2BiosPage1_t, MPI2_POINTER pMpi2BiosPage1_t; 1524*fd501800SSascha Wildner 1525*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_PAGEVERSION (0x07) 1526*fd501800SSascha Wildner 1527*fd501800SSascha Wildner /* values for BIOS Page 1 BiosOptions field */ 1528*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_BOOT_LIST_ADD_ALT_BOOT_DEVICE (0x00008000) 1529*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_ADVANCED_CONFIG (0x00004000) 1530*fd501800SSascha Wildner 1531*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_PNS_MASK (0x00003800) 1532*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_PNS_PBDHL (0x00000000) 1533*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_PNS_ENCSLOSURE (0x00000800) 1534*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_PNS_LWWID (0x00001000) 1535*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_PNS_PSENS (0x00001800) 1536*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_PNS_ESPHY (0x00002000) 1537*fd501800SSascha Wildner 1538*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_X86_DISABLE_BIOS (0x00000400) 1539*fd501800SSascha Wildner 1540*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_MASK_REGISTRATION_UEFI_BSD (0x00000300) 1541*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_USE_BIT0_REGISTRATION_UEFI_BSD (0x00000000) 1542*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_FULL_REGISTRATION_UEFI_BSD (0x00000100) 1543*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_ADAPTER_REGISTRATION_UEFI_BSD (0x00000200) 1544*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_DISABLE_REGISTRATION_UEFI_BSD (0x00000300) 1545*fd501800SSascha Wildner 1546*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_MASK_OEM_ID (0x000000F0) 1547*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_LSI_OEM_ID (0x00000000) 1548*fd501800SSascha Wildner 1549*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_MASK_UEFI_HII_REGISTRATION (0x00000006) 1550*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_ENABLE_UEFI_HII (0x00000000) 1551*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_DISABLE_UEFI_HII (0x00000002) 1552*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_VERSION_CHECK_UEFI_HII (0x00000004) 1553*fd501800SSascha Wildner 1554*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_OPTIONS_DISABLE_BIOS (0x00000001) 1555*fd501800SSascha Wildner 1556*fd501800SSascha Wildner /* values for BIOS Page 1 IOCSettings field */ 1557*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_MASK_BOOT_PREFERENCE (0x00030000) 1558*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_ENCLOSURE_SLOT_BOOT (0x00000000) 1559*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_SAS_ADDRESS_BOOT (0x00010000) 1560*fd501800SSascha Wildner 1561*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_MASK_RM_SETTING (0x000000C0) 1562*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_NONE_RM_SETTING (0x00000000) 1563*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_BOOT_RM_SETTING (0x00000040) 1564*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_MEDIA_RM_SETTING (0x00000080) 1565*fd501800SSascha Wildner 1566*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_MASK_ADAPTER_SUPPORT (0x00000030) 1567*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_NO_SUPPORT (0x00000000) 1568*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_BIOS_SUPPORT (0x00000010) 1569*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_OS_SUPPORT (0x00000020) 1570*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_ALL_SUPPORT (0x00000030) 1571*fd501800SSascha Wildner 1572*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_IOCSET_ALTERNATE_CHS (0x00000008) 1573*fd501800SSascha Wildner 1574*fd501800SSascha Wildner /* values for BIOS Page 1 DeviceSettings field */ 1575*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_DEVSET_DISABLE_SMART_POLLING (0x00000010) 1576*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_DEVSET_DISABLE_SEQ_LUN (0x00000008) 1577*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_DEVSET_DISABLE_RM_LUN (0x00000004) 1578*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_DEVSET_DISABLE_NON_RM_LUN (0x00000002) 1579*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_DEVSET_DISABLE_OTHER_LUN (0x00000001) 1580*fd501800SSascha Wildner 1581*fd501800SSascha Wildner /* defines for BIOS Page 1 UEFIVersion field */ 1582*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_UEFI_VER_MAJOR_MASK (0xFF00) 1583*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_UEFI_VER_MAJOR_SHIFT (8) 1584*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_UEFI_VER_MINOR_MASK (0x00FF) 1585*fd501800SSascha Wildner #define MPI2_BIOSPAGE1_UEFI_VER_MINOR_SHIFT (0) 1586*fd501800SSascha Wildner 1587*fd501800SSascha Wildner 1588*fd501800SSascha Wildner 1589*fd501800SSascha Wildner /* BIOS Page 2 */ 1590*fd501800SSascha Wildner 1591*fd501800SSascha Wildner typedef struct _MPI2_BOOT_DEVICE_ADAPTER_ORDER 1592*fd501800SSascha Wildner { 1593*fd501800SSascha Wildner U32 Reserved1; /* 0x00 */ 1594*fd501800SSascha Wildner U32 Reserved2; /* 0x04 */ 1595*fd501800SSascha Wildner U32 Reserved3; /* 0x08 */ 1596*fd501800SSascha Wildner U32 Reserved4; /* 0x0C */ 1597*fd501800SSascha Wildner U32 Reserved5; /* 0x10 */ 1598*fd501800SSascha Wildner U32 Reserved6; /* 0x14 */ 1599*fd501800SSascha Wildner } MPI2_BOOT_DEVICE_ADAPTER_ORDER, 1600*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_BOOT_DEVICE_ADAPTER_ORDER, 1601*fd501800SSascha Wildner Mpi2BootDeviceAdapterOrder_t, MPI2_POINTER pMpi2BootDeviceAdapterOrder_t; 1602*fd501800SSascha Wildner 1603*fd501800SSascha Wildner typedef struct _MPI2_BOOT_DEVICE_SAS_WWID 1604*fd501800SSascha Wildner { 1605*fd501800SSascha Wildner U64 SASAddress; /* 0x00 */ 1606*fd501800SSascha Wildner U8 LUN[8]; /* 0x08 */ 1607*fd501800SSascha Wildner U32 Reserved1; /* 0x10 */ 1608*fd501800SSascha Wildner U32 Reserved2; /* 0x14 */ 1609*fd501800SSascha Wildner } MPI2_BOOT_DEVICE_SAS_WWID, MPI2_POINTER PTR_MPI2_BOOT_DEVICE_SAS_WWID, 1610*fd501800SSascha Wildner Mpi2BootDeviceSasWwid_t, MPI2_POINTER pMpi2BootDeviceSasWwid_t; 1611*fd501800SSascha Wildner 1612*fd501800SSascha Wildner typedef struct _MPI2_BOOT_DEVICE_ENCLOSURE_SLOT 1613*fd501800SSascha Wildner { 1614*fd501800SSascha Wildner U64 EnclosureLogicalID; /* 0x00 */ 1615*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 1616*fd501800SSascha Wildner U32 Reserved2; /* 0x0C */ 1617*fd501800SSascha Wildner U16 SlotNumber; /* 0x10 */ 1618*fd501800SSascha Wildner U16 Reserved3; /* 0x12 */ 1619*fd501800SSascha Wildner U32 Reserved4; /* 0x14 */ 1620*fd501800SSascha Wildner } MPI2_BOOT_DEVICE_ENCLOSURE_SLOT, 1621*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_BOOT_DEVICE_ENCLOSURE_SLOT, 1622*fd501800SSascha Wildner Mpi2BootDeviceEnclosureSlot_t, MPI2_POINTER pMpi2BootDeviceEnclosureSlot_t; 1623*fd501800SSascha Wildner 1624*fd501800SSascha Wildner typedef struct _MPI2_BOOT_DEVICE_DEVICE_NAME 1625*fd501800SSascha Wildner { 1626*fd501800SSascha Wildner U64 DeviceName; /* 0x00 */ 1627*fd501800SSascha Wildner U8 LUN[8]; /* 0x08 */ 1628*fd501800SSascha Wildner U32 Reserved1; /* 0x10 */ 1629*fd501800SSascha Wildner U32 Reserved2; /* 0x14 */ 1630*fd501800SSascha Wildner } MPI2_BOOT_DEVICE_DEVICE_NAME, MPI2_POINTER PTR_MPI2_BOOT_DEVICE_DEVICE_NAME, 1631*fd501800SSascha Wildner Mpi2BootDeviceDeviceName_t, MPI2_POINTER pMpi2BootDeviceDeviceName_t; 1632*fd501800SSascha Wildner 1633*fd501800SSascha Wildner typedef union _MPI2_MPI2_BIOSPAGE2_BOOT_DEVICE 1634*fd501800SSascha Wildner { 1635*fd501800SSascha Wildner MPI2_BOOT_DEVICE_ADAPTER_ORDER AdapterOrder; 1636*fd501800SSascha Wildner MPI2_BOOT_DEVICE_SAS_WWID SasWwid; 1637*fd501800SSascha Wildner MPI2_BOOT_DEVICE_ENCLOSURE_SLOT EnclosureSlot; 1638*fd501800SSascha Wildner MPI2_BOOT_DEVICE_DEVICE_NAME DeviceName; 1639*fd501800SSascha Wildner } MPI2_BIOSPAGE2_BOOT_DEVICE, MPI2_POINTER PTR_MPI2_BIOSPAGE2_BOOT_DEVICE, 1640*fd501800SSascha Wildner Mpi2BiosPage2BootDevice_t, MPI2_POINTER pMpi2BiosPage2BootDevice_t; 1641*fd501800SSascha Wildner 1642*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_BIOS_2 1643*fd501800SSascha Wildner { 1644*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1645*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 1646*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 1647*fd501800SSascha Wildner U32 Reserved3; /* 0x0C */ 1648*fd501800SSascha Wildner U32 Reserved4; /* 0x10 */ 1649*fd501800SSascha Wildner U32 Reserved5; /* 0x14 */ 1650*fd501800SSascha Wildner U32 Reserved6; /* 0x18 */ 1651*fd501800SSascha Wildner U8 ReqBootDeviceForm; /* 0x1C */ 1652*fd501800SSascha Wildner U8 Reserved7; /* 0x1D */ 1653*fd501800SSascha Wildner U16 Reserved8; /* 0x1E */ 1654*fd501800SSascha Wildner MPI2_BIOSPAGE2_BOOT_DEVICE RequestedBootDevice; /* 0x20 */ 1655*fd501800SSascha Wildner U8 ReqAltBootDeviceForm; /* 0x38 */ 1656*fd501800SSascha Wildner U8 Reserved9; /* 0x39 */ 1657*fd501800SSascha Wildner U16 Reserved10; /* 0x3A */ 1658*fd501800SSascha Wildner MPI2_BIOSPAGE2_BOOT_DEVICE RequestedAltBootDevice; /* 0x3C */ 1659*fd501800SSascha Wildner U8 CurrentBootDeviceForm; /* 0x58 */ 1660*fd501800SSascha Wildner U8 Reserved11; /* 0x59 */ 1661*fd501800SSascha Wildner U16 Reserved12; /* 0x5A */ 1662*fd501800SSascha Wildner MPI2_BIOSPAGE2_BOOT_DEVICE CurrentBootDevice; /* 0x58 */ 1663*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_BIOS_2, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_2, 1664*fd501800SSascha Wildner Mpi2BiosPage2_t, MPI2_POINTER pMpi2BiosPage2_t; 1665*fd501800SSascha Wildner 1666*fd501800SSascha Wildner #define MPI2_BIOSPAGE2_PAGEVERSION (0x04) 1667*fd501800SSascha Wildner 1668*fd501800SSascha Wildner /* values for BIOS Page 2 BootDeviceForm fields */ 1669*fd501800SSascha Wildner #define MPI2_BIOSPAGE2_FORM_MASK (0x0F) 1670*fd501800SSascha Wildner #define MPI2_BIOSPAGE2_FORM_NO_DEVICE_SPECIFIED (0x00) 1671*fd501800SSascha Wildner #define MPI2_BIOSPAGE2_FORM_SAS_WWID (0x05) 1672*fd501800SSascha Wildner #define MPI2_BIOSPAGE2_FORM_ENCLOSURE_SLOT (0x06) 1673*fd501800SSascha Wildner #define MPI2_BIOSPAGE2_FORM_DEVICE_NAME (0x07) 1674*fd501800SSascha Wildner 1675*fd501800SSascha Wildner 1676*fd501800SSascha Wildner /* BIOS Page 3 */ 1677*fd501800SSascha Wildner 1678*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_NUM_ADAPTER (4) 1679*fd501800SSascha Wildner 1680*fd501800SSascha Wildner typedef struct _MPI2_ADAPTER_INFO 1681*fd501800SSascha Wildner { 1682*fd501800SSascha Wildner U8 PciBusNumber; /* 0x00 */ 1683*fd501800SSascha Wildner U8 PciDeviceAndFunctionNumber; /* 0x01 */ 1684*fd501800SSascha Wildner U16 AdapterFlags; /* 0x02 */ 1685*fd501800SSascha Wildner } MPI2_ADAPTER_INFO, MPI2_POINTER PTR_MPI2_ADAPTER_INFO, 1686*fd501800SSascha Wildner Mpi2AdapterInfo_t, MPI2_POINTER pMpi2AdapterInfo_t; 1687*fd501800SSascha Wildner 1688*fd501800SSascha Wildner #define MPI2_ADAPTER_INFO_FLAGS_EMBEDDED (0x0001) 1689*fd501800SSascha Wildner #define MPI2_ADAPTER_INFO_FLAGS_INIT_STATUS (0x0002) 1690*fd501800SSascha Wildner 1691*fd501800SSascha Wildner typedef struct _MPI2_ADAPTER_ORDER_AUX 1692*fd501800SSascha Wildner { 1693*fd501800SSascha Wildner U64 WWID; /* 0x00 */ 1694*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 1695*fd501800SSascha Wildner U32 Reserved2; /* 0x0C */ 1696*fd501800SSascha Wildner } MPI2_ADAPTER_ORDER_AUX, MPI2_POINTER PTR_MPI2_ADAPTER_ORDER_AUX, 1697*fd501800SSascha Wildner Mpi2AdapterOrderAux_t, MPI2_POINTER pMpi2AdapterOrderAux_t; 1698*fd501800SSascha Wildner 1699*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_BIOS_3 1700*fd501800SSascha Wildner { 1701*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1702*fd501800SSascha Wildner U32 GlobalFlags; /* 0x04 */ 1703*fd501800SSascha Wildner U32 BiosVersion; /* 0x08 */ 1704*fd501800SSascha Wildner MPI2_ADAPTER_INFO AdapterOrder[MPI2_BIOSPAGE3_NUM_ADAPTER]; /* 0x0C */ 1705*fd501800SSascha Wildner U32 Reserved1; /* 0x1C */ 1706*fd501800SSascha Wildner MPI2_ADAPTER_ORDER_AUX AdapterOrderAux[MPI2_BIOSPAGE3_NUM_ADAPTER]; /* 0x20 */ /* MPI v2.5 and newer */ 1707*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_BIOS_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_3, 1708*fd501800SSascha Wildner Mpi2BiosPage3_t, MPI2_POINTER pMpi2BiosPage3_t; 1709*fd501800SSascha Wildner 1710*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_PAGEVERSION (0x01) 1711*fd501800SSascha Wildner 1712*fd501800SSascha Wildner /* values for BIOS Page 3 GlobalFlags */ 1713*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_FLAGS_PAUSE_ON_ERROR (0x00000002) 1714*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_FLAGS_VERBOSE_ENABLE (0x00000004) 1715*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_FLAGS_HOOK_INT_40_DISABLE (0x00000010) 1716*fd501800SSascha Wildner 1717*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_FLAGS_DEV_LIST_DISPLAY_MASK (0x000000E0) 1718*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_FLAGS_INSTALLED_DEV_DISPLAY (0x00000000) 1719*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_FLAGS_ADAPTER_DISPLAY (0x00000020) 1720*fd501800SSascha Wildner #define MPI2_BIOSPAGE3_FLAGS_ADAPTER_DEV_DISPLAY (0x00000040) 1721*fd501800SSascha Wildner 1722*fd501800SSascha Wildner 1723*fd501800SSascha Wildner /* BIOS Page 4 */ 1724*fd501800SSascha Wildner 1725*fd501800SSascha Wildner /* 1726*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1727*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 1728*fd501800SSascha Wildner */ 1729*fd501800SSascha Wildner #ifndef MPI2_BIOS_PAGE_4_PHY_ENTRIES 1730*fd501800SSascha Wildner #define MPI2_BIOS_PAGE_4_PHY_ENTRIES (1) 1731*fd501800SSascha Wildner #endif 1732*fd501800SSascha Wildner 1733*fd501800SSascha Wildner typedef struct _MPI2_BIOS4_ENTRY 1734*fd501800SSascha Wildner { 1735*fd501800SSascha Wildner U64 ReassignmentWWID; /* 0x00 */ 1736*fd501800SSascha Wildner U64 ReassignmentDeviceName; /* 0x08 */ 1737*fd501800SSascha Wildner } MPI2_BIOS4_ENTRY, MPI2_POINTER PTR_MPI2_BIOS4_ENTRY, 1738*fd501800SSascha Wildner Mpi2MBios4Entry_t, MPI2_POINTER pMpi2Bios4Entry_t; 1739*fd501800SSascha Wildner 1740*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_BIOS_4 1741*fd501800SSascha Wildner { 1742*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1743*fd501800SSascha Wildner U8 NumPhys; /* 0x04 */ 1744*fd501800SSascha Wildner U8 Reserved1; /* 0x05 */ 1745*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 1746*fd501800SSascha Wildner MPI2_BIOS4_ENTRY Phy[MPI2_BIOS_PAGE_4_PHY_ENTRIES]; /* 0x08 */ 1747*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_BIOS_4, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_4, 1748*fd501800SSascha Wildner Mpi2BiosPage4_t, MPI2_POINTER pMpi2BiosPage4_t; 1749*fd501800SSascha Wildner 1750*fd501800SSascha Wildner #define MPI2_BIOSPAGE4_PAGEVERSION (0x01) 1751*fd501800SSascha Wildner 1752*fd501800SSascha Wildner 1753*fd501800SSascha Wildner /**************************************************************************** 1754*fd501800SSascha Wildner * RAID Volume Config Pages 1755*fd501800SSascha Wildner ****************************************************************************/ 1756*fd501800SSascha Wildner 1757*fd501800SSascha Wildner /* RAID Volume Page 0 */ 1758*fd501800SSascha Wildner 1759*fd501800SSascha Wildner typedef struct _MPI2_RAIDVOL0_PHYS_DISK 1760*fd501800SSascha Wildner { 1761*fd501800SSascha Wildner U8 RAIDSetNum; /* 0x00 */ 1762*fd501800SSascha Wildner U8 PhysDiskMap; /* 0x01 */ 1763*fd501800SSascha Wildner U8 PhysDiskNum; /* 0x02 */ 1764*fd501800SSascha Wildner U8 Reserved; /* 0x03 */ 1765*fd501800SSascha Wildner } MPI2_RAIDVOL0_PHYS_DISK, MPI2_POINTER PTR_MPI2_RAIDVOL0_PHYS_DISK, 1766*fd501800SSascha Wildner Mpi2RaidVol0PhysDisk_t, MPI2_POINTER pMpi2RaidVol0PhysDisk_t; 1767*fd501800SSascha Wildner 1768*fd501800SSascha Wildner /* defines for the PhysDiskMap field */ 1769*fd501800SSascha Wildner #define MPI2_RAIDVOL0_PHYSDISK_PRIMARY (0x01) 1770*fd501800SSascha Wildner #define MPI2_RAIDVOL0_PHYSDISK_SECONDARY (0x02) 1771*fd501800SSascha Wildner 1772*fd501800SSascha Wildner typedef struct _MPI2_RAIDVOL0_SETTINGS 1773*fd501800SSascha Wildner { 1774*fd501800SSascha Wildner U16 Settings; /* 0x00 */ 1775*fd501800SSascha Wildner U8 HotSparePool; /* 0x01 */ 1776*fd501800SSascha Wildner U8 Reserved; /* 0x02 */ 1777*fd501800SSascha Wildner } MPI2_RAIDVOL0_SETTINGS, MPI2_POINTER PTR_MPI2_RAIDVOL0_SETTINGS, 1778*fd501800SSascha Wildner Mpi2RaidVol0Settings_t, MPI2_POINTER pMpi2RaidVol0Settings_t; 1779*fd501800SSascha Wildner 1780*fd501800SSascha Wildner /* RAID Volume Page 0 HotSparePool defines, also used in RAID Physical Disk */ 1781*fd501800SSascha Wildner #define MPI2_RAID_HOT_SPARE_POOL_0 (0x01) 1782*fd501800SSascha Wildner #define MPI2_RAID_HOT_SPARE_POOL_1 (0x02) 1783*fd501800SSascha Wildner #define MPI2_RAID_HOT_SPARE_POOL_2 (0x04) 1784*fd501800SSascha Wildner #define MPI2_RAID_HOT_SPARE_POOL_3 (0x08) 1785*fd501800SSascha Wildner #define MPI2_RAID_HOT_SPARE_POOL_4 (0x10) 1786*fd501800SSascha Wildner #define MPI2_RAID_HOT_SPARE_POOL_5 (0x20) 1787*fd501800SSascha Wildner #define MPI2_RAID_HOT_SPARE_POOL_6 (0x40) 1788*fd501800SSascha Wildner #define MPI2_RAID_HOT_SPARE_POOL_7 (0x80) 1789*fd501800SSascha Wildner 1790*fd501800SSascha Wildner /* RAID Volume Page 0 VolumeSettings defines */ 1791*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SETTING_USE_PRODUCT_ID_SUFFIX (0x0008) 1792*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SETTING_AUTO_CONFIG_HSWAP_DISABLE (0x0004) 1793*fd501800SSascha Wildner 1794*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SETTING_MASK_WRITE_CACHING (0x0003) 1795*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SETTING_UNCHANGED (0x0000) 1796*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SETTING_DISABLE_WRITE_CACHING (0x0001) 1797*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SETTING_ENABLE_WRITE_CACHING (0x0002) 1798*fd501800SSascha Wildner 1799*fd501800SSascha Wildner /* 1800*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1801*fd501800SSascha Wildner * one and check the value returned for NumPhysDisks at runtime. 1802*fd501800SSascha Wildner */ 1803*fd501800SSascha Wildner #ifndef MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX 1804*fd501800SSascha Wildner #define MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX (1) 1805*fd501800SSascha Wildner #endif 1806*fd501800SSascha Wildner 1807*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_RAID_VOL_0 1808*fd501800SSascha Wildner { 1809*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1810*fd501800SSascha Wildner U16 DevHandle; /* 0x04 */ 1811*fd501800SSascha Wildner U8 VolumeState; /* 0x06 */ 1812*fd501800SSascha Wildner U8 VolumeType; /* 0x07 */ 1813*fd501800SSascha Wildner U32 VolumeStatusFlags; /* 0x08 */ 1814*fd501800SSascha Wildner MPI2_RAIDVOL0_SETTINGS VolumeSettings; /* 0x0C */ 1815*fd501800SSascha Wildner U64 MaxLBA; /* 0x10 */ 1816*fd501800SSascha Wildner U32 StripeSize; /* 0x18 */ 1817*fd501800SSascha Wildner U16 BlockSize; /* 0x1C */ 1818*fd501800SSascha Wildner U16 Reserved1; /* 0x1E */ 1819*fd501800SSascha Wildner U8 SupportedPhysDisks; /* 0x20 */ 1820*fd501800SSascha Wildner U8 ResyncRate; /* 0x21 */ 1821*fd501800SSascha Wildner U16 DataScrubDuration; /* 0x22 */ 1822*fd501800SSascha Wildner U8 NumPhysDisks; /* 0x24 */ 1823*fd501800SSascha Wildner U8 Reserved2; /* 0x25 */ 1824*fd501800SSascha Wildner U8 Reserved3; /* 0x26 */ 1825*fd501800SSascha Wildner U8 InactiveStatus; /* 0x27 */ 1826*fd501800SSascha Wildner MPI2_RAIDVOL0_PHYS_DISK PhysDisk[MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX]; /* 0x28 */ 1827*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_RAID_VOL_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_VOL_0, 1828*fd501800SSascha Wildner Mpi2RaidVolPage0_t, MPI2_POINTER pMpi2RaidVolPage0_t; 1829*fd501800SSascha Wildner 1830*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE0_PAGEVERSION (0x0A) 1831*fd501800SSascha Wildner 1832*fd501800SSascha Wildner /* values for RAID VolumeState */ 1833*fd501800SSascha Wildner #define MPI2_RAID_VOL_STATE_MISSING (0x00) 1834*fd501800SSascha Wildner #define MPI2_RAID_VOL_STATE_FAILED (0x01) 1835*fd501800SSascha Wildner #define MPI2_RAID_VOL_STATE_INITIALIZING (0x02) 1836*fd501800SSascha Wildner #define MPI2_RAID_VOL_STATE_ONLINE (0x03) 1837*fd501800SSascha Wildner #define MPI2_RAID_VOL_STATE_DEGRADED (0x04) 1838*fd501800SSascha Wildner #define MPI2_RAID_VOL_STATE_OPTIMAL (0x05) 1839*fd501800SSascha Wildner 1840*fd501800SSascha Wildner /* values for RAID VolumeType */ 1841*fd501800SSascha Wildner #define MPI2_RAID_VOL_TYPE_RAID0 (0x00) 1842*fd501800SSascha Wildner #define MPI2_RAID_VOL_TYPE_RAID1E (0x01) 1843*fd501800SSascha Wildner #define MPI2_RAID_VOL_TYPE_RAID1 (0x02) 1844*fd501800SSascha Wildner #define MPI2_RAID_VOL_TYPE_RAID10 (0x05) 1845*fd501800SSascha Wildner #define MPI2_RAID_VOL_TYPE_UNKNOWN (0xFF) 1846*fd501800SSascha Wildner 1847*fd501800SSascha Wildner /* values for RAID Volume Page 0 VolumeStatusFlags field */ 1848*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_PENDING_RESYNC (0x02000000) 1849*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_BACKG_INIT_PENDING (0x01000000) 1850*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_MDC_PENDING (0x00800000) 1851*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_USER_CONSIST_PENDING (0x00400000) 1852*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_MAKE_DATA_CONSISTENT (0x00200000) 1853*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_DATA_SCRUB (0x00100000) 1854*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_CONSISTENCY_CHECK (0x00080000) 1855*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_CAPACITY_EXPANSION (0x00040000) 1856*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_BACKGROUND_INIT (0x00020000) 1857*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS (0x00010000) 1858*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_VOL_NOT_CONSISTENT (0x00000080) 1859*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_OCE_ALLOWED (0x00000040) 1860*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_BGI_COMPLETE (0x00000020) 1861*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_1E_OFFSET_MIRROR (0x00000000) 1862*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_1E_ADJACENT_MIRROR (0x00000010) 1863*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_BAD_BLOCK_TABLE_FULL (0x00000008) 1864*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_VOLUME_INACTIVE (0x00000004) 1865*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_QUIESCED (0x00000002) 1866*fd501800SSascha Wildner #define MPI2_RAIDVOL0_STATUS_FLAG_ENABLED (0x00000001) 1867*fd501800SSascha Wildner 1868*fd501800SSascha Wildner /* values for RAID Volume Page 0 SupportedPhysDisks field */ 1869*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SUPPORT_SOLID_STATE_DISKS (0x08) 1870*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SUPPORT_HARD_DISKS (0x04) 1871*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SUPPORT_SAS_PROTOCOL (0x02) 1872*fd501800SSascha Wildner #define MPI2_RAIDVOL0_SUPPORT_SATA_PROTOCOL (0x01) 1873*fd501800SSascha Wildner 1874*fd501800SSascha Wildner /* values for RAID Volume Page 0 InactiveStatus field */ 1875*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE0_UNKNOWN_INACTIVE (0x00) 1876*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE0_STALE_METADATA_INACTIVE (0x01) 1877*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE0_FOREIGN_VOLUME_INACTIVE (0x02) 1878*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE0_INSUFFICIENT_RESOURCE_INACTIVE (0x03) 1879*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE0_CLONE_VOLUME_INACTIVE (0x04) 1880*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE0_INSUFFICIENT_METADATA_INACTIVE (0x05) 1881*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE0_PREVIOUSLY_DELETED (0x06) 1882*fd501800SSascha Wildner 1883*fd501800SSascha Wildner 1884*fd501800SSascha Wildner /* RAID Volume Page 1 */ 1885*fd501800SSascha Wildner 1886*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_RAID_VOL_1 1887*fd501800SSascha Wildner { 1888*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1889*fd501800SSascha Wildner U16 DevHandle; /* 0x04 */ 1890*fd501800SSascha Wildner U16 Reserved0; /* 0x06 */ 1891*fd501800SSascha Wildner U8 GUID[24]; /* 0x08 */ 1892*fd501800SSascha Wildner U8 Name[16]; /* 0x20 */ 1893*fd501800SSascha Wildner U64 WWID; /* 0x30 */ 1894*fd501800SSascha Wildner U32 Reserved1; /* 0x38 */ 1895*fd501800SSascha Wildner U32 Reserved2; /* 0x3C */ 1896*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_RAID_VOL_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_VOL_1, 1897*fd501800SSascha Wildner Mpi2RaidVolPage1_t, MPI2_POINTER pMpi2RaidVolPage1_t; 1898*fd501800SSascha Wildner 1899*fd501800SSascha Wildner #define MPI2_RAIDVOLPAGE1_PAGEVERSION (0x03) 1900*fd501800SSascha Wildner 1901*fd501800SSascha Wildner 1902*fd501800SSascha Wildner /**************************************************************************** 1903*fd501800SSascha Wildner * RAID Physical Disk Config Pages 1904*fd501800SSascha Wildner ****************************************************************************/ 1905*fd501800SSascha Wildner 1906*fd501800SSascha Wildner /* RAID Physical Disk Page 0 */ 1907*fd501800SSascha Wildner 1908*fd501800SSascha Wildner typedef struct _MPI2_RAIDPHYSDISK0_SETTINGS 1909*fd501800SSascha Wildner { 1910*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 1911*fd501800SSascha Wildner U8 HotSparePool; /* 0x02 */ 1912*fd501800SSascha Wildner U8 Reserved2; /* 0x03 */ 1913*fd501800SSascha Wildner } MPI2_RAIDPHYSDISK0_SETTINGS, MPI2_POINTER PTR_MPI2_RAIDPHYSDISK0_SETTINGS, 1914*fd501800SSascha Wildner Mpi2RaidPhysDisk0Settings_t, MPI2_POINTER pMpi2RaidPhysDisk0Settings_t; 1915*fd501800SSascha Wildner 1916*fd501800SSascha Wildner /* use MPI2_RAID_HOT_SPARE_POOL_ defines for the HotSparePool field */ 1917*fd501800SSascha Wildner 1918*fd501800SSascha Wildner typedef struct _MPI2_RAIDPHYSDISK0_INQUIRY_DATA 1919*fd501800SSascha Wildner { 1920*fd501800SSascha Wildner U8 VendorID[8]; /* 0x00 */ 1921*fd501800SSascha Wildner U8 ProductID[16]; /* 0x08 */ 1922*fd501800SSascha Wildner U8 ProductRevLevel[4]; /* 0x18 */ 1923*fd501800SSascha Wildner U8 SerialNum[32]; /* 0x1C */ 1924*fd501800SSascha Wildner } MPI2_RAIDPHYSDISK0_INQUIRY_DATA, 1925*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_RAIDPHYSDISK0_INQUIRY_DATA, 1926*fd501800SSascha Wildner Mpi2RaidPhysDisk0InquiryData_t, MPI2_POINTER pMpi2RaidPhysDisk0InquiryData_t; 1927*fd501800SSascha Wildner 1928*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_0 1929*fd501800SSascha Wildner { 1930*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1931*fd501800SSascha Wildner U16 DevHandle; /* 0x04 */ 1932*fd501800SSascha Wildner U8 Reserved1; /* 0x06 */ 1933*fd501800SSascha Wildner U8 PhysDiskNum; /* 0x07 */ 1934*fd501800SSascha Wildner MPI2_RAIDPHYSDISK0_SETTINGS PhysDiskSettings; /* 0x08 */ 1935*fd501800SSascha Wildner U32 Reserved2; /* 0x0C */ 1936*fd501800SSascha Wildner MPI2_RAIDPHYSDISK0_INQUIRY_DATA InquiryData; /* 0x10 */ 1937*fd501800SSascha Wildner U32 Reserved3; /* 0x4C */ 1938*fd501800SSascha Wildner U8 PhysDiskState; /* 0x50 */ 1939*fd501800SSascha Wildner U8 OfflineReason; /* 0x51 */ 1940*fd501800SSascha Wildner U8 IncompatibleReason; /* 0x52 */ 1941*fd501800SSascha Wildner U8 PhysDiskAttributes; /* 0x53 */ 1942*fd501800SSascha Wildner U32 PhysDiskStatusFlags; /* 0x54 */ 1943*fd501800SSascha Wildner U64 DeviceMaxLBA; /* 0x58 */ 1944*fd501800SSascha Wildner U64 HostMaxLBA; /* 0x60 */ 1945*fd501800SSascha Wildner U64 CoercedMaxLBA; /* 0x68 */ 1946*fd501800SSascha Wildner U16 BlockSize; /* 0x70 */ 1947*fd501800SSascha Wildner U16 Reserved5; /* 0x72 */ 1948*fd501800SSascha Wildner U32 Reserved6; /* 0x74 */ 1949*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_RD_PDISK_0, 1950*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RD_PDISK_0, 1951*fd501800SSascha Wildner Mpi2RaidPhysDiskPage0_t, MPI2_POINTER pMpi2RaidPhysDiskPage0_t; 1952*fd501800SSascha Wildner 1953*fd501800SSascha Wildner #define MPI2_RAIDPHYSDISKPAGE0_PAGEVERSION (0x05) 1954*fd501800SSascha Wildner 1955*fd501800SSascha Wildner /* PhysDiskState defines */ 1956*fd501800SSascha Wildner #define MPI2_RAID_PD_STATE_NOT_CONFIGURED (0x00) 1957*fd501800SSascha Wildner #define MPI2_RAID_PD_STATE_NOT_COMPATIBLE (0x01) 1958*fd501800SSascha Wildner #define MPI2_RAID_PD_STATE_OFFLINE (0x02) 1959*fd501800SSascha Wildner #define MPI2_RAID_PD_STATE_ONLINE (0x03) 1960*fd501800SSascha Wildner #define MPI2_RAID_PD_STATE_HOT_SPARE (0x04) 1961*fd501800SSascha Wildner #define MPI2_RAID_PD_STATE_DEGRADED (0x05) 1962*fd501800SSascha Wildner #define MPI2_RAID_PD_STATE_REBUILDING (0x06) 1963*fd501800SSascha Wildner #define MPI2_RAID_PD_STATE_OPTIMAL (0x07) 1964*fd501800SSascha Wildner 1965*fd501800SSascha Wildner /* OfflineReason defines */ 1966*fd501800SSascha Wildner #define MPI2_PHYSDISK0_ONLINE (0x00) 1967*fd501800SSascha Wildner #define MPI2_PHYSDISK0_OFFLINE_MISSING (0x01) 1968*fd501800SSascha Wildner #define MPI2_PHYSDISK0_OFFLINE_FAILED (0x03) 1969*fd501800SSascha Wildner #define MPI2_PHYSDISK0_OFFLINE_INITIALIZING (0x04) 1970*fd501800SSascha Wildner #define MPI2_PHYSDISK0_OFFLINE_REQUESTED (0x05) 1971*fd501800SSascha Wildner #define MPI2_PHYSDISK0_OFFLINE_FAILED_REQUESTED (0x06) 1972*fd501800SSascha Wildner #define MPI2_PHYSDISK0_OFFLINE_OTHER (0xFF) 1973*fd501800SSascha Wildner 1974*fd501800SSascha Wildner /* IncompatibleReason defines */ 1975*fd501800SSascha Wildner #define MPI2_PHYSDISK0_COMPATIBLE (0x00) 1976*fd501800SSascha Wildner #define MPI2_PHYSDISK0_INCOMPATIBLE_PROTOCOL (0x01) 1977*fd501800SSascha Wildner #define MPI2_PHYSDISK0_INCOMPATIBLE_BLOCKSIZE (0x02) 1978*fd501800SSascha Wildner #define MPI2_PHYSDISK0_INCOMPATIBLE_MAX_LBA (0x03) 1979*fd501800SSascha Wildner #define MPI2_PHYSDISK0_INCOMPATIBLE_SATA_EXTENDED_CMD (0x04) 1980*fd501800SSascha Wildner #define MPI2_PHYSDISK0_INCOMPATIBLE_REMOVEABLE_MEDIA (0x05) 1981*fd501800SSascha Wildner #define MPI2_PHYSDISK0_INCOMPATIBLE_MEDIA_TYPE (0x06) 1982*fd501800SSascha Wildner #define MPI2_PHYSDISK0_INCOMPATIBLE_UNKNOWN (0xFF) 1983*fd501800SSascha Wildner 1984*fd501800SSascha Wildner /* PhysDiskAttributes defines */ 1985*fd501800SSascha Wildner #define MPI2_PHYSDISK0_ATTRIB_MEDIA_MASK (0x0C) 1986*fd501800SSascha Wildner #define MPI2_PHYSDISK0_ATTRIB_SOLID_STATE_DRIVE (0x08) 1987*fd501800SSascha Wildner #define MPI2_PHYSDISK0_ATTRIB_HARD_DISK_DRIVE (0x04) 1988*fd501800SSascha Wildner 1989*fd501800SSascha Wildner #define MPI2_PHYSDISK0_ATTRIB_PROTOCOL_MASK (0x03) 1990*fd501800SSascha Wildner #define MPI2_PHYSDISK0_ATTRIB_SAS_PROTOCOL (0x02) 1991*fd501800SSascha Wildner #define MPI2_PHYSDISK0_ATTRIB_SATA_PROTOCOL (0x01) 1992*fd501800SSascha Wildner 1993*fd501800SSascha Wildner /* PhysDiskStatusFlags defines */ 1994*fd501800SSascha Wildner #define MPI2_PHYSDISK0_STATUS_FLAG_NOT_CERTIFIED (0x00000040) 1995*fd501800SSascha Wildner #define MPI2_PHYSDISK0_STATUS_FLAG_OCE_TARGET (0x00000020) 1996*fd501800SSascha Wildner #define MPI2_PHYSDISK0_STATUS_FLAG_WRITE_CACHE_ENABLED (0x00000010) 1997*fd501800SSascha Wildner #define MPI2_PHYSDISK0_STATUS_FLAG_OPTIMAL_PREVIOUS (0x00000000) 1998*fd501800SSascha Wildner #define MPI2_PHYSDISK0_STATUS_FLAG_NOT_OPTIMAL_PREVIOUS (0x00000008) 1999*fd501800SSascha Wildner #define MPI2_PHYSDISK0_STATUS_FLAG_INACTIVE_VOLUME (0x00000004) 2000*fd501800SSascha Wildner #define MPI2_PHYSDISK0_STATUS_FLAG_QUIESCED (0x00000002) 2001*fd501800SSascha Wildner #define MPI2_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC (0x00000001) 2002*fd501800SSascha Wildner 2003*fd501800SSascha Wildner 2004*fd501800SSascha Wildner /* RAID Physical Disk Page 1 */ 2005*fd501800SSascha Wildner 2006*fd501800SSascha Wildner /* 2007*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2008*fd501800SSascha Wildner * one and check the value returned for NumPhysDiskPaths at runtime. 2009*fd501800SSascha Wildner */ 2010*fd501800SSascha Wildner #ifndef MPI2_RAID_PHYS_DISK1_PATH_MAX 2011*fd501800SSascha Wildner #define MPI2_RAID_PHYS_DISK1_PATH_MAX (1) 2012*fd501800SSascha Wildner #endif 2013*fd501800SSascha Wildner 2014*fd501800SSascha Wildner typedef struct _MPI2_RAIDPHYSDISK1_PATH 2015*fd501800SSascha Wildner { 2016*fd501800SSascha Wildner U16 DevHandle; /* 0x00 */ 2017*fd501800SSascha Wildner U16 Reserved1; /* 0x02 */ 2018*fd501800SSascha Wildner U64 WWID; /* 0x04 */ 2019*fd501800SSascha Wildner U64 OwnerWWID; /* 0x0C */ 2020*fd501800SSascha Wildner U8 OwnerIdentifier; /* 0x14 */ 2021*fd501800SSascha Wildner U8 Reserved2; /* 0x15 */ 2022*fd501800SSascha Wildner U16 Flags; /* 0x16 */ 2023*fd501800SSascha Wildner } MPI2_RAIDPHYSDISK1_PATH, MPI2_POINTER PTR_MPI2_RAIDPHYSDISK1_PATH, 2024*fd501800SSascha Wildner Mpi2RaidPhysDisk1Path_t, MPI2_POINTER pMpi2RaidPhysDisk1Path_t; 2025*fd501800SSascha Wildner 2026*fd501800SSascha Wildner /* RAID Physical Disk Page 1 Physical Disk Path Flags field defines */ 2027*fd501800SSascha Wildner #define MPI2_RAID_PHYSDISK1_FLAG_PRIMARY (0x0004) 2028*fd501800SSascha Wildner #define MPI2_RAID_PHYSDISK1_FLAG_BROKEN (0x0002) 2029*fd501800SSascha Wildner #define MPI2_RAID_PHYSDISK1_FLAG_INVALID (0x0001) 2030*fd501800SSascha Wildner 2031*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_1 2032*fd501800SSascha Wildner { 2033*fd501800SSascha Wildner MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 2034*fd501800SSascha Wildner U8 NumPhysDiskPaths; /* 0x04 */ 2035*fd501800SSascha Wildner U8 PhysDiskNum; /* 0x05 */ 2036*fd501800SSascha Wildner U16 Reserved1; /* 0x06 */ 2037*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 2038*fd501800SSascha Wildner MPI2_RAIDPHYSDISK1_PATH PhysicalDiskPath[MPI2_RAID_PHYS_DISK1_PATH_MAX];/* 0x0C */ 2039*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_RD_PDISK_1, 2040*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RD_PDISK_1, 2041*fd501800SSascha Wildner Mpi2RaidPhysDiskPage1_t, MPI2_POINTER pMpi2RaidPhysDiskPage1_t; 2042*fd501800SSascha Wildner 2043*fd501800SSascha Wildner #define MPI2_RAIDPHYSDISKPAGE1_PAGEVERSION (0x02) 2044*fd501800SSascha Wildner 2045*fd501800SSascha Wildner 2046*fd501800SSascha Wildner /**************************************************************************** 2047*fd501800SSascha Wildner * values for fields used by several types of SAS Config Pages 2048*fd501800SSascha Wildner ****************************************************************************/ 2049*fd501800SSascha Wildner 2050*fd501800SSascha Wildner /* values for NegotiatedLinkRates fields */ 2051*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_MASK_LOGICAL (0xF0) 2052*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_SHIFT_LOGICAL (4) 2053*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_MASK_PHYSICAL (0x0F) 2054*fd501800SSascha Wildner /* link rates used for Negotiated Physical and Logical Link Rate */ 2055*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_UNKNOWN_LINK_RATE (0x00) 2056*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_PHY_DISABLED (0x01) 2057*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_NEGOTIATION_FAILED (0x02) 2058*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_SATA_OOB_COMPLETE (0x03) 2059*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_PORT_SELECTOR (0x04) 2060*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_SMP_RESET_IN_PROGRESS (0x05) 2061*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_UNSUPPORTED_PHY (0x06) 2062*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_1_5 (0x08) 2063*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_3_0 (0x09) 2064*fd501800SSascha Wildner #define MPI2_SAS_NEG_LINK_RATE_6_0 (0x0A) 2065*fd501800SSascha Wildner #define MPI25_SAS_NEG_LINK_RATE_12_0 (0x0B) 2066*fd501800SSascha Wildner #define MPI26_SAS_NEG_LINK_RATE_22_5 (0x0C) 2067*fd501800SSascha Wildner 2068*fd501800SSascha Wildner 2069*fd501800SSascha Wildner /* values for AttachedPhyInfo fields */ 2070*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_INSIDE_ZPSDS_PERSISTENT (0x00000040) 2071*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REQUESTED_INSIDE_ZPSDS (0x00000020) 2072*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_BREAK_REPLY_CAPABLE (0x00000010) 2073*fd501800SSascha Wildner 2074*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_MASK (0x0000000F) 2075*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_UNKNOWN (0x00000000) 2076*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_POWER_ON (0x00000001) 2077*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_HARD_RESET (0x00000002) 2078*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_SMP_PHY_CONTROL (0x00000003) 2079*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_LOSS_OF_SYNC (0x00000004) 2080*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_MULTIPLEXING_SEQ (0x00000005) 2081*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_IT_NEXUS_LOSS_TIMER (0x00000006) 2082*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_BREAK_TIMEOUT (0x00000007) 2083*fd501800SSascha Wildner #define MPI2_SAS_APHYINFO_REASON_PHY_TEST_STOPPED (0x00000008) 2084*fd501800SSascha Wildner 2085*fd501800SSascha Wildner 2086*fd501800SSascha Wildner /* values for PhyInfo fields */ 2087*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_PHY_VACANT (0x80000000) 2088*fd501800SSascha Wildner 2089*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_PHY_POWER_CONDITION_MASK (0x18000000) 2090*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_SHIFT_PHY_POWER_CONDITION (27) 2091*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_PHY_POWER_ACTIVE (0x00000000) 2092*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_PHY_POWER_PARTIAL (0x08000000) 2093*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_PHY_POWER_SLUMBER (0x10000000) 2094*fd501800SSascha Wildner 2095*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_CHANGED_REQ_INSIDE_ZPSDS (0x04000000) 2096*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_INSIDE_ZPSDS_PERSISTENT (0x02000000) 2097*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REQ_INSIDE_ZPSDS (0x01000000) 2098*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_ZONE_GROUP_PERSISTENT (0x00400000) 2099*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_INSIDE_ZPSDS (0x00200000) 2100*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_ZONING_ENABLED (0x00100000) 2101*fd501800SSascha Wildner 2102*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_MASK (0x000F0000) 2103*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_UNKNOWN (0x00000000) 2104*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_POWER_ON (0x00010000) 2105*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_HARD_RESET (0x00020000) 2106*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_SMP_PHY_CONTROL (0x00030000) 2107*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_LOSS_OF_SYNC (0x00040000) 2108*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_MULTIPLEXING_SEQ (0x00050000) 2109*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_IT_NEXUS_LOSS_TIMER (0x00060000) 2110*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_BREAK_TIMEOUT (0x00070000) 2111*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_REASON_PHY_TEST_STOPPED (0x00080000) 2112*fd501800SSascha Wildner 2113*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_MULTIPLEXING_SUPPORTED (0x00008000) 2114*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_SATA_PORT_ACTIVE (0x00004000) 2115*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_SATA_PORT_SELECTOR_PRESENT (0x00002000) 2116*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_VIRTUAL_PHY (0x00001000) 2117*fd501800SSascha Wildner 2118*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_MASK_PARTIAL_PATHWAY_TIME (0x00000F00) 2119*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_SHIFT_PARTIAL_PATHWAY_TIME (8) 2120*fd501800SSascha Wildner 2121*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_MASK_ROUTING_ATTRIBUTE (0x000000F0) 2122*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_DIRECT_ROUTING (0x00000000) 2123*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_SUBTRACTIVE_ROUTING (0x00000010) 2124*fd501800SSascha Wildner #define MPI2_SAS_PHYINFO_TABLE_ROUTING (0x00000020) 2125*fd501800SSascha Wildner 2126*fd501800SSascha Wildner 2127*fd501800SSascha Wildner /* values for SAS ProgrammedLinkRate fields */ 2128*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MAX_RATE_MASK (0xF0) 2129*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MAX_RATE_NOT_PROGRAMMABLE (0x00) 2130*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MAX_RATE_1_5 (0x80) 2131*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MAX_RATE_3_0 (0x90) 2132*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MAX_RATE_6_0 (0xA0) 2133*fd501800SSascha Wildner #define MPI25_SAS_PRATE_MAX_RATE_12_0 (0xB0) 2134*fd501800SSascha Wildner #define MPI26_SAS_PRATE_MAX_RATE_22_5 (0xC0) 2135*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MIN_RATE_MASK (0x0F) 2136*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MIN_RATE_NOT_PROGRAMMABLE (0x00) 2137*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MIN_RATE_1_5 (0x08) 2138*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MIN_RATE_3_0 (0x09) 2139*fd501800SSascha Wildner #define MPI2_SAS_PRATE_MIN_RATE_6_0 (0x0A) 2140*fd501800SSascha Wildner #define MPI25_SAS_PRATE_MIN_RATE_12_0 (0x0B) 2141*fd501800SSascha Wildner #define MPI26_SAS_PRATE_MIN_RATE_22_5 (0x0C) 2142*fd501800SSascha Wildner 2143*fd501800SSascha Wildner 2144*fd501800SSascha Wildner /* values for SAS HwLinkRate fields */ 2145*fd501800SSascha Wildner #define MPI2_SAS_HWRATE_MAX_RATE_MASK (0xF0) 2146*fd501800SSascha Wildner #define MPI2_SAS_HWRATE_MAX_RATE_1_5 (0x80) 2147*fd501800SSascha Wildner #define MPI2_SAS_HWRATE_MAX_RATE_3_0 (0x90) 2148*fd501800SSascha Wildner #define MPI2_SAS_HWRATE_MAX_RATE_6_0 (0xA0) 2149*fd501800SSascha Wildner #define MPI25_SAS_HWRATE_MAX_RATE_12_0 (0xB0) 2150*fd501800SSascha Wildner #define MPI26_SAS_HWRATE_MAX_RATE_22_5 (0xC0) 2151*fd501800SSascha Wildner #define MPI2_SAS_HWRATE_MIN_RATE_MASK (0x0F) 2152*fd501800SSascha Wildner #define MPI2_SAS_HWRATE_MIN_RATE_1_5 (0x08) 2153*fd501800SSascha Wildner #define MPI2_SAS_HWRATE_MIN_RATE_3_0 (0x09) 2154*fd501800SSascha Wildner #define MPI2_SAS_HWRATE_MIN_RATE_6_0 (0x0A) 2155*fd501800SSascha Wildner #define MPI25_SAS_HWRATE_MIN_RATE_12_0 (0x0B) 2156*fd501800SSascha Wildner #define MPI26_SAS_HWRATE_MIN_RATE_22_5 (0x0C) 2157*fd501800SSascha Wildner 2158*fd501800SSascha Wildner 2159*fd501800SSascha Wildner 2160*fd501800SSascha Wildner /**************************************************************************** 2161*fd501800SSascha Wildner * SAS IO Unit Config Pages 2162*fd501800SSascha Wildner ****************************************************************************/ 2163*fd501800SSascha Wildner 2164*fd501800SSascha Wildner /* SAS IO Unit Page 0 */ 2165*fd501800SSascha Wildner 2166*fd501800SSascha Wildner typedef struct _MPI2_SAS_IO_UNIT0_PHY_DATA 2167*fd501800SSascha Wildner { 2168*fd501800SSascha Wildner U8 Port; /* 0x00 */ 2169*fd501800SSascha Wildner U8 PortFlags; /* 0x01 */ 2170*fd501800SSascha Wildner U8 PhyFlags; /* 0x02 */ 2171*fd501800SSascha Wildner U8 NegotiatedLinkRate; /* 0x03 */ 2172*fd501800SSascha Wildner U32 ControllerPhyDeviceInfo;/* 0x04 */ 2173*fd501800SSascha Wildner U16 AttachedDevHandle; /* 0x08 */ 2174*fd501800SSascha Wildner U16 ControllerDevHandle; /* 0x0A */ 2175*fd501800SSascha Wildner U32 DiscoveryStatus; /* 0x0C */ 2176*fd501800SSascha Wildner U32 Reserved; /* 0x10 */ 2177*fd501800SSascha Wildner } MPI2_SAS_IO_UNIT0_PHY_DATA, MPI2_POINTER PTR_MPI2_SAS_IO_UNIT0_PHY_DATA, 2178*fd501800SSascha Wildner Mpi2SasIOUnit0PhyData_t, MPI2_POINTER pMpi2SasIOUnit0PhyData_t; 2179*fd501800SSascha Wildner 2180*fd501800SSascha Wildner /* 2181*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2182*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 2183*fd501800SSascha Wildner */ 2184*fd501800SSascha Wildner #ifndef MPI2_SAS_IOUNIT0_PHY_MAX 2185*fd501800SSascha Wildner #define MPI2_SAS_IOUNIT0_PHY_MAX (1) 2186*fd501800SSascha Wildner #endif 2187*fd501800SSascha Wildner 2188*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_0 2189*fd501800SSascha Wildner { 2190*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2191*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 2192*fd501800SSascha Wildner U8 NumPhys; /* 0x0C */ 2193*fd501800SSascha Wildner U8 Reserved2; /* 0x0D */ 2194*fd501800SSascha Wildner U16 Reserved3; /* 0x0E */ 2195*fd501800SSascha Wildner MPI2_SAS_IO_UNIT0_PHY_DATA PhyData[MPI2_SAS_IOUNIT0_PHY_MAX]; /* 0x10 */ 2196*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SASIOUNIT_0, 2197*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_0, 2198*fd501800SSascha Wildner Mpi2SasIOUnitPage0_t, MPI2_POINTER pMpi2SasIOUnitPage0_t; 2199*fd501800SSascha Wildner 2200*fd501800SSascha Wildner #define MPI2_SASIOUNITPAGE0_PAGEVERSION (0x05) 2201*fd501800SSascha Wildner 2202*fd501800SSascha Wildner /* values for SAS IO Unit Page 0 PortFlags */ 2203*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_PORTFLAGS_DISCOVERY_IN_PROGRESS (0x08) 2204*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG (0x01) 2205*fd501800SSascha Wildner 2206*fd501800SSascha Wildner /* values for SAS IO Unit Page 0 PhyFlags */ 2207*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_PHYFLAGS_INIT_PERSIST_CONNECT (0x40) 2208*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_PHYFLAGS_TARG_PERSIST_CONNECT (0x20) 2209*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_PHYFLAGS_ZONING_ENABLED (0x10) 2210*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_PHYFLAGS_PHY_DISABLED (0x08) 2211*fd501800SSascha Wildner 2212*fd501800SSascha Wildner /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 2213*fd501800SSascha Wildner 2214*fd501800SSascha Wildner /* see mpi2_sas.h for values for SAS IO Unit Page 0 ControllerPhyDeviceInfo values */ 2215*fd501800SSascha Wildner 2216*fd501800SSascha Wildner /* values for SAS IO Unit Page 0 DiscoveryStatus */ 2217*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 2218*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_MAX_EXPANDERS_EXCEED (0x40000000) 2219*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_MAX_DEVICES_EXCEED (0x20000000) 2220*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 2221*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_DOWNSTREAM_INITIATOR (0x08000000) 2222*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 2223*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 2224*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_MULTI_PORT_DOMAIN (0x00002000) 2225*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 2226*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_UNSUPPORTED_DEVICE (0x00000800) 2227*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_TABLE_LINK (0x00000400) 2228*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_SUBTRACTIVE_LINK (0x00000200) 2229*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_SMP_CRC_ERROR (0x00000100) 2230*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_SMP_FUNCTION_FAILED (0x00000080) 2231*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_INDEX_NOT_EXIST (0x00000040) 2232*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_OUT_ROUTE_ENTRIES (0x00000020) 2233*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_SMP_TIMEOUT (0x00000010) 2234*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_MULTIPLE_PORTS (0x00000004) 2235*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_UNADDRESSABLE_DEVICE (0x00000002) 2236*fd501800SSascha Wildner #define MPI2_SASIOUNIT0_DS_LOOP_DETECTED (0x00000001) 2237*fd501800SSascha Wildner 2238*fd501800SSascha Wildner 2239*fd501800SSascha Wildner /* SAS IO Unit Page 1 */ 2240*fd501800SSascha Wildner 2241*fd501800SSascha Wildner typedef struct _MPI2_SAS_IO_UNIT1_PHY_DATA 2242*fd501800SSascha Wildner { 2243*fd501800SSascha Wildner U8 Port; /* 0x00 */ 2244*fd501800SSascha Wildner U8 PortFlags; /* 0x01 */ 2245*fd501800SSascha Wildner U8 PhyFlags; /* 0x02 */ 2246*fd501800SSascha Wildner U8 MaxMinLinkRate; /* 0x03 */ 2247*fd501800SSascha Wildner U32 ControllerPhyDeviceInfo; /* 0x04 */ 2248*fd501800SSascha Wildner U16 MaxTargetPortConnectTime; /* 0x08 */ 2249*fd501800SSascha Wildner U16 Reserved1; /* 0x0A */ 2250*fd501800SSascha Wildner } MPI2_SAS_IO_UNIT1_PHY_DATA, MPI2_POINTER PTR_MPI2_SAS_IO_UNIT1_PHY_DATA, 2251*fd501800SSascha Wildner Mpi2SasIOUnit1PhyData_t, MPI2_POINTER pMpi2SasIOUnit1PhyData_t; 2252*fd501800SSascha Wildner 2253*fd501800SSascha Wildner /* 2254*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2255*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 2256*fd501800SSascha Wildner */ 2257*fd501800SSascha Wildner #ifndef MPI2_SAS_IOUNIT1_PHY_MAX 2258*fd501800SSascha Wildner #define MPI2_SAS_IOUNIT1_PHY_MAX (1) 2259*fd501800SSascha Wildner #endif 2260*fd501800SSascha Wildner 2261*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_1 2262*fd501800SSascha Wildner { 2263*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2264*fd501800SSascha Wildner U16 ControlFlags; /* 0x08 */ 2265*fd501800SSascha Wildner U16 SASNarrowMaxQueueDepth; /* 0x0A */ 2266*fd501800SSascha Wildner U16 AdditionalControlFlags; /* 0x0C */ 2267*fd501800SSascha Wildner U16 SASWideMaxQueueDepth; /* 0x0E */ 2268*fd501800SSascha Wildner U8 NumPhys; /* 0x10 */ 2269*fd501800SSascha Wildner U8 SATAMaxQDepth; /* 0x11 */ 2270*fd501800SSascha Wildner U8 ReportDeviceMissingDelay; /* 0x12 */ 2271*fd501800SSascha Wildner U8 IODeviceMissingDelay; /* 0x13 */ 2272*fd501800SSascha Wildner MPI2_SAS_IO_UNIT1_PHY_DATA PhyData[MPI2_SAS_IOUNIT1_PHY_MAX]; /* 0x14 */ 2273*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SASIOUNIT_1, 2274*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_1, 2275*fd501800SSascha Wildner Mpi2SasIOUnitPage1_t, MPI2_POINTER pMpi2SasIOUnitPage1_t; 2276*fd501800SSascha Wildner 2277*fd501800SSascha Wildner #define MPI2_SASIOUNITPAGE1_PAGEVERSION (0x09) 2278*fd501800SSascha Wildner 2279*fd501800SSascha Wildner /* values for SAS IO Unit Page 1 ControlFlags */ 2280*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_DEVICE_SELF_TEST (0x8000) 2281*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SATA_3_0_MAX (0x4000) 2282*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SATA_1_5_MAX (0x2000) /* MPI v2.0 only. Obsolete in MPI v2.5 and later. */ 2283*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SATA_SW_PRESERVE (0x1000) 2284*fd501800SSascha Wildner 2285*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_MASK_DEV_SUPPORT (0x0600) 2286*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SHIFT_DEV_SUPPORT (9) 2287*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_DEV_SUPPORT_BOTH (0x0) 2288*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_DEV_SAS_SUPPORT (0x1) 2289*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_DEV_SATA_SUPPORT (0x2) 2290*fd501800SSascha Wildner 2291*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SATA_48BIT_LBA_REQUIRED (0x0080) 2292*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SATA_SMART_REQUIRED (0x0040) 2293*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SATA_NCQ_REQUIRED (0x0020) 2294*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SATA_FUA_REQUIRED (0x0010) 2295*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_TABLE_SUBTRACTIVE_ILLEGAL (0x0008) 2296*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_SUBTRACTIVE_ILLEGAL (0x0004) 2297*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_FIRST_LVL_DISC_ONLY (0x0002) 2298*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_CONTROL_CLEAR_AFFILIATION (0x0001) /* MPI v2.0 only. Obsolete in MPI v2.5 and later. */ 2299*fd501800SSascha Wildner 2300*fd501800SSascha Wildner /* values for SAS IO Unit Page 1 AdditionalControlFlags */ 2301*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_DA_PERSIST_CONNECT (0x0100) 2302*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_MULTI_PORT_DOMAIN_ILLEGAL (0x0080) 2303*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_SATA_ASYNCHROUNOUS_NOTIFICATION (0x0040) 2304*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_INVALID_TOPOLOGY_CORRECTION (0x0020) 2305*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_PORT_ENABLE_ONLY_SATA_LINK_RESET (0x0010) 2306*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_OTHER_AFFILIATION_SATA_LINK_RESET (0x0008) 2307*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_SELF_AFFILIATION_SATA_LINK_RESET (0x0004) 2308*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_NO_AFFILIATION_SATA_LINK_RESET (0x0002) 2309*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_ACONTROL_ALLOW_TABLE_TO_TABLE (0x0001) 2310*fd501800SSascha Wildner 2311*fd501800SSascha Wildner /* defines for SAS IO Unit Page 1 ReportDeviceMissingDelay */ 2312*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_REPORT_MISSING_TIMEOUT_MASK (0x7F) 2313*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_REPORT_MISSING_UNIT_16 (0x80) 2314*fd501800SSascha Wildner 2315*fd501800SSascha Wildner /* values for SAS IO Unit Page 1 PortFlags */ 2316*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_PORT_FLAGS_AUTO_PORT_CONFIG (0x01) 2317*fd501800SSascha Wildner 2318*fd501800SSascha Wildner /* values for SAS IO Unit Page 1 PhyFlags */ 2319*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_PHYFLAGS_INIT_PERSIST_CONNECT (0x40) 2320*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_PHYFLAGS_TARG_PERSIST_CONNECT (0x20) 2321*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_PHYFLAGS_ZONING_ENABLE (0x10) 2322*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_PHYFLAGS_PHY_DISABLE (0x08) 2323*fd501800SSascha Wildner 2324*fd501800SSascha Wildner /* values for SAS IO Unit Page 1 MaxMinLinkRate */ 2325*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_MAX_RATE_MASK (0xF0) 2326*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_MAX_RATE_1_5 (0x80) 2327*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_MAX_RATE_3_0 (0x90) 2328*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_MAX_RATE_6_0 (0xA0) 2329*fd501800SSascha Wildner #define MPI25_SASIOUNIT1_MAX_RATE_12_0 (0xB0) 2330*fd501800SSascha Wildner #define MPI26_SASIOUNIT1_MAX_RATE_22_5 (0xC0) 2331*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_MIN_RATE_MASK (0x0F) 2332*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_MIN_RATE_1_5 (0x08) 2333*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_MIN_RATE_3_0 (0x09) 2334*fd501800SSascha Wildner #define MPI2_SASIOUNIT1_MIN_RATE_6_0 (0x0A) 2335*fd501800SSascha Wildner #define MPI25_SASIOUNIT1_MIN_RATE_12_0 (0x0B) 2336*fd501800SSascha Wildner #define MPI26_SASIOUNIT1_MIN_RATE_22_5 (0x0C) 2337*fd501800SSascha Wildner 2338*fd501800SSascha Wildner /* see mpi2_sas.h for values for SAS IO Unit Page 1 ControllerPhyDeviceInfo values */ 2339*fd501800SSascha Wildner 2340*fd501800SSascha Wildner 2341*fd501800SSascha Wildner /* SAS IO Unit Page 4 (for MPI v2.5 and earlier) */ 2342*fd501800SSascha Wildner 2343*fd501800SSascha Wildner typedef struct _MPI2_SAS_IOUNIT4_SPINUP_GROUP 2344*fd501800SSascha Wildner { 2345*fd501800SSascha Wildner U8 MaxTargetSpinup; /* 0x00 */ 2346*fd501800SSascha Wildner U8 SpinupDelay; /* 0x01 */ 2347*fd501800SSascha Wildner U8 SpinupFlags; /* 0x02 */ 2348*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 2349*fd501800SSascha Wildner } MPI2_SAS_IOUNIT4_SPINUP_GROUP, MPI2_POINTER PTR_MPI2_SAS_IOUNIT4_SPINUP_GROUP, 2350*fd501800SSascha Wildner Mpi2SasIOUnit4SpinupGroup_t, MPI2_POINTER pMpi2SasIOUnit4SpinupGroup_t; 2351*fd501800SSascha Wildner 2352*fd501800SSascha Wildner /* defines for SAS IO Unit Page 4 SpinupFlags */ 2353*fd501800SSascha Wildner #define MPI2_SASIOUNIT4_SPINUP_DISABLE_FLAG (0x01) 2354*fd501800SSascha Wildner 2355*fd501800SSascha Wildner 2356*fd501800SSascha Wildner /* 2357*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2358*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 2359*fd501800SSascha Wildner */ 2360*fd501800SSascha Wildner #ifndef MPI2_SAS_IOUNIT4_PHY_MAX 2361*fd501800SSascha Wildner #define MPI2_SAS_IOUNIT4_PHY_MAX (4) 2362*fd501800SSascha Wildner #endif 2363*fd501800SSascha Wildner 2364*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_4 2365*fd501800SSascha Wildner { 2366*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2367*fd501800SSascha Wildner MPI2_SAS_IOUNIT4_SPINUP_GROUP SpinupGroupParameters[4]; /* 0x08 */ 2368*fd501800SSascha Wildner U32 Reserved1; /* 0x18 */ 2369*fd501800SSascha Wildner U32 Reserved2; /* 0x1C */ 2370*fd501800SSascha Wildner U32 Reserved3; /* 0x20 */ 2371*fd501800SSascha Wildner U8 BootDeviceWaitTime; /* 0x24 */ 2372*fd501800SSascha Wildner U8 SATADeviceWaitTime; /* 0x25 */ 2373*fd501800SSascha Wildner U16 Reserved5; /* 0x26 */ 2374*fd501800SSascha Wildner U8 NumPhys; /* 0x28 */ 2375*fd501800SSascha Wildner U8 PEInitialSpinupDelay; /* 0x29 */ 2376*fd501800SSascha Wildner U8 PEReplyDelay; /* 0x2A */ 2377*fd501800SSascha Wildner U8 Flags; /* 0x2B */ 2378*fd501800SSascha Wildner U8 PHY[MPI2_SAS_IOUNIT4_PHY_MAX]; /* 0x2C */ 2379*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SASIOUNIT_4, 2380*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_4, 2381*fd501800SSascha Wildner Mpi2SasIOUnitPage4_t, MPI2_POINTER pMpi2SasIOUnitPage4_t; 2382*fd501800SSascha Wildner 2383*fd501800SSascha Wildner #define MPI2_SASIOUNITPAGE4_PAGEVERSION (0x02) 2384*fd501800SSascha Wildner 2385*fd501800SSascha Wildner /* defines for Flags field */ 2386*fd501800SSascha Wildner #define MPI2_SASIOUNIT4_FLAGS_AUTO_PORTENABLE (0x01) 2387*fd501800SSascha Wildner 2388*fd501800SSascha Wildner /* defines for PHY field */ 2389*fd501800SSascha Wildner #define MPI2_SASIOUNIT4_PHY_SPINUP_GROUP_MASK (0x03) 2390*fd501800SSascha Wildner 2391*fd501800SSascha Wildner 2392*fd501800SSascha Wildner /* SAS IO Unit Page 5 */ 2393*fd501800SSascha Wildner 2394*fd501800SSascha Wildner typedef struct _MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS 2395*fd501800SSascha Wildner { 2396*fd501800SSascha Wildner U8 ControlFlags; /* 0x00 */ 2397*fd501800SSascha Wildner U8 PortWidthModGroup; /* 0x01 */ 2398*fd501800SSascha Wildner U16 InactivityTimerExponent; /* 0x02 */ 2399*fd501800SSascha Wildner U8 SATAPartialTimeout; /* 0x04 */ 2400*fd501800SSascha Wildner U8 Reserved2; /* 0x05 */ 2401*fd501800SSascha Wildner U8 SATASlumberTimeout; /* 0x06 */ 2402*fd501800SSascha Wildner U8 Reserved3; /* 0x07 */ 2403*fd501800SSascha Wildner U8 SASPartialTimeout; /* 0x08 */ 2404*fd501800SSascha Wildner U8 Reserved4; /* 0x09 */ 2405*fd501800SSascha Wildner U8 SASSlumberTimeout; /* 0x0A */ 2406*fd501800SSascha Wildner U8 Reserved5; /* 0x0B */ 2407*fd501800SSascha Wildner } MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS, 2408*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS, 2409*fd501800SSascha Wildner Mpi2SasIOUnit5PhyPmSettings_t, MPI2_POINTER pMpi2SasIOUnit5PhyPmSettings_t; 2410*fd501800SSascha Wildner 2411*fd501800SSascha Wildner /* defines for ControlFlags field */ 2412*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_CONTROL_SAS_SLUMBER_ENABLE (0x08) 2413*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_CONTROL_SAS_PARTIAL_ENABLE (0x04) 2414*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_CONTROL_SATA_SLUMBER_ENABLE (0x02) 2415*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_CONTROL_SATA_PARTIAL_ENABLE (0x01) 2416*fd501800SSascha Wildner 2417*fd501800SSascha Wildner /* defines for PortWidthModeGroup field */ 2418*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_PWMG_DISABLE (0xFF) 2419*fd501800SSascha Wildner 2420*fd501800SSascha Wildner /* defines for InactivityTimerExponent field */ 2421*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_MASK_SAS_SLUMBER (0x7000) 2422*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_SHIFT_SAS_SLUMBER (12) 2423*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_MASK_SAS_PARTIAL (0x0700) 2424*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_SHIFT_SAS_PARTIAL (8) 2425*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_MASK_SATA_SLUMBER (0x0070) 2426*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_SHIFT_SATA_SLUMBER (4) 2427*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_MASK_SATA_PARTIAL (0x0007) 2428*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_SHIFT_SATA_PARTIAL (0) 2429*fd501800SSascha Wildner 2430*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_TEN_SECONDS (7) 2431*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_ONE_SECOND (6) 2432*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_HUNDRED_MILLISECONDS (5) 2433*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_TEN_MILLISECONDS (4) 2434*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_ONE_MILLISECOND (3) 2435*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_HUNDRED_MICROSECONDS (2) 2436*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_TEN_MICROSECONDS (1) 2437*fd501800SSascha Wildner #define MPI2_SASIOUNIT5_ITE_ONE_MICROSECOND (0) 2438*fd501800SSascha Wildner 2439*fd501800SSascha Wildner /* 2440*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2441*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 2442*fd501800SSascha Wildner */ 2443*fd501800SSascha Wildner #ifndef MPI2_SAS_IOUNIT5_PHY_MAX 2444*fd501800SSascha Wildner #define MPI2_SAS_IOUNIT5_PHY_MAX (1) 2445*fd501800SSascha Wildner #endif 2446*fd501800SSascha Wildner 2447*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_5 2448*fd501800SSascha Wildner { 2449*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2450*fd501800SSascha Wildner U8 NumPhys; /* 0x08 */ 2451*fd501800SSascha Wildner U8 Reserved1; /* 0x09 */ 2452*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 2453*fd501800SSascha Wildner U32 Reserved3; /* 0x0C */ 2454*fd501800SSascha Wildner MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS SASPhyPowerManagementSettings[MPI2_SAS_IOUNIT5_PHY_MAX]; /* 0x10 */ 2455*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SASIOUNIT_5, 2456*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_5, 2457*fd501800SSascha Wildner Mpi2SasIOUnitPage5_t, MPI2_POINTER pMpi2SasIOUnitPage5_t; 2458*fd501800SSascha Wildner 2459*fd501800SSascha Wildner #define MPI2_SASIOUNITPAGE5_PAGEVERSION (0x01) 2460*fd501800SSascha Wildner 2461*fd501800SSascha Wildner 2462*fd501800SSascha Wildner /* SAS IO Unit Page 6 */ 2463*fd501800SSascha Wildner 2464*fd501800SSascha Wildner typedef struct _MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS 2465*fd501800SSascha Wildner { 2466*fd501800SSascha Wildner U8 CurrentStatus; /* 0x00 */ 2467*fd501800SSascha Wildner U8 CurrentModulation; /* 0x01 */ 2468*fd501800SSascha Wildner U8 CurrentUtilization; /* 0x02 */ 2469*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 2470*fd501800SSascha Wildner U32 Reserved2; /* 0x04 */ 2471*fd501800SSascha Wildner } MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS, 2472*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS, 2473*fd501800SSascha Wildner Mpi2SasIOUnit6PortWidthModGroupStatus_t, 2474*fd501800SSascha Wildner MPI2_POINTER pMpi2SasIOUnit6PortWidthModGroupStatus_t; 2475*fd501800SSascha Wildner 2476*fd501800SSascha Wildner /* defines for CurrentStatus field */ 2477*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_STATUS_UNAVAILABLE (0x00) 2478*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_STATUS_UNCONFIGURED (0x01) 2479*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_STATUS_INVALID_CONFIG (0x02) 2480*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_STATUS_LINK_DOWN (0x03) 2481*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_STATUS_OBSERVATION_ONLY (0x04) 2482*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_STATUS_INACTIVE (0x05) 2483*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_STATUS_ACTIVE_IOUNIT (0x06) 2484*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_STATUS_ACTIVE_HOST (0x07) 2485*fd501800SSascha Wildner 2486*fd501800SSascha Wildner /* defines for CurrentModulation field */ 2487*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_MODULATION_25_PERCENT (0x00) 2488*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_MODULATION_50_PERCENT (0x01) 2489*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_MODULATION_75_PERCENT (0x02) 2490*fd501800SSascha Wildner #define MPI2_SASIOUNIT6_MODULATION_100_PERCENT (0x03) 2491*fd501800SSascha Wildner 2492*fd501800SSascha Wildner /* 2493*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2494*fd501800SSascha Wildner * one and check the value returned for NumGroups at runtime. 2495*fd501800SSascha Wildner */ 2496*fd501800SSascha Wildner #ifndef MPI2_SAS_IOUNIT6_GROUP_MAX 2497*fd501800SSascha Wildner #define MPI2_SAS_IOUNIT6_GROUP_MAX (1) 2498*fd501800SSascha Wildner #endif 2499*fd501800SSascha Wildner 2500*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_6 2501*fd501800SSascha Wildner { 2502*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2503*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 2504*fd501800SSascha Wildner U32 Reserved2; /* 0x0C */ 2505*fd501800SSascha Wildner U8 NumGroups; /* 0x10 */ 2506*fd501800SSascha Wildner U8 Reserved3; /* 0x11 */ 2507*fd501800SSascha Wildner U16 Reserved4; /* 0x12 */ 2508*fd501800SSascha Wildner MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS 2509*fd501800SSascha Wildner PortWidthModulationGroupStatus[MPI2_SAS_IOUNIT6_GROUP_MAX]; /* 0x14 */ 2510*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SASIOUNIT_6, 2511*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_6, 2512*fd501800SSascha Wildner Mpi2SasIOUnitPage6_t, MPI2_POINTER pMpi2SasIOUnitPage6_t; 2513*fd501800SSascha Wildner 2514*fd501800SSascha Wildner #define MPI2_SASIOUNITPAGE6_PAGEVERSION (0x00) 2515*fd501800SSascha Wildner 2516*fd501800SSascha Wildner 2517*fd501800SSascha Wildner /* SAS IO Unit Page 7 */ 2518*fd501800SSascha Wildner 2519*fd501800SSascha Wildner typedef struct _MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS 2520*fd501800SSascha Wildner { 2521*fd501800SSascha Wildner U8 Flags; /* 0x00 */ 2522*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 2523*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 2524*fd501800SSascha Wildner U8 Threshold75Pct; /* 0x04 */ 2525*fd501800SSascha Wildner U8 Threshold50Pct; /* 0x05 */ 2526*fd501800SSascha Wildner U8 Threshold25Pct; /* 0x06 */ 2527*fd501800SSascha Wildner U8 Reserved3; /* 0x07 */ 2528*fd501800SSascha Wildner } MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS, 2529*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS, 2530*fd501800SSascha Wildner Mpi2SasIOUnit7PortWidthModGroupSettings_t, 2531*fd501800SSascha Wildner MPI2_POINTER pMpi2SasIOUnit7PortWidthModGroupSettings_t; 2532*fd501800SSascha Wildner 2533*fd501800SSascha Wildner /* defines for Flags field */ 2534*fd501800SSascha Wildner #define MPI2_SASIOUNIT7_FLAGS_ENABLE_PORT_WIDTH_MODULATION (0x01) 2535*fd501800SSascha Wildner 2536*fd501800SSascha Wildner 2537*fd501800SSascha Wildner /* 2538*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2539*fd501800SSascha Wildner * one and check the value returned for NumGroups at runtime. 2540*fd501800SSascha Wildner */ 2541*fd501800SSascha Wildner #ifndef MPI2_SAS_IOUNIT7_GROUP_MAX 2542*fd501800SSascha Wildner #define MPI2_SAS_IOUNIT7_GROUP_MAX (1) 2543*fd501800SSascha Wildner #endif 2544*fd501800SSascha Wildner 2545*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_7 2546*fd501800SSascha Wildner { 2547*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2548*fd501800SSascha Wildner U8 SamplingInterval; /* 0x08 */ 2549*fd501800SSascha Wildner U8 WindowLength; /* 0x09 */ 2550*fd501800SSascha Wildner U16 Reserved1; /* 0x0A */ 2551*fd501800SSascha Wildner U32 Reserved2; /* 0x0C */ 2552*fd501800SSascha Wildner U32 Reserved3; /* 0x10 */ 2553*fd501800SSascha Wildner U8 NumGroups; /* 0x14 */ 2554*fd501800SSascha Wildner U8 Reserved4; /* 0x15 */ 2555*fd501800SSascha Wildner U16 Reserved5; /* 0x16 */ 2556*fd501800SSascha Wildner MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS 2557*fd501800SSascha Wildner PortWidthModulationGroupSettings[MPI2_SAS_IOUNIT7_GROUP_MAX]; /* 0x18 */ 2558*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SASIOUNIT_7, 2559*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_7, 2560*fd501800SSascha Wildner Mpi2SasIOUnitPage7_t, MPI2_POINTER pMpi2SasIOUnitPage7_t; 2561*fd501800SSascha Wildner 2562*fd501800SSascha Wildner #define MPI2_SASIOUNITPAGE7_PAGEVERSION (0x00) 2563*fd501800SSascha Wildner 2564*fd501800SSascha Wildner 2565*fd501800SSascha Wildner /* SAS IO Unit Page 8 */ 2566*fd501800SSascha Wildner 2567*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_8 2568*fd501800SSascha Wildner { 2569*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2570*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 2571*fd501800SSascha Wildner U32 PowerManagementCapabilities; /* 0x0C */ 2572*fd501800SSascha Wildner U8 TxRxSleepStatus; /* 0x10 */ /* reserved in MPI 2.0 */ 2573*fd501800SSascha Wildner U8 Reserved2; /* 0x11 */ 2574*fd501800SSascha Wildner U16 Reserved3; /* 0x12 */ 2575*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SASIOUNIT_8, 2576*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_8, 2577*fd501800SSascha Wildner Mpi2SasIOUnitPage8_t, MPI2_POINTER pMpi2SasIOUnitPage8_t; 2578*fd501800SSascha Wildner 2579*fd501800SSascha Wildner #define MPI2_SASIOUNITPAGE8_PAGEVERSION (0x00) 2580*fd501800SSascha Wildner 2581*fd501800SSascha Wildner /* defines for PowerManagementCapabilities field */ 2582*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_HOST_PORT_WIDTH_MOD (0x00001000) 2583*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_HOST_SAS_SLUMBER_MODE (0x00000800) 2584*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_HOST_SAS_PARTIAL_MODE (0x00000400) 2585*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_HOST_SATA_SLUMBER_MODE (0x00000200) 2586*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_HOST_SATA_PARTIAL_MODE (0x00000100) 2587*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_IOUNIT_PORT_WIDTH_MOD (0x00000010) 2588*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_IOUNIT_SAS_SLUMBER_MODE (0x00000008) 2589*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_IOUNIT_SAS_PARTIAL_MODE (0x00000004) 2590*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_IOUNIT_SATA_SLUMBER_MODE (0x00000002) 2591*fd501800SSascha Wildner #define MPI2_SASIOUNIT8_PM_IOUNIT_SATA_PARTIAL_MODE (0x00000001) 2592*fd501800SSascha Wildner 2593*fd501800SSascha Wildner /* defines for TxRxSleepStatus field */ 2594*fd501800SSascha Wildner #define MPI25_SASIOUNIT8_TXRXSLEEP_UNSUPPORTED (0x00) 2595*fd501800SSascha Wildner #define MPI25_SASIOUNIT8_TXRXSLEEP_DISENGAGED (0x01) 2596*fd501800SSascha Wildner #define MPI25_SASIOUNIT8_TXRXSLEEP_ACTIVE (0x02) 2597*fd501800SSascha Wildner #define MPI25_SASIOUNIT8_TXRXSLEEP_SHUTDOWN (0x03) 2598*fd501800SSascha Wildner 2599*fd501800SSascha Wildner 2600*fd501800SSascha Wildner 2601*fd501800SSascha Wildner /* SAS IO Unit Page 16 */ 2602*fd501800SSascha Wildner 2603*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT16 2604*fd501800SSascha Wildner { 2605*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2606*fd501800SSascha Wildner U64 TimeStamp; /* 0x08 */ 2607*fd501800SSascha Wildner U32 Reserved1; /* 0x10 */ 2608*fd501800SSascha Wildner U32 Reserved2; /* 0x14 */ 2609*fd501800SSascha Wildner U32 FastPathPendedRequests; /* 0x18 */ 2610*fd501800SSascha Wildner U32 FastPathUnPendedRequests; /* 0x1C */ 2611*fd501800SSascha Wildner U32 FastPathHostRequestStarts; /* 0x20 */ 2612*fd501800SSascha Wildner U32 FastPathFirmwareRequestStarts; /* 0x24 */ 2613*fd501800SSascha Wildner U32 FastPathHostCompletions; /* 0x28 */ 2614*fd501800SSascha Wildner U32 FastPathFirmwareCompletions; /* 0x2C */ 2615*fd501800SSascha Wildner U32 NonFastPathRequestStarts; /* 0x30 */ 2616*fd501800SSascha Wildner U32 NonFastPathHostCompletions; /* 0x30 */ 2617*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SASIOUNIT16, 2618*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT16, 2619*fd501800SSascha Wildner Mpi2SasIOUnitPage16_t, MPI2_POINTER pMpi2SasIOUnitPage16_t; 2620*fd501800SSascha Wildner 2621*fd501800SSascha Wildner #define MPI2_SASIOUNITPAGE16_PAGEVERSION (0x00) 2622*fd501800SSascha Wildner 2623*fd501800SSascha Wildner 2624*fd501800SSascha Wildner /**************************************************************************** 2625*fd501800SSascha Wildner * SAS Expander Config Pages 2626*fd501800SSascha Wildner ****************************************************************************/ 2627*fd501800SSascha Wildner 2628*fd501800SSascha Wildner /* SAS Expander Page 0 */ 2629*fd501800SSascha Wildner 2630*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_EXPANDER_0 2631*fd501800SSascha Wildner { 2632*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2633*fd501800SSascha Wildner U8 PhysicalPort; /* 0x08 */ 2634*fd501800SSascha Wildner U8 ReportGenLength; /* 0x09 */ 2635*fd501800SSascha Wildner U16 EnclosureHandle; /* 0x0A */ 2636*fd501800SSascha Wildner U64 SASAddress; /* 0x0C */ 2637*fd501800SSascha Wildner U32 DiscoveryStatus; /* 0x14 */ 2638*fd501800SSascha Wildner U16 DevHandle; /* 0x18 */ 2639*fd501800SSascha Wildner U16 ParentDevHandle; /* 0x1A */ 2640*fd501800SSascha Wildner U16 ExpanderChangeCount; /* 0x1C */ 2641*fd501800SSascha Wildner U16 ExpanderRouteIndexes; /* 0x1E */ 2642*fd501800SSascha Wildner U8 NumPhys; /* 0x20 */ 2643*fd501800SSascha Wildner U8 SASLevel; /* 0x21 */ 2644*fd501800SSascha Wildner U16 Flags; /* 0x22 */ 2645*fd501800SSascha Wildner U16 STPBusInactivityTimeLimit; /* 0x24 */ 2646*fd501800SSascha Wildner U16 STPMaxConnectTimeLimit; /* 0x26 */ 2647*fd501800SSascha Wildner U16 STP_SMP_NexusLossTime; /* 0x28 */ 2648*fd501800SSascha Wildner U16 MaxNumRoutedSasAddresses; /* 0x2A */ 2649*fd501800SSascha Wildner U64 ActiveZoneManagerSASAddress;/* 0x2C */ 2650*fd501800SSascha Wildner U16 ZoneLockInactivityLimit; /* 0x34 */ 2651*fd501800SSascha Wildner U16 Reserved1; /* 0x36 */ 2652*fd501800SSascha Wildner U8 TimeToReducedFunc; /* 0x38 */ 2653*fd501800SSascha Wildner U8 InitialTimeToReducedFunc; /* 0x39 */ 2654*fd501800SSascha Wildner U8 MaxReducedFuncTime; /* 0x3A */ 2655*fd501800SSascha Wildner U8 Reserved2; /* 0x3B */ 2656*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_EXPANDER_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_EXPANDER_0, 2657*fd501800SSascha Wildner Mpi2ExpanderPage0_t, MPI2_POINTER pMpi2ExpanderPage0_t; 2658*fd501800SSascha Wildner 2659*fd501800SSascha Wildner #define MPI2_SASEXPANDER0_PAGEVERSION (0x06) 2660*fd501800SSascha Wildner 2661*fd501800SSascha Wildner /* values for SAS Expander Page 0 DiscoveryStatus field */ 2662*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 2663*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_MAX_EXPANDERS_EXCEED (0x40000000) 2664*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_MAX_DEVICES_EXCEED (0x20000000) 2665*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 2666*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_DOWNSTREAM_INITIATOR (0x08000000) 2667*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 2668*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 2669*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_MULTI_PORT_DOMAIN (0x00002000) 2670*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 2671*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_UNSUPPORTED_DEVICE (0x00000800) 2672*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_TABLE_LINK (0x00000400) 2673*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_SUBTRACTIVE_LINK (0x00000200) 2674*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_SMP_CRC_ERROR (0x00000100) 2675*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_SMP_FUNCTION_FAILED (0x00000080) 2676*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_INDEX_NOT_EXIST (0x00000040) 2677*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_OUT_ROUTE_ENTRIES (0x00000020) 2678*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_SMP_TIMEOUT (0x00000010) 2679*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_MULTIPLE_PORTS (0x00000004) 2680*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_UNADDRESSABLE_DEVICE (0x00000002) 2681*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_DS_LOOP_DETECTED (0x00000001) 2682*fd501800SSascha Wildner 2683*fd501800SSascha Wildner /* values for SAS Expander Page 0 Flags field */ 2684*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_REDUCED_FUNCTIONALITY (0x2000) 2685*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_ZONE_LOCKED (0x1000) 2686*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_SUPPORTED_PHYSICAL_PRES (0x0800) 2687*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_ASSERTED_PHYSICAL_PRES (0x0400) 2688*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_ZONING_SUPPORT (0x0200) 2689*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_ENABLED_ZONING (0x0100) 2690*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_TABLE_TO_TABLE_SUPPORT (0x0080) 2691*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_CONNECTOR_END_DEVICE (0x0010) 2692*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_OTHERS_CONFIG (0x0004) 2693*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_CONFIG_IN_PROGRESS (0x0002) 2694*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER0_FLAGS_ROUTE_TABLE_CONFIG (0x0001) 2695*fd501800SSascha Wildner 2696*fd501800SSascha Wildner 2697*fd501800SSascha Wildner /* SAS Expander Page 1 */ 2698*fd501800SSascha Wildner 2699*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_EXPANDER_1 2700*fd501800SSascha Wildner { 2701*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2702*fd501800SSascha Wildner U8 PhysicalPort; /* 0x08 */ 2703*fd501800SSascha Wildner U8 Reserved1; /* 0x09 */ 2704*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 2705*fd501800SSascha Wildner U8 NumPhys; /* 0x0C */ 2706*fd501800SSascha Wildner U8 Phy; /* 0x0D */ 2707*fd501800SSascha Wildner U16 NumTableEntriesProgrammed; /* 0x0E */ 2708*fd501800SSascha Wildner U8 ProgrammedLinkRate; /* 0x10 */ 2709*fd501800SSascha Wildner U8 HwLinkRate; /* 0x11 */ 2710*fd501800SSascha Wildner U16 AttachedDevHandle; /* 0x12 */ 2711*fd501800SSascha Wildner U32 PhyInfo; /* 0x14 */ 2712*fd501800SSascha Wildner U32 AttachedDeviceInfo; /* 0x18 */ 2713*fd501800SSascha Wildner U16 ExpanderDevHandle; /* 0x1C */ 2714*fd501800SSascha Wildner U8 ChangeCount; /* 0x1E */ 2715*fd501800SSascha Wildner U8 NegotiatedLinkRate; /* 0x1F */ 2716*fd501800SSascha Wildner U8 PhyIdentifier; /* 0x20 */ 2717*fd501800SSascha Wildner U8 AttachedPhyIdentifier; /* 0x21 */ 2718*fd501800SSascha Wildner U8 Reserved3; /* 0x22 */ 2719*fd501800SSascha Wildner U8 DiscoveryInfo; /* 0x23 */ 2720*fd501800SSascha Wildner U32 AttachedPhyInfo; /* 0x24 */ 2721*fd501800SSascha Wildner U8 ZoneGroup; /* 0x28 */ 2722*fd501800SSascha Wildner U8 SelfConfigStatus; /* 0x29 */ 2723*fd501800SSascha Wildner U16 Reserved4; /* 0x2A */ 2724*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_EXPANDER_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_EXPANDER_1, 2725*fd501800SSascha Wildner Mpi2ExpanderPage1_t, MPI2_POINTER pMpi2ExpanderPage1_t; 2726*fd501800SSascha Wildner 2727*fd501800SSascha Wildner #define MPI2_SASEXPANDER1_PAGEVERSION (0x02) 2728*fd501800SSascha Wildner 2729*fd501800SSascha Wildner /* use MPI2_SAS_PRATE_ defines for the ProgrammedLinkRate field */ 2730*fd501800SSascha Wildner 2731*fd501800SSascha Wildner /* use MPI2_SAS_HWRATE_ defines for the HwLinkRate field */ 2732*fd501800SSascha Wildner 2733*fd501800SSascha Wildner /* use MPI2_SAS_PHYINFO_ for the PhyInfo field */ 2734*fd501800SSascha Wildner 2735*fd501800SSascha Wildner /* see mpi2_sas.h for the MPI2_SAS_DEVICE_INFO_ defines used for the AttachedDeviceInfo field */ 2736*fd501800SSascha Wildner 2737*fd501800SSascha Wildner /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 2738*fd501800SSascha Wildner 2739*fd501800SSascha Wildner /* values for SAS Expander Page 1 DiscoveryInfo field */ 2740*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER1_DISCINFO_BAD_PHY_DISABLED (0x04) 2741*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER1_DISCINFO_LINK_STATUS_CHANGE (0x02) 2742*fd501800SSascha Wildner #define MPI2_SAS_EXPANDER1_DISCINFO_NO_ROUTING_ENTRIES (0x01) 2743*fd501800SSascha Wildner 2744*fd501800SSascha Wildner /* use MPI2_SAS_APHYINFO_ defines for AttachedPhyInfo field */ 2745*fd501800SSascha Wildner 2746*fd501800SSascha Wildner 2747*fd501800SSascha Wildner /**************************************************************************** 2748*fd501800SSascha Wildner * SAS Device Config Pages 2749*fd501800SSascha Wildner ****************************************************************************/ 2750*fd501800SSascha Wildner 2751*fd501800SSascha Wildner /* SAS Device Page 0 */ 2752*fd501800SSascha Wildner 2753*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 2754*fd501800SSascha Wildner { 2755*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2756*fd501800SSascha Wildner U16 Slot; /* 0x08 */ 2757*fd501800SSascha Wildner U16 EnclosureHandle; /* 0x0A */ 2758*fd501800SSascha Wildner U64 SASAddress; /* 0x0C */ 2759*fd501800SSascha Wildner U16 ParentDevHandle; /* 0x14 */ 2760*fd501800SSascha Wildner U8 PhyNum; /* 0x16 */ 2761*fd501800SSascha Wildner U8 AccessStatus; /* 0x17 */ 2762*fd501800SSascha Wildner U16 DevHandle; /* 0x18 */ 2763*fd501800SSascha Wildner U8 AttachedPhyIdentifier; /* 0x1A */ 2764*fd501800SSascha Wildner U8 ZoneGroup; /* 0x1B */ 2765*fd501800SSascha Wildner U32 DeviceInfo; /* 0x1C */ 2766*fd501800SSascha Wildner U16 Flags; /* 0x20 */ 2767*fd501800SSascha Wildner U8 PhysicalPort; /* 0x22 */ 2768*fd501800SSascha Wildner U8 MaxPortConnections; /* 0x23 */ 2769*fd501800SSascha Wildner U64 DeviceName; /* 0x24 */ 2770*fd501800SSascha Wildner U8 PortGroups; /* 0x2C */ 2771*fd501800SSascha Wildner U8 DmaGroup; /* 0x2D */ 2772*fd501800SSascha Wildner U8 ControlGroup; /* 0x2E */ 2773*fd501800SSascha Wildner U8 EnclosureLevel; /* 0x2F */ 2774*fd501800SSascha Wildner U8 ConnectorName[4]; /* 0x30 */ 2775*fd501800SSascha Wildner U32 Reserved3; /* 0x34 */ 2776*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_DEV_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_DEV_0, 2777*fd501800SSascha Wildner Mpi2SasDevicePage0_t, MPI2_POINTER pMpi2SasDevicePage0_t; 2778*fd501800SSascha Wildner 2779*fd501800SSascha Wildner #define MPI2_SASDEVICE0_PAGEVERSION (0x09) 2780*fd501800SSascha Wildner 2781*fd501800SSascha Wildner /* values for SAS Device Page 0 AccessStatus field */ 2782*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_NO_ERRORS (0x00) 2783*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SATA_INIT_FAILED (0x01) 2784*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SATA_CAPABILITY_FAILED (0x02) 2785*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SATA_AFFILIATION_CONFLICT (0x03) 2786*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SATA_NEEDS_INITIALIZATION (0x04) 2787*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_ROUTE_NOT_ADDRESSABLE (0x05) 2788*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SMP_ERROR_NOT_ADDRESSABLE (0x06) 2789*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_DEVICE_BLOCKED (0x07) 2790*fd501800SSascha Wildner /* specific values for SATA Init failures */ 2791*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_UNKNOWN (0x10) 2792*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_AFFILIATION_CONFLICT (0x11) 2793*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_DIAG (0x12) 2794*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_IDENTIFICATION (0x13) 2795*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_CHECK_POWER (0x14) 2796*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_PIO_SN (0x15) 2797*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_MDMA_SN (0x16) 2798*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_UDMA_SN (0x17) 2799*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_ZONING_VIOLATION (0x18) 2800*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_NOT_ADDRESSABLE (0x19) 2801*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_ASTATUS_SIF_MAX (0x1F) 2802*fd501800SSascha Wildner 2803*fd501800SSascha Wildner /* see mpi2_sas.h for values for SAS Device Page 0 DeviceInfo values */ 2804*fd501800SSascha Wildner 2805*fd501800SSascha Wildner /* values for SAS Device Page 0 Flags field */ 2806*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_UNAUTHORIZED_DEVICE (0x8000) 2807*fd501800SSascha Wildner #define MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH (0x4000) 2808*fd501800SSascha Wildner #define MPI25_SAS_DEVICE0_FLAGS_FAST_PATH_CAPABLE (0x2000) 2809*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_SLUMBER_PM_CAPABLE (0x1000) 2810*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_PARTIAL_PM_CAPABLE (0x0800) 2811*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_SATA_ASYNCHRONOUS_NOTIFY (0x0400) 2812*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_SATA_SW_PRESERVE (0x0200) 2813*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_UNSUPPORTED_DEVICE (0x0100) 2814*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_SATA_48BIT_LBA_SUPPORTED (0x0080) 2815*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_SATA_SMART_SUPPORTED (0x0040) 2816*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_SATA_NCQ_SUPPORTED (0x0020) 2817*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_SATA_FUA_SUPPORTED (0x0010) 2818*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_PORT_SELECTOR_ATTACH (0x0008) 2819*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_PERSIST_CAPABLE (0x0004) 2820*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID (0x0002) 2821*fd501800SSascha Wildner #define MPI2_SAS_DEVICE0_FLAGS_DEVICE_PRESENT (0x0001) 2822*fd501800SSascha Wildner 2823*fd501800SSascha Wildner /* SAS Device Page 1 */ 2824*fd501800SSascha Wildner 2825*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_1 2826*fd501800SSascha Wildner { 2827*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2828*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 2829*fd501800SSascha Wildner U64 SASAddress; /* 0x0C */ 2830*fd501800SSascha Wildner U32 Reserved2; /* 0x14 */ 2831*fd501800SSascha Wildner U16 DevHandle; /* 0x18 */ 2832*fd501800SSascha Wildner U16 Reserved3; /* 0x1A */ 2833*fd501800SSascha Wildner U8 InitialRegDeviceFIS[20];/* 0x1C */ 2834*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_DEV_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_DEV_1, 2835*fd501800SSascha Wildner Mpi2SasDevicePage1_t, MPI2_POINTER pMpi2SasDevicePage1_t; 2836*fd501800SSascha Wildner 2837*fd501800SSascha Wildner #define MPI2_SASDEVICE1_PAGEVERSION (0x01) 2838*fd501800SSascha Wildner 2839*fd501800SSascha Wildner 2840*fd501800SSascha Wildner /**************************************************************************** 2841*fd501800SSascha Wildner * SAS PHY Config Pages 2842*fd501800SSascha Wildner ****************************************************************************/ 2843*fd501800SSascha Wildner 2844*fd501800SSascha Wildner /* SAS PHY Page 0 */ 2845*fd501800SSascha Wildner 2846*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_0 2847*fd501800SSascha Wildner { 2848*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2849*fd501800SSascha Wildner U16 OwnerDevHandle; /* 0x08 */ 2850*fd501800SSascha Wildner U16 Reserved1; /* 0x0A */ 2851*fd501800SSascha Wildner U16 AttachedDevHandle; /* 0x0C */ 2852*fd501800SSascha Wildner U8 AttachedPhyIdentifier; /* 0x0E */ 2853*fd501800SSascha Wildner U8 Reserved2; /* 0x0F */ 2854*fd501800SSascha Wildner U32 AttachedPhyInfo; /* 0x10 */ 2855*fd501800SSascha Wildner U8 ProgrammedLinkRate; /* 0x14 */ 2856*fd501800SSascha Wildner U8 HwLinkRate; /* 0x15 */ 2857*fd501800SSascha Wildner U8 ChangeCount; /* 0x16 */ 2858*fd501800SSascha Wildner U8 Flags; /* 0x17 */ 2859*fd501800SSascha Wildner U32 PhyInfo; /* 0x18 */ 2860*fd501800SSascha Wildner U8 NegotiatedLinkRate; /* 0x1C */ 2861*fd501800SSascha Wildner U8 Reserved3; /* 0x1D */ 2862*fd501800SSascha Wildner U16 Reserved4; /* 0x1E */ 2863*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_PHY_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_0, 2864*fd501800SSascha Wildner Mpi2SasPhyPage0_t, MPI2_POINTER pMpi2SasPhyPage0_t; 2865*fd501800SSascha Wildner 2866*fd501800SSascha Wildner #define MPI2_SASPHY0_PAGEVERSION (0x03) 2867*fd501800SSascha Wildner 2868*fd501800SSascha Wildner /* use MPI2_SAS_APHYINFO_ defines for AttachedPhyInfo field */ 2869*fd501800SSascha Wildner 2870*fd501800SSascha Wildner /* use MPI2_SAS_PRATE_ defines for the ProgrammedLinkRate field */ 2871*fd501800SSascha Wildner 2872*fd501800SSascha Wildner /* use MPI2_SAS_HWRATE_ defines for the HwLinkRate field */ 2873*fd501800SSascha Wildner 2874*fd501800SSascha Wildner /* values for SAS PHY Page 0 Flags field */ 2875*fd501800SSascha Wildner #define MPI2_SAS_PHY0_FLAGS_SGPIO_DIRECT_ATTACH_ENC (0x01) 2876*fd501800SSascha Wildner 2877*fd501800SSascha Wildner /* use MPI2_SAS_PHYINFO_ for the PhyInfo field */ 2878*fd501800SSascha Wildner 2879*fd501800SSascha Wildner /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 2880*fd501800SSascha Wildner 2881*fd501800SSascha Wildner 2882*fd501800SSascha Wildner /* SAS PHY Page 1 */ 2883*fd501800SSascha Wildner 2884*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_1 2885*fd501800SSascha Wildner { 2886*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2887*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 2888*fd501800SSascha Wildner U32 InvalidDwordCount; /* 0x0C */ 2889*fd501800SSascha Wildner U32 RunningDisparityErrorCount; /* 0x10 */ 2890*fd501800SSascha Wildner U32 LossDwordSynchCount; /* 0x14 */ 2891*fd501800SSascha Wildner U32 PhyResetProblemCount; /* 0x18 */ 2892*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_PHY_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_1, 2893*fd501800SSascha Wildner Mpi2SasPhyPage1_t, MPI2_POINTER pMpi2SasPhyPage1_t; 2894*fd501800SSascha Wildner 2895*fd501800SSascha Wildner #define MPI2_SASPHY1_PAGEVERSION (0x01) 2896*fd501800SSascha Wildner 2897*fd501800SSascha Wildner 2898*fd501800SSascha Wildner /* SAS PHY Page 2 */ 2899*fd501800SSascha Wildner 2900*fd501800SSascha Wildner typedef struct _MPI2_SASPHY2_PHY_EVENT 2901*fd501800SSascha Wildner { 2902*fd501800SSascha Wildner U8 PhyEventCode; /* 0x00 */ 2903*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 2904*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 2905*fd501800SSascha Wildner U32 PhyEventInfo; /* 0x04 */ 2906*fd501800SSascha Wildner } MPI2_SASPHY2_PHY_EVENT, MPI2_POINTER PTR_MPI2_SASPHY2_PHY_EVENT, 2907*fd501800SSascha Wildner Mpi2SasPhy2PhyEvent_t, MPI2_POINTER pMpi2SasPhy2PhyEvent_t; 2908*fd501800SSascha Wildner 2909*fd501800SSascha Wildner /* use MPI2_SASPHY3_EVENT_CODE_ for the PhyEventCode field */ 2910*fd501800SSascha Wildner 2911*fd501800SSascha Wildner 2912*fd501800SSascha Wildner /* 2913*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2914*fd501800SSascha Wildner * one and check the value returned for NumPhyEvents at runtime. 2915*fd501800SSascha Wildner */ 2916*fd501800SSascha Wildner #ifndef MPI2_SASPHY2_PHY_EVENT_MAX 2917*fd501800SSascha Wildner #define MPI2_SASPHY2_PHY_EVENT_MAX (1) 2918*fd501800SSascha Wildner #endif 2919*fd501800SSascha Wildner 2920*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_2 2921*fd501800SSascha Wildner { 2922*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2923*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 2924*fd501800SSascha Wildner U8 NumPhyEvents; /* 0x0C */ 2925*fd501800SSascha Wildner U8 Reserved2; /* 0x0D */ 2926*fd501800SSascha Wildner U16 Reserved3; /* 0x0E */ 2927*fd501800SSascha Wildner MPI2_SASPHY2_PHY_EVENT PhyEvent[MPI2_SASPHY2_PHY_EVENT_MAX]; /* 0x10 */ 2928*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_PHY_2, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_2, 2929*fd501800SSascha Wildner Mpi2SasPhyPage2_t, MPI2_POINTER pMpi2SasPhyPage2_t; 2930*fd501800SSascha Wildner 2931*fd501800SSascha Wildner #define MPI2_SASPHY2_PAGEVERSION (0x00) 2932*fd501800SSascha Wildner 2933*fd501800SSascha Wildner 2934*fd501800SSascha Wildner /* SAS PHY Page 3 */ 2935*fd501800SSascha Wildner 2936*fd501800SSascha Wildner typedef struct _MPI2_SASPHY3_PHY_EVENT_CONFIG 2937*fd501800SSascha Wildner { 2938*fd501800SSascha Wildner U8 PhyEventCode; /* 0x00 */ 2939*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 2940*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 2941*fd501800SSascha Wildner U8 CounterType; /* 0x04 */ 2942*fd501800SSascha Wildner U8 ThresholdWindow; /* 0x05 */ 2943*fd501800SSascha Wildner U8 TimeUnits; /* 0x06 */ 2944*fd501800SSascha Wildner U8 Reserved3; /* 0x07 */ 2945*fd501800SSascha Wildner U32 EventThreshold; /* 0x08 */ 2946*fd501800SSascha Wildner U16 ThresholdFlags; /* 0x0C */ 2947*fd501800SSascha Wildner U16 Reserved4; /* 0x0E */ 2948*fd501800SSascha Wildner } MPI2_SASPHY3_PHY_EVENT_CONFIG, MPI2_POINTER PTR_MPI2_SASPHY3_PHY_EVENT_CONFIG, 2949*fd501800SSascha Wildner Mpi2SasPhy3PhyEventConfig_t, MPI2_POINTER pMpi2SasPhy3PhyEventConfig_t; 2950*fd501800SSascha Wildner 2951*fd501800SSascha Wildner /* values for PhyEventCode field */ 2952*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_NO_EVENT (0x00) 2953*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_INVALID_DWORD (0x01) 2954*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RUNNING_DISPARITY_ERROR (0x02) 2955*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_LOSS_DWORD_SYNC (0x03) 2956*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_PHY_RESET_PROBLEM (0x04) 2957*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_ELASTICITY_BUF_OVERFLOW (0x05) 2958*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_ERROR (0x06) 2959*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_ADDR_FRAME_ERROR (0x20) 2960*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_AC_OPEN_REJECT (0x21) 2961*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_AC_OPEN_REJECT (0x22) 2962*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_RC_OPEN_REJECT (0x23) 2963*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_RC_OPEN_REJECT (0x24) 2964*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_AIP_PARTIAL_WAITING_ON (0x25) 2965*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_AIP_CONNECT_WAITING_ON (0x26) 2966*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_BREAK (0x27) 2967*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_BREAK (0x28) 2968*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_BREAK_TIMEOUT (0x29) 2969*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_CONNECTION (0x2A) 2970*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_PEAKTX_PATHWAY_BLOCKED (0x2B) 2971*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_PEAKTX_ARB_WAIT_TIME (0x2C) 2972*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_PEAK_ARB_WAIT_TIME (0x2D) 2973*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_PEAK_CONNECT_TIME (0x2E) 2974*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_SSP_FRAMES (0x40) 2975*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_SSP_FRAMES (0x41) 2976*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_SSP_ERROR_FRAMES (0x42) 2977*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_SSP_ERROR_FRAMES (0x43) 2978*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_CREDIT_BLOCKED (0x44) 2979*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_CREDIT_BLOCKED (0x45) 2980*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_SATA_FRAMES (0x50) 2981*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_SATA_FRAMES (0x51) 2982*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_SATA_OVERFLOW (0x52) 2983*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_SMP_FRAMES (0x60) 2984*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_SMP_FRAMES (0x61) 2985*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_SMP_ERROR_FRAMES (0x63) 2986*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_HOTPLUG_TIMEOUT (0xD0) 2987*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_MISALIGNED_MUX_PRIMITIVE (0xD1) 2988*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RX_AIP (0xD2) 2989*fd501800SSascha Wildner /* Following codes are product specific and in MPI v2.6 and later */ 2990*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_LCARB_WAIT_TIME (0xD3) 2991*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_RCVD_CONN_RESP_WAIT_TIME (0xD4) 2992*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_LCCONN_TIME (0xD5) 2993*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_SSP_TX_START_TRANSMIT (0xD6) 2994*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_SATA_TX_START (0xD7) 2995*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_SMP_TX_START_TRANSMT (0xD8) 2996*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_TX_SMP_BREAK_CONN (0xD9) 2997*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_SSP_RX_START_RECEIVE (0xDA) 2998*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_SATA_RX_START_RECEIVE (0xDB) 2999*fd501800SSascha Wildner #define MPI2_SASPHY3_EVENT_CODE_SMP_RX_START_RECEIVE (0xDC) 3000*fd501800SSascha Wildner 3001*fd501800SSascha Wildner /* values for the CounterType field */ 3002*fd501800SSascha Wildner #define MPI2_SASPHY3_COUNTER_TYPE_WRAPPING (0x00) 3003*fd501800SSascha Wildner #define MPI2_SASPHY3_COUNTER_TYPE_SATURATING (0x01) 3004*fd501800SSascha Wildner #define MPI2_SASPHY3_COUNTER_TYPE_PEAK_VALUE (0x02) 3005*fd501800SSascha Wildner 3006*fd501800SSascha Wildner /* values for the TimeUnits field */ 3007*fd501800SSascha Wildner #define MPI2_SASPHY3_TIME_UNITS_10_MICROSECONDS (0x00) 3008*fd501800SSascha Wildner #define MPI2_SASPHY3_TIME_UNITS_100_MICROSECONDS (0x01) 3009*fd501800SSascha Wildner #define MPI2_SASPHY3_TIME_UNITS_1_MILLISECOND (0x02) 3010*fd501800SSascha Wildner #define MPI2_SASPHY3_TIME_UNITS_10_MILLISECONDS (0x03) 3011*fd501800SSascha Wildner 3012*fd501800SSascha Wildner /* values for the ThresholdFlags field */ 3013*fd501800SSascha Wildner #define MPI2_SASPHY3_TFLAGS_PHY_RESET (0x0002) 3014*fd501800SSascha Wildner #define MPI2_SASPHY3_TFLAGS_EVENT_NOTIFY (0x0001) 3015*fd501800SSascha Wildner 3016*fd501800SSascha Wildner /* 3017*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3018*fd501800SSascha Wildner * one and check the value returned for NumPhyEvents at runtime. 3019*fd501800SSascha Wildner */ 3020*fd501800SSascha Wildner #ifndef MPI2_SASPHY3_PHY_EVENT_MAX 3021*fd501800SSascha Wildner #define MPI2_SASPHY3_PHY_EVENT_MAX (1) 3022*fd501800SSascha Wildner #endif 3023*fd501800SSascha Wildner 3024*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_3 3025*fd501800SSascha Wildner { 3026*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3027*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 3028*fd501800SSascha Wildner U8 NumPhyEvents; /* 0x0C */ 3029*fd501800SSascha Wildner U8 Reserved2; /* 0x0D */ 3030*fd501800SSascha Wildner U16 Reserved3; /* 0x0E */ 3031*fd501800SSascha Wildner MPI2_SASPHY3_PHY_EVENT_CONFIG PhyEventConfig[MPI2_SASPHY3_PHY_EVENT_MAX]; /* 0x10 */ 3032*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_PHY_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_3, 3033*fd501800SSascha Wildner Mpi2SasPhyPage3_t, MPI2_POINTER pMpi2SasPhyPage3_t; 3034*fd501800SSascha Wildner 3035*fd501800SSascha Wildner #define MPI2_SASPHY3_PAGEVERSION (0x00) 3036*fd501800SSascha Wildner 3037*fd501800SSascha Wildner 3038*fd501800SSascha Wildner /* SAS PHY Page 4 */ 3039*fd501800SSascha Wildner 3040*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_4 3041*fd501800SSascha Wildner { 3042*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3043*fd501800SSascha Wildner U16 Reserved1; /* 0x08 */ 3044*fd501800SSascha Wildner U8 Reserved2; /* 0x0A */ 3045*fd501800SSascha Wildner U8 Flags; /* 0x0B */ 3046*fd501800SSascha Wildner U8 InitialFrame[28]; /* 0x0C */ 3047*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_PHY_4, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_4, 3048*fd501800SSascha Wildner Mpi2SasPhyPage4_t, MPI2_POINTER pMpi2SasPhyPage4_t; 3049*fd501800SSascha Wildner 3050*fd501800SSascha Wildner #define MPI2_SASPHY4_PAGEVERSION (0x00) 3051*fd501800SSascha Wildner 3052*fd501800SSascha Wildner /* values for the Flags field */ 3053*fd501800SSascha Wildner #define MPI2_SASPHY4_FLAGS_FRAME_VALID (0x02) 3054*fd501800SSascha Wildner #define MPI2_SASPHY4_FLAGS_SATA_FRAME (0x01) 3055*fd501800SSascha Wildner 3056*fd501800SSascha Wildner 3057*fd501800SSascha Wildner 3058*fd501800SSascha Wildner 3059*fd501800SSascha Wildner /**************************************************************************** 3060*fd501800SSascha Wildner * SAS Port Config Pages 3061*fd501800SSascha Wildner ****************************************************************************/ 3062*fd501800SSascha Wildner 3063*fd501800SSascha Wildner /* SAS Port Page 0 */ 3064*fd501800SSascha Wildner 3065*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_PORT_0 3066*fd501800SSascha Wildner { 3067*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3068*fd501800SSascha Wildner U8 PortNumber; /* 0x08 */ 3069*fd501800SSascha Wildner U8 PhysicalPort; /* 0x09 */ 3070*fd501800SSascha Wildner U8 PortWidth; /* 0x0A */ 3071*fd501800SSascha Wildner U8 PhysicalPortWidth; /* 0x0B */ 3072*fd501800SSascha Wildner U8 ZoneGroup; /* 0x0C */ 3073*fd501800SSascha Wildner U8 Reserved1; /* 0x0D */ 3074*fd501800SSascha Wildner U16 Reserved2; /* 0x0E */ 3075*fd501800SSascha Wildner U64 SASAddress; /* 0x10 */ 3076*fd501800SSascha Wildner U32 DeviceInfo; /* 0x18 */ 3077*fd501800SSascha Wildner U32 Reserved3; /* 0x1C */ 3078*fd501800SSascha Wildner U32 Reserved4; /* 0x20 */ 3079*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_PORT_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PORT_0, 3080*fd501800SSascha Wildner Mpi2SasPortPage0_t, MPI2_POINTER pMpi2SasPortPage0_t; 3081*fd501800SSascha Wildner 3082*fd501800SSascha Wildner #define MPI2_SASPORT0_PAGEVERSION (0x00) 3083*fd501800SSascha Wildner 3084*fd501800SSascha Wildner /* see mpi2_sas.h for values for SAS Port Page 0 DeviceInfo values */ 3085*fd501800SSascha Wildner 3086*fd501800SSascha Wildner 3087*fd501800SSascha Wildner /**************************************************************************** 3088*fd501800SSascha Wildner * SAS Enclosure Config Pages 3089*fd501800SSascha Wildner ****************************************************************************/ 3090*fd501800SSascha Wildner 3091*fd501800SSascha Wildner /* SAS Enclosure Page 0, Enclosure Page 0 */ 3092*fd501800SSascha Wildner 3093*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 3094*fd501800SSascha Wildner { 3095*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3096*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 3097*fd501800SSascha Wildner U64 EnclosureLogicalID; /* 0x0C */ 3098*fd501800SSascha Wildner U16 Flags; /* 0x14 */ 3099*fd501800SSascha Wildner U16 EnclosureHandle; /* 0x16 */ 3100*fd501800SSascha Wildner U16 NumSlots; /* 0x18 */ 3101*fd501800SSascha Wildner U16 StartSlot; /* 0x1A */ 3102*fd501800SSascha Wildner U8 ChassisSlot; /* 0x1C */ 3103*fd501800SSascha Wildner U8 EnclosureLevel; /* 0x1D */ 3104*fd501800SSascha Wildner U16 SEPDevHandle; /* 0x1E */ 3105*fd501800SSascha Wildner U32 Reserved2; /* 0x20 */ 3106*fd501800SSascha Wildner U32 Reserved3; /* 0x24 */ 3107*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0, 3108*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0, 3109*fd501800SSascha Wildner Mpi2SasEnclosurePage0_t, MPI2_POINTER pMpi2SasEnclosurePage0_t, 3110*fd501800SSascha Wildner MPI26_CONFIG_PAGE_ENCLOSURE_0, 3111*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_CONFIG_PAGE_ENCLOSURE_0, 3112*fd501800SSascha Wildner Mpi26EnclosurePage0_t, MPI2_POINTER pMpi26EnclosurePage0_t; 3113*fd501800SSascha Wildner 3114*fd501800SSascha Wildner #define MPI2_SASENCLOSURE0_PAGEVERSION (0x04) 3115*fd501800SSascha Wildner 3116*fd501800SSascha Wildner /* values for SAS Enclosure Page 0 Flags field */ 3117*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_CHASSIS_SLOT_VALID (0x0020) 3118*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID (0x0010) 3119*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_MNG_MASK (0x000F) 3120*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000) 3121*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_SES (0x0001) 3122*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_SGPIO (0x0002) 3123*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_MNG_EXP_SGPIO (0x0003) 3124*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0004) 3125*fd501800SSascha Wildner #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_GPIO (0x0005) 3126*fd501800SSascha Wildner 3127*fd501800SSascha Wildner #define MPI26_ENCLOSURE0_PAGEVERSION (0x04) 3128*fd501800SSascha Wildner 3129*fd501800SSascha Wildner /* Values for Enclosure Page 0 Flags field */ 3130*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_CHASSIS_SLOT_VALID (0x0020) 3131*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_ENCL_LEVEL_VALID (0x0010) 3132*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_MNG_MASK (0x000F) 3133*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000) 3134*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_MNG_IOC_SES (0x0001) 3135*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_MNG_IOC_SGPIO (0x0002) 3136*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_MNG_EXP_SGPIO (0x0003) 3137*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0004) 3138*fd501800SSascha Wildner #define MPI26_ENCLS0_FLAGS_MNG_IOC_GPIO (0x0005) 3139*fd501800SSascha Wildner 3140*fd501800SSascha Wildner /**************************************************************************** 3141*fd501800SSascha Wildner * Log Config Page 3142*fd501800SSascha Wildner ****************************************************************************/ 3143*fd501800SSascha Wildner 3144*fd501800SSascha Wildner /* Log Page 0 */ 3145*fd501800SSascha Wildner 3146*fd501800SSascha Wildner /* 3147*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3148*fd501800SSascha Wildner * one and check the value returned for NumLogEntries at runtime. 3149*fd501800SSascha Wildner */ 3150*fd501800SSascha Wildner #ifndef MPI2_LOG_0_NUM_LOG_ENTRIES 3151*fd501800SSascha Wildner #define MPI2_LOG_0_NUM_LOG_ENTRIES (1) 3152*fd501800SSascha Wildner #endif 3153*fd501800SSascha Wildner 3154*fd501800SSascha Wildner #define MPI2_LOG_0_LOG_DATA_LENGTH (0x1C) 3155*fd501800SSascha Wildner 3156*fd501800SSascha Wildner typedef struct _MPI2_LOG_0_ENTRY 3157*fd501800SSascha Wildner { 3158*fd501800SSascha Wildner U64 TimeStamp; /* 0x00 */ 3159*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 3160*fd501800SSascha Wildner U16 LogSequence; /* 0x0C */ 3161*fd501800SSascha Wildner U16 LogEntryQualifier; /* 0x0E */ 3162*fd501800SSascha Wildner U8 VP_ID; /* 0x10 */ 3163*fd501800SSascha Wildner U8 VF_ID; /* 0x11 */ 3164*fd501800SSascha Wildner U16 Reserved2; /* 0x12 */ 3165*fd501800SSascha Wildner U8 LogData[MPI2_LOG_0_LOG_DATA_LENGTH];/* 0x14 */ 3166*fd501800SSascha Wildner } MPI2_LOG_0_ENTRY, MPI2_POINTER PTR_MPI2_LOG_0_ENTRY, 3167*fd501800SSascha Wildner Mpi2Log0Entry_t, MPI2_POINTER pMpi2Log0Entry_t; 3168*fd501800SSascha Wildner 3169*fd501800SSascha Wildner /* values for Log Page 0 LogEntry LogEntryQualifier field */ 3170*fd501800SSascha Wildner #define MPI2_LOG_0_ENTRY_QUAL_ENTRY_UNUSED (0x0000) 3171*fd501800SSascha Wildner #define MPI2_LOG_0_ENTRY_QUAL_POWER_ON_RESET (0x0001) 3172*fd501800SSascha Wildner #define MPI2_LOG_0_ENTRY_QUAL_TIMESTAMP_UPDATE (0x0002) 3173*fd501800SSascha Wildner #define MPI2_LOG_0_ENTRY_QUAL_MIN_IMPLEMENT_SPEC (0x8000) 3174*fd501800SSascha Wildner #define MPI2_LOG_0_ENTRY_QUAL_MAX_IMPLEMENT_SPEC (0xFFFF) 3175*fd501800SSascha Wildner 3176*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_LOG_0 3177*fd501800SSascha Wildner { 3178*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3179*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 3180*fd501800SSascha Wildner U32 Reserved2; /* 0x0C */ 3181*fd501800SSascha Wildner U16 NumLogEntries; /* 0x10 */ 3182*fd501800SSascha Wildner U16 Reserved3; /* 0x12 */ 3183*fd501800SSascha Wildner MPI2_LOG_0_ENTRY LogEntry[MPI2_LOG_0_NUM_LOG_ENTRIES]; /* 0x14 */ 3184*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_LOG_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_LOG_0, 3185*fd501800SSascha Wildner Mpi2LogPage0_t, MPI2_POINTER pMpi2LogPage0_t; 3186*fd501800SSascha Wildner 3187*fd501800SSascha Wildner #define MPI2_LOG_0_PAGEVERSION (0x02) 3188*fd501800SSascha Wildner 3189*fd501800SSascha Wildner 3190*fd501800SSascha Wildner /**************************************************************************** 3191*fd501800SSascha Wildner * RAID Config Page 3192*fd501800SSascha Wildner ****************************************************************************/ 3193*fd501800SSascha Wildner 3194*fd501800SSascha Wildner /* RAID Page 0 */ 3195*fd501800SSascha Wildner 3196*fd501800SSascha Wildner /* 3197*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3198*fd501800SSascha Wildner * one and check the value returned for NumElements at runtime. 3199*fd501800SSascha Wildner */ 3200*fd501800SSascha Wildner #ifndef MPI2_RAIDCONFIG0_MAX_ELEMENTS 3201*fd501800SSascha Wildner #define MPI2_RAIDCONFIG0_MAX_ELEMENTS (1) 3202*fd501800SSascha Wildner #endif 3203*fd501800SSascha Wildner 3204*fd501800SSascha Wildner typedef struct _MPI2_RAIDCONFIG0_CONFIG_ELEMENT 3205*fd501800SSascha Wildner { 3206*fd501800SSascha Wildner U16 ElementFlags; /* 0x00 */ 3207*fd501800SSascha Wildner U16 VolDevHandle; /* 0x02 */ 3208*fd501800SSascha Wildner U8 HotSparePool; /* 0x04 */ 3209*fd501800SSascha Wildner U8 PhysDiskNum; /* 0x05 */ 3210*fd501800SSascha Wildner U16 PhysDiskDevHandle; /* 0x06 */ 3211*fd501800SSascha Wildner } MPI2_RAIDCONFIG0_CONFIG_ELEMENT, 3212*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_RAIDCONFIG0_CONFIG_ELEMENT, 3213*fd501800SSascha Wildner Mpi2RaidConfig0ConfigElement_t, MPI2_POINTER pMpi2RaidConfig0ConfigElement_t; 3214*fd501800SSascha Wildner 3215*fd501800SSascha Wildner /* values for the ElementFlags field */ 3216*fd501800SSascha Wildner #define MPI2_RAIDCONFIG0_EFLAGS_MASK_ELEMENT_TYPE (0x000F) 3217*fd501800SSascha Wildner #define MPI2_RAIDCONFIG0_EFLAGS_VOLUME_ELEMENT (0x0000) 3218*fd501800SSascha Wildner #define MPI2_RAIDCONFIG0_EFLAGS_VOL_PHYS_DISK_ELEMENT (0x0001) 3219*fd501800SSascha Wildner #define MPI2_RAIDCONFIG0_EFLAGS_HOT_SPARE_ELEMENT (0x0002) 3220*fd501800SSascha Wildner #define MPI2_RAIDCONFIG0_EFLAGS_OCE_ELEMENT (0x0003) 3221*fd501800SSascha Wildner 3222*fd501800SSascha Wildner 3223*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0 3224*fd501800SSascha Wildner { 3225*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3226*fd501800SSascha Wildner U8 NumHotSpares; /* 0x08 */ 3227*fd501800SSascha Wildner U8 NumPhysDisks; /* 0x09 */ 3228*fd501800SSascha Wildner U8 NumVolumes; /* 0x0A */ 3229*fd501800SSascha Wildner U8 ConfigNum; /* 0x0B */ 3230*fd501800SSascha Wildner U32 Flags; /* 0x0C */ 3231*fd501800SSascha Wildner U8 ConfigGUID[24]; /* 0x10 */ 3232*fd501800SSascha Wildner U32 Reserved1; /* 0x28 */ 3233*fd501800SSascha Wildner U8 NumElements; /* 0x2C */ 3234*fd501800SSascha Wildner U8 Reserved2; /* 0x2D */ 3235*fd501800SSascha Wildner U16 Reserved3; /* 0x2E */ 3236*fd501800SSascha Wildner MPI2_RAIDCONFIG0_CONFIG_ELEMENT ConfigElement[MPI2_RAIDCONFIG0_MAX_ELEMENTS]; /* 0x30 */ 3237*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0, 3238*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0, 3239*fd501800SSascha Wildner Mpi2RaidConfigurationPage0_t, MPI2_POINTER pMpi2RaidConfigurationPage0_t; 3240*fd501800SSascha Wildner 3241*fd501800SSascha Wildner #define MPI2_RAIDCONFIG0_PAGEVERSION (0x00) 3242*fd501800SSascha Wildner 3243*fd501800SSascha Wildner /* values for RAID Configuration Page 0 Flags field */ 3244*fd501800SSascha Wildner #define MPI2_RAIDCONFIG0_FLAG_FOREIGN_CONFIG (0x00000001) 3245*fd501800SSascha Wildner 3246*fd501800SSascha Wildner 3247*fd501800SSascha Wildner /**************************************************************************** 3248*fd501800SSascha Wildner * Driver Persistent Mapping Config Pages 3249*fd501800SSascha Wildner ****************************************************************************/ 3250*fd501800SSascha Wildner 3251*fd501800SSascha Wildner /* Driver Persistent Mapping Page 0 */ 3252*fd501800SSascha Wildner 3253*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY 3254*fd501800SSascha Wildner { 3255*fd501800SSascha Wildner U64 PhysicalIdentifier; /* 0x00 */ 3256*fd501800SSascha Wildner U16 MappingInformation; /* 0x08 */ 3257*fd501800SSascha Wildner U16 DeviceIndex; /* 0x0A */ 3258*fd501800SSascha Wildner U32 PhysicalBitsMapping; /* 0x0C */ 3259*fd501800SSascha Wildner U32 Reserved1; /* 0x10 */ 3260*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY, 3261*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY, 3262*fd501800SSascha Wildner Mpi2DriverMap0Entry_t, MPI2_POINTER pMpi2DriverMap0Entry_t; 3263*fd501800SSascha Wildner 3264*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_DRIVER_MAPPING_0 3265*fd501800SSascha Wildner { 3266*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3267*fd501800SSascha Wildner MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY Entry; /* 0x08 */ 3268*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_DRIVER_MAPPING_0, 3269*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_DRIVER_MAPPING_0, 3270*fd501800SSascha Wildner Mpi2DriverMappingPage0_t, MPI2_POINTER pMpi2DriverMappingPage0_t; 3271*fd501800SSascha Wildner 3272*fd501800SSascha Wildner #define MPI2_DRIVERMAPPING0_PAGEVERSION (0x00) 3273*fd501800SSascha Wildner 3274*fd501800SSascha Wildner /* values for Driver Persistent Mapping Page 0 MappingInformation field */ 3275*fd501800SSascha Wildner #define MPI2_DRVMAP0_MAPINFO_SLOT_MASK (0x07F0) 3276*fd501800SSascha Wildner #define MPI2_DRVMAP0_MAPINFO_SLOT_SHIFT (4) 3277*fd501800SSascha Wildner #define MPI2_DRVMAP0_MAPINFO_MISSING_MASK (0x000F) 3278*fd501800SSascha Wildner 3279*fd501800SSascha Wildner 3280*fd501800SSascha Wildner /**************************************************************************** 3281*fd501800SSascha Wildner * Ethernet Config Pages 3282*fd501800SSascha Wildner ****************************************************************************/ 3283*fd501800SSascha Wildner 3284*fd501800SSascha Wildner /* Ethernet Page 0 */ 3285*fd501800SSascha Wildner 3286*fd501800SSascha Wildner /* IP address (union of IPv4 and IPv6) */ 3287*fd501800SSascha Wildner typedef union _MPI2_ETHERNET_IP_ADDR 3288*fd501800SSascha Wildner { 3289*fd501800SSascha Wildner U32 IPv4Addr; 3290*fd501800SSascha Wildner U32 IPv6Addr[4]; 3291*fd501800SSascha Wildner } MPI2_ETHERNET_IP_ADDR, MPI2_POINTER PTR_MPI2_ETHERNET_IP_ADDR, 3292*fd501800SSascha Wildner Mpi2EthernetIpAddr_t, MPI2_POINTER pMpi2EthernetIpAddr_t; 3293*fd501800SSascha Wildner 3294*fd501800SSascha Wildner #define MPI2_ETHERNET_HOST_NAME_LENGTH (32) 3295*fd501800SSascha Wildner 3296*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_ETHERNET_0 3297*fd501800SSascha Wildner { 3298*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3299*fd501800SSascha Wildner U8 NumInterfaces; /* 0x08 */ 3300*fd501800SSascha Wildner U8 Reserved0; /* 0x09 */ 3301*fd501800SSascha Wildner U16 Reserved1; /* 0x0A */ 3302*fd501800SSascha Wildner U32 Status; /* 0x0C */ 3303*fd501800SSascha Wildner U8 MediaState; /* 0x10 */ 3304*fd501800SSascha Wildner U8 Reserved2; /* 0x11 */ 3305*fd501800SSascha Wildner U16 Reserved3; /* 0x12 */ 3306*fd501800SSascha Wildner U8 MacAddress[6]; /* 0x14 */ 3307*fd501800SSascha Wildner U8 Reserved4; /* 0x1A */ 3308*fd501800SSascha Wildner U8 Reserved5; /* 0x1B */ 3309*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR IpAddress; /* 0x1C */ 3310*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR SubnetMask; /* 0x2C */ 3311*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR GatewayIpAddress; /* 0x3C */ 3312*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR DNS1IpAddress; /* 0x4C */ 3313*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR DNS2IpAddress; /* 0x5C */ 3314*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR DhcpIpAddress; /* 0x6C */ 3315*fd501800SSascha Wildner U8 HostName[MPI2_ETHERNET_HOST_NAME_LENGTH];/* 0x7C */ 3316*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_ETHERNET_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_ETHERNET_0, 3317*fd501800SSascha Wildner Mpi2EthernetPage0_t, MPI2_POINTER pMpi2EthernetPage0_t; 3318*fd501800SSascha Wildner 3319*fd501800SSascha Wildner #define MPI2_ETHERNETPAGE0_PAGEVERSION (0x00) 3320*fd501800SSascha Wildner 3321*fd501800SSascha Wildner /* values for Ethernet Page 0 Status field */ 3322*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_IPV6_CAPABLE (0x80000000) 3323*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_IPV4_CAPABLE (0x40000000) 3324*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_CONSOLE_CONNECTED (0x20000000) 3325*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_DEFAULT_IF (0x00000100) 3326*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_FW_DWNLD_ENABLED (0x00000080) 3327*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_TELNET_ENABLED (0x00000040) 3328*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_SSH2_ENABLED (0x00000020) 3329*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_DHCP_CLIENT_ENABLED (0x00000010) 3330*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_IPV6_ENABLED (0x00000008) 3331*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_IPV4_ENABLED (0x00000004) 3332*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_IPV6_ADDRESSES (0x00000002) 3333*fd501800SSascha Wildner #define MPI2_ETHPG0_STATUS_ETH_IF_ENABLED (0x00000001) 3334*fd501800SSascha Wildner 3335*fd501800SSascha Wildner /* values for Ethernet Page 0 MediaState field */ 3336*fd501800SSascha Wildner #define MPI2_ETHPG0_MS_DUPLEX_MASK (0x80) 3337*fd501800SSascha Wildner #define MPI2_ETHPG0_MS_HALF_DUPLEX (0x00) 3338*fd501800SSascha Wildner #define MPI2_ETHPG0_MS_FULL_DUPLEX (0x80) 3339*fd501800SSascha Wildner 3340*fd501800SSascha Wildner #define MPI2_ETHPG0_MS_CONNECT_SPEED_MASK (0x07) 3341*fd501800SSascha Wildner #define MPI2_ETHPG0_MS_NOT_CONNECTED (0x00) 3342*fd501800SSascha Wildner #define MPI2_ETHPG0_MS_10MBIT (0x01) 3343*fd501800SSascha Wildner #define MPI2_ETHPG0_MS_100MBIT (0x02) 3344*fd501800SSascha Wildner #define MPI2_ETHPG0_MS_1GBIT (0x03) 3345*fd501800SSascha Wildner 3346*fd501800SSascha Wildner 3347*fd501800SSascha Wildner /* Ethernet Page 1 */ 3348*fd501800SSascha Wildner 3349*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_ETHERNET_1 3350*fd501800SSascha Wildner { 3351*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3352*fd501800SSascha Wildner U32 Reserved0; /* 0x08 */ 3353*fd501800SSascha Wildner U32 Flags; /* 0x0C */ 3354*fd501800SSascha Wildner U8 MediaState; /* 0x10 */ 3355*fd501800SSascha Wildner U8 Reserved1; /* 0x11 */ 3356*fd501800SSascha Wildner U16 Reserved2; /* 0x12 */ 3357*fd501800SSascha Wildner U8 MacAddress[6]; /* 0x14 */ 3358*fd501800SSascha Wildner U8 Reserved3; /* 0x1A */ 3359*fd501800SSascha Wildner U8 Reserved4; /* 0x1B */ 3360*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR StaticIpAddress; /* 0x1C */ 3361*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR StaticSubnetMask; /* 0x2C */ 3362*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR StaticGatewayIpAddress; /* 0x3C */ 3363*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR StaticDNS1IpAddress; /* 0x4C */ 3364*fd501800SSascha Wildner MPI2_ETHERNET_IP_ADDR StaticDNS2IpAddress; /* 0x5C */ 3365*fd501800SSascha Wildner U32 Reserved5; /* 0x6C */ 3366*fd501800SSascha Wildner U32 Reserved6; /* 0x70 */ 3367*fd501800SSascha Wildner U32 Reserved7; /* 0x74 */ 3368*fd501800SSascha Wildner U32 Reserved8; /* 0x78 */ 3369*fd501800SSascha Wildner U8 HostName[MPI2_ETHERNET_HOST_NAME_LENGTH];/* 0x7C */ 3370*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_ETHERNET_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_ETHERNET_1, 3371*fd501800SSascha Wildner Mpi2EthernetPage1_t, MPI2_POINTER pMpi2EthernetPage1_t; 3372*fd501800SSascha Wildner 3373*fd501800SSascha Wildner #define MPI2_ETHERNETPAGE1_PAGEVERSION (0x00) 3374*fd501800SSascha Wildner 3375*fd501800SSascha Wildner /* values for Ethernet Page 1 Flags field */ 3376*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_SET_DEFAULT_IF (0x00000100) 3377*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_ENABLE_FW_DOWNLOAD (0x00000080) 3378*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_ENABLE_TELNET (0x00000040) 3379*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_ENABLE_SSH2 (0x00000020) 3380*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_ENABLE_DHCP_CLIENT (0x00000010) 3381*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_ENABLE_IPV6 (0x00000008) 3382*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_ENABLE_IPV4 (0x00000004) 3383*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_USE_IPV6_ADDRESSES (0x00000002) 3384*fd501800SSascha Wildner #define MPI2_ETHPG1_FLAG_ENABLE_ETH_IF (0x00000001) 3385*fd501800SSascha Wildner 3386*fd501800SSascha Wildner /* values for Ethernet Page 1 MediaState field */ 3387*fd501800SSascha Wildner #define MPI2_ETHPG1_MS_DUPLEX_MASK (0x80) 3388*fd501800SSascha Wildner #define MPI2_ETHPG1_MS_HALF_DUPLEX (0x00) 3389*fd501800SSascha Wildner #define MPI2_ETHPG1_MS_FULL_DUPLEX (0x80) 3390*fd501800SSascha Wildner 3391*fd501800SSascha Wildner #define MPI2_ETHPG1_MS_DATA_RATE_MASK (0x07) 3392*fd501800SSascha Wildner #define MPI2_ETHPG1_MS_DATA_RATE_AUTO (0x00) 3393*fd501800SSascha Wildner #define MPI2_ETHPG1_MS_DATA_RATE_10MBIT (0x01) 3394*fd501800SSascha Wildner #define MPI2_ETHPG1_MS_DATA_RATE_100MBIT (0x02) 3395*fd501800SSascha Wildner #define MPI2_ETHPG1_MS_DATA_RATE_1GBIT (0x03) 3396*fd501800SSascha Wildner 3397*fd501800SSascha Wildner 3398*fd501800SSascha Wildner /**************************************************************************** 3399*fd501800SSascha Wildner * Extended Manufacturing Config Pages 3400*fd501800SSascha Wildner ****************************************************************************/ 3401*fd501800SSascha Wildner 3402*fd501800SSascha Wildner /* 3403*fd501800SSascha Wildner * Generic structure to use for product-specific extended manufacturing pages 3404*fd501800SSascha Wildner * (currently Extended Manufacturing Page 40 through Extended Manufacturing 3405*fd501800SSascha Wildner * Page 60). 3406*fd501800SSascha Wildner */ 3407*fd501800SSascha Wildner 3408*fd501800SSascha Wildner typedef struct _MPI2_CONFIG_PAGE_EXT_MAN_PS 3409*fd501800SSascha Wildner { 3410*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3411*fd501800SSascha Wildner U32 ProductSpecificInfo; /* 0x08 */ 3412*fd501800SSascha Wildner } MPI2_CONFIG_PAGE_EXT_MAN_PS, 3413*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_CONFIG_PAGE_EXT_MAN_PS, 3414*fd501800SSascha Wildner Mpi2ExtManufacturingPagePS_t, MPI2_POINTER pMpi2ExtManufacturingPagePS_t; 3415*fd501800SSascha Wildner 3416*fd501800SSascha Wildner /* PageVersion should be provided by product-specific code */ 3417*fd501800SSascha Wildner 3418*fd501800SSascha Wildner 3419*fd501800SSascha Wildner /**************************************************************************** 3420*fd501800SSascha Wildner * values for fields used by several types of PCIe Config Pages 3421*fd501800SSascha Wildner ****************************************************************************/ 3422*fd501800SSascha Wildner 3423*fd501800SSascha Wildner /* values for NegotiatedLinkRates fields */ 3424*fd501800SSascha Wildner #define MPI26_PCIE_NEG_LINK_RATE_MASK_PHYSICAL (0x0F) 3425*fd501800SSascha Wildner /* link rates used for Negotiated Physical Link Rate */ 3426*fd501800SSascha Wildner #define MPI26_PCIE_NEG_LINK_RATE_UNKNOWN (0x00) 3427*fd501800SSascha Wildner #define MPI26_PCIE_NEG_LINK_RATE_PHY_DISABLED (0x01) 3428*fd501800SSascha Wildner #define MPI26_PCIE_NEG_LINK_RATE_2_5 (0x02) 3429*fd501800SSascha Wildner #define MPI26_PCIE_NEG_LINK_RATE_5_0 (0x03) 3430*fd501800SSascha Wildner #define MPI26_PCIE_NEG_LINK_RATE_8_0 (0x04) 3431*fd501800SSascha Wildner #define MPI26_PCIE_NEG_LINK_RATE_16_0 (0x05) 3432*fd501800SSascha Wildner 3433*fd501800SSascha Wildner 3434*fd501800SSascha Wildner /**************************************************************************** 3435*fd501800SSascha Wildner * PCIe IO Unit Config Pages (MPI v2.6 and later) 3436*fd501800SSascha Wildner ****************************************************************************/ 3437*fd501800SSascha Wildner 3438*fd501800SSascha Wildner /* PCIe IO Unit Page 0 */ 3439*fd501800SSascha Wildner 3440*fd501800SSascha Wildner typedef struct _MPI26_PCIE_IO_UNIT0_PHY_DATA 3441*fd501800SSascha Wildner { 3442*fd501800SSascha Wildner U8 Link; /* 0x00 */ 3443*fd501800SSascha Wildner U8 LinkFlags; /* 0x01 */ 3444*fd501800SSascha Wildner U8 PhyFlags; /* 0x02 */ 3445*fd501800SSascha Wildner U8 NegotiatedLinkRate; /* 0x03 */ 3446*fd501800SSascha Wildner U32 ControllerPhyDeviceInfo;/* 0x04 */ 3447*fd501800SSascha Wildner U16 AttachedDevHandle; /* 0x08 */ 3448*fd501800SSascha Wildner U16 ControllerDevHandle; /* 0x0A */ 3449*fd501800SSascha Wildner U32 EnumerationStatus; /* 0x0C */ 3450*fd501800SSascha Wildner U32 Reserved1; /* 0x10 */ 3451*fd501800SSascha Wildner } MPI26_PCIE_IO_UNIT0_PHY_DATA, MPI2_POINTER PTR_MPI26_PCIE_IO_UNIT0_PHY_DATA, 3452*fd501800SSascha Wildner Mpi26PCIeIOUnit0PhyData_t, MPI2_POINTER pMpi26PCIeIOUnit0PhyData_t; 3453*fd501800SSascha Wildner 3454*fd501800SSascha Wildner /* 3455*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3456*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 3457*fd501800SSascha Wildner */ 3458*fd501800SSascha Wildner #ifndef MPI26_PCIE_IOUNIT0_PHY_MAX 3459*fd501800SSascha Wildner #define MPI26_PCIE_IOUNIT0_PHY_MAX (1) 3460*fd501800SSascha Wildner #endif 3461*fd501800SSascha Wildner 3462*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PIOUNIT_0 3463*fd501800SSascha Wildner { 3464*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3465*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 3466*fd501800SSascha Wildner U8 NumPhys; /* 0x0C */ 3467*fd501800SSascha Wildner U8 InitStatus; /* 0x0D */ 3468*fd501800SSascha Wildner U16 Reserved3; /* 0x0E */ 3469*fd501800SSascha Wildner MPI26_PCIE_IO_UNIT0_PHY_DATA PhyData[MPI26_PCIE_IOUNIT0_PHY_MAX]; /* 0x10 */ 3470*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PIOUNIT_0, 3471*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PIOUNIT_0, 3472*fd501800SSascha Wildner Mpi26PCIeIOUnitPage0_t, MPI2_POINTER pMpi26PCIeIOUnitPage0_t; 3473*fd501800SSascha Wildner 3474*fd501800SSascha Wildner #define MPI26_PCIEIOUNITPAGE0_PAGEVERSION (0x00) 3475*fd501800SSascha Wildner 3476*fd501800SSascha Wildner /* values for PCIe IO Unit Page 0 LinkFlags */ 3477*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT0_LINKFLAGS_ENUMERATION_IN_PROGRESS (0x08) 3478*fd501800SSascha Wildner 3479*fd501800SSascha Wildner /* values for PCIe IO Unit Page 0 PhyFlags */ 3480*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT0_PHYFLAGS_PHY_DISABLED (0x08) 3481*fd501800SSascha Wildner 3482*fd501800SSascha Wildner /* use MPI26_PCIE_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 3483*fd501800SSascha Wildner 3484*fd501800SSascha Wildner /* see mpi2_pci.h for values for PCIe IO Unit Page 0 ControllerPhyDeviceInfo values */ 3485*fd501800SSascha Wildner 3486*fd501800SSascha Wildner /* values for PCIe IO Unit Page 0 EnumerationStatus */ 3487*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT0_ES_MAX_SWITCHES_EXCEEDED (0x40000000) 3488*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT0_ES_MAX_DEVICES_EXCEEDED (0x20000000) 3489*fd501800SSascha Wildner 3490*fd501800SSascha Wildner 3491*fd501800SSascha Wildner /* PCIe IO Unit Page 1 */ 3492*fd501800SSascha Wildner 3493*fd501800SSascha Wildner typedef struct _MPI26_PCIE_IO_UNIT1_PHY_DATA 3494*fd501800SSascha Wildner { 3495*fd501800SSascha Wildner U8 Link; /* 0x00 */ 3496*fd501800SSascha Wildner U8 LinkFlags; /* 0x01 */ 3497*fd501800SSascha Wildner U8 PhyFlags; /* 0x02 */ 3498*fd501800SSascha Wildner U8 MaxMinLinkRate; /* 0x03 */ 3499*fd501800SSascha Wildner U32 ControllerPhyDeviceInfo; /* 0x04 */ 3500*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 3501*fd501800SSascha Wildner } MPI26_PCIE_IO_UNIT1_PHY_DATA, MPI2_POINTER PTR_MPI26_PCIE_IO_UNIT1_PHY_DATA, 3502*fd501800SSascha Wildner Mpi26PCIeIOUnit1PhyData_t, MPI2_POINTER pMpi26PCIeIOUnit1PhyData_t; 3503*fd501800SSascha Wildner 3504*fd501800SSascha Wildner /* values for LinkFlags */ 3505*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_LINKFLAGS_DIS_SRIS (0x00) 3506*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_LINKFLAGS_EN_SRIS (0x01) 3507*fd501800SSascha Wildner 3508*fd501800SSascha Wildner /* 3509*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3510*fd501800SSascha Wildner * one and check the value returned for NumPhys at runtime. 3511*fd501800SSascha Wildner */ 3512*fd501800SSascha Wildner #ifndef MPI26_PCIE_IOUNIT1_PHY_MAX 3513*fd501800SSascha Wildner #define MPI26_PCIE_IOUNIT1_PHY_MAX (1) 3514*fd501800SSascha Wildner #endif 3515*fd501800SSascha Wildner 3516*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PIOUNIT_1 3517*fd501800SSascha Wildner { 3518*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3519*fd501800SSascha Wildner U16 ControlFlags; /* 0x08 */ 3520*fd501800SSascha Wildner U16 Reserved; /* 0x0A */ 3521*fd501800SSascha Wildner U16 AdditionalControlFlags; /* 0x0C */ 3522*fd501800SSascha Wildner U16 NVMeMaxQueueDepth; /* 0x0E */ 3523*fd501800SSascha Wildner U8 NumPhys; /* 0x10 */ 3524*fd501800SSascha Wildner U8 Reserved1; /* 0x11 */ 3525*fd501800SSascha Wildner U16 Reserved2; /* 0x12 */ 3526*fd501800SSascha Wildner MPI26_PCIE_IO_UNIT1_PHY_DATA PhyData[MPI26_PCIE_IOUNIT1_PHY_MAX];/* 0x14 */ 3527*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PIOUNIT_1, 3528*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PIOUNIT_1, 3529*fd501800SSascha Wildner Mpi26PCIeIOUnitPage1_t, MPI2_POINTER pMpi26PCIeIOUnitPage1_t; 3530*fd501800SSascha Wildner 3531*fd501800SSascha Wildner #define MPI26_PCIEIOUNITPAGE1_PAGEVERSION (0x00) 3532*fd501800SSascha Wildner 3533*fd501800SSascha Wildner /* values for PCIe IO Unit Page 1 PhyFlags */ 3534*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_PHYFLAGS_PHY_DISABLE (0x08) 3535*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_PHYFLAGS_ENDPOINT_ONLY (0x01) 3536*fd501800SSascha Wildner 3537*fd501800SSascha Wildner /* values for PCIe IO Unit Page 1 MaxMinLinkRate */ 3538*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_MAX_RATE_MASK (0xF0) 3539*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_MAX_RATE_SHIFT (4) 3540*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_MAX_RATE_2_5 (0x20) 3541*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_MAX_RATE_5_0 (0x30) 3542*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_MAX_RATE_8_0 (0x40) 3543*fd501800SSascha Wildner #define MPI26_PCIEIOUNIT1_MAX_RATE_16_0 (0x50) 3544*fd501800SSascha Wildner 3545*fd501800SSascha Wildner /* see mpi2_pci.h for values for PCIe IO Unit Page 0 ControllerPhyDeviceInfo values */ 3546*fd501800SSascha Wildner 3547*fd501800SSascha Wildner 3548*fd501800SSascha Wildner /**************************************************************************** 3549*fd501800SSascha Wildner * PCIe Switch Config Pages (MPI v2.6 and later) 3550*fd501800SSascha Wildner ****************************************************************************/ 3551*fd501800SSascha Wildner 3552*fd501800SSascha Wildner /* PCIe Switch Page 0 */ 3553*fd501800SSascha Wildner 3554*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PSWITCH_0 3555*fd501800SSascha Wildner { 3556*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3557*fd501800SSascha Wildner U8 PhysicalPort; /* 0x08 */ 3558*fd501800SSascha Wildner U8 Reserved1; /* 0x09 */ 3559*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 3560*fd501800SSascha Wildner U16 DevHandle; /* 0x0C */ 3561*fd501800SSascha Wildner U16 ParentDevHandle; /* 0x0E */ 3562*fd501800SSascha Wildner U8 NumPorts; /* 0x10 */ 3563*fd501800SSascha Wildner U8 PCIeLevel; /* 0x11 */ 3564*fd501800SSascha Wildner U16 Reserved3; /* 0x12 */ 3565*fd501800SSascha Wildner U32 Reserved4; /* 0x14 */ 3566*fd501800SSascha Wildner U32 Reserved5; /* 0x18 */ 3567*fd501800SSascha Wildner U32 Reserved6; /* 0x1C */ 3568*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PSWITCH_0, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PSWITCH_0, 3569*fd501800SSascha Wildner Mpi26PCIeSwitchPage0_t, MPI2_POINTER pMpi26PCIeSwitchPage0_t; 3570*fd501800SSascha Wildner 3571*fd501800SSascha Wildner #define MPI26_PCIESWITCH0_PAGEVERSION (0x00) 3572*fd501800SSascha Wildner 3573*fd501800SSascha Wildner 3574*fd501800SSascha Wildner /* PCIe Switch Page 1 */ 3575*fd501800SSascha Wildner 3576*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PSWITCH_1 3577*fd501800SSascha Wildner { 3578*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3579*fd501800SSascha Wildner U8 PhysicalPort; /* 0x08 */ 3580*fd501800SSascha Wildner U8 Reserved1; /* 0x09 */ 3581*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 3582*fd501800SSascha Wildner U8 NumPorts; /* 0x0C */ 3583*fd501800SSascha Wildner U8 PortNum; /* 0x0D */ 3584*fd501800SSascha Wildner U16 AttachedDevHandle; /* 0x0E */ 3585*fd501800SSascha Wildner U16 SwitchDevHandle; /* 0x10 */ 3586*fd501800SSascha Wildner U8 NegotiatedPortWidth; /* 0x12 */ 3587*fd501800SSascha Wildner U8 NegotiatedLinkRate; /* 0x13 */ 3588*fd501800SSascha Wildner U32 Reserved4; /* 0x14 */ 3589*fd501800SSascha Wildner U32 Reserved5; /* 0x18 */ 3590*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PSWITCH_1, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PSWITCH_1, 3591*fd501800SSascha Wildner Mpi26PCIeSwitchPage1_t, MPI2_POINTER pMpi26PCIeSwitchPage1_t; 3592*fd501800SSascha Wildner 3593*fd501800SSascha Wildner #define MPI26_PCIESWITCH1_PAGEVERSION (0x00) 3594*fd501800SSascha Wildner 3595*fd501800SSascha Wildner /* use MPI26_PCIE_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 3596*fd501800SSascha Wildner 3597*fd501800SSascha Wildner 3598*fd501800SSascha Wildner /**************************************************************************** 3599*fd501800SSascha Wildner * PCIe Device Config Pages (MPI v2.6 and later) 3600*fd501800SSascha Wildner ****************************************************************************/ 3601*fd501800SSascha Wildner 3602*fd501800SSascha Wildner /* PCIe Device Page 0 */ 3603*fd501800SSascha Wildner 3604*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PCIEDEV_0 3605*fd501800SSascha Wildner { 3606*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3607*fd501800SSascha Wildner U16 Slot; /* 0x08 */ 3608*fd501800SSascha Wildner U16 EnclosureHandle; /* 0x0A */ 3609*fd501800SSascha Wildner U64 WWID; /* 0x0C */ 3610*fd501800SSascha Wildner U16 ParentDevHandle; /* 0x14 */ 3611*fd501800SSascha Wildner U8 PortNum; /* 0x16 */ 3612*fd501800SSascha Wildner U8 AccessStatus; /* 0x17 */ 3613*fd501800SSascha Wildner U16 DevHandle; /* 0x18 */ 3614*fd501800SSascha Wildner U8 PhysicalPort; /* 0x1A */ 3615*fd501800SSascha Wildner U8 Reserved1; /* 0x1B */ 3616*fd501800SSascha Wildner U32 DeviceInfo; /* 0x1C */ 3617*fd501800SSascha Wildner U32 Flags; /* 0x20 */ 3618*fd501800SSascha Wildner U8 SupportedLinkRates; /* 0x24 */ 3619*fd501800SSascha Wildner U8 MaxPortWidth; /* 0x25 */ 3620*fd501800SSascha Wildner U8 NegotiatedPortWidth; /* 0x26 */ 3621*fd501800SSascha Wildner U8 NegotiatedLinkRate; /* 0x27 */ 3622*fd501800SSascha Wildner U8 EnclosureLevel; /* 0x28 */ 3623*fd501800SSascha Wildner U8 Reserved2; /* 0x29 */ 3624*fd501800SSascha Wildner U16 Reserved3; /* 0x2A */ 3625*fd501800SSascha Wildner U8 ConnectorName[4]; /* 0x2C */ 3626*fd501800SSascha Wildner U32 Reserved4; /* 0x30 */ 3627*fd501800SSascha Wildner U32 Reserved5; /* 0x34 */ 3628*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PCIEDEV_0, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIEDEV_0, 3629*fd501800SSascha Wildner Mpi26PCIeDevicePage0_t, MPI2_POINTER pMpi26PCIeDevicePage0_t; 3630*fd501800SSascha Wildner 3631*fd501800SSascha Wildner #define MPI26_PCIEDEVICE0_PAGEVERSION (0x01) 3632*fd501800SSascha Wildner 3633*fd501800SSascha Wildner /* values for PCIe Device Page 0 AccessStatus field */ 3634*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NO_ERRORS (0x00) 3635*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NEEDS_INITIALIZATION (0x04) 3636*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_CAPABILITY_FAILED (0x02) 3637*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_DEVICE_BLOCKED (0x07) 3638*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_MEMORY_SPACE_ACCESS_FAILED (0x08) 3639*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_UNSUPPORTED_DEVICE (0x09) 3640*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_MSIX_REQUIRED (0x0A) 3641*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_UNKNOWN (0x10) 3642*fd501800SSascha Wildner 3643*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_READY_TIMEOUT (0x30) 3644*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_DEVCFG_UNSUPPORTED (0x31) 3645*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_IDENTIFY_FAILED (0x32) 3646*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_QCONFIG_FAILED (0x33) 3647*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_QCREATION_FAILED (0x34) 3648*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_EVENTCFG_FAILED (0x35) 3649*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_GET_FEATURE_STAT_FAILED (0x36) 3650*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_IDLE_TIMEOUT (0x37) 3651*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_NVME_FAILURE_STATUS (0x38) 3652*fd501800SSascha Wildner 3653*fd501800SSascha Wildner #define MPI26_PCIEDEV0_ASTATUS_INIT_FAIL_MAX (0x3F) 3654*fd501800SSascha Wildner 3655*fd501800SSascha Wildner /* see mpi2_pci.h for the MPI26_PCIE_DEVINFO_ defines used for the DeviceInfo field */ 3656*fd501800SSascha Wildner 3657*fd501800SSascha Wildner /* values for PCIe Device Page 0 Flags field */ 3658*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_UNAUTHORIZED_DEVICE (0x8000) 3659*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_ENABLED_FAST_PATH (0x4000) 3660*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_FAST_PATH_CAPABLE (0x2000) 3661*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_ASYNCHRONOUS_NOTIFICATION (0x0400) 3662*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_ATA_SW_PRESERVATION (0x0200) 3663*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_UNSUPPORTED_DEVICE (0x0100) 3664*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_ATA_48BIT_LBA_SUPPORTED (0x0080) 3665*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_ATA_SMART_SUPPORTED (0x0040) 3666*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_ATA_NCQ_SUPPORTED (0x0020) 3667*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_ATA_FUA_SUPPORTED (0x0010) 3668*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_ENCL_LEVEL_VALID (0x0002) 3669*fd501800SSascha Wildner #define MPI26_PCIEDEV0_FLAGS_DEVICE_PRESENT (0x0001) 3670*fd501800SSascha Wildner 3671*fd501800SSascha Wildner /* values for PCIe Device Page 0 SupportedLinkRates field */ 3672*fd501800SSascha Wildner #define MPI26_PCIEDEV0_LINK_RATE_16_0_SUPPORTED (0x08) 3673*fd501800SSascha Wildner #define MPI26_PCIEDEV0_LINK_RATE_8_0_SUPPORTED (0x04) 3674*fd501800SSascha Wildner #define MPI26_PCIEDEV0_LINK_RATE_5_0_SUPPORTED (0x02) 3675*fd501800SSascha Wildner #define MPI26_PCIEDEV0_LINK_RATE_2_5_SUPPORTED (0x01) 3676*fd501800SSascha Wildner 3677*fd501800SSascha Wildner /* use MPI26_PCIE_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 3678*fd501800SSascha Wildner 3679*fd501800SSascha Wildner 3680*fd501800SSascha Wildner /* PCIe Device Page 2 */ 3681*fd501800SSascha Wildner 3682*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PCIEDEV_2 3683*fd501800SSascha Wildner { 3684*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3685*fd501800SSascha Wildner U16 DevHandle; /* 0x08 */ 3686*fd501800SSascha Wildner U16 Reserved1; /* 0x0A */ 3687*fd501800SSascha Wildner U32 MaximumDataTransferSize;/* 0x0C */ 3688*fd501800SSascha Wildner U32 Capabilities; /* 0x10 */ 3689*fd501800SSascha Wildner U32 Reserved2; /* 0x14 */ 3690*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PCIEDEV_2, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIEDEV_2, 3691*fd501800SSascha Wildner Mpi26PCIeDevicePage2_t, MPI2_POINTER pMpi26PCIeDevicePage2_t; 3692*fd501800SSascha Wildner 3693*fd501800SSascha Wildner #define MPI26_PCIEDEVICE2_PAGEVERSION (0x00) 3694*fd501800SSascha Wildner 3695*fd501800SSascha Wildner /* defines for PCIe Device Page 2 Capabilities field */ 3696*fd501800SSascha Wildner #define MPI26_PCIEDEV2_CAP_SGL_FORMAT (0x00000004) 3697*fd501800SSascha Wildner #define MPI26_PCIEDEV2_CAP_BIT_BUCKET_SUPPORT (0x00000002) 3698*fd501800SSascha Wildner #define MPI26_PCIEDEV2_CAP_SGL_SUPPORT (0x00000001) 3699*fd501800SSascha Wildner 3700*fd501800SSascha Wildner 3701*fd501800SSascha Wildner /**************************************************************************** 3702*fd501800SSascha Wildner * PCIe Link Config Pages (MPI v2.6 and later) 3703*fd501800SSascha Wildner ****************************************************************************/ 3704*fd501800SSascha Wildner 3705*fd501800SSascha Wildner /* PCIe Link Page 1 */ 3706*fd501800SSascha Wildner 3707*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PCIELINK_1 3708*fd501800SSascha Wildner { 3709*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3710*fd501800SSascha Wildner U8 Link; /* 0x08 */ 3711*fd501800SSascha Wildner U8 Reserved1; /* 0x09 */ 3712*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 3713*fd501800SSascha Wildner U32 CorrectableErrorCount; /* 0x0C */ 3714*fd501800SSascha Wildner U16 NonFatalErrorCount; /* 0x10 */ 3715*fd501800SSascha Wildner U16 Reserved3; /* 0x12 */ 3716*fd501800SSascha Wildner U16 FatalErrorCount; /* 0x14 */ 3717*fd501800SSascha Wildner U16 Reserved4; /* 0x16 */ 3718*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PCIELINK_1, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIELINK_1, 3719*fd501800SSascha Wildner Mpi26PcieLinkPage1_t, MPI2_POINTER pMpi26PcieLinkPage1_t; 3720*fd501800SSascha Wildner 3721*fd501800SSascha Wildner #define MPI26_PCIELINK1_PAGEVERSION (0x00) 3722*fd501800SSascha Wildner 3723*fd501800SSascha Wildner /* PCIe Link Page 2 */ 3724*fd501800SSascha Wildner 3725*fd501800SSascha Wildner typedef struct _MPI26_PCIELINK2_LINK_EVENT 3726*fd501800SSascha Wildner { 3727*fd501800SSascha Wildner U8 LinkEventCode; /* 0x00 */ 3728*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 3729*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 3730*fd501800SSascha Wildner U32 LinkEventInfo; /* 0x04 */ 3731*fd501800SSascha Wildner } MPI26_PCIELINK2_LINK_EVENT, MPI2_POINTER PTR_MPI26_PCIELINK2_LINK_EVENT, 3732*fd501800SSascha Wildner Mpi26PcieLink2LinkEvent_t, MPI2_POINTER pMpi26PcieLink2LinkEvent_t; 3733*fd501800SSascha Wildner 3734*fd501800SSascha Wildner /* use MPI26_PCIELINK3_EVTCODE_ for the LinkEventCode field */ 3735*fd501800SSascha Wildner 3736*fd501800SSascha Wildner 3737*fd501800SSascha Wildner /* 3738*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3739*fd501800SSascha Wildner * one and check the value returned for NumLinkEvents at runtime. 3740*fd501800SSascha Wildner */ 3741*fd501800SSascha Wildner #ifndef MPI26_PCIELINK2_LINK_EVENT_MAX 3742*fd501800SSascha Wildner #define MPI26_PCIELINK2_LINK_EVENT_MAX (1) 3743*fd501800SSascha Wildner #endif 3744*fd501800SSascha Wildner 3745*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PCIELINK_2 3746*fd501800SSascha Wildner { 3747*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3748*fd501800SSascha Wildner U8 Link; /* 0x08 */ 3749*fd501800SSascha Wildner U8 Reserved1; /* 0x09 */ 3750*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 3751*fd501800SSascha Wildner U8 NumLinkEvents; /* 0x0C */ 3752*fd501800SSascha Wildner U8 Reserved3; /* 0x0D */ 3753*fd501800SSascha Wildner U16 Reserved4; /* 0x0E */ 3754*fd501800SSascha Wildner MPI26_PCIELINK2_LINK_EVENT LinkEvent[MPI26_PCIELINK2_LINK_EVENT_MAX]; /* 0x10 */ 3755*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PCIELINK_2, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIELINK_2, 3756*fd501800SSascha Wildner Mpi26PcieLinkPage2_t, MPI2_POINTER pMpi26PcieLinkPage2_t; 3757*fd501800SSascha Wildner 3758*fd501800SSascha Wildner #define MPI26_PCIELINK2_PAGEVERSION (0x00) 3759*fd501800SSascha Wildner 3760*fd501800SSascha Wildner 3761*fd501800SSascha Wildner /* PCIe Link Page 3 */ 3762*fd501800SSascha Wildner 3763*fd501800SSascha Wildner typedef struct _MPI26_PCIELINK3_LINK_EVENT_CONFIG 3764*fd501800SSascha Wildner { 3765*fd501800SSascha Wildner U8 LinkEventCode; /* 0x00 */ 3766*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 3767*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 3768*fd501800SSascha Wildner U8 CounterType; /* 0x04 */ 3769*fd501800SSascha Wildner U8 ThresholdWindow; /* 0x05 */ 3770*fd501800SSascha Wildner U8 TimeUnits; /* 0x06 */ 3771*fd501800SSascha Wildner U8 Reserved3; /* 0x07 */ 3772*fd501800SSascha Wildner U32 EventThreshold; /* 0x08 */ 3773*fd501800SSascha Wildner U16 ThresholdFlags; /* 0x0C */ 3774*fd501800SSascha Wildner U16 Reserved4; /* 0x0E */ 3775*fd501800SSascha Wildner } MPI26_PCIELINK3_LINK_EVENT_CONFIG, MPI2_POINTER PTR_MPI26_PCIELINK3_LINK_EVENT_CONFIG, 3776*fd501800SSascha Wildner Mpi26PcieLink3LinkEventConfig_t, MPI2_POINTER pMpi26PcieLink3LinkEventConfig_t; 3777*fd501800SSascha Wildner 3778*fd501800SSascha Wildner /* values for LinkEventCode field */ 3779*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_NO_EVENT (0x00) 3780*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_CORRECTABLE_ERROR_RECEIVED (0x01) 3781*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_NON_FATAL_ERROR_RECEIVED (0x02) 3782*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_FATAL_ERROR_RECEIVED (0x03) 3783*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_DATA_LINK_ERROR_DETECTED (0x04) 3784*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_TRANSACTION_LAYER_ERROR_DETECTED (0x05) 3785*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_TLP_ECRC_ERROR_DETECTED (0x06) 3786*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_POISONED_TLP (0x07) 3787*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_RECEIVED_NAK_DLLP (0x08) 3788*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_SENT_NAK_DLLP (0x09) 3789*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_LTSSM_RECOVERY_STATE (0x0A) 3790*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_LTSSM_RXL0S_STATE (0x0B) 3791*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_LTSSM_TXL0S_STATE (0x0C) 3792*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_LTSSM_L1_STATE (0x0D) 3793*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_LTSSM_DISABLED_STATE (0x0E) 3794*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_LTSSM_HOT_RESET_STATE (0x0F) 3795*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_SYSTEM_ERROR (0x10) 3796*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_DECODE_ERROR (0x11) 3797*fd501800SSascha Wildner #define MPI26_PCIELINK3_EVTCODE_DISPARITY_ERROR (0x12) 3798*fd501800SSascha Wildner 3799*fd501800SSascha Wildner /* values for the CounterType field */ 3800*fd501800SSascha Wildner #define MPI26_PCIELINK3_COUNTER_TYPE_WRAPPING (0x00) 3801*fd501800SSascha Wildner #define MPI26_PCIELINK3_COUNTER_TYPE_SATURATING (0x01) 3802*fd501800SSascha Wildner #define MPI26_PCIELINK3_COUNTER_TYPE_PEAK_VALUE (0x02) 3803*fd501800SSascha Wildner 3804*fd501800SSascha Wildner /* values for the TimeUnits field */ 3805*fd501800SSascha Wildner #define MPI26_PCIELINK3_TM_UNITS_10_MICROSECONDS (0x00) 3806*fd501800SSascha Wildner #define MPI26_PCIELINK3_TM_UNITS_100_MICROSECONDS (0x01) 3807*fd501800SSascha Wildner #define MPI26_PCIELINK3_TM_UNITS_1_MILLISECOND (0x02) 3808*fd501800SSascha Wildner #define MPI26_PCIELINK3_TM_UNITS_10_MILLISECONDS (0x03) 3809*fd501800SSascha Wildner 3810*fd501800SSascha Wildner /* values for the ThresholdFlags field */ 3811*fd501800SSascha Wildner #define MPI26_PCIELINK3_TFLAGS_EVENT_NOTIFY (0x0001) 3812*fd501800SSascha Wildner 3813*fd501800SSascha Wildner /* 3814*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3815*fd501800SSascha Wildner * one and check the value returned for NumLinkEvents at runtime. 3816*fd501800SSascha Wildner */ 3817*fd501800SSascha Wildner #ifndef MPI26_PCIELINK3_LINK_EVENT_MAX 3818*fd501800SSascha Wildner #define MPI26_PCIELINK3_LINK_EVENT_MAX (1) 3819*fd501800SSascha Wildner #endif 3820*fd501800SSascha Wildner 3821*fd501800SSascha Wildner typedef struct _MPI26_CONFIG_PAGE_PCIELINK_3 3822*fd501800SSascha Wildner { 3823*fd501800SSascha Wildner MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3824*fd501800SSascha Wildner U8 Link; /* 0x08 */ 3825*fd501800SSascha Wildner U8 Reserved1; /* 0x09 */ 3826*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 3827*fd501800SSascha Wildner U8 NumLinkEvents; /* 0x0C */ 3828*fd501800SSascha Wildner U8 Reserved3; /* 0x0D */ 3829*fd501800SSascha Wildner U16 Reserved4; /* 0x0E */ 3830*fd501800SSascha Wildner MPI26_PCIELINK3_LINK_EVENT_CONFIG LinkEventConfig[MPI26_PCIELINK3_LINK_EVENT_MAX]; /* 0x10 */ 3831*fd501800SSascha Wildner } MPI26_CONFIG_PAGE_PCIELINK_3, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIELINK_3, 3832*fd501800SSascha Wildner Mpi26PcieLinkPage3_t, MPI2_POINTER pMpi26PcieLinkPage3_t; 3833*fd501800SSascha Wildner 3834*fd501800SSascha Wildner #define MPI26_PCIELINK3_PAGEVERSION (0x00) 3835*fd501800SSascha Wildner 3836*fd501800SSascha Wildner 3837*fd501800SSascha Wildner #endif 3838*fd501800SSascha Wildner 3839