1991554f2SKenneth D. Merry /*- 2*8736c018SKashyap D Desai * Copyright 2000-2020 Broadcom Inc. All rights reserved. 3991554f2SKenneth D. Merry * 4991554f2SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 5991554f2SKenneth D. Merry * modification, are permitted provided that the following conditions 6991554f2SKenneth D. Merry * are met: 7991554f2SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright 8991554f2SKenneth D. Merry * notice, this list of conditions and the following disclaimer. 9991554f2SKenneth D. Merry * 2. Redistributions in binary form must reproduce the above copyright 10991554f2SKenneth D. Merry * notice, this list of conditions and the following disclaimer in the 11991554f2SKenneth D. Merry * documentation and/or other materials provided with the distribution. 12991554f2SKenneth D. Merry * 3. Neither the name of the author nor the names of any co-contributors 13991554f2SKenneth D. Merry * may be used to endorse or promote products derived from this software 14991554f2SKenneth D. Merry * without specific prior written permission. 15991554f2SKenneth D. Merry * 16991554f2SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17991554f2SKenneth D. Merry * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18991554f2SKenneth D. Merry * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19991554f2SKenneth D. Merry * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20991554f2SKenneth D. Merry * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21991554f2SKenneth D. Merry * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22991554f2SKenneth D. Merry * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23991554f2SKenneth D. Merry * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24991554f2SKenneth D. Merry * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25991554f2SKenneth D. Merry * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26991554f2SKenneth D. Merry * SUCH DAMAGE. 27991554f2SKenneth D. Merry * 28*8736c018SKashyap D Desai * Broadcom Inc. (LSI) MPT-Fusion Host Adapter FreeBSD 29991554f2SKenneth D. Merry */ 30991554f2SKenneth D. Merry 31991554f2SKenneth D. Merry /* 32*8736c018SKashyap D Desai * Copyright 2000-2020 Broadcom Inc. All rights reserved. 33991554f2SKenneth D. Merry * 34991554f2SKenneth D. Merry * 35991554f2SKenneth D. Merry * Name: mpi2_cnfg.h 36991554f2SKenneth D. Merry * Title: MPI Configuration messages and pages 37991554f2SKenneth D. Merry * Creation Date: November 10, 2006 38991554f2SKenneth D. Merry * 39*8736c018SKashyap D Desai * mpi2_cnfg.h Version: 02.00.45 40991554f2SKenneth D. Merry * 41991554f2SKenneth D. Merry * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 42991554f2SKenneth D. Merry * prefix are for use only on MPI v2.5 products, and must not be used 43991554f2SKenneth D. Merry * with MPI v2.0 products. Unless otherwise noted, names beginning with 44991554f2SKenneth D. Merry * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. 45991554f2SKenneth D. Merry * 46991554f2SKenneth D. Merry * Version History 47991554f2SKenneth D. Merry * --------------- 48991554f2SKenneth D. Merry * 49991554f2SKenneth D. Merry * Date Version Description 50991554f2SKenneth D. Merry * -------- -------- ------------------------------------------------------ 51991554f2SKenneth D. Merry * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 52991554f2SKenneth D. Merry * 06-04-07 02.00.01 Added defines for SAS IO Unit Page 2 PhyFlags. 53991554f2SKenneth D. Merry * Added Manufacturing Page 11. 54991554f2SKenneth D. Merry * Added MPI2_SAS_EXPANDER0_FLAGS_CONNECTOR_END_DEVICE 55991554f2SKenneth D. Merry * define. 56991554f2SKenneth D. Merry * 06-26-07 02.00.02 Adding generic structure for product-specific 57991554f2SKenneth D. Merry * Manufacturing pages: MPI2_CONFIG_PAGE_MANUFACTURING_PS. 58991554f2SKenneth D. Merry * Rework of BIOS Page 2 configuration page. 59991554f2SKenneth D. Merry * Fixed MPI2_BIOSPAGE2_BOOT_DEVICE to be a union of the 60991554f2SKenneth D. Merry * forms. 61991554f2SKenneth D. Merry * Added configuration pages IOC Page 8 and Driver 62991554f2SKenneth D. Merry * Persistent Mapping Page 0. 63991554f2SKenneth D. Merry * 08-31-07 02.00.03 Modified configuration pages dealing with Integrated 64991554f2SKenneth D. Merry * RAID (Manufacturing Page 4, RAID Volume Pages 0 and 1, 65991554f2SKenneth D. Merry * RAID Physical Disk Pages 0 and 1, RAID Configuration 66991554f2SKenneth D. Merry * Page 0). 67991554f2SKenneth D. Merry * Added new value for AccessStatus field of SAS Device 68991554f2SKenneth D. Merry * Page 0 (_SATA_NEEDS_INITIALIZATION). 69991554f2SKenneth D. Merry * 10-31-07 02.00.04 Added missing SEPDevHandle field to 70991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0. 71991554f2SKenneth D. Merry * 12-18-07 02.00.05 Modified IO Unit Page 0 to use 32-bit version fields for 72991554f2SKenneth D. Merry * NVDATA. 73991554f2SKenneth D. Merry * Modified IOC Page 7 to use masks and added field for 74991554f2SKenneth D. Merry * SASBroadcastPrimitiveMasks. 75991554f2SKenneth D. Merry * Added MPI2_CONFIG_PAGE_BIOS_4. 76991554f2SKenneth D. Merry * Added MPI2_CONFIG_PAGE_LOG_0. 77991554f2SKenneth D. Merry * 02-29-08 02.00.06 Modified various names to make them 32-character unique. 78991554f2SKenneth D. Merry * Added SAS Device IDs. 79991554f2SKenneth D. Merry * Updated Integrated RAID configuration pages including 80991554f2SKenneth D. Merry * Manufacturing Page 4, IOC Page 6, and RAID Configuration 81991554f2SKenneth D. Merry * Page 0. 82991554f2SKenneth D. Merry * 05-21-08 02.00.07 Added define MPI2_MANPAGE4_MIX_SSD_SAS_SATA. 83991554f2SKenneth D. Merry * Added define MPI2_MANPAGE4_PHYSDISK_128MB_COERCION. 84991554f2SKenneth D. Merry * Fixed define MPI2_IOCPAGE8_FLAGS_ENCLOSURE_SLOT_MAPPING. 85991554f2SKenneth D. Merry * Added missing MaxNumRoutedSasAddresses field to 86991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_EXPANDER_0. 87991554f2SKenneth D. Merry * Added SAS Port Page 0. 88991554f2SKenneth D. Merry * Modified structure layout for 89991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_DRIVER_MAPPING_0. 90991554f2SKenneth D. Merry * 06-27-08 02.00.08 Changed MPI2_CONFIG_PAGE_RD_PDISK_1 to use 91991554f2SKenneth D. Merry * MPI2_RAID_PHYS_DISK1_PATH_MAX to size the array. 92991554f2SKenneth D. Merry * 10-02-08 02.00.09 Changed MPI2_RAID_PGAD_CONFIGNUM_MASK from 0x0000FFFF 93991554f2SKenneth D. Merry * to 0x000000FF. 94991554f2SKenneth D. Merry * Added two new values for the Physical Disk Coercion Size 95991554f2SKenneth D. Merry * bits in the Flags field of Manufacturing Page 4. 96991554f2SKenneth D. Merry * Added product-specific Manufacturing pages 16 to 31. 97991554f2SKenneth D. Merry * Modified Flags bits for controlling write cache on SATA 98991554f2SKenneth D. Merry * drives in IO Unit Page 1. 99991554f2SKenneth D. Merry * Added new bit to AdditionalControlFlags of SAS IO Unit 100991554f2SKenneth D. Merry * Page 1 to control Invalid Topology Correction. 101991554f2SKenneth D. Merry * Added additional defines for RAID Volume Page 0 102991554f2SKenneth D. Merry * VolumeStatusFlags field. 103991554f2SKenneth D. Merry * Modified meaning of RAID Volume Page 0 VolumeSettings 104991554f2SKenneth D. Merry * define for auto-configure of hot-swap drives. 105991554f2SKenneth D. Merry * Added SupportedPhysDisks field to RAID Volume Page 1 and 106991554f2SKenneth D. Merry * added related defines. 107991554f2SKenneth D. Merry * Added PhysDiskAttributes field (and related defines) to 108991554f2SKenneth D. Merry * RAID Physical Disk Page 0. 109991554f2SKenneth D. Merry * Added MPI2_SAS_PHYINFO_PHY_VACANT define. 110991554f2SKenneth D. Merry * Added three new DiscoveryStatus bits for SAS IO Unit 111991554f2SKenneth D. Merry * Page 0 and SAS Expander Page 0. 112991554f2SKenneth D. Merry * Removed multiplexing information from SAS IO Unit pages. 113991554f2SKenneth D. Merry * Added BootDeviceWaitTime field to SAS IO Unit Page 4. 114991554f2SKenneth D. Merry * Removed Zone Address Resolved bit from PhyInfo and from 115991554f2SKenneth D. Merry * Expander Page 0 Flags field. 116991554f2SKenneth D. Merry * Added two new AccessStatus values to SAS Device Page 0 117991554f2SKenneth D. Merry * for indicating routing problems. Added 3 reserved words 118991554f2SKenneth D. Merry * to this page. 119991554f2SKenneth D. Merry * 01-19-09 02.00.10 Fixed defines for GPIOVal field of IO Unit Page 3. 120991554f2SKenneth D. Merry * Inserted missing reserved field into structure for IOC 121991554f2SKenneth D. Merry * Page 6. 122991554f2SKenneth D. Merry * Added more pending task bits to RAID Volume Page 0 123991554f2SKenneth D. Merry * VolumeStatusFlags defines. 124991554f2SKenneth D. Merry * Added MPI2_PHYSDISK0_STATUS_FLAG_NOT_CERTIFIED define. 125991554f2SKenneth D. Merry * Added a new DiscoveryStatus bit for SAS IO Unit Page 0 126991554f2SKenneth D. Merry * and SAS Expander Page 0 to flag a downstream initiator 127991554f2SKenneth D. Merry * when in simplified routing mode. 128991554f2SKenneth D. Merry * Removed SATA Init Failure defines for DiscoveryStatus 129991554f2SKenneth D. Merry * fields of SAS IO Unit Page 0 and SAS Expander Page 0. 130991554f2SKenneth D. Merry * Added MPI2_SAS_DEVICE0_ASTATUS_DEVICE_BLOCKED define. 131991554f2SKenneth D. Merry * Added PortGroups, DmaGroup, and ControlGroup fields to 132991554f2SKenneth D. Merry * SAS Device Page 0. 133991554f2SKenneth D. Merry * 05-06-09 02.00.11 Added structures and defines for IO Unit Page 5 and IO 134991554f2SKenneth D. Merry * Unit Page 6. 135991554f2SKenneth D. Merry * Added expander reduced functionality data to SAS 136991554f2SKenneth D. Merry * Expander Page 0. 137991554f2SKenneth D. Merry * Added SAS PHY Page 2 and SAS PHY Page 3. 138991554f2SKenneth D. Merry * 07-30-09 02.00.12 Added IO Unit Page 7. 139991554f2SKenneth D. Merry * Added new device ids. 140991554f2SKenneth D. Merry * Added SAS IO Unit Page 5. 141991554f2SKenneth D. Merry * Added partial and slumber power management capable flags 142991554f2SKenneth D. Merry * to SAS Device Page 0 Flags field. 143991554f2SKenneth D. Merry * Added PhyInfo defines for power condition. 144991554f2SKenneth D. Merry * Added Ethernet configuration pages. 145991554f2SKenneth D. Merry * 10-28-09 02.00.13 Added MPI2_IOUNITPAGE1_ENABLE_HOST_BASED_DISCOVERY. 146991554f2SKenneth D. Merry * Added SAS PHY Page 4 structure and defines. 147991554f2SKenneth D. Merry * 02-10-10 02.00.14 Modified the comments for the configuration page 148991554f2SKenneth D. Merry * structures that contain an array of data. The host 149991554f2SKenneth D. Merry * should use the "count" field in the page data (e.g. the 150991554f2SKenneth D. Merry * NumPhys field) to determine the number of valid elements 151991554f2SKenneth D. Merry * in the array. 152991554f2SKenneth D. Merry * Added/modified some MPI2_MFGPAGE_DEVID_SAS defines. 153991554f2SKenneth D. Merry * Added PowerManagementCapabilities to IO Unit Page 7. 154991554f2SKenneth D. Merry * Added PortWidthModGroup field to 155991554f2SKenneth D. Merry * MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS. 156991554f2SKenneth D. Merry * Added MPI2_CONFIG_PAGE_SASIOUNIT_6 and related defines. 157991554f2SKenneth D. Merry * Added MPI2_CONFIG_PAGE_SASIOUNIT_7 and related defines. 158991554f2SKenneth D. Merry * Added MPI2_CONFIG_PAGE_SASIOUNIT_8 and related defines. 159991554f2SKenneth D. Merry * 05-12-10 02.00.15 Added MPI2_RAIDVOL0_STATUS_FLAG_VOL_NOT_CONSISTENT 160991554f2SKenneth D. Merry * define. 161991554f2SKenneth D. Merry * Added MPI2_PHYSDISK0_INCOMPATIBLE_MEDIA_TYPE define. 162991554f2SKenneth D. Merry * Added MPI2_SAS_NEG_LINK_RATE_UNSUPPORTED_PHY define. 163991554f2SKenneth D. Merry * 08-11-10 02.00.16 Removed IO Unit Page 1 device path (multi-pathing) 164991554f2SKenneth D. Merry * defines. 165991554f2SKenneth D. Merry * 11-10-10 02.00.17 Added ReceptacleID field (replacing Reserved1) to 166991554f2SKenneth D. Merry * MPI2_MANPAGE7_CONNECTOR_INFO and reworked defines for 167991554f2SKenneth D. Merry * the Pinout field. 168991554f2SKenneth D. Merry * Added BoardTemperature and BoardTemperatureUnits fields 169991554f2SKenneth D. Merry * to MPI2_CONFIG_PAGE_IO_UNIT_7. 170991554f2SKenneth D. Merry * Added MPI2_CONFIG_EXTPAGETYPE_EXT_MANUFACTURING define 171991554f2SKenneth D. Merry * and MPI2_CONFIG_PAGE_EXT_MAN_PS structure. 172991554f2SKenneth D. Merry * 02-23-11 02.00.18 Added ProxyVF_ID field to MPI2_CONFIG_REQUEST. 173991554f2SKenneth D. Merry * Added IO Unit Page 8, IO Unit Page 9, 174991554f2SKenneth D. Merry * and IO Unit Page 10. 175991554f2SKenneth D. Merry * Added SASNotifyPrimitiveMasks field to 176991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_IOC_7. 177991554f2SKenneth D. Merry * 03-09-11 02.00.19 Fixed IO Unit Page 10 (to match the spec). 178991554f2SKenneth D. Merry * 05-25-11 02.00.20 Cleaned up a few comments. 179991554f2SKenneth D. Merry * 08-24-11 02.00.21 Marked the IO Unit Page 7 PowerManagementCapabilities 180991554f2SKenneth D. Merry * for PCIe link as obsolete. 181991554f2SKenneth D. Merry * Added SpinupFlags field containing a Disable Spin-up bit 182991554f2SKenneth D. Merry * to the MPI2_SAS_IOUNIT4_SPINUP_GROUP fields of SAS IO 183991554f2SKenneth D. Merry * Unit Page 4. 184991554f2SKenneth D. Merry * 11-18-11 02.00.22 Added define MPI2_IOCPAGE6_CAP_FLAGS_4K_SECTORS_SUPPORT. 185991554f2SKenneth D. Merry * Added UEFIVersion field to BIOS Page 1 and defined new 186991554f2SKenneth D. Merry * BiosOptions bits. 187991554f2SKenneth D. Merry * Incorporating additions for MPI v2.5. 188991554f2SKenneth D. Merry * 11-27-12 02.00.23 Added MPI2_MANPAGE7_FLAG_EVENTREPLAY_SLOT_ORDER. 189991554f2SKenneth D. Merry * Added MPI2_BIOSPAGE1_OPTIONS_MASK_OEM_ID. 190991554f2SKenneth D. Merry * 12-20-12 02.00.24 Marked MPI2_SASIOUNIT1_CONTROL_CLEAR_AFFILIATION as 191991554f2SKenneth D. Merry * obsolete for MPI v2.5 and later. 192991554f2SKenneth D. Merry * Added some defines for 12G SAS speeds. 193991554f2SKenneth D. Merry * 04-09-13 02.00.25 Added MPI2_IOUNITPAGE1_ATA_SECURITY_FREEZE_LOCK. 194991554f2SKenneth D. Merry * Fixed MPI2_IOUNITPAGE5_DMA_CAP_MASK_MAX_REQUESTS to 195991554f2SKenneth D. Merry * match the specification. 196991554f2SKenneth D. Merry * 08-19-13 02.00.26 Added reserved words to MPI2_CONFIG_PAGE_IO_UNIT_7 for 197991554f2SKenneth D. Merry * future use. 198991554f2SKenneth D. Merry * 12-05-13 02.00.27 Added MPI2_MANPAGE7_FLAG_BASE_ENCLOSURE_LEVEL for 199991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_MAN_7. 200991554f2SKenneth D. Merry * Added EnclosureLevel and ConnectorName fields to 201991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_SAS_DEV_0. 202991554f2SKenneth D. Merry * Added MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID for 203991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_SAS_DEV_0. 204991554f2SKenneth D. Merry * Added EnclosureLevel field to 205991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0. 206991554f2SKenneth D. Merry * Added MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID for 207991554f2SKenneth D. Merry * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0. 20828ae62b0SStephen McConnell * 01-08-14 02.00.28 Added more defines for the BiosOptions field of 20928ae62b0SStephen McConnell * MPI2_CONFIG_PAGE_BIOS_1. 21028ae62b0SStephen McConnell * 06-13-14 02.00.29 Added SSUTimeout field to MPI2_CONFIG_PAGE_BIOS_1, and 21128ae62b0SStephen McConnell * more defines for the BiosOptions field. 21228ae62b0SStephen McConnell * 11-18-14 02.00.30 Updated copyright information. 21328ae62b0SStephen McConnell * Added MPI2_BIOSPAGE1_OPTIONS_ADVANCED_CONFIG. 21428ae62b0SStephen McConnell * Added AdapterOrderAux fields to BIOS Page 3. 21528ae62b0SStephen McConnell * 03-16-15 02.00.31 Updated for MPI v2.6. 21628ae62b0SStephen McConnell * Added BoardPowerRequirement, PCISlotPowerAllocation, and 21728ae62b0SStephen McConnell * Flags field to IO Unit Page 7. 21828ae62b0SStephen McConnell * Added IO Unit Page 11. 21928ae62b0SStephen McConnell * Added new SAS Phy Event codes 22067feec50SStephen McConnell * Added PCIe configuration pages. 22167feec50SStephen McConnell * 03-19-15 02.00.32 Fixed PCIe Link Config page structure names to be 22267feec50SStephen McConnell * unique in first 32 characters. 22328ae62b0SStephen McConnell * 05-25-15 02.00.33 Added more defines for the BiosOptions field of 22428ae62b0SStephen McConnell * MPI2_CONFIG_PAGE_BIOS_1. 22567feec50SStephen McConnell * 08-25-15 02.00.34 Added PCIe Device Page 2 SGL format capability. 22628ae62b0SStephen McConnell * 12-18-15 02.00.35 Added SATADeviceWaitTime to SAS IO Unit Page 4. 22767feec50SStephen McConnell * 01-21-16 02.00.36 Added/modified MPI2_MFGPAGE_DEVID_SAS defines. 22867feec50SStephen McConnell * Added Link field to PCIe Link Pages 22967feec50SStephen McConnell * Added EnclosureLevel and ConnectorName to PCIe 23067feec50SStephen McConnell * Device Page 0. 23167feec50SStephen McConnell * Added define for PCIE IoUnit page 1 max rate shift. 23267feec50SStephen McConnell * Added comment for reserved ExtPageTypes. 23367feec50SStephen McConnell * Added SAS 4 22.5 gbs speed support. 23467feec50SStephen McConnell * Added PCIe 4 16.0 GT/sec speec support. 23567feec50SStephen McConnell * Removed AHCI support. 23667feec50SStephen McConnell * Removed SOP support. 23767feec50SStephen McConnell * Added NegotiatedLinkRate and NegotiatedPortWidth to 23867feec50SStephen McConnell * PCIe device page 0. 23967feec50SStephen McConnell * 04-10-16 02.00.37 Fixed MPI2_MFGPAGE_DEVID_SAS3616/3708 defines 24067feec50SStephen McConnell * 07-01-16 02.00.38 Added Manufacturing page 7 Connector types. 24167feec50SStephen McConnell * Changed declaration of ConnectorName in PCIe DevicePage0 24267feec50SStephen McConnell * to match SAS DevicePage 0. 24367feec50SStephen McConnell * Added SATADeviceWaitTime to IO Unit Page 11. 24467feec50SStephen McConnell * Added MPI26_MFGPAGE_DEVID_SAS4008 24567feec50SStephen McConnell * Added x16 PCIe width to IO Unit Page 7 24667feec50SStephen McConnell * Added LINKFLAGS to control SRIS in PCIe IO Unit page 1 24767feec50SStephen McConnell * phy data. 24867feec50SStephen McConnell * Added InitStatus to PCIe IO Unit Page 1 header. 24967feec50SStephen McConnell * 09-01-16 02.00.39 Added MPI26_CONFIG_PAGE_ENCLOSURE_0 and related defines. 25067feec50SStephen McConnell * Added MPI26_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE and 25167feec50SStephen McConnell * MPI26_ENCLOS_PGAD_FORM_HANDLE page address formats. 2525f5baf0eSAlexander Motin * 02-02-17 02.00.40 Added MPI2_MANPAGE7_SLOT_UNKNOWN. 2535f5baf0eSAlexander Motin * Added ChassisSlot field to SAS Enclosure Page 0. 2545f5baf0eSAlexander Motin * Added ChassisSlot Valid bit (bit 5) to the Flags field 2555f5baf0eSAlexander Motin * in SAS Enclosure Page 0. 256*8736c018SKashyap D Desai * 06-13-17 02.00.41 Added MPI26_MFGPAGE_DEVID_SAS3816 and 257*8736c018SKashyap D Desai * MPI26_MFGPAGE_DEVID_SAS3916 defines. 258*8736c018SKashyap D Desai * Removed MPI26_MFGPAGE_DEVID_SAS4008 define. 259*8736c018SKashyap D Desai * Added MPI26_PCIEIOUNIT1_LINKFLAGS_SRNS_EN define. 260*8736c018SKashyap D Desai * Renamed PI26_PCIEIOUNIT1_LINKFLAGS_EN_SRIS to 261*8736c018SKashyap D Desai * PI26_PCIEIOUNIT1_LINKFLAGS_SRIS_EN. 262*8736c018SKashyap D Desai * Renamed MPI26_PCIEIOUNIT1_LINKFLAGS_DIS_SRIS to 263*8736c018SKashyap D Desai * MPI26_PCIEIOUNIT1_LINKFLAGS_DIS_SEPARATE_REFCLK. 264*8736c018SKashyap D Desai * 09-29-17 02.00.42 Added ControllerResetTO field to PCIe Device Page 2. 265*8736c018SKashyap D Desai * Added NOIOB field to PCIe Device Page 2. 266*8736c018SKashyap D Desai * Added MPI26_PCIEDEV2_CAP_DATA_BLK_ALIGN_AND_GRAN to 267*8736c018SKashyap D Desai * the Capabilities field of PCIe Device Page 2. 268*8736c018SKashyap D Desai * 07-22-18 02.00.43 Added defines for SAS3916 and SAS3816. 269*8736c018SKashyap D Desai * Added WRiteCache defines to IO Unit Page 1. 270*8736c018SKashyap D Desai * Added MaxEnclosureLevel to BIOS Page 1. 271*8736c018SKashyap D Desai * Added OEMRD to SAS Enclosure Page 1. 272*8736c018SKashyap D Desai * Added DMDReportPCIe to PCIe IO Unit Page 1. 273*8736c018SKashyap D Desai * Added Flags field and flags for Retimers to 274*8736c018SKashyap D Desai * PCIe Switch Page 1. 275*8736c018SKashyap D Desai * 08-02-18 02.00.44 Added Slotx2, Slotx4 to ManPage 7. 276*8736c018SKashyap D Desai * 08-15-18 02.00.45 Added ProductSpecific field at end of IOC Page 1 277991554f2SKenneth D. Merry * -------------------------------------------------------------------------- 278991554f2SKenneth D. Merry */ 279991554f2SKenneth D. Merry 280991554f2SKenneth D. Merry #ifndef MPI2_CNFG_H 281991554f2SKenneth D. Merry #define MPI2_CNFG_H 282991554f2SKenneth D. Merry 283991554f2SKenneth D. Merry /***************************************************************************** 284991554f2SKenneth D. Merry * Configuration Page Header and defines 285991554f2SKenneth D. Merry *****************************************************************************/ 286991554f2SKenneth D. Merry 287991554f2SKenneth D. Merry /* Config Page Header */ 288991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_HEADER 289991554f2SKenneth D. Merry { 290991554f2SKenneth D. Merry U8 PageVersion; /* 0x00 */ 291991554f2SKenneth D. Merry U8 PageLength; /* 0x01 */ 292991554f2SKenneth D. Merry U8 PageNumber; /* 0x02 */ 293991554f2SKenneth D. Merry U8 PageType; /* 0x03 */ 294991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_HEADER, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_HEADER, 295991554f2SKenneth D. Merry Mpi2ConfigPageHeader_t, MPI2_POINTER pMpi2ConfigPageHeader_t; 296991554f2SKenneth D. Merry 297991554f2SKenneth D. Merry typedef union _MPI2_CONFIG_PAGE_HEADER_UNION 298991554f2SKenneth D. Merry { 299991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Struct; 300991554f2SKenneth D. Merry U8 Bytes[4]; 301991554f2SKenneth D. Merry U16 Word16[2]; 302991554f2SKenneth D. Merry U32 Word32; 303991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_HEADER_UNION, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_HEADER_UNION, 304991554f2SKenneth D. Merry Mpi2ConfigPageHeaderUnion, MPI2_POINTER pMpi2ConfigPageHeaderUnion; 305991554f2SKenneth D. Merry 306991554f2SKenneth D. Merry /* Extended Config Page Header */ 307991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_EXTENDED_PAGE_HEADER 308991554f2SKenneth D. Merry { 309991554f2SKenneth D. Merry U8 PageVersion; /* 0x00 */ 310991554f2SKenneth D. Merry U8 Reserved1; /* 0x01 */ 311991554f2SKenneth D. Merry U8 PageNumber; /* 0x02 */ 312991554f2SKenneth D. Merry U8 PageType; /* 0x03 */ 313991554f2SKenneth D. Merry U16 ExtPageLength; /* 0x04 */ 314991554f2SKenneth D. Merry U8 ExtPageType; /* 0x06 */ 315991554f2SKenneth D. Merry U8 Reserved2; /* 0x07 */ 316991554f2SKenneth D. Merry } MPI2_CONFIG_EXTENDED_PAGE_HEADER, 317991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_EXTENDED_PAGE_HEADER, 318991554f2SKenneth D. Merry Mpi2ConfigExtendedPageHeader_t, MPI2_POINTER pMpi2ConfigExtendedPageHeader_t; 319991554f2SKenneth D. Merry 320991554f2SKenneth D. Merry typedef union _MPI2_CONFIG_EXT_PAGE_HEADER_UNION 321991554f2SKenneth D. Merry { 322991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Struct; 323991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Ext; 324991554f2SKenneth D. Merry U8 Bytes[8]; 325991554f2SKenneth D. Merry U16 Word16[4]; 326991554f2SKenneth D. Merry U32 Word32[2]; 327991554f2SKenneth D. Merry } MPI2_CONFIG_EXT_PAGE_HEADER_UNION, MPI2_POINTER PTR_MPI2_CONFIG_EXT_PAGE_HEADER_UNION, 328991554f2SKenneth D. Merry Mpi2ConfigPageExtendedHeaderUnion, MPI2_POINTER pMpi2ConfigPageExtendedHeaderUnion; 329991554f2SKenneth D. Merry 330991554f2SKenneth D. Merry /* PageType field values */ 331991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGEATTR_READ_ONLY (0x00) 332991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGEATTR_CHANGEABLE (0x10) 333991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGEATTR_PERSISTENT (0x20) 334991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGEATTR_MASK (0xF0) 335991554f2SKenneth D. Merry 336991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_IO_UNIT (0x00) 337991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_IOC (0x01) 338991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_BIOS (0x02) 339991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_RAID_VOLUME (0x08) 340991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_MANUFACTURING (0x09) 341991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_RAID_PHYSDISK (0x0A) 342991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_EXTENDED (0x0F) 343991554f2SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_MASK (0x0F) 344991554f2SKenneth D. Merry 345991554f2SKenneth D. Merry #define MPI2_CONFIG_TYPENUM_MASK (0x0FFF) 346991554f2SKenneth D. Merry 347991554f2SKenneth D. Merry /* ExtPageType field values */ 348991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_IO_UNIT (0x10) 349991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_EXPANDER (0x11) 350991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_DEVICE (0x12) 351991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_PHY (0x13) 352991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_LOG (0x14) 353991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_ENCLOSURE (0x15) 354991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_RAID_CONFIG (0x16) 355991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_DRIVER_MAPPING (0x17) 356991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_PORT (0x18) 357991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_ETHERNET (0x19) 358991554f2SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_EXT_MANUFACTURING (0x1A) 35967feec50SStephen McConnell #define MPI2_CONFIG_EXTPAGETYPE_PCIE_IO_UNIT (0x1B) /* MPI v2.6 and later */ 36067feec50SStephen McConnell #define MPI2_CONFIG_EXTPAGETYPE_PCIE_SWITCH (0x1C) /* MPI v2.6 and later */ 36167feec50SStephen McConnell #define MPI2_CONFIG_EXTPAGETYPE_PCIE_DEVICE (0x1D) /* MPI v2.6 and later */ 36267feec50SStephen McConnell #define MPI2_CONFIG_EXTPAGETYPE_PCIE_LINK (0x1E) /* MPI v2.6 and later */ 36367feec50SStephen McConnell /* Product specific reserved values 0xE0 - 0xEF */ 36467feec50SStephen McConnell /* Vendor specific reserved values 0xF0 - 0xFF */ 365991554f2SKenneth D. Merry 366991554f2SKenneth D. Merry /***************************************************************************** 367991554f2SKenneth D. Merry * PageAddress defines 368991554f2SKenneth D. Merry *****************************************************************************/ 369991554f2SKenneth D. Merry 370991554f2SKenneth D. Merry /* RAID Volume PageAddress format */ 371991554f2SKenneth D. Merry #define MPI2_RAID_VOLUME_PGAD_FORM_MASK (0xF0000000) 372991554f2SKenneth D. Merry #define MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 373991554f2SKenneth D. Merry #define MPI2_RAID_VOLUME_PGAD_FORM_HANDLE (0x10000000) 374991554f2SKenneth D. Merry 375991554f2SKenneth D. Merry #define MPI2_RAID_VOLUME_PGAD_HANDLE_MASK (0x0000FFFF) 376991554f2SKenneth D. Merry 377991554f2SKenneth D. Merry /* RAID Physical Disk PageAddress format */ 378991554f2SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_FORM_MASK (0xF0000000) 379991554f2SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_FORM_GET_NEXT_PHYSDISKNUM (0x00000000) 380991554f2SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_FORM_PHYSDISKNUM (0x10000000) 381991554f2SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_FORM_DEVHANDLE (0x20000000) 382991554f2SKenneth D. Merry 383991554f2SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_PHYSDISKNUM_MASK (0x000000FF) 384991554f2SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_DEVHANDLE_MASK (0x0000FFFF) 385991554f2SKenneth D. Merry 386991554f2SKenneth D. Merry /* SAS Expander PageAddress format */ 387991554f2SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_FORM_MASK (0xF0000000) 388991554f2SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL (0x00000000) 389991554f2SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_FORM_HNDL_PHY_NUM (0x10000000) 390991554f2SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_FORM_HNDL (0x20000000) 391991554f2SKenneth D. Merry 392991554f2SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_HANDLE_MASK (0x0000FFFF) 393991554f2SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_PHYNUM_MASK (0x00FF0000) 394991554f2SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_PHYNUM_SHIFT (16) 395991554f2SKenneth D. Merry 396991554f2SKenneth D. Merry /* SAS Device PageAddress format */ 397991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE_PGAD_FORM_MASK (0xF0000000) 398991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 399991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE_PGAD_FORM_HANDLE (0x20000000) 400991554f2SKenneth D. Merry 401991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE_PGAD_HANDLE_MASK (0x0000FFFF) 402991554f2SKenneth D. Merry 403991554f2SKenneth D. Merry /* SAS PHY PageAddress format */ 404991554f2SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_FORM_MASK (0xF0000000) 405991554f2SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_FORM_PHY_NUMBER (0x00000000) 406991554f2SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_FORM_PHY_TBL_INDEX (0x10000000) 407991554f2SKenneth D. Merry 408991554f2SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_PHY_NUMBER_MASK (0x000000FF) 409991554f2SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_PHY_TBL_INDEX_MASK (0x0000FFFF) 410991554f2SKenneth D. Merry 411991554f2SKenneth D. Merry /* SAS Port PageAddress format */ 412991554f2SKenneth D. Merry #define MPI2_SASPORT_PGAD_FORM_MASK (0xF0000000) 413991554f2SKenneth D. Merry #define MPI2_SASPORT_PGAD_FORM_GET_NEXT_PORT (0x00000000) 414991554f2SKenneth D. Merry #define MPI2_SASPORT_PGAD_FORM_PORT_NUM (0x10000000) 415991554f2SKenneth D. Merry 416991554f2SKenneth D. Merry #define MPI2_SASPORT_PGAD_PORTNUMBER_MASK (0x00000FFF) 417991554f2SKenneth D. Merry 418991554f2SKenneth D. Merry /* SAS Enclosure PageAddress format */ 419991554f2SKenneth D. Merry #define MPI2_SAS_ENCLOS_PGAD_FORM_MASK (0xF0000000) 420991554f2SKenneth D. Merry #define MPI2_SAS_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 421991554f2SKenneth D. Merry #define MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE (0x10000000) 422991554f2SKenneth D. Merry 423991554f2SKenneth D. Merry #define MPI2_SAS_ENCLOS_PGAD_HANDLE_MASK (0x0000FFFF) 424991554f2SKenneth D. Merry 42567feec50SStephen McConnell /* Enclosure PageAddress format */ 42667feec50SStephen McConnell #define MPI26_ENCLOS_PGAD_FORM_MASK (0xF0000000) 42767feec50SStephen McConnell #define MPI26_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 42867feec50SStephen McConnell #define MPI26_ENCLOS_PGAD_FORM_HANDLE (0x10000000) 42967feec50SStephen McConnell 43067feec50SStephen McConnell #define MPI26_ENCLOS_PGAD_HANDLE_MASK (0x0000FFFF) 431991554f2SKenneth D. Merry 432991554f2SKenneth D. Merry /* RAID Configuration PageAddress format */ 433991554f2SKenneth D. Merry #define MPI2_RAID_PGAD_FORM_MASK (0xF0000000) 434991554f2SKenneth D. Merry #define MPI2_RAID_PGAD_FORM_GET_NEXT_CONFIGNUM (0x00000000) 435991554f2SKenneth D. Merry #define MPI2_RAID_PGAD_FORM_CONFIGNUM (0x10000000) 436991554f2SKenneth D. Merry #define MPI2_RAID_PGAD_FORM_ACTIVE_CONFIG (0x20000000) 437991554f2SKenneth D. Merry 438991554f2SKenneth D. Merry #define MPI2_RAID_PGAD_CONFIGNUM_MASK (0x000000FF) 439991554f2SKenneth D. Merry 440991554f2SKenneth D. Merry /* Driver Persistent Mapping PageAddress format */ 441991554f2SKenneth D. Merry #define MPI2_DPM_PGAD_FORM_MASK (0xF0000000) 442991554f2SKenneth D. Merry #define MPI2_DPM_PGAD_FORM_ENTRY_RANGE (0x00000000) 443991554f2SKenneth D. Merry 444991554f2SKenneth D. Merry #define MPI2_DPM_PGAD_ENTRY_COUNT_MASK (0x0FFF0000) 445991554f2SKenneth D. Merry #define MPI2_DPM_PGAD_ENTRY_COUNT_SHIFT (16) 446991554f2SKenneth D. Merry #define MPI2_DPM_PGAD_START_ENTRY_MASK (0x0000FFFF) 447991554f2SKenneth D. Merry 448991554f2SKenneth D. Merry /* Ethernet PageAddress format */ 449991554f2SKenneth D. Merry #define MPI2_ETHERNET_PGAD_FORM_MASK (0xF0000000) 450991554f2SKenneth D. Merry #define MPI2_ETHERNET_PGAD_FORM_IF_NUM (0x00000000) 451991554f2SKenneth D. Merry 452991554f2SKenneth D. Merry #define MPI2_ETHERNET_PGAD_IF_NUMBER_MASK (0x000000FF) 453991554f2SKenneth D. Merry 45467feec50SStephen McConnell /* PCIe Switch PageAddress format */ 45567feec50SStephen McConnell #define MPI26_PCIE_SWITCH_PGAD_FORM_MASK (0xF0000000) 45667feec50SStephen McConnell #define MPI26_PCIE_SWITCH_PGAD_FORM_GET_NEXT_HNDL (0x00000000) 45767feec50SStephen McConnell #define MPI26_PCIE_SWITCH_PGAD_FORM_HNDL_PORTNUM (0x10000000) 45867feec50SStephen McConnell #define MPI26_PCIE_SWITCH_EXPAND_PGAD_FORM_HNDL (0x20000000) 45967feec50SStephen McConnell 46067feec50SStephen McConnell #define MPI26_PCIE_SWITCH_PGAD_HANDLE_MASK (0x0000FFFF) 46167feec50SStephen McConnell #define MPI26_PCIE_SWITCH_PGAD_PORTNUM_MASK (0x00FF0000) 46267feec50SStephen McConnell #define MPI26_PCIE_SWITCH_PGAD_PORTNUM_SHIFT (16) 46367feec50SStephen McConnell 46467feec50SStephen McConnell /* PCIe Device PageAddress format */ 46567feec50SStephen McConnell #define MPI26_PCIE_DEVICE_PGAD_FORM_MASK (0xF0000000) 46667feec50SStephen McConnell #define MPI26_PCIE_DEVICE_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 46767feec50SStephen McConnell #define MPI26_PCIE_DEVICE_PGAD_FORM_HANDLE (0x20000000) 46867feec50SStephen McConnell 46967feec50SStephen McConnell #define MPI26_PCIE_DEVICE_PGAD_HANDLE_MASK (0x0000FFFF) 47067feec50SStephen McConnell 47167feec50SStephen McConnell /* PCIe Link PageAddress format */ 47267feec50SStephen McConnell #define MPI26_PCIE_LINK_PGAD_FORM_MASK (0xF0000000) 47367feec50SStephen McConnell #define MPI26_PCIE_LINK_PGAD_FORM_GET_NEXT_LINK (0x00000000) 47467feec50SStephen McConnell #define MPI26_PCIE_LINK_PGAD_FORM_LINK_NUM (0x10000000) 47567feec50SStephen McConnell 47667feec50SStephen McConnell #define MPI26_PCIE_DEVICE_PGAD_LINKNUM_MASK (0x000000FF) 47767feec50SStephen McConnell 478991554f2SKenneth D. Merry /**************************************************************************** 479991554f2SKenneth D. Merry * Configuration messages 480991554f2SKenneth D. Merry ****************************************************************************/ 481991554f2SKenneth D. Merry 482991554f2SKenneth D. Merry /* Configuration Request Message */ 483991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_REQUEST 484991554f2SKenneth D. Merry { 485991554f2SKenneth D. Merry U8 Action; /* 0x00 */ 486991554f2SKenneth D. Merry U8 SGLFlags; /* 0x01 */ 487991554f2SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 488991554f2SKenneth D. Merry U8 Function; /* 0x03 */ 489991554f2SKenneth D. Merry U16 ExtPageLength; /* 0x04 */ 490991554f2SKenneth D. Merry U8 ExtPageType; /* 0x06 */ 491991554f2SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 492991554f2SKenneth D. Merry U8 VP_ID; /* 0x08 */ 493991554f2SKenneth D. Merry U8 VF_ID; /* 0x09 */ 494991554f2SKenneth D. Merry U16 Reserved1; /* 0x0A */ 495991554f2SKenneth D. Merry U8 Reserved2; /* 0x0C */ 496991554f2SKenneth D. Merry U8 ProxyVF_ID; /* 0x0D */ 497991554f2SKenneth D. Merry U16 Reserved4; /* 0x0E */ 498991554f2SKenneth D. Merry U32 Reserved3; /* 0x10 */ 499991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x14 */ 500991554f2SKenneth D. Merry U32 PageAddress; /* 0x18 */ 501991554f2SKenneth D. Merry MPI2_SGE_IO_UNION PageBufferSGE; /* 0x1C */ 502991554f2SKenneth D. Merry } MPI2_CONFIG_REQUEST, MPI2_POINTER PTR_MPI2_CONFIG_REQUEST, 503991554f2SKenneth D. Merry Mpi2ConfigRequest_t, MPI2_POINTER pMpi2ConfigRequest_t; 504991554f2SKenneth D. Merry 505991554f2SKenneth D. Merry /* values for the Action field */ 506991554f2SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_HEADER (0x00) 507991554f2SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_READ_CURRENT (0x01) 508991554f2SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_WRITE_CURRENT (0x02) 509991554f2SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_DEFAULT (0x03) 510991554f2SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_WRITE_NVRAM (0x04) 511991554f2SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_READ_DEFAULT (0x05) 512991554f2SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_READ_NVRAM (0x06) 513991554f2SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_GET_CHANGEABLE (0x07) 514991554f2SKenneth D. Merry 515991554f2SKenneth D. Merry /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ 516991554f2SKenneth D. Merry 517991554f2SKenneth D. Merry /* Config Reply Message */ 518991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_REPLY 519991554f2SKenneth D. Merry { 520991554f2SKenneth D. Merry U8 Action; /* 0x00 */ 521991554f2SKenneth D. Merry U8 SGLFlags; /* 0x01 */ 522991554f2SKenneth D. Merry U8 MsgLength; /* 0x02 */ 523991554f2SKenneth D. Merry U8 Function; /* 0x03 */ 524991554f2SKenneth D. Merry U16 ExtPageLength; /* 0x04 */ 525991554f2SKenneth D. Merry U8 ExtPageType; /* 0x06 */ 526991554f2SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 527991554f2SKenneth D. Merry U8 VP_ID; /* 0x08 */ 528991554f2SKenneth D. Merry U8 VF_ID; /* 0x09 */ 529991554f2SKenneth D. Merry U16 Reserved1; /* 0x0A */ 530991554f2SKenneth D. Merry U16 Reserved2; /* 0x0C */ 531991554f2SKenneth D. Merry U16 IOCStatus; /* 0x0E */ 532991554f2SKenneth D. Merry U32 IOCLogInfo; /* 0x10 */ 533991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x14 */ 534991554f2SKenneth D. Merry } MPI2_CONFIG_REPLY, MPI2_POINTER PTR_MPI2_CONFIG_REPLY, 535991554f2SKenneth D. Merry Mpi2ConfigReply_t, MPI2_POINTER pMpi2ConfigReply_t; 536991554f2SKenneth D. Merry 537991554f2SKenneth D. Merry /***************************************************************************** 538991554f2SKenneth D. Merry * 539991554f2SKenneth D. Merry * C o n f i g u r a t i o n P a g e s 540991554f2SKenneth D. Merry * 541991554f2SKenneth D. Merry *****************************************************************************/ 542991554f2SKenneth D. Merry 543991554f2SKenneth D. Merry /**************************************************************************** 544991554f2SKenneth D. Merry * Manufacturing Config pages 545991554f2SKenneth D. Merry ****************************************************************************/ 546991554f2SKenneth D. Merry 547991554f2SKenneth D. Merry #define MPI2_MFGPAGE_VENDORID_LSI (0x1000) 548991554f2SKenneth D. Merry 549991554f2SKenneth D. Merry /* MPI v2.0 SAS products */ 550991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2004 (0x0070) 551991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2008 (0x0072) 552991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2108_1 (0x0074) 553991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2108_2 (0x0076) 554991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2108_3 (0x0077) 555991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2116_1 (0x0064) 556991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2116_2 (0x0065) 557991554f2SKenneth D. Merry 558991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SSS6200 (0x007E) 559991554f2SKenneth D. Merry 560991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_1 (0x0080) 561991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_2 (0x0081) 562991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_3 (0x0082) 563991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_4 (0x0083) 564991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_5 (0x0084) 565991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_6 (0x0085) 566991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2308_1 (0x0086) 567991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2308_2 (0x0087) 568991554f2SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2308_3 (0x006E) 569991554f2SKenneth D. Merry 570991554f2SKenneth D. Merry /* MPI v2.5 SAS products */ 571991554f2SKenneth D. Merry #define MPI25_MFGPAGE_DEVID_SAS3004 (0x0096) 572991554f2SKenneth D. Merry #define MPI25_MFGPAGE_DEVID_SAS3008 (0x0097) 573991554f2SKenneth D. Merry #define MPI25_MFGPAGE_DEVID_SAS3108_1 (0x0090) 574991554f2SKenneth D. Merry #define MPI25_MFGPAGE_DEVID_SAS3108_2 (0x0091) 575991554f2SKenneth D. Merry #define MPI25_MFGPAGE_DEVID_SAS3108_5 (0x0094) 576991554f2SKenneth D. Merry #define MPI25_MFGPAGE_DEVID_SAS3108_6 (0x0095) 577991554f2SKenneth D. Merry 57828ae62b0SStephen McConnell /* MPI v2.6 SAS Products */ 57928ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3216 (0x00C9) 58028ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3224 (0x00C4) 58128ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3316_1 (0x00C5) 58228ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3316_2 (0x00C6) 58328ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3316_3 (0x00C7) 58428ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3316_4 (0x00C8) 58528ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3324_1 (0x00C0) 58628ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3324_2 (0x00C1) 58728ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3324_3 (0x00C2) 58828ae62b0SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3324_4 (0x00C3) 589991554f2SKenneth D. Merry 59067feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3516 (0x00AA) 59167feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3516_1 (0x00AB) 59267feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3416 (0x00AC) 59367feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3508 (0x00AD) 59467feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3508_1 (0x00AE) 59567feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3408 (0x00AF) 59667feec50SStephen McConnell 59767feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3716 (0x00D0) 59867feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3616 (0x00D1) 59967feec50SStephen McConnell #define MPI26_MFGPAGE_DEVID_SAS3708 (0x00D2) 60067feec50SStephen McConnell 601*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_SEC_MASK_SAS3916 (0x0003) 602*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_INVALID0_SAS3916 (0x00E0) 603*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_CFG_SEC_SAS3916 (0x00E1) 604*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_HARD_SEC_SAS3916 (0x00E2) 605*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_INVALID1_SAS3916 (0x00E3) 606*8736c018SKashyap D Desai 607*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_SEC_MASK_SAS3816 (0x0003) 608*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_INVALID0_SAS3816 (0x00E4) 609*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_CFG_SEC_SAS3816 (0x00E5) 610*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_HARD_SEC_SAS3816 (0x00E6) 611*8736c018SKashyap D Desai #define MPI26_MFGPAGE_DEVID_INVALID1_SAS3816 (0x00E7) 61267feec50SStephen McConnell 613991554f2SKenneth D. Merry /* Manufacturing Page 0 */ 614991554f2SKenneth D. Merry 615991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_0 616991554f2SKenneth D. Merry { 617991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 618991554f2SKenneth D. Merry U8 ChipName[16]; /* 0x04 */ 619991554f2SKenneth D. Merry U8 ChipRevision[8]; /* 0x14 */ 620991554f2SKenneth D. Merry U8 BoardName[16]; /* 0x1C */ 621991554f2SKenneth D. Merry U8 BoardAssembly[16]; /* 0x2C */ 622991554f2SKenneth D. Merry U8 BoardTracerNumber[16]; /* 0x3C */ 623991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_0, 624991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_0, 625991554f2SKenneth D. Merry Mpi2ManufacturingPage0_t, MPI2_POINTER pMpi2ManufacturingPage0_t; 626991554f2SKenneth D. Merry 627991554f2SKenneth D. Merry #define MPI2_MANUFACTURING0_PAGEVERSION (0x00) 628991554f2SKenneth D. Merry 629991554f2SKenneth D. Merry /* Manufacturing Page 1 */ 630991554f2SKenneth D. Merry 631991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_1 632991554f2SKenneth D. Merry { 633991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 634991554f2SKenneth D. Merry U8 VPD[256]; /* 0x04 */ 635991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_1, 636991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_1, 637991554f2SKenneth D. Merry Mpi2ManufacturingPage1_t, MPI2_POINTER pMpi2ManufacturingPage1_t; 638991554f2SKenneth D. Merry 639991554f2SKenneth D. Merry #define MPI2_MANUFACTURING1_PAGEVERSION (0x00) 640991554f2SKenneth D. Merry 641991554f2SKenneth D. Merry typedef struct _MPI2_CHIP_REVISION_ID 642991554f2SKenneth D. Merry { 643991554f2SKenneth D. Merry U16 DeviceID; /* 0x00 */ 644991554f2SKenneth D. Merry U8 PCIRevisionID; /* 0x02 */ 645991554f2SKenneth D. Merry U8 Reserved; /* 0x03 */ 646991554f2SKenneth D. Merry } MPI2_CHIP_REVISION_ID, MPI2_POINTER PTR_MPI2_CHIP_REVISION_ID, 647991554f2SKenneth D. Merry Mpi2ChipRevisionId_t, MPI2_POINTER pMpi2ChipRevisionId_t; 648991554f2SKenneth D. Merry 649991554f2SKenneth D. Merry /* Manufacturing Page 2 */ 650991554f2SKenneth D. Merry 651991554f2SKenneth D. Merry /* 652991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 653991554f2SKenneth D. Merry * one and check Header.PageLength at runtime. 654991554f2SKenneth D. Merry */ 655991554f2SKenneth D. Merry #ifndef MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS 656991554f2SKenneth D. Merry #define MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS (1) 657991554f2SKenneth D. Merry #endif 658991554f2SKenneth D. Merry 659991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_2 660991554f2SKenneth D. Merry { 661991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 662991554f2SKenneth D. Merry MPI2_CHIP_REVISION_ID ChipId; /* 0x04 */ 663991554f2SKenneth D. Merry U32 HwSettings[MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS];/* 0x08 */ 664991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_2, 665991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_2, 666991554f2SKenneth D. Merry Mpi2ManufacturingPage2_t, MPI2_POINTER pMpi2ManufacturingPage2_t; 667991554f2SKenneth D. Merry 668991554f2SKenneth D. Merry #define MPI2_MANUFACTURING2_PAGEVERSION (0x00) 669991554f2SKenneth D. Merry 670991554f2SKenneth D. Merry /* Manufacturing Page 3 */ 671991554f2SKenneth D. Merry 672991554f2SKenneth D. Merry /* 673991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 674991554f2SKenneth D. Merry * one and check Header.PageLength at runtime. 675991554f2SKenneth D. Merry */ 676991554f2SKenneth D. Merry #ifndef MPI2_MAN_PAGE_3_INFO_WORDS 677991554f2SKenneth D. Merry #define MPI2_MAN_PAGE_3_INFO_WORDS (1) 678991554f2SKenneth D. Merry #endif 679991554f2SKenneth D. Merry 680991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_3 681991554f2SKenneth D. Merry { 682991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 683991554f2SKenneth D. Merry MPI2_CHIP_REVISION_ID ChipId; /* 0x04 */ 684991554f2SKenneth D. Merry U32 Info[MPI2_MAN_PAGE_3_INFO_WORDS];/* 0x08 */ 685991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_3, 686991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_3, 687991554f2SKenneth D. Merry Mpi2ManufacturingPage3_t, MPI2_POINTER pMpi2ManufacturingPage3_t; 688991554f2SKenneth D. Merry 689991554f2SKenneth D. Merry #define MPI2_MANUFACTURING3_PAGEVERSION (0x00) 690991554f2SKenneth D. Merry 691991554f2SKenneth D. Merry /* Manufacturing Page 4 */ 692991554f2SKenneth D. Merry 693991554f2SKenneth D. Merry typedef struct _MPI2_MANPAGE4_PWR_SAVE_SETTINGS 694991554f2SKenneth D. Merry { 695991554f2SKenneth D. Merry U8 PowerSaveFlags; /* 0x00 */ 696991554f2SKenneth D. Merry U8 InternalOperationsSleepTime; /* 0x01 */ 697991554f2SKenneth D. Merry U8 InternalOperationsRunTime; /* 0x02 */ 698991554f2SKenneth D. Merry U8 HostIdleTime; /* 0x03 */ 699991554f2SKenneth D. Merry } MPI2_MANPAGE4_PWR_SAVE_SETTINGS, 700991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_MANPAGE4_PWR_SAVE_SETTINGS, 701991554f2SKenneth D. Merry Mpi2ManPage4PwrSaveSettings_t, MPI2_POINTER pMpi2ManPage4PwrSaveSettings_t; 702991554f2SKenneth D. Merry 703991554f2SKenneth D. Merry /* defines for the PowerSaveFlags field */ 704991554f2SKenneth D. Merry #define MPI2_MANPAGE4_MASK_POWERSAVE_MODE (0x03) 705991554f2SKenneth D. Merry #define MPI2_MANPAGE4_POWERSAVE_MODE_DISABLED (0x00) 706991554f2SKenneth D. Merry #define MPI2_MANPAGE4_CUSTOM_POWERSAVE_MODE (0x01) 707991554f2SKenneth D. Merry #define MPI2_MANPAGE4_FULL_POWERSAVE_MODE (0x02) 708991554f2SKenneth D. Merry 709991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_4 710991554f2SKenneth D. Merry { 711991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 712991554f2SKenneth D. Merry U32 Reserved1; /* 0x04 */ 713991554f2SKenneth D. Merry U32 Flags; /* 0x08 */ 714991554f2SKenneth D. Merry U8 InquirySize; /* 0x0C */ 715991554f2SKenneth D. Merry U8 Reserved2; /* 0x0D */ 716991554f2SKenneth D. Merry U16 Reserved3; /* 0x0E */ 717991554f2SKenneth D. Merry U8 InquiryData[56]; /* 0x10 */ 718991554f2SKenneth D. Merry U32 RAID0VolumeSettings; /* 0x48 */ 719991554f2SKenneth D. Merry U32 RAID1EVolumeSettings; /* 0x4C */ 720991554f2SKenneth D. Merry U32 RAID1VolumeSettings; /* 0x50 */ 721991554f2SKenneth D. Merry U32 RAID10VolumeSettings; /* 0x54 */ 722991554f2SKenneth D. Merry U32 Reserved4; /* 0x58 */ 723991554f2SKenneth D. Merry U32 Reserved5; /* 0x5C */ 724991554f2SKenneth D. Merry MPI2_MANPAGE4_PWR_SAVE_SETTINGS PowerSaveSettings; /* 0x60 */ 725991554f2SKenneth D. Merry U8 MaxOCEDisks; /* 0x64 */ 726991554f2SKenneth D. Merry U8 ResyncRate; /* 0x65 */ 727991554f2SKenneth D. Merry U16 DataScrubDuration; /* 0x66 */ 728991554f2SKenneth D. Merry U8 MaxHotSpares; /* 0x68 */ 729991554f2SKenneth D. Merry U8 MaxPhysDisksPerVol; /* 0x69 */ 730991554f2SKenneth D. Merry U8 MaxPhysDisks; /* 0x6A */ 731991554f2SKenneth D. Merry U8 MaxVolumes; /* 0x6B */ 732991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_4, 733991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_4, 734991554f2SKenneth D. Merry Mpi2ManufacturingPage4_t, MPI2_POINTER pMpi2ManufacturingPage4_t; 735991554f2SKenneth D. Merry 736991554f2SKenneth D. Merry #define MPI2_MANUFACTURING4_PAGEVERSION (0x0A) 737991554f2SKenneth D. Merry 738991554f2SKenneth D. Merry /* Manufacturing Page 4 Flags field */ 739991554f2SKenneth D. Merry #define MPI2_MANPAGE4_METADATA_SIZE_MASK (0x00030000) 740991554f2SKenneth D. Merry #define MPI2_MANPAGE4_METADATA_512MB (0x00000000) 741991554f2SKenneth D. Merry 742991554f2SKenneth D. Merry #define MPI2_MANPAGE4_MIX_SSD_SAS_SATA (0x00008000) 743991554f2SKenneth D. Merry #define MPI2_MANPAGE4_MIX_SSD_AND_NON_SSD (0x00004000) 744991554f2SKenneth D. Merry #define MPI2_MANPAGE4_HIDE_PHYSDISK_NON_IR (0x00002000) 745991554f2SKenneth D. Merry 746991554f2SKenneth D. Merry #define MPI2_MANPAGE4_MASK_PHYSDISK_COERCION (0x00001C00) 747991554f2SKenneth D. Merry #define MPI2_MANPAGE4_PHYSDISK_COERCION_1GB (0x00000000) 748991554f2SKenneth D. Merry #define MPI2_MANPAGE4_PHYSDISK_128MB_COERCION (0x00000400) 749991554f2SKenneth D. Merry #define MPI2_MANPAGE4_PHYSDISK_ADAPTIVE_COERCION (0x00000800) 750991554f2SKenneth D. Merry #define MPI2_MANPAGE4_PHYSDISK_ZERO_COERCION (0x00000C00) 751991554f2SKenneth D. Merry 752991554f2SKenneth D. Merry #define MPI2_MANPAGE4_MASK_BAD_BLOCK_MARKING (0x00000300) 753991554f2SKenneth D. Merry #define MPI2_MANPAGE4_DEFAULT_BAD_BLOCK_MARKING (0x00000000) 754991554f2SKenneth D. Merry #define MPI2_MANPAGE4_TABLE_BAD_BLOCK_MARKING (0x00000100) 755991554f2SKenneth D. Merry #define MPI2_MANPAGE4_WRITE_LONG_BAD_BLOCK_MARKING (0x00000200) 756991554f2SKenneth D. Merry 757991554f2SKenneth D. Merry #define MPI2_MANPAGE4_FORCE_OFFLINE_FAILOVER (0x00000080) 758991554f2SKenneth D. Merry #define MPI2_MANPAGE4_RAID10_DISABLE (0x00000040) 759991554f2SKenneth D. Merry #define MPI2_MANPAGE4_RAID1E_DISABLE (0x00000020) 760991554f2SKenneth D. Merry #define MPI2_MANPAGE4_RAID1_DISABLE (0x00000010) 761991554f2SKenneth D. Merry #define MPI2_MANPAGE4_RAID0_DISABLE (0x00000008) 762991554f2SKenneth D. Merry #define MPI2_MANPAGE4_IR_MODEPAGE8_DISABLE (0x00000004) 763991554f2SKenneth D. Merry #define MPI2_MANPAGE4_IM_RESYNC_CACHE_ENABLE (0x00000002) 764991554f2SKenneth D. Merry #define MPI2_MANPAGE4_IR_NO_MIX_SAS_SATA (0x00000001) 765991554f2SKenneth D. Merry 766991554f2SKenneth D. Merry /* Manufacturing Page 5 */ 767991554f2SKenneth D. Merry 768991554f2SKenneth D. Merry /* 769991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 770991554f2SKenneth D. Merry * one and check the value returned for NumPhys at runtime. 771991554f2SKenneth D. Merry */ 772991554f2SKenneth D. Merry #ifndef MPI2_MAN_PAGE_5_PHY_ENTRIES 773991554f2SKenneth D. Merry #define MPI2_MAN_PAGE_5_PHY_ENTRIES (1) 774991554f2SKenneth D. Merry #endif 775991554f2SKenneth D. Merry 776991554f2SKenneth D. Merry typedef struct _MPI2_MANUFACTURING5_ENTRY 777991554f2SKenneth D. Merry { 778991554f2SKenneth D. Merry U64 WWID; /* 0x00 */ 779991554f2SKenneth D. Merry U64 DeviceName; /* 0x08 */ 780991554f2SKenneth D. Merry } MPI2_MANUFACTURING5_ENTRY, MPI2_POINTER PTR_MPI2_MANUFACTURING5_ENTRY, 781991554f2SKenneth D. Merry Mpi2Manufacturing5Entry_t, MPI2_POINTER pMpi2Manufacturing5Entry_t; 782991554f2SKenneth D. Merry 783991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_5 784991554f2SKenneth D. Merry { 785991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 786991554f2SKenneth D. Merry U8 NumPhys; /* 0x04 */ 787991554f2SKenneth D. Merry U8 Reserved1; /* 0x05 */ 788991554f2SKenneth D. Merry U16 Reserved2; /* 0x06 */ 789991554f2SKenneth D. Merry U32 Reserved3; /* 0x08 */ 790991554f2SKenneth D. Merry U32 Reserved4; /* 0x0C */ 791991554f2SKenneth D. Merry MPI2_MANUFACTURING5_ENTRY Phy[MPI2_MAN_PAGE_5_PHY_ENTRIES];/* 0x08 */ 792991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_5, 793991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_5, 794991554f2SKenneth D. Merry Mpi2ManufacturingPage5_t, MPI2_POINTER pMpi2ManufacturingPage5_t; 795991554f2SKenneth D. Merry 796991554f2SKenneth D. Merry #define MPI2_MANUFACTURING5_PAGEVERSION (0x03) 797991554f2SKenneth D. Merry 798991554f2SKenneth D. Merry /* Manufacturing Page 6 */ 799991554f2SKenneth D. Merry 800991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_6 801991554f2SKenneth D. Merry { 802991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 803991554f2SKenneth D. Merry U32 ProductSpecificInfo;/* 0x04 */ 804991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_6, 805991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_6, 806991554f2SKenneth D. Merry Mpi2ManufacturingPage6_t, MPI2_POINTER pMpi2ManufacturingPage6_t; 807991554f2SKenneth D. Merry 808991554f2SKenneth D. Merry #define MPI2_MANUFACTURING6_PAGEVERSION (0x00) 809991554f2SKenneth D. Merry 810991554f2SKenneth D. Merry /* Manufacturing Page 7 */ 811991554f2SKenneth D. Merry 812991554f2SKenneth D. Merry typedef struct _MPI2_MANPAGE7_CONNECTOR_INFO 813991554f2SKenneth D. Merry { 814991554f2SKenneth D. Merry U32 Pinout; /* 0x00 */ 815991554f2SKenneth D. Merry U8 Connector[16]; /* 0x04 */ 816991554f2SKenneth D. Merry U8 Location; /* 0x14 */ 817991554f2SKenneth D. Merry U8 ReceptacleID; /* 0x15 */ 818991554f2SKenneth D. Merry U16 Slot; /* 0x16 */ 819*8736c018SKashyap D Desai U16 Slotx4; /* 0x18 */ 820*8736c018SKashyap D Desai U16 Slotx2; /* 0x1A */ 821991554f2SKenneth D. Merry } MPI2_MANPAGE7_CONNECTOR_INFO, MPI2_POINTER PTR_MPI2_MANPAGE7_CONNECTOR_INFO, 822991554f2SKenneth D. Merry Mpi2ManPage7ConnectorInfo_t, MPI2_POINTER pMpi2ManPage7ConnectorInfo_t; 823991554f2SKenneth D. Merry 824991554f2SKenneth D. Merry /* defines for the Pinout field */ 825991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_LANE_MASK (0x0000FF00) 826991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_LANE_SHIFT (8) 827991554f2SKenneth D. Merry 828991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_TYPE_MASK (0x000000FF) 829991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_TYPE_UNKNOWN (0x00) 830991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SATA_SINGLE (0x01) 831991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8482 (0x02) 832991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8486 (0x03) 833991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8484 (0x04) 834991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8087 (0x05) 835991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8643_4I (0x06) 836991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8643_8I (0x07) 837991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8470 (0x08) 838991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8088 (0x09) 839991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8644_4X (0x0A) 840991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8644_8X (0x0B) 841991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8644_16X (0x0C) 842991554f2SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8436 (0x0D) 84367feec50SStephen McConnell #define MPI2_MANPAGE7_PINOUT_SFF_8088_A (0x0E) 84467feec50SStephen McConnell #define MPI2_MANPAGE7_PINOUT_SFF_8643_16i (0x0F) 84567feec50SStephen McConnell #define MPI2_MANPAGE7_PINOUT_SFF_8654_4i (0x10) 84667feec50SStephen McConnell #define MPI2_MANPAGE7_PINOUT_SFF_8654_8i (0x11) 84767feec50SStephen McConnell #define MPI2_MANPAGE7_PINOUT_SFF_8611_4i (0x12) 84867feec50SStephen McConnell #define MPI2_MANPAGE7_PINOUT_SFF_8611_8i (0x13) 849991554f2SKenneth D. Merry 850991554f2SKenneth D. Merry /* defines for the Location field */ 851991554f2SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_UNKNOWN (0x01) 852991554f2SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_INTERNAL (0x02) 853991554f2SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_EXTERNAL (0x04) 854991554f2SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_SWITCHABLE (0x08) 855991554f2SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_AUTO (0x10) 856991554f2SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_NOT_PRESENT (0x20) 857991554f2SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_NOT_CONNECTED (0x80) 858991554f2SKenneth D. Merry 8595f5baf0eSAlexander Motin /* defines for the Slot field */ 8605f5baf0eSAlexander Motin #define MPI2_MANPAGE7_SLOT_UNKNOWN (0xFFFF) 8615f5baf0eSAlexander Motin 862991554f2SKenneth D. Merry /* 863991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 864991554f2SKenneth D. Merry * one and check the value returned for NumPhys at runtime. 865991554f2SKenneth D. Merry */ 866991554f2SKenneth D. Merry #ifndef MPI2_MANPAGE7_CONNECTOR_INFO_MAX 867991554f2SKenneth D. Merry #define MPI2_MANPAGE7_CONNECTOR_INFO_MAX (1) 868991554f2SKenneth D. Merry #endif 869991554f2SKenneth D. Merry 870991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_7 871991554f2SKenneth D. Merry { 872991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 873991554f2SKenneth D. Merry U32 Reserved1; /* 0x04 */ 874991554f2SKenneth D. Merry U32 Reserved2; /* 0x08 */ 875991554f2SKenneth D. Merry U32 Flags; /* 0x0C */ 876991554f2SKenneth D. Merry U8 EnclosureName[16]; /* 0x10 */ 877991554f2SKenneth D. Merry U8 NumPhys; /* 0x20 */ 878991554f2SKenneth D. Merry U8 Reserved3; /* 0x21 */ 879991554f2SKenneth D. Merry U16 Reserved4; /* 0x22 */ 880991554f2SKenneth D. Merry MPI2_MANPAGE7_CONNECTOR_INFO ConnectorInfo[MPI2_MANPAGE7_CONNECTOR_INFO_MAX]; /* 0x24 */ 881991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_7, 882991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_7, 883991554f2SKenneth D. Merry Mpi2ManufacturingPage7_t, MPI2_POINTER pMpi2ManufacturingPage7_t; 884991554f2SKenneth D. Merry 885991554f2SKenneth D. Merry #define MPI2_MANUFACTURING7_PAGEVERSION (0x01) 886991554f2SKenneth D. Merry 887991554f2SKenneth D. Merry /* defines for the Flags field */ 888991554f2SKenneth D. Merry #define MPI2_MANPAGE7_FLAG_BASE_ENCLOSURE_LEVEL (0x00000008) 889991554f2SKenneth D. Merry #define MPI2_MANPAGE7_FLAG_EVENTREPLAY_SLOT_ORDER (0x00000002) 890991554f2SKenneth D. Merry #define MPI2_MANPAGE7_FLAG_USE_SLOT_INFO (0x00000001) 891991554f2SKenneth D. Merry 892991554f2SKenneth D. Merry /* 893991554f2SKenneth D. Merry * Generic structure to use for product-specific manufacturing pages 894991554f2SKenneth D. Merry * (currently Manufacturing Page 8 through Manufacturing Page 31). 895991554f2SKenneth D. Merry */ 896991554f2SKenneth D. Merry 897991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_PS 898991554f2SKenneth D. Merry { 899991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 900991554f2SKenneth D. Merry U32 ProductSpecificInfo;/* 0x04 */ 901991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_PS, 902991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_PS, 903991554f2SKenneth D. Merry Mpi2ManufacturingPagePS_t, MPI2_POINTER pMpi2ManufacturingPagePS_t; 904991554f2SKenneth D. Merry 905991554f2SKenneth D. Merry #define MPI2_MANUFACTURING8_PAGEVERSION (0x00) 906991554f2SKenneth D. Merry #define MPI2_MANUFACTURING9_PAGEVERSION (0x00) 907991554f2SKenneth D. Merry #define MPI2_MANUFACTURING10_PAGEVERSION (0x00) 908991554f2SKenneth D. Merry #define MPI2_MANUFACTURING11_PAGEVERSION (0x00) 909991554f2SKenneth D. Merry #define MPI2_MANUFACTURING12_PAGEVERSION (0x00) 910991554f2SKenneth D. Merry #define MPI2_MANUFACTURING13_PAGEVERSION (0x00) 911991554f2SKenneth D. Merry #define MPI2_MANUFACTURING14_PAGEVERSION (0x00) 912991554f2SKenneth D. Merry #define MPI2_MANUFACTURING15_PAGEVERSION (0x00) 913991554f2SKenneth D. Merry #define MPI2_MANUFACTURING16_PAGEVERSION (0x00) 914991554f2SKenneth D. Merry #define MPI2_MANUFACTURING17_PAGEVERSION (0x00) 915991554f2SKenneth D. Merry #define MPI2_MANUFACTURING18_PAGEVERSION (0x00) 916991554f2SKenneth D. Merry #define MPI2_MANUFACTURING19_PAGEVERSION (0x00) 917991554f2SKenneth D. Merry #define MPI2_MANUFACTURING20_PAGEVERSION (0x00) 918991554f2SKenneth D. Merry #define MPI2_MANUFACTURING21_PAGEVERSION (0x00) 919991554f2SKenneth D. Merry #define MPI2_MANUFACTURING22_PAGEVERSION (0x00) 920991554f2SKenneth D. Merry #define MPI2_MANUFACTURING23_PAGEVERSION (0x00) 921991554f2SKenneth D. Merry #define MPI2_MANUFACTURING24_PAGEVERSION (0x00) 922991554f2SKenneth D. Merry #define MPI2_MANUFACTURING25_PAGEVERSION (0x00) 923991554f2SKenneth D. Merry #define MPI2_MANUFACTURING26_PAGEVERSION (0x00) 924991554f2SKenneth D. Merry #define MPI2_MANUFACTURING27_PAGEVERSION (0x00) 925991554f2SKenneth D. Merry #define MPI2_MANUFACTURING28_PAGEVERSION (0x00) 926991554f2SKenneth D. Merry #define MPI2_MANUFACTURING29_PAGEVERSION (0x00) 927991554f2SKenneth D. Merry #define MPI2_MANUFACTURING30_PAGEVERSION (0x00) 928991554f2SKenneth D. Merry #define MPI2_MANUFACTURING31_PAGEVERSION (0x00) 929991554f2SKenneth D. Merry 930991554f2SKenneth D. Merry /**************************************************************************** 931991554f2SKenneth D. Merry * IO Unit Config Pages 932991554f2SKenneth D. Merry ****************************************************************************/ 933991554f2SKenneth D. Merry 934991554f2SKenneth D. Merry /* IO Unit Page 0 */ 935991554f2SKenneth D. Merry 936991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_0 937991554f2SKenneth D. Merry { 938991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 939991554f2SKenneth D. Merry U64 UniqueValue; /* 0x04 */ 940991554f2SKenneth D. Merry MPI2_VERSION_UNION NvdataVersionDefault; /* 0x08 */ 941991554f2SKenneth D. Merry MPI2_VERSION_UNION NvdataVersionPersistent; /* 0x0A */ 942991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_0, 943991554f2SKenneth D. Merry Mpi2IOUnitPage0_t, MPI2_POINTER pMpi2IOUnitPage0_t; 944991554f2SKenneth D. Merry 945991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE0_PAGEVERSION (0x02) 946991554f2SKenneth D. Merry 947991554f2SKenneth D. Merry /* IO Unit Page 1 */ 948991554f2SKenneth D. Merry 949991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_1 950991554f2SKenneth D. Merry { 951991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 952991554f2SKenneth D. Merry U32 Flags; /* 0x04 */ 953991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_1, 954991554f2SKenneth D. Merry Mpi2IOUnitPage1_t, MPI2_POINTER pMpi2IOUnitPage1_t; 955991554f2SKenneth D. Merry 956991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_PAGEVERSION (0x04) 957991554f2SKenneth D. Merry 958991554f2SKenneth D. Merry /* IO Unit Page 1 Flags defines */ 959*8736c018SKashyap D Desai #define MPI26_IOUNITPAGE1_NVME_WRITE_CACHE_MASK (0x00030000) 960*8736c018SKashyap D Desai #define MPI26_IOUNITPAGE1_NVME_WRITE_CACHE_ENABLE (0x00000000) 961*8736c018SKashyap D Desai #define MPI26_IOUNITPAGE1_NVME_WRITE_CACHE_DISABLE (0x00010000) 962*8736c018SKashyap D Desai #define MPI26_IOUNITPAGE1_NVME_WRITE_CACHE_NO_CHANGE (0x00020000) 963991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_ATA_SECURITY_FREEZE_LOCK (0x00004000) 964991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE1_NEW_DEVICE_FAST_PATH_DISABLE (0x00002000) 965991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE1_DISABLE_FAST_PATH (0x00001000) 966991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_ENABLE_HOST_BASED_DISCOVERY (0x00000800) 967991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_MASK_SATA_WRITE_CACHE (0x00000600) 968991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_SATA_WRITE_CACHE_SHIFT (9) 969991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_ENABLE_SATA_WRITE_CACHE (0x00000000) 970991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_DISABLE_SATA_WRITE_CACHE (0x00000200) 971991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_UNCHANGED_SATA_WRITE_CACHE (0x00000400) 972991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_NATIVE_COMMAND_Q_DISABLE (0x00000100) 973991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_DISABLE_IR (0x00000040) 974991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_DISABLE_TASK_SET_FULL_HANDLING (0x00000020) 975991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE1_IR_USE_STATIC_VOLUME_ID (0x00000004) 976991554f2SKenneth D. Merry 977991554f2SKenneth D. Merry /* IO Unit Page 3 */ 978991554f2SKenneth D. Merry 979991554f2SKenneth D. Merry /* 980991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 981991554f2SKenneth D. Merry * one and check the value returned for GPIOCount at runtime. 982991554f2SKenneth D. Merry */ 983991554f2SKenneth D. Merry #ifndef MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX 984991554f2SKenneth D. Merry #define MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX (1) 985991554f2SKenneth D. Merry #endif 986991554f2SKenneth D. Merry 987991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_3 988991554f2SKenneth D. Merry { 989991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 990991554f2SKenneth D. Merry U8 GPIOCount; /* 0x04 */ 991991554f2SKenneth D. Merry U8 Reserved1; /* 0x05 */ 992991554f2SKenneth D. Merry U16 Reserved2; /* 0x06 */ 993991554f2SKenneth D. Merry U16 GPIOVal[MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX];/* 0x08 */ 994991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_3, 995991554f2SKenneth D. Merry Mpi2IOUnitPage3_t, MPI2_POINTER pMpi2IOUnitPage3_t; 996991554f2SKenneth D. Merry 997991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE3_PAGEVERSION (0x01) 998991554f2SKenneth D. Merry 999991554f2SKenneth D. Merry /* defines for IO Unit Page 3 GPIOVal field */ 1000991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE3_GPIO_FUNCTION_MASK (0xFFFC) 1001991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE3_GPIO_FUNCTION_SHIFT (2) 1002991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE3_GPIO_SETTING_OFF (0x0000) 1003991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE3_GPIO_SETTING_ON (0x0001) 1004991554f2SKenneth D. Merry 1005991554f2SKenneth D. Merry /* IO Unit Page 5 */ 1006991554f2SKenneth D. Merry 1007991554f2SKenneth D. Merry /* 1008991554f2SKenneth D. Merry * Upper layer code (drivers, utilities, etc.) should leave this define set to 1009991554f2SKenneth D. Merry * one and check the value returned for NumDmaEngines at runtime. 1010991554f2SKenneth D. Merry */ 1011991554f2SKenneth D. Merry #ifndef MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES 1012991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES (1) 1013991554f2SKenneth D. Merry #endif 1014991554f2SKenneth D. Merry 1015991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_5 1016991554f2SKenneth D. Merry { 1017991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1018991554f2SKenneth D. Merry U64 RaidAcceleratorBufferBaseAddress; /* 0x04 */ 1019991554f2SKenneth D. Merry U64 RaidAcceleratorBufferSize; /* 0x0C */ 1020991554f2SKenneth D. Merry U64 RaidAcceleratorControlBaseAddress; /* 0x14 */ 1021991554f2SKenneth D. Merry U8 RAControlSize; /* 0x1C */ 1022991554f2SKenneth D. Merry U8 NumDmaEngines; /* 0x1D */ 1023991554f2SKenneth D. Merry U8 RAMinControlSize; /* 0x1E */ 1024991554f2SKenneth D. Merry U8 RAMaxControlSize; /* 0x1F */ 1025991554f2SKenneth D. Merry U32 Reserved1; /* 0x20 */ 1026991554f2SKenneth D. Merry U32 Reserved2; /* 0x24 */ 1027991554f2SKenneth D. Merry U32 Reserved3; /* 0x28 */ 1028991554f2SKenneth D. Merry U32 DmaEngineCapabilities[MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES]; /* 0x2C */ 1029991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_5, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_5, 1030991554f2SKenneth D. Merry Mpi2IOUnitPage5_t, MPI2_POINTER pMpi2IOUnitPage5_t; 1031991554f2SKenneth D. Merry 1032991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE5_PAGEVERSION (0x00) 1033991554f2SKenneth D. Merry 1034991554f2SKenneth D. Merry /* defines for IO Unit Page 5 DmaEngineCapabilities field */ 1035991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_MASK_MAX_REQUESTS (0xFFFF0000) 1036991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_SHIFT_MAX_REQUESTS (16) 1037991554f2SKenneth D. Merry 1038991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_EEDP (0x0008) 1039991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_PARITY_GENERATION (0x0004) 1040991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_HASHING (0x0002) 1041991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_ENCRYPTION (0x0001) 1042991554f2SKenneth D. Merry 1043991554f2SKenneth D. Merry /* IO Unit Page 6 */ 1044991554f2SKenneth D. Merry 1045991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_6 1046991554f2SKenneth D. Merry { 1047991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1048991554f2SKenneth D. Merry U16 Flags; /* 0x04 */ 1049991554f2SKenneth D. Merry U8 RAHostControlSize; /* 0x06 */ 1050991554f2SKenneth D. Merry U8 Reserved0; /* 0x07 */ 1051991554f2SKenneth D. Merry U64 RaidAcceleratorHostControlBaseAddress; /* 0x08 */ 1052991554f2SKenneth D. Merry U32 Reserved1; /* 0x10 */ 1053991554f2SKenneth D. Merry U32 Reserved2; /* 0x14 */ 1054991554f2SKenneth D. Merry U32 Reserved3; /* 0x18 */ 1055991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_6, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_6, 1056991554f2SKenneth D. Merry Mpi2IOUnitPage6_t, MPI2_POINTER pMpi2IOUnitPage6_t; 1057991554f2SKenneth D. Merry 1058991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE6_PAGEVERSION (0x00) 1059991554f2SKenneth D. Merry 1060991554f2SKenneth D. Merry /* defines for IO Unit Page 6 Flags field */ 1061991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE6_FLAGS_ENABLE_RAID_ACCELERATOR (0x0001) 1062991554f2SKenneth D. Merry 1063991554f2SKenneth D. Merry /* IO Unit Page 7 */ 1064991554f2SKenneth D. Merry 1065991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_7 1066991554f2SKenneth D. Merry { 1067991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1068991554f2SKenneth D. Merry U8 CurrentPowerMode; /* 0x04 */ /* reserved in MPI 2.0 */ 1069991554f2SKenneth D. Merry U8 PreviousPowerMode; /* 0x05 */ /* reserved in MPI 2.0 */ 1070991554f2SKenneth D. Merry U8 PCIeWidth; /* 0x06 */ 1071991554f2SKenneth D. Merry U8 PCIeSpeed; /* 0x07 */ 1072991554f2SKenneth D. Merry U32 ProcessorState; /* 0x08 */ 1073991554f2SKenneth D. Merry U32 PowerManagementCapabilities; /* 0x0C */ 1074991554f2SKenneth D. Merry U16 IOCTemperature; /* 0x10 */ 1075991554f2SKenneth D. Merry U8 IOCTemperatureUnits; /* 0x12 */ 1076991554f2SKenneth D. Merry U8 IOCSpeed; /* 0x13 */ 1077991554f2SKenneth D. Merry U16 BoardTemperature; /* 0x14 */ 1078991554f2SKenneth D. Merry U8 BoardTemperatureUnits; /* 0x16 */ 1079991554f2SKenneth D. Merry U8 Reserved3; /* 0x17 */ 108028ae62b0SStephen McConnell U32 BoardPowerRequirement; /* 0x18 */ /* reserved prior to MPI v2.6 */ 108128ae62b0SStephen McConnell U32 PCISlotPowerAllocation; /* 0x1C */ /* reserved prior to MPI v2.6 */ 108228ae62b0SStephen McConnell U8 Flags; /* 0x20 */ /* reserved prior to MPI v2.6 */ 108328ae62b0SStephen McConnell U8 Reserved6; /* 0x21 */ 108428ae62b0SStephen McConnell U16 Reserved7; /* 0x22 */ 108528ae62b0SStephen McConnell U32 Reserved8; /* 0x24 */ 1086991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_7, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_7, 1087991554f2SKenneth D. Merry Mpi2IOUnitPage7_t, MPI2_POINTER pMpi2IOUnitPage7_t; 1088991554f2SKenneth D. Merry 108928ae62b0SStephen McConnell #define MPI2_IOUNITPAGE7_PAGEVERSION (0x05) 1090991554f2SKenneth D. Merry 1091991554f2SKenneth D. Merry /* defines for IO Unit Page 7 CurrentPowerMode and PreviousPowerMode fields */ 1092991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_INIT_MASK (0xC0) 1093991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_INIT_UNAVAILABLE (0x00) 1094991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_INIT_HOST (0x40) 1095991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_INIT_IO_UNIT (0x80) 1096991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_INIT_PCIE_DPA (0xC0) 1097991554f2SKenneth D. Merry 1098991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_MODE_MASK (0x07) 1099991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_MODE_UNAVAILABLE (0x00) 1100991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_MODE_UNKNOWN (0x01) 1101991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_MODE_FULL_POWER (0x04) 1102991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_MODE_REDUCED_POWER (0x05) 1103991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PM_MODE_STANDBY (0x06) 1104991554f2SKenneth D. Merry 1105991554f2SKenneth D. Merry /* defines for IO Unit Page 7 PCIeWidth field */ 1106991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X1 (0x01) 1107991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X2 (0x02) 1108991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X4 (0x04) 1109991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X8 (0x08) 111067feec50SStephen McConnell #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X16 (0x10) 1111991554f2SKenneth D. Merry 1112991554f2SKenneth D. Merry /* defines for IO Unit Page 7 PCIeSpeed field */ 1113991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_SPEED_2_5_GBPS (0x00) 1114991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_SPEED_5_0_GBPS (0x01) 1115991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_SPEED_8_0_GBPS (0x02) 111667feec50SStephen McConnell #define MPI2_IOUNITPAGE7_PCIE_SPEED_16_0_GBPS (0x03) 1117991554f2SKenneth D. Merry 1118991554f2SKenneth D. Merry /* defines for IO Unit Page 7 ProcessorState field */ 1119991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_MASK_SECOND (0x0000000F) 1120991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_SHIFT_SECOND (0) 1121991554f2SKenneth D. Merry 1122991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_NOT_PRESENT (0x00) 1123991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_DISABLED (0x01) 1124991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_ENABLED (0x02) 1125991554f2SKenneth D. Merry 1126991554f2SKenneth D. Merry /* defines for IO Unit Page 7 PowerManagementCapabilities field */ 1127991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_DPA_FULL_PWR_MODE (0x00400000) 1128991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_DPA_REDUCED_PWR_MODE (0x00200000) 1129991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_DPA_STANDBY_MODE (0x00100000) 1130991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_HOST_FULL_PWR_MODE (0x00040000) 1131991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_HOST_REDUCED_PWR_MODE (0x00020000) 1132991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_HOST_STANDBY_MODE (0x00010000) 1133991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_IO_FULL_PWR_MODE (0x00004000) 1134991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_IO_REDUCED_PWR_MODE (0x00002000) 1135991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_IO_STANDBY_MODE (0x00001000) 1136991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_HOST_12_5_PCT_IOCSPEED (0x00000400) 1137991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_HOST_25_0_PCT_IOCSPEED (0x00000200) 1138991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_HOST_50_0_PCT_IOCSPEED (0x00000100) 1139991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_IO_12_5_PCT_IOCSPEED (0x00000040) 1140991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_IO_25_0_PCT_IOCSPEED (0x00000020) 1141991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_IO_50_0_PCT_IOCSPEED (0x00000010) 1142991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_HOST_WIDTH_CHANGE_PCIE (0x00000008) /* obsolete */ 1143991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_HOST_SPEED_CHANGE_PCIE (0x00000004) /* obsolete */ 1144991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_IO_WIDTH_CHANGE_PCIE (0x00000002) /* obsolete */ 1145991554f2SKenneth D. Merry #define MPI25_IOUNITPAGE7_PMCAP_IO_SPEED_CHANGE_PCIE (0x00000001) /* obsolete */ 1146991554f2SKenneth D. Merry 1147991554f2SKenneth D. Merry /* obsolete names for the PowerManagementCapabilities bits (above) */ 1148991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_12_5_PCT_IOCSPEED (0x00000400) 1149991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_25_0_PCT_IOCSPEED (0x00000200) 1150991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_50_0_PCT_IOCSPEED (0x00000100) 1151991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_PCIE_WIDTH_CHANGE (0x00000008) /* obsolete */ 1152991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_PMCAP_PCIE_SPEED_CHANGE (0x00000004) /* obsolete */ 1153991554f2SKenneth D. Merry 1154991554f2SKenneth D. Merry /* defines for IO Unit Page 7 IOCTemperatureUnits field */ 1155991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_TEMP_NOT_PRESENT (0x00) 1156991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_TEMP_FAHRENHEIT (0x01) 1157991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_TEMP_CELSIUS (0x02) 1158991554f2SKenneth D. Merry 1159991554f2SKenneth D. Merry /* defines for IO Unit Page 7 IOCSpeed field */ 1160991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_SPEED_FULL (0x01) 1161991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_SPEED_HALF (0x02) 1162991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_SPEED_QUARTER (0x04) 1163991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_SPEED_EIGHTH (0x08) 1164991554f2SKenneth D. Merry 1165991554f2SKenneth D. Merry /* defines for IO Unit Page 7 BoardTemperatureUnits field */ 1166991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_BOARD_TEMP_NOT_PRESENT (0x00) 1167991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_BOARD_TEMP_FAHRENHEIT (0x01) 1168991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE7_BOARD_TEMP_CELSIUS (0x02) 1169991554f2SKenneth D. Merry 117028ae62b0SStephen McConnell /* defines for IO Unit Page 7 Flags field */ 117128ae62b0SStephen McConnell #define MPI2_IOUNITPAGE7_FLAG_CABLE_POWER_EXC (0x01) 1172991554f2SKenneth D. Merry 1173991554f2SKenneth D. Merry /* IO Unit Page 8 */ 1174991554f2SKenneth D. Merry 1175991554f2SKenneth D. Merry #define MPI2_IOUNIT8_NUM_THRESHOLDS (4) 1176991554f2SKenneth D. Merry 1177991554f2SKenneth D. Merry typedef struct _MPI2_IOUNIT8_SENSOR 1178991554f2SKenneth D. Merry { 1179991554f2SKenneth D. Merry U16 Flags; /* 0x00 */ 1180991554f2SKenneth D. Merry U16 Reserved1; /* 0x02 */ 1181991554f2SKenneth D. Merry U16 Threshold[MPI2_IOUNIT8_NUM_THRESHOLDS]; /* 0x04 */ 1182991554f2SKenneth D. Merry U32 Reserved2; /* 0x0C */ 1183991554f2SKenneth D. Merry U32 Reserved3; /* 0x10 */ 1184991554f2SKenneth D. Merry U32 Reserved4; /* 0x14 */ 1185991554f2SKenneth D. Merry } MPI2_IOUNIT8_SENSOR, MPI2_POINTER PTR_MPI2_IOUNIT8_SENSOR, 1186991554f2SKenneth D. Merry Mpi2IOUnit8Sensor_t, MPI2_POINTER pMpi2IOUnit8Sensor_t; 1187991554f2SKenneth D. Merry 1188991554f2SKenneth D. Merry /* defines for IO Unit Page 8 Sensor Flags field */ 1189991554f2SKenneth D. Merry #define MPI2_IOUNIT8_SENSOR_FLAGS_T3_ENABLE (0x0008) 1190991554f2SKenneth D. Merry #define MPI2_IOUNIT8_SENSOR_FLAGS_T2_ENABLE (0x0004) 1191991554f2SKenneth D. Merry #define MPI2_IOUNIT8_SENSOR_FLAGS_T1_ENABLE (0x0002) 1192991554f2SKenneth D. Merry #define MPI2_IOUNIT8_SENSOR_FLAGS_T0_ENABLE (0x0001) 1193991554f2SKenneth D. Merry 1194991554f2SKenneth D. Merry /* 1195991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1196991554f2SKenneth D. Merry * one and check the value returned for NumSensors at runtime. 1197991554f2SKenneth D. Merry */ 1198991554f2SKenneth D. Merry #ifndef MPI2_IOUNITPAGE8_SENSOR_ENTRIES 1199991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE8_SENSOR_ENTRIES (1) 1200991554f2SKenneth D. Merry #endif 1201991554f2SKenneth D. Merry 1202991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_8 1203991554f2SKenneth D. Merry { 1204991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1205991554f2SKenneth D. Merry U32 Reserved1; /* 0x04 */ 1206991554f2SKenneth D. Merry U32 Reserved2; /* 0x08 */ 1207991554f2SKenneth D. Merry U8 NumSensors; /* 0x0C */ 1208991554f2SKenneth D. Merry U8 PollingInterval; /* 0x0D */ 1209991554f2SKenneth D. Merry U16 Reserved3; /* 0x0E */ 1210991554f2SKenneth D. Merry MPI2_IOUNIT8_SENSOR Sensor[MPI2_IOUNITPAGE8_SENSOR_ENTRIES];/* 0x10 */ 1211991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_8, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_8, 1212991554f2SKenneth D. Merry Mpi2IOUnitPage8_t, MPI2_POINTER pMpi2IOUnitPage8_t; 1213991554f2SKenneth D. Merry 1214991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE8_PAGEVERSION (0x00) 1215991554f2SKenneth D. Merry 1216991554f2SKenneth D. Merry /* IO Unit Page 9 */ 1217991554f2SKenneth D. Merry 1218991554f2SKenneth D. Merry typedef struct _MPI2_IOUNIT9_SENSOR 1219991554f2SKenneth D. Merry { 1220991554f2SKenneth D. Merry U16 CurrentTemperature; /* 0x00 */ 1221991554f2SKenneth D. Merry U16 Reserved1; /* 0x02 */ 1222991554f2SKenneth D. Merry U8 Flags; /* 0x04 */ 1223991554f2SKenneth D. Merry U8 Reserved2; /* 0x05 */ 1224991554f2SKenneth D. Merry U16 Reserved3; /* 0x06 */ 1225991554f2SKenneth D. Merry U32 Reserved4; /* 0x08 */ 1226991554f2SKenneth D. Merry U32 Reserved5; /* 0x0C */ 1227991554f2SKenneth D. Merry } MPI2_IOUNIT9_SENSOR, MPI2_POINTER PTR_MPI2_IOUNIT9_SENSOR, 1228991554f2SKenneth D. Merry Mpi2IOUnit9Sensor_t, MPI2_POINTER pMpi2IOUnit9Sensor_t; 1229991554f2SKenneth D. Merry 1230991554f2SKenneth D. Merry /* defines for IO Unit Page 9 Sensor Flags field */ 1231991554f2SKenneth D. Merry #define MPI2_IOUNIT9_SENSOR_FLAGS_TEMP_VALID (0x01) 1232991554f2SKenneth D. Merry 1233991554f2SKenneth D. Merry /* 1234991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1235991554f2SKenneth D. Merry * one and check the value returned for NumSensors at runtime. 1236991554f2SKenneth D. Merry */ 1237991554f2SKenneth D. Merry #ifndef MPI2_IOUNITPAGE9_SENSOR_ENTRIES 1238991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE9_SENSOR_ENTRIES (1) 1239991554f2SKenneth D. Merry #endif 1240991554f2SKenneth D. Merry 1241991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_9 1242991554f2SKenneth D. Merry { 1243991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1244991554f2SKenneth D. Merry U32 Reserved1; /* 0x04 */ 1245991554f2SKenneth D. Merry U32 Reserved2; /* 0x08 */ 1246991554f2SKenneth D. Merry U8 NumSensors; /* 0x0C */ 1247991554f2SKenneth D. Merry U8 Reserved4; /* 0x0D */ 1248991554f2SKenneth D. Merry U16 Reserved3; /* 0x0E */ 1249991554f2SKenneth D. Merry MPI2_IOUNIT9_SENSOR Sensor[MPI2_IOUNITPAGE9_SENSOR_ENTRIES];/* 0x10 */ 1250991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_9, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_9, 1251991554f2SKenneth D. Merry Mpi2IOUnitPage9_t, MPI2_POINTER pMpi2IOUnitPage9_t; 1252991554f2SKenneth D. Merry 1253991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE9_PAGEVERSION (0x00) 1254991554f2SKenneth D. Merry 1255991554f2SKenneth D. Merry /* IO Unit Page 10 */ 1256991554f2SKenneth D. Merry 1257991554f2SKenneth D. Merry typedef struct _MPI2_IOUNIT10_FUNCTION 1258991554f2SKenneth D. Merry { 1259991554f2SKenneth D. Merry U8 CreditPercent; /* 0x00 */ 1260991554f2SKenneth D. Merry U8 Reserved1; /* 0x01 */ 1261991554f2SKenneth D. Merry U16 Reserved2; /* 0x02 */ 1262991554f2SKenneth D. Merry } MPI2_IOUNIT10_FUNCTION, MPI2_POINTER PTR_MPI2_IOUNIT10_FUNCTION, 1263991554f2SKenneth D. Merry Mpi2IOUnit10Function_t, MPI2_POINTER pMpi2IOUnit10Function_t; 1264991554f2SKenneth D. Merry 1265991554f2SKenneth D. Merry /* 1266991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1267991554f2SKenneth D. Merry * one and check the value returned for NumFunctions at runtime. 1268991554f2SKenneth D. Merry */ 1269991554f2SKenneth D. Merry #ifndef MPI2_IOUNITPAGE10_FUNCTION_ENTRIES 1270991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE10_FUNCTION_ENTRIES (1) 1271991554f2SKenneth D. Merry #endif 1272991554f2SKenneth D. Merry 1273991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_10 1274991554f2SKenneth D. Merry { 1275991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1276991554f2SKenneth D. Merry U8 NumFunctions; /* 0x04 */ 1277991554f2SKenneth D. Merry U8 Reserved1; /* 0x05 */ 1278991554f2SKenneth D. Merry U16 Reserved2; /* 0x06 */ 1279991554f2SKenneth D. Merry U32 Reserved3; /* 0x08 */ 1280991554f2SKenneth D. Merry U32 Reserved4; /* 0x0C */ 1281991554f2SKenneth D. Merry MPI2_IOUNIT10_FUNCTION Function[MPI2_IOUNITPAGE10_FUNCTION_ENTRIES]; /* 0x10 */ 1282991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_10, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_10, 1283991554f2SKenneth D. Merry Mpi2IOUnitPage10_t, MPI2_POINTER pMpi2IOUnitPage10_t; 1284991554f2SKenneth D. Merry 1285991554f2SKenneth D. Merry #define MPI2_IOUNITPAGE10_PAGEVERSION (0x01) 1286991554f2SKenneth D. Merry 128728ae62b0SStephen McConnell /* IO Unit Page 11 (for MPI v2.6 and later) */ 128828ae62b0SStephen McConnell 128928ae62b0SStephen McConnell typedef struct _MPI26_IOUNIT11_SPINUP_GROUP 129028ae62b0SStephen McConnell { 129128ae62b0SStephen McConnell U8 MaxTargetSpinup; /* 0x00 */ 129228ae62b0SStephen McConnell U8 SpinupDelay; /* 0x01 */ 129328ae62b0SStephen McConnell U8 SpinupFlags; /* 0x02 */ 129428ae62b0SStephen McConnell U8 Reserved1; /* 0x03 */ 129528ae62b0SStephen McConnell } MPI26_IOUNIT11_SPINUP_GROUP, MPI2_POINTER PTR_MPI26_IOUNIT11_SPINUP_GROUP, 129628ae62b0SStephen McConnell Mpi26IOUnit11SpinupGroup_t, MPI2_POINTER pMpi26IOUnit11SpinupGroup_t; 129728ae62b0SStephen McConnell 129828ae62b0SStephen McConnell /* defines for IO Unit Page 11 SpinupFlags */ 129928ae62b0SStephen McConnell #define MPI26_IOUNITPAGE11_SPINUP_DISABLE_FLAG (0x01) 130028ae62b0SStephen McConnell 130128ae62b0SStephen McConnell /* 130228ae62b0SStephen McConnell * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 130328ae62b0SStephen McConnell * four and check the value returned for NumPhys at runtime. 130428ae62b0SStephen McConnell */ 130528ae62b0SStephen McConnell #ifndef MPI26_IOUNITPAGE11_PHY_MAX 130628ae62b0SStephen McConnell #define MPI26_IOUNITPAGE11_PHY_MAX (4) 130728ae62b0SStephen McConnell #endif 130828ae62b0SStephen McConnell 130928ae62b0SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_IO_UNIT_11 131028ae62b0SStephen McConnell { 131128ae62b0SStephen McConnell MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 131228ae62b0SStephen McConnell U32 Reserved1; /* 0x04 */ 131328ae62b0SStephen McConnell MPI26_IOUNIT11_SPINUP_GROUP SpinupGroupParameters[4]; /* 0x08 */ 131428ae62b0SStephen McConnell U32 Reserved2; /* 0x18 */ 131528ae62b0SStephen McConnell U32 Reserved3; /* 0x1C */ 131628ae62b0SStephen McConnell U32 Reserved4; /* 0x20 */ 131728ae62b0SStephen McConnell U8 BootDeviceWaitTime; /* 0x24 */ 131867feec50SStephen McConnell U8 SATADeviceWaitTime; /* 0x25 */ 131928ae62b0SStephen McConnell U16 Reserved6; /* 0x26 */ 132028ae62b0SStephen McConnell U8 NumPhys; /* 0x28 */ 132128ae62b0SStephen McConnell U8 PEInitialSpinupDelay; /* 0x29 */ 132228ae62b0SStephen McConnell U8 PEReplyDelay; /* 0x2A */ 132328ae62b0SStephen McConnell U8 Flags; /* 0x2B */ 132428ae62b0SStephen McConnell U8 PHY[MPI26_IOUNITPAGE11_PHY_MAX];/* 0x2C */ 132528ae62b0SStephen McConnell } MPI26_CONFIG_PAGE_IO_UNIT_11, 132628ae62b0SStephen McConnell MPI2_POINTER PTR_MPI26_CONFIG_PAGE_IO_UNIT_11, 132728ae62b0SStephen McConnell Mpi26IOUnitPage11_t, MPI2_POINTER pMpi26IOUnitPage11_t; 132828ae62b0SStephen McConnell 132928ae62b0SStephen McConnell #define MPI26_IOUNITPAGE11_PAGEVERSION (0x00) 133028ae62b0SStephen McConnell 133128ae62b0SStephen McConnell /* defines for Flags field */ 133228ae62b0SStephen McConnell #define MPI26_IOUNITPAGE11_FLAGS_AUTO_PORTENABLE (0x01) 133328ae62b0SStephen McConnell 133428ae62b0SStephen McConnell /* defines for PHY field */ 133528ae62b0SStephen McConnell #define MPI26_IOUNITPAGE11_PHY_SPINUP_GROUP_MASK (0x03) 133628ae62b0SStephen McConnell 1337991554f2SKenneth D. Merry /**************************************************************************** 1338991554f2SKenneth D. Merry * IOC Config Pages 1339991554f2SKenneth D. Merry ****************************************************************************/ 1340991554f2SKenneth D. Merry 1341991554f2SKenneth D. Merry /* IOC Page 0 */ 1342991554f2SKenneth D. Merry 1343991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_0 1344991554f2SKenneth D. Merry { 1345991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1346991554f2SKenneth D. Merry U32 Reserved1; /* 0x04 */ 1347991554f2SKenneth D. Merry U32 Reserved2; /* 0x08 */ 1348991554f2SKenneth D. Merry U16 VendorID; /* 0x0C */ 1349991554f2SKenneth D. Merry U16 DeviceID; /* 0x0E */ 1350991554f2SKenneth D. Merry U8 RevisionID; /* 0x10 */ 1351991554f2SKenneth D. Merry U8 Reserved3; /* 0x11 */ 1352991554f2SKenneth D. Merry U16 Reserved4; /* 0x12 */ 1353991554f2SKenneth D. Merry U32 ClassCode; /* 0x14 */ 1354991554f2SKenneth D. Merry U16 SubsystemVendorID; /* 0x18 */ 1355991554f2SKenneth D. Merry U16 SubsystemID; /* 0x1A */ 1356991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_0, 1357991554f2SKenneth D. Merry Mpi2IOCPage0_t, MPI2_POINTER pMpi2IOCPage0_t; 1358991554f2SKenneth D. Merry 1359991554f2SKenneth D. Merry #define MPI2_IOCPAGE0_PAGEVERSION (0x02) 1360991554f2SKenneth D. Merry 1361991554f2SKenneth D. Merry /* IOC Page 1 */ 1362991554f2SKenneth D. Merry 1363991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_1 1364991554f2SKenneth D. Merry { 1365991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1366991554f2SKenneth D. Merry U32 Flags; /* 0x04 */ 1367991554f2SKenneth D. Merry U32 CoalescingTimeout; /* 0x08 */ 1368991554f2SKenneth D. Merry U8 CoalescingDepth; /* 0x0C */ 1369991554f2SKenneth D. Merry U8 PCISlotNum; /* 0x0D */ 1370991554f2SKenneth D. Merry U8 PCIBusNum; /* 0x0E */ 1371991554f2SKenneth D. Merry U8 PCIDomainSegment; /* 0x0F */ 1372991554f2SKenneth D. Merry U32 Reserved1; /* 0x10 */ 1373*8736c018SKashyap D Desai U32 ProductSpecific; /* 0x14 */ 1374991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_1, 1375991554f2SKenneth D. Merry Mpi2IOCPage1_t, MPI2_POINTER pMpi2IOCPage1_t; 1376991554f2SKenneth D. Merry 1377991554f2SKenneth D. Merry #define MPI2_IOCPAGE1_PAGEVERSION (0x05) 1378991554f2SKenneth D. Merry 1379991554f2SKenneth D. Merry /* defines for IOC Page 1 Flags field */ 1380991554f2SKenneth D. Merry #define MPI2_IOCPAGE1_REPLY_COALESCING (0x00000001) 1381991554f2SKenneth D. Merry 1382991554f2SKenneth D. Merry #define MPI2_IOCPAGE1_PCISLOTNUM_UNKNOWN (0xFF) 1383991554f2SKenneth D. Merry #define MPI2_IOCPAGE1_PCIBUSNUM_UNKNOWN (0xFF) 1384991554f2SKenneth D. Merry #define MPI2_IOCPAGE1_PCIDOMAIN_UNKNOWN (0xFF) 1385991554f2SKenneth D. Merry 1386991554f2SKenneth D. Merry /* IOC Page 6 */ 1387991554f2SKenneth D. Merry 1388991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_6 1389991554f2SKenneth D. Merry { 1390991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1391991554f2SKenneth D. Merry U32 CapabilitiesFlags; /* 0x04 */ 1392991554f2SKenneth D. Merry U8 MaxDrivesRAID0; /* 0x08 */ 1393991554f2SKenneth D. Merry U8 MaxDrivesRAID1; /* 0x09 */ 1394991554f2SKenneth D. Merry U8 MaxDrivesRAID1E; /* 0x0A */ 1395991554f2SKenneth D. Merry U8 MaxDrivesRAID10; /* 0x0B */ 1396991554f2SKenneth D. Merry U8 MinDrivesRAID0; /* 0x0C */ 1397991554f2SKenneth D. Merry U8 MinDrivesRAID1; /* 0x0D */ 1398991554f2SKenneth D. Merry U8 MinDrivesRAID1E; /* 0x0E */ 1399991554f2SKenneth D. Merry U8 MinDrivesRAID10; /* 0x0F */ 1400991554f2SKenneth D. Merry U32 Reserved1; /* 0x10 */ 1401991554f2SKenneth D. Merry U8 MaxGlobalHotSpares; /* 0x14 */ 1402991554f2SKenneth D. Merry U8 MaxPhysDisks; /* 0x15 */ 1403991554f2SKenneth D. Merry U8 MaxVolumes; /* 0x16 */ 1404991554f2SKenneth D. Merry U8 MaxConfigs; /* 0x17 */ 1405991554f2SKenneth D. Merry U8 MaxOCEDisks; /* 0x18 */ 1406991554f2SKenneth D. Merry U8 Reserved2; /* 0x19 */ 1407991554f2SKenneth D. Merry U16 Reserved3; /* 0x1A */ 1408991554f2SKenneth D. Merry U32 SupportedStripeSizeMapRAID0; /* 0x1C */ 1409991554f2SKenneth D. Merry U32 SupportedStripeSizeMapRAID1E; /* 0x20 */ 1410991554f2SKenneth D. Merry U32 SupportedStripeSizeMapRAID10; /* 0x24 */ 1411991554f2SKenneth D. Merry U32 Reserved4; /* 0x28 */ 1412991554f2SKenneth D. Merry U32 Reserved5; /* 0x2C */ 1413991554f2SKenneth D. Merry U16 DefaultMetadataSize; /* 0x30 */ 1414991554f2SKenneth D. Merry U16 Reserved6; /* 0x32 */ 1415991554f2SKenneth D. Merry U16 MaxBadBlockTableEntries; /* 0x34 */ 1416991554f2SKenneth D. Merry U16 Reserved7; /* 0x36 */ 1417991554f2SKenneth D. Merry U32 IRNvsramVersion; /* 0x38 */ 1418991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_6, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_6, 1419991554f2SKenneth D. Merry Mpi2IOCPage6_t, MPI2_POINTER pMpi2IOCPage6_t; 1420991554f2SKenneth D. Merry 1421991554f2SKenneth D. Merry #define MPI2_IOCPAGE6_PAGEVERSION (0x05) 1422991554f2SKenneth D. Merry 1423991554f2SKenneth D. Merry /* defines for IOC Page 6 CapabilitiesFlags */ 1424991554f2SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_4K_SECTORS_SUPPORT (0x00000020) 1425991554f2SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_RAID10_SUPPORT (0x00000010) 1426991554f2SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_RAID1_SUPPORT (0x00000008) 1427991554f2SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_RAID1E_SUPPORT (0x00000004) 1428991554f2SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_RAID0_SUPPORT (0x00000002) 1429991554f2SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_GLOBAL_HOT_SPARE (0x00000001) 1430991554f2SKenneth D. Merry 1431991554f2SKenneth D. Merry /* IOC Page 7 */ 1432991554f2SKenneth D. Merry 1433991554f2SKenneth D. Merry #define MPI2_IOCPAGE7_EVENTMASK_WORDS (4) 1434991554f2SKenneth D. Merry 1435991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_7 1436991554f2SKenneth D. Merry { 1437991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1438991554f2SKenneth D. Merry U32 Reserved1; /* 0x04 */ 1439991554f2SKenneth D. Merry U32 EventMasks[MPI2_IOCPAGE7_EVENTMASK_WORDS];/* 0x08 */ 1440991554f2SKenneth D. Merry U16 SASBroadcastPrimitiveMasks; /* 0x18 */ 1441991554f2SKenneth D. Merry U16 SASNotifyPrimitiveMasks; /* 0x1A */ 1442991554f2SKenneth D. Merry U32 Reserved3; /* 0x1C */ 1443991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_7, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_7, 1444991554f2SKenneth D. Merry Mpi2IOCPage7_t, MPI2_POINTER pMpi2IOCPage7_t; 1445991554f2SKenneth D. Merry 1446991554f2SKenneth D. Merry #define MPI2_IOCPAGE7_PAGEVERSION (0x02) 1447991554f2SKenneth D. Merry 1448991554f2SKenneth D. Merry /* IOC Page 8 */ 1449991554f2SKenneth D. Merry 1450991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_8 1451991554f2SKenneth D. Merry { 1452991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1453991554f2SKenneth D. Merry U8 NumDevsPerEnclosure; /* 0x04 */ 1454991554f2SKenneth D. Merry U8 Reserved1; /* 0x05 */ 1455991554f2SKenneth D. Merry U16 Reserved2; /* 0x06 */ 1456991554f2SKenneth D. Merry U16 MaxPersistentEntries; /* 0x08 */ 1457991554f2SKenneth D. Merry U16 MaxNumPhysicalMappedIDs; /* 0x0A */ 1458991554f2SKenneth D. Merry U16 Flags; /* 0x0C */ 1459991554f2SKenneth D. Merry U16 Reserved3; /* 0x0E */ 1460991554f2SKenneth D. Merry U16 IRVolumeMappingFlags; /* 0x10 */ 1461991554f2SKenneth D. Merry U16 Reserved4; /* 0x12 */ 1462991554f2SKenneth D. Merry U32 Reserved5; /* 0x14 */ 1463991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_8, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_8, 1464991554f2SKenneth D. Merry Mpi2IOCPage8_t, MPI2_POINTER pMpi2IOCPage8_t; 1465991554f2SKenneth D. Merry 1466991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_PAGEVERSION (0x00) 1467991554f2SKenneth D. Merry 1468991554f2SKenneth D. Merry /* defines for IOC Page 8 Flags field */ 1469991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_DA_START_SLOT_1 (0x00000020) 1470991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_RESERVED_TARGETID_0 (0x00000010) 1471991554f2SKenneth D. Merry 1472991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_MASK_MAPPING_MODE (0x0000000E) 1473991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_DEVICE_PERSISTENCE_MAPPING (0x00000000) 1474991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_ENCLOSURE_SLOT_MAPPING (0x00000002) 1475991554f2SKenneth D. Merry 1476991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_DISABLE_PERSISTENT_MAPPING (0x00000001) 1477991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_ENABLE_PERSISTENT_MAPPING (0x00000000) 1478991554f2SKenneth D. Merry 1479991554f2SKenneth D. Merry /* defines for IOC Page 8 IRVolumeMappingFlags */ 1480991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_IRFLAGS_MASK_VOLUME_MAPPING_MODE (0x00000003) 1481991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_IRFLAGS_LOW_VOLUME_MAPPING (0x00000000) 1482991554f2SKenneth D. Merry #define MPI2_IOCPAGE8_IRFLAGS_HIGH_VOLUME_MAPPING (0x00000001) 1483991554f2SKenneth D. Merry 1484991554f2SKenneth D. Merry /**************************************************************************** 1485991554f2SKenneth D. Merry * BIOS Config Pages 1486991554f2SKenneth D. Merry ****************************************************************************/ 1487991554f2SKenneth D. Merry 1488991554f2SKenneth D. Merry /* BIOS Page 1 */ 1489991554f2SKenneth D. Merry 1490991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_BIOS_1 1491991554f2SKenneth D. Merry { 1492991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1493991554f2SKenneth D. Merry U32 BiosOptions; /* 0x04 */ 1494991554f2SKenneth D. Merry U32 IOCSettings; /* 0x08 */ 149528ae62b0SStephen McConnell U8 SSUTimeout; /* 0x0C */ 1496*8736c018SKashyap D Desai U8 MaxEnclosureLevel; /* 0x0D */ 149728ae62b0SStephen McConnell U16 Reserved2; /* 0x0E */ 1498991554f2SKenneth D. Merry U32 DeviceSettings; /* 0x10 */ 1499991554f2SKenneth D. Merry U16 NumberOfDevices; /* 0x14 */ 1500991554f2SKenneth D. Merry U16 UEFIVersion; /* 0x16 */ 1501991554f2SKenneth D. Merry U16 IOTimeoutBlockDevicesNonRM; /* 0x18 */ 1502991554f2SKenneth D. Merry U16 IOTimeoutSequential; /* 0x1A */ 1503991554f2SKenneth D. Merry U16 IOTimeoutOther; /* 0x1C */ 1504991554f2SKenneth D. Merry U16 IOTimeoutBlockDevicesRM; /* 0x1E */ 1505991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_BIOS_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_1, 1506991554f2SKenneth D. Merry Mpi2BiosPage1_t, MPI2_POINTER pMpi2BiosPage1_t; 1507991554f2SKenneth D. Merry 150828ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_PAGEVERSION (0x07) 1509991554f2SKenneth D. Merry 1510991554f2SKenneth D. Merry /* values for BIOS Page 1 BiosOptions field */ 151128ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_BOOT_LIST_ADD_ALT_BOOT_DEVICE (0x00008000) 151228ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_ADVANCED_CONFIG (0x00004000) 151328ae62b0SStephen McConnell 151428ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_PNS_MASK (0x00003800) 151528ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_PNS_PBDHL (0x00000000) 151628ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_PNS_ENCSLOSURE (0x00000800) 151728ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_PNS_LWWID (0x00001000) 151828ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_PNS_PSENS (0x00001800) 151928ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_PNS_ESPHY (0x00002000) 152028ae62b0SStephen McConnell 152128ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_X86_DISABLE_BIOS (0x00000400) 152228ae62b0SStephen McConnell 152328ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_MASK_REGISTRATION_UEFI_BSD (0x00000300) 152428ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_USE_BIT0_REGISTRATION_UEFI_BSD (0x00000000) 152528ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_FULL_REGISTRATION_UEFI_BSD (0x00000100) 152628ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_ADAPTER_REGISTRATION_UEFI_BSD (0x00000200) 152728ae62b0SStephen McConnell #define MPI2_BIOSPAGE1_OPTIONS_DISABLE_REGISTRATION_UEFI_BSD (0x00000300) 152828ae62b0SStephen McConnell 1529991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_OPTIONS_MASK_OEM_ID (0x000000F0) 1530991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_OPTIONS_LSI_OEM_ID (0x00000000) 1531991554f2SKenneth D. Merry 1532991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_OPTIONS_MASK_UEFI_HII_REGISTRATION (0x00000006) 1533991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_OPTIONS_ENABLE_UEFI_HII (0x00000000) 1534991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_OPTIONS_DISABLE_UEFI_HII (0x00000002) 1535991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_OPTIONS_VERSION_CHECK_UEFI_HII (0x00000004) 1536991554f2SKenneth D. Merry 1537991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_OPTIONS_DISABLE_BIOS (0x00000001) 1538991554f2SKenneth D. Merry 1539991554f2SKenneth D. Merry /* values for BIOS Page 1 IOCSettings field */ 1540991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_MASK_BOOT_PREFERENCE (0x00030000) 1541991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_ENCLOSURE_SLOT_BOOT (0x00000000) 1542991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_SAS_ADDRESS_BOOT (0x00010000) 1543991554f2SKenneth D. Merry 1544991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_MASK_RM_SETTING (0x000000C0) 1545991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_NONE_RM_SETTING (0x00000000) 1546991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_BOOT_RM_SETTING (0x00000040) 1547991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_MEDIA_RM_SETTING (0x00000080) 1548991554f2SKenneth D. Merry 1549991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_MASK_ADAPTER_SUPPORT (0x00000030) 1550991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_NO_SUPPORT (0x00000000) 1551991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_BIOS_SUPPORT (0x00000010) 1552991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_OS_SUPPORT (0x00000020) 1553991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_ALL_SUPPORT (0x00000030) 1554991554f2SKenneth D. Merry 1555991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_ALTERNATE_CHS (0x00000008) 1556991554f2SKenneth D. Merry 1557991554f2SKenneth D. Merry /* values for BIOS Page 1 DeviceSettings field */ 1558991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_SMART_POLLING (0x00000010) 1559991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_SEQ_LUN (0x00000008) 1560991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_RM_LUN (0x00000004) 1561991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_NON_RM_LUN (0x00000002) 1562991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_OTHER_LUN (0x00000001) 1563991554f2SKenneth D. Merry 1564991554f2SKenneth D. Merry /* defines for BIOS Page 1 UEFIVersion field */ 1565991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_UEFI_VER_MAJOR_MASK (0xFF00) 1566991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_UEFI_VER_MAJOR_SHIFT (8) 1567991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_UEFI_VER_MINOR_MASK (0x00FF) 1568991554f2SKenneth D. Merry #define MPI2_BIOSPAGE1_UEFI_VER_MINOR_SHIFT (0) 1569991554f2SKenneth D. Merry 1570991554f2SKenneth D. Merry /* BIOS Page 2 */ 1571991554f2SKenneth D. Merry 1572991554f2SKenneth D. Merry typedef struct _MPI2_BOOT_DEVICE_ADAPTER_ORDER 1573991554f2SKenneth D. Merry { 1574991554f2SKenneth D. Merry U32 Reserved1; /* 0x00 */ 1575991554f2SKenneth D. Merry U32 Reserved2; /* 0x04 */ 1576991554f2SKenneth D. Merry U32 Reserved3; /* 0x08 */ 1577991554f2SKenneth D. Merry U32 Reserved4; /* 0x0C */ 1578991554f2SKenneth D. Merry U32 Reserved5; /* 0x10 */ 1579991554f2SKenneth D. Merry U32 Reserved6; /* 0x14 */ 1580991554f2SKenneth D. Merry } MPI2_BOOT_DEVICE_ADAPTER_ORDER, 1581991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_BOOT_DEVICE_ADAPTER_ORDER, 1582991554f2SKenneth D. Merry Mpi2BootDeviceAdapterOrder_t, MPI2_POINTER pMpi2BootDeviceAdapterOrder_t; 1583991554f2SKenneth D. Merry 1584991554f2SKenneth D. Merry typedef struct _MPI2_BOOT_DEVICE_SAS_WWID 1585991554f2SKenneth D. Merry { 1586991554f2SKenneth D. Merry U64 SASAddress; /* 0x00 */ 1587991554f2SKenneth D. Merry U8 LUN[8]; /* 0x08 */ 1588991554f2SKenneth D. Merry U32 Reserved1; /* 0x10 */ 1589991554f2SKenneth D. Merry U32 Reserved2; /* 0x14 */ 1590991554f2SKenneth D. Merry } MPI2_BOOT_DEVICE_SAS_WWID, MPI2_POINTER PTR_MPI2_BOOT_DEVICE_SAS_WWID, 1591991554f2SKenneth D. Merry Mpi2BootDeviceSasWwid_t, MPI2_POINTER pMpi2BootDeviceSasWwid_t; 1592991554f2SKenneth D. Merry 1593991554f2SKenneth D. Merry typedef struct _MPI2_BOOT_DEVICE_ENCLOSURE_SLOT 1594991554f2SKenneth D. Merry { 1595991554f2SKenneth D. Merry U64 EnclosureLogicalID; /* 0x00 */ 1596991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 1597991554f2SKenneth D. Merry U32 Reserved2; /* 0x0C */ 1598991554f2SKenneth D. Merry U16 SlotNumber; /* 0x10 */ 1599991554f2SKenneth D. Merry U16 Reserved3; /* 0x12 */ 1600991554f2SKenneth D. Merry U32 Reserved4; /* 0x14 */ 1601991554f2SKenneth D. Merry } MPI2_BOOT_DEVICE_ENCLOSURE_SLOT, 1602991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_BOOT_DEVICE_ENCLOSURE_SLOT, 1603991554f2SKenneth D. Merry Mpi2BootDeviceEnclosureSlot_t, MPI2_POINTER pMpi2BootDeviceEnclosureSlot_t; 1604991554f2SKenneth D. Merry 1605991554f2SKenneth D. Merry typedef struct _MPI2_BOOT_DEVICE_DEVICE_NAME 1606991554f2SKenneth D. Merry { 1607991554f2SKenneth D. Merry U64 DeviceName; /* 0x00 */ 1608991554f2SKenneth D. Merry U8 LUN[8]; /* 0x08 */ 1609991554f2SKenneth D. Merry U32 Reserved1; /* 0x10 */ 1610991554f2SKenneth D. Merry U32 Reserved2; /* 0x14 */ 1611991554f2SKenneth D. Merry } MPI2_BOOT_DEVICE_DEVICE_NAME, MPI2_POINTER PTR_MPI2_BOOT_DEVICE_DEVICE_NAME, 1612991554f2SKenneth D. Merry Mpi2BootDeviceDeviceName_t, MPI2_POINTER pMpi2BootDeviceDeviceName_t; 1613991554f2SKenneth D. Merry 1614991554f2SKenneth D. Merry typedef union _MPI2_MPI2_BIOSPAGE2_BOOT_DEVICE 1615991554f2SKenneth D. Merry { 1616991554f2SKenneth D. Merry MPI2_BOOT_DEVICE_ADAPTER_ORDER AdapterOrder; 1617991554f2SKenneth D. Merry MPI2_BOOT_DEVICE_SAS_WWID SasWwid; 1618991554f2SKenneth D. Merry MPI2_BOOT_DEVICE_ENCLOSURE_SLOT EnclosureSlot; 1619991554f2SKenneth D. Merry MPI2_BOOT_DEVICE_DEVICE_NAME DeviceName; 1620991554f2SKenneth D. Merry } MPI2_BIOSPAGE2_BOOT_DEVICE, MPI2_POINTER PTR_MPI2_BIOSPAGE2_BOOT_DEVICE, 1621991554f2SKenneth D. Merry Mpi2BiosPage2BootDevice_t, MPI2_POINTER pMpi2BiosPage2BootDevice_t; 1622991554f2SKenneth D. Merry 1623991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_BIOS_2 1624991554f2SKenneth D. Merry { 1625991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1626991554f2SKenneth D. Merry U32 Reserved1; /* 0x04 */ 1627991554f2SKenneth D. Merry U32 Reserved2; /* 0x08 */ 1628991554f2SKenneth D. Merry U32 Reserved3; /* 0x0C */ 1629991554f2SKenneth D. Merry U32 Reserved4; /* 0x10 */ 1630991554f2SKenneth D. Merry U32 Reserved5; /* 0x14 */ 1631991554f2SKenneth D. Merry U32 Reserved6; /* 0x18 */ 1632991554f2SKenneth D. Merry U8 ReqBootDeviceForm; /* 0x1C */ 1633991554f2SKenneth D. Merry U8 Reserved7; /* 0x1D */ 1634991554f2SKenneth D. Merry U16 Reserved8; /* 0x1E */ 1635991554f2SKenneth D. Merry MPI2_BIOSPAGE2_BOOT_DEVICE RequestedBootDevice; /* 0x20 */ 1636991554f2SKenneth D. Merry U8 ReqAltBootDeviceForm; /* 0x38 */ 1637991554f2SKenneth D. Merry U8 Reserved9; /* 0x39 */ 1638991554f2SKenneth D. Merry U16 Reserved10; /* 0x3A */ 1639991554f2SKenneth D. Merry MPI2_BIOSPAGE2_BOOT_DEVICE RequestedAltBootDevice; /* 0x3C */ 1640991554f2SKenneth D. Merry U8 CurrentBootDeviceForm; /* 0x58 */ 1641991554f2SKenneth D. Merry U8 Reserved11; /* 0x59 */ 1642991554f2SKenneth D. Merry U16 Reserved12; /* 0x5A */ 1643991554f2SKenneth D. Merry MPI2_BIOSPAGE2_BOOT_DEVICE CurrentBootDevice; /* 0x58 */ 1644991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_BIOS_2, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_2, 1645991554f2SKenneth D. Merry Mpi2BiosPage2_t, MPI2_POINTER pMpi2BiosPage2_t; 1646991554f2SKenneth D. Merry 1647991554f2SKenneth D. Merry #define MPI2_BIOSPAGE2_PAGEVERSION (0x04) 1648991554f2SKenneth D. Merry 1649991554f2SKenneth D. Merry /* values for BIOS Page 2 BootDeviceForm fields */ 1650991554f2SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_MASK (0x0F) 1651991554f2SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_NO_DEVICE_SPECIFIED (0x00) 1652991554f2SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_SAS_WWID (0x05) 1653991554f2SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_ENCLOSURE_SLOT (0x06) 1654991554f2SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_DEVICE_NAME (0x07) 1655991554f2SKenneth D. Merry 1656991554f2SKenneth D. Merry /* BIOS Page 3 */ 1657991554f2SKenneth D. Merry 165828ae62b0SStephen McConnell #define MPI2_BIOSPAGE3_NUM_ADAPTER (4) 165928ae62b0SStephen McConnell 1660991554f2SKenneth D. Merry typedef struct _MPI2_ADAPTER_INFO 1661991554f2SKenneth D. Merry { 1662991554f2SKenneth D. Merry U8 PciBusNumber; /* 0x00 */ 1663991554f2SKenneth D. Merry U8 PciDeviceAndFunctionNumber; /* 0x01 */ 1664991554f2SKenneth D. Merry U16 AdapterFlags; /* 0x02 */ 1665991554f2SKenneth D. Merry } MPI2_ADAPTER_INFO, MPI2_POINTER PTR_MPI2_ADAPTER_INFO, 1666991554f2SKenneth D. Merry Mpi2AdapterInfo_t, MPI2_POINTER pMpi2AdapterInfo_t; 1667991554f2SKenneth D. Merry 1668991554f2SKenneth D. Merry #define MPI2_ADAPTER_INFO_FLAGS_EMBEDDED (0x0001) 1669991554f2SKenneth D. Merry #define MPI2_ADAPTER_INFO_FLAGS_INIT_STATUS (0x0002) 1670991554f2SKenneth D. Merry 167128ae62b0SStephen McConnell typedef struct _MPI2_ADAPTER_ORDER_AUX 167228ae62b0SStephen McConnell { 167328ae62b0SStephen McConnell U64 WWID; /* 0x00 */ 167428ae62b0SStephen McConnell U32 Reserved1; /* 0x08 */ 167528ae62b0SStephen McConnell U32 Reserved2; /* 0x0C */ 167628ae62b0SStephen McConnell } MPI2_ADAPTER_ORDER_AUX, MPI2_POINTER PTR_MPI2_ADAPTER_ORDER_AUX, 167728ae62b0SStephen McConnell Mpi2AdapterOrderAux_t, MPI2_POINTER pMpi2AdapterOrderAux_t; 167828ae62b0SStephen McConnell 1679991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_BIOS_3 1680991554f2SKenneth D. Merry { 1681991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1682991554f2SKenneth D. Merry U32 GlobalFlags; /* 0x04 */ 1683991554f2SKenneth D. Merry U32 BiosVersion; /* 0x08 */ 168428ae62b0SStephen McConnell MPI2_ADAPTER_INFO AdapterOrder[MPI2_BIOSPAGE3_NUM_ADAPTER]; /* 0x0C */ 1685991554f2SKenneth D. Merry U32 Reserved1; /* 0x1C */ 168628ae62b0SStephen McConnell MPI2_ADAPTER_ORDER_AUX AdapterOrderAux[MPI2_BIOSPAGE3_NUM_ADAPTER]; /* 0x20 */ /* MPI v2.5 and newer */ 1687991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_BIOS_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_3, 1688991554f2SKenneth D. Merry Mpi2BiosPage3_t, MPI2_POINTER pMpi2BiosPage3_t; 1689991554f2SKenneth D. Merry 169028ae62b0SStephen McConnell #define MPI2_BIOSPAGE3_PAGEVERSION (0x01) 1691991554f2SKenneth D. Merry 1692991554f2SKenneth D. Merry /* values for BIOS Page 3 GlobalFlags */ 1693991554f2SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_PAUSE_ON_ERROR (0x00000002) 1694991554f2SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_VERBOSE_ENABLE (0x00000004) 1695991554f2SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_HOOK_INT_40_DISABLE (0x00000010) 1696991554f2SKenneth D. Merry 1697991554f2SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_DEV_LIST_DISPLAY_MASK (0x000000E0) 1698991554f2SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_INSTALLED_DEV_DISPLAY (0x00000000) 1699991554f2SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_ADAPTER_DISPLAY (0x00000020) 1700991554f2SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_ADAPTER_DEV_DISPLAY (0x00000040) 1701991554f2SKenneth D. Merry 1702991554f2SKenneth D. Merry /* BIOS Page 4 */ 1703991554f2SKenneth D. Merry 1704991554f2SKenneth D. Merry /* 1705991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1706991554f2SKenneth D. Merry * one and check the value returned for NumPhys at runtime. 1707991554f2SKenneth D. Merry */ 1708991554f2SKenneth D. Merry #ifndef MPI2_BIOS_PAGE_4_PHY_ENTRIES 1709991554f2SKenneth D. Merry #define MPI2_BIOS_PAGE_4_PHY_ENTRIES (1) 1710991554f2SKenneth D. Merry #endif 1711991554f2SKenneth D. Merry 1712991554f2SKenneth D. Merry typedef struct _MPI2_BIOS4_ENTRY 1713991554f2SKenneth D. Merry { 1714991554f2SKenneth D. Merry U64 ReassignmentWWID; /* 0x00 */ 1715991554f2SKenneth D. Merry U64 ReassignmentDeviceName; /* 0x08 */ 1716991554f2SKenneth D. Merry } MPI2_BIOS4_ENTRY, MPI2_POINTER PTR_MPI2_BIOS4_ENTRY, 1717991554f2SKenneth D. Merry Mpi2MBios4Entry_t, MPI2_POINTER pMpi2Bios4Entry_t; 1718991554f2SKenneth D. Merry 1719991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_BIOS_4 1720991554f2SKenneth D. Merry { 1721991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1722991554f2SKenneth D. Merry U8 NumPhys; /* 0x04 */ 1723991554f2SKenneth D. Merry U8 Reserved1; /* 0x05 */ 1724991554f2SKenneth D. Merry U16 Reserved2; /* 0x06 */ 1725991554f2SKenneth D. Merry MPI2_BIOS4_ENTRY Phy[MPI2_BIOS_PAGE_4_PHY_ENTRIES]; /* 0x08 */ 1726991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_BIOS_4, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_4, 1727991554f2SKenneth D. Merry Mpi2BiosPage4_t, MPI2_POINTER pMpi2BiosPage4_t; 1728991554f2SKenneth D. Merry 1729991554f2SKenneth D. Merry #define MPI2_BIOSPAGE4_PAGEVERSION (0x01) 1730991554f2SKenneth D. Merry 1731991554f2SKenneth D. Merry /**************************************************************************** 1732991554f2SKenneth D. Merry * RAID Volume Config Pages 1733991554f2SKenneth D. Merry ****************************************************************************/ 1734991554f2SKenneth D. Merry 1735991554f2SKenneth D. Merry /* RAID Volume Page 0 */ 1736991554f2SKenneth D. Merry 1737991554f2SKenneth D. Merry typedef struct _MPI2_RAIDVOL0_PHYS_DISK 1738991554f2SKenneth D. Merry { 1739991554f2SKenneth D. Merry U8 RAIDSetNum; /* 0x00 */ 1740991554f2SKenneth D. Merry U8 PhysDiskMap; /* 0x01 */ 1741991554f2SKenneth D. Merry U8 PhysDiskNum; /* 0x02 */ 1742991554f2SKenneth D. Merry U8 Reserved; /* 0x03 */ 1743991554f2SKenneth D. Merry } MPI2_RAIDVOL0_PHYS_DISK, MPI2_POINTER PTR_MPI2_RAIDVOL0_PHYS_DISK, 1744991554f2SKenneth D. Merry Mpi2RaidVol0PhysDisk_t, MPI2_POINTER pMpi2RaidVol0PhysDisk_t; 1745991554f2SKenneth D. Merry 1746991554f2SKenneth D. Merry /* defines for the PhysDiskMap field */ 1747991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_PHYSDISK_PRIMARY (0x01) 1748991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_PHYSDISK_SECONDARY (0x02) 1749991554f2SKenneth D. Merry 1750991554f2SKenneth D. Merry typedef struct _MPI2_RAIDVOL0_SETTINGS 1751991554f2SKenneth D. Merry { 1752991554f2SKenneth D. Merry U16 Settings; /* 0x00 */ 1753991554f2SKenneth D. Merry U8 HotSparePool; /* 0x01 */ 1754991554f2SKenneth D. Merry U8 Reserved; /* 0x02 */ 1755991554f2SKenneth D. Merry } MPI2_RAIDVOL0_SETTINGS, MPI2_POINTER PTR_MPI2_RAIDVOL0_SETTINGS, 1756991554f2SKenneth D. Merry Mpi2RaidVol0Settings_t, MPI2_POINTER pMpi2RaidVol0Settings_t; 1757991554f2SKenneth D. Merry 1758991554f2SKenneth D. Merry /* RAID Volume Page 0 HotSparePool defines, also used in RAID Physical Disk */ 1759991554f2SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_0 (0x01) 1760991554f2SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_1 (0x02) 1761991554f2SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_2 (0x04) 1762991554f2SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_3 (0x08) 1763991554f2SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_4 (0x10) 1764991554f2SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_5 (0x20) 1765991554f2SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_6 (0x40) 1766991554f2SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_7 (0x80) 1767991554f2SKenneth D. Merry 1768991554f2SKenneth D. Merry /* RAID Volume Page 0 VolumeSettings defines */ 1769991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_USE_PRODUCT_ID_SUFFIX (0x0008) 1770991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_AUTO_CONFIG_HSWAP_DISABLE (0x0004) 1771991554f2SKenneth D. Merry 1772991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_MASK_WRITE_CACHING (0x0003) 1773991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_UNCHANGED (0x0000) 1774991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_DISABLE_WRITE_CACHING (0x0001) 1775991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_ENABLE_WRITE_CACHING (0x0002) 1776991554f2SKenneth D. Merry 1777991554f2SKenneth D. Merry /* 1778991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1779991554f2SKenneth D. Merry * one and check the value returned for NumPhysDisks at runtime. 1780991554f2SKenneth D. Merry */ 1781991554f2SKenneth D. Merry #ifndef MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX 1782991554f2SKenneth D. Merry #define MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX (1) 1783991554f2SKenneth D. Merry #endif 1784991554f2SKenneth D. Merry 1785991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RAID_VOL_0 1786991554f2SKenneth D. Merry { 1787991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1788991554f2SKenneth D. Merry U16 DevHandle; /* 0x04 */ 1789991554f2SKenneth D. Merry U8 VolumeState; /* 0x06 */ 1790991554f2SKenneth D. Merry U8 VolumeType; /* 0x07 */ 1791991554f2SKenneth D. Merry U32 VolumeStatusFlags; /* 0x08 */ 1792991554f2SKenneth D. Merry MPI2_RAIDVOL0_SETTINGS VolumeSettings; /* 0x0C */ 1793991554f2SKenneth D. Merry U64 MaxLBA; /* 0x10 */ 1794991554f2SKenneth D. Merry U32 StripeSize; /* 0x18 */ 1795991554f2SKenneth D. Merry U16 BlockSize; /* 0x1C */ 1796991554f2SKenneth D. Merry U16 Reserved1; /* 0x1E */ 1797991554f2SKenneth D. Merry U8 SupportedPhysDisks; /* 0x20 */ 1798991554f2SKenneth D. Merry U8 ResyncRate; /* 0x21 */ 1799991554f2SKenneth D. Merry U16 DataScrubDuration; /* 0x22 */ 1800991554f2SKenneth D. Merry U8 NumPhysDisks; /* 0x24 */ 1801991554f2SKenneth D. Merry U8 Reserved2; /* 0x25 */ 1802991554f2SKenneth D. Merry U8 Reserved3; /* 0x26 */ 1803991554f2SKenneth D. Merry U8 InactiveStatus; /* 0x27 */ 1804991554f2SKenneth D. Merry MPI2_RAIDVOL0_PHYS_DISK PhysDisk[MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX]; /* 0x28 */ 1805991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_RAID_VOL_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_VOL_0, 1806991554f2SKenneth D. Merry Mpi2RaidVolPage0_t, MPI2_POINTER pMpi2RaidVolPage0_t; 1807991554f2SKenneth D. Merry 1808991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_PAGEVERSION (0x0A) 1809991554f2SKenneth D. Merry 1810991554f2SKenneth D. Merry /* values for RAID VolumeState */ 1811991554f2SKenneth D. Merry #define MPI2_RAID_VOL_STATE_MISSING (0x00) 1812991554f2SKenneth D. Merry #define MPI2_RAID_VOL_STATE_FAILED (0x01) 1813991554f2SKenneth D. Merry #define MPI2_RAID_VOL_STATE_INITIALIZING (0x02) 1814991554f2SKenneth D. Merry #define MPI2_RAID_VOL_STATE_ONLINE (0x03) 1815991554f2SKenneth D. Merry #define MPI2_RAID_VOL_STATE_DEGRADED (0x04) 1816991554f2SKenneth D. Merry #define MPI2_RAID_VOL_STATE_OPTIMAL (0x05) 1817991554f2SKenneth D. Merry 1818991554f2SKenneth D. Merry /* values for RAID VolumeType */ 1819991554f2SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_RAID0 (0x00) 1820991554f2SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_RAID1E (0x01) 1821991554f2SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_RAID1 (0x02) 1822991554f2SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_RAID10 (0x05) 1823991554f2SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_UNKNOWN (0xFF) 1824991554f2SKenneth D. Merry 1825991554f2SKenneth D. Merry /* values for RAID Volume Page 0 VolumeStatusFlags field */ 1826991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_PENDING_RESYNC (0x02000000) 1827991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_BACKG_INIT_PENDING (0x01000000) 1828991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_MDC_PENDING (0x00800000) 1829991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_USER_CONSIST_PENDING (0x00400000) 1830991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_MAKE_DATA_CONSISTENT (0x00200000) 1831991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_DATA_SCRUB (0x00100000) 1832991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_CONSISTENCY_CHECK (0x00080000) 1833991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_CAPACITY_EXPANSION (0x00040000) 1834991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_BACKGROUND_INIT (0x00020000) 1835991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS (0x00010000) 1836991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_VOL_NOT_CONSISTENT (0x00000080) 1837991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_OCE_ALLOWED (0x00000040) 1838991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_BGI_COMPLETE (0x00000020) 1839991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_1E_OFFSET_MIRROR (0x00000000) 1840991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_1E_ADJACENT_MIRROR (0x00000010) 1841991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_BAD_BLOCK_TABLE_FULL (0x00000008) 1842991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_VOLUME_INACTIVE (0x00000004) 1843991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_QUIESCED (0x00000002) 1844991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_ENABLED (0x00000001) 1845991554f2SKenneth D. Merry 1846991554f2SKenneth D. Merry /* values for RAID Volume Page 0 SupportedPhysDisks field */ 1847991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SUPPORT_SOLID_STATE_DISKS (0x08) 1848991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SUPPORT_HARD_DISKS (0x04) 1849991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SUPPORT_SAS_PROTOCOL (0x02) 1850991554f2SKenneth D. Merry #define MPI2_RAIDVOL0_SUPPORT_SATA_PROTOCOL (0x01) 1851991554f2SKenneth D. Merry 1852991554f2SKenneth D. Merry /* values for RAID Volume Page 0 InactiveStatus field */ 1853991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_UNKNOWN_INACTIVE (0x00) 1854991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_STALE_METADATA_INACTIVE (0x01) 1855991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_FOREIGN_VOLUME_INACTIVE (0x02) 1856991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_INSUFFICIENT_RESOURCE_INACTIVE (0x03) 1857991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_CLONE_VOLUME_INACTIVE (0x04) 1858991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_INSUFFICIENT_METADATA_INACTIVE (0x05) 1859991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_PREVIOUSLY_DELETED (0x06) 1860991554f2SKenneth D. Merry 1861991554f2SKenneth D. Merry /* RAID Volume Page 1 */ 1862991554f2SKenneth D. Merry 1863991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RAID_VOL_1 1864991554f2SKenneth D. Merry { 1865991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1866991554f2SKenneth D. Merry U16 DevHandle; /* 0x04 */ 1867991554f2SKenneth D. Merry U16 Reserved0; /* 0x06 */ 1868991554f2SKenneth D. Merry U8 GUID[24]; /* 0x08 */ 1869991554f2SKenneth D. Merry U8 Name[16]; /* 0x20 */ 1870991554f2SKenneth D. Merry U64 WWID; /* 0x30 */ 1871991554f2SKenneth D. Merry U32 Reserved1; /* 0x38 */ 1872991554f2SKenneth D. Merry U32 Reserved2; /* 0x3C */ 1873991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_RAID_VOL_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_VOL_1, 1874991554f2SKenneth D. Merry Mpi2RaidVolPage1_t, MPI2_POINTER pMpi2RaidVolPage1_t; 1875991554f2SKenneth D. Merry 1876991554f2SKenneth D. Merry #define MPI2_RAIDVOLPAGE1_PAGEVERSION (0x03) 1877991554f2SKenneth D. Merry 1878991554f2SKenneth D. Merry /**************************************************************************** 1879991554f2SKenneth D. Merry * RAID Physical Disk Config Pages 1880991554f2SKenneth D. Merry ****************************************************************************/ 1881991554f2SKenneth D. Merry 1882991554f2SKenneth D. Merry /* RAID Physical Disk Page 0 */ 1883991554f2SKenneth D. Merry 1884991554f2SKenneth D. Merry typedef struct _MPI2_RAIDPHYSDISK0_SETTINGS 1885991554f2SKenneth D. Merry { 1886991554f2SKenneth D. Merry U16 Reserved1; /* 0x00 */ 1887991554f2SKenneth D. Merry U8 HotSparePool; /* 0x02 */ 1888991554f2SKenneth D. Merry U8 Reserved2; /* 0x03 */ 1889991554f2SKenneth D. Merry } MPI2_RAIDPHYSDISK0_SETTINGS, MPI2_POINTER PTR_MPI2_RAIDPHYSDISK0_SETTINGS, 1890991554f2SKenneth D. Merry Mpi2RaidPhysDisk0Settings_t, MPI2_POINTER pMpi2RaidPhysDisk0Settings_t; 1891991554f2SKenneth D. Merry 1892991554f2SKenneth D. Merry /* use MPI2_RAID_HOT_SPARE_POOL_ defines for the HotSparePool field */ 1893991554f2SKenneth D. Merry 1894991554f2SKenneth D. Merry typedef struct _MPI2_RAIDPHYSDISK0_INQUIRY_DATA 1895991554f2SKenneth D. Merry { 1896991554f2SKenneth D. Merry U8 VendorID[8]; /* 0x00 */ 1897991554f2SKenneth D. Merry U8 ProductID[16]; /* 0x08 */ 1898991554f2SKenneth D. Merry U8 ProductRevLevel[4]; /* 0x18 */ 1899991554f2SKenneth D. Merry U8 SerialNum[32]; /* 0x1C */ 1900991554f2SKenneth D. Merry } MPI2_RAIDPHYSDISK0_INQUIRY_DATA, 1901991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_RAIDPHYSDISK0_INQUIRY_DATA, 1902991554f2SKenneth D. Merry Mpi2RaidPhysDisk0InquiryData_t, MPI2_POINTER pMpi2RaidPhysDisk0InquiryData_t; 1903991554f2SKenneth D. Merry 1904991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_0 1905991554f2SKenneth D. Merry { 1906991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1907991554f2SKenneth D. Merry U16 DevHandle; /* 0x04 */ 1908991554f2SKenneth D. Merry U8 Reserved1; /* 0x06 */ 1909991554f2SKenneth D. Merry U8 PhysDiskNum; /* 0x07 */ 1910991554f2SKenneth D. Merry MPI2_RAIDPHYSDISK0_SETTINGS PhysDiskSettings; /* 0x08 */ 1911991554f2SKenneth D. Merry U32 Reserved2; /* 0x0C */ 1912991554f2SKenneth D. Merry MPI2_RAIDPHYSDISK0_INQUIRY_DATA InquiryData; /* 0x10 */ 1913991554f2SKenneth D. Merry U32 Reserved3; /* 0x4C */ 1914991554f2SKenneth D. Merry U8 PhysDiskState; /* 0x50 */ 1915991554f2SKenneth D. Merry U8 OfflineReason; /* 0x51 */ 1916991554f2SKenneth D. Merry U8 IncompatibleReason; /* 0x52 */ 1917991554f2SKenneth D. Merry U8 PhysDiskAttributes; /* 0x53 */ 1918991554f2SKenneth D. Merry U32 PhysDiskStatusFlags; /* 0x54 */ 1919991554f2SKenneth D. Merry U64 DeviceMaxLBA; /* 0x58 */ 1920991554f2SKenneth D. Merry U64 HostMaxLBA; /* 0x60 */ 1921991554f2SKenneth D. Merry U64 CoercedMaxLBA; /* 0x68 */ 1922991554f2SKenneth D. Merry U16 BlockSize; /* 0x70 */ 1923991554f2SKenneth D. Merry U16 Reserved5; /* 0x72 */ 1924991554f2SKenneth D. Merry U32 Reserved6; /* 0x74 */ 1925991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_RD_PDISK_0, 1926991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RD_PDISK_0, 1927991554f2SKenneth D. Merry Mpi2RaidPhysDiskPage0_t, MPI2_POINTER pMpi2RaidPhysDiskPage0_t; 1928991554f2SKenneth D. Merry 1929991554f2SKenneth D. Merry #define MPI2_RAIDPHYSDISKPAGE0_PAGEVERSION (0x05) 1930991554f2SKenneth D. Merry 1931991554f2SKenneth D. Merry /* PhysDiskState defines */ 1932991554f2SKenneth D. Merry #define MPI2_RAID_PD_STATE_NOT_CONFIGURED (0x00) 1933991554f2SKenneth D. Merry #define MPI2_RAID_PD_STATE_NOT_COMPATIBLE (0x01) 1934991554f2SKenneth D. Merry #define MPI2_RAID_PD_STATE_OFFLINE (0x02) 1935991554f2SKenneth D. Merry #define MPI2_RAID_PD_STATE_ONLINE (0x03) 1936991554f2SKenneth D. Merry #define MPI2_RAID_PD_STATE_HOT_SPARE (0x04) 1937991554f2SKenneth D. Merry #define MPI2_RAID_PD_STATE_DEGRADED (0x05) 1938991554f2SKenneth D. Merry #define MPI2_RAID_PD_STATE_REBUILDING (0x06) 1939991554f2SKenneth D. Merry #define MPI2_RAID_PD_STATE_OPTIMAL (0x07) 1940991554f2SKenneth D. Merry 1941991554f2SKenneth D. Merry /* OfflineReason defines */ 1942991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_ONLINE (0x00) 1943991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_MISSING (0x01) 1944991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_FAILED (0x03) 1945991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_INITIALIZING (0x04) 1946991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_REQUESTED (0x05) 1947991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_FAILED_REQUESTED (0x06) 1948991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_OTHER (0xFF) 1949991554f2SKenneth D. Merry 1950991554f2SKenneth D. Merry /* IncompatibleReason defines */ 1951991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_COMPATIBLE (0x00) 1952991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_PROTOCOL (0x01) 1953991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_BLOCKSIZE (0x02) 1954991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_MAX_LBA (0x03) 1955991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_SATA_EXTENDED_CMD (0x04) 1956991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_REMOVEABLE_MEDIA (0x05) 1957991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_MEDIA_TYPE (0x06) 1958991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_UNKNOWN (0xFF) 1959991554f2SKenneth D. Merry 1960991554f2SKenneth D. Merry /* PhysDiskAttributes defines */ 1961991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_MEDIA_MASK (0x0C) 1962991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_SOLID_STATE_DRIVE (0x08) 1963991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_HARD_DISK_DRIVE (0x04) 1964991554f2SKenneth D. Merry 1965991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_PROTOCOL_MASK (0x03) 1966991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_SAS_PROTOCOL (0x02) 1967991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_SATA_PROTOCOL (0x01) 1968991554f2SKenneth D. Merry 1969991554f2SKenneth D. Merry /* PhysDiskStatusFlags defines */ 1970991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_NOT_CERTIFIED (0x00000040) 1971991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_OCE_TARGET (0x00000020) 1972991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_WRITE_CACHE_ENABLED (0x00000010) 1973991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_OPTIMAL_PREVIOUS (0x00000000) 1974991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_NOT_OPTIMAL_PREVIOUS (0x00000008) 1975991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_INACTIVE_VOLUME (0x00000004) 1976991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_QUIESCED (0x00000002) 1977991554f2SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC (0x00000001) 1978991554f2SKenneth D. Merry 1979991554f2SKenneth D. Merry /* RAID Physical Disk Page 1 */ 1980991554f2SKenneth D. Merry 1981991554f2SKenneth D. Merry /* 1982991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1983991554f2SKenneth D. Merry * one and check the value returned for NumPhysDiskPaths at runtime. 1984991554f2SKenneth D. Merry */ 1985991554f2SKenneth D. Merry #ifndef MPI2_RAID_PHYS_DISK1_PATH_MAX 1986991554f2SKenneth D. Merry #define MPI2_RAID_PHYS_DISK1_PATH_MAX (1) 1987991554f2SKenneth D. Merry #endif 1988991554f2SKenneth D. Merry 1989991554f2SKenneth D. Merry typedef struct _MPI2_RAIDPHYSDISK1_PATH 1990991554f2SKenneth D. Merry { 1991991554f2SKenneth D. Merry U16 DevHandle; /* 0x00 */ 1992991554f2SKenneth D. Merry U16 Reserved1; /* 0x02 */ 1993991554f2SKenneth D. Merry U64 WWID; /* 0x04 */ 1994991554f2SKenneth D. Merry U64 OwnerWWID; /* 0x0C */ 1995991554f2SKenneth D. Merry U8 OwnerIdentifier; /* 0x14 */ 1996991554f2SKenneth D. Merry U8 Reserved2; /* 0x15 */ 1997991554f2SKenneth D. Merry U16 Flags; /* 0x16 */ 1998991554f2SKenneth D. Merry } MPI2_RAIDPHYSDISK1_PATH, MPI2_POINTER PTR_MPI2_RAIDPHYSDISK1_PATH, 1999991554f2SKenneth D. Merry Mpi2RaidPhysDisk1Path_t, MPI2_POINTER pMpi2RaidPhysDisk1Path_t; 2000991554f2SKenneth D. Merry 2001991554f2SKenneth D. Merry /* RAID Physical Disk Page 1 Physical Disk Path Flags field defines */ 2002991554f2SKenneth D. Merry #define MPI2_RAID_PHYSDISK1_FLAG_PRIMARY (0x0004) 2003991554f2SKenneth D. Merry #define MPI2_RAID_PHYSDISK1_FLAG_BROKEN (0x0002) 2004991554f2SKenneth D. Merry #define MPI2_RAID_PHYSDISK1_FLAG_INVALID (0x0001) 2005991554f2SKenneth D. Merry 2006991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_1 2007991554f2SKenneth D. Merry { 2008991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 2009991554f2SKenneth D. Merry U8 NumPhysDiskPaths; /* 0x04 */ 2010991554f2SKenneth D. Merry U8 PhysDiskNum; /* 0x05 */ 2011991554f2SKenneth D. Merry U16 Reserved1; /* 0x06 */ 2012991554f2SKenneth D. Merry U32 Reserved2; /* 0x08 */ 2013991554f2SKenneth D. Merry MPI2_RAIDPHYSDISK1_PATH PhysicalDiskPath[MPI2_RAID_PHYS_DISK1_PATH_MAX];/* 0x0C */ 2014991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_RD_PDISK_1, 2015991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RD_PDISK_1, 2016991554f2SKenneth D. Merry Mpi2RaidPhysDiskPage1_t, MPI2_POINTER pMpi2RaidPhysDiskPage1_t; 2017991554f2SKenneth D. Merry 2018991554f2SKenneth D. Merry #define MPI2_RAIDPHYSDISKPAGE1_PAGEVERSION (0x02) 2019991554f2SKenneth D. Merry 2020991554f2SKenneth D. Merry /**************************************************************************** 2021991554f2SKenneth D. Merry * values for fields used by several types of SAS Config Pages 2022991554f2SKenneth D. Merry ****************************************************************************/ 2023991554f2SKenneth D. Merry 2024991554f2SKenneth D. Merry /* values for NegotiatedLinkRates fields */ 2025991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_MASK_LOGICAL (0xF0) 2026991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_SHIFT_LOGICAL (4) 2027991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_MASK_PHYSICAL (0x0F) 2028991554f2SKenneth D. Merry /* link rates used for Negotiated Physical and Logical Link Rate */ 2029991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_UNKNOWN_LINK_RATE (0x00) 2030991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_PHY_DISABLED (0x01) 2031991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_NEGOTIATION_FAILED (0x02) 2032991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_SATA_OOB_COMPLETE (0x03) 2033991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_PORT_SELECTOR (0x04) 2034991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_SMP_RESET_IN_PROGRESS (0x05) 2035991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_UNSUPPORTED_PHY (0x06) 2036991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_1_5 (0x08) 2037991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_3_0 (0x09) 2038991554f2SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_6_0 (0x0A) 2039991554f2SKenneth D. Merry #define MPI25_SAS_NEG_LINK_RATE_12_0 (0x0B) 204067feec50SStephen McConnell #define MPI26_SAS_NEG_LINK_RATE_22_5 (0x0C) 2041991554f2SKenneth D. Merry 2042991554f2SKenneth D. Merry /* values for AttachedPhyInfo fields */ 2043991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_INSIDE_ZPSDS_PERSISTENT (0x00000040) 2044991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REQUESTED_INSIDE_ZPSDS (0x00000020) 2045991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_BREAK_REPLY_CAPABLE (0x00000010) 2046991554f2SKenneth D. Merry 2047991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_MASK (0x0000000F) 2048991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_UNKNOWN (0x00000000) 2049991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_POWER_ON (0x00000001) 2050991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_HARD_RESET (0x00000002) 2051991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_SMP_PHY_CONTROL (0x00000003) 2052991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_LOSS_OF_SYNC (0x00000004) 2053991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_MULTIPLEXING_SEQ (0x00000005) 2054991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_IT_NEXUS_LOSS_TIMER (0x00000006) 2055991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_BREAK_TIMEOUT (0x00000007) 2056991554f2SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_PHY_TEST_STOPPED (0x00000008) 2057991554f2SKenneth D. Merry 2058991554f2SKenneth D. Merry /* values for PhyInfo fields */ 2059991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_VACANT (0x80000000) 2060991554f2SKenneth D. Merry 2061991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_POWER_CONDITION_MASK (0x18000000) 2062991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_SHIFT_PHY_POWER_CONDITION (27) 2063991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_POWER_ACTIVE (0x00000000) 2064991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_POWER_PARTIAL (0x08000000) 2065991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_POWER_SLUMBER (0x10000000) 2066991554f2SKenneth D. Merry 2067991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_CHANGED_REQ_INSIDE_ZPSDS (0x04000000) 2068991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_INSIDE_ZPSDS_PERSISTENT (0x02000000) 2069991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REQ_INSIDE_ZPSDS (0x01000000) 2070991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_ZONE_GROUP_PERSISTENT (0x00400000) 2071991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_INSIDE_ZPSDS (0x00200000) 2072991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_ZONING_ENABLED (0x00100000) 2073991554f2SKenneth D. Merry 2074991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_MASK (0x000F0000) 2075991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_UNKNOWN (0x00000000) 2076991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_POWER_ON (0x00010000) 2077991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_HARD_RESET (0x00020000) 2078991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_SMP_PHY_CONTROL (0x00030000) 2079991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_LOSS_OF_SYNC (0x00040000) 2080991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_MULTIPLEXING_SEQ (0x00050000) 2081991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_IT_NEXUS_LOSS_TIMER (0x00060000) 2082991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_BREAK_TIMEOUT (0x00070000) 2083991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_PHY_TEST_STOPPED (0x00080000) 2084991554f2SKenneth D. Merry 2085991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_MULTIPLEXING_SUPPORTED (0x00008000) 2086991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_SATA_PORT_ACTIVE (0x00004000) 2087991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_SATA_PORT_SELECTOR_PRESENT (0x00002000) 2088991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_VIRTUAL_PHY (0x00001000) 2089991554f2SKenneth D. Merry 2090991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_MASK_PARTIAL_PATHWAY_TIME (0x00000F00) 2091991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_SHIFT_PARTIAL_PATHWAY_TIME (8) 2092991554f2SKenneth D. Merry 2093991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_MASK_ROUTING_ATTRIBUTE (0x000000F0) 2094991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_DIRECT_ROUTING (0x00000000) 2095991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_SUBTRACTIVE_ROUTING (0x00000010) 2096991554f2SKenneth D. Merry #define MPI2_SAS_PHYINFO_TABLE_ROUTING (0x00000020) 2097991554f2SKenneth D. Merry 2098991554f2SKenneth D. Merry /* values for SAS ProgrammedLinkRate fields */ 2099991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_MASK (0xF0) 2100991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_NOT_PROGRAMMABLE (0x00) 2101991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_1_5 (0x80) 2102991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_3_0 (0x90) 2103991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_6_0 (0xA0) 2104991554f2SKenneth D. Merry #define MPI25_SAS_PRATE_MAX_RATE_12_0 (0xB0) 210567feec50SStephen McConnell #define MPI26_SAS_PRATE_MAX_RATE_22_5 (0xC0) 2106991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_MASK (0x0F) 2107991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_NOT_PROGRAMMABLE (0x00) 2108991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_1_5 (0x08) 2109991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_3_0 (0x09) 2110991554f2SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_6_0 (0x0A) 2111991554f2SKenneth D. Merry #define MPI25_SAS_PRATE_MIN_RATE_12_0 (0x0B) 211267feec50SStephen McConnell #define MPI26_SAS_PRATE_MIN_RATE_22_5 (0x0C) 2113991554f2SKenneth D. Merry 2114991554f2SKenneth D. Merry /* values for SAS HwLinkRate fields */ 2115991554f2SKenneth D. Merry #define MPI2_SAS_HWRATE_MAX_RATE_MASK (0xF0) 2116991554f2SKenneth D. Merry #define MPI2_SAS_HWRATE_MAX_RATE_1_5 (0x80) 2117991554f2SKenneth D. Merry #define MPI2_SAS_HWRATE_MAX_RATE_3_0 (0x90) 2118991554f2SKenneth D. Merry #define MPI2_SAS_HWRATE_MAX_RATE_6_0 (0xA0) 2119991554f2SKenneth D. Merry #define MPI25_SAS_HWRATE_MAX_RATE_12_0 (0xB0) 212067feec50SStephen McConnell #define MPI26_SAS_HWRATE_MAX_RATE_22_5 (0xC0) 2121991554f2SKenneth D. Merry #define MPI2_SAS_HWRATE_MIN_RATE_MASK (0x0F) 2122991554f2SKenneth D. Merry #define MPI2_SAS_HWRATE_MIN_RATE_1_5 (0x08) 2123991554f2SKenneth D. Merry #define MPI2_SAS_HWRATE_MIN_RATE_3_0 (0x09) 2124991554f2SKenneth D. Merry #define MPI2_SAS_HWRATE_MIN_RATE_6_0 (0x0A) 2125991554f2SKenneth D. Merry #define MPI25_SAS_HWRATE_MIN_RATE_12_0 (0x0B) 212667feec50SStephen McConnell #define MPI26_SAS_HWRATE_MIN_RATE_22_5 (0x0C) 2127991554f2SKenneth D. Merry 2128991554f2SKenneth D. Merry /**************************************************************************** 2129991554f2SKenneth D. Merry * SAS IO Unit Config Pages 2130991554f2SKenneth D. Merry ****************************************************************************/ 2131991554f2SKenneth D. Merry 2132991554f2SKenneth D. Merry /* SAS IO Unit Page 0 */ 2133991554f2SKenneth D. Merry 2134991554f2SKenneth D. Merry typedef struct _MPI2_SAS_IO_UNIT0_PHY_DATA 2135991554f2SKenneth D. Merry { 2136991554f2SKenneth D. Merry U8 Port; /* 0x00 */ 2137991554f2SKenneth D. Merry U8 PortFlags; /* 0x01 */ 2138991554f2SKenneth D. Merry U8 PhyFlags; /* 0x02 */ 2139991554f2SKenneth D. Merry U8 NegotiatedLinkRate; /* 0x03 */ 2140991554f2SKenneth D. Merry U32 ControllerPhyDeviceInfo;/* 0x04 */ 2141991554f2SKenneth D. Merry U16 AttachedDevHandle; /* 0x08 */ 2142991554f2SKenneth D. Merry U16 ControllerDevHandle; /* 0x0A */ 2143991554f2SKenneth D. Merry U32 DiscoveryStatus; /* 0x0C */ 2144991554f2SKenneth D. Merry U32 Reserved; /* 0x10 */ 2145991554f2SKenneth D. Merry } MPI2_SAS_IO_UNIT0_PHY_DATA, MPI2_POINTER PTR_MPI2_SAS_IO_UNIT0_PHY_DATA, 2146991554f2SKenneth D. Merry Mpi2SasIOUnit0PhyData_t, MPI2_POINTER pMpi2SasIOUnit0PhyData_t; 2147991554f2SKenneth D. Merry 2148991554f2SKenneth D. Merry /* 2149991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2150991554f2SKenneth D. Merry * one and check the value returned for NumPhys at runtime. 2151991554f2SKenneth D. Merry */ 2152991554f2SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT0_PHY_MAX 2153991554f2SKenneth D. Merry #define MPI2_SAS_IOUNIT0_PHY_MAX (1) 2154991554f2SKenneth D. Merry #endif 2155991554f2SKenneth D. Merry 2156991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_0 2157991554f2SKenneth D. Merry { 2158991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2159991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2160991554f2SKenneth D. Merry U8 NumPhys; /* 0x0C */ 2161991554f2SKenneth D. Merry U8 Reserved2; /* 0x0D */ 2162991554f2SKenneth D. Merry U16 Reserved3; /* 0x0E */ 2163991554f2SKenneth D. Merry MPI2_SAS_IO_UNIT0_PHY_DATA PhyData[MPI2_SAS_IOUNIT0_PHY_MAX]; /* 0x10 */ 2164991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_0, 2165991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_0, 2166991554f2SKenneth D. Merry Mpi2SasIOUnitPage0_t, MPI2_POINTER pMpi2SasIOUnitPage0_t; 2167991554f2SKenneth D. Merry 2168991554f2SKenneth D. Merry #define MPI2_SASIOUNITPAGE0_PAGEVERSION (0x05) 2169991554f2SKenneth D. Merry 2170991554f2SKenneth D. Merry /* values for SAS IO Unit Page 0 PortFlags */ 2171991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_PORTFLAGS_DISCOVERY_IN_PROGRESS (0x08) 2172991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG (0x01) 2173991554f2SKenneth D. Merry 2174991554f2SKenneth D. Merry /* values for SAS IO Unit Page 0 PhyFlags */ 217528ae62b0SStephen McConnell #define MPI2_SASIOUNIT0_PHYFLAGS_INIT_PERSIST_CONNECT (0x40) 217628ae62b0SStephen McConnell #define MPI2_SASIOUNIT0_PHYFLAGS_TARG_PERSIST_CONNECT (0x20) 2177991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_PHYFLAGS_ZONING_ENABLED (0x10) 2178991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_PHYFLAGS_PHY_DISABLED (0x08) 2179991554f2SKenneth D. Merry 2180991554f2SKenneth D. Merry /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 2181991554f2SKenneth D. Merry 2182991554f2SKenneth D. Merry /* see mpi2_sas.h for values for SAS IO Unit Page 0 ControllerPhyDeviceInfo values */ 2183991554f2SKenneth D. Merry 2184991554f2SKenneth D. Merry /* values for SAS IO Unit Page 0 DiscoveryStatus */ 2185991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 2186991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MAX_EXPANDERS_EXCEED (0x40000000) 2187991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MAX_DEVICES_EXCEED (0x20000000) 2188991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 2189991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_DOWNSTREAM_INITIATOR (0x08000000) 2190991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 2191991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 2192991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MULTI_PORT_DOMAIN (0x00002000) 2193991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 2194991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_UNSUPPORTED_DEVICE (0x00000800) 2195991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_TABLE_LINK (0x00000400) 2196991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_SUBTRACTIVE_LINK (0x00000200) 2197991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_SMP_CRC_ERROR (0x00000100) 2198991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_SMP_FUNCTION_FAILED (0x00000080) 2199991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_INDEX_NOT_EXIST (0x00000040) 2200991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_OUT_ROUTE_ENTRIES (0x00000020) 2201991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_SMP_TIMEOUT (0x00000010) 2202991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MULTIPLE_PORTS (0x00000004) 2203991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_UNADDRESSABLE_DEVICE (0x00000002) 2204991554f2SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_LOOP_DETECTED (0x00000001) 2205991554f2SKenneth D. Merry 2206991554f2SKenneth D. Merry /* SAS IO Unit Page 1 */ 2207991554f2SKenneth D. Merry 2208991554f2SKenneth D. Merry typedef struct _MPI2_SAS_IO_UNIT1_PHY_DATA 2209991554f2SKenneth D. Merry { 2210991554f2SKenneth D. Merry U8 Port; /* 0x00 */ 2211991554f2SKenneth D. Merry U8 PortFlags; /* 0x01 */ 2212991554f2SKenneth D. Merry U8 PhyFlags; /* 0x02 */ 2213991554f2SKenneth D. Merry U8 MaxMinLinkRate; /* 0x03 */ 2214991554f2SKenneth D. Merry U32 ControllerPhyDeviceInfo; /* 0x04 */ 2215991554f2SKenneth D. Merry U16 MaxTargetPortConnectTime; /* 0x08 */ 2216991554f2SKenneth D. Merry U16 Reserved1; /* 0x0A */ 2217991554f2SKenneth D. Merry } MPI2_SAS_IO_UNIT1_PHY_DATA, MPI2_POINTER PTR_MPI2_SAS_IO_UNIT1_PHY_DATA, 2218991554f2SKenneth D. Merry Mpi2SasIOUnit1PhyData_t, MPI2_POINTER pMpi2SasIOUnit1PhyData_t; 2219991554f2SKenneth D. Merry 2220991554f2SKenneth D. Merry /* 2221991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2222991554f2SKenneth D. Merry * one and check the value returned for NumPhys at runtime. 2223991554f2SKenneth D. Merry */ 2224991554f2SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT1_PHY_MAX 2225991554f2SKenneth D. Merry #define MPI2_SAS_IOUNIT1_PHY_MAX (1) 2226991554f2SKenneth D. Merry #endif 2227991554f2SKenneth D. Merry 2228991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_1 2229991554f2SKenneth D. Merry { 2230991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2231991554f2SKenneth D. Merry U16 ControlFlags; /* 0x08 */ 2232991554f2SKenneth D. Merry U16 SASNarrowMaxQueueDepth; /* 0x0A */ 2233991554f2SKenneth D. Merry U16 AdditionalControlFlags; /* 0x0C */ 2234991554f2SKenneth D. Merry U16 SASWideMaxQueueDepth; /* 0x0E */ 2235991554f2SKenneth D. Merry U8 NumPhys; /* 0x10 */ 2236991554f2SKenneth D. Merry U8 SATAMaxQDepth; /* 0x11 */ 2237991554f2SKenneth D. Merry U8 ReportDeviceMissingDelay; /* 0x12 */ 2238991554f2SKenneth D. Merry U8 IODeviceMissingDelay; /* 0x13 */ 2239991554f2SKenneth D. Merry MPI2_SAS_IO_UNIT1_PHY_DATA PhyData[MPI2_SAS_IOUNIT1_PHY_MAX]; /* 0x14 */ 2240991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_1, 2241991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_1, 2242991554f2SKenneth D. Merry Mpi2SasIOUnitPage1_t, MPI2_POINTER pMpi2SasIOUnitPage1_t; 2243991554f2SKenneth D. Merry 2244991554f2SKenneth D. Merry #define MPI2_SASIOUNITPAGE1_PAGEVERSION (0x09) 2245991554f2SKenneth D. Merry 2246991554f2SKenneth D. Merry /* values for SAS IO Unit Page 1 ControlFlags */ 2247991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_DEVICE_SELF_TEST (0x8000) 2248991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_3_0_MAX (0x4000) 2249991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_1_5_MAX (0x2000) /* MPI v2.0 only. Obsolete in MPI v2.5 and later. */ 2250991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_SW_PRESERVE (0x1000) 2251991554f2SKenneth D. Merry 2252991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_MASK_DEV_SUPPORT (0x0600) 2253991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SHIFT_DEV_SUPPORT (9) 2254991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_DEV_SUPPORT_BOTH (0x0) 2255991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_DEV_SAS_SUPPORT (0x1) 2256991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_DEV_SATA_SUPPORT (0x2) 2257991554f2SKenneth D. Merry 2258991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_48BIT_LBA_REQUIRED (0x0080) 2259991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_SMART_REQUIRED (0x0040) 2260991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_NCQ_REQUIRED (0x0020) 2261991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_FUA_REQUIRED (0x0010) 2262991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_TABLE_SUBTRACTIVE_ILLEGAL (0x0008) 2263991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SUBTRACTIVE_ILLEGAL (0x0004) 2264991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_FIRST_LVL_DISC_ONLY (0x0002) 2265991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_CLEAR_AFFILIATION (0x0001) /* MPI v2.0 only. Obsolete in MPI v2.5 and later. */ 2266991554f2SKenneth D. Merry 2267991554f2SKenneth D. Merry /* values for SAS IO Unit Page 1 AdditionalControlFlags */ 226828ae62b0SStephen McConnell #define MPI2_SASIOUNIT1_ACONTROL_DA_PERSIST_CONNECT (0x0100) 2269991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_MULTI_PORT_DOMAIN_ILLEGAL (0x0080) 2270991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_SATA_ASYNCHROUNOUS_NOTIFICATION (0x0040) 2271991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_INVALID_TOPOLOGY_CORRECTION (0x0020) 2272991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_PORT_ENABLE_ONLY_SATA_LINK_RESET (0x0010) 2273991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_OTHER_AFFILIATION_SATA_LINK_RESET (0x0008) 2274991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_SELF_AFFILIATION_SATA_LINK_RESET (0x0004) 2275991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_NO_AFFILIATION_SATA_LINK_RESET (0x0002) 2276991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_ALLOW_TABLE_TO_TABLE (0x0001) 2277991554f2SKenneth D. Merry 2278991554f2SKenneth D. Merry /* defines for SAS IO Unit Page 1 ReportDeviceMissingDelay */ 2279991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_REPORT_MISSING_TIMEOUT_MASK (0x7F) 2280991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_REPORT_MISSING_UNIT_16 (0x80) 2281991554f2SKenneth D. Merry 2282991554f2SKenneth D. Merry /* values for SAS IO Unit Page 1 PortFlags */ 2283991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_PORT_FLAGS_AUTO_PORT_CONFIG (0x01) 2284991554f2SKenneth D. Merry 2285991554f2SKenneth D. Merry /* values for SAS IO Unit Page 1 PhyFlags */ 228628ae62b0SStephen McConnell #define MPI2_SASIOUNIT1_PHYFLAGS_INIT_PERSIST_CONNECT (0x40) 228728ae62b0SStephen McConnell #define MPI2_SASIOUNIT1_PHYFLAGS_TARG_PERSIST_CONNECT (0x20) 2288991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_PHYFLAGS_ZONING_ENABLE (0x10) 2289991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_PHYFLAGS_PHY_DISABLE (0x08) 2290991554f2SKenneth D. Merry 2291991554f2SKenneth D. Merry /* values for SAS IO Unit Page 1 MaxMinLinkRate */ 2292991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_MAX_RATE_MASK (0xF0) 2293991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_MAX_RATE_1_5 (0x80) 2294991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_MAX_RATE_3_0 (0x90) 2295991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_MAX_RATE_6_0 (0xA0) 2296991554f2SKenneth D. Merry #define MPI25_SASIOUNIT1_MAX_RATE_12_0 (0xB0) 229767feec50SStephen McConnell #define MPI26_SASIOUNIT1_MAX_RATE_22_5 (0xC0) 2298991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_MIN_RATE_MASK (0x0F) 2299991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_MIN_RATE_1_5 (0x08) 2300991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_MIN_RATE_3_0 (0x09) 2301991554f2SKenneth D. Merry #define MPI2_SASIOUNIT1_MIN_RATE_6_0 (0x0A) 2302991554f2SKenneth D. Merry #define MPI25_SASIOUNIT1_MIN_RATE_12_0 (0x0B) 230367feec50SStephen McConnell #define MPI26_SASIOUNIT1_MIN_RATE_22_5 (0x0C) 2304991554f2SKenneth D. Merry 2305991554f2SKenneth D. Merry /* see mpi2_sas.h for values for SAS IO Unit Page 1 ControllerPhyDeviceInfo values */ 2306991554f2SKenneth D. Merry 230728ae62b0SStephen McConnell /* SAS IO Unit Page 4 (for MPI v2.5 and earlier) */ 2308991554f2SKenneth D. Merry 2309991554f2SKenneth D. Merry typedef struct _MPI2_SAS_IOUNIT4_SPINUP_GROUP 2310991554f2SKenneth D. Merry { 2311991554f2SKenneth D. Merry U8 MaxTargetSpinup; /* 0x00 */ 2312991554f2SKenneth D. Merry U8 SpinupDelay; /* 0x01 */ 2313991554f2SKenneth D. Merry U8 SpinupFlags; /* 0x02 */ 2314991554f2SKenneth D. Merry U8 Reserved1; /* 0x03 */ 2315991554f2SKenneth D. Merry } MPI2_SAS_IOUNIT4_SPINUP_GROUP, MPI2_POINTER PTR_MPI2_SAS_IOUNIT4_SPINUP_GROUP, 2316991554f2SKenneth D. Merry Mpi2SasIOUnit4SpinupGroup_t, MPI2_POINTER pMpi2SasIOUnit4SpinupGroup_t; 2317991554f2SKenneth D. Merry 2318991554f2SKenneth D. Merry /* defines for SAS IO Unit Page 4 SpinupFlags */ 2319991554f2SKenneth D. Merry #define MPI2_SASIOUNIT4_SPINUP_DISABLE_FLAG (0x01) 2320991554f2SKenneth D. Merry 2321991554f2SKenneth D. Merry /* 2322991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2323991554f2SKenneth D. Merry * one and check the value returned for NumPhys at runtime. 2324991554f2SKenneth D. Merry */ 2325991554f2SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT4_PHY_MAX 2326991554f2SKenneth D. Merry #define MPI2_SAS_IOUNIT4_PHY_MAX (4) 2327991554f2SKenneth D. Merry #endif 2328991554f2SKenneth D. Merry 2329991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_4 2330991554f2SKenneth D. Merry { 2331991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2332991554f2SKenneth D. Merry MPI2_SAS_IOUNIT4_SPINUP_GROUP SpinupGroupParameters[4]; /* 0x08 */ 2333991554f2SKenneth D. Merry U32 Reserved1; /* 0x18 */ 2334991554f2SKenneth D. Merry U32 Reserved2; /* 0x1C */ 2335991554f2SKenneth D. Merry U32 Reserved3; /* 0x20 */ 2336991554f2SKenneth D. Merry U8 BootDeviceWaitTime; /* 0x24 */ 233728ae62b0SStephen McConnell U8 SATADeviceWaitTime; /* 0x25 */ 2338991554f2SKenneth D. Merry U16 Reserved5; /* 0x26 */ 2339991554f2SKenneth D. Merry U8 NumPhys; /* 0x28 */ 2340991554f2SKenneth D. Merry U8 PEInitialSpinupDelay; /* 0x29 */ 2341991554f2SKenneth D. Merry U8 PEReplyDelay; /* 0x2A */ 2342991554f2SKenneth D. Merry U8 Flags; /* 0x2B */ 2343991554f2SKenneth D. Merry U8 PHY[MPI2_SAS_IOUNIT4_PHY_MAX]; /* 0x2C */ 2344991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_4, 2345991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_4, 2346991554f2SKenneth D. Merry Mpi2SasIOUnitPage4_t, MPI2_POINTER pMpi2SasIOUnitPage4_t; 2347991554f2SKenneth D. Merry 2348991554f2SKenneth D. Merry #define MPI2_SASIOUNITPAGE4_PAGEVERSION (0x02) 2349991554f2SKenneth D. Merry 2350991554f2SKenneth D. Merry /* defines for Flags field */ 2351991554f2SKenneth D. Merry #define MPI2_SASIOUNIT4_FLAGS_AUTO_PORTENABLE (0x01) 2352991554f2SKenneth D. Merry 2353991554f2SKenneth D. Merry /* defines for PHY field */ 2354991554f2SKenneth D. Merry #define MPI2_SASIOUNIT4_PHY_SPINUP_GROUP_MASK (0x03) 2355991554f2SKenneth D. Merry 2356991554f2SKenneth D. Merry /* SAS IO Unit Page 5 */ 2357991554f2SKenneth D. Merry 2358991554f2SKenneth D. Merry typedef struct _MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS 2359991554f2SKenneth D. Merry { 2360991554f2SKenneth D. Merry U8 ControlFlags; /* 0x00 */ 2361991554f2SKenneth D. Merry U8 PortWidthModGroup; /* 0x01 */ 2362991554f2SKenneth D. Merry U16 InactivityTimerExponent; /* 0x02 */ 2363991554f2SKenneth D. Merry U8 SATAPartialTimeout; /* 0x04 */ 2364991554f2SKenneth D. Merry U8 Reserved2; /* 0x05 */ 2365991554f2SKenneth D. Merry U8 SATASlumberTimeout; /* 0x06 */ 2366991554f2SKenneth D. Merry U8 Reserved3; /* 0x07 */ 2367991554f2SKenneth D. Merry U8 SASPartialTimeout; /* 0x08 */ 2368991554f2SKenneth D. Merry U8 Reserved4; /* 0x09 */ 2369991554f2SKenneth D. Merry U8 SASSlumberTimeout; /* 0x0A */ 2370991554f2SKenneth D. Merry U8 Reserved5; /* 0x0B */ 2371991554f2SKenneth D. Merry } MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS, 2372991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS, 2373991554f2SKenneth D. Merry Mpi2SasIOUnit5PhyPmSettings_t, MPI2_POINTER pMpi2SasIOUnit5PhyPmSettings_t; 2374991554f2SKenneth D. Merry 2375991554f2SKenneth D. Merry /* defines for ControlFlags field */ 2376991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_CONTROL_SAS_SLUMBER_ENABLE (0x08) 2377991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_CONTROL_SAS_PARTIAL_ENABLE (0x04) 2378991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_CONTROL_SATA_SLUMBER_ENABLE (0x02) 2379991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_CONTROL_SATA_PARTIAL_ENABLE (0x01) 2380991554f2SKenneth D. Merry 2381991554f2SKenneth D. Merry /* defines for PortWidthModeGroup field */ 2382991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_PWMG_DISABLE (0xFF) 2383991554f2SKenneth D. Merry 2384991554f2SKenneth D. Merry /* defines for InactivityTimerExponent field */ 2385991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_MASK_SAS_SLUMBER (0x7000) 2386991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_SHIFT_SAS_SLUMBER (12) 2387991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_MASK_SAS_PARTIAL (0x0700) 2388991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_SHIFT_SAS_PARTIAL (8) 2389991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_MASK_SATA_SLUMBER (0x0070) 2390991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_SHIFT_SATA_SLUMBER (4) 2391991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_MASK_SATA_PARTIAL (0x0007) 2392991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_SHIFT_SATA_PARTIAL (0) 2393991554f2SKenneth D. Merry 2394991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_TEN_SECONDS (7) 2395991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_ONE_SECOND (6) 2396991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_HUNDRED_MILLISECONDS (5) 2397991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_TEN_MILLISECONDS (4) 2398991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_ONE_MILLISECOND (3) 2399991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_HUNDRED_MICROSECONDS (2) 2400991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_TEN_MICROSECONDS (1) 2401991554f2SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_ONE_MICROSECOND (0) 2402991554f2SKenneth D. Merry 2403991554f2SKenneth D. Merry /* 2404991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2405991554f2SKenneth D. Merry * one and check the value returned for NumPhys at runtime. 2406991554f2SKenneth D. Merry */ 2407991554f2SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT5_PHY_MAX 2408991554f2SKenneth D. Merry #define MPI2_SAS_IOUNIT5_PHY_MAX (1) 2409991554f2SKenneth D. Merry #endif 2410991554f2SKenneth D. Merry 2411991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_5 2412991554f2SKenneth D. Merry { 2413991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2414991554f2SKenneth D. Merry U8 NumPhys; /* 0x08 */ 2415991554f2SKenneth D. Merry U8 Reserved1; /* 0x09 */ 2416991554f2SKenneth D. Merry U16 Reserved2; /* 0x0A */ 2417991554f2SKenneth D. Merry U32 Reserved3; /* 0x0C */ 2418991554f2SKenneth D. Merry MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS SASPhyPowerManagementSettings[MPI2_SAS_IOUNIT5_PHY_MAX]; /* 0x10 */ 2419991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_5, 2420991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_5, 2421991554f2SKenneth D. Merry Mpi2SasIOUnitPage5_t, MPI2_POINTER pMpi2SasIOUnitPage5_t; 2422991554f2SKenneth D. Merry 2423991554f2SKenneth D. Merry #define MPI2_SASIOUNITPAGE5_PAGEVERSION (0x01) 2424991554f2SKenneth D. Merry 2425991554f2SKenneth D. Merry /* SAS IO Unit Page 6 */ 2426991554f2SKenneth D. Merry 2427991554f2SKenneth D. Merry typedef struct _MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS 2428991554f2SKenneth D. Merry { 2429991554f2SKenneth D. Merry U8 CurrentStatus; /* 0x00 */ 2430991554f2SKenneth D. Merry U8 CurrentModulation; /* 0x01 */ 2431991554f2SKenneth D. Merry U8 CurrentUtilization; /* 0x02 */ 2432991554f2SKenneth D. Merry U8 Reserved1; /* 0x03 */ 2433991554f2SKenneth D. Merry U32 Reserved2; /* 0x04 */ 2434991554f2SKenneth D. Merry } MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS, 2435991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS, 2436991554f2SKenneth D. Merry Mpi2SasIOUnit6PortWidthModGroupStatus_t, 2437991554f2SKenneth D. Merry MPI2_POINTER pMpi2SasIOUnit6PortWidthModGroupStatus_t; 2438991554f2SKenneth D. Merry 2439991554f2SKenneth D. Merry /* defines for CurrentStatus field */ 2440991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_STATUS_UNAVAILABLE (0x00) 2441991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_STATUS_UNCONFIGURED (0x01) 2442991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_STATUS_INVALID_CONFIG (0x02) 2443991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_STATUS_LINK_DOWN (0x03) 2444991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_STATUS_OBSERVATION_ONLY (0x04) 2445991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_STATUS_INACTIVE (0x05) 2446991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_STATUS_ACTIVE_IOUNIT (0x06) 2447991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_STATUS_ACTIVE_HOST (0x07) 2448991554f2SKenneth D. Merry 2449991554f2SKenneth D. Merry /* defines for CurrentModulation field */ 2450991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_MODULATION_25_PERCENT (0x00) 2451991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_MODULATION_50_PERCENT (0x01) 2452991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_MODULATION_75_PERCENT (0x02) 2453991554f2SKenneth D. Merry #define MPI2_SASIOUNIT6_MODULATION_100_PERCENT (0x03) 2454991554f2SKenneth D. Merry 2455991554f2SKenneth D. Merry /* 2456991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2457991554f2SKenneth D. Merry * one and check the value returned for NumGroups at runtime. 2458991554f2SKenneth D. Merry */ 2459991554f2SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT6_GROUP_MAX 2460991554f2SKenneth D. Merry #define MPI2_SAS_IOUNIT6_GROUP_MAX (1) 2461991554f2SKenneth D. Merry #endif 2462991554f2SKenneth D. Merry 2463991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_6 2464991554f2SKenneth D. Merry { 2465991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2466991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2467991554f2SKenneth D. Merry U32 Reserved2; /* 0x0C */ 2468991554f2SKenneth D. Merry U8 NumGroups; /* 0x10 */ 2469991554f2SKenneth D. Merry U8 Reserved3; /* 0x11 */ 2470991554f2SKenneth D. Merry U16 Reserved4; /* 0x12 */ 2471991554f2SKenneth D. Merry MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS 2472991554f2SKenneth D. Merry PortWidthModulationGroupStatus[MPI2_SAS_IOUNIT6_GROUP_MAX]; /* 0x14 */ 2473991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_6, 2474991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_6, 2475991554f2SKenneth D. Merry Mpi2SasIOUnitPage6_t, MPI2_POINTER pMpi2SasIOUnitPage6_t; 2476991554f2SKenneth D. Merry 2477991554f2SKenneth D. Merry #define MPI2_SASIOUNITPAGE6_PAGEVERSION (0x00) 2478991554f2SKenneth D. Merry 2479991554f2SKenneth D. Merry /* SAS IO Unit Page 7 */ 2480991554f2SKenneth D. Merry 2481991554f2SKenneth D. Merry typedef struct _MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS 2482991554f2SKenneth D. Merry { 2483991554f2SKenneth D. Merry U8 Flags; /* 0x00 */ 2484991554f2SKenneth D. Merry U8 Reserved1; /* 0x01 */ 2485991554f2SKenneth D. Merry U16 Reserved2; /* 0x02 */ 2486991554f2SKenneth D. Merry U8 Threshold75Pct; /* 0x04 */ 2487991554f2SKenneth D. Merry U8 Threshold50Pct; /* 0x05 */ 2488991554f2SKenneth D. Merry U8 Threshold25Pct; /* 0x06 */ 2489991554f2SKenneth D. Merry U8 Reserved3; /* 0x07 */ 2490991554f2SKenneth D. Merry } MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS, 2491991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS, 2492991554f2SKenneth D. Merry Mpi2SasIOUnit7PortWidthModGroupSettings_t, 2493991554f2SKenneth D. Merry MPI2_POINTER pMpi2SasIOUnit7PortWidthModGroupSettings_t; 2494991554f2SKenneth D. Merry 2495991554f2SKenneth D. Merry /* defines for Flags field */ 2496991554f2SKenneth D. Merry #define MPI2_SASIOUNIT7_FLAGS_ENABLE_PORT_WIDTH_MODULATION (0x01) 2497991554f2SKenneth D. Merry 2498991554f2SKenneth D. Merry /* 2499991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2500991554f2SKenneth D. Merry * one and check the value returned for NumGroups at runtime. 2501991554f2SKenneth D. Merry */ 2502991554f2SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT7_GROUP_MAX 2503991554f2SKenneth D. Merry #define MPI2_SAS_IOUNIT7_GROUP_MAX (1) 2504991554f2SKenneth D. Merry #endif 2505991554f2SKenneth D. Merry 2506991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_7 2507991554f2SKenneth D. Merry { 2508991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2509991554f2SKenneth D. Merry U8 SamplingInterval; /* 0x08 */ 2510991554f2SKenneth D. Merry U8 WindowLength; /* 0x09 */ 2511991554f2SKenneth D. Merry U16 Reserved1; /* 0x0A */ 2512991554f2SKenneth D. Merry U32 Reserved2; /* 0x0C */ 2513991554f2SKenneth D. Merry U32 Reserved3; /* 0x10 */ 2514991554f2SKenneth D. Merry U8 NumGroups; /* 0x14 */ 2515991554f2SKenneth D. Merry U8 Reserved4; /* 0x15 */ 2516991554f2SKenneth D. Merry U16 Reserved5; /* 0x16 */ 2517991554f2SKenneth D. Merry MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS 2518991554f2SKenneth D. Merry PortWidthModulationGroupSettings[MPI2_SAS_IOUNIT7_GROUP_MAX]; /* 0x18 */ 2519991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_7, 2520991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_7, 2521991554f2SKenneth D. Merry Mpi2SasIOUnitPage7_t, MPI2_POINTER pMpi2SasIOUnitPage7_t; 2522991554f2SKenneth D. Merry 2523991554f2SKenneth D. Merry #define MPI2_SASIOUNITPAGE7_PAGEVERSION (0x00) 2524991554f2SKenneth D. Merry 2525991554f2SKenneth D. Merry /* SAS IO Unit Page 8 */ 2526991554f2SKenneth D. Merry 2527991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_8 2528991554f2SKenneth D. Merry { 2529991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2530991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2531991554f2SKenneth D. Merry U32 PowerManagementCapabilities; /* 0x0C */ 2532991554f2SKenneth D. Merry U8 TxRxSleepStatus; /* 0x10 */ /* reserved in MPI 2.0 */ 2533991554f2SKenneth D. Merry U8 Reserved2; /* 0x11 */ 2534991554f2SKenneth D. Merry U16 Reserved3; /* 0x12 */ 2535991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_8, 2536991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_8, 2537991554f2SKenneth D. Merry Mpi2SasIOUnitPage8_t, MPI2_POINTER pMpi2SasIOUnitPage8_t; 2538991554f2SKenneth D. Merry 2539991554f2SKenneth D. Merry #define MPI2_SASIOUNITPAGE8_PAGEVERSION (0x00) 2540991554f2SKenneth D. Merry 2541991554f2SKenneth D. Merry /* defines for PowerManagementCapabilities field */ 2542991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_HOST_PORT_WIDTH_MOD (0x00001000) 2543991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_HOST_SAS_SLUMBER_MODE (0x00000800) 2544991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_HOST_SAS_PARTIAL_MODE (0x00000400) 2545991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_HOST_SATA_SLUMBER_MODE (0x00000200) 2546991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_HOST_SATA_PARTIAL_MODE (0x00000100) 2547991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_IOUNIT_PORT_WIDTH_MOD (0x00000010) 2548991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_IOUNIT_SAS_SLUMBER_MODE (0x00000008) 2549991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_IOUNIT_SAS_PARTIAL_MODE (0x00000004) 2550991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_IOUNIT_SATA_SLUMBER_MODE (0x00000002) 2551991554f2SKenneth D. Merry #define MPI2_SASIOUNIT8_PM_IOUNIT_SATA_PARTIAL_MODE (0x00000001) 2552991554f2SKenneth D. Merry 2553991554f2SKenneth D. Merry /* defines for TxRxSleepStatus field */ 2554991554f2SKenneth D. Merry #define MPI25_SASIOUNIT8_TXRXSLEEP_UNSUPPORTED (0x00) 2555991554f2SKenneth D. Merry #define MPI25_SASIOUNIT8_TXRXSLEEP_DISENGAGED (0x01) 2556991554f2SKenneth D. Merry #define MPI25_SASIOUNIT8_TXRXSLEEP_ACTIVE (0x02) 2557991554f2SKenneth D. Merry #define MPI25_SASIOUNIT8_TXRXSLEEP_SHUTDOWN (0x03) 2558991554f2SKenneth D. Merry 2559991554f2SKenneth D. Merry /* SAS IO Unit Page 16 */ 2560991554f2SKenneth D. Merry 2561991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT16 2562991554f2SKenneth D. Merry { 2563991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2564991554f2SKenneth D. Merry U64 TimeStamp; /* 0x08 */ 2565991554f2SKenneth D. Merry U32 Reserved1; /* 0x10 */ 2566991554f2SKenneth D. Merry U32 Reserved2; /* 0x14 */ 2567991554f2SKenneth D. Merry U32 FastPathPendedRequests; /* 0x18 */ 2568991554f2SKenneth D. Merry U32 FastPathUnPendedRequests; /* 0x1C */ 2569991554f2SKenneth D. Merry U32 FastPathHostRequestStarts; /* 0x20 */ 2570991554f2SKenneth D. Merry U32 FastPathFirmwareRequestStarts; /* 0x24 */ 2571991554f2SKenneth D. Merry U32 FastPathHostCompletions; /* 0x28 */ 2572991554f2SKenneth D. Merry U32 FastPathFirmwareCompletions; /* 0x2C */ 2573991554f2SKenneth D. Merry U32 NonFastPathRequestStarts; /* 0x30 */ 2574991554f2SKenneth D. Merry U32 NonFastPathHostCompletions; /* 0x30 */ 2575991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT16, 2576991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT16, 2577991554f2SKenneth D. Merry Mpi2SasIOUnitPage16_t, MPI2_POINTER pMpi2SasIOUnitPage16_t; 2578991554f2SKenneth D. Merry 2579991554f2SKenneth D. Merry #define MPI2_SASIOUNITPAGE16_PAGEVERSION (0x00) 2580991554f2SKenneth D. Merry 2581991554f2SKenneth D. Merry /**************************************************************************** 2582991554f2SKenneth D. Merry * SAS Expander Config Pages 2583991554f2SKenneth D. Merry ****************************************************************************/ 2584991554f2SKenneth D. Merry 2585991554f2SKenneth D. Merry /* SAS Expander Page 0 */ 2586991554f2SKenneth D. Merry 2587991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_EXPANDER_0 2588991554f2SKenneth D. Merry { 2589991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2590991554f2SKenneth D. Merry U8 PhysicalPort; /* 0x08 */ 2591991554f2SKenneth D. Merry U8 ReportGenLength; /* 0x09 */ 2592991554f2SKenneth D. Merry U16 EnclosureHandle; /* 0x0A */ 2593991554f2SKenneth D. Merry U64 SASAddress; /* 0x0C */ 2594991554f2SKenneth D. Merry U32 DiscoveryStatus; /* 0x14 */ 2595991554f2SKenneth D. Merry U16 DevHandle; /* 0x18 */ 2596991554f2SKenneth D. Merry U16 ParentDevHandle; /* 0x1A */ 2597991554f2SKenneth D. Merry U16 ExpanderChangeCount; /* 0x1C */ 2598991554f2SKenneth D. Merry U16 ExpanderRouteIndexes; /* 0x1E */ 2599991554f2SKenneth D. Merry U8 NumPhys; /* 0x20 */ 2600991554f2SKenneth D. Merry U8 SASLevel; /* 0x21 */ 2601991554f2SKenneth D. Merry U16 Flags; /* 0x22 */ 2602991554f2SKenneth D. Merry U16 STPBusInactivityTimeLimit; /* 0x24 */ 2603991554f2SKenneth D. Merry U16 STPMaxConnectTimeLimit; /* 0x26 */ 2604991554f2SKenneth D. Merry U16 STP_SMP_NexusLossTime; /* 0x28 */ 2605991554f2SKenneth D. Merry U16 MaxNumRoutedSasAddresses; /* 0x2A */ 2606991554f2SKenneth D. Merry U64 ActiveZoneManagerSASAddress;/* 0x2C */ 2607991554f2SKenneth D. Merry U16 ZoneLockInactivityLimit; /* 0x34 */ 2608991554f2SKenneth D. Merry U16 Reserved1; /* 0x36 */ 2609991554f2SKenneth D. Merry U8 TimeToReducedFunc; /* 0x38 */ 2610991554f2SKenneth D. Merry U8 InitialTimeToReducedFunc; /* 0x39 */ 2611991554f2SKenneth D. Merry U8 MaxReducedFuncTime; /* 0x3A */ 2612991554f2SKenneth D. Merry U8 Reserved2; /* 0x3B */ 2613991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_EXPANDER_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_EXPANDER_0, 2614991554f2SKenneth D. Merry Mpi2ExpanderPage0_t, MPI2_POINTER pMpi2ExpanderPage0_t; 2615991554f2SKenneth D. Merry 2616991554f2SKenneth D. Merry #define MPI2_SASEXPANDER0_PAGEVERSION (0x06) 2617991554f2SKenneth D. Merry 2618991554f2SKenneth D. Merry /* values for SAS Expander Page 0 DiscoveryStatus field */ 2619991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 2620991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MAX_EXPANDERS_EXCEED (0x40000000) 2621991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MAX_DEVICES_EXCEED (0x20000000) 2622991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 2623991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_DOWNSTREAM_INITIATOR (0x08000000) 2624991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 2625991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 2626991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MULTI_PORT_DOMAIN (0x00002000) 2627991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 2628991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_UNSUPPORTED_DEVICE (0x00000800) 2629991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_TABLE_LINK (0x00000400) 2630991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_SUBTRACTIVE_LINK (0x00000200) 2631991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_SMP_CRC_ERROR (0x00000100) 2632991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_SMP_FUNCTION_FAILED (0x00000080) 2633991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_INDEX_NOT_EXIST (0x00000040) 2634991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_OUT_ROUTE_ENTRIES (0x00000020) 2635991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_SMP_TIMEOUT (0x00000010) 2636991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MULTIPLE_PORTS (0x00000004) 2637991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_UNADDRESSABLE_DEVICE (0x00000002) 2638991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_LOOP_DETECTED (0x00000001) 2639991554f2SKenneth D. Merry 2640991554f2SKenneth D. Merry /* values for SAS Expander Page 0 Flags field */ 2641991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_REDUCED_FUNCTIONALITY (0x2000) 2642991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ZONE_LOCKED (0x1000) 2643991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_SUPPORTED_PHYSICAL_PRES (0x0800) 2644991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ASSERTED_PHYSICAL_PRES (0x0400) 2645991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ZONING_SUPPORT (0x0200) 2646991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ENABLED_ZONING (0x0100) 2647991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_TABLE_TO_TABLE_SUPPORT (0x0080) 2648991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_CONNECTOR_END_DEVICE (0x0010) 2649991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_OTHERS_CONFIG (0x0004) 2650991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_CONFIG_IN_PROGRESS (0x0002) 2651991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ROUTE_TABLE_CONFIG (0x0001) 2652991554f2SKenneth D. Merry 2653991554f2SKenneth D. Merry /* SAS Expander Page 1 */ 2654991554f2SKenneth D. Merry 2655991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_EXPANDER_1 2656991554f2SKenneth D. Merry { 2657991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2658991554f2SKenneth D. Merry U8 PhysicalPort; /* 0x08 */ 2659991554f2SKenneth D. Merry U8 Reserved1; /* 0x09 */ 2660991554f2SKenneth D. Merry U16 Reserved2; /* 0x0A */ 2661991554f2SKenneth D. Merry U8 NumPhys; /* 0x0C */ 2662991554f2SKenneth D. Merry U8 Phy; /* 0x0D */ 2663991554f2SKenneth D. Merry U16 NumTableEntriesProgrammed; /* 0x0E */ 2664991554f2SKenneth D. Merry U8 ProgrammedLinkRate; /* 0x10 */ 2665991554f2SKenneth D. Merry U8 HwLinkRate; /* 0x11 */ 2666991554f2SKenneth D. Merry U16 AttachedDevHandle; /* 0x12 */ 2667991554f2SKenneth D. Merry U32 PhyInfo; /* 0x14 */ 2668991554f2SKenneth D. Merry U32 AttachedDeviceInfo; /* 0x18 */ 2669991554f2SKenneth D. Merry U16 ExpanderDevHandle; /* 0x1C */ 2670991554f2SKenneth D. Merry U8 ChangeCount; /* 0x1E */ 2671991554f2SKenneth D. Merry U8 NegotiatedLinkRate; /* 0x1F */ 2672991554f2SKenneth D. Merry U8 PhyIdentifier; /* 0x20 */ 2673991554f2SKenneth D. Merry U8 AttachedPhyIdentifier; /* 0x21 */ 2674991554f2SKenneth D. Merry U8 Reserved3; /* 0x22 */ 2675991554f2SKenneth D. Merry U8 DiscoveryInfo; /* 0x23 */ 2676991554f2SKenneth D. Merry U32 AttachedPhyInfo; /* 0x24 */ 2677991554f2SKenneth D. Merry U8 ZoneGroup; /* 0x28 */ 2678991554f2SKenneth D. Merry U8 SelfConfigStatus; /* 0x29 */ 2679991554f2SKenneth D. Merry U16 Reserved4; /* 0x2A */ 2680991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_EXPANDER_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_EXPANDER_1, 2681991554f2SKenneth D. Merry Mpi2ExpanderPage1_t, MPI2_POINTER pMpi2ExpanderPage1_t; 2682991554f2SKenneth D. Merry 2683991554f2SKenneth D. Merry #define MPI2_SASEXPANDER1_PAGEVERSION (0x02) 2684991554f2SKenneth D. Merry 2685991554f2SKenneth D. Merry /* use MPI2_SAS_PRATE_ defines for the ProgrammedLinkRate field */ 2686991554f2SKenneth D. Merry 2687991554f2SKenneth D. Merry /* use MPI2_SAS_HWRATE_ defines for the HwLinkRate field */ 2688991554f2SKenneth D. Merry 2689991554f2SKenneth D. Merry /* use MPI2_SAS_PHYINFO_ for the PhyInfo field */ 2690991554f2SKenneth D. Merry 2691991554f2SKenneth D. Merry /* see mpi2_sas.h for the MPI2_SAS_DEVICE_INFO_ defines used for the AttachedDeviceInfo field */ 2692991554f2SKenneth D. Merry 2693991554f2SKenneth D. Merry /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 2694991554f2SKenneth D. Merry 2695991554f2SKenneth D. Merry /* values for SAS Expander Page 1 DiscoveryInfo field */ 2696991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER1_DISCINFO_BAD_PHY_DISABLED (0x04) 2697991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER1_DISCINFO_LINK_STATUS_CHANGE (0x02) 2698991554f2SKenneth D. Merry #define MPI2_SAS_EXPANDER1_DISCINFO_NO_ROUTING_ENTRIES (0x01) 2699991554f2SKenneth D. Merry 2700991554f2SKenneth D. Merry /* use MPI2_SAS_APHYINFO_ defines for AttachedPhyInfo field */ 2701991554f2SKenneth D. Merry 2702991554f2SKenneth D. Merry /**************************************************************************** 2703991554f2SKenneth D. Merry * SAS Device Config Pages 2704991554f2SKenneth D. Merry ****************************************************************************/ 2705991554f2SKenneth D. Merry 2706991554f2SKenneth D. Merry /* SAS Device Page 0 */ 2707991554f2SKenneth D. Merry 2708991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 2709991554f2SKenneth D. Merry { 2710991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2711991554f2SKenneth D. Merry U16 Slot; /* 0x08 */ 2712991554f2SKenneth D. Merry U16 EnclosureHandle; /* 0x0A */ 2713991554f2SKenneth D. Merry U64 SASAddress; /* 0x0C */ 2714991554f2SKenneth D. Merry U16 ParentDevHandle; /* 0x14 */ 2715991554f2SKenneth D. Merry U8 PhyNum; /* 0x16 */ 2716991554f2SKenneth D. Merry U8 AccessStatus; /* 0x17 */ 2717991554f2SKenneth D. Merry U16 DevHandle; /* 0x18 */ 2718991554f2SKenneth D. Merry U8 AttachedPhyIdentifier; /* 0x1A */ 2719991554f2SKenneth D. Merry U8 ZoneGroup; /* 0x1B */ 2720991554f2SKenneth D. Merry U32 DeviceInfo; /* 0x1C */ 2721991554f2SKenneth D. Merry U16 Flags; /* 0x20 */ 2722991554f2SKenneth D. Merry U8 PhysicalPort; /* 0x22 */ 2723991554f2SKenneth D. Merry U8 MaxPortConnections; /* 0x23 */ 2724991554f2SKenneth D. Merry U64 DeviceName; /* 0x24 */ 2725991554f2SKenneth D. Merry U8 PortGroups; /* 0x2C */ 2726991554f2SKenneth D. Merry U8 DmaGroup; /* 0x2D */ 2727991554f2SKenneth D. Merry U8 ControlGroup; /* 0x2E */ 2728991554f2SKenneth D. Merry U8 EnclosureLevel; /* 0x2F */ 2729991554f2SKenneth D. Merry U8 ConnectorName[4]; /* 0x30 */ 2730991554f2SKenneth D. Merry U32 Reserved3; /* 0x34 */ 2731991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_DEV_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_DEV_0, 2732991554f2SKenneth D. Merry Mpi2SasDevicePage0_t, MPI2_POINTER pMpi2SasDevicePage0_t; 2733991554f2SKenneth D. Merry 2734991554f2SKenneth D. Merry #define MPI2_SASDEVICE0_PAGEVERSION (0x09) 2735991554f2SKenneth D. Merry 2736991554f2SKenneth D. Merry /* values for SAS Device Page 0 AccessStatus field */ 2737991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_NO_ERRORS (0x00) 2738991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SATA_INIT_FAILED (0x01) 2739991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SATA_CAPABILITY_FAILED (0x02) 2740991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SATA_AFFILIATION_CONFLICT (0x03) 2741991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SATA_NEEDS_INITIALIZATION (0x04) 2742991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_ROUTE_NOT_ADDRESSABLE (0x05) 2743991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SMP_ERROR_NOT_ADDRESSABLE (0x06) 2744991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_DEVICE_BLOCKED (0x07) 2745991554f2SKenneth D. Merry /* specific values for SATA Init failures */ 2746991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_UNKNOWN (0x10) 2747991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_AFFILIATION_CONFLICT (0x11) 2748991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_DIAG (0x12) 2749991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_IDENTIFICATION (0x13) 2750991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_CHECK_POWER (0x14) 2751991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_PIO_SN (0x15) 2752991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_MDMA_SN (0x16) 2753991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_UDMA_SN (0x17) 2754991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_ZONING_VIOLATION (0x18) 2755991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_NOT_ADDRESSABLE (0x19) 2756991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_MAX (0x1F) 2757991554f2SKenneth D. Merry 2758991554f2SKenneth D. Merry /* see mpi2_sas.h for values for SAS Device Page 0 DeviceInfo values */ 2759991554f2SKenneth D. Merry 2760991554f2SKenneth D. Merry /* values for SAS Device Page 0 Flags field */ 2761991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_UNAUTHORIZED_DEVICE (0x8000) 2762991554f2SKenneth D. Merry #define MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH (0x4000) 2763991554f2SKenneth D. Merry #define MPI25_SAS_DEVICE0_FLAGS_FAST_PATH_CAPABLE (0x2000) 2764991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SLUMBER_PM_CAPABLE (0x1000) 2765991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_PARTIAL_PM_CAPABLE (0x0800) 2766991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_ASYNCHRONOUS_NOTIFY (0x0400) 2767991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_SW_PRESERVE (0x0200) 2768991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_UNSUPPORTED_DEVICE (0x0100) 2769991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_48BIT_LBA_SUPPORTED (0x0080) 2770991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_SMART_SUPPORTED (0x0040) 2771991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_NCQ_SUPPORTED (0x0020) 2772991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_FUA_SUPPORTED (0x0010) 2773991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_PORT_SELECTOR_ATTACH (0x0008) 277428ae62b0SStephen McConnell #define MPI2_SAS_DEVICE0_FLAGS_PERSIST_CAPABLE (0x0004) 2775991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID (0x0002) 2776991554f2SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_DEVICE_PRESENT (0x0001) 2777991554f2SKenneth D. Merry 2778991554f2SKenneth D. Merry /* SAS Device Page 1 */ 2779991554f2SKenneth D. Merry 2780991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_1 2781991554f2SKenneth D. Merry { 2782991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2783991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2784991554f2SKenneth D. Merry U64 SASAddress; /* 0x0C */ 2785991554f2SKenneth D. Merry U32 Reserved2; /* 0x14 */ 2786991554f2SKenneth D. Merry U16 DevHandle; /* 0x18 */ 2787991554f2SKenneth D. Merry U16 Reserved3; /* 0x1A */ 2788991554f2SKenneth D. Merry U8 InitialRegDeviceFIS[20];/* 0x1C */ 2789991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_DEV_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_DEV_1, 2790991554f2SKenneth D. Merry Mpi2SasDevicePage1_t, MPI2_POINTER pMpi2SasDevicePage1_t; 2791991554f2SKenneth D. Merry 2792991554f2SKenneth D. Merry #define MPI2_SASDEVICE1_PAGEVERSION (0x01) 2793991554f2SKenneth D. Merry 2794991554f2SKenneth D. Merry /**************************************************************************** 2795991554f2SKenneth D. Merry * SAS PHY Config Pages 2796991554f2SKenneth D. Merry ****************************************************************************/ 2797991554f2SKenneth D. Merry 2798991554f2SKenneth D. Merry /* SAS PHY Page 0 */ 2799991554f2SKenneth D. Merry 2800991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_0 2801991554f2SKenneth D. Merry { 2802991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2803991554f2SKenneth D. Merry U16 OwnerDevHandle; /* 0x08 */ 2804991554f2SKenneth D. Merry U16 Reserved1; /* 0x0A */ 2805991554f2SKenneth D. Merry U16 AttachedDevHandle; /* 0x0C */ 2806991554f2SKenneth D. Merry U8 AttachedPhyIdentifier; /* 0x0E */ 2807991554f2SKenneth D. Merry U8 Reserved2; /* 0x0F */ 2808991554f2SKenneth D. Merry U32 AttachedPhyInfo; /* 0x10 */ 2809991554f2SKenneth D. Merry U8 ProgrammedLinkRate; /* 0x14 */ 2810991554f2SKenneth D. Merry U8 HwLinkRate; /* 0x15 */ 2811991554f2SKenneth D. Merry U8 ChangeCount; /* 0x16 */ 2812991554f2SKenneth D. Merry U8 Flags; /* 0x17 */ 2813991554f2SKenneth D. Merry U32 PhyInfo; /* 0x18 */ 2814991554f2SKenneth D. Merry U8 NegotiatedLinkRate; /* 0x1C */ 2815991554f2SKenneth D. Merry U8 Reserved3; /* 0x1D */ 2816991554f2SKenneth D. Merry U16 Reserved4; /* 0x1E */ 2817991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_0, 2818991554f2SKenneth D. Merry Mpi2SasPhyPage0_t, MPI2_POINTER pMpi2SasPhyPage0_t; 2819991554f2SKenneth D. Merry 2820991554f2SKenneth D. Merry #define MPI2_SASPHY0_PAGEVERSION (0x03) 2821991554f2SKenneth D. Merry 2822991554f2SKenneth D. Merry /* use MPI2_SAS_APHYINFO_ defines for AttachedPhyInfo field */ 2823991554f2SKenneth D. Merry 2824991554f2SKenneth D. Merry /* use MPI2_SAS_PRATE_ defines for the ProgrammedLinkRate field */ 2825991554f2SKenneth D. Merry 2826991554f2SKenneth D. Merry /* use MPI2_SAS_HWRATE_ defines for the HwLinkRate field */ 2827991554f2SKenneth D. Merry 2828991554f2SKenneth D. Merry /* values for SAS PHY Page 0 Flags field */ 2829991554f2SKenneth D. Merry #define MPI2_SAS_PHY0_FLAGS_SGPIO_DIRECT_ATTACH_ENC (0x01) 2830991554f2SKenneth D. Merry 2831991554f2SKenneth D. Merry /* use MPI2_SAS_PHYINFO_ for the PhyInfo field */ 2832991554f2SKenneth D. Merry 2833991554f2SKenneth D. Merry /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 2834991554f2SKenneth D. Merry 2835991554f2SKenneth D. Merry /* SAS PHY Page 1 */ 2836991554f2SKenneth D. Merry 2837991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_1 2838991554f2SKenneth D. Merry { 2839991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2840991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2841991554f2SKenneth D. Merry U32 InvalidDwordCount; /* 0x0C */ 2842991554f2SKenneth D. Merry U32 RunningDisparityErrorCount; /* 0x10 */ 2843991554f2SKenneth D. Merry U32 LossDwordSynchCount; /* 0x14 */ 2844991554f2SKenneth D. Merry U32 PhyResetProblemCount; /* 0x18 */ 2845991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_1, 2846991554f2SKenneth D. Merry Mpi2SasPhyPage1_t, MPI2_POINTER pMpi2SasPhyPage1_t; 2847991554f2SKenneth D. Merry 2848991554f2SKenneth D. Merry #define MPI2_SASPHY1_PAGEVERSION (0x01) 2849991554f2SKenneth D. Merry 2850991554f2SKenneth D. Merry /* SAS PHY Page 2 */ 2851991554f2SKenneth D. Merry 2852991554f2SKenneth D. Merry typedef struct _MPI2_SASPHY2_PHY_EVENT 2853991554f2SKenneth D. Merry { 2854991554f2SKenneth D. Merry U8 PhyEventCode; /* 0x00 */ 2855991554f2SKenneth D. Merry U8 Reserved1; /* 0x01 */ 2856991554f2SKenneth D. Merry U16 Reserved2; /* 0x02 */ 2857991554f2SKenneth D. Merry U32 PhyEventInfo; /* 0x04 */ 2858991554f2SKenneth D. Merry } MPI2_SASPHY2_PHY_EVENT, MPI2_POINTER PTR_MPI2_SASPHY2_PHY_EVENT, 2859991554f2SKenneth D. Merry Mpi2SasPhy2PhyEvent_t, MPI2_POINTER pMpi2SasPhy2PhyEvent_t; 2860991554f2SKenneth D. Merry 2861991554f2SKenneth D. Merry /* use MPI2_SASPHY3_EVENT_CODE_ for the PhyEventCode field */ 2862991554f2SKenneth D. Merry 2863991554f2SKenneth D. Merry /* 2864991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2865991554f2SKenneth D. Merry * one and check the value returned for NumPhyEvents at runtime. 2866991554f2SKenneth D. Merry */ 2867991554f2SKenneth D. Merry #ifndef MPI2_SASPHY2_PHY_EVENT_MAX 2868991554f2SKenneth D. Merry #define MPI2_SASPHY2_PHY_EVENT_MAX (1) 2869991554f2SKenneth D. Merry #endif 2870991554f2SKenneth D. Merry 2871991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_2 2872991554f2SKenneth D. Merry { 2873991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2874991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2875991554f2SKenneth D. Merry U8 NumPhyEvents; /* 0x0C */ 2876991554f2SKenneth D. Merry U8 Reserved2; /* 0x0D */ 2877991554f2SKenneth D. Merry U16 Reserved3; /* 0x0E */ 2878991554f2SKenneth D. Merry MPI2_SASPHY2_PHY_EVENT PhyEvent[MPI2_SASPHY2_PHY_EVENT_MAX]; /* 0x10 */ 2879991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_2, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_2, 2880991554f2SKenneth D. Merry Mpi2SasPhyPage2_t, MPI2_POINTER pMpi2SasPhyPage2_t; 2881991554f2SKenneth D. Merry 2882991554f2SKenneth D. Merry #define MPI2_SASPHY2_PAGEVERSION (0x00) 2883991554f2SKenneth D. Merry 2884991554f2SKenneth D. Merry /* SAS PHY Page 3 */ 2885991554f2SKenneth D. Merry 2886991554f2SKenneth D. Merry typedef struct _MPI2_SASPHY3_PHY_EVENT_CONFIG 2887991554f2SKenneth D. Merry { 2888991554f2SKenneth D. Merry U8 PhyEventCode; /* 0x00 */ 2889991554f2SKenneth D. Merry U8 Reserved1; /* 0x01 */ 2890991554f2SKenneth D. Merry U16 Reserved2; /* 0x02 */ 2891991554f2SKenneth D. Merry U8 CounterType; /* 0x04 */ 2892991554f2SKenneth D. Merry U8 ThresholdWindow; /* 0x05 */ 2893991554f2SKenneth D. Merry U8 TimeUnits; /* 0x06 */ 2894991554f2SKenneth D. Merry U8 Reserved3; /* 0x07 */ 2895991554f2SKenneth D. Merry U32 EventThreshold; /* 0x08 */ 2896991554f2SKenneth D. Merry U16 ThresholdFlags; /* 0x0C */ 2897991554f2SKenneth D. Merry U16 Reserved4; /* 0x0E */ 2898991554f2SKenneth D. Merry } MPI2_SASPHY3_PHY_EVENT_CONFIG, MPI2_POINTER PTR_MPI2_SASPHY3_PHY_EVENT_CONFIG, 2899991554f2SKenneth D. Merry Mpi2SasPhy3PhyEventConfig_t, MPI2_POINTER pMpi2SasPhy3PhyEventConfig_t; 2900991554f2SKenneth D. Merry 2901991554f2SKenneth D. Merry /* values for PhyEventCode field */ 2902991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_NO_EVENT (0x00) 2903991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_INVALID_DWORD (0x01) 2904991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RUNNING_DISPARITY_ERROR (0x02) 2905991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_LOSS_DWORD_SYNC (0x03) 2906991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PHY_RESET_PROBLEM (0x04) 2907991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_ELASTICITY_BUF_OVERFLOW (0x05) 2908991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_ERROR (0x06) 2909991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_ADDR_FRAME_ERROR (0x20) 2910991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_AC_OPEN_REJECT (0x21) 2911991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_AC_OPEN_REJECT (0x22) 2912991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_RC_OPEN_REJECT (0x23) 2913991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_RC_OPEN_REJECT (0x24) 2914991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_AIP_PARTIAL_WAITING_ON (0x25) 2915991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_AIP_CONNECT_WAITING_ON (0x26) 2916991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_BREAK (0x27) 2917991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_BREAK (0x28) 2918991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_BREAK_TIMEOUT (0x29) 2919991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_CONNECTION (0x2A) 2920991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PEAKTX_PATHWAY_BLOCKED (0x2B) 2921991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PEAKTX_ARB_WAIT_TIME (0x2C) 2922991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PEAK_ARB_WAIT_TIME (0x2D) 2923991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PEAK_CONNECT_TIME (0x2E) 2924991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_SSP_FRAMES (0x40) 2925991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SSP_FRAMES (0x41) 2926991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_SSP_ERROR_FRAMES (0x42) 2927991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SSP_ERROR_FRAMES (0x43) 2928991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_CREDIT_BLOCKED (0x44) 2929991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_CREDIT_BLOCKED (0x45) 2930991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_SATA_FRAMES (0x50) 2931991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SATA_FRAMES (0x51) 2932991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_SATA_OVERFLOW (0x52) 2933991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_SMP_FRAMES (0x60) 2934991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SMP_FRAMES (0x61) 2935991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SMP_ERROR_FRAMES (0x63) 2936991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_HOTPLUG_TIMEOUT (0xD0) 2937991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_MISALIGNED_MUX_PRIMITIVE (0xD1) 2938991554f2SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_AIP (0xD2) 293928ae62b0SStephen McConnell /* Following codes are product specific and in MPI v2.6 and later */ 294028ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_LCARB_WAIT_TIME (0xD3) 294128ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_RCVD_CONN_RESP_WAIT_TIME (0xD4) 294228ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_LCCONN_TIME (0xD5) 294328ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_SSP_TX_START_TRANSMIT (0xD6) 294428ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_SATA_TX_START (0xD7) 294528ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_SMP_TX_START_TRANSMT (0xD8) 294628ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_TX_SMP_BREAK_CONN (0xD9) 294728ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_SSP_RX_START_RECEIVE (0xDA) 294828ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_SATA_RX_START_RECEIVE (0xDB) 294928ae62b0SStephen McConnell #define MPI2_SASPHY3_EVENT_CODE_SMP_RX_START_RECEIVE (0xDC) 295028ae62b0SStephen McConnell 2951991554f2SKenneth D. Merry /* values for the CounterType field */ 2952991554f2SKenneth D. Merry #define MPI2_SASPHY3_COUNTER_TYPE_WRAPPING (0x00) 2953991554f2SKenneth D. Merry #define MPI2_SASPHY3_COUNTER_TYPE_SATURATING (0x01) 2954991554f2SKenneth D. Merry #define MPI2_SASPHY3_COUNTER_TYPE_PEAK_VALUE (0x02) 2955991554f2SKenneth D. Merry 2956991554f2SKenneth D. Merry /* values for the TimeUnits field */ 2957991554f2SKenneth D. Merry #define MPI2_SASPHY3_TIME_UNITS_10_MICROSECONDS (0x00) 2958991554f2SKenneth D. Merry #define MPI2_SASPHY3_TIME_UNITS_100_MICROSECONDS (0x01) 2959991554f2SKenneth D. Merry #define MPI2_SASPHY3_TIME_UNITS_1_MILLISECOND (0x02) 2960991554f2SKenneth D. Merry #define MPI2_SASPHY3_TIME_UNITS_10_MILLISECONDS (0x03) 2961991554f2SKenneth D. Merry 2962991554f2SKenneth D. Merry /* values for the ThresholdFlags field */ 2963991554f2SKenneth D. Merry #define MPI2_SASPHY3_TFLAGS_PHY_RESET (0x0002) 2964991554f2SKenneth D. Merry #define MPI2_SASPHY3_TFLAGS_EVENT_NOTIFY (0x0001) 2965991554f2SKenneth D. Merry 2966991554f2SKenneth D. Merry /* 2967991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2968991554f2SKenneth D. Merry * one and check the value returned for NumPhyEvents at runtime. 2969991554f2SKenneth D. Merry */ 2970991554f2SKenneth D. Merry #ifndef MPI2_SASPHY3_PHY_EVENT_MAX 2971991554f2SKenneth D. Merry #define MPI2_SASPHY3_PHY_EVENT_MAX (1) 2972991554f2SKenneth D. Merry #endif 2973991554f2SKenneth D. Merry 2974991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_3 2975991554f2SKenneth D. Merry { 2976991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2977991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2978991554f2SKenneth D. Merry U8 NumPhyEvents; /* 0x0C */ 2979991554f2SKenneth D. Merry U8 Reserved2; /* 0x0D */ 2980991554f2SKenneth D. Merry U16 Reserved3; /* 0x0E */ 2981991554f2SKenneth D. Merry MPI2_SASPHY3_PHY_EVENT_CONFIG PhyEventConfig[MPI2_SASPHY3_PHY_EVENT_MAX]; /* 0x10 */ 2982991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_3, 2983991554f2SKenneth D. Merry Mpi2SasPhyPage3_t, MPI2_POINTER pMpi2SasPhyPage3_t; 2984991554f2SKenneth D. Merry 2985991554f2SKenneth D. Merry #define MPI2_SASPHY3_PAGEVERSION (0x00) 2986991554f2SKenneth D. Merry 2987991554f2SKenneth D. Merry /* SAS PHY Page 4 */ 2988991554f2SKenneth D. Merry 2989991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_4 2990991554f2SKenneth D. Merry { 2991991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2992991554f2SKenneth D. Merry U16 Reserved1; /* 0x08 */ 2993991554f2SKenneth D. Merry U8 Reserved2; /* 0x0A */ 2994991554f2SKenneth D. Merry U8 Flags; /* 0x0B */ 2995991554f2SKenneth D. Merry U8 InitialFrame[28]; /* 0x0C */ 2996991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_4, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_4, 2997991554f2SKenneth D. Merry Mpi2SasPhyPage4_t, MPI2_POINTER pMpi2SasPhyPage4_t; 2998991554f2SKenneth D. Merry 2999991554f2SKenneth D. Merry #define MPI2_SASPHY4_PAGEVERSION (0x00) 3000991554f2SKenneth D. Merry 3001991554f2SKenneth D. Merry /* values for the Flags field */ 3002991554f2SKenneth D. Merry #define MPI2_SASPHY4_FLAGS_FRAME_VALID (0x02) 3003991554f2SKenneth D. Merry #define MPI2_SASPHY4_FLAGS_SATA_FRAME (0x01) 3004991554f2SKenneth D. Merry 3005991554f2SKenneth D. Merry /**************************************************************************** 3006991554f2SKenneth D. Merry * SAS Port Config Pages 3007991554f2SKenneth D. Merry ****************************************************************************/ 3008991554f2SKenneth D. Merry 3009991554f2SKenneth D. Merry /* SAS Port Page 0 */ 3010991554f2SKenneth D. Merry 3011991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PORT_0 3012991554f2SKenneth D. Merry { 3013991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3014991554f2SKenneth D. Merry U8 PortNumber; /* 0x08 */ 3015991554f2SKenneth D. Merry U8 PhysicalPort; /* 0x09 */ 3016991554f2SKenneth D. Merry U8 PortWidth; /* 0x0A */ 3017991554f2SKenneth D. Merry U8 PhysicalPortWidth; /* 0x0B */ 3018991554f2SKenneth D. Merry U8 ZoneGroup; /* 0x0C */ 3019991554f2SKenneth D. Merry U8 Reserved1; /* 0x0D */ 3020991554f2SKenneth D. Merry U16 Reserved2; /* 0x0E */ 3021991554f2SKenneth D. Merry U64 SASAddress; /* 0x10 */ 3022991554f2SKenneth D. Merry U32 DeviceInfo; /* 0x18 */ 3023991554f2SKenneth D. Merry U32 Reserved3; /* 0x1C */ 3024991554f2SKenneth D. Merry U32 Reserved4; /* 0x20 */ 3025991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PORT_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PORT_0, 3026991554f2SKenneth D. Merry Mpi2SasPortPage0_t, MPI2_POINTER pMpi2SasPortPage0_t; 3027991554f2SKenneth D. Merry 3028991554f2SKenneth D. Merry #define MPI2_SASPORT0_PAGEVERSION (0x00) 3029991554f2SKenneth D. Merry 3030991554f2SKenneth D. Merry /* see mpi2_sas.h for values for SAS Port Page 0 DeviceInfo values */ 3031991554f2SKenneth D. Merry 3032991554f2SKenneth D. Merry /**************************************************************************** 3033991554f2SKenneth D. Merry * SAS Enclosure Config Pages 3034991554f2SKenneth D. Merry ****************************************************************************/ 3035991554f2SKenneth D. Merry 303667feec50SStephen McConnell /* SAS Enclosure Page 0, Enclosure Page 0 */ 3037991554f2SKenneth D. Merry 3038991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 3039991554f2SKenneth D. Merry { 3040991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3041991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 3042991554f2SKenneth D. Merry U64 EnclosureLogicalID; /* 0x0C */ 3043991554f2SKenneth D. Merry U16 Flags; /* 0x14 */ 3044991554f2SKenneth D. Merry U16 EnclosureHandle; /* 0x16 */ 3045991554f2SKenneth D. Merry U16 NumSlots; /* 0x18 */ 3046991554f2SKenneth D. Merry U16 StartSlot; /* 0x1A */ 30475f5baf0eSAlexander Motin U8 ChassisSlot; /* 0x1C */ 3048991554f2SKenneth D. Merry U8 EnclosureLevel; /* 0x1D */ 3049991554f2SKenneth D. Merry U16 SEPDevHandle; /* 0x1E */ 3050*8736c018SKashyap D Desai U8 OEMRD; /* 0x20 */ 3051*8736c018SKashyap D Desai U8 Reserved1a; /* 0x21 */ 3052*8736c018SKashyap D Desai U16 Reserved2; /* 0x22 */ 30535f5baf0eSAlexander Motin U32 Reserved3; /* 0x24 */ 3054991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0, 3055991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0, 305667feec50SStephen McConnell Mpi2SasEnclosurePage0_t, MPI2_POINTER pMpi2SasEnclosurePage0_t, 305767feec50SStephen McConnell MPI26_CONFIG_PAGE_ENCLOSURE_0, 305867feec50SStephen McConnell MPI2_POINTER PTR_MPI26_CONFIG_PAGE_ENCLOSURE_0, 305967feec50SStephen McConnell Mpi26EnclosurePage0_t, MPI2_POINTER pMpi26EnclosurePage0_t; 3060991554f2SKenneth D. Merry 3061991554f2SKenneth D. Merry #define MPI2_SASENCLOSURE0_PAGEVERSION (0x04) 3062991554f2SKenneth D. Merry 3063991554f2SKenneth D. Merry /* values for SAS Enclosure Page 0 Flags field */ 3064*8736c018SKashyap D Desai #define MPI26_SAS_ENCLS0_FLAGS_OEMRD_VALID (0x0080) 3065*8736c018SKashyap D Desai #define MPI26_SAS_ENCLS0_FLAGS_OEMRD_COLLECTING (0x0040) 30665f5baf0eSAlexander Motin #define MPI2_SAS_ENCLS0_FLAGS_CHASSIS_SLOT_VALID (0x0020) 3067991554f2SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID (0x0010) 3068991554f2SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_MASK (0x000F) 3069991554f2SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000) 3070991554f2SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_SES (0x0001) 3071991554f2SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_SGPIO (0x0002) 3072991554f2SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_EXP_SGPIO (0x0003) 3073991554f2SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0004) 3074991554f2SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_GPIO (0x0005) 3075991554f2SKenneth D. Merry 307667feec50SStephen McConnell #define MPI26_ENCLOSURE0_PAGEVERSION (0x04) 307767feec50SStephen McConnell 307867feec50SStephen McConnell /* Values for Enclosure Page 0 Flags field */ 3079*8736c018SKashyap D Desai #define MPI26_ENCLS0_FLAGS_OEMRD_VALID (0x0080) 3080*8736c018SKashyap D Desai #define MPI26_ENCLS0_FLAGS_OEMRD_COLLECTING (0x0040) 30815f5baf0eSAlexander Motin #define MPI26_ENCLS0_FLAGS_CHASSIS_SLOT_VALID (0x0020) 308267feec50SStephen McConnell #define MPI26_ENCLS0_FLAGS_ENCL_LEVEL_VALID (0x0010) 308367feec50SStephen McConnell #define MPI26_ENCLS0_FLAGS_MNG_MASK (0x000F) 308467feec50SStephen McConnell #define MPI26_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000) 308567feec50SStephen McConnell #define MPI26_ENCLS0_FLAGS_MNG_IOC_SES (0x0001) 308667feec50SStephen McConnell #define MPI26_ENCLS0_FLAGS_MNG_IOC_SGPIO (0x0002) 308767feec50SStephen McConnell #define MPI26_ENCLS0_FLAGS_MNG_EXP_SGPIO (0x0003) 308867feec50SStephen McConnell #define MPI26_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0004) 308967feec50SStephen McConnell #define MPI26_ENCLS0_FLAGS_MNG_IOC_GPIO (0x0005) 3090991554f2SKenneth D. Merry 3091991554f2SKenneth D. Merry /**************************************************************************** 3092991554f2SKenneth D. Merry * Log Config Page 3093991554f2SKenneth D. Merry ****************************************************************************/ 3094991554f2SKenneth D. Merry 3095991554f2SKenneth D. Merry /* Log Page 0 */ 3096991554f2SKenneth D. Merry 3097991554f2SKenneth D. Merry /* 3098991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3099991554f2SKenneth D. Merry * one and check the value returned for NumLogEntries at runtime. 3100991554f2SKenneth D. Merry */ 3101991554f2SKenneth D. Merry #ifndef MPI2_LOG_0_NUM_LOG_ENTRIES 3102991554f2SKenneth D. Merry #define MPI2_LOG_0_NUM_LOG_ENTRIES (1) 3103991554f2SKenneth D. Merry #endif 3104991554f2SKenneth D. Merry 3105991554f2SKenneth D. Merry #define MPI2_LOG_0_LOG_DATA_LENGTH (0x1C) 3106991554f2SKenneth D. Merry 3107991554f2SKenneth D. Merry typedef struct _MPI2_LOG_0_ENTRY 3108991554f2SKenneth D. Merry { 3109991554f2SKenneth D. Merry U64 TimeStamp; /* 0x00 */ 3110991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 3111991554f2SKenneth D. Merry U16 LogSequence; /* 0x0C */ 3112991554f2SKenneth D. Merry U16 LogEntryQualifier; /* 0x0E */ 3113991554f2SKenneth D. Merry U8 VP_ID; /* 0x10 */ 3114991554f2SKenneth D. Merry U8 VF_ID; /* 0x11 */ 3115991554f2SKenneth D. Merry U16 Reserved2; /* 0x12 */ 3116991554f2SKenneth D. Merry U8 LogData[MPI2_LOG_0_LOG_DATA_LENGTH];/* 0x14 */ 3117991554f2SKenneth D. Merry } MPI2_LOG_0_ENTRY, MPI2_POINTER PTR_MPI2_LOG_0_ENTRY, 3118991554f2SKenneth D. Merry Mpi2Log0Entry_t, MPI2_POINTER pMpi2Log0Entry_t; 3119991554f2SKenneth D. Merry 3120991554f2SKenneth D. Merry /* values for Log Page 0 LogEntry LogEntryQualifier field */ 3121991554f2SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_ENTRY_UNUSED (0x0000) 3122991554f2SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_POWER_ON_RESET (0x0001) 3123991554f2SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_TIMESTAMP_UPDATE (0x0002) 3124991554f2SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_MIN_IMPLEMENT_SPEC (0x8000) 3125991554f2SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_MAX_IMPLEMENT_SPEC (0xFFFF) 3126991554f2SKenneth D. Merry 3127991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_LOG_0 3128991554f2SKenneth D. Merry { 3129991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3130991554f2SKenneth D. Merry U32 Reserved1; /* 0x08 */ 3131991554f2SKenneth D. Merry U32 Reserved2; /* 0x0C */ 3132991554f2SKenneth D. Merry U16 NumLogEntries; /* 0x10 */ 3133991554f2SKenneth D. Merry U16 Reserved3; /* 0x12 */ 3134991554f2SKenneth D. Merry MPI2_LOG_0_ENTRY LogEntry[MPI2_LOG_0_NUM_LOG_ENTRIES]; /* 0x14 */ 3135991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_LOG_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_LOG_0, 3136991554f2SKenneth D. Merry Mpi2LogPage0_t, MPI2_POINTER pMpi2LogPage0_t; 3137991554f2SKenneth D. Merry 3138991554f2SKenneth D. Merry #define MPI2_LOG_0_PAGEVERSION (0x02) 3139991554f2SKenneth D. Merry 3140991554f2SKenneth D. Merry /**************************************************************************** 3141991554f2SKenneth D. Merry * RAID Config Page 3142991554f2SKenneth D. Merry ****************************************************************************/ 3143991554f2SKenneth D. Merry 3144991554f2SKenneth D. Merry /* RAID Page 0 */ 3145991554f2SKenneth D. Merry 3146991554f2SKenneth D. Merry /* 3147991554f2SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 3148991554f2SKenneth D. Merry * one and check the value returned for NumElements at runtime. 3149991554f2SKenneth D. Merry */ 3150991554f2SKenneth D. Merry #ifndef MPI2_RAIDCONFIG0_MAX_ELEMENTS 3151991554f2SKenneth D. Merry #define MPI2_RAIDCONFIG0_MAX_ELEMENTS (1) 3152991554f2SKenneth D. Merry #endif 3153991554f2SKenneth D. Merry 3154991554f2SKenneth D. Merry typedef struct _MPI2_RAIDCONFIG0_CONFIG_ELEMENT 3155991554f2SKenneth D. Merry { 3156991554f2SKenneth D. Merry U16 ElementFlags; /* 0x00 */ 3157991554f2SKenneth D. Merry U16 VolDevHandle; /* 0x02 */ 3158991554f2SKenneth D. Merry U8 HotSparePool; /* 0x04 */ 3159991554f2SKenneth D. Merry U8 PhysDiskNum; /* 0x05 */ 3160991554f2SKenneth D. Merry U16 PhysDiskDevHandle; /* 0x06 */ 3161991554f2SKenneth D. Merry } MPI2_RAIDCONFIG0_CONFIG_ELEMENT, 3162991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_RAIDCONFIG0_CONFIG_ELEMENT, 3163991554f2SKenneth D. Merry Mpi2RaidConfig0ConfigElement_t, MPI2_POINTER pMpi2RaidConfig0ConfigElement_t; 3164991554f2SKenneth D. Merry 3165991554f2SKenneth D. Merry /* values for the ElementFlags field */ 3166991554f2SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_MASK_ELEMENT_TYPE (0x000F) 3167991554f2SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_VOLUME_ELEMENT (0x0000) 3168991554f2SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_VOL_PHYS_DISK_ELEMENT (0x0001) 3169991554f2SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_HOT_SPARE_ELEMENT (0x0002) 3170991554f2SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_OCE_ELEMENT (0x0003) 3171991554f2SKenneth D. Merry 3172991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0 3173991554f2SKenneth D. Merry { 3174991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3175991554f2SKenneth D. Merry U8 NumHotSpares; /* 0x08 */ 3176991554f2SKenneth D. Merry U8 NumPhysDisks; /* 0x09 */ 3177991554f2SKenneth D. Merry U8 NumVolumes; /* 0x0A */ 3178991554f2SKenneth D. Merry U8 ConfigNum; /* 0x0B */ 3179991554f2SKenneth D. Merry U32 Flags; /* 0x0C */ 3180991554f2SKenneth D. Merry U8 ConfigGUID[24]; /* 0x10 */ 3181991554f2SKenneth D. Merry U32 Reserved1; /* 0x28 */ 3182991554f2SKenneth D. Merry U8 NumElements; /* 0x2C */ 3183991554f2SKenneth D. Merry U8 Reserved2; /* 0x2D */ 3184991554f2SKenneth D. Merry U16 Reserved3; /* 0x2E */ 3185991554f2SKenneth D. Merry MPI2_RAIDCONFIG0_CONFIG_ELEMENT ConfigElement[MPI2_RAIDCONFIG0_MAX_ELEMENTS]; /* 0x30 */ 3186991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0, 3187991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0, 3188991554f2SKenneth D. Merry Mpi2RaidConfigurationPage0_t, MPI2_POINTER pMpi2RaidConfigurationPage0_t; 3189991554f2SKenneth D. Merry 3190991554f2SKenneth D. Merry #define MPI2_RAIDCONFIG0_PAGEVERSION (0x00) 3191991554f2SKenneth D. Merry 3192991554f2SKenneth D. Merry /* values for RAID Configuration Page 0 Flags field */ 3193991554f2SKenneth D. Merry #define MPI2_RAIDCONFIG0_FLAG_FOREIGN_CONFIG (0x00000001) 3194991554f2SKenneth D. Merry 3195991554f2SKenneth D. Merry /**************************************************************************** 3196991554f2SKenneth D. Merry * Driver Persistent Mapping Config Pages 3197991554f2SKenneth D. Merry ****************************************************************************/ 3198991554f2SKenneth D. Merry 3199991554f2SKenneth D. Merry /* Driver Persistent Mapping Page 0 */ 3200991554f2SKenneth D. Merry 3201991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY 3202991554f2SKenneth D. Merry { 3203991554f2SKenneth D. Merry U64 PhysicalIdentifier; /* 0x00 */ 3204991554f2SKenneth D. Merry U16 MappingInformation; /* 0x08 */ 3205991554f2SKenneth D. Merry U16 DeviceIndex; /* 0x0A */ 3206991554f2SKenneth D. Merry U32 PhysicalBitsMapping; /* 0x0C */ 3207991554f2SKenneth D. Merry U32 Reserved1; /* 0x10 */ 3208991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY, 3209991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY, 3210991554f2SKenneth D. Merry Mpi2DriverMap0Entry_t, MPI2_POINTER pMpi2DriverMap0Entry_t; 3211991554f2SKenneth D. Merry 3212991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_DRIVER_MAPPING_0 3213991554f2SKenneth D. Merry { 3214991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3215991554f2SKenneth D. Merry MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY Entry; /* 0x08 */ 3216991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_DRIVER_MAPPING_0, 3217991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_DRIVER_MAPPING_0, 3218991554f2SKenneth D. Merry Mpi2DriverMappingPage0_t, MPI2_POINTER pMpi2DriverMappingPage0_t; 3219991554f2SKenneth D. Merry 3220991554f2SKenneth D. Merry #define MPI2_DRIVERMAPPING0_PAGEVERSION (0x00) 3221991554f2SKenneth D. Merry 3222991554f2SKenneth D. Merry /* values for Driver Persistent Mapping Page 0 MappingInformation field */ 3223991554f2SKenneth D. Merry #define MPI2_DRVMAP0_MAPINFO_SLOT_MASK (0x07F0) 3224991554f2SKenneth D. Merry #define MPI2_DRVMAP0_MAPINFO_SLOT_SHIFT (4) 3225991554f2SKenneth D. Merry #define MPI2_DRVMAP0_MAPINFO_MISSING_MASK (0x000F) 3226991554f2SKenneth D. Merry 3227991554f2SKenneth D. Merry /**************************************************************************** 3228991554f2SKenneth D. Merry * Ethernet Config Pages 3229991554f2SKenneth D. Merry ****************************************************************************/ 3230991554f2SKenneth D. Merry 3231991554f2SKenneth D. Merry /* Ethernet Page 0 */ 3232991554f2SKenneth D. Merry 3233991554f2SKenneth D. Merry /* IP address (union of IPv4 and IPv6) */ 3234991554f2SKenneth D. Merry typedef union _MPI2_ETHERNET_IP_ADDR 3235991554f2SKenneth D. Merry { 3236991554f2SKenneth D. Merry U32 IPv4Addr; 3237991554f2SKenneth D. Merry U32 IPv6Addr[4]; 3238991554f2SKenneth D. Merry } MPI2_ETHERNET_IP_ADDR, MPI2_POINTER PTR_MPI2_ETHERNET_IP_ADDR, 3239991554f2SKenneth D. Merry Mpi2EthernetIpAddr_t, MPI2_POINTER pMpi2EthernetIpAddr_t; 3240991554f2SKenneth D. Merry 3241991554f2SKenneth D. Merry #define MPI2_ETHERNET_HOST_NAME_LENGTH (32) 3242991554f2SKenneth D. Merry 3243991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_ETHERNET_0 3244991554f2SKenneth D. Merry { 3245991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3246991554f2SKenneth D. Merry U8 NumInterfaces; /* 0x08 */ 3247991554f2SKenneth D. Merry U8 Reserved0; /* 0x09 */ 3248991554f2SKenneth D. Merry U16 Reserved1; /* 0x0A */ 3249991554f2SKenneth D. Merry U32 Status; /* 0x0C */ 3250991554f2SKenneth D. Merry U8 MediaState; /* 0x10 */ 3251991554f2SKenneth D. Merry U8 Reserved2; /* 0x11 */ 3252991554f2SKenneth D. Merry U16 Reserved3; /* 0x12 */ 3253991554f2SKenneth D. Merry U8 MacAddress[6]; /* 0x14 */ 3254991554f2SKenneth D. Merry U8 Reserved4; /* 0x1A */ 3255991554f2SKenneth D. Merry U8 Reserved5; /* 0x1B */ 3256991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR IpAddress; /* 0x1C */ 3257991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR SubnetMask; /* 0x2C */ 3258991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR GatewayIpAddress; /* 0x3C */ 3259991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR DNS1IpAddress; /* 0x4C */ 3260991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR DNS2IpAddress; /* 0x5C */ 3261991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR DhcpIpAddress; /* 0x6C */ 3262991554f2SKenneth D. Merry U8 HostName[MPI2_ETHERNET_HOST_NAME_LENGTH];/* 0x7C */ 3263991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_ETHERNET_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_ETHERNET_0, 3264991554f2SKenneth D. Merry Mpi2EthernetPage0_t, MPI2_POINTER pMpi2EthernetPage0_t; 3265991554f2SKenneth D. Merry 3266991554f2SKenneth D. Merry #define MPI2_ETHERNETPAGE0_PAGEVERSION (0x00) 3267991554f2SKenneth D. Merry 3268991554f2SKenneth D. Merry /* values for Ethernet Page 0 Status field */ 3269991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV6_CAPABLE (0x80000000) 3270991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV4_CAPABLE (0x40000000) 3271991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_CONSOLE_CONNECTED (0x20000000) 3272991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_DEFAULT_IF (0x00000100) 3273991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_FW_DWNLD_ENABLED (0x00000080) 3274991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_TELNET_ENABLED (0x00000040) 3275991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_SSH2_ENABLED (0x00000020) 3276991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_DHCP_CLIENT_ENABLED (0x00000010) 3277991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV6_ENABLED (0x00000008) 3278991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV4_ENABLED (0x00000004) 3279991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV6_ADDRESSES (0x00000002) 3280991554f2SKenneth D. Merry #define MPI2_ETHPG0_STATUS_ETH_IF_ENABLED (0x00000001) 3281991554f2SKenneth D. Merry 3282991554f2SKenneth D. Merry /* values for Ethernet Page 0 MediaState field */ 3283991554f2SKenneth D. Merry #define MPI2_ETHPG0_MS_DUPLEX_MASK (0x80) 3284991554f2SKenneth D. Merry #define MPI2_ETHPG0_MS_HALF_DUPLEX (0x00) 3285991554f2SKenneth D. Merry #define MPI2_ETHPG0_MS_FULL_DUPLEX (0x80) 3286991554f2SKenneth D. Merry 3287991554f2SKenneth D. Merry #define MPI2_ETHPG0_MS_CONNECT_SPEED_MASK (0x07) 3288991554f2SKenneth D. Merry #define MPI2_ETHPG0_MS_NOT_CONNECTED (0x00) 3289991554f2SKenneth D. Merry #define MPI2_ETHPG0_MS_10MBIT (0x01) 3290991554f2SKenneth D. Merry #define MPI2_ETHPG0_MS_100MBIT (0x02) 3291991554f2SKenneth D. Merry #define MPI2_ETHPG0_MS_1GBIT (0x03) 3292991554f2SKenneth D. Merry 3293991554f2SKenneth D. Merry /* Ethernet Page 1 */ 3294991554f2SKenneth D. Merry 3295991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_ETHERNET_1 3296991554f2SKenneth D. Merry { 3297991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3298991554f2SKenneth D. Merry U32 Reserved0; /* 0x08 */ 3299991554f2SKenneth D. Merry U32 Flags; /* 0x0C */ 3300991554f2SKenneth D. Merry U8 MediaState; /* 0x10 */ 3301991554f2SKenneth D. Merry U8 Reserved1; /* 0x11 */ 3302991554f2SKenneth D. Merry U16 Reserved2; /* 0x12 */ 3303991554f2SKenneth D. Merry U8 MacAddress[6]; /* 0x14 */ 3304991554f2SKenneth D. Merry U8 Reserved3; /* 0x1A */ 3305991554f2SKenneth D. Merry U8 Reserved4; /* 0x1B */ 3306991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticIpAddress; /* 0x1C */ 3307991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticSubnetMask; /* 0x2C */ 3308991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticGatewayIpAddress; /* 0x3C */ 3309991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticDNS1IpAddress; /* 0x4C */ 3310991554f2SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticDNS2IpAddress; /* 0x5C */ 3311991554f2SKenneth D. Merry U32 Reserved5; /* 0x6C */ 3312991554f2SKenneth D. Merry U32 Reserved6; /* 0x70 */ 3313991554f2SKenneth D. Merry U32 Reserved7; /* 0x74 */ 3314991554f2SKenneth D. Merry U32 Reserved8; /* 0x78 */ 3315991554f2SKenneth D. Merry U8 HostName[MPI2_ETHERNET_HOST_NAME_LENGTH];/* 0x7C */ 3316991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_ETHERNET_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_ETHERNET_1, 3317991554f2SKenneth D. Merry Mpi2EthernetPage1_t, MPI2_POINTER pMpi2EthernetPage1_t; 3318991554f2SKenneth D. Merry 3319991554f2SKenneth D. Merry #define MPI2_ETHERNETPAGE1_PAGEVERSION (0x00) 3320991554f2SKenneth D. Merry 3321991554f2SKenneth D. Merry /* values for Ethernet Page 1 Flags field */ 3322991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_SET_DEFAULT_IF (0x00000100) 3323991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_FW_DOWNLOAD (0x00000080) 3324991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_TELNET (0x00000040) 3325991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_SSH2 (0x00000020) 3326991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_DHCP_CLIENT (0x00000010) 3327991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_IPV6 (0x00000008) 3328991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_IPV4 (0x00000004) 3329991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_USE_IPV6_ADDRESSES (0x00000002) 3330991554f2SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_ETH_IF (0x00000001) 3331991554f2SKenneth D. Merry 3332991554f2SKenneth D. Merry /* values for Ethernet Page 1 MediaState field */ 3333991554f2SKenneth D. Merry #define MPI2_ETHPG1_MS_DUPLEX_MASK (0x80) 3334991554f2SKenneth D. Merry #define MPI2_ETHPG1_MS_HALF_DUPLEX (0x00) 3335991554f2SKenneth D. Merry #define MPI2_ETHPG1_MS_FULL_DUPLEX (0x80) 3336991554f2SKenneth D. Merry 3337991554f2SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_MASK (0x07) 3338991554f2SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_AUTO (0x00) 3339991554f2SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_10MBIT (0x01) 3340991554f2SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_100MBIT (0x02) 3341991554f2SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_1GBIT (0x03) 3342991554f2SKenneth D. Merry 3343991554f2SKenneth D. Merry /**************************************************************************** 3344991554f2SKenneth D. Merry * Extended Manufacturing Config Pages 3345991554f2SKenneth D. Merry ****************************************************************************/ 3346991554f2SKenneth D. Merry 3347991554f2SKenneth D. Merry /* 3348991554f2SKenneth D. Merry * Generic structure to use for product-specific extended manufacturing pages 3349991554f2SKenneth D. Merry * (currently Extended Manufacturing Page 40 through Extended Manufacturing 3350991554f2SKenneth D. Merry * Page 60). 3351991554f2SKenneth D. Merry */ 3352991554f2SKenneth D. Merry 3353991554f2SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_EXT_MAN_PS 3354991554f2SKenneth D. Merry { 3355991554f2SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 3356991554f2SKenneth D. Merry U32 ProductSpecificInfo; /* 0x08 */ 3357991554f2SKenneth D. Merry } MPI2_CONFIG_PAGE_EXT_MAN_PS, 3358991554f2SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_EXT_MAN_PS, 3359991554f2SKenneth D. Merry Mpi2ExtManufacturingPagePS_t, MPI2_POINTER pMpi2ExtManufacturingPagePS_t; 3360991554f2SKenneth D. Merry 3361991554f2SKenneth D. Merry /* PageVersion should be provided by product-specific code */ 3362991554f2SKenneth D. Merry 336367feec50SStephen McConnell /**************************************************************************** 336467feec50SStephen McConnell * values for fields used by several types of PCIe Config Pages 336567feec50SStephen McConnell ****************************************************************************/ 336667feec50SStephen McConnell 336767feec50SStephen McConnell /* values for NegotiatedLinkRates fields */ 336867feec50SStephen McConnell #define MPI26_PCIE_NEG_LINK_RATE_MASK_PHYSICAL (0x0F) 336967feec50SStephen McConnell /* link rates used for Negotiated Physical Link Rate */ 337067feec50SStephen McConnell #define MPI26_PCIE_NEG_LINK_RATE_UNKNOWN (0x00) 337167feec50SStephen McConnell #define MPI26_PCIE_NEG_LINK_RATE_PHY_DISABLED (0x01) 337267feec50SStephen McConnell #define MPI26_PCIE_NEG_LINK_RATE_2_5 (0x02) 337367feec50SStephen McConnell #define MPI26_PCIE_NEG_LINK_RATE_5_0 (0x03) 337467feec50SStephen McConnell #define MPI26_PCIE_NEG_LINK_RATE_8_0 (0x04) 337567feec50SStephen McConnell #define MPI26_PCIE_NEG_LINK_RATE_16_0 (0x05) 337667feec50SStephen McConnell 337767feec50SStephen McConnell /**************************************************************************** 337867feec50SStephen McConnell * PCIe IO Unit Config Pages (MPI v2.6 and later) 337967feec50SStephen McConnell ****************************************************************************/ 338067feec50SStephen McConnell 338167feec50SStephen McConnell /* PCIe IO Unit Page 0 */ 338267feec50SStephen McConnell 338367feec50SStephen McConnell typedef struct _MPI26_PCIE_IO_UNIT0_PHY_DATA 338467feec50SStephen McConnell { 338567feec50SStephen McConnell U8 Link; /* 0x00 */ 338667feec50SStephen McConnell U8 LinkFlags; /* 0x01 */ 338767feec50SStephen McConnell U8 PhyFlags; /* 0x02 */ 338867feec50SStephen McConnell U8 NegotiatedLinkRate; /* 0x03 */ 338967feec50SStephen McConnell U32 ControllerPhyDeviceInfo;/* 0x04 */ 339067feec50SStephen McConnell U16 AttachedDevHandle; /* 0x08 */ 339167feec50SStephen McConnell U16 ControllerDevHandle; /* 0x0A */ 339267feec50SStephen McConnell U32 EnumerationStatus; /* 0x0C */ 339367feec50SStephen McConnell U32 Reserved1; /* 0x10 */ 339467feec50SStephen McConnell } MPI26_PCIE_IO_UNIT0_PHY_DATA, MPI2_POINTER PTR_MPI26_PCIE_IO_UNIT0_PHY_DATA, 339567feec50SStephen McConnell Mpi26PCIeIOUnit0PhyData_t, MPI2_POINTER pMpi26PCIeIOUnit0PhyData_t; 339667feec50SStephen McConnell 339767feec50SStephen McConnell /* 339867feec50SStephen McConnell * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 339967feec50SStephen McConnell * one and check the value returned for NumPhys at runtime. 340067feec50SStephen McConnell */ 340167feec50SStephen McConnell #ifndef MPI26_PCIE_IOUNIT0_PHY_MAX 340267feec50SStephen McConnell #define MPI26_PCIE_IOUNIT0_PHY_MAX (1) 340367feec50SStephen McConnell #endif 340467feec50SStephen McConnell 340567feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PIOUNIT_0 340667feec50SStephen McConnell { 340767feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 340867feec50SStephen McConnell U32 Reserved1; /* 0x08 */ 340967feec50SStephen McConnell U8 NumPhys; /* 0x0C */ 341067feec50SStephen McConnell U8 InitStatus; /* 0x0D */ 341167feec50SStephen McConnell U16 Reserved3; /* 0x0E */ 341267feec50SStephen McConnell MPI26_PCIE_IO_UNIT0_PHY_DATA PhyData[MPI26_PCIE_IOUNIT0_PHY_MAX]; /* 0x10 */ 341367feec50SStephen McConnell } MPI26_CONFIG_PAGE_PIOUNIT_0, 341467feec50SStephen McConnell MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PIOUNIT_0, 341567feec50SStephen McConnell Mpi26PCIeIOUnitPage0_t, MPI2_POINTER pMpi26PCIeIOUnitPage0_t; 341667feec50SStephen McConnell 341767feec50SStephen McConnell #define MPI26_PCIEIOUNITPAGE0_PAGEVERSION (0x00) 341867feec50SStephen McConnell 341967feec50SStephen McConnell /* values for PCIe IO Unit Page 0 LinkFlags */ 342067feec50SStephen McConnell #define MPI26_PCIEIOUNIT0_LINKFLAGS_ENUMERATION_IN_PROGRESS (0x08) 342167feec50SStephen McConnell 342267feec50SStephen McConnell /* values for PCIe IO Unit Page 0 PhyFlags */ 342367feec50SStephen McConnell #define MPI26_PCIEIOUNIT0_PHYFLAGS_PHY_DISABLED (0x08) 342467feec50SStephen McConnell 342567feec50SStephen McConnell /* use MPI26_PCIE_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 342667feec50SStephen McConnell 342767feec50SStephen McConnell /* see mpi2_pci.h for values for PCIe IO Unit Page 0 ControllerPhyDeviceInfo values */ 342867feec50SStephen McConnell 342967feec50SStephen McConnell /* values for PCIe IO Unit Page 0 EnumerationStatus */ 343067feec50SStephen McConnell #define MPI26_PCIEIOUNIT0_ES_MAX_SWITCHES_EXCEEDED (0x40000000) 343167feec50SStephen McConnell #define MPI26_PCIEIOUNIT0_ES_MAX_DEVICES_EXCEEDED (0x20000000) 343267feec50SStephen McConnell 343367feec50SStephen McConnell /* PCIe IO Unit Page 1 */ 343467feec50SStephen McConnell 343567feec50SStephen McConnell typedef struct _MPI26_PCIE_IO_UNIT1_PHY_DATA 343667feec50SStephen McConnell { 343767feec50SStephen McConnell U8 Link; /* 0x00 */ 343867feec50SStephen McConnell U8 LinkFlags; /* 0x01 */ 343967feec50SStephen McConnell U8 PhyFlags; /* 0x02 */ 344067feec50SStephen McConnell U8 MaxMinLinkRate; /* 0x03 */ 344167feec50SStephen McConnell U32 ControllerPhyDeviceInfo; /* 0x04 */ 344267feec50SStephen McConnell U32 Reserved1; /* 0x08 */ 344367feec50SStephen McConnell } MPI26_PCIE_IO_UNIT1_PHY_DATA, MPI2_POINTER PTR_MPI26_PCIE_IO_UNIT1_PHY_DATA, 344467feec50SStephen McConnell Mpi26PCIeIOUnit1PhyData_t, MPI2_POINTER pMpi26PCIeIOUnit1PhyData_t; 344567feec50SStephen McConnell 344667feec50SStephen McConnell /* values for LinkFlags */ 3447*8736c018SKashyap D Desai #define MPI26_PCIEIOUNIT1_LINKFLAGS_DIS_SEPARATE_REFCLK (0x00) 3448*8736c018SKashyap D Desai #define MPI26_PCIEIOUNIT1_LINKFLAGS_SRIS_EN (0x01) 3449*8736c018SKashyap D Desai #define MPI26_PCIEIOUNIT1_LINKFLAGS_SRNS_EN (0x02) 345067feec50SStephen McConnell 345167feec50SStephen McConnell /* 345267feec50SStephen McConnell * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 345367feec50SStephen McConnell * one and check the value returned for NumPhys at runtime. 345467feec50SStephen McConnell */ 345567feec50SStephen McConnell #ifndef MPI26_PCIE_IOUNIT1_PHY_MAX 345667feec50SStephen McConnell #define MPI26_PCIE_IOUNIT1_PHY_MAX (1) 345767feec50SStephen McConnell #endif 345867feec50SStephen McConnell 345967feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PIOUNIT_1 346067feec50SStephen McConnell { 346167feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 346267feec50SStephen McConnell U16 ControlFlags; /* 0x08 */ 346367feec50SStephen McConnell U16 Reserved; /* 0x0A */ 346467feec50SStephen McConnell U16 AdditionalControlFlags; /* 0x0C */ 346567feec50SStephen McConnell U16 NVMeMaxQueueDepth; /* 0x0E */ 346667feec50SStephen McConnell U8 NumPhys; /* 0x10 */ 3467*8736c018SKashyap D Desai U8 DMDReportPCIe; /* 0x11 */ 346867feec50SStephen McConnell U16 Reserved2; /* 0x12 */ 346967feec50SStephen McConnell MPI26_PCIE_IO_UNIT1_PHY_DATA PhyData[MPI26_PCIE_IOUNIT1_PHY_MAX];/* 0x14 */ 347067feec50SStephen McConnell } MPI26_CONFIG_PAGE_PIOUNIT_1, 347167feec50SStephen McConnell MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PIOUNIT_1, 347267feec50SStephen McConnell Mpi26PCIeIOUnitPage1_t, MPI2_POINTER pMpi26PCIeIOUnitPage1_t; 347367feec50SStephen McConnell 347467feec50SStephen McConnell #define MPI26_PCIEIOUNITPAGE1_PAGEVERSION (0x00) 347567feec50SStephen McConnell 347667feec50SStephen McConnell /* values for PCIe IO Unit Page 1 PhyFlags */ 347767feec50SStephen McConnell #define MPI26_PCIEIOUNIT1_PHYFLAGS_PHY_DISABLE (0x08) 347867feec50SStephen McConnell #define MPI26_PCIEIOUNIT1_PHYFLAGS_ENDPOINT_ONLY (0x01) 347967feec50SStephen McConnell 348067feec50SStephen McConnell /* values for PCIe IO Unit Page 1 MaxMinLinkRate */ 348167feec50SStephen McConnell #define MPI26_PCIEIOUNIT1_MAX_RATE_MASK (0xF0) 348267feec50SStephen McConnell #define MPI26_PCIEIOUNIT1_MAX_RATE_SHIFT (4) 348367feec50SStephen McConnell #define MPI26_PCIEIOUNIT1_MAX_RATE_2_5 (0x20) 348467feec50SStephen McConnell #define MPI26_PCIEIOUNIT1_MAX_RATE_5_0 (0x30) 348567feec50SStephen McConnell #define MPI26_PCIEIOUNIT1_MAX_RATE_8_0 (0x40) 348667feec50SStephen McConnell #define MPI26_PCIEIOUNIT1_MAX_RATE_16_0 (0x50) 348767feec50SStephen McConnell 3488*8736c018SKashyap D Desai /* values for PCIe IO Unit Page 1 DMDReportPCIe */ 3489*8736c018SKashyap D Desai #define MPI26_PCIEIOUNIT1_DMD_REPORT_UNITS_MASK (0x80) 3490*8736c018SKashyap D Desai #define MPI26_PCIEIOUNIT1_DMD_REPORT_UNITS_1_SEC (0x00) 3491*8736c018SKashyap D Desai #define MPI26_PCIEIOUNIT1_DMD_REPORT_UNITS_16_SEC (0x80) 3492*8736c018SKashyap D Desai #define MPI26_PCIEIOUNIT1_DMD_REPORT_DELAY_TIME_MASK (0x7F) 3493*8736c018SKashyap D Desai 349467feec50SStephen McConnell /* see mpi2_pci.h for values for PCIe IO Unit Page 0 ControllerPhyDeviceInfo values */ 349567feec50SStephen McConnell 349667feec50SStephen McConnell /**************************************************************************** 349767feec50SStephen McConnell * PCIe Switch Config Pages (MPI v2.6 and later) 349867feec50SStephen McConnell ****************************************************************************/ 349967feec50SStephen McConnell 350067feec50SStephen McConnell /* PCIe Switch Page 0 */ 350167feec50SStephen McConnell 350267feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PSWITCH_0 350367feec50SStephen McConnell { 350467feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 350567feec50SStephen McConnell U8 PhysicalPort; /* 0x08 */ 350667feec50SStephen McConnell U8 Reserved1; /* 0x09 */ 350767feec50SStephen McConnell U16 Reserved2; /* 0x0A */ 350867feec50SStephen McConnell U16 DevHandle; /* 0x0C */ 350967feec50SStephen McConnell U16 ParentDevHandle; /* 0x0E */ 351067feec50SStephen McConnell U8 NumPorts; /* 0x10 */ 351167feec50SStephen McConnell U8 PCIeLevel; /* 0x11 */ 351267feec50SStephen McConnell U16 Reserved3; /* 0x12 */ 351367feec50SStephen McConnell U32 Reserved4; /* 0x14 */ 351467feec50SStephen McConnell U32 Reserved5; /* 0x18 */ 351567feec50SStephen McConnell U32 Reserved6; /* 0x1C */ 351667feec50SStephen McConnell } MPI26_CONFIG_PAGE_PSWITCH_0, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PSWITCH_0, 351767feec50SStephen McConnell Mpi26PCIeSwitchPage0_t, MPI2_POINTER pMpi26PCIeSwitchPage0_t; 351867feec50SStephen McConnell 351967feec50SStephen McConnell #define MPI26_PCIESWITCH0_PAGEVERSION (0x00) 352067feec50SStephen McConnell 352167feec50SStephen McConnell /* PCIe Switch Page 1 */ 352267feec50SStephen McConnell 352367feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PSWITCH_1 352467feec50SStephen McConnell { 352567feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 352667feec50SStephen McConnell U8 PhysicalPort; /* 0x08 */ 352767feec50SStephen McConnell U8 Reserved1; /* 0x09 */ 352867feec50SStephen McConnell U16 Reserved2; /* 0x0A */ 352967feec50SStephen McConnell U8 NumPorts; /* 0x0C */ 353067feec50SStephen McConnell U8 PortNum; /* 0x0D */ 353167feec50SStephen McConnell U16 AttachedDevHandle; /* 0x0E */ 353267feec50SStephen McConnell U16 SwitchDevHandle; /* 0x10 */ 353367feec50SStephen McConnell U8 NegotiatedPortWidth; /* 0x12 */ 353467feec50SStephen McConnell U8 NegotiatedLinkRate; /* 0x13 */ 3535*8736c018SKashyap D Desai U16 Flags; /* 0x14 */ 3536*8736c018SKashyap D Desai U16 Reserved4; /* 0x16 */ 353767feec50SStephen McConnell U32 Reserved5; /* 0x18 */ 353867feec50SStephen McConnell } MPI26_CONFIG_PAGE_PSWITCH_1, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PSWITCH_1, 353967feec50SStephen McConnell Mpi26PCIeSwitchPage1_t, MPI2_POINTER pMpi26PCIeSwitchPage1_t; 354067feec50SStephen McConnell 354167feec50SStephen McConnell #define MPI26_PCIESWITCH1_PAGEVERSION (0x00) 354267feec50SStephen McConnell 354367feec50SStephen McConnell /* use MPI26_PCIE_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 354467feec50SStephen McConnell 3545*8736c018SKashyap D Desai /* defines for the Flags field */ 3546*8736c018SKashyap D Desai #define MPI26_PCIESWITCH1_2_RETIMER_PRESENCE (0x0002) 3547*8736c018SKashyap D Desai #define MPI26_PCIESWITCH1_RETIMER_PRESENCE (0x0001) 3548*8736c018SKashyap D Desai 354967feec50SStephen McConnell /**************************************************************************** 355067feec50SStephen McConnell * PCIe Device Config Pages (MPI v2.6 and later) 355167feec50SStephen McConnell ****************************************************************************/ 355267feec50SStephen McConnell 355367feec50SStephen McConnell /* PCIe Device Page 0 */ 355467feec50SStephen McConnell 355567feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PCIEDEV_0 355667feec50SStephen McConnell { 355767feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 355867feec50SStephen McConnell U16 Slot; /* 0x08 */ 355967feec50SStephen McConnell U16 EnclosureHandle; /* 0x0A */ 356067feec50SStephen McConnell U64 WWID; /* 0x0C */ 356167feec50SStephen McConnell U16 ParentDevHandle; /* 0x14 */ 356267feec50SStephen McConnell U8 PortNum; /* 0x16 */ 356367feec50SStephen McConnell U8 AccessStatus; /* 0x17 */ 356467feec50SStephen McConnell U16 DevHandle; /* 0x18 */ 356567feec50SStephen McConnell U8 PhysicalPort; /* 0x1A */ 356667feec50SStephen McConnell U8 Reserved1; /* 0x1B */ 356767feec50SStephen McConnell U32 DeviceInfo; /* 0x1C */ 356867feec50SStephen McConnell U32 Flags; /* 0x20 */ 356967feec50SStephen McConnell U8 SupportedLinkRates; /* 0x24 */ 357067feec50SStephen McConnell U8 MaxPortWidth; /* 0x25 */ 357167feec50SStephen McConnell U8 NegotiatedPortWidth; /* 0x26 */ 357267feec50SStephen McConnell U8 NegotiatedLinkRate; /* 0x27 */ 357367feec50SStephen McConnell U8 EnclosureLevel; /* 0x28 */ 357467feec50SStephen McConnell U8 Reserved2; /* 0x29 */ 357567feec50SStephen McConnell U16 Reserved3; /* 0x2A */ 357667feec50SStephen McConnell U8 ConnectorName[4]; /* 0x2C */ 357767feec50SStephen McConnell U32 Reserved4; /* 0x30 */ 357867feec50SStephen McConnell U32 Reserved5; /* 0x34 */ 357967feec50SStephen McConnell } MPI26_CONFIG_PAGE_PCIEDEV_0, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIEDEV_0, 358067feec50SStephen McConnell Mpi26PCIeDevicePage0_t, MPI2_POINTER pMpi26PCIeDevicePage0_t; 358167feec50SStephen McConnell 358267feec50SStephen McConnell #define MPI26_PCIEDEVICE0_PAGEVERSION (0x01) 358367feec50SStephen McConnell 358467feec50SStephen McConnell /* values for PCIe Device Page 0 AccessStatus field */ 358567feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NO_ERRORS (0x00) 358667feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NEEDS_INITIALIZATION (0x04) 358767feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_CAPABILITY_FAILED (0x02) 358867feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_DEVICE_BLOCKED (0x07) 358967feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_MEMORY_SPACE_ACCESS_FAILED (0x08) 359067feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_UNSUPPORTED_DEVICE (0x09) 359167feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_MSIX_REQUIRED (0x0A) 359267feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_UNKNOWN (0x10) 359367feec50SStephen McConnell 359467feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_READY_TIMEOUT (0x30) 359567feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_DEVCFG_UNSUPPORTED (0x31) 359667feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_IDENTIFY_FAILED (0x32) 359767feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_QCONFIG_FAILED (0x33) 359867feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_QCREATION_FAILED (0x34) 359967feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_EVENTCFG_FAILED (0x35) 360067feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_GET_FEATURE_STAT_FAILED (0x36) 360167feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_IDLE_TIMEOUT (0x37) 360267feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_NVME_FAILURE_STATUS (0x38) 360367feec50SStephen McConnell 360467feec50SStephen McConnell #define MPI26_PCIEDEV0_ASTATUS_INIT_FAIL_MAX (0x3F) 360567feec50SStephen McConnell 360667feec50SStephen McConnell /* see mpi2_pci.h for the MPI26_PCIE_DEVINFO_ defines used for the DeviceInfo field */ 360767feec50SStephen McConnell 360867feec50SStephen McConnell /* values for PCIe Device Page 0 Flags field */ 3609*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_2_RETIMER_PRESENCE (0x00020000) 3610*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_RETIMER_PRESENCE (0x00010000) 3611*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_UNAUTHORIZED_DEVICE (0x00008000) 3612*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_ENABLED_FAST_PATH (0x00004000) 3613*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_FAST_PATH_CAPABLE (0x00002000) 3614*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_ASYNCHRONOUS_NOTIFICATION (0x00000400) 3615*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_ATA_SW_PRESERVATION (0x00000200) 3616*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_UNSUPPORTED_DEVICE (0x00000100) 3617*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_ATA_48BIT_LBA_SUPPORTED (0x00000080) 3618*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_ATA_SMART_SUPPORTED (0x00000040) 3619*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_ATA_NCQ_SUPPORTED (0x00000020) 3620*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_ATA_FUA_SUPPORTED (0x00000010) 3621*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_ENCL_LEVEL_VALID (0x00000002) 3622*8736c018SKashyap D Desai #define MPI26_PCIEDEV0_FLAGS_DEVICE_PRESENT (0x00000001) 362367feec50SStephen McConnell 362467feec50SStephen McConnell /* values for PCIe Device Page 0 SupportedLinkRates field */ 362567feec50SStephen McConnell #define MPI26_PCIEDEV0_LINK_RATE_16_0_SUPPORTED (0x08) 362667feec50SStephen McConnell #define MPI26_PCIEDEV0_LINK_RATE_8_0_SUPPORTED (0x04) 362767feec50SStephen McConnell #define MPI26_PCIEDEV0_LINK_RATE_5_0_SUPPORTED (0x02) 362867feec50SStephen McConnell #define MPI26_PCIEDEV0_LINK_RATE_2_5_SUPPORTED (0x01) 362967feec50SStephen McConnell 363067feec50SStephen McConnell /* use MPI26_PCIE_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 363167feec50SStephen McConnell 363267feec50SStephen McConnell /* PCIe Device Page 2 */ 363367feec50SStephen McConnell 363467feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PCIEDEV_2 363567feec50SStephen McConnell { 363667feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 363767feec50SStephen McConnell U16 DevHandle; /* 0x08 */ 3638*8736c018SKashyap D Desai U8 ControllerResetTO; /* 0x0A */ 3639*8736c018SKashyap D Desai U8 Reserved1; /* 0x0B */ 364067feec50SStephen McConnell U32 MaximumDataTransferSize;/* 0x0C */ 364167feec50SStephen McConnell U32 Capabilities; /* 0x10 */ 3642*8736c018SKashyap D Desai U16 NOIOB; /* 0x14 */ 3643*8736c018SKashyap D Desai U16 Reserved2; /* 0x16 */ 364467feec50SStephen McConnell } MPI26_CONFIG_PAGE_PCIEDEV_2, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIEDEV_2, 364567feec50SStephen McConnell Mpi26PCIeDevicePage2_t, MPI2_POINTER pMpi26PCIeDevicePage2_t; 364667feec50SStephen McConnell 3647*8736c018SKashyap D Desai #define MPI26_PCIEDEVICE2_PAGEVERSION (0x01) 364867feec50SStephen McConnell 364967feec50SStephen McConnell /* defines for PCIe Device Page 2 Capabilities field */ 3650*8736c018SKashyap D Desai #define MPI26_PCIEDEV2_CAP_DATA_BLK_ALIGN_AND_GRAN (0x00000008) 365167feec50SStephen McConnell #define MPI26_PCIEDEV2_CAP_SGL_FORMAT (0x00000004) 365267feec50SStephen McConnell #define MPI26_PCIEDEV2_CAP_BIT_BUCKET_SUPPORT (0x00000002) 365367feec50SStephen McConnell #define MPI26_PCIEDEV2_CAP_SGL_SUPPORT (0x00000001) 365467feec50SStephen McConnell 3655*8736c018SKashyap D Desai /* Defines for the NOIOB field */ 3656*8736c018SKashyap D Desai #define MPI26_PCIEDEV2_NOIOB_UNSUPPORTED (0x0000) 3657*8736c018SKashyap D Desai 365867feec50SStephen McConnell /**************************************************************************** 365967feec50SStephen McConnell * PCIe Link Config Pages (MPI v2.6 and later) 366067feec50SStephen McConnell ****************************************************************************/ 366167feec50SStephen McConnell 366267feec50SStephen McConnell /* PCIe Link Page 1 */ 366367feec50SStephen McConnell 366467feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PCIELINK_1 366567feec50SStephen McConnell { 366667feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 366767feec50SStephen McConnell U8 Link; /* 0x08 */ 366867feec50SStephen McConnell U8 Reserved1; /* 0x09 */ 366967feec50SStephen McConnell U16 Reserved2; /* 0x0A */ 367067feec50SStephen McConnell U32 CorrectableErrorCount; /* 0x0C */ 367167feec50SStephen McConnell U16 NonFatalErrorCount; /* 0x10 */ 367267feec50SStephen McConnell U16 Reserved3; /* 0x12 */ 367367feec50SStephen McConnell U16 FatalErrorCount; /* 0x14 */ 367467feec50SStephen McConnell U16 Reserved4; /* 0x16 */ 367567feec50SStephen McConnell } MPI26_CONFIG_PAGE_PCIELINK_1, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIELINK_1, 367667feec50SStephen McConnell Mpi26PcieLinkPage1_t, MPI2_POINTER pMpi26PcieLinkPage1_t; 367767feec50SStephen McConnell 367867feec50SStephen McConnell #define MPI26_PCIELINK1_PAGEVERSION (0x00) 367967feec50SStephen McConnell 368067feec50SStephen McConnell /* PCIe Link Page 2 */ 368167feec50SStephen McConnell 368267feec50SStephen McConnell typedef struct _MPI26_PCIELINK2_LINK_EVENT 368367feec50SStephen McConnell { 368467feec50SStephen McConnell U8 LinkEventCode; /* 0x00 */ 368567feec50SStephen McConnell U8 Reserved1; /* 0x01 */ 368667feec50SStephen McConnell U16 Reserved2; /* 0x02 */ 368767feec50SStephen McConnell U32 LinkEventInfo; /* 0x04 */ 368867feec50SStephen McConnell } MPI26_PCIELINK2_LINK_EVENT, MPI2_POINTER PTR_MPI26_PCIELINK2_LINK_EVENT, 368967feec50SStephen McConnell Mpi26PcieLink2LinkEvent_t, MPI2_POINTER pMpi26PcieLink2LinkEvent_t; 369067feec50SStephen McConnell 369167feec50SStephen McConnell /* use MPI26_PCIELINK3_EVTCODE_ for the LinkEventCode field */ 369267feec50SStephen McConnell 369367feec50SStephen McConnell /* 369467feec50SStephen McConnell * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 369567feec50SStephen McConnell * one and check the value returned for NumLinkEvents at runtime. 369667feec50SStephen McConnell */ 369767feec50SStephen McConnell #ifndef MPI26_PCIELINK2_LINK_EVENT_MAX 369867feec50SStephen McConnell #define MPI26_PCIELINK2_LINK_EVENT_MAX (1) 369967feec50SStephen McConnell #endif 370067feec50SStephen McConnell 370167feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PCIELINK_2 370267feec50SStephen McConnell { 370367feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 370467feec50SStephen McConnell U8 Link; /* 0x08 */ 370567feec50SStephen McConnell U8 Reserved1; /* 0x09 */ 370667feec50SStephen McConnell U16 Reserved2; /* 0x0A */ 370767feec50SStephen McConnell U8 NumLinkEvents; /* 0x0C */ 370867feec50SStephen McConnell U8 Reserved3; /* 0x0D */ 370967feec50SStephen McConnell U16 Reserved4; /* 0x0E */ 371067feec50SStephen McConnell MPI26_PCIELINK2_LINK_EVENT LinkEvent[MPI26_PCIELINK2_LINK_EVENT_MAX]; /* 0x10 */ 371167feec50SStephen McConnell } MPI26_CONFIG_PAGE_PCIELINK_2, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIELINK_2, 371267feec50SStephen McConnell Mpi26PcieLinkPage2_t, MPI2_POINTER pMpi26PcieLinkPage2_t; 371367feec50SStephen McConnell 371467feec50SStephen McConnell #define MPI26_PCIELINK2_PAGEVERSION (0x00) 371567feec50SStephen McConnell 371667feec50SStephen McConnell /* PCIe Link Page 3 */ 371767feec50SStephen McConnell 371867feec50SStephen McConnell typedef struct _MPI26_PCIELINK3_LINK_EVENT_CONFIG 371967feec50SStephen McConnell { 372067feec50SStephen McConnell U8 LinkEventCode; /* 0x00 */ 372167feec50SStephen McConnell U8 Reserved1; /* 0x01 */ 372267feec50SStephen McConnell U16 Reserved2; /* 0x02 */ 372367feec50SStephen McConnell U8 CounterType; /* 0x04 */ 372467feec50SStephen McConnell U8 ThresholdWindow; /* 0x05 */ 372567feec50SStephen McConnell U8 TimeUnits; /* 0x06 */ 372667feec50SStephen McConnell U8 Reserved3; /* 0x07 */ 372767feec50SStephen McConnell U32 EventThreshold; /* 0x08 */ 372867feec50SStephen McConnell U16 ThresholdFlags; /* 0x0C */ 372967feec50SStephen McConnell U16 Reserved4; /* 0x0E */ 373067feec50SStephen McConnell } MPI26_PCIELINK3_LINK_EVENT_CONFIG, MPI2_POINTER PTR_MPI26_PCIELINK3_LINK_EVENT_CONFIG, 373167feec50SStephen McConnell Mpi26PcieLink3LinkEventConfig_t, MPI2_POINTER pMpi26PcieLink3LinkEventConfig_t; 373267feec50SStephen McConnell 373367feec50SStephen McConnell /* values for LinkEventCode field */ 373467feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_NO_EVENT (0x00) 373567feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_CORRECTABLE_ERROR_RECEIVED (0x01) 373667feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_NON_FATAL_ERROR_RECEIVED (0x02) 373767feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_FATAL_ERROR_RECEIVED (0x03) 373867feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_DATA_LINK_ERROR_DETECTED (0x04) 373967feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_TRANSACTION_LAYER_ERROR_DETECTED (0x05) 374067feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_TLP_ECRC_ERROR_DETECTED (0x06) 374167feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_POISONED_TLP (0x07) 374267feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_RECEIVED_NAK_DLLP (0x08) 374367feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_SENT_NAK_DLLP (0x09) 374467feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_LTSSM_RECOVERY_STATE (0x0A) 374567feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_LTSSM_RXL0S_STATE (0x0B) 374667feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_LTSSM_TXL0S_STATE (0x0C) 374767feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_LTSSM_L1_STATE (0x0D) 374867feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_LTSSM_DISABLED_STATE (0x0E) 374967feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_LTSSM_HOT_RESET_STATE (0x0F) 375067feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_SYSTEM_ERROR (0x10) 375167feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_DECODE_ERROR (0x11) 375267feec50SStephen McConnell #define MPI26_PCIELINK3_EVTCODE_DISPARITY_ERROR (0x12) 375367feec50SStephen McConnell 375467feec50SStephen McConnell /* values for the CounterType field */ 375567feec50SStephen McConnell #define MPI26_PCIELINK3_COUNTER_TYPE_WRAPPING (0x00) 375667feec50SStephen McConnell #define MPI26_PCIELINK3_COUNTER_TYPE_SATURATING (0x01) 375767feec50SStephen McConnell #define MPI26_PCIELINK3_COUNTER_TYPE_PEAK_VALUE (0x02) 375867feec50SStephen McConnell 375967feec50SStephen McConnell /* values for the TimeUnits field */ 376067feec50SStephen McConnell #define MPI26_PCIELINK3_TM_UNITS_10_MICROSECONDS (0x00) 376167feec50SStephen McConnell #define MPI26_PCIELINK3_TM_UNITS_100_MICROSECONDS (0x01) 376267feec50SStephen McConnell #define MPI26_PCIELINK3_TM_UNITS_1_MILLISECOND (0x02) 376367feec50SStephen McConnell #define MPI26_PCIELINK3_TM_UNITS_10_MILLISECONDS (0x03) 376467feec50SStephen McConnell 376567feec50SStephen McConnell /* values for the ThresholdFlags field */ 376667feec50SStephen McConnell #define MPI26_PCIELINK3_TFLAGS_EVENT_NOTIFY (0x0001) 376767feec50SStephen McConnell 376867feec50SStephen McConnell /* 376967feec50SStephen McConnell * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 377067feec50SStephen McConnell * one and check the value returned for NumLinkEvents at runtime. 377167feec50SStephen McConnell */ 377267feec50SStephen McConnell #ifndef MPI26_PCIELINK3_LINK_EVENT_MAX 377367feec50SStephen McConnell #define MPI26_PCIELINK3_LINK_EVENT_MAX (1) 377467feec50SStephen McConnell #endif 377567feec50SStephen McConnell 377667feec50SStephen McConnell typedef struct _MPI26_CONFIG_PAGE_PCIELINK_3 377767feec50SStephen McConnell { 377867feec50SStephen McConnell MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 377967feec50SStephen McConnell U8 Link; /* 0x08 */ 378067feec50SStephen McConnell U8 Reserved1; /* 0x09 */ 378167feec50SStephen McConnell U16 Reserved2; /* 0x0A */ 378267feec50SStephen McConnell U8 NumLinkEvents; /* 0x0C */ 378367feec50SStephen McConnell U8 Reserved3; /* 0x0D */ 378467feec50SStephen McConnell U16 Reserved4; /* 0x0E */ 378567feec50SStephen McConnell MPI26_PCIELINK3_LINK_EVENT_CONFIG LinkEventConfig[MPI26_PCIELINK3_LINK_EVENT_MAX]; /* 0x10 */ 378667feec50SStephen McConnell } MPI26_CONFIG_PAGE_PCIELINK_3, MPI2_POINTER PTR_MPI26_CONFIG_PAGE_PCIELINK_3, 378767feec50SStephen McConnell Mpi26PcieLinkPage3_t, MPI2_POINTER pMpi26PcieLinkPage3_t; 378867feec50SStephen McConnell 378967feec50SStephen McConnell #define MPI26_PCIELINK3_PAGEVERSION (0x00) 379067feec50SStephen McConnell 3791991554f2SKenneth D. Merry #endif 3792