1*d3c7b9a0SKenneth D. Merry /* $FreeBSD$ */ 2*d3c7b9a0SKenneth D. Merry /* 3*d3c7b9a0SKenneth D. Merry * Copyright (c) 2000-2009 LSI Corporation. 4*d3c7b9a0SKenneth D. Merry * 5*d3c7b9a0SKenneth D. Merry * 6*d3c7b9a0SKenneth D. Merry * Name: mpi2_cnfg.h 7*d3c7b9a0SKenneth D. Merry * Title: MPI Configuration messages and pages 8*d3c7b9a0SKenneth D. Merry * Creation Date: November 10, 2006 9*d3c7b9a0SKenneth D. Merry * 10*d3c7b9a0SKenneth D. Merry * mpi2_cnfg.h Version: 02.00.13 11*d3c7b9a0SKenneth D. Merry * 12*d3c7b9a0SKenneth D. Merry * Version History 13*d3c7b9a0SKenneth D. Merry * --------------- 14*d3c7b9a0SKenneth D. Merry * 15*d3c7b9a0SKenneth D. Merry * Date Version Description 16*d3c7b9a0SKenneth D. Merry * -------- -------- ------------------------------------------------------ 17*d3c7b9a0SKenneth D. Merry * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 18*d3c7b9a0SKenneth D. Merry * 06-04-07 02.00.01 Added defines for SAS IO Unit Page 2 PhyFlags. 19*d3c7b9a0SKenneth D. Merry * Added Manufacturing Page 11. 20*d3c7b9a0SKenneth D. Merry * Added MPI2_SAS_EXPANDER0_FLAGS_CONNECTOR_END_DEVICE 21*d3c7b9a0SKenneth D. Merry * define. 22*d3c7b9a0SKenneth D. Merry * 06-26-07 02.00.02 Adding generic structure for product-specific 23*d3c7b9a0SKenneth D. Merry * Manufacturing pages: MPI2_CONFIG_PAGE_MANUFACTURING_PS. 24*d3c7b9a0SKenneth D. Merry * Rework of BIOS Page 2 configuration page. 25*d3c7b9a0SKenneth D. Merry * Fixed MPI2_BIOSPAGE2_BOOT_DEVICE to be a union of the 26*d3c7b9a0SKenneth D. Merry * forms. 27*d3c7b9a0SKenneth D. Merry * Added configuration pages IOC Page 8 and Driver 28*d3c7b9a0SKenneth D. Merry * Persistent Mapping Page 0. 29*d3c7b9a0SKenneth D. Merry * 08-31-07 02.00.03 Modified configuration pages dealing with Integrated 30*d3c7b9a0SKenneth D. Merry * RAID (Manufacturing Page 4, RAID Volume Pages 0 and 1, 31*d3c7b9a0SKenneth D. Merry * RAID Physical Disk Pages 0 and 1, RAID Configuration 32*d3c7b9a0SKenneth D. Merry * Page 0). 33*d3c7b9a0SKenneth D. Merry * Added new value for AccessStatus field of SAS Device 34*d3c7b9a0SKenneth D. Merry * Page 0 (_SATA_NEEDS_INITIALIZATION). 35*d3c7b9a0SKenneth D. Merry * 10-31-07 02.00.04 Added missing SEPDevHandle field to 36*d3c7b9a0SKenneth D. Merry * MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0. 37*d3c7b9a0SKenneth D. Merry * 12-18-07 02.00.05 Modified IO Unit Page 0 to use 32-bit version fields for 38*d3c7b9a0SKenneth D. Merry * NVDATA. 39*d3c7b9a0SKenneth D. Merry * Modified IOC Page 7 to use masks and added field for 40*d3c7b9a0SKenneth D. Merry * SASBroadcastPrimitiveMasks. 41*d3c7b9a0SKenneth D. Merry * Added MPI2_CONFIG_PAGE_BIOS_4. 42*d3c7b9a0SKenneth D. Merry * Added MPI2_CONFIG_PAGE_LOG_0. 43*d3c7b9a0SKenneth D. Merry * 02-29-08 02.00.06 Modified various names to make them 32-character unique. 44*d3c7b9a0SKenneth D. Merry * Added SAS Device IDs. 45*d3c7b9a0SKenneth D. Merry * Updated Integrated RAID configuration pages including 46*d3c7b9a0SKenneth D. Merry * Manufacturing Page 4, IOC Page 6, and RAID Configuration 47*d3c7b9a0SKenneth D. Merry * Page 0. 48*d3c7b9a0SKenneth D. Merry * 05-21-08 02.00.07 Added define MPI2_MANPAGE4_MIX_SSD_SAS_SATA. 49*d3c7b9a0SKenneth D. Merry * Added define MPI2_MANPAGE4_PHYSDISK_128MB_COERCION. 50*d3c7b9a0SKenneth D. Merry * Fixed define MPI2_IOCPAGE8_FLAGS_ENCLOSURE_SLOT_MAPPING. 51*d3c7b9a0SKenneth D. Merry * Added missing MaxNumRoutedSasAddresses field to 52*d3c7b9a0SKenneth D. Merry * MPI2_CONFIG_PAGE_EXPANDER_0. 53*d3c7b9a0SKenneth D. Merry * Added SAS Port Page 0. 54*d3c7b9a0SKenneth D. Merry * Modified structure layout for 55*d3c7b9a0SKenneth D. Merry * MPI2_CONFIG_PAGE_DRIVER_MAPPING_0. 56*d3c7b9a0SKenneth D. Merry * 06-27-08 02.00.08 Changed MPI2_CONFIG_PAGE_RD_PDISK_1 to use 57*d3c7b9a0SKenneth D. Merry * MPI2_RAID_PHYS_DISK1_PATH_MAX to size the array. 58*d3c7b9a0SKenneth D. Merry * 10-02-08 02.00.09 Changed MPI2_RAID_PGAD_CONFIGNUM_MASK from 0x0000FFFF 59*d3c7b9a0SKenneth D. Merry * to 0x000000FF. 60*d3c7b9a0SKenneth D. Merry * Added two new values for the Physical Disk Coercion Size 61*d3c7b9a0SKenneth D. Merry * bits in the Flags field of Manufacturing Page 4. 62*d3c7b9a0SKenneth D. Merry * Added product-specific Manufacturing pages 16 to 31. 63*d3c7b9a0SKenneth D. Merry * Modified Flags bits for controlling write cache on SATA 64*d3c7b9a0SKenneth D. Merry * drives in IO Unit Page 1. 65*d3c7b9a0SKenneth D. Merry * Added new bit to AdditionalControlFlags of SAS IO Unit 66*d3c7b9a0SKenneth D. Merry * Page 1 to control Invalid Topology Correction. 67*d3c7b9a0SKenneth D. Merry * Added additional defines for RAID Volume Page 0 68*d3c7b9a0SKenneth D. Merry * VolumeStatusFlags field. 69*d3c7b9a0SKenneth D. Merry * Modified meaning of RAID Volume Page 0 VolumeSettings 70*d3c7b9a0SKenneth D. Merry * define for auto-configure of hot-swap drives. 71*d3c7b9a0SKenneth D. Merry * Added SupportedPhysDisks field to RAID Volume Page 1 and 72*d3c7b9a0SKenneth D. Merry * added related defines. 73*d3c7b9a0SKenneth D. Merry * Added PhysDiskAttributes field (and related defines) to 74*d3c7b9a0SKenneth D. Merry * RAID Physical Disk Page 0. 75*d3c7b9a0SKenneth D. Merry * Added MPI2_SAS_PHYINFO_PHY_VACANT define. 76*d3c7b9a0SKenneth D. Merry * Added three new DiscoveryStatus bits for SAS IO Unit 77*d3c7b9a0SKenneth D. Merry * Page 0 and SAS Expander Page 0. 78*d3c7b9a0SKenneth D. Merry * Removed multiplexing information from SAS IO Unit pages. 79*d3c7b9a0SKenneth D. Merry * Added BootDeviceWaitTime field to SAS IO Unit Page 4. 80*d3c7b9a0SKenneth D. Merry * Removed Zone Address Resolved bit from PhyInfo and from 81*d3c7b9a0SKenneth D. Merry * Expander Page 0 Flags field. 82*d3c7b9a0SKenneth D. Merry * Added two new AccessStatus values to SAS Device Page 0 83*d3c7b9a0SKenneth D. Merry * for indicating routing problems. Added 3 reserved words 84*d3c7b9a0SKenneth D. Merry * to this page. 85*d3c7b9a0SKenneth D. Merry * 01-19-09 02.00.10 Fixed defines for GPIOVal field of IO Unit Page 3. 86*d3c7b9a0SKenneth D. Merry * Inserted missing reserved field into structure for IOC 87*d3c7b9a0SKenneth D. Merry * Page 6. 88*d3c7b9a0SKenneth D. Merry * Added more pending task bits to RAID Volume Page 0 89*d3c7b9a0SKenneth D. Merry * VolumeStatusFlags defines. 90*d3c7b9a0SKenneth D. Merry * Added MPI2_PHYSDISK0_STATUS_FLAG_NOT_CERTIFIED define. 91*d3c7b9a0SKenneth D. Merry * Added a new DiscoveryStatus bit for SAS IO Unit Page 0 92*d3c7b9a0SKenneth D. Merry * and SAS Expander Page 0 to flag a downstream initiator 93*d3c7b9a0SKenneth D. Merry * when in simplified routing mode. 94*d3c7b9a0SKenneth D. Merry * Removed SATA Init Failure defines for DiscoveryStatus 95*d3c7b9a0SKenneth D. Merry * fields of SAS IO Unit Page 0 and SAS Expander Page 0. 96*d3c7b9a0SKenneth D. Merry * Added MPI2_SAS_DEVICE0_ASTATUS_DEVICE_BLOCKED define. 97*d3c7b9a0SKenneth D. Merry * Added PortGroups, DmaGroup, and ControlGroup fields to 98*d3c7b9a0SKenneth D. Merry * SAS Device Page 0. 99*d3c7b9a0SKenneth D. Merry * 05-06-09 02.00.11 Added structures and defines for IO Unit Page 5 and IO 100*d3c7b9a0SKenneth D. Merry * Unit Page 6. 101*d3c7b9a0SKenneth D. Merry * Added expander reduced functionality data to SAS 102*d3c7b9a0SKenneth D. Merry * Expander Page 0. 103*d3c7b9a0SKenneth D. Merry * Added SAS PHY Page 2 and SAS PHY Page 3. 104*d3c7b9a0SKenneth D. Merry * 07-30-09 02.00.12 Added IO Unit Page 7. 105*d3c7b9a0SKenneth D. Merry * Added new device ids. 106*d3c7b9a0SKenneth D. Merry * Added SAS IO Unit Page 5. 107*d3c7b9a0SKenneth D. Merry * Added partial and slumber power management capable flags 108*d3c7b9a0SKenneth D. Merry * to SAS Device Page 0 Flags field. 109*d3c7b9a0SKenneth D. Merry * Added PhyInfo defines for power condition. 110*d3c7b9a0SKenneth D. Merry * Added Ethernet configuration pages. 111*d3c7b9a0SKenneth D. Merry * 10-28-09 02.00.13 Added MPI2_IOUNITPAGE1_ENABLE_HOST_BASED_DISCOVERY. 112*d3c7b9a0SKenneth D. Merry * Added SAS PHY Page 4 structure and defines. 113*d3c7b9a0SKenneth D. Merry * -------------------------------------------------------------------------- 114*d3c7b9a0SKenneth D. Merry */ 115*d3c7b9a0SKenneth D. Merry 116*d3c7b9a0SKenneth D. Merry #ifndef MPI2_CNFG_H 117*d3c7b9a0SKenneth D. Merry #define MPI2_CNFG_H 118*d3c7b9a0SKenneth D. Merry 119*d3c7b9a0SKenneth D. Merry /***************************************************************************** 120*d3c7b9a0SKenneth D. Merry * Configuration Page Header and defines 121*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 122*d3c7b9a0SKenneth D. Merry 123*d3c7b9a0SKenneth D. Merry /* Config Page Header */ 124*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_HEADER 125*d3c7b9a0SKenneth D. Merry { 126*d3c7b9a0SKenneth D. Merry U8 PageVersion; /* 0x00 */ 127*d3c7b9a0SKenneth D. Merry U8 PageLength; /* 0x01 */ 128*d3c7b9a0SKenneth D. Merry U8 PageNumber; /* 0x02 */ 129*d3c7b9a0SKenneth D. Merry U8 PageType; /* 0x03 */ 130*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_HEADER, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_HEADER, 131*d3c7b9a0SKenneth D. Merry Mpi2ConfigPageHeader_t, MPI2_POINTER pMpi2ConfigPageHeader_t; 132*d3c7b9a0SKenneth D. Merry 133*d3c7b9a0SKenneth D. Merry typedef union _MPI2_CONFIG_PAGE_HEADER_UNION 134*d3c7b9a0SKenneth D. Merry { 135*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Struct; 136*d3c7b9a0SKenneth D. Merry U8 Bytes[4]; 137*d3c7b9a0SKenneth D. Merry U16 Word16[2]; 138*d3c7b9a0SKenneth D. Merry U32 Word32; 139*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_HEADER_UNION, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_HEADER_UNION, 140*d3c7b9a0SKenneth D. Merry Mpi2ConfigPageHeaderUnion, MPI2_POINTER pMpi2ConfigPageHeaderUnion; 141*d3c7b9a0SKenneth D. Merry 142*d3c7b9a0SKenneth D. Merry /* Extended Config Page Header */ 143*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_EXTENDED_PAGE_HEADER 144*d3c7b9a0SKenneth D. Merry { 145*d3c7b9a0SKenneth D. Merry U8 PageVersion; /* 0x00 */ 146*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x01 */ 147*d3c7b9a0SKenneth D. Merry U8 PageNumber; /* 0x02 */ 148*d3c7b9a0SKenneth D. Merry U8 PageType; /* 0x03 */ 149*d3c7b9a0SKenneth D. Merry U16 ExtPageLength; /* 0x04 */ 150*d3c7b9a0SKenneth D. Merry U8 ExtPageType; /* 0x06 */ 151*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x07 */ 152*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_EXTENDED_PAGE_HEADER, 153*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_EXTENDED_PAGE_HEADER, 154*d3c7b9a0SKenneth D. Merry Mpi2ConfigExtendedPageHeader_t, MPI2_POINTER pMpi2ConfigExtendedPageHeader_t; 155*d3c7b9a0SKenneth D. Merry 156*d3c7b9a0SKenneth D. Merry typedef union _MPI2_CONFIG_EXT_PAGE_HEADER_UNION 157*d3c7b9a0SKenneth D. Merry { 158*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Struct; 159*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Ext; 160*d3c7b9a0SKenneth D. Merry U8 Bytes[8]; 161*d3c7b9a0SKenneth D. Merry U16 Word16[4]; 162*d3c7b9a0SKenneth D. Merry U32 Word32[2]; 163*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_EXT_PAGE_HEADER_UNION, MPI2_POINTER PTR_MPI2_CONFIG_EXT_PAGE_HEADER_UNION, 164*d3c7b9a0SKenneth D. Merry Mpi2ConfigPageExtendedHeaderUnion, MPI2_POINTER pMpi2ConfigPageExtendedHeaderUnion; 165*d3c7b9a0SKenneth D. Merry 166*d3c7b9a0SKenneth D. Merry 167*d3c7b9a0SKenneth D. Merry /* PageType field values */ 168*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGEATTR_READ_ONLY (0x00) 169*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGEATTR_CHANGEABLE (0x10) 170*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGEATTR_PERSISTENT (0x20) 171*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGEATTR_MASK (0xF0) 172*d3c7b9a0SKenneth D. Merry 173*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_IO_UNIT (0x00) 174*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_IOC (0x01) 175*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_BIOS (0x02) 176*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_RAID_VOLUME (0x08) 177*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_MANUFACTURING (0x09) 178*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_RAID_PHYSDISK (0x0A) 179*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_EXTENDED (0x0F) 180*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_PAGETYPE_MASK (0x0F) 181*d3c7b9a0SKenneth D. Merry 182*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_TYPENUM_MASK (0x0FFF) 183*d3c7b9a0SKenneth D. Merry 184*d3c7b9a0SKenneth D. Merry 185*d3c7b9a0SKenneth D. Merry /* ExtPageType field values */ 186*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_IO_UNIT (0x10) 187*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_EXPANDER (0x11) 188*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_DEVICE (0x12) 189*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_PHY (0x13) 190*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_LOG (0x14) 191*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_ENCLOSURE (0x15) 192*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_RAID_CONFIG (0x16) 193*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_DRIVER_MAPPING (0x17) 194*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_SAS_PORT (0x18) 195*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_EXTPAGETYPE_ETHERNET (0x19) 196*d3c7b9a0SKenneth D. Merry 197*d3c7b9a0SKenneth D. Merry 198*d3c7b9a0SKenneth D. Merry /***************************************************************************** 199*d3c7b9a0SKenneth D. Merry * PageAddress defines 200*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 201*d3c7b9a0SKenneth D. Merry 202*d3c7b9a0SKenneth D. Merry /* RAID Volume PageAddress format */ 203*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOLUME_PGAD_FORM_MASK (0xF0000000) 204*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 205*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOLUME_PGAD_FORM_HANDLE (0x10000000) 206*d3c7b9a0SKenneth D. Merry 207*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOLUME_PGAD_HANDLE_MASK (0x0000FFFF) 208*d3c7b9a0SKenneth D. Merry 209*d3c7b9a0SKenneth D. Merry 210*d3c7b9a0SKenneth D. Merry /* RAID Physical Disk PageAddress format */ 211*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_FORM_MASK (0xF0000000) 212*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_FORM_GET_NEXT_PHYSDISKNUM (0x00000000) 213*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_FORM_PHYSDISKNUM (0x10000000) 214*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_FORM_DEVHANDLE (0x20000000) 215*d3c7b9a0SKenneth D. Merry 216*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_PHYSDISKNUM_MASK (0x000000FF) 217*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK_PGAD_DEVHANDLE_MASK (0x0000FFFF) 218*d3c7b9a0SKenneth D. Merry 219*d3c7b9a0SKenneth D. Merry 220*d3c7b9a0SKenneth D. Merry /* SAS Expander PageAddress format */ 221*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_FORM_MASK (0xF0000000) 222*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL (0x00000000) 223*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_FORM_HNDL_PHY_NUM (0x10000000) 224*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_FORM_HNDL (0x20000000) 225*d3c7b9a0SKenneth D. Merry 226*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_HANDLE_MASK (0x0000FFFF) 227*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_PHYNUM_MASK (0x00FF0000) 228*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPAND_PGAD_PHYNUM_SHIFT (16) 229*d3c7b9a0SKenneth D. Merry 230*d3c7b9a0SKenneth D. Merry 231*d3c7b9a0SKenneth D. Merry /* SAS Device PageAddress format */ 232*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_PGAD_FORM_MASK (0xF0000000) 233*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 234*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_PGAD_FORM_HANDLE (0x20000000) 235*d3c7b9a0SKenneth D. Merry 236*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_PGAD_HANDLE_MASK (0x0000FFFF) 237*d3c7b9a0SKenneth D. Merry 238*d3c7b9a0SKenneth D. Merry 239*d3c7b9a0SKenneth D. Merry /* SAS PHY PageAddress format */ 240*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_FORM_MASK (0xF0000000) 241*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_FORM_PHY_NUMBER (0x00000000) 242*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_FORM_PHY_TBL_INDEX (0x10000000) 243*d3c7b9a0SKenneth D. Merry 244*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_PHY_NUMBER_MASK (0x000000FF) 245*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHY_PGAD_PHY_TBL_INDEX_MASK (0x0000FFFF) 246*d3c7b9a0SKenneth D. Merry 247*d3c7b9a0SKenneth D. Merry 248*d3c7b9a0SKenneth D. Merry /* SAS Port PageAddress format */ 249*d3c7b9a0SKenneth D. Merry #define MPI2_SASPORT_PGAD_FORM_MASK (0xF0000000) 250*d3c7b9a0SKenneth D. Merry #define MPI2_SASPORT_PGAD_FORM_GET_NEXT_PORT (0x00000000) 251*d3c7b9a0SKenneth D. Merry #define MPI2_SASPORT_PGAD_FORM_PORT_NUM (0x10000000) 252*d3c7b9a0SKenneth D. Merry 253*d3c7b9a0SKenneth D. Merry #define MPI2_SASPORT_PGAD_PORTNUMBER_MASK (0x00000FFF) 254*d3c7b9a0SKenneth D. Merry 255*d3c7b9a0SKenneth D. Merry 256*d3c7b9a0SKenneth D. Merry /* SAS Enclosure PageAddress format */ 257*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLOS_PGAD_FORM_MASK (0xF0000000) 258*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 259*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE (0x10000000) 260*d3c7b9a0SKenneth D. Merry 261*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLOS_PGAD_HANDLE_MASK (0x0000FFFF) 262*d3c7b9a0SKenneth D. Merry 263*d3c7b9a0SKenneth D. Merry 264*d3c7b9a0SKenneth D. Merry /* RAID Configuration PageAddress format */ 265*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PGAD_FORM_MASK (0xF0000000) 266*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PGAD_FORM_GET_NEXT_CONFIGNUM (0x00000000) 267*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PGAD_FORM_CONFIGNUM (0x10000000) 268*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PGAD_FORM_ACTIVE_CONFIG (0x20000000) 269*d3c7b9a0SKenneth D. Merry 270*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PGAD_CONFIGNUM_MASK (0x000000FF) 271*d3c7b9a0SKenneth D. Merry 272*d3c7b9a0SKenneth D. Merry 273*d3c7b9a0SKenneth D. Merry /* Driver Persistent Mapping PageAddress format */ 274*d3c7b9a0SKenneth D. Merry #define MPI2_DPM_PGAD_FORM_MASK (0xF0000000) 275*d3c7b9a0SKenneth D. Merry #define MPI2_DPM_PGAD_FORM_ENTRY_RANGE (0x00000000) 276*d3c7b9a0SKenneth D. Merry 277*d3c7b9a0SKenneth D. Merry #define MPI2_DPM_PGAD_ENTRY_COUNT_MASK (0x0FFF0000) 278*d3c7b9a0SKenneth D. Merry #define MPI2_DPM_PGAD_ENTRY_COUNT_SHIFT (16) 279*d3c7b9a0SKenneth D. Merry #define MPI2_DPM_PGAD_START_ENTRY_MASK (0x0000FFFF) 280*d3c7b9a0SKenneth D. Merry 281*d3c7b9a0SKenneth D. Merry 282*d3c7b9a0SKenneth D. Merry /* Ethernet PageAddress format */ 283*d3c7b9a0SKenneth D. Merry #define MPI2_ETHERNET_PGAD_FORM_MASK (0xF0000000) 284*d3c7b9a0SKenneth D. Merry #define MPI2_ETHERNET_PGAD_FORM_IF_NUM (0x00000000) 285*d3c7b9a0SKenneth D. Merry 286*d3c7b9a0SKenneth D. Merry #define MPI2_ETHERNET_PGAD_IF_NUMBER_MASK (0x000000FF) 287*d3c7b9a0SKenneth D. Merry 288*d3c7b9a0SKenneth D. Merry 289*d3c7b9a0SKenneth D. Merry 290*d3c7b9a0SKenneth D. Merry /**************************************************************************** 291*d3c7b9a0SKenneth D. Merry * Configuration messages 292*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 293*d3c7b9a0SKenneth D. Merry 294*d3c7b9a0SKenneth D. Merry /* Configuration Request Message */ 295*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_REQUEST 296*d3c7b9a0SKenneth D. Merry { 297*d3c7b9a0SKenneth D. Merry U8 Action; /* 0x00 */ 298*d3c7b9a0SKenneth D. Merry U8 SGLFlags; /* 0x01 */ 299*d3c7b9a0SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 300*d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 301*d3c7b9a0SKenneth D. Merry U16 ExtPageLength; /* 0x04 */ 302*d3c7b9a0SKenneth D. Merry U8 ExtPageType; /* 0x06 */ 303*d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 304*d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 305*d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 306*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x0A */ 307*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x0C */ 308*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x10 */ 309*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x14 */ 310*d3c7b9a0SKenneth D. Merry U32 PageAddress; /* 0x18 */ 311*d3c7b9a0SKenneth D. Merry MPI2_SGE_IO_UNION PageBufferSGE; /* 0x1C */ 312*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_REQUEST, MPI2_POINTER PTR_MPI2_CONFIG_REQUEST, 313*d3c7b9a0SKenneth D. Merry Mpi2ConfigRequest_t, MPI2_POINTER pMpi2ConfigRequest_t; 314*d3c7b9a0SKenneth D. Merry 315*d3c7b9a0SKenneth D. Merry /* values for the Action field */ 316*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_HEADER (0x00) 317*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_READ_CURRENT (0x01) 318*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_WRITE_CURRENT (0x02) 319*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_DEFAULT (0x03) 320*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_WRITE_NVRAM (0x04) 321*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_READ_DEFAULT (0x05) 322*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_READ_NVRAM (0x06) 323*d3c7b9a0SKenneth D. Merry #define MPI2_CONFIG_ACTION_PAGE_GET_CHANGEABLE (0x07) 324*d3c7b9a0SKenneth D. Merry 325*d3c7b9a0SKenneth D. Merry /* values for SGLFlags field are in the SGL section of mpi2.h */ 326*d3c7b9a0SKenneth D. Merry 327*d3c7b9a0SKenneth D. Merry 328*d3c7b9a0SKenneth D. Merry /* Config Reply Message */ 329*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_REPLY 330*d3c7b9a0SKenneth D. Merry { 331*d3c7b9a0SKenneth D. Merry U8 Action; /* 0x00 */ 332*d3c7b9a0SKenneth D. Merry U8 SGLFlags; /* 0x01 */ 333*d3c7b9a0SKenneth D. Merry U8 MsgLength; /* 0x02 */ 334*d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 335*d3c7b9a0SKenneth D. Merry U16 ExtPageLength; /* 0x04 */ 336*d3c7b9a0SKenneth D. Merry U8 ExtPageType; /* 0x06 */ 337*d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 338*d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 339*d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 340*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x0A */ 341*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x0C */ 342*d3c7b9a0SKenneth D. Merry U16 IOCStatus; /* 0x0E */ 343*d3c7b9a0SKenneth D. Merry U32 IOCLogInfo; /* 0x10 */ 344*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x14 */ 345*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_REPLY, MPI2_POINTER PTR_MPI2_CONFIG_REPLY, 346*d3c7b9a0SKenneth D. Merry Mpi2ConfigReply_t, MPI2_POINTER pMpi2ConfigReply_t; 347*d3c7b9a0SKenneth D. Merry 348*d3c7b9a0SKenneth D. Merry 349*d3c7b9a0SKenneth D. Merry 350*d3c7b9a0SKenneth D. Merry /***************************************************************************** 351*d3c7b9a0SKenneth D. Merry * 352*d3c7b9a0SKenneth D. Merry * C o n f i g u r a t i o n P a g e s 353*d3c7b9a0SKenneth D. Merry * 354*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 355*d3c7b9a0SKenneth D. Merry 356*d3c7b9a0SKenneth D. Merry /**************************************************************************** 357*d3c7b9a0SKenneth D. Merry * Manufacturing Config pages 358*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 359*d3c7b9a0SKenneth D. Merry 360*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_VENDORID_LSI (0x1000) 361*d3c7b9a0SKenneth D. Merry 362*d3c7b9a0SKenneth D. Merry /* SAS */ 363*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2004 (0x0070) 364*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2008 (0x0072) 365*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2108_1 (0x0074) 366*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2108_2 (0x0076) 367*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2108_3 (0x0077) 368*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2116_1 (0x0064) 369*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2116_2 (0x0065) 370*d3c7b9a0SKenneth D. Merry 371*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_1 (0x0080) 372*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_2 (0x0081) 373*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_3 (0x0082) 374*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_4 (0x0083) 375*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_5 (0x0084) 376*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_6 (0x0085) 377*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_7 (0x0086) 378*d3c7b9a0SKenneth D. Merry #define MPI2_MFGPAGE_DEVID_SAS2208_8 (0x0087) 379*d3c7b9a0SKenneth D. Merry 380*d3c7b9a0SKenneth D. Merry 381*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 0 */ 382*d3c7b9a0SKenneth D. Merry 383*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_0 384*d3c7b9a0SKenneth D. Merry { 385*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 386*d3c7b9a0SKenneth D. Merry U8 ChipName[16]; /* 0x04 */ 387*d3c7b9a0SKenneth D. Merry U8 ChipRevision[8]; /* 0x14 */ 388*d3c7b9a0SKenneth D. Merry U8 BoardName[16]; /* 0x1C */ 389*d3c7b9a0SKenneth D. Merry U8 BoardAssembly[16]; /* 0x2C */ 390*d3c7b9a0SKenneth D. Merry U8 BoardTracerNumber[16]; /* 0x3C */ 391*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_0, 392*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_0, 393*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPage0_t, MPI2_POINTER pMpi2ManufacturingPage0_t; 394*d3c7b9a0SKenneth D. Merry 395*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING0_PAGEVERSION (0x00) 396*d3c7b9a0SKenneth D. Merry 397*d3c7b9a0SKenneth D. Merry 398*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 1 */ 399*d3c7b9a0SKenneth D. Merry 400*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_1 401*d3c7b9a0SKenneth D. Merry { 402*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 403*d3c7b9a0SKenneth D. Merry U8 VPD[256]; /* 0x04 */ 404*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_1, 405*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_1, 406*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPage1_t, MPI2_POINTER pMpi2ManufacturingPage1_t; 407*d3c7b9a0SKenneth D. Merry 408*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING1_PAGEVERSION (0x00) 409*d3c7b9a0SKenneth D. Merry 410*d3c7b9a0SKenneth D. Merry 411*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CHIP_REVISION_ID 412*d3c7b9a0SKenneth D. Merry { 413*d3c7b9a0SKenneth D. Merry U16 DeviceID; /* 0x00 */ 414*d3c7b9a0SKenneth D. Merry U8 PCIRevisionID; /* 0x02 */ 415*d3c7b9a0SKenneth D. Merry U8 Reserved; /* 0x03 */ 416*d3c7b9a0SKenneth D. Merry } MPI2_CHIP_REVISION_ID, MPI2_POINTER PTR_MPI2_CHIP_REVISION_ID, 417*d3c7b9a0SKenneth D. Merry Mpi2ChipRevisionId_t, MPI2_POINTER pMpi2ChipRevisionId_t; 418*d3c7b9a0SKenneth D. Merry 419*d3c7b9a0SKenneth D. Merry 420*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 2 */ 421*d3c7b9a0SKenneth D. Merry 422*d3c7b9a0SKenneth D. Merry /* 423*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 424*d3c7b9a0SKenneth D. Merry * one and check Header.PageLength at runtime. 425*d3c7b9a0SKenneth D. Merry */ 426*d3c7b9a0SKenneth D. Merry #ifndef MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS 427*d3c7b9a0SKenneth D. Merry #define MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS (1) 428*d3c7b9a0SKenneth D. Merry #endif 429*d3c7b9a0SKenneth D. Merry 430*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_2 431*d3c7b9a0SKenneth D. Merry { 432*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 433*d3c7b9a0SKenneth D. Merry MPI2_CHIP_REVISION_ID ChipId; /* 0x04 */ 434*d3c7b9a0SKenneth D. Merry U32 HwSettings[MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS];/* 0x08 */ 435*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_2, 436*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_2, 437*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPage2_t, MPI2_POINTER pMpi2ManufacturingPage2_t; 438*d3c7b9a0SKenneth D. Merry 439*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING2_PAGEVERSION (0x00) 440*d3c7b9a0SKenneth D. Merry 441*d3c7b9a0SKenneth D. Merry 442*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 3 */ 443*d3c7b9a0SKenneth D. Merry 444*d3c7b9a0SKenneth D. Merry /* 445*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 446*d3c7b9a0SKenneth D. Merry * one and check Header.PageLength at runtime. 447*d3c7b9a0SKenneth D. Merry */ 448*d3c7b9a0SKenneth D. Merry #ifndef MPI2_MAN_PAGE_3_INFO_WORDS 449*d3c7b9a0SKenneth D. Merry #define MPI2_MAN_PAGE_3_INFO_WORDS (1) 450*d3c7b9a0SKenneth D. Merry #endif 451*d3c7b9a0SKenneth D. Merry 452*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_3 453*d3c7b9a0SKenneth D. Merry { 454*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 455*d3c7b9a0SKenneth D. Merry MPI2_CHIP_REVISION_ID ChipId; /* 0x04 */ 456*d3c7b9a0SKenneth D. Merry U32 Info[MPI2_MAN_PAGE_3_INFO_WORDS];/* 0x08 */ 457*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_3, 458*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_3, 459*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPage3_t, MPI2_POINTER pMpi2ManufacturingPage3_t; 460*d3c7b9a0SKenneth D. Merry 461*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING3_PAGEVERSION (0x00) 462*d3c7b9a0SKenneth D. Merry 463*d3c7b9a0SKenneth D. Merry 464*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 4 */ 465*d3c7b9a0SKenneth D. Merry 466*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_MANPAGE4_PWR_SAVE_SETTINGS 467*d3c7b9a0SKenneth D. Merry { 468*d3c7b9a0SKenneth D. Merry U8 PowerSaveFlags; /* 0x00 */ 469*d3c7b9a0SKenneth D. Merry U8 InternalOperationsSleepTime; /* 0x01 */ 470*d3c7b9a0SKenneth D. Merry U8 InternalOperationsRunTime; /* 0x02 */ 471*d3c7b9a0SKenneth D. Merry U8 HostIdleTime; /* 0x03 */ 472*d3c7b9a0SKenneth D. Merry } MPI2_MANPAGE4_PWR_SAVE_SETTINGS, 473*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_MANPAGE4_PWR_SAVE_SETTINGS, 474*d3c7b9a0SKenneth D. Merry Mpi2ManPage4PwrSaveSettings_t, MPI2_POINTER pMpi2ManPage4PwrSaveSettings_t; 475*d3c7b9a0SKenneth D. Merry 476*d3c7b9a0SKenneth D. Merry /* defines for the PowerSaveFlags field */ 477*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_MASK_POWERSAVE_MODE (0x03) 478*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_POWERSAVE_MODE_DISABLED (0x00) 479*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_CUSTOM_POWERSAVE_MODE (0x01) 480*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_FULL_POWERSAVE_MODE (0x02) 481*d3c7b9a0SKenneth D. Merry 482*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_4 483*d3c7b9a0SKenneth D. Merry { 484*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 485*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x04 */ 486*d3c7b9a0SKenneth D. Merry U32 Flags; /* 0x08 */ 487*d3c7b9a0SKenneth D. Merry U8 InquirySize; /* 0x0C */ 488*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x0D */ 489*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0E */ 490*d3c7b9a0SKenneth D. Merry U8 InquiryData[56]; /* 0x10 */ 491*d3c7b9a0SKenneth D. Merry U32 RAID0VolumeSettings; /* 0x48 */ 492*d3c7b9a0SKenneth D. Merry U32 RAID1EVolumeSettings; /* 0x4C */ 493*d3c7b9a0SKenneth D. Merry U32 RAID1VolumeSettings; /* 0x50 */ 494*d3c7b9a0SKenneth D. Merry U32 RAID10VolumeSettings; /* 0x54 */ 495*d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x58 */ 496*d3c7b9a0SKenneth D. Merry U32 Reserved5; /* 0x5C */ 497*d3c7b9a0SKenneth D. Merry MPI2_MANPAGE4_PWR_SAVE_SETTINGS PowerSaveSettings; /* 0x60 */ 498*d3c7b9a0SKenneth D. Merry U8 MaxOCEDisks; /* 0x64 */ 499*d3c7b9a0SKenneth D. Merry U8 ResyncRate; /* 0x65 */ 500*d3c7b9a0SKenneth D. Merry U16 DataScrubDuration; /* 0x66 */ 501*d3c7b9a0SKenneth D. Merry U8 MaxHotSpares; /* 0x68 */ 502*d3c7b9a0SKenneth D. Merry U8 MaxPhysDisksPerVol; /* 0x69 */ 503*d3c7b9a0SKenneth D. Merry U8 MaxPhysDisks; /* 0x6A */ 504*d3c7b9a0SKenneth D. Merry U8 MaxVolumes; /* 0x6B */ 505*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_4, 506*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_4, 507*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPage4_t, MPI2_POINTER pMpi2ManufacturingPage4_t; 508*d3c7b9a0SKenneth D. Merry 509*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING4_PAGEVERSION (0x0A) 510*d3c7b9a0SKenneth D. Merry 511*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 4 Flags field */ 512*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_METADATA_SIZE_MASK (0x00030000) 513*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_METADATA_512MB (0x00000000) 514*d3c7b9a0SKenneth D. Merry 515*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_MIX_SSD_SAS_SATA (0x00008000) 516*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_MIX_SSD_AND_NON_SSD (0x00004000) 517*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_HIDE_PHYSDISK_NON_IR (0x00002000) 518*d3c7b9a0SKenneth D. Merry 519*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_MASK_PHYSDISK_COERCION (0x00001C00) 520*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_PHYSDISK_COERCION_1GB (0x00000000) 521*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_PHYSDISK_128MB_COERCION (0x00000400) 522*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_PHYSDISK_ADAPTIVE_COERCION (0x00000800) 523*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_PHYSDISK_ZERO_COERCION (0x00000C00) 524*d3c7b9a0SKenneth D. Merry 525*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_MASK_BAD_BLOCK_MARKING (0x00000300) 526*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_DEFAULT_BAD_BLOCK_MARKING (0x00000000) 527*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_TABLE_BAD_BLOCK_MARKING (0x00000100) 528*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_WRITE_LONG_BAD_BLOCK_MARKING (0x00000200) 529*d3c7b9a0SKenneth D. Merry 530*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_FORCE_OFFLINE_FAILOVER (0x00000080) 531*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_RAID10_DISABLE (0x00000040) 532*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_RAID1E_DISABLE (0x00000020) 533*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_RAID1_DISABLE (0x00000010) 534*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_RAID0_DISABLE (0x00000008) 535*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_IR_MODEPAGE8_DISABLE (0x00000004) 536*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_IM_RESYNC_CACHE_ENABLE (0x00000002) 537*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE4_IR_NO_MIX_SAS_SATA (0x00000001) 538*d3c7b9a0SKenneth D. Merry 539*d3c7b9a0SKenneth D. Merry 540*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 5 */ 541*d3c7b9a0SKenneth D. Merry 542*d3c7b9a0SKenneth D. Merry /* 543*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 544*d3c7b9a0SKenneth D. Merry * one and check Header.PageLength or NumPhys at runtime. 545*d3c7b9a0SKenneth D. Merry */ 546*d3c7b9a0SKenneth D. Merry #ifndef MPI2_MAN_PAGE_5_PHY_ENTRIES 547*d3c7b9a0SKenneth D. Merry #define MPI2_MAN_PAGE_5_PHY_ENTRIES (1) 548*d3c7b9a0SKenneth D. Merry #endif 549*d3c7b9a0SKenneth D. Merry 550*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_MANUFACTURING5_ENTRY 551*d3c7b9a0SKenneth D. Merry { 552*d3c7b9a0SKenneth D. Merry U64 WWID; /* 0x00 */ 553*d3c7b9a0SKenneth D. Merry U64 DeviceName; /* 0x08 */ 554*d3c7b9a0SKenneth D. Merry } MPI2_MANUFACTURING5_ENTRY, MPI2_POINTER PTR_MPI2_MANUFACTURING5_ENTRY, 555*d3c7b9a0SKenneth D. Merry Mpi2Manufacturing5Entry_t, MPI2_POINTER pMpi2Manufacturing5Entry_t; 556*d3c7b9a0SKenneth D. Merry 557*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_5 558*d3c7b9a0SKenneth D. Merry { 559*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 560*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x04 */ 561*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x05 */ 562*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x06 */ 563*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x08 */ 564*d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x0C */ 565*d3c7b9a0SKenneth D. Merry MPI2_MANUFACTURING5_ENTRY Phy[MPI2_MAN_PAGE_5_PHY_ENTRIES];/* 0x08 */ 566*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_5, 567*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_5, 568*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPage5_t, MPI2_POINTER pMpi2ManufacturingPage5_t; 569*d3c7b9a0SKenneth D. Merry 570*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING5_PAGEVERSION (0x03) 571*d3c7b9a0SKenneth D. Merry 572*d3c7b9a0SKenneth D. Merry 573*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 6 */ 574*d3c7b9a0SKenneth D. Merry 575*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_6 576*d3c7b9a0SKenneth D. Merry { 577*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 578*d3c7b9a0SKenneth D. Merry U32 ProductSpecificInfo;/* 0x04 */ 579*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_6, 580*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_6, 581*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPage6_t, MPI2_POINTER pMpi2ManufacturingPage6_t; 582*d3c7b9a0SKenneth D. Merry 583*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING6_PAGEVERSION (0x00) 584*d3c7b9a0SKenneth D. Merry 585*d3c7b9a0SKenneth D. Merry 586*d3c7b9a0SKenneth D. Merry /* Manufacturing Page 7 */ 587*d3c7b9a0SKenneth D. Merry 588*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_MANPAGE7_CONNECTOR_INFO 589*d3c7b9a0SKenneth D. Merry { 590*d3c7b9a0SKenneth D. Merry U32 Pinout; /* 0x00 */ 591*d3c7b9a0SKenneth D. Merry U8 Connector[16]; /* 0x04 */ 592*d3c7b9a0SKenneth D. Merry U8 Location; /* 0x14 */ 593*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x15 */ 594*d3c7b9a0SKenneth D. Merry U16 Slot; /* 0x16 */ 595*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x18 */ 596*d3c7b9a0SKenneth D. Merry } MPI2_MANPAGE7_CONNECTOR_INFO, MPI2_POINTER PTR_MPI2_MANPAGE7_CONNECTOR_INFO, 597*d3c7b9a0SKenneth D. Merry Mpi2ManPage7ConnectorInfo_t, MPI2_POINTER pMpi2ManPage7ConnectorInfo_t; 598*d3c7b9a0SKenneth D. Merry 599*d3c7b9a0SKenneth D. Merry /* defines for the Pinout field */ 600*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8484_L4 (0x00080000) 601*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8484_L3 (0x00040000) 602*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8484_L2 (0x00020000) 603*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8484_L1 (0x00010000) 604*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8470_L4 (0x00000800) 605*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8470_L3 (0x00000400) 606*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8470_L2 (0x00000200) 607*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8470_L1 (0x00000100) 608*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_SFF_8482 (0x00000002) 609*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_PINOUT_CONNECTION_UNKNOWN (0x00000001) 610*d3c7b9a0SKenneth D. Merry 611*d3c7b9a0SKenneth D. Merry /* defines for the Location field */ 612*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_UNKNOWN (0x01) 613*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_INTERNAL (0x02) 614*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_EXTERNAL (0x04) 615*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_SWITCHABLE (0x08) 616*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_AUTO (0x10) 617*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_NOT_PRESENT (0x20) 618*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_LOCATION_NOT_CONNECTED (0x80) 619*d3c7b9a0SKenneth D. Merry 620*d3c7b9a0SKenneth D. Merry /* 621*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 622*d3c7b9a0SKenneth D. Merry * one and check NumPhys at runtime. 623*d3c7b9a0SKenneth D. Merry */ 624*d3c7b9a0SKenneth D. Merry #ifndef MPI2_MANPAGE7_CONNECTOR_INFO_MAX 625*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_CONNECTOR_INFO_MAX (1) 626*d3c7b9a0SKenneth D. Merry #endif 627*d3c7b9a0SKenneth D. Merry 628*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_7 629*d3c7b9a0SKenneth D. Merry { 630*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 631*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x04 */ 632*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x08 */ 633*d3c7b9a0SKenneth D. Merry U32 Flags; /* 0x0C */ 634*d3c7b9a0SKenneth D. Merry U8 EnclosureName[16]; /* 0x10 */ 635*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x20 */ 636*d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x21 */ 637*d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x22 */ 638*d3c7b9a0SKenneth D. Merry MPI2_MANPAGE7_CONNECTOR_INFO ConnectorInfo[MPI2_MANPAGE7_CONNECTOR_INFO_MAX]; /* 0x24 */ 639*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_7, 640*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_7, 641*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPage7_t, MPI2_POINTER pMpi2ManufacturingPage7_t; 642*d3c7b9a0SKenneth D. Merry 643*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING7_PAGEVERSION (0x00) 644*d3c7b9a0SKenneth D. Merry 645*d3c7b9a0SKenneth D. Merry /* defines for the Flags field */ 646*d3c7b9a0SKenneth D. Merry #define MPI2_MANPAGE7_FLAG_USE_SLOT_INFO (0x00000001) 647*d3c7b9a0SKenneth D. Merry 648*d3c7b9a0SKenneth D. Merry 649*d3c7b9a0SKenneth D. Merry /* 650*d3c7b9a0SKenneth D. Merry * Generic structure to use for product-specific manufacturing pages 651*d3c7b9a0SKenneth D. Merry * (currently Manufacturing Page 8 through Manufacturing Page 31). 652*d3c7b9a0SKenneth D. Merry */ 653*d3c7b9a0SKenneth D. Merry 654*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_MAN_PS 655*d3c7b9a0SKenneth D. Merry { 656*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 657*d3c7b9a0SKenneth D. Merry U32 ProductSpecificInfo;/* 0x04 */ 658*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_MAN_PS, 659*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_MAN_PS, 660*d3c7b9a0SKenneth D. Merry Mpi2ManufacturingPagePS_t, MPI2_POINTER pMpi2ManufacturingPagePS_t; 661*d3c7b9a0SKenneth D. Merry 662*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING8_PAGEVERSION (0x00) 663*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING9_PAGEVERSION (0x00) 664*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING10_PAGEVERSION (0x00) 665*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING11_PAGEVERSION (0x00) 666*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING12_PAGEVERSION (0x00) 667*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING13_PAGEVERSION (0x00) 668*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING14_PAGEVERSION (0x00) 669*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING15_PAGEVERSION (0x00) 670*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING16_PAGEVERSION (0x00) 671*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING17_PAGEVERSION (0x00) 672*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING18_PAGEVERSION (0x00) 673*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING19_PAGEVERSION (0x00) 674*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING20_PAGEVERSION (0x00) 675*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING21_PAGEVERSION (0x00) 676*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING22_PAGEVERSION (0x00) 677*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING23_PAGEVERSION (0x00) 678*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING24_PAGEVERSION (0x00) 679*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING25_PAGEVERSION (0x00) 680*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING26_PAGEVERSION (0x00) 681*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING27_PAGEVERSION (0x00) 682*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING28_PAGEVERSION (0x00) 683*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING29_PAGEVERSION (0x00) 684*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING30_PAGEVERSION (0x00) 685*d3c7b9a0SKenneth D. Merry #define MPI2_MANUFACTURING31_PAGEVERSION (0x00) 686*d3c7b9a0SKenneth D. Merry 687*d3c7b9a0SKenneth D. Merry 688*d3c7b9a0SKenneth D. Merry /**************************************************************************** 689*d3c7b9a0SKenneth D. Merry * IO Unit Config Pages 690*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 691*d3c7b9a0SKenneth D. Merry 692*d3c7b9a0SKenneth D. Merry /* IO Unit Page 0 */ 693*d3c7b9a0SKenneth D. Merry 694*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_0 695*d3c7b9a0SKenneth D. Merry { 696*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 697*d3c7b9a0SKenneth D. Merry U64 UniqueValue; /* 0x04 */ 698*d3c7b9a0SKenneth D. Merry MPI2_VERSION_UNION NvdataVersionDefault; /* 0x08 */ 699*d3c7b9a0SKenneth D. Merry MPI2_VERSION_UNION NvdataVersionPersistent; /* 0x0A */ 700*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_0, 701*d3c7b9a0SKenneth D. Merry Mpi2IOUnitPage0_t, MPI2_POINTER pMpi2IOUnitPage0_t; 702*d3c7b9a0SKenneth D. Merry 703*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE0_PAGEVERSION (0x02) 704*d3c7b9a0SKenneth D. Merry 705*d3c7b9a0SKenneth D. Merry 706*d3c7b9a0SKenneth D. Merry /* IO Unit Page 1 */ 707*d3c7b9a0SKenneth D. Merry 708*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_1 709*d3c7b9a0SKenneth D. Merry { 710*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 711*d3c7b9a0SKenneth D. Merry U32 Flags; /* 0x04 */ 712*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_1, 713*d3c7b9a0SKenneth D. Merry Mpi2IOUnitPage1_t, MPI2_POINTER pMpi2IOUnitPage1_t; 714*d3c7b9a0SKenneth D. Merry 715*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_PAGEVERSION (0x04) 716*d3c7b9a0SKenneth D. Merry 717*d3c7b9a0SKenneth D. Merry /* IO Unit Page 1 Flags defines */ 718*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_ENABLE_HOST_BASED_DISCOVERY (0x00000800) 719*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_MASK_SATA_WRITE_CACHE (0x00000600) 720*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_ENABLE_SATA_WRITE_CACHE (0x00000000) 721*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_DISABLE_SATA_WRITE_CACHE (0x00000200) 722*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_UNCHANGED_SATA_WRITE_CACHE (0x00000400) 723*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_NATIVE_COMMAND_Q_DISABLE (0x00000100) 724*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_DISABLE_IR (0x00000040) 725*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_DISABLE_TASK_SET_FULL_HANDLING (0x00000020) 726*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_IR_USE_STATIC_VOLUME_ID (0x00000004) 727*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_MULTI_PATHING (0x00000002) 728*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE1_SINGLE_PATHING (0x00000000) 729*d3c7b9a0SKenneth D. Merry 730*d3c7b9a0SKenneth D. Merry 731*d3c7b9a0SKenneth D. Merry /* IO Unit Page 3 */ 732*d3c7b9a0SKenneth D. Merry 733*d3c7b9a0SKenneth D. Merry /* 734*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 735*d3c7b9a0SKenneth D. Merry * one and check Header.PageLength at runtime. 736*d3c7b9a0SKenneth D. Merry */ 737*d3c7b9a0SKenneth D. Merry #ifndef MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX 738*d3c7b9a0SKenneth D. Merry #define MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX (1) 739*d3c7b9a0SKenneth D. Merry #endif 740*d3c7b9a0SKenneth D. Merry 741*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_3 742*d3c7b9a0SKenneth D. Merry { 743*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 744*d3c7b9a0SKenneth D. Merry U8 GPIOCount; /* 0x04 */ 745*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x05 */ 746*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x06 */ 747*d3c7b9a0SKenneth D. Merry U16 GPIOVal[MPI2_IO_UNIT_PAGE_3_GPIO_VAL_MAX];/* 0x08 */ 748*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_3, 749*d3c7b9a0SKenneth D. Merry Mpi2IOUnitPage3_t, MPI2_POINTER pMpi2IOUnitPage3_t; 750*d3c7b9a0SKenneth D. Merry 751*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE3_PAGEVERSION (0x01) 752*d3c7b9a0SKenneth D. Merry 753*d3c7b9a0SKenneth D. Merry /* defines for IO Unit Page 3 GPIOVal field */ 754*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE3_GPIO_FUNCTION_MASK (0xFFFC) 755*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE3_GPIO_FUNCTION_SHIFT (2) 756*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE3_GPIO_SETTING_OFF (0x0000) 757*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE3_GPIO_SETTING_ON (0x0001) 758*d3c7b9a0SKenneth D. Merry 759*d3c7b9a0SKenneth D. Merry 760*d3c7b9a0SKenneth D. Merry /* IO Unit Page 5 */ 761*d3c7b9a0SKenneth D. Merry 762*d3c7b9a0SKenneth D. Merry /* 763*d3c7b9a0SKenneth D. Merry * Upper layer code (drivers, utilities, etc.) should leave this define set to 764*d3c7b9a0SKenneth D. Merry * one and check Header.PageLength or NumDmaEngines at runtime. 765*d3c7b9a0SKenneth D. Merry */ 766*d3c7b9a0SKenneth D. Merry #ifndef MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES 767*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES (1) 768*d3c7b9a0SKenneth D. Merry #endif 769*d3c7b9a0SKenneth D. Merry 770*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_5 771*d3c7b9a0SKenneth D. Merry { 772*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 773*d3c7b9a0SKenneth D. Merry U64 RaidAcceleratorBufferBaseAddress; /* 0x04 */ 774*d3c7b9a0SKenneth D. Merry U64 RaidAcceleratorBufferSize; /* 0x0C */ 775*d3c7b9a0SKenneth D. Merry U64 RaidAcceleratorControlBaseAddress; /* 0x14 */ 776*d3c7b9a0SKenneth D. Merry U8 RAControlSize; /* 0x1C */ 777*d3c7b9a0SKenneth D. Merry U8 NumDmaEngines; /* 0x1D */ 778*d3c7b9a0SKenneth D. Merry U8 RAMinControlSize; /* 0x1E */ 779*d3c7b9a0SKenneth D. Merry U8 RAMaxControlSize; /* 0x1F */ 780*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x20 */ 781*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x24 */ 782*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x28 */ 783*d3c7b9a0SKenneth D. Merry U32 DmaEngineCapabilities[MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES]; /* 0x2C */ 784*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_5, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_5, 785*d3c7b9a0SKenneth D. Merry Mpi2IOUnitPage5_t, MPI2_POINTER pMpi2IOUnitPage5_t; 786*d3c7b9a0SKenneth D. Merry 787*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE5_PAGEVERSION (0x00) 788*d3c7b9a0SKenneth D. Merry 789*d3c7b9a0SKenneth D. Merry /* defines for IO Unit Page 5 DmaEngineCapabilities field */ 790*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_MASK_MAX_REQUESTS (0xFF00) 791*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_SHIFT_MAX_REQUESTS (16) 792*d3c7b9a0SKenneth D. Merry 793*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_EEDP (0x0008) 794*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_PARITY_GENERATION (0x0004) 795*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_HASHING (0x0002) 796*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE5_DMA_CAP_ENCRYPTION (0x0001) 797*d3c7b9a0SKenneth D. Merry 798*d3c7b9a0SKenneth D. Merry 799*d3c7b9a0SKenneth D. Merry /* IO Unit Page 6 */ 800*d3c7b9a0SKenneth D. Merry 801*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_6 802*d3c7b9a0SKenneth D. Merry { 803*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 804*d3c7b9a0SKenneth D. Merry U16 Flags; /* 0x04 */ 805*d3c7b9a0SKenneth D. Merry U8 RAHostControlSize; /* 0x06 */ 806*d3c7b9a0SKenneth D. Merry U8 Reserved0; /* 0x07 */ 807*d3c7b9a0SKenneth D. Merry U64 RaidAcceleratorHostControlBaseAddress; /* 0x08 */ 808*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x10 */ 809*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x14 */ 810*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x18 */ 811*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_6, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_6, 812*d3c7b9a0SKenneth D. Merry Mpi2IOUnitPage6_t, MPI2_POINTER pMpi2IOUnitPage6_t; 813*d3c7b9a0SKenneth D. Merry 814*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE6_PAGEVERSION (0x00) 815*d3c7b9a0SKenneth D. Merry 816*d3c7b9a0SKenneth D. Merry /* defines for IO Unit Page 6 Flags field */ 817*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE6_FLAGS_ENABLE_RAID_ACCELERATOR (0x0001) 818*d3c7b9a0SKenneth D. Merry 819*d3c7b9a0SKenneth D. Merry 820*d3c7b9a0SKenneth D. Merry /* IO Unit Page 7 */ 821*d3c7b9a0SKenneth D. Merry 822*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_7 823*d3c7b9a0SKenneth D. Merry { 824*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 825*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x04 */ 826*d3c7b9a0SKenneth D. Merry U8 PCIeWidth; /* 0x06 */ 827*d3c7b9a0SKenneth D. Merry U8 PCIeSpeed; /* 0x07 */ 828*d3c7b9a0SKenneth D. Merry U32 ProcessorState; /* 0x08 */ 829*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x0C */ 830*d3c7b9a0SKenneth D. Merry U16 IOCTemperature; /* 0x10 */ 831*d3c7b9a0SKenneth D. Merry U8 IOCTemperatureUnits; /* 0x12 */ 832*d3c7b9a0SKenneth D. Merry U8 IOCSpeed; /* 0x13 */ 833*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x14 */ 834*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IO_UNIT_7, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IO_UNIT_7, 835*d3c7b9a0SKenneth D. Merry Mpi2IOUnitPage7_t, MPI2_POINTER pMpi2IOUnitPage7_t; 836*d3c7b9a0SKenneth D. Merry 837*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PAGEVERSION (0x00) 838*d3c7b9a0SKenneth D. Merry 839*d3c7b9a0SKenneth D. Merry /* defines for IO Unit Page 7 PCIeWidth field */ 840*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X1 (0x01) 841*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X2 (0x02) 842*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X4 (0x04) 843*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_WIDTH_X8 (0x08) 844*d3c7b9a0SKenneth D. Merry 845*d3c7b9a0SKenneth D. Merry /* defines for IO Unit Page 7 PCIeSpeed field */ 846*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_SPEED_2_5_GBPS (0x00) 847*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_SPEED_5_0_GBPS (0x01) 848*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PCIE_SPEED_8_0_GBPS (0x02) 849*d3c7b9a0SKenneth D. Merry 850*d3c7b9a0SKenneth D. Merry /* defines for IO Unit Page 7 ProcessorState field */ 851*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_MASK_SECOND (0x0000000F) 852*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_SHIFT_SECOND (0) 853*d3c7b9a0SKenneth D. Merry 854*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_NOT_PRESENT (0x00) 855*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_DISABLED (0x01) 856*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_PSTATE_ENABLED (0x02) 857*d3c7b9a0SKenneth D. Merry 858*d3c7b9a0SKenneth D. Merry /* defines for IO Unit Page 7 IOCTemperatureUnits field */ 859*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_TEMP_NOT_PRESENT (0x00) 860*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_TEMP_FAHRENHEIT (0x01) 861*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_TEMP_CELSIUS (0x02) 862*d3c7b9a0SKenneth D. Merry 863*d3c7b9a0SKenneth D. Merry /* defines for IO Unit Page 7 IOCSpeed field */ 864*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_SPEED_FULL (0x01) 865*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_SPEED_HALF (0x02) 866*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_SPEED_QUARTER (0x04) 867*d3c7b9a0SKenneth D. Merry #define MPI2_IOUNITPAGE7_IOC_SPEED_EIGHTH (0x08) 868*d3c7b9a0SKenneth D. Merry 869*d3c7b9a0SKenneth D. Merry 870*d3c7b9a0SKenneth D. Merry 871*d3c7b9a0SKenneth D. Merry /**************************************************************************** 872*d3c7b9a0SKenneth D. Merry * IOC Config Pages 873*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 874*d3c7b9a0SKenneth D. Merry 875*d3c7b9a0SKenneth D. Merry /* IOC Page 0 */ 876*d3c7b9a0SKenneth D. Merry 877*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_0 878*d3c7b9a0SKenneth D. Merry { 879*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 880*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x04 */ 881*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x08 */ 882*d3c7b9a0SKenneth D. Merry U16 VendorID; /* 0x0C */ 883*d3c7b9a0SKenneth D. Merry U16 DeviceID; /* 0x0E */ 884*d3c7b9a0SKenneth D. Merry U8 RevisionID; /* 0x10 */ 885*d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x11 */ 886*d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x12 */ 887*d3c7b9a0SKenneth D. Merry U32 ClassCode; /* 0x14 */ 888*d3c7b9a0SKenneth D. Merry U16 SubsystemVendorID; /* 0x18 */ 889*d3c7b9a0SKenneth D. Merry U16 SubsystemID; /* 0x1A */ 890*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_0, 891*d3c7b9a0SKenneth D. Merry Mpi2IOCPage0_t, MPI2_POINTER pMpi2IOCPage0_t; 892*d3c7b9a0SKenneth D. Merry 893*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE0_PAGEVERSION (0x02) 894*d3c7b9a0SKenneth D. Merry 895*d3c7b9a0SKenneth D. Merry 896*d3c7b9a0SKenneth D. Merry /* IOC Page 1 */ 897*d3c7b9a0SKenneth D. Merry 898*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_1 899*d3c7b9a0SKenneth D. Merry { 900*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 901*d3c7b9a0SKenneth D. Merry U32 Flags; /* 0x04 */ 902*d3c7b9a0SKenneth D. Merry U32 CoalescingTimeout; /* 0x08 */ 903*d3c7b9a0SKenneth D. Merry U8 CoalescingDepth; /* 0x0C */ 904*d3c7b9a0SKenneth D. Merry U8 PCISlotNum; /* 0x0D */ 905*d3c7b9a0SKenneth D. Merry U8 PCIBusNum; /* 0x0E */ 906*d3c7b9a0SKenneth D. Merry U8 PCIDomainSegment; /* 0x0F */ 907*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x10 */ 908*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x14 */ 909*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_1, 910*d3c7b9a0SKenneth D. Merry Mpi2IOCPage1_t, MPI2_POINTER pMpi2IOCPage1_t; 911*d3c7b9a0SKenneth D. Merry 912*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE1_PAGEVERSION (0x05) 913*d3c7b9a0SKenneth D. Merry 914*d3c7b9a0SKenneth D. Merry /* defines for IOC Page 1 Flags field */ 915*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE1_REPLY_COALESCING (0x00000001) 916*d3c7b9a0SKenneth D. Merry 917*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE1_PCISLOTNUM_UNKNOWN (0xFF) 918*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE1_PCIBUSNUM_UNKNOWN (0xFF) 919*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE1_PCIDOMAIN_UNKNOWN (0xFF) 920*d3c7b9a0SKenneth D. Merry 921*d3c7b9a0SKenneth D. Merry /* IOC Page 6 */ 922*d3c7b9a0SKenneth D. Merry 923*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_6 924*d3c7b9a0SKenneth D. Merry { 925*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 926*d3c7b9a0SKenneth D. Merry U32 CapabilitiesFlags; /* 0x04 */ 927*d3c7b9a0SKenneth D. Merry U8 MaxDrivesRAID0; /* 0x08 */ 928*d3c7b9a0SKenneth D. Merry U8 MaxDrivesRAID1; /* 0x09 */ 929*d3c7b9a0SKenneth D. Merry U8 MaxDrivesRAID1E; /* 0x0A */ 930*d3c7b9a0SKenneth D. Merry U8 MaxDrivesRAID10; /* 0x0B */ 931*d3c7b9a0SKenneth D. Merry U8 MinDrivesRAID0; /* 0x0C */ 932*d3c7b9a0SKenneth D. Merry U8 MinDrivesRAID1; /* 0x0D */ 933*d3c7b9a0SKenneth D. Merry U8 MinDrivesRAID1E; /* 0x0E */ 934*d3c7b9a0SKenneth D. Merry U8 MinDrivesRAID10; /* 0x0F */ 935*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x10 */ 936*d3c7b9a0SKenneth D. Merry U8 MaxGlobalHotSpares; /* 0x14 */ 937*d3c7b9a0SKenneth D. Merry U8 MaxPhysDisks; /* 0x15 */ 938*d3c7b9a0SKenneth D. Merry U8 MaxVolumes; /* 0x16 */ 939*d3c7b9a0SKenneth D. Merry U8 MaxConfigs; /* 0x17 */ 940*d3c7b9a0SKenneth D. Merry U8 MaxOCEDisks; /* 0x18 */ 941*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x19 */ 942*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x1A */ 943*d3c7b9a0SKenneth D. Merry U32 SupportedStripeSizeMapRAID0; /* 0x1C */ 944*d3c7b9a0SKenneth D. Merry U32 SupportedStripeSizeMapRAID1E; /* 0x20 */ 945*d3c7b9a0SKenneth D. Merry U32 SupportedStripeSizeMapRAID10; /* 0x24 */ 946*d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x28 */ 947*d3c7b9a0SKenneth D. Merry U32 Reserved5; /* 0x2C */ 948*d3c7b9a0SKenneth D. Merry U16 DefaultMetadataSize; /* 0x30 */ 949*d3c7b9a0SKenneth D. Merry U16 Reserved6; /* 0x32 */ 950*d3c7b9a0SKenneth D. Merry U16 MaxBadBlockTableEntries; /* 0x34 */ 951*d3c7b9a0SKenneth D. Merry U16 Reserved7; /* 0x36 */ 952*d3c7b9a0SKenneth D. Merry U32 IRNvsramVersion; /* 0x38 */ 953*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_6, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_6, 954*d3c7b9a0SKenneth D. Merry Mpi2IOCPage6_t, MPI2_POINTER pMpi2IOCPage6_t; 955*d3c7b9a0SKenneth D. Merry 956*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE6_PAGEVERSION (0x04) 957*d3c7b9a0SKenneth D. Merry 958*d3c7b9a0SKenneth D. Merry /* defines for IOC Page 6 CapabilitiesFlags */ 959*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_RAID10_SUPPORT (0x00000010) 960*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_RAID1_SUPPORT (0x00000008) 961*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_RAID1E_SUPPORT (0x00000004) 962*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_RAID0_SUPPORT (0x00000002) 963*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE6_CAP_FLAGS_GLOBAL_HOT_SPARE (0x00000001) 964*d3c7b9a0SKenneth D. Merry 965*d3c7b9a0SKenneth D. Merry 966*d3c7b9a0SKenneth D. Merry /* IOC Page 7 */ 967*d3c7b9a0SKenneth D. Merry 968*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE7_EVENTMASK_WORDS (4) 969*d3c7b9a0SKenneth D. Merry 970*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_7 971*d3c7b9a0SKenneth D. Merry { 972*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 973*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x04 */ 974*d3c7b9a0SKenneth D. Merry U32 EventMasks[MPI2_IOCPAGE7_EVENTMASK_WORDS];/* 0x08 */ 975*d3c7b9a0SKenneth D. Merry U16 SASBroadcastPrimitiveMasks; /* 0x18 */ 976*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x1A */ 977*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x1C */ 978*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_7, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_7, 979*d3c7b9a0SKenneth D. Merry Mpi2IOCPage7_t, MPI2_POINTER pMpi2IOCPage7_t; 980*d3c7b9a0SKenneth D. Merry 981*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE7_PAGEVERSION (0x01) 982*d3c7b9a0SKenneth D. Merry 983*d3c7b9a0SKenneth D. Merry 984*d3c7b9a0SKenneth D. Merry /* IOC Page 8 */ 985*d3c7b9a0SKenneth D. Merry 986*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_IOC_8 987*d3c7b9a0SKenneth D. Merry { 988*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 989*d3c7b9a0SKenneth D. Merry U8 NumDevsPerEnclosure; /* 0x04 */ 990*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x05 */ 991*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x06 */ 992*d3c7b9a0SKenneth D. Merry U16 MaxPersistentEntries; /* 0x08 */ 993*d3c7b9a0SKenneth D. Merry U16 MaxNumPhysicalMappedIDs; /* 0x0A */ 994*d3c7b9a0SKenneth D. Merry U16 Flags; /* 0x0C */ 995*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0E */ 996*d3c7b9a0SKenneth D. Merry U16 IRVolumeMappingFlags; /* 0x10 */ 997*d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x12 */ 998*d3c7b9a0SKenneth D. Merry U32 Reserved5; /* 0x14 */ 999*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_IOC_8, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_IOC_8, 1000*d3c7b9a0SKenneth D. Merry Mpi2IOCPage8_t, MPI2_POINTER pMpi2IOCPage8_t; 1001*d3c7b9a0SKenneth D. Merry 1002*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_PAGEVERSION (0x00) 1003*d3c7b9a0SKenneth D. Merry 1004*d3c7b9a0SKenneth D. Merry /* defines for IOC Page 8 Flags field */ 1005*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_DA_START_SLOT_1 (0x00000020) 1006*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_RESERVED_TARGETID_0 (0x00000010) 1007*d3c7b9a0SKenneth D. Merry 1008*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_MASK_MAPPING_MODE (0x0000000E) 1009*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_DEVICE_PERSISTENCE_MAPPING (0x00000000) 1010*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_ENCLOSURE_SLOT_MAPPING (0x00000002) 1011*d3c7b9a0SKenneth D. Merry 1012*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_DISABLE_PERSISTENT_MAPPING (0x00000001) 1013*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_FLAGS_ENABLE_PERSISTENT_MAPPING (0x00000000) 1014*d3c7b9a0SKenneth D. Merry 1015*d3c7b9a0SKenneth D. Merry /* defines for IOC Page 8 IRVolumeMappingFlags */ 1016*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_IRFLAGS_MASK_VOLUME_MAPPING_MODE (0x00000003) 1017*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_IRFLAGS_LOW_VOLUME_MAPPING (0x00000000) 1018*d3c7b9a0SKenneth D. Merry #define MPI2_IOCPAGE8_IRFLAGS_HIGH_VOLUME_MAPPING (0x00000001) 1019*d3c7b9a0SKenneth D. Merry 1020*d3c7b9a0SKenneth D. Merry 1021*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1022*d3c7b9a0SKenneth D. Merry * BIOS Config Pages 1023*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1024*d3c7b9a0SKenneth D. Merry 1025*d3c7b9a0SKenneth D. Merry /* BIOS Page 1 */ 1026*d3c7b9a0SKenneth D. Merry 1027*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_BIOS_1 1028*d3c7b9a0SKenneth D. Merry { 1029*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1030*d3c7b9a0SKenneth D. Merry U32 BiosOptions; /* 0x04 */ 1031*d3c7b9a0SKenneth D. Merry U32 IOCSettings; /* 0x08 */ 1032*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x0C */ 1033*d3c7b9a0SKenneth D. Merry U32 DeviceSettings; /* 0x10 */ 1034*d3c7b9a0SKenneth D. Merry U16 NumberOfDevices; /* 0x14 */ 1035*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x16 */ 1036*d3c7b9a0SKenneth D. Merry U16 IOTimeoutBlockDevicesNonRM; /* 0x18 */ 1037*d3c7b9a0SKenneth D. Merry U16 IOTimeoutSequential; /* 0x1A */ 1038*d3c7b9a0SKenneth D. Merry U16 IOTimeoutOther; /* 0x1C */ 1039*d3c7b9a0SKenneth D. Merry U16 IOTimeoutBlockDevicesRM; /* 0x1E */ 1040*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_BIOS_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_1, 1041*d3c7b9a0SKenneth D. Merry Mpi2BiosPage1_t, MPI2_POINTER pMpi2BiosPage1_t; 1042*d3c7b9a0SKenneth D. Merry 1043*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_PAGEVERSION (0x04) 1044*d3c7b9a0SKenneth D. Merry 1045*d3c7b9a0SKenneth D. Merry /* values for BIOS Page 1 BiosOptions field */ 1046*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_OPTIONS_DISABLE_BIOS (0x00000001) 1047*d3c7b9a0SKenneth D. Merry 1048*d3c7b9a0SKenneth D. Merry /* values for BIOS Page 1 IOCSettings field */ 1049*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_MASK_BOOT_PREFERENCE (0x00030000) 1050*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_ENCLOSURE_SLOT_BOOT (0x00000000) 1051*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_SAS_ADDRESS_BOOT (0x00010000) 1052*d3c7b9a0SKenneth D. Merry 1053*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_MASK_RM_SETTING (0x000000C0) 1054*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_NONE_RM_SETTING (0x00000000) 1055*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_BOOT_RM_SETTING (0x00000040) 1056*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_MEDIA_RM_SETTING (0x00000080) 1057*d3c7b9a0SKenneth D. Merry 1058*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_MASK_ADAPTER_SUPPORT (0x00000030) 1059*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_NO_SUPPORT (0x00000000) 1060*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_BIOS_SUPPORT (0x00000010) 1061*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_OS_SUPPORT (0x00000020) 1062*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_ALL_SUPPORT (0x00000030) 1063*d3c7b9a0SKenneth D. Merry 1064*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_IOCSET_ALTERNATE_CHS (0x00000008) 1065*d3c7b9a0SKenneth D. Merry 1066*d3c7b9a0SKenneth D. Merry /* values for BIOS Page 1 DeviceSettings field */ 1067*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_SMART_POLLING (0x00000010) 1068*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_SEQ_LUN (0x00000008) 1069*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_RM_LUN (0x00000004) 1070*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_NON_RM_LUN (0x00000002) 1071*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE1_DEVSET_DISABLE_OTHER_LUN (0x00000001) 1072*d3c7b9a0SKenneth D. Merry 1073*d3c7b9a0SKenneth D. Merry 1074*d3c7b9a0SKenneth D. Merry /* BIOS Page 2 */ 1075*d3c7b9a0SKenneth D. Merry 1076*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_BOOT_DEVICE_ADAPTER_ORDER 1077*d3c7b9a0SKenneth D. Merry { 1078*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x00 */ 1079*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x04 */ 1080*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x08 */ 1081*d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x0C */ 1082*d3c7b9a0SKenneth D. Merry U32 Reserved5; /* 0x10 */ 1083*d3c7b9a0SKenneth D. Merry U32 Reserved6; /* 0x14 */ 1084*d3c7b9a0SKenneth D. Merry } MPI2_BOOT_DEVICE_ADAPTER_ORDER, 1085*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_BOOT_DEVICE_ADAPTER_ORDER, 1086*d3c7b9a0SKenneth D. Merry Mpi2BootDeviceAdapterOrder_t, MPI2_POINTER pMpi2BootDeviceAdapterOrder_t; 1087*d3c7b9a0SKenneth D. Merry 1088*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_BOOT_DEVICE_SAS_WWID 1089*d3c7b9a0SKenneth D. Merry { 1090*d3c7b9a0SKenneth D. Merry U64 SASAddress; /* 0x00 */ 1091*d3c7b9a0SKenneth D. Merry U8 LUN[8]; /* 0x08 */ 1092*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x10 */ 1093*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x14 */ 1094*d3c7b9a0SKenneth D. Merry } MPI2_BOOT_DEVICE_SAS_WWID, MPI2_POINTER PTR_MPI2_BOOT_DEVICE_SAS_WWID, 1095*d3c7b9a0SKenneth D. Merry Mpi2BootDeviceSasWwid_t, MPI2_POINTER pMpi2BootDeviceSasWwid_t; 1096*d3c7b9a0SKenneth D. Merry 1097*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_BOOT_DEVICE_ENCLOSURE_SLOT 1098*d3c7b9a0SKenneth D. Merry { 1099*d3c7b9a0SKenneth D. Merry U64 EnclosureLogicalID; /* 0x00 */ 1100*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 1101*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x0C */ 1102*d3c7b9a0SKenneth D. Merry U16 SlotNumber; /* 0x10 */ 1103*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x12 */ 1104*d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x14 */ 1105*d3c7b9a0SKenneth D. Merry } MPI2_BOOT_DEVICE_ENCLOSURE_SLOT, 1106*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_BOOT_DEVICE_ENCLOSURE_SLOT, 1107*d3c7b9a0SKenneth D. Merry Mpi2BootDeviceEnclosureSlot_t, MPI2_POINTER pMpi2BootDeviceEnclosureSlot_t; 1108*d3c7b9a0SKenneth D. Merry 1109*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_BOOT_DEVICE_DEVICE_NAME 1110*d3c7b9a0SKenneth D. Merry { 1111*d3c7b9a0SKenneth D. Merry U64 DeviceName; /* 0x00 */ 1112*d3c7b9a0SKenneth D. Merry U8 LUN[8]; /* 0x08 */ 1113*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x10 */ 1114*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x14 */ 1115*d3c7b9a0SKenneth D. Merry } MPI2_BOOT_DEVICE_DEVICE_NAME, MPI2_POINTER PTR_MPI2_BOOT_DEVICE_DEVICE_NAME, 1116*d3c7b9a0SKenneth D. Merry Mpi2BootDeviceDeviceName_t, MPI2_POINTER pMpi2BootDeviceDeviceName_t; 1117*d3c7b9a0SKenneth D. Merry 1118*d3c7b9a0SKenneth D. Merry typedef union _MPI2_MPI2_BIOSPAGE2_BOOT_DEVICE 1119*d3c7b9a0SKenneth D. Merry { 1120*d3c7b9a0SKenneth D. Merry MPI2_BOOT_DEVICE_ADAPTER_ORDER AdapterOrder; 1121*d3c7b9a0SKenneth D. Merry MPI2_BOOT_DEVICE_SAS_WWID SasWwid; 1122*d3c7b9a0SKenneth D. Merry MPI2_BOOT_DEVICE_ENCLOSURE_SLOT EnclosureSlot; 1123*d3c7b9a0SKenneth D. Merry MPI2_BOOT_DEVICE_DEVICE_NAME DeviceName; 1124*d3c7b9a0SKenneth D. Merry } MPI2_BIOSPAGE2_BOOT_DEVICE, MPI2_POINTER PTR_MPI2_BIOSPAGE2_BOOT_DEVICE, 1125*d3c7b9a0SKenneth D. Merry Mpi2BiosPage2BootDevice_t, MPI2_POINTER pMpi2BiosPage2BootDevice_t; 1126*d3c7b9a0SKenneth D. Merry 1127*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_BIOS_2 1128*d3c7b9a0SKenneth D. Merry { 1129*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1130*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x04 */ 1131*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x08 */ 1132*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x0C */ 1133*d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x10 */ 1134*d3c7b9a0SKenneth D. Merry U32 Reserved5; /* 0x14 */ 1135*d3c7b9a0SKenneth D. Merry U32 Reserved6; /* 0x18 */ 1136*d3c7b9a0SKenneth D. Merry U8 ReqBootDeviceForm; /* 0x1C */ 1137*d3c7b9a0SKenneth D. Merry U8 Reserved7; /* 0x1D */ 1138*d3c7b9a0SKenneth D. Merry U16 Reserved8; /* 0x1E */ 1139*d3c7b9a0SKenneth D. Merry MPI2_BIOSPAGE2_BOOT_DEVICE RequestedBootDevice; /* 0x20 */ 1140*d3c7b9a0SKenneth D. Merry U8 ReqAltBootDeviceForm; /* 0x38 */ 1141*d3c7b9a0SKenneth D. Merry U8 Reserved9; /* 0x39 */ 1142*d3c7b9a0SKenneth D. Merry U16 Reserved10; /* 0x3A */ 1143*d3c7b9a0SKenneth D. Merry MPI2_BIOSPAGE2_BOOT_DEVICE RequestedAltBootDevice; /* 0x3C */ 1144*d3c7b9a0SKenneth D. Merry U8 CurrentBootDeviceForm; /* 0x58 */ 1145*d3c7b9a0SKenneth D. Merry U8 Reserved11; /* 0x59 */ 1146*d3c7b9a0SKenneth D. Merry U16 Reserved12; /* 0x5A */ 1147*d3c7b9a0SKenneth D. Merry MPI2_BIOSPAGE2_BOOT_DEVICE CurrentBootDevice; /* 0x58 */ 1148*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_BIOS_2, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_2, 1149*d3c7b9a0SKenneth D. Merry Mpi2BiosPage2_t, MPI2_POINTER pMpi2BiosPage2_t; 1150*d3c7b9a0SKenneth D. Merry 1151*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE2_PAGEVERSION (0x04) 1152*d3c7b9a0SKenneth D. Merry 1153*d3c7b9a0SKenneth D. Merry /* values for BIOS Page 2 BootDeviceForm fields */ 1154*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_MASK (0x0F) 1155*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_NO_DEVICE_SPECIFIED (0x00) 1156*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_SAS_WWID (0x05) 1157*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_ENCLOSURE_SLOT (0x06) 1158*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE2_FORM_DEVICE_NAME (0x07) 1159*d3c7b9a0SKenneth D. Merry 1160*d3c7b9a0SKenneth D. Merry 1161*d3c7b9a0SKenneth D. Merry /* BIOS Page 3 */ 1162*d3c7b9a0SKenneth D. Merry 1163*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_ADAPTER_INFO 1164*d3c7b9a0SKenneth D. Merry { 1165*d3c7b9a0SKenneth D. Merry U8 PciBusNumber; /* 0x00 */ 1166*d3c7b9a0SKenneth D. Merry U8 PciDeviceAndFunctionNumber; /* 0x01 */ 1167*d3c7b9a0SKenneth D. Merry U16 AdapterFlags; /* 0x02 */ 1168*d3c7b9a0SKenneth D. Merry } MPI2_ADAPTER_INFO, MPI2_POINTER PTR_MPI2_ADAPTER_INFO, 1169*d3c7b9a0SKenneth D. Merry Mpi2AdapterInfo_t, MPI2_POINTER pMpi2AdapterInfo_t; 1170*d3c7b9a0SKenneth D. Merry 1171*d3c7b9a0SKenneth D. Merry #define MPI2_ADAPTER_INFO_FLAGS_EMBEDDED (0x0001) 1172*d3c7b9a0SKenneth D. Merry #define MPI2_ADAPTER_INFO_FLAGS_INIT_STATUS (0x0002) 1173*d3c7b9a0SKenneth D. Merry 1174*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_BIOS_3 1175*d3c7b9a0SKenneth D. Merry { 1176*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1177*d3c7b9a0SKenneth D. Merry U32 GlobalFlags; /* 0x04 */ 1178*d3c7b9a0SKenneth D. Merry U32 BiosVersion; /* 0x08 */ 1179*d3c7b9a0SKenneth D. Merry MPI2_ADAPTER_INFO AdapterOrder[4]; /* 0x0C */ 1180*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x1C */ 1181*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_BIOS_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_3, 1182*d3c7b9a0SKenneth D. Merry Mpi2BiosPage3_t, MPI2_POINTER pMpi2BiosPage3_t; 1183*d3c7b9a0SKenneth D. Merry 1184*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE3_PAGEVERSION (0x00) 1185*d3c7b9a0SKenneth D. Merry 1186*d3c7b9a0SKenneth D. Merry /* values for BIOS Page 3 GlobalFlags */ 1187*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_PAUSE_ON_ERROR (0x00000002) 1188*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_VERBOSE_ENABLE (0x00000004) 1189*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_HOOK_INT_40_DISABLE (0x00000010) 1190*d3c7b9a0SKenneth D. Merry 1191*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_DEV_LIST_DISPLAY_MASK (0x000000E0) 1192*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_INSTALLED_DEV_DISPLAY (0x00000000) 1193*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_ADAPTER_DISPLAY (0x00000020) 1194*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE3_FLAGS_ADAPTER_DEV_DISPLAY (0x00000040) 1195*d3c7b9a0SKenneth D. Merry 1196*d3c7b9a0SKenneth D. Merry 1197*d3c7b9a0SKenneth D. Merry /* BIOS Page 4 */ 1198*d3c7b9a0SKenneth D. Merry 1199*d3c7b9a0SKenneth D. Merry /* 1200*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1201*d3c7b9a0SKenneth D. Merry * one and check Header.PageLength or NumPhys at runtime. 1202*d3c7b9a0SKenneth D. Merry */ 1203*d3c7b9a0SKenneth D. Merry #ifndef MPI2_BIOS_PAGE_4_PHY_ENTRIES 1204*d3c7b9a0SKenneth D. Merry #define MPI2_BIOS_PAGE_4_PHY_ENTRIES (1) 1205*d3c7b9a0SKenneth D. Merry #endif 1206*d3c7b9a0SKenneth D. Merry 1207*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_BIOS4_ENTRY 1208*d3c7b9a0SKenneth D. Merry { 1209*d3c7b9a0SKenneth D. Merry U64 ReassignmentWWID; /* 0x00 */ 1210*d3c7b9a0SKenneth D. Merry U64 ReassignmentDeviceName; /* 0x08 */ 1211*d3c7b9a0SKenneth D. Merry } MPI2_BIOS4_ENTRY, MPI2_POINTER PTR_MPI2_BIOS4_ENTRY, 1212*d3c7b9a0SKenneth D. Merry Mpi2MBios4Entry_t, MPI2_POINTER pMpi2Bios4Entry_t; 1213*d3c7b9a0SKenneth D. Merry 1214*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_BIOS_4 1215*d3c7b9a0SKenneth D. Merry { 1216*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1217*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x04 */ 1218*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x05 */ 1219*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x06 */ 1220*d3c7b9a0SKenneth D. Merry MPI2_BIOS4_ENTRY Phy[MPI2_BIOS_PAGE_4_PHY_ENTRIES]; /* 0x08 */ 1221*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_BIOS_4, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_BIOS_4, 1222*d3c7b9a0SKenneth D. Merry Mpi2BiosPage4_t, MPI2_POINTER pMpi2BiosPage4_t; 1223*d3c7b9a0SKenneth D. Merry 1224*d3c7b9a0SKenneth D. Merry #define MPI2_BIOSPAGE4_PAGEVERSION (0x01) 1225*d3c7b9a0SKenneth D. Merry 1226*d3c7b9a0SKenneth D. Merry 1227*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1228*d3c7b9a0SKenneth D. Merry * RAID Volume Config Pages 1229*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1230*d3c7b9a0SKenneth D. Merry 1231*d3c7b9a0SKenneth D. Merry /* RAID Volume Page 0 */ 1232*d3c7b9a0SKenneth D. Merry 1233*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAIDVOL0_PHYS_DISK 1234*d3c7b9a0SKenneth D. Merry { 1235*d3c7b9a0SKenneth D. Merry U8 RAIDSetNum; /* 0x00 */ 1236*d3c7b9a0SKenneth D. Merry U8 PhysDiskMap; /* 0x01 */ 1237*d3c7b9a0SKenneth D. Merry U8 PhysDiskNum; /* 0x02 */ 1238*d3c7b9a0SKenneth D. Merry U8 Reserved; /* 0x03 */ 1239*d3c7b9a0SKenneth D. Merry } MPI2_RAIDVOL0_PHYS_DISK, MPI2_POINTER PTR_MPI2_RAIDVOL0_PHYS_DISK, 1240*d3c7b9a0SKenneth D. Merry Mpi2RaidVol0PhysDisk_t, MPI2_POINTER pMpi2RaidVol0PhysDisk_t; 1241*d3c7b9a0SKenneth D. Merry 1242*d3c7b9a0SKenneth D. Merry /* defines for the PhysDiskMap field */ 1243*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_PHYSDISK_PRIMARY (0x01) 1244*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_PHYSDISK_SECONDARY (0x02) 1245*d3c7b9a0SKenneth D. Merry 1246*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAIDVOL0_SETTINGS 1247*d3c7b9a0SKenneth D. Merry { 1248*d3c7b9a0SKenneth D. Merry U16 Settings; /* 0x00 */ 1249*d3c7b9a0SKenneth D. Merry U8 HotSparePool; /* 0x01 */ 1250*d3c7b9a0SKenneth D. Merry U8 Reserved; /* 0x02 */ 1251*d3c7b9a0SKenneth D. Merry } MPI2_RAIDVOL0_SETTINGS, MPI2_POINTER PTR_MPI2_RAIDVOL0_SETTINGS, 1252*d3c7b9a0SKenneth D. Merry Mpi2RaidVol0Settings_t, MPI2_POINTER pMpi2RaidVol0Settings_t; 1253*d3c7b9a0SKenneth D. Merry 1254*d3c7b9a0SKenneth D. Merry /* RAID Volume Page 0 HotSparePool defines, also used in RAID Physical Disk */ 1255*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_0 (0x01) 1256*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_1 (0x02) 1257*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_2 (0x04) 1258*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_3 (0x08) 1259*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_4 (0x10) 1260*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_5 (0x20) 1261*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_6 (0x40) 1262*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_HOT_SPARE_POOL_7 (0x80) 1263*d3c7b9a0SKenneth D. Merry 1264*d3c7b9a0SKenneth D. Merry /* RAID Volume Page 0 VolumeSettings defines */ 1265*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_USE_PRODUCT_ID_SUFFIX (0x0008) 1266*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_AUTO_CONFIG_HSWAP_DISABLE (0x0004) 1267*d3c7b9a0SKenneth D. Merry 1268*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_MASK_WRITE_CACHING (0x0003) 1269*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_UNCHANGED (0x0000) 1270*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_DISABLE_WRITE_CACHING (0x0001) 1271*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SETTING_ENABLE_WRITE_CACHING (0x0002) 1272*d3c7b9a0SKenneth D. Merry 1273*d3c7b9a0SKenneth D. Merry /* 1274*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1275*d3c7b9a0SKenneth D. Merry * one and check Header.PageLength at runtime. 1276*d3c7b9a0SKenneth D. Merry */ 1277*d3c7b9a0SKenneth D. Merry #ifndef MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX 1278*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX (1) 1279*d3c7b9a0SKenneth D. Merry #endif 1280*d3c7b9a0SKenneth D. Merry 1281*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RAID_VOL_0 1282*d3c7b9a0SKenneth D. Merry { 1283*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1284*d3c7b9a0SKenneth D. Merry U16 DevHandle; /* 0x04 */ 1285*d3c7b9a0SKenneth D. Merry U8 VolumeState; /* 0x06 */ 1286*d3c7b9a0SKenneth D. Merry U8 VolumeType; /* 0x07 */ 1287*d3c7b9a0SKenneth D. Merry U32 VolumeStatusFlags; /* 0x08 */ 1288*d3c7b9a0SKenneth D. Merry MPI2_RAIDVOL0_SETTINGS VolumeSettings; /* 0x0C */ 1289*d3c7b9a0SKenneth D. Merry U64 MaxLBA; /* 0x10 */ 1290*d3c7b9a0SKenneth D. Merry U32 StripeSize; /* 0x18 */ 1291*d3c7b9a0SKenneth D. Merry U16 BlockSize; /* 0x1C */ 1292*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x1E */ 1293*d3c7b9a0SKenneth D. Merry U8 SupportedPhysDisks; /* 0x20 */ 1294*d3c7b9a0SKenneth D. Merry U8 ResyncRate; /* 0x21 */ 1295*d3c7b9a0SKenneth D. Merry U16 DataScrubDuration; /* 0x22 */ 1296*d3c7b9a0SKenneth D. Merry U8 NumPhysDisks; /* 0x24 */ 1297*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x25 */ 1298*d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x26 */ 1299*d3c7b9a0SKenneth D. Merry U8 InactiveStatus; /* 0x27 */ 1300*d3c7b9a0SKenneth D. Merry MPI2_RAIDVOL0_PHYS_DISK PhysDisk[MPI2_RAID_VOL_PAGE_0_PHYSDISK_MAX]; /* 0x28 */ 1301*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_RAID_VOL_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_VOL_0, 1302*d3c7b9a0SKenneth D. Merry Mpi2RaidVolPage0_t, MPI2_POINTER pMpi2RaidVolPage0_t; 1303*d3c7b9a0SKenneth D. Merry 1304*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_PAGEVERSION (0x0A) 1305*d3c7b9a0SKenneth D. Merry 1306*d3c7b9a0SKenneth D. Merry /* values for RAID VolumeState */ 1307*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_STATE_MISSING (0x00) 1308*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_STATE_FAILED (0x01) 1309*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_STATE_INITIALIZING (0x02) 1310*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_STATE_ONLINE (0x03) 1311*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_STATE_DEGRADED (0x04) 1312*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_STATE_OPTIMAL (0x05) 1313*d3c7b9a0SKenneth D. Merry 1314*d3c7b9a0SKenneth D. Merry /* values for RAID VolumeType */ 1315*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_RAID0 (0x00) 1316*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_RAID1E (0x01) 1317*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_RAID1 (0x02) 1318*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_RAID10 (0x05) 1319*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_VOL_TYPE_UNKNOWN (0xFF) 1320*d3c7b9a0SKenneth D. Merry 1321*d3c7b9a0SKenneth D. Merry /* values for RAID Volume Page 0 VolumeStatusFlags field */ 1322*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_PENDING_RESYNC (0x02000000) 1323*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_BACKG_INIT_PENDING (0x01000000) 1324*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_MDC_PENDING (0x00800000) 1325*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_USER_CONSIST_PENDING (0x00400000) 1326*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_MAKE_DATA_CONSISTENT (0x00200000) 1327*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_DATA_SCRUB (0x00100000) 1328*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_CONSISTENCY_CHECK (0x00080000) 1329*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_CAPACITY_EXPANSION (0x00040000) 1330*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_BACKGROUND_INIT (0x00020000) 1331*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS (0x00010000) 1332*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_OCE_ALLOWED (0x00000040) 1333*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_BGI_COMPLETE (0x00000020) 1334*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_1E_OFFSET_MIRROR (0x00000000) 1335*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_1E_ADJACENT_MIRROR (0x00000010) 1336*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_BAD_BLOCK_TABLE_FULL (0x00000008) 1337*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_VOLUME_INACTIVE (0x00000004) 1338*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_QUIESCED (0x00000002) 1339*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_STATUS_FLAG_ENABLED (0x00000001) 1340*d3c7b9a0SKenneth D. Merry 1341*d3c7b9a0SKenneth D. Merry /* values for RAID Volume Page 0 SupportedPhysDisks field */ 1342*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SUPPORT_SOLID_STATE_DISKS (0x08) 1343*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SUPPORT_HARD_DISKS (0x04) 1344*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SUPPORT_SAS_PROTOCOL (0x02) 1345*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOL0_SUPPORT_SATA_PROTOCOL (0x01) 1346*d3c7b9a0SKenneth D. Merry 1347*d3c7b9a0SKenneth D. Merry /* values for RAID Volume Page 0 InactiveStatus field */ 1348*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_UNKNOWN_INACTIVE (0x00) 1349*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_STALE_METADATA_INACTIVE (0x01) 1350*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_FOREIGN_VOLUME_INACTIVE (0x02) 1351*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_INSUFFICIENT_RESOURCE_INACTIVE (0x03) 1352*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_CLONE_VOLUME_INACTIVE (0x04) 1353*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_INSUFFICIENT_METADATA_INACTIVE (0x05) 1354*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE0_PREVIOUSLY_DELETED (0x06) 1355*d3c7b9a0SKenneth D. Merry 1356*d3c7b9a0SKenneth D. Merry 1357*d3c7b9a0SKenneth D. Merry /* RAID Volume Page 1 */ 1358*d3c7b9a0SKenneth D. Merry 1359*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RAID_VOL_1 1360*d3c7b9a0SKenneth D. Merry { 1361*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1362*d3c7b9a0SKenneth D. Merry U16 DevHandle; /* 0x04 */ 1363*d3c7b9a0SKenneth D. Merry U16 Reserved0; /* 0x06 */ 1364*d3c7b9a0SKenneth D. Merry U8 GUID[24]; /* 0x08 */ 1365*d3c7b9a0SKenneth D. Merry U8 Name[16]; /* 0x20 */ 1366*d3c7b9a0SKenneth D. Merry U64 WWID; /* 0x30 */ 1367*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x38 */ 1368*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x3C */ 1369*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_RAID_VOL_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_VOL_1, 1370*d3c7b9a0SKenneth D. Merry Mpi2RaidVolPage1_t, MPI2_POINTER pMpi2RaidVolPage1_t; 1371*d3c7b9a0SKenneth D. Merry 1372*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDVOLPAGE1_PAGEVERSION (0x03) 1373*d3c7b9a0SKenneth D. Merry 1374*d3c7b9a0SKenneth D. Merry 1375*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1376*d3c7b9a0SKenneth D. Merry * RAID Physical Disk Config Pages 1377*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1378*d3c7b9a0SKenneth D. Merry 1379*d3c7b9a0SKenneth D. Merry /* RAID Physical Disk Page 0 */ 1380*d3c7b9a0SKenneth D. Merry 1381*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAIDPHYSDISK0_SETTINGS 1382*d3c7b9a0SKenneth D. Merry { 1383*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x00 */ 1384*d3c7b9a0SKenneth D. Merry U8 HotSparePool; /* 0x02 */ 1385*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x03 */ 1386*d3c7b9a0SKenneth D. Merry } MPI2_RAIDPHYSDISK0_SETTINGS, MPI2_POINTER PTR_MPI2_RAIDPHYSDISK0_SETTINGS, 1387*d3c7b9a0SKenneth D. Merry Mpi2RaidPhysDisk0Settings_t, MPI2_POINTER pMpi2RaidPhysDisk0Settings_t; 1388*d3c7b9a0SKenneth D. Merry 1389*d3c7b9a0SKenneth D. Merry /* use MPI2_RAID_HOT_SPARE_POOL_ defines for the HotSparePool field */ 1390*d3c7b9a0SKenneth D. Merry 1391*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAIDPHYSDISK0_INQUIRY_DATA 1392*d3c7b9a0SKenneth D. Merry { 1393*d3c7b9a0SKenneth D. Merry U8 VendorID[8]; /* 0x00 */ 1394*d3c7b9a0SKenneth D. Merry U8 ProductID[16]; /* 0x08 */ 1395*d3c7b9a0SKenneth D. Merry U8 ProductRevLevel[4]; /* 0x18 */ 1396*d3c7b9a0SKenneth D. Merry U8 SerialNum[32]; /* 0x1C */ 1397*d3c7b9a0SKenneth D. Merry } MPI2_RAIDPHYSDISK0_INQUIRY_DATA, 1398*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_RAIDPHYSDISK0_INQUIRY_DATA, 1399*d3c7b9a0SKenneth D. Merry Mpi2RaidPhysDisk0InquiryData_t, MPI2_POINTER pMpi2RaidPhysDisk0InquiryData_t; 1400*d3c7b9a0SKenneth D. Merry 1401*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_0 1402*d3c7b9a0SKenneth D. Merry { 1403*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1404*d3c7b9a0SKenneth D. Merry U16 DevHandle; /* 0x04 */ 1405*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x06 */ 1406*d3c7b9a0SKenneth D. Merry U8 PhysDiskNum; /* 0x07 */ 1407*d3c7b9a0SKenneth D. Merry MPI2_RAIDPHYSDISK0_SETTINGS PhysDiskSettings; /* 0x08 */ 1408*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x0C */ 1409*d3c7b9a0SKenneth D. Merry MPI2_RAIDPHYSDISK0_INQUIRY_DATA InquiryData; /* 0x10 */ 1410*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x4C */ 1411*d3c7b9a0SKenneth D. Merry U8 PhysDiskState; /* 0x50 */ 1412*d3c7b9a0SKenneth D. Merry U8 OfflineReason; /* 0x51 */ 1413*d3c7b9a0SKenneth D. Merry U8 IncompatibleReason; /* 0x52 */ 1414*d3c7b9a0SKenneth D. Merry U8 PhysDiskAttributes; /* 0x53 */ 1415*d3c7b9a0SKenneth D. Merry U32 PhysDiskStatusFlags; /* 0x54 */ 1416*d3c7b9a0SKenneth D. Merry U64 DeviceMaxLBA; /* 0x58 */ 1417*d3c7b9a0SKenneth D. Merry U64 HostMaxLBA; /* 0x60 */ 1418*d3c7b9a0SKenneth D. Merry U64 CoercedMaxLBA; /* 0x68 */ 1419*d3c7b9a0SKenneth D. Merry U16 BlockSize; /* 0x70 */ 1420*d3c7b9a0SKenneth D. Merry U16 Reserved5; /* 0x72 */ 1421*d3c7b9a0SKenneth D. Merry U32 Reserved6; /* 0x74 */ 1422*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_RD_PDISK_0, 1423*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RD_PDISK_0, 1424*d3c7b9a0SKenneth D. Merry Mpi2RaidPhysDiskPage0_t, MPI2_POINTER pMpi2RaidPhysDiskPage0_t; 1425*d3c7b9a0SKenneth D. Merry 1426*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDPHYSDISKPAGE0_PAGEVERSION (0x05) 1427*d3c7b9a0SKenneth D. Merry 1428*d3c7b9a0SKenneth D. Merry /* PhysDiskState defines */ 1429*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PD_STATE_NOT_CONFIGURED (0x00) 1430*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PD_STATE_NOT_COMPATIBLE (0x01) 1431*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PD_STATE_OFFLINE (0x02) 1432*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PD_STATE_ONLINE (0x03) 1433*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PD_STATE_HOT_SPARE (0x04) 1434*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PD_STATE_DEGRADED (0x05) 1435*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PD_STATE_REBUILDING (0x06) 1436*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PD_STATE_OPTIMAL (0x07) 1437*d3c7b9a0SKenneth D. Merry 1438*d3c7b9a0SKenneth D. Merry /* OfflineReason defines */ 1439*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_ONLINE (0x00) 1440*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_MISSING (0x01) 1441*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_FAILED (0x03) 1442*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_INITIALIZING (0x04) 1443*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_REQUESTED (0x05) 1444*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_FAILED_REQUESTED (0x06) 1445*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_OFFLINE_OTHER (0xFF) 1446*d3c7b9a0SKenneth D. Merry 1447*d3c7b9a0SKenneth D. Merry /* IncompatibleReason defines */ 1448*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_COMPATIBLE (0x00) 1449*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_PROTOCOL (0x01) 1450*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_BLOCKSIZE (0x02) 1451*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_MAX_LBA (0x03) 1452*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_SATA_EXTENDED_CMD (0x04) 1453*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_REMOVEABLE_MEDIA (0x05) 1454*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_INCOMPATIBLE_UNKNOWN (0xFF) 1455*d3c7b9a0SKenneth D. Merry 1456*d3c7b9a0SKenneth D. Merry /* PhysDiskAttributes defines */ 1457*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_SOLID_STATE_DRIVE (0x08) 1458*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_HARD_DISK_DRIVE (0x04) 1459*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_SAS_PROTOCOL (0x02) 1460*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_ATTRIB_SATA_PROTOCOL (0x01) 1461*d3c7b9a0SKenneth D. Merry 1462*d3c7b9a0SKenneth D. Merry /* PhysDiskStatusFlags defines */ 1463*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_NOT_CERTIFIED (0x00000040) 1464*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_OCE_TARGET (0x00000020) 1465*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_WRITE_CACHE_ENABLED (0x00000010) 1466*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_OPTIMAL_PREVIOUS (0x00000000) 1467*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_NOT_OPTIMAL_PREVIOUS (0x00000008) 1468*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_INACTIVE_VOLUME (0x00000004) 1469*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_QUIESCED (0x00000002) 1470*d3c7b9a0SKenneth D. Merry #define MPI2_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC (0x00000001) 1471*d3c7b9a0SKenneth D. Merry 1472*d3c7b9a0SKenneth D. Merry 1473*d3c7b9a0SKenneth D. Merry /* RAID Physical Disk Page 1 */ 1474*d3c7b9a0SKenneth D. Merry 1475*d3c7b9a0SKenneth D. Merry /* 1476*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1477*d3c7b9a0SKenneth D. Merry * one and check Header.PageLength or NumPhysDiskPaths at runtime. 1478*d3c7b9a0SKenneth D. Merry */ 1479*d3c7b9a0SKenneth D. Merry #ifndef MPI2_RAID_PHYS_DISK1_PATH_MAX 1480*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PHYS_DISK1_PATH_MAX (1) 1481*d3c7b9a0SKenneth D. Merry #endif 1482*d3c7b9a0SKenneth D. Merry 1483*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAIDPHYSDISK1_PATH 1484*d3c7b9a0SKenneth D. Merry { 1485*d3c7b9a0SKenneth D. Merry U16 DevHandle; /* 0x00 */ 1486*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x02 */ 1487*d3c7b9a0SKenneth D. Merry U64 WWID; /* 0x04 */ 1488*d3c7b9a0SKenneth D. Merry U64 OwnerWWID; /* 0x0C */ 1489*d3c7b9a0SKenneth D. Merry U8 OwnerIdentifier; /* 0x14 */ 1490*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x15 */ 1491*d3c7b9a0SKenneth D. Merry U16 Flags; /* 0x16 */ 1492*d3c7b9a0SKenneth D. Merry } MPI2_RAIDPHYSDISK1_PATH, MPI2_POINTER PTR_MPI2_RAIDPHYSDISK1_PATH, 1493*d3c7b9a0SKenneth D. Merry Mpi2RaidPhysDisk1Path_t, MPI2_POINTER pMpi2RaidPhysDisk1Path_t; 1494*d3c7b9a0SKenneth D. Merry 1495*d3c7b9a0SKenneth D. Merry /* RAID Physical Disk Page 1 Physical Disk Path Flags field defines */ 1496*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PHYSDISK1_FLAG_PRIMARY (0x0004) 1497*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PHYSDISK1_FLAG_BROKEN (0x0002) 1498*d3c7b9a0SKenneth D. Merry #define MPI2_RAID_PHYSDISK1_FLAG_INVALID (0x0001) 1499*d3c7b9a0SKenneth D. Merry 1500*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RD_PDISK_1 1501*d3c7b9a0SKenneth D. Merry { 1502*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER Header; /* 0x00 */ 1503*d3c7b9a0SKenneth D. Merry U8 NumPhysDiskPaths; /* 0x04 */ 1504*d3c7b9a0SKenneth D. Merry U8 PhysDiskNum; /* 0x05 */ 1505*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x06 */ 1506*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x08 */ 1507*d3c7b9a0SKenneth D. Merry MPI2_RAIDPHYSDISK1_PATH PhysicalDiskPath[MPI2_RAID_PHYS_DISK1_PATH_MAX];/* 0x0C */ 1508*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_RD_PDISK_1, 1509*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RD_PDISK_1, 1510*d3c7b9a0SKenneth D. Merry Mpi2RaidPhysDiskPage1_t, MPI2_POINTER pMpi2RaidPhysDiskPage1_t; 1511*d3c7b9a0SKenneth D. Merry 1512*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDPHYSDISKPAGE1_PAGEVERSION (0x02) 1513*d3c7b9a0SKenneth D. Merry 1514*d3c7b9a0SKenneth D. Merry 1515*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1516*d3c7b9a0SKenneth D. Merry * values for fields used by several types of SAS Config Pages 1517*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1518*d3c7b9a0SKenneth D. Merry 1519*d3c7b9a0SKenneth D. Merry /* values for NegotiatedLinkRates fields */ 1520*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_MASK_LOGICAL (0xF0) 1521*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_SHIFT_LOGICAL (4) 1522*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_MASK_PHYSICAL (0x0F) 1523*d3c7b9a0SKenneth D. Merry /* link rates used for Negotiated Physical and Logical Link Rate */ 1524*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_UNKNOWN_LINK_RATE (0x00) 1525*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_PHY_DISABLED (0x01) 1526*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_NEGOTIATION_FAILED (0x02) 1527*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_SATA_OOB_COMPLETE (0x03) 1528*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_PORT_SELECTOR (0x04) 1529*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_SMP_RESET_IN_PROGRESS (0x05) 1530*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_1_5 (0x08) 1531*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_3_0 (0x09) 1532*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_NEG_LINK_RATE_6_0 (0x0A) 1533*d3c7b9a0SKenneth D. Merry 1534*d3c7b9a0SKenneth D. Merry 1535*d3c7b9a0SKenneth D. Merry /* values for AttachedPhyInfo fields */ 1536*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_INSIDE_ZPSDS_PERSISTENT (0x00000040) 1537*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REQUESTED_INSIDE_ZPSDS (0x00000020) 1538*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_BREAK_REPLY_CAPABLE (0x00000010) 1539*d3c7b9a0SKenneth D. Merry 1540*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_MASK (0x0000000F) 1541*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_UNKNOWN (0x00000000) 1542*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_POWER_ON (0x00000001) 1543*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_HARD_RESET (0x00000002) 1544*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_SMP_PHY_CONTROL (0x00000003) 1545*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_LOSS_OF_SYNC (0x00000004) 1546*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_MULTIPLEXING_SEQ (0x00000005) 1547*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_IT_NEXUS_LOSS_TIMER (0x00000006) 1548*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_BREAK_TIMEOUT (0x00000007) 1549*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_APHYINFO_REASON_PHY_TEST_STOPPED (0x00000008) 1550*d3c7b9a0SKenneth D. Merry 1551*d3c7b9a0SKenneth D. Merry 1552*d3c7b9a0SKenneth D. Merry /* values for PhyInfo fields */ 1553*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_VACANT (0x80000000) 1554*d3c7b9a0SKenneth D. Merry 1555*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_POWER_CONDITION_MASK (0x18000000) 1556*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_POWER_ACTIVE (0x00000000) 1557*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_POWER_PARTIAL (0x08000000) 1558*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_PHY_POWER_SLUMBER (0x10000000) 1559*d3c7b9a0SKenneth D. Merry 1560*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_CHANGED_REQ_INSIDE_ZPSDS (0x04000000) 1561*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_INSIDE_ZPSDS_PERSISTENT (0x02000000) 1562*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REQ_INSIDE_ZPSDS (0x01000000) 1563*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_ZONE_GROUP_PERSISTENT (0x00400000) 1564*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_INSIDE_ZPSDS (0x00200000) 1565*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_ZONING_ENABLED (0x00100000) 1566*d3c7b9a0SKenneth D. Merry 1567*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_MASK (0x000F0000) 1568*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_UNKNOWN (0x00000000) 1569*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_POWER_ON (0x00010000) 1570*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_HARD_RESET (0x00020000) 1571*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_SMP_PHY_CONTROL (0x00030000) 1572*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_LOSS_OF_SYNC (0x00040000) 1573*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_MULTIPLEXING_SEQ (0x00050000) 1574*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_IT_NEXUS_LOSS_TIMER (0x00060000) 1575*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_BREAK_TIMEOUT (0x00070000) 1576*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_REASON_PHY_TEST_STOPPED (0x00080000) 1577*d3c7b9a0SKenneth D. Merry 1578*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_MULTIPLEXING_SUPPORTED (0x00008000) 1579*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_SATA_PORT_ACTIVE (0x00004000) 1580*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_SATA_PORT_SELECTOR_PRESENT (0x00002000) 1581*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_VIRTUAL_PHY (0x00001000) 1582*d3c7b9a0SKenneth D. Merry 1583*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_MASK_PARTIAL_PATHWAY_TIME (0x00000F00) 1584*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_SHIFT_PARTIAL_PATHWAY_TIME (8) 1585*d3c7b9a0SKenneth D. Merry 1586*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_MASK_ROUTING_ATTRIBUTE (0x000000F0) 1587*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_DIRECT_ROUTING (0x00000000) 1588*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_SUBTRACTIVE_ROUTING (0x00000010) 1589*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHYINFO_TABLE_ROUTING (0x00000020) 1590*d3c7b9a0SKenneth D. Merry 1591*d3c7b9a0SKenneth D. Merry 1592*d3c7b9a0SKenneth D. Merry /* values for SAS ProgrammedLinkRate fields */ 1593*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_MASK (0xF0) 1594*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_NOT_PROGRAMMABLE (0x00) 1595*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_1_5 (0x80) 1596*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_3_0 (0x90) 1597*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MAX_RATE_6_0 (0xA0) 1598*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_MASK (0x0F) 1599*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_NOT_PROGRAMMABLE (0x00) 1600*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_1_5 (0x08) 1601*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_3_0 (0x09) 1602*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRATE_MIN_RATE_6_0 (0x0A) 1603*d3c7b9a0SKenneth D. Merry 1604*d3c7b9a0SKenneth D. Merry 1605*d3c7b9a0SKenneth D. Merry /* values for SAS HwLinkRate fields */ 1606*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_HWRATE_MAX_RATE_MASK (0xF0) 1607*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_HWRATE_MAX_RATE_1_5 (0x80) 1608*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_HWRATE_MAX_RATE_3_0 (0x90) 1609*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_HWRATE_MAX_RATE_6_0 (0xA0) 1610*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_HWRATE_MIN_RATE_MASK (0x0F) 1611*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_HWRATE_MIN_RATE_1_5 (0x08) 1612*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_HWRATE_MIN_RATE_3_0 (0x09) 1613*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_HWRATE_MIN_RATE_6_0 (0x0A) 1614*d3c7b9a0SKenneth D. Merry 1615*d3c7b9a0SKenneth D. Merry 1616*d3c7b9a0SKenneth D. Merry 1617*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1618*d3c7b9a0SKenneth D. Merry * SAS IO Unit Config Pages 1619*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1620*d3c7b9a0SKenneth D. Merry 1621*d3c7b9a0SKenneth D. Merry /* SAS IO Unit Page 0 */ 1622*d3c7b9a0SKenneth D. Merry 1623*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SAS_IO_UNIT0_PHY_DATA 1624*d3c7b9a0SKenneth D. Merry { 1625*d3c7b9a0SKenneth D. Merry U8 Port; /* 0x00 */ 1626*d3c7b9a0SKenneth D. Merry U8 PortFlags; /* 0x01 */ 1627*d3c7b9a0SKenneth D. Merry U8 PhyFlags; /* 0x02 */ 1628*d3c7b9a0SKenneth D. Merry U8 NegotiatedLinkRate; /* 0x03 */ 1629*d3c7b9a0SKenneth D. Merry U32 ControllerPhyDeviceInfo;/* 0x04 */ 1630*d3c7b9a0SKenneth D. Merry U16 AttachedDevHandle; /* 0x08 */ 1631*d3c7b9a0SKenneth D. Merry U16 ControllerDevHandle; /* 0x0A */ 1632*d3c7b9a0SKenneth D. Merry U32 DiscoveryStatus; /* 0x0C */ 1633*d3c7b9a0SKenneth D. Merry U32 Reserved; /* 0x10 */ 1634*d3c7b9a0SKenneth D. Merry } MPI2_SAS_IO_UNIT0_PHY_DATA, MPI2_POINTER PTR_MPI2_SAS_IO_UNIT0_PHY_DATA, 1635*d3c7b9a0SKenneth D. Merry Mpi2SasIOUnit0PhyData_t, MPI2_POINTER pMpi2SasIOUnit0PhyData_t; 1636*d3c7b9a0SKenneth D. Merry 1637*d3c7b9a0SKenneth D. Merry /* 1638*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1639*d3c7b9a0SKenneth D. Merry * one and check Header.ExtPageLength or NumPhys at runtime. 1640*d3c7b9a0SKenneth D. Merry */ 1641*d3c7b9a0SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT0_PHY_MAX 1642*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_IOUNIT0_PHY_MAX (1) 1643*d3c7b9a0SKenneth D. Merry #endif 1644*d3c7b9a0SKenneth D. Merry 1645*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_0 1646*d3c7b9a0SKenneth D. Merry { 1647*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 1648*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 1649*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x0C */ 1650*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x0D */ 1651*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0E */ 1652*d3c7b9a0SKenneth D. Merry MPI2_SAS_IO_UNIT0_PHY_DATA PhyData[MPI2_SAS_IOUNIT0_PHY_MAX]; /* 0x10 */ 1653*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_0, 1654*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_0, 1655*d3c7b9a0SKenneth D. Merry Mpi2SasIOUnitPage0_t, MPI2_POINTER pMpi2SasIOUnitPage0_t; 1656*d3c7b9a0SKenneth D. Merry 1657*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNITPAGE0_PAGEVERSION (0x05) 1658*d3c7b9a0SKenneth D. Merry 1659*d3c7b9a0SKenneth D. Merry /* values for SAS IO Unit Page 0 PortFlags */ 1660*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_PORTFLAGS_DISCOVERY_IN_PROGRESS (0x08) 1661*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG (0x01) 1662*d3c7b9a0SKenneth D. Merry 1663*d3c7b9a0SKenneth D. Merry /* values for SAS IO Unit Page 0 PhyFlags */ 1664*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_PHYFLAGS_ZONING_ENABLED (0x10) 1665*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_PHYFLAGS_PHY_DISABLED (0x08) 1666*d3c7b9a0SKenneth D. Merry 1667*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 1668*d3c7b9a0SKenneth D. Merry 1669*d3c7b9a0SKenneth D. Merry /* see mpi2_sas.h for values for SAS IO Unit Page 0 ControllerPhyDeviceInfo values */ 1670*d3c7b9a0SKenneth D. Merry 1671*d3c7b9a0SKenneth D. Merry /* values for SAS IO Unit Page 0 DiscoveryStatus */ 1672*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 1673*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MAX_EXPANDERS_EXCEED (0x40000000) 1674*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MAX_DEVICES_EXCEED (0x20000000) 1675*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 1676*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_DOWNSTREAM_INITIATOR (0x08000000) 1677*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 1678*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 1679*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MULTI_PORT_DOMAIN (0x00002000) 1680*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 1681*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_UNSUPPORTED_DEVICE (0x00000800) 1682*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_TABLE_LINK (0x00000400) 1683*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_SUBTRACTIVE_LINK (0x00000200) 1684*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_SMP_CRC_ERROR (0x00000100) 1685*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_SMP_FUNCTION_FAILED (0x00000080) 1686*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_INDEX_NOT_EXIST (0x00000040) 1687*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_OUT_ROUTE_ENTRIES (0x00000020) 1688*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_SMP_TIMEOUT (0x00000010) 1689*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_MULTIPLE_PORTS (0x00000004) 1690*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_UNADDRESSABLE_DEVICE (0x00000002) 1691*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT0_DS_LOOP_DETECTED (0x00000001) 1692*d3c7b9a0SKenneth D. Merry 1693*d3c7b9a0SKenneth D. Merry 1694*d3c7b9a0SKenneth D. Merry /* SAS IO Unit Page 1 */ 1695*d3c7b9a0SKenneth D. Merry 1696*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SAS_IO_UNIT1_PHY_DATA 1697*d3c7b9a0SKenneth D. Merry { 1698*d3c7b9a0SKenneth D. Merry U8 Port; /* 0x00 */ 1699*d3c7b9a0SKenneth D. Merry U8 PortFlags; /* 0x01 */ 1700*d3c7b9a0SKenneth D. Merry U8 PhyFlags; /* 0x02 */ 1701*d3c7b9a0SKenneth D. Merry U8 MaxMinLinkRate; /* 0x03 */ 1702*d3c7b9a0SKenneth D. Merry U32 ControllerPhyDeviceInfo; /* 0x04 */ 1703*d3c7b9a0SKenneth D. Merry U16 MaxTargetPortConnectTime; /* 0x08 */ 1704*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x0A */ 1705*d3c7b9a0SKenneth D. Merry } MPI2_SAS_IO_UNIT1_PHY_DATA, MPI2_POINTER PTR_MPI2_SAS_IO_UNIT1_PHY_DATA, 1706*d3c7b9a0SKenneth D. Merry Mpi2SasIOUnit1PhyData_t, MPI2_POINTER pMpi2SasIOUnit1PhyData_t; 1707*d3c7b9a0SKenneth D. Merry 1708*d3c7b9a0SKenneth D. Merry /* 1709*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1710*d3c7b9a0SKenneth D. Merry * one and check Header.ExtPageLength or NumPhys at runtime. 1711*d3c7b9a0SKenneth D. Merry */ 1712*d3c7b9a0SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT1_PHY_MAX 1713*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_IOUNIT1_PHY_MAX (1) 1714*d3c7b9a0SKenneth D. Merry #endif 1715*d3c7b9a0SKenneth D. Merry 1716*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_1 1717*d3c7b9a0SKenneth D. Merry { 1718*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 1719*d3c7b9a0SKenneth D. Merry U16 ControlFlags; /* 0x08 */ 1720*d3c7b9a0SKenneth D. Merry U16 SASNarrowMaxQueueDepth; /* 0x0A */ 1721*d3c7b9a0SKenneth D. Merry U16 AdditionalControlFlags; /* 0x0C */ 1722*d3c7b9a0SKenneth D. Merry U16 SASWideMaxQueueDepth; /* 0x0E */ 1723*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x10 */ 1724*d3c7b9a0SKenneth D. Merry U8 SATAMaxQDepth; /* 0x11 */ 1725*d3c7b9a0SKenneth D. Merry U8 ReportDeviceMissingDelay; /* 0x12 */ 1726*d3c7b9a0SKenneth D. Merry U8 IODeviceMissingDelay; /* 0x13 */ 1727*d3c7b9a0SKenneth D. Merry MPI2_SAS_IO_UNIT1_PHY_DATA PhyData[MPI2_SAS_IOUNIT1_PHY_MAX]; /* 0x14 */ 1728*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_1, 1729*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_1, 1730*d3c7b9a0SKenneth D. Merry Mpi2SasIOUnitPage1_t, MPI2_POINTER pMpi2SasIOUnitPage1_t; 1731*d3c7b9a0SKenneth D. Merry 1732*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNITPAGE1_PAGEVERSION (0x09) 1733*d3c7b9a0SKenneth D. Merry 1734*d3c7b9a0SKenneth D. Merry /* values for SAS IO Unit Page 1 ControlFlags */ 1735*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_DEVICE_SELF_TEST (0x8000) 1736*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_3_0_MAX (0x4000) 1737*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_1_5_MAX (0x2000) 1738*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_SW_PRESERVE (0x1000) 1739*d3c7b9a0SKenneth D. Merry 1740*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_MASK_DEV_SUPPORT (0x0600) 1741*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SHIFT_DEV_SUPPORT (9) 1742*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_DEV_SUPPORT_BOTH (0x0) 1743*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_DEV_SAS_SUPPORT (0x1) 1744*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_DEV_SATA_SUPPORT (0x2) 1745*d3c7b9a0SKenneth D. Merry 1746*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_48BIT_LBA_REQUIRED (0x0080) 1747*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_SMART_REQUIRED (0x0040) 1748*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_NCQ_REQUIRED (0x0020) 1749*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SATA_FUA_REQUIRED (0x0010) 1750*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_TABLE_SUBTRACTIVE_ILLEGAL (0x0008) 1751*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_SUBTRACTIVE_ILLEGAL (0x0004) 1752*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_FIRST_LVL_DISC_ONLY (0x0002) 1753*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_CONTROL_CLEAR_AFFILIATION (0x0001) 1754*d3c7b9a0SKenneth D. Merry 1755*d3c7b9a0SKenneth D. Merry /* values for SAS IO Unit Page 1 AdditionalControlFlags */ 1756*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_MULTI_PORT_DOMAIN_ILLEGAL (0x0080) 1757*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_SATA_ASYNCHROUNOUS_NOTIFICATION (0x0040) 1758*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_INVALID_TOPOLOGY_CORRECTION (0x0020) 1759*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_PORT_ENABLE_ONLY_SATA_LINK_RESET (0x0010) 1760*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_OTHER_AFFILIATION_SATA_LINK_RESET (0x0008) 1761*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_SELF_AFFILIATION_SATA_LINK_RESET (0x0004) 1762*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_NO_AFFILIATION_SATA_LINK_RESET (0x0002) 1763*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_ACONTROL_ALLOW_TABLE_TO_TABLE (0x0001) 1764*d3c7b9a0SKenneth D. Merry 1765*d3c7b9a0SKenneth D. Merry /* defines for SAS IO Unit Page 1 ReportDeviceMissingDelay */ 1766*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_REPORT_MISSING_TIMEOUT_MASK (0x7F) 1767*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_REPORT_MISSING_UNIT_16 (0x80) 1768*d3c7b9a0SKenneth D. Merry 1769*d3c7b9a0SKenneth D. Merry /* values for SAS IO Unit Page 1 PortFlags */ 1770*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_PORT_FLAGS_AUTO_PORT_CONFIG (0x01) 1771*d3c7b9a0SKenneth D. Merry 1772*d3c7b9a0SKenneth D. Merry /* values for SAS IO Unit Page 1 PhyFlags */ 1773*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_PHYFLAGS_ZONING_ENABLE (0x10) 1774*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_PHYFLAGS_PHY_DISABLE (0x08) 1775*d3c7b9a0SKenneth D. Merry 1776*d3c7b9a0SKenneth D. Merry /* values for SAS IO Unit Page 1 MaxMinLinkRate */ 1777*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_MAX_RATE_MASK (0xF0) 1778*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_MAX_RATE_1_5 (0x80) 1779*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_MAX_RATE_3_0 (0x90) 1780*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_MAX_RATE_6_0 (0xA0) 1781*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_MIN_RATE_MASK (0x0F) 1782*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_MIN_RATE_1_5 (0x08) 1783*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_MIN_RATE_3_0 (0x09) 1784*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT1_MIN_RATE_6_0 (0x0A) 1785*d3c7b9a0SKenneth D. Merry 1786*d3c7b9a0SKenneth D. Merry /* see mpi2_sas.h for values for SAS IO Unit Page 1 ControllerPhyDeviceInfo values */ 1787*d3c7b9a0SKenneth D. Merry 1788*d3c7b9a0SKenneth D. Merry 1789*d3c7b9a0SKenneth D. Merry /* SAS IO Unit Page 4 */ 1790*d3c7b9a0SKenneth D. Merry 1791*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SAS_IOUNIT4_SPINUP_GROUP 1792*d3c7b9a0SKenneth D. Merry { 1793*d3c7b9a0SKenneth D. Merry U8 MaxTargetSpinup; /* 0x00 */ 1794*d3c7b9a0SKenneth D. Merry U8 SpinupDelay; /* 0x01 */ 1795*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x02 */ 1796*d3c7b9a0SKenneth D. Merry } MPI2_SAS_IOUNIT4_SPINUP_GROUP, MPI2_POINTER PTR_MPI2_SAS_IOUNIT4_SPINUP_GROUP, 1797*d3c7b9a0SKenneth D. Merry Mpi2SasIOUnit4SpinupGroup_t, MPI2_POINTER pMpi2SasIOUnit4SpinupGroup_t; 1798*d3c7b9a0SKenneth D. Merry 1799*d3c7b9a0SKenneth D. Merry /* 1800*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1801*d3c7b9a0SKenneth D. Merry * four and check Header.ExtPageLength or NumPhys at runtime. 1802*d3c7b9a0SKenneth D. Merry */ 1803*d3c7b9a0SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT4_PHY_MAX 1804*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_IOUNIT4_PHY_MAX (4) 1805*d3c7b9a0SKenneth D. Merry #endif 1806*d3c7b9a0SKenneth D. Merry 1807*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_4 1808*d3c7b9a0SKenneth D. Merry { 1809*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 1810*d3c7b9a0SKenneth D. Merry MPI2_SAS_IOUNIT4_SPINUP_GROUP SpinupGroupParameters[4]; /* 0x08 */ 1811*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x18 */ 1812*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x1C */ 1813*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x20 */ 1814*d3c7b9a0SKenneth D. Merry U8 BootDeviceWaitTime; /* 0x24 */ 1815*d3c7b9a0SKenneth D. Merry U8 Reserved4; /* 0x25 */ 1816*d3c7b9a0SKenneth D. Merry U16 Reserved5; /* 0x26 */ 1817*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x28 */ 1818*d3c7b9a0SKenneth D. Merry U8 PEInitialSpinupDelay; /* 0x29 */ 1819*d3c7b9a0SKenneth D. Merry U8 PEReplyDelay; /* 0x2A */ 1820*d3c7b9a0SKenneth D. Merry U8 Flags; /* 0x2B */ 1821*d3c7b9a0SKenneth D. Merry U8 PHY[MPI2_SAS_IOUNIT4_PHY_MAX]; /* 0x2C */ 1822*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_4, 1823*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_4, 1824*d3c7b9a0SKenneth D. Merry Mpi2SasIOUnitPage4_t, MPI2_POINTER pMpi2SasIOUnitPage4_t; 1825*d3c7b9a0SKenneth D. Merry 1826*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNITPAGE4_PAGEVERSION (0x02) 1827*d3c7b9a0SKenneth D. Merry 1828*d3c7b9a0SKenneth D. Merry /* defines for Flags field */ 1829*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT4_FLAGS_AUTO_PORTENABLE (0x01) 1830*d3c7b9a0SKenneth D. Merry 1831*d3c7b9a0SKenneth D. Merry /* defines for PHY field */ 1832*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT4_PHY_SPINUP_GROUP_MASK (0x03) 1833*d3c7b9a0SKenneth D. Merry 1834*d3c7b9a0SKenneth D. Merry 1835*d3c7b9a0SKenneth D. Merry /* SAS IO Unit Page 5 */ 1836*d3c7b9a0SKenneth D. Merry 1837*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS 1838*d3c7b9a0SKenneth D. Merry { 1839*d3c7b9a0SKenneth D. Merry U8 ControlFlags; /* 0x00 */ 1840*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x01 */ 1841*d3c7b9a0SKenneth D. Merry U16 InactivityTimerExponent; /* 0x02 */ 1842*d3c7b9a0SKenneth D. Merry U8 SATAPartialTimeout; /* 0x04 */ 1843*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x05 */ 1844*d3c7b9a0SKenneth D. Merry U8 SATASlumberTimeout; /* 0x06 */ 1845*d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x07 */ 1846*d3c7b9a0SKenneth D. Merry U8 SASPartialTimeout; /* 0x08 */ 1847*d3c7b9a0SKenneth D. Merry U8 Reserved4; /* 0x09 */ 1848*d3c7b9a0SKenneth D. Merry U8 SASSlumberTimeout; /* 0x0A */ 1849*d3c7b9a0SKenneth D. Merry U8 Reserved5; /* 0x0B */ 1850*d3c7b9a0SKenneth D. Merry } MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS, 1851*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS, 1852*d3c7b9a0SKenneth D. Merry Mpi2SasIOUnit5PhyPmSettings_t, MPI2_POINTER pMpi2SasIOUnit5PhyPmSettings_t; 1853*d3c7b9a0SKenneth D. Merry 1854*d3c7b9a0SKenneth D. Merry /* defines for ControlFlags field */ 1855*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_CONTROL_SAS_SLUMBER_ENABLE (0x08) 1856*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_CONTROL_SAS_PARTIAL_ENABLE (0x04) 1857*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_CONTROL_SATA_SLUMBER_ENABLE (0x02) 1858*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_CONTROL_SATA_PARTIAL_ENABLE (0x01) 1859*d3c7b9a0SKenneth D. Merry 1860*d3c7b9a0SKenneth D. Merry /* defines for InactivityTimerExponent field */ 1861*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_MASK_SAS_SLUMBER (0x7000) 1862*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_SHIFT_SAS_SLUMBER (12) 1863*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_MASK_SAS_PARTIAL (0x0700) 1864*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_SHIFT_SAS_PARTIAL (8) 1865*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_MASK_SATA_SLUMBER (0x0070) 1866*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_SHIFT_SATA_SLUMBER (4) 1867*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_MASK_SATA_PARTIAL (0x0007) 1868*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_SHIFT_SATA_PARTIAL (0) 1869*d3c7b9a0SKenneth D. Merry 1870*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_TEN_SECONDS (7) 1871*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_ONE_SECOND (6) 1872*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_HUNDRED_MILLISECONDS (5) 1873*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_TEN_MILLISECONDS (4) 1874*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_ONE_MILLISECOND (3) 1875*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_HUNDRED_MICROSECONDS (2) 1876*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_TEN_MICROSECONDS (1) 1877*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNIT5_ITE_ONE_MICROSECOND (0) 1878*d3c7b9a0SKenneth D. Merry 1879*d3c7b9a0SKenneth D. Merry /* 1880*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1881*d3c7b9a0SKenneth D. Merry * one and check Header.ExtPageLength or NumPhys at runtime. 1882*d3c7b9a0SKenneth D. Merry */ 1883*d3c7b9a0SKenneth D. Merry #ifndef MPI2_SAS_IOUNIT5_PHY_MAX 1884*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_IOUNIT5_PHY_MAX (1) 1885*d3c7b9a0SKenneth D. Merry #endif 1886*d3c7b9a0SKenneth D. Merry 1887*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_5 1888*d3c7b9a0SKenneth D. Merry { 1889*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 1890*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x08 */ 1891*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x09 */ 1892*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x0A */ 1893*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x0C */ 1894*d3c7b9a0SKenneth D. Merry MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS SASPhyPowerManagementSettings[MPI2_SAS_IOUNIT5_PHY_MAX]; /* 0x10 */ 1895*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SASIOUNIT_5, 1896*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SASIOUNIT_5, 1897*d3c7b9a0SKenneth D. Merry Mpi2SasIOUnitPage5_t, MPI2_POINTER pMpi2SasIOUnitPage5_t; 1898*d3c7b9a0SKenneth D. Merry 1899*d3c7b9a0SKenneth D. Merry #define MPI2_SASIOUNITPAGE5_PAGEVERSION (0x00) 1900*d3c7b9a0SKenneth D. Merry 1901*d3c7b9a0SKenneth D. Merry 1902*d3c7b9a0SKenneth D. Merry 1903*d3c7b9a0SKenneth D. Merry 1904*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1905*d3c7b9a0SKenneth D. Merry * SAS Expander Config Pages 1906*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1907*d3c7b9a0SKenneth D. Merry 1908*d3c7b9a0SKenneth D. Merry /* SAS Expander Page 0 */ 1909*d3c7b9a0SKenneth D. Merry 1910*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_EXPANDER_0 1911*d3c7b9a0SKenneth D. Merry { 1912*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 1913*d3c7b9a0SKenneth D. Merry U8 PhysicalPort; /* 0x08 */ 1914*d3c7b9a0SKenneth D. Merry U8 ReportGenLength; /* 0x09 */ 1915*d3c7b9a0SKenneth D. Merry U16 EnclosureHandle; /* 0x0A */ 1916*d3c7b9a0SKenneth D. Merry U64 SASAddress; /* 0x0C */ 1917*d3c7b9a0SKenneth D. Merry U32 DiscoveryStatus; /* 0x14 */ 1918*d3c7b9a0SKenneth D. Merry U16 DevHandle; /* 0x18 */ 1919*d3c7b9a0SKenneth D. Merry U16 ParentDevHandle; /* 0x1A */ 1920*d3c7b9a0SKenneth D. Merry U16 ExpanderChangeCount; /* 0x1C */ 1921*d3c7b9a0SKenneth D. Merry U16 ExpanderRouteIndexes; /* 0x1E */ 1922*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x20 */ 1923*d3c7b9a0SKenneth D. Merry U8 SASLevel; /* 0x21 */ 1924*d3c7b9a0SKenneth D. Merry U16 Flags; /* 0x22 */ 1925*d3c7b9a0SKenneth D. Merry U16 STPBusInactivityTimeLimit; /* 0x24 */ 1926*d3c7b9a0SKenneth D. Merry U16 STPMaxConnectTimeLimit; /* 0x26 */ 1927*d3c7b9a0SKenneth D. Merry U16 STP_SMP_NexusLossTime; /* 0x28 */ 1928*d3c7b9a0SKenneth D. Merry U16 MaxNumRoutedSasAddresses; /* 0x2A */ 1929*d3c7b9a0SKenneth D. Merry U64 ActiveZoneManagerSASAddress;/* 0x2C */ 1930*d3c7b9a0SKenneth D. Merry U16 ZoneLockInactivityLimit; /* 0x34 */ 1931*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x36 */ 1932*d3c7b9a0SKenneth D. Merry U8 TimeToReducedFunc; /* 0x38 */ 1933*d3c7b9a0SKenneth D. Merry U8 InitialTimeToReducedFunc; /* 0x39 */ 1934*d3c7b9a0SKenneth D. Merry U8 MaxReducedFuncTime; /* 0x3A */ 1935*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x3B */ 1936*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_EXPANDER_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_EXPANDER_0, 1937*d3c7b9a0SKenneth D. Merry Mpi2ExpanderPage0_t, MPI2_POINTER pMpi2ExpanderPage0_t; 1938*d3c7b9a0SKenneth D. Merry 1939*d3c7b9a0SKenneth D. Merry #define MPI2_SASEXPANDER0_PAGEVERSION (0x06) 1940*d3c7b9a0SKenneth D. Merry 1941*d3c7b9a0SKenneth D. Merry /* values for SAS Expander Page 0 DiscoveryStatus field */ 1942*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 1943*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MAX_EXPANDERS_EXCEED (0x40000000) 1944*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MAX_DEVICES_EXCEED (0x20000000) 1945*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 1946*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_DOWNSTREAM_INITIATOR (0x08000000) 1947*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 1948*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 1949*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MULTI_PORT_DOMAIN (0x00002000) 1950*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 1951*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_UNSUPPORTED_DEVICE (0x00000800) 1952*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_TABLE_LINK (0x00000400) 1953*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_SUBTRACTIVE_LINK (0x00000200) 1954*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_SMP_CRC_ERROR (0x00000100) 1955*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_SMP_FUNCTION_FAILED (0x00000080) 1956*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_INDEX_NOT_EXIST (0x00000040) 1957*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_OUT_ROUTE_ENTRIES (0x00000020) 1958*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_SMP_TIMEOUT (0x00000010) 1959*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_MULTIPLE_PORTS (0x00000004) 1960*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_UNADDRESSABLE_DEVICE (0x00000002) 1961*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_DS_LOOP_DETECTED (0x00000001) 1962*d3c7b9a0SKenneth D. Merry 1963*d3c7b9a0SKenneth D. Merry /* values for SAS Expander Page 0 Flags field */ 1964*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_REDUCED_FUNCTIONALITY (0x2000) 1965*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ZONE_LOCKED (0x1000) 1966*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_SUPPORTED_PHYSICAL_PRES (0x0800) 1967*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ASSERTED_PHYSICAL_PRES (0x0400) 1968*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ZONING_SUPPORT (0x0200) 1969*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ENABLED_ZONING (0x0100) 1970*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_TABLE_TO_TABLE_SUPPORT (0x0080) 1971*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_CONNECTOR_END_DEVICE (0x0010) 1972*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_OTHERS_CONFIG (0x0004) 1973*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_CONFIG_IN_PROGRESS (0x0002) 1974*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER0_FLAGS_ROUTE_TABLE_CONFIG (0x0001) 1975*d3c7b9a0SKenneth D. Merry 1976*d3c7b9a0SKenneth D. Merry 1977*d3c7b9a0SKenneth D. Merry /* SAS Expander Page 1 */ 1978*d3c7b9a0SKenneth D. Merry 1979*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_EXPANDER_1 1980*d3c7b9a0SKenneth D. Merry { 1981*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 1982*d3c7b9a0SKenneth D. Merry U8 PhysicalPort; /* 0x08 */ 1983*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x09 */ 1984*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x0A */ 1985*d3c7b9a0SKenneth D. Merry U8 NumPhys; /* 0x0C */ 1986*d3c7b9a0SKenneth D. Merry U8 Phy; /* 0x0D */ 1987*d3c7b9a0SKenneth D. Merry U16 NumTableEntriesProgrammed; /* 0x0E */ 1988*d3c7b9a0SKenneth D. Merry U8 ProgrammedLinkRate; /* 0x10 */ 1989*d3c7b9a0SKenneth D. Merry U8 HwLinkRate; /* 0x11 */ 1990*d3c7b9a0SKenneth D. Merry U16 AttachedDevHandle; /* 0x12 */ 1991*d3c7b9a0SKenneth D. Merry U32 PhyInfo; /* 0x14 */ 1992*d3c7b9a0SKenneth D. Merry U32 AttachedDeviceInfo; /* 0x18 */ 1993*d3c7b9a0SKenneth D. Merry U16 ExpanderDevHandle; /* 0x1C */ 1994*d3c7b9a0SKenneth D. Merry U8 ChangeCount; /* 0x1E */ 1995*d3c7b9a0SKenneth D. Merry U8 NegotiatedLinkRate; /* 0x1F */ 1996*d3c7b9a0SKenneth D. Merry U8 PhyIdentifier; /* 0x20 */ 1997*d3c7b9a0SKenneth D. Merry U8 AttachedPhyIdentifier; /* 0x21 */ 1998*d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x22 */ 1999*d3c7b9a0SKenneth D. Merry U8 DiscoveryInfo; /* 0x23 */ 2000*d3c7b9a0SKenneth D. Merry U32 AttachedPhyInfo; /* 0x24 */ 2001*d3c7b9a0SKenneth D. Merry U8 ZoneGroup; /* 0x28 */ 2002*d3c7b9a0SKenneth D. Merry U8 SelfConfigStatus; /* 0x29 */ 2003*d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x2A */ 2004*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_EXPANDER_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_EXPANDER_1, 2005*d3c7b9a0SKenneth D. Merry Mpi2ExpanderPage1_t, MPI2_POINTER pMpi2ExpanderPage1_t; 2006*d3c7b9a0SKenneth D. Merry 2007*d3c7b9a0SKenneth D. Merry #define MPI2_SASEXPANDER1_PAGEVERSION (0x02) 2008*d3c7b9a0SKenneth D. Merry 2009*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_PRATE_ defines for the ProgrammedLinkRate field */ 2010*d3c7b9a0SKenneth D. Merry 2011*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_HWRATE_ defines for the HwLinkRate field */ 2012*d3c7b9a0SKenneth D. Merry 2013*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_PHYINFO_ for the PhyInfo field */ 2014*d3c7b9a0SKenneth D. Merry 2015*d3c7b9a0SKenneth D. Merry /* see mpi2_sas.h for the MPI2_SAS_DEVICE_INFO_ defines used for the AttachedDeviceInfo field */ 2016*d3c7b9a0SKenneth D. Merry 2017*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 2018*d3c7b9a0SKenneth D. Merry 2019*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_APHYINFO_ defines for AttachedPhyInfo field */ 2020*d3c7b9a0SKenneth D. Merry 2021*d3c7b9a0SKenneth D. Merry /* values for SAS Expander Page 1 DiscoveryInfo field */ 2022*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER1_DISCINFO_BAD_PHY_DISABLED (0x04) 2023*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER1_DISCINFO_LINK_STATUS_CHANGE (0x02) 2024*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_EXPANDER1_DISCINFO_NO_ROUTING_ENTRIES (0x01) 2025*d3c7b9a0SKenneth D. Merry 2026*d3c7b9a0SKenneth D. Merry 2027*d3c7b9a0SKenneth D. Merry /**************************************************************************** 2028*d3c7b9a0SKenneth D. Merry * SAS Device Config Pages 2029*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 2030*d3c7b9a0SKenneth D. Merry 2031*d3c7b9a0SKenneth D. Merry /* SAS Device Page 0 */ 2032*d3c7b9a0SKenneth D. Merry 2033*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_0 2034*d3c7b9a0SKenneth D. Merry { 2035*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2036*d3c7b9a0SKenneth D. Merry U16 Slot; /* 0x08 */ 2037*d3c7b9a0SKenneth D. Merry U16 EnclosureHandle; /* 0x0A */ 2038*d3c7b9a0SKenneth D. Merry U64 SASAddress; /* 0x0C */ 2039*d3c7b9a0SKenneth D. Merry U16 ParentDevHandle; /* 0x14 */ 2040*d3c7b9a0SKenneth D. Merry U8 PhyNum; /* 0x16 */ 2041*d3c7b9a0SKenneth D. Merry U8 AccessStatus; /* 0x17 */ 2042*d3c7b9a0SKenneth D. Merry U16 DevHandle; /* 0x18 */ 2043*d3c7b9a0SKenneth D. Merry U8 AttachedPhyIdentifier; /* 0x1A */ 2044*d3c7b9a0SKenneth D. Merry U8 ZoneGroup; /* 0x1B */ 2045*d3c7b9a0SKenneth D. Merry U32 DeviceInfo; /* 0x1C */ 2046*d3c7b9a0SKenneth D. Merry U16 Flags; /* 0x20 */ 2047*d3c7b9a0SKenneth D. Merry U8 PhysicalPort; /* 0x22 */ 2048*d3c7b9a0SKenneth D. Merry U8 MaxPortConnections; /* 0x23 */ 2049*d3c7b9a0SKenneth D. Merry U64 DeviceName; /* 0x24 */ 2050*d3c7b9a0SKenneth D. Merry U8 PortGroups; /* 0x2C */ 2051*d3c7b9a0SKenneth D. Merry U8 DmaGroup; /* 0x2D */ 2052*d3c7b9a0SKenneth D. Merry U8 ControlGroup; /* 0x2E */ 2053*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x2F */ 2054*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x30 */ 2055*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x34 */ 2056*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_DEV_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_DEV_0, 2057*d3c7b9a0SKenneth D. Merry Mpi2SasDevicePage0_t, MPI2_POINTER pMpi2SasDevicePage0_t; 2058*d3c7b9a0SKenneth D. Merry 2059*d3c7b9a0SKenneth D. Merry #define MPI2_SASDEVICE0_PAGEVERSION (0x08) 2060*d3c7b9a0SKenneth D. Merry 2061*d3c7b9a0SKenneth D. Merry /* values for SAS Device Page 0 AccessStatus field */ 2062*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_NO_ERRORS (0x00) 2063*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SATA_INIT_FAILED (0x01) 2064*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SATA_CAPABILITY_FAILED (0x02) 2065*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SATA_AFFILIATION_CONFLICT (0x03) 2066*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SATA_NEEDS_INITIALIZATION (0x04) 2067*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_ROUTE_NOT_ADDRESSABLE (0x05) 2068*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SMP_ERROR_NOT_ADDRESSABLE (0x06) 2069*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_DEVICE_BLOCKED (0x07) 2070*d3c7b9a0SKenneth D. Merry /* specific values for SATA Init failures */ 2071*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_UNKNOWN (0x10) 2072*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_AFFILIATION_CONFLICT (0x11) 2073*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_DIAG (0x12) 2074*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_IDENTIFICATION (0x13) 2075*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_CHECK_POWER (0x14) 2076*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_PIO_SN (0x15) 2077*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_MDMA_SN (0x16) 2078*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_UDMA_SN (0x17) 2079*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_ZONING_VIOLATION (0x18) 2080*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_NOT_ADDRESSABLE (0x19) 2081*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_ASTATUS_SIF_MAX (0x1F) 2082*d3c7b9a0SKenneth D. Merry 2083*d3c7b9a0SKenneth D. Merry /* see mpi2_sas.h for values for SAS Device Page 0 DeviceInfo values */ 2084*d3c7b9a0SKenneth D. Merry 2085*d3c7b9a0SKenneth D. Merry /* values for SAS Device Page 0 Flags field */ 2086*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SLUMBER_PM_CAPABLE (0x1000) 2087*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_PARTIAL_PM_CAPABLE (0x0800) 2088*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_ASYNCHRONOUS_NOTIFY (0x0400) 2089*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_SW_PRESERVE (0x0200) 2090*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_UNSUPPORTED_DEVICE (0x0100) 2091*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_48BIT_LBA_SUPPORTED (0x0080) 2092*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_SMART_SUPPORTED (0x0040) 2093*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_NCQ_SUPPORTED (0x0020) 2094*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_SATA_FUA_SUPPORTED (0x0010) 2095*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_PORT_SELECTOR_ATTACH (0x0008) 2096*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE0_FLAGS_DEVICE_PRESENT (0x0001) 2097*d3c7b9a0SKenneth D. Merry 2098*d3c7b9a0SKenneth D. Merry 2099*d3c7b9a0SKenneth D. Merry /* SAS Device Page 1 */ 2100*d3c7b9a0SKenneth D. Merry 2101*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_DEV_1 2102*d3c7b9a0SKenneth D. Merry { 2103*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2104*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2105*d3c7b9a0SKenneth D. Merry U64 SASAddress; /* 0x0C */ 2106*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x14 */ 2107*d3c7b9a0SKenneth D. Merry U16 DevHandle; /* 0x18 */ 2108*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x1A */ 2109*d3c7b9a0SKenneth D. Merry U8 InitialRegDeviceFIS[20];/* 0x1C */ 2110*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_DEV_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_DEV_1, 2111*d3c7b9a0SKenneth D. Merry Mpi2SasDevicePage1_t, MPI2_POINTER pMpi2SasDevicePage1_t; 2112*d3c7b9a0SKenneth D. Merry 2113*d3c7b9a0SKenneth D. Merry #define MPI2_SASDEVICE1_PAGEVERSION (0x01) 2114*d3c7b9a0SKenneth D. Merry 2115*d3c7b9a0SKenneth D. Merry 2116*d3c7b9a0SKenneth D. Merry /**************************************************************************** 2117*d3c7b9a0SKenneth D. Merry * SAS PHY Config Pages 2118*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 2119*d3c7b9a0SKenneth D. Merry 2120*d3c7b9a0SKenneth D. Merry /* SAS PHY Page 0 */ 2121*d3c7b9a0SKenneth D. Merry 2122*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_0 2123*d3c7b9a0SKenneth D. Merry { 2124*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2125*d3c7b9a0SKenneth D. Merry U16 OwnerDevHandle; /* 0x08 */ 2126*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x0A */ 2127*d3c7b9a0SKenneth D. Merry U16 AttachedDevHandle; /* 0x0C */ 2128*d3c7b9a0SKenneth D. Merry U8 AttachedPhyIdentifier; /* 0x0E */ 2129*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x0F */ 2130*d3c7b9a0SKenneth D. Merry U32 AttachedPhyInfo; /* 0x10 */ 2131*d3c7b9a0SKenneth D. Merry U8 ProgrammedLinkRate; /* 0x14 */ 2132*d3c7b9a0SKenneth D. Merry U8 HwLinkRate; /* 0x15 */ 2133*d3c7b9a0SKenneth D. Merry U8 ChangeCount; /* 0x16 */ 2134*d3c7b9a0SKenneth D. Merry U8 Flags; /* 0x17 */ 2135*d3c7b9a0SKenneth D. Merry U32 PhyInfo; /* 0x18 */ 2136*d3c7b9a0SKenneth D. Merry U8 NegotiatedLinkRate; /* 0x1C */ 2137*d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x1D */ 2138*d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x1E */ 2139*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_0, 2140*d3c7b9a0SKenneth D. Merry Mpi2SasPhyPage0_t, MPI2_POINTER pMpi2SasPhyPage0_t; 2141*d3c7b9a0SKenneth D. Merry 2142*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY0_PAGEVERSION (0x03) 2143*d3c7b9a0SKenneth D. Merry 2144*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_PRATE_ defines for the ProgrammedLinkRate field */ 2145*d3c7b9a0SKenneth D. Merry 2146*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_HWRATE_ defines for the HwLinkRate field */ 2147*d3c7b9a0SKenneth D. Merry 2148*d3c7b9a0SKenneth D. Merry /* values for SAS PHY Page 0 Flags field */ 2149*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PHY0_FLAGS_SGPIO_DIRECT_ATTACH_ENC (0x01) 2150*d3c7b9a0SKenneth D. Merry 2151*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_APHYINFO_ defines for AttachedPhyInfo field */ 2152*d3c7b9a0SKenneth D. Merry 2153*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_NEG_LINK_RATE_ defines for the NegotiatedLinkRate field */ 2154*d3c7b9a0SKenneth D. Merry 2155*d3c7b9a0SKenneth D. Merry /* use MPI2_SAS_PHYINFO_ for the PhyInfo field */ 2156*d3c7b9a0SKenneth D. Merry 2157*d3c7b9a0SKenneth D. Merry 2158*d3c7b9a0SKenneth D. Merry /* SAS PHY Page 1 */ 2159*d3c7b9a0SKenneth D. Merry 2160*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_1 2161*d3c7b9a0SKenneth D. Merry { 2162*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2163*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2164*d3c7b9a0SKenneth D. Merry U32 InvalidDwordCount; /* 0x0C */ 2165*d3c7b9a0SKenneth D. Merry U32 RunningDisparityErrorCount; /* 0x10 */ 2166*d3c7b9a0SKenneth D. Merry U32 LossDwordSynchCount; /* 0x14 */ 2167*d3c7b9a0SKenneth D. Merry U32 PhyResetProblemCount; /* 0x18 */ 2168*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_1, 2169*d3c7b9a0SKenneth D. Merry Mpi2SasPhyPage1_t, MPI2_POINTER pMpi2SasPhyPage1_t; 2170*d3c7b9a0SKenneth D. Merry 2171*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY1_PAGEVERSION (0x01) 2172*d3c7b9a0SKenneth D. Merry 2173*d3c7b9a0SKenneth D. Merry 2174*d3c7b9a0SKenneth D. Merry /* SAS PHY Page 2 */ 2175*d3c7b9a0SKenneth D. Merry 2176*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SASPHY2_PHY_EVENT 2177*d3c7b9a0SKenneth D. Merry { 2178*d3c7b9a0SKenneth D. Merry U8 PhyEventCode; /* 0x00 */ 2179*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x01 */ 2180*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x02 */ 2181*d3c7b9a0SKenneth D. Merry U32 PhyEventInfo; /* 0x04 */ 2182*d3c7b9a0SKenneth D. Merry } MPI2_SASPHY2_PHY_EVENT, MPI2_POINTER PTR_MPI2_SASPHY2_PHY_EVENT, 2183*d3c7b9a0SKenneth D. Merry Mpi2SasPhy2PhyEvent_t, MPI2_POINTER pMpi2SasPhy2PhyEvent_t; 2184*d3c7b9a0SKenneth D. Merry 2185*d3c7b9a0SKenneth D. Merry /* use MPI2_SASPHY3_EVENT_CODE_ for the PhyEventCode field */ 2186*d3c7b9a0SKenneth D. Merry 2187*d3c7b9a0SKenneth D. Merry 2188*d3c7b9a0SKenneth D. Merry /* 2189*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2190*d3c7b9a0SKenneth D. Merry * one and check Header.ExtPageLength or NumPhyEvents at runtime. 2191*d3c7b9a0SKenneth D. Merry */ 2192*d3c7b9a0SKenneth D. Merry #ifndef MPI2_SASPHY2_PHY_EVENT_MAX 2193*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY2_PHY_EVENT_MAX (1) 2194*d3c7b9a0SKenneth D. Merry #endif 2195*d3c7b9a0SKenneth D. Merry 2196*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_2 2197*d3c7b9a0SKenneth D. Merry { 2198*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2199*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2200*d3c7b9a0SKenneth D. Merry U8 NumPhyEvents; /* 0x0C */ 2201*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x0D */ 2202*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0E */ 2203*d3c7b9a0SKenneth D. Merry MPI2_SASPHY2_PHY_EVENT PhyEvent[MPI2_SASPHY2_PHY_EVENT_MAX]; /* 0x10 */ 2204*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_2, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_2, 2205*d3c7b9a0SKenneth D. Merry Mpi2SasPhyPage2_t, MPI2_POINTER pMpi2SasPhyPage2_t; 2206*d3c7b9a0SKenneth D. Merry 2207*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY2_PAGEVERSION (0x00) 2208*d3c7b9a0SKenneth D. Merry 2209*d3c7b9a0SKenneth D. Merry 2210*d3c7b9a0SKenneth D. Merry /* SAS PHY Page 3 */ 2211*d3c7b9a0SKenneth D. Merry 2212*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SASPHY3_PHY_EVENT_CONFIG 2213*d3c7b9a0SKenneth D. Merry { 2214*d3c7b9a0SKenneth D. Merry U8 PhyEventCode; /* 0x00 */ 2215*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x01 */ 2216*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x02 */ 2217*d3c7b9a0SKenneth D. Merry U8 CounterType; /* 0x04 */ 2218*d3c7b9a0SKenneth D. Merry U8 ThresholdWindow; /* 0x05 */ 2219*d3c7b9a0SKenneth D. Merry U8 TimeUnits; /* 0x06 */ 2220*d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x07 */ 2221*d3c7b9a0SKenneth D. Merry U32 EventThreshold; /* 0x08 */ 2222*d3c7b9a0SKenneth D. Merry U16 ThresholdFlags; /* 0x0C */ 2223*d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x0E */ 2224*d3c7b9a0SKenneth D. Merry } MPI2_SASPHY3_PHY_EVENT_CONFIG, MPI2_POINTER PTR_MPI2_SASPHY3_PHY_EVENT_CONFIG, 2225*d3c7b9a0SKenneth D. Merry Mpi2SasPhy3PhyEventConfig_t, MPI2_POINTER pMpi2SasPhy3PhyEventConfig_t; 2226*d3c7b9a0SKenneth D. Merry 2227*d3c7b9a0SKenneth D. Merry /* values for PhyEventCode field */ 2228*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_NO_EVENT (0x00) 2229*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_INVALID_DWORD (0x01) 2230*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RUNNING_DISPARITY_ERROR (0x02) 2231*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_LOSS_DWORD_SYNC (0x03) 2232*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PHY_RESET_PROBLEM (0x04) 2233*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_ELASTICITY_BUF_OVERFLOW (0x05) 2234*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_ERROR (0x06) 2235*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_ADDR_FRAME_ERROR (0x20) 2236*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_AC_OPEN_REJECT (0x21) 2237*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_AC_OPEN_REJECT (0x22) 2238*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_RC_OPEN_REJECT (0x23) 2239*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_RC_OPEN_REJECT (0x24) 2240*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_AIP_PARTIAL_WAITING_ON (0x25) 2241*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_AIP_CONNECT_WAITING_ON (0x26) 2242*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_BREAK (0x27) 2243*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_BREAK (0x28) 2244*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_BREAK_TIMEOUT (0x29) 2245*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_CONNECTION (0x2A) 2246*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PEAKTX_PATHWAY_BLOCKED (0x2B) 2247*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PEAKTX_ARB_WAIT_TIME (0x2C) 2248*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PEAK_ARB_WAIT_TIME (0x2D) 2249*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_PEAK_CONNECT_TIME (0x2E) 2250*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_SSP_FRAMES (0x40) 2251*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SSP_FRAMES (0x41) 2252*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_SSP_ERROR_FRAMES (0x42) 2253*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SSP_ERROR_FRAMES (0x43) 2254*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_CREDIT_BLOCKED (0x44) 2255*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_CREDIT_BLOCKED (0x45) 2256*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_SATA_FRAMES (0x50) 2257*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SATA_FRAMES (0x51) 2258*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_SATA_OVERFLOW (0x52) 2259*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_TX_SMP_FRAMES (0x60) 2260*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SMP_FRAMES (0x61) 2261*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_SMP_ERROR_FRAMES (0x63) 2262*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_HOTPLUG_TIMEOUT (0xD0) 2263*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_MISALIGNED_MUX_PRIMITIVE (0xD1) 2264*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_EVENT_CODE_RX_AIP (0xD2) 2265*d3c7b9a0SKenneth D. Merry 2266*d3c7b9a0SKenneth D. Merry /* values for the CounterType field */ 2267*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_COUNTER_TYPE_WRAPPING (0x00) 2268*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_COUNTER_TYPE_SATURATING (0x01) 2269*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_COUNTER_TYPE_PEAK_VALUE (0x02) 2270*d3c7b9a0SKenneth D. Merry 2271*d3c7b9a0SKenneth D. Merry /* values for the TimeUnits field */ 2272*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_TIME_UNITS_10_MICROSECONDS (0x00) 2273*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_TIME_UNITS_100_MICROSECONDS (0x01) 2274*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_TIME_UNITS_1_MILLISECOND (0x02) 2275*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_TIME_UNITS_10_MILLISECONDS (0x03) 2276*d3c7b9a0SKenneth D. Merry 2277*d3c7b9a0SKenneth D. Merry /* values for the ThresholdFlags field */ 2278*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_TFLAGS_PHY_RESET (0x0002) 2279*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_TFLAGS_EVENT_NOTIFY (0x0001) 2280*d3c7b9a0SKenneth D. Merry 2281*d3c7b9a0SKenneth D. Merry /* 2282*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2283*d3c7b9a0SKenneth D. Merry * one and check Header.ExtPageLength or NumPhyEvents at runtime. 2284*d3c7b9a0SKenneth D. Merry */ 2285*d3c7b9a0SKenneth D. Merry #ifndef MPI2_SASPHY3_PHY_EVENT_MAX 2286*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_PHY_EVENT_MAX (1) 2287*d3c7b9a0SKenneth D. Merry #endif 2288*d3c7b9a0SKenneth D. Merry 2289*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_3 2290*d3c7b9a0SKenneth D. Merry { 2291*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2292*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2293*d3c7b9a0SKenneth D. Merry U8 NumPhyEvents; /* 0x0C */ 2294*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x0D */ 2295*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0E */ 2296*d3c7b9a0SKenneth D. Merry MPI2_SASPHY3_PHY_EVENT_CONFIG PhyEventConfig[MPI2_SASPHY3_PHY_EVENT_MAX]; /* 0x10 */ 2297*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_3, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_3, 2298*d3c7b9a0SKenneth D. Merry Mpi2SasPhyPage3_t, MPI2_POINTER pMpi2SasPhyPage3_t; 2299*d3c7b9a0SKenneth D. Merry 2300*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY3_PAGEVERSION (0x00) 2301*d3c7b9a0SKenneth D. Merry 2302*d3c7b9a0SKenneth D. Merry 2303*d3c7b9a0SKenneth D. Merry /* SAS PHY Page 4 */ 2304*d3c7b9a0SKenneth D. Merry 2305*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_4 2306*d3c7b9a0SKenneth D. Merry { 2307*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2308*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x08 */ 2309*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x0A */ 2310*d3c7b9a0SKenneth D. Merry U8 Flags; /* 0x0B */ 2311*d3c7b9a0SKenneth D. Merry U8 InitialFrame[28]; /* 0x0C */ 2312*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PHY_4, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PHY_4, 2313*d3c7b9a0SKenneth D. Merry Mpi2SasPhyPage4_t, MPI2_POINTER pMpi2SasPhyPage4_t; 2314*d3c7b9a0SKenneth D. Merry 2315*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY4_PAGEVERSION (0x00) 2316*d3c7b9a0SKenneth D. Merry 2317*d3c7b9a0SKenneth D. Merry /* values for the Flags field */ 2318*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY4_FLAGS_FRAME_VALID (0x02) 2319*d3c7b9a0SKenneth D. Merry #define MPI2_SASPHY4_FLAGS_SATA_FRAME (0x01) 2320*d3c7b9a0SKenneth D. Merry 2321*d3c7b9a0SKenneth D. Merry 2322*d3c7b9a0SKenneth D. Merry 2323*d3c7b9a0SKenneth D. Merry 2324*d3c7b9a0SKenneth D. Merry /**************************************************************************** 2325*d3c7b9a0SKenneth D. Merry * SAS Port Config Pages 2326*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 2327*d3c7b9a0SKenneth D. Merry 2328*d3c7b9a0SKenneth D. Merry /* SAS Port Page 0 */ 2329*d3c7b9a0SKenneth D. Merry 2330*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_PORT_0 2331*d3c7b9a0SKenneth D. Merry { 2332*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2333*d3c7b9a0SKenneth D. Merry U8 PortNumber; /* 0x08 */ 2334*d3c7b9a0SKenneth D. Merry U8 PhysicalPort; /* 0x09 */ 2335*d3c7b9a0SKenneth D. Merry U8 PortWidth; /* 0x0A */ 2336*d3c7b9a0SKenneth D. Merry U8 PhysicalPortWidth; /* 0x0B */ 2337*d3c7b9a0SKenneth D. Merry U8 ZoneGroup; /* 0x0C */ 2338*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x0D */ 2339*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x0E */ 2340*d3c7b9a0SKenneth D. Merry U64 SASAddress; /* 0x10 */ 2341*d3c7b9a0SKenneth D. Merry U32 DeviceInfo; /* 0x18 */ 2342*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x1C */ 2343*d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x20 */ 2344*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_PORT_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_PORT_0, 2345*d3c7b9a0SKenneth D. Merry Mpi2SasPortPage0_t, MPI2_POINTER pMpi2SasPortPage0_t; 2346*d3c7b9a0SKenneth D. Merry 2347*d3c7b9a0SKenneth D. Merry #define MPI2_SASPORT0_PAGEVERSION (0x00) 2348*d3c7b9a0SKenneth D. Merry 2349*d3c7b9a0SKenneth D. Merry /* see mpi2_sas.h for values for SAS Port Page 0 DeviceInfo values */ 2350*d3c7b9a0SKenneth D. Merry 2351*d3c7b9a0SKenneth D. Merry 2352*d3c7b9a0SKenneth D. Merry /**************************************************************************** 2353*d3c7b9a0SKenneth D. Merry * SAS Enclosure Config Pages 2354*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 2355*d3c7b9a0SKenneth D. Merry 2356*d3c7b9a0SKenneth D. Merry /* SAS Enclosure Page 0 */ 2357*d3c7b9a0SKenneth D. Merry 2358*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 2359*d3c7b9a0SKenneth D. Merry { 2360*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2361*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2362*d3c7b9a0SKenneth D. Merry U64 EnclosureLogicalID; /* 0x0C */ 2363*d3c7b9a0SKenneth D. Merry U16 Flags; /* 0x14 */ 2364*d3c7b9a0SKenneth D. Merry U16 EnclosureHandle; /* 0x16 */ 2365*d3c7b9a0SKenneth D. Merry U16 NumSlots; /* 0x18 */ 2366*d3c7b9a0SKenneth D. Merry U16 StartSlot; /* 0x1A */ 2367*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x1C */ 2368*d3c7b9a0SKenneth D. Merry U16 SEPDevHandle; /* 0x1E */ 2369*d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x20 */ 2370*d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x24 */ 2371*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0, 2372*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0, 2373*d3c7b9a0SKenneth D. Merry Mpi2SasEnclosurePage0_t, MPI2_POINTER pMpi2SasEnclosurePage0_t; 2374*d3c7b9a0SKenneth D. Merry 2375*d3c7b9a0SKenneth D. Merry #define MPI2_SASENCLOSURE0_PAGEVERSION (0x03) 2376*d3c7b9a0SKenneth D. Merry 2377*d3c7b9a0SKenneth D. Merry /* values for SAS Enclosure Page 0 Flags field */ 2378*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_MASK (0x000F) 2379*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000) 2380*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_SES (0x0001) 2381*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_SGPIO (0x0002) 2382*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_EXP_SGPIO (0x0003) 2383*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0004) 2384*d3c7b9a0SKenneth D. Merry #define MPI2_SAS_ENCLS0_FLAGS_MNG_IOC_GPIO (0x0005) 2385*d3c7b9a0SKenneth D. Merry 2386*d3c7b9a0SKenneth D. Merry 2387*d3c7b9a0SKenneth D. Merry /**************************************************************************** 2388*d3c7b9a0SKenneth D. Merry * Log Config Page 2389*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 2390*d3c7b9a0SKenneth D. Merry 2391*d3c7b9a0SKenneth D. Merry /* Log Page 0 */ 2392*d3c7b9a0SKenneth D. Merry 2393*d3c7b9a0SKenneth D. Merry /* 2394*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2395*d3c7b9a0SKenneth D. Merry * one and check Header.ExtPageLength or NumPhys at runtime. 2396*d3c7b9a0SKenneth D. Merry */ 2397*d3c7b9a0SKenneth D. Merry #ifndef MPI2_LOG_0_NUM_LOG_ENTRIES 2398*d3c7b9a0SKenneth D. Merry #define MPI2_LOG_0_NUM_LOG_ENTRIES (1) 2399*d3c7b9a0SKenneth D. Merry #endif 2400*d3c7b9a0SKenneth D. Merry 2401*d3c7b9a0SKenneth D. Merry #define MPI2_LOG_0_LOG_DATA_LENGTH (0x1C) 2402*d3c7b9a0SKenneth D. Merry 2403*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_LOG_0_ENTRY 2404*d3c7b9a0SKenneth D. Merry { 2405*d3c7b9a0SKenneth D. Merry U64 TimeStamp; /* 0x00 */ 2406*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2407*d3c7b9a0SKenneth D. Merry U16 LogSequence; /* 0x0C */ 2408*d3c7b9a0SKenneth D. Merry U16 LogEntryQualifier; /* 0x0E */ 2409*d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x10 */ 2410*d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x11 */ 2411*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x12 */ 2412*d3c7b9a0SKenneth D. Merry U8 LogData[MPI2_LOG_0_LOG_DATA_LENGTH];/* 0x14 */ 2413*d3c7b9a0SKenneth D. Merry } MPI2_LOG_0_ENTRY, MPI2_POINTER PTR_MPI2_LOG_0_ENTRY, 2414*d3c7b9a0SKenneth D. Merry Mpi2Log0Entry_t, MPI2_POINTER pMpi2Log0Entry_t; 2415*d3c7b9a0SKenneth D. Merry 2416*d3c7b9a0SKenneth D. Merry /* values for Log Page 0 LogEntry LogEntryQualifier field */ 2417*d3c7b9a0SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_ENTRY_UNUSED (0x0000) 2418*d3c7b9a0SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_POWER_ON_RESET (0x0001) 2419*d3c7b9a0SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_TIMESTAMP_UPDATE (0x0002) 2420*d3c7b9a0SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_MIN_IMPLEMENT_SPEC (0x8000) 2421*d3c7b9a0SKenneth D. Merry #define MPI2_LOG_0_ENTRY_QUAL_MAX_IMPLEMENT_SPEC (0xFFFF) 2422*d3c7b9a0SKenneth D. Merry 2423*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_LOG_0 2424*d3c7b9a0SKenneth D. Merry { 2425*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2426*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x08 */ 2427*d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x0C */ 2428*d3c7b9a0SKenneth D. Merry U16 NumLogEntries; /* 0x10 */ 2429*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x12 */ 2430*d3c7b9a0SKenneth D. Merry MPI2_LOG_0_ENTRY LogEntry[MPI2_LOG_0_NUM_LOG_ENTRIES]; /* 0x14 */ 2431*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_LOG_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_LOG_0, 2432*d3c7b9a0SKenneth D. Merry Mpi2LogPage0_t, MPI2_POINTER pMpi2LogPage0_t; 2433*d3c7b9a0SKenneth D. Merry 2434*d3c7b9a0SKenneth D. Merry #define MPI2_LOG_0_PAGEVERSION (0x02) 2435*d3c7b9a0SKenneth D. Merry 2436*d3c7b9a0SKenneth D. Merry 2437*d3c7b9a0SKenneth D. Merry /**************************************************************************** 2438*d3c7b9a0SKenneth D. Merry * RAID Config Page 2439*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 2440*d3c7b9a0SKenneth D. Merry 2441*d3c7b9a0SKenneth D. Merry /* RAID Page 0 */ 2442*d3c7b9a0SKenneth D. Merry 2443*d3c7b9a0SKenneth D. Merry /* 2444*d3c7b9a0SKenneth D. Merry * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 2445*d3c7b9a0SKenneth D. Merry * one and check Header.ExtPageLength or NumPhys at runtime. 2446*d3c7b9a0SKenneth D. Merry */ 2447*d3c7b9a0SKenneth D. Merry #ifndef MPI2_RAIDCONFIG0_MAX_ELEMENTS 2448*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDCONFIG0_MAX_ELEMENTS (1) 2449*d3c7b9a0SKenneth D. Merry #endif 2450*d3c7b9a0SKenneth D. Merry 2451*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAIDCONFIG0_CONFIG_ELEMENT 2452*d3c7b9a0SKenneth D. Merry { 2453*d3c7b9a0SKenneth D. Merry U16 ElementFlags; /* 0x00 */ 2454*d3c7b9a0SKenneth D. Merry U16 VolDevHandle; /* 0x02 */ 2455*d3c7b9a0SKenneth D. Merry U8 HotSparePool; /* 0x04 */ 2456*d3c7b9a0SKenneth D. Merry U8 PhysDiskNum; /* 0x05 */ 2457*d3c7b9a0SKenneth D. Merry U16 PhysDiskDevHandle; /* 0x06 */ 2458*d3c7b9a0SKenneth D. Merry } MPI2_RAIDCONFIG0_CONFIG_ELEMENT, 2459*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_RAIDCONFIG0_CONFIG_ELEMENT, 2460*d3c7b9a0SKenneth D. Merry Mpi2RaidConfig0ConfigElement_t, MPI2_POINTER pMpi2RaidConfig0ConfigElement_t; 2461*d3c7b9a0SKenneth D. Merry 2462*d3c7b9a0SKenneth D. Merry /* values for the ElementFlags field */ 2463*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_MASK_ELEMENT_TYPE (0x000F) 2464*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_VOLUME_ELEMENT (0x0000) 2465*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_VOL_PHYS_DISK_ELEMENT (0x0001) 2466*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_HOT_SPARE_ELEMENT (0x0002) 2467*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDCONFIG0_EFLAGS_OCE_ELEMENT (0x0003) 2468*d3c7b9a0SKenneth D. Merry 2469*d3c7b9a0SKenneth D. Merry 2470*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0 2471*d3c7b9a0SKenneth D. Merry { 2472*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2473*d3c7b9a0SKenneth D. Merry U8 NumHotSpares; /* 0x08 */ 2474*d3c7b9a0SKenneth D. Merry U8 NumPhysDisks; /* 0x09 */ 2475*d3c7b9a0SKenneth D. Merry U8 NumVolumes; /* 0x0A */ 2476*d3c7b9a0SKenneth D. Merry U8 ConfigNum; /* 0x0B */ 2477*d3c7b9a0SKenneth D. Merry U32 Flags; /* 0x0C */ 2478*d3c7b9a0SKenneth D. Merry U8 ConfigGUID[24]; /* 0x10 */ 2479*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x28 */ 2480*d3c7b9a0SKenneth D. Merry U8 NumElements; /* 0x2C */ 2481*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x2D */ 2482*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x2E */ 2483*d3c7b9a0SKenneth D. Merry MPI2_RAIDCONFIG0_CONFIG_ELEMENT ConfigElement[MPI2_RAIDCONFIG0_MAX_ELEMENTS]; /* 0x30 */ 2484*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0, 2485*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0, 2486*d3c7b9a0SKenneth D. Merry Mpi2RaidConfigurationPage0_t, MPI2_POINTER pMpi2RaidConfigurationPage0_t; 2487*d3c7b9a0SKenneth D. Merry 2488*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDCONFIG0_PAGEVERSION (0x00) 2489*d3c7b9a0SKenneth D. Merry 2490*d3c7b9a0SKenneth D. Merry /* values for RAID Configuration Page 0 Flags field */ 2491*d3c7b9a0SKenneth D. Merry #define MPI2_RAIDCONFIG0_FLAG_FOREIGN_CONFIG (0x00000001) 2492*d3c7b9a0SKenneth D. Merry 2493*d3c7b9a0SKenneth D. Merry 2494*d3c7b9a0SKenneth D. Merry /**************************************************************************** 2495*d3c7b9a0SKenneth D. Merry * Driver Persistent Mapping Config Pages 2496*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 2497*d3c7b9a0SKenneth D. Merry 2498*d3c7b9a0SKenneth D. Merry /* Driver Persistent Mapping Page 0 */ 2499*d3c7b9a0SKenneth D. Merry 2500*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY 2501*d3c7b9a0SKenneth D. Merry { 2502*d3c7b9a0SKenneth D. Merry U64 PhysicalIdentifier; /* 0x00 */ 2503*d3c7b9a0SKenneth D. Merry U16 MappingInformation; /* 0x08 */ 2504*d3c7b9a0SKenneth D. Merry U16 DeviceIndex; /* 0x0A */ 2505*d3c7b9a0SKenneth D. Merry U32 PhysicalBitsMapping; /* 0x0C */ 2506*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x10 */ 2507*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY, 2508*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY, 2509*d3c7b9a0SKenneth D. Merry Mpi2DriverMap0Entry_t, MPI2_POINTER pMpi2DriverMap0Entry_t; 2510*d3c7b9a0SKenneth D. Merry 2511*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_DRIVER_MAPPING_0 2512*d3c7b9a0SKenneth D. Merry { 2513*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2514*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_DRIVER_MAP0_ENTRY Entry; /* 0x08 */ 2515*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_DRIVER_MAPPING_0, 2516*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_CONFIG_PAGE_DRIVER_MAPPING_0, 2517*d3c7b9a0SKenneth D. Merry Mpi2DriverMappingPage0_t, MPI2_POINTER pMpi2DriverMappingPage0_t; 2518*d3c7b9a0SKenneth D. Merry 2519*d3c7b9a0SKenneth D. Merry #define MPI2_DRIVERMAPPING0_PAGEVERSION (0x00) 2520*d3c7b9a0SKenneth D. Merry 2521*d3c7b9a0SKenneth D. Merry /* values for Driver Persistent Mapping Page 0 MappingInformation field */ 2522*d3c7b9a0SKenneth D. Merry #define MPI2_DRVMAP0_MAPINFO_SLOT_MASK (0x07F0) 2523*d3c7b9a0SKenneth D. Merry #define MPI2_DRVMAP0_MAPINFO_SLOT_SHIFT (4) 2524*d3c7b9a0SKenneth D. Merry #define MPI2_DRVMAP0_MAPINFO_MISSING_MASK (0x000F) 2525*d3c7b9a0SKenneth D. Merry 2526*d3c7b9a0SKenneth D. Merry 2527*d3c7b9a0SKenneth D. Merry /**************************************************************************** 2528*d3c7b9a0SKenneth D. Merry * Ethernet Config Pages 2529*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 2530*d3c7b9a0SKenneth D. Merry 2531*d3c7b9a0SKenneth D. Merry /* Ethernet Page 0 */ 2532*d3c7b9a0SKenneth D. Merry 2533*d3c7b9a0SKenneth D. Merry /* IP address (union of IPv4 and IPv6) */ 2534*d3c7b9a0SKenneth D. Merry typedef union _MPI2_ETHERNET_IP_ADDR 2535*d3c7b9a0SKenneth D. Merry { 2536*d3c7b9a0SKenneth D. Merry U32 IPv4Addr; 2537*d3c7b9a0SKenneth D. Merry U32 IPv6Addr[4]; 2538*d3c7b9a0SKenneth D. Merry } MPI2_ETHERNET_IP_ADDR, MPI2_POINTER PTR_MPI2_ETHERNET_IP_ADDR, 2539*d3c7b9a0SKenneth D. Merry Mpi2EthernetIpAddr_t, MPI2_POINTER pMpi2EthernetIpAddr_t; 2540*d3c7b9a0SKenneth D. Merry 2541*d3c7b9a0SKenneth D. Merry #define MPI2_ETHERNET_HOST_NAME_LENGTH (32) 2542*d3c7b9a0SKenneth D. Merry 2543*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_ETHERNET_0 2544*d3c7b9a0SKenneth D. Merry { 2545*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2546*d3c7b9a0SKenneth D. Merry U8 NumInterfaces; /* 0x08 */ 2547*d3c7b9a0SKenneth D. Merry U8 Reserved0; /* 0x09 */ 2548*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x0A */ 2549*d3c7b9a0SKenneth D. Merry U32 Status; /* 0x0C */ 2550*d3c7b9a0SKenneth D. Merry U8 MediaState; /* 0x10 */ 2551*d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x11 */ 2552*d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x12 */ 2553*d3c7b9a0SKenneth D. Merry U8 MacAddress[6]; /* 0x14 */ 2554*d3c7b9a0SKenneth D. Merry U8 Reserved4; /* 0x1A */ 2555*d3c7b9a0SKenneth D. Merry U8 Reserved5; /* 0x1B */ 2556*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR IpAddress; /* 0x1C */ 2557*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR SubnetMask; /* 0x2C */ 2558*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR GatewayIpAddress; /* 0x3C */ 2559*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR DNS1IpAddress; /* 0x4C */ 2560*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR DNS2IpAddress; /* 0x5C */ 2561*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR DhcpIpAddress; /* 0x6C */ 2562*d3c7b9a0SKenneth D. Merry U8 HostName[MPI2_ETHERNET_HOST_NAME_LENGTH];/* 0x7C */ 2563*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_ETHERNET_0, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_ETHERNET_0, 2564*d3c7b9a0SKenneth D. Merry Mpi2EthernetPage0_t, MPI2_POINTER pMpi2EthernetPage0_t; 2565*d3c7b9a0SKenneth D. Merry 2566*d3c7b9a0SKenneth D. Merry #define MPI2_ETHERNETPAGE0_PAGEVERSION (0x00) 2567*d3c7b9a0SKenneth D. Merry 2568*d3c7b9a0SKenneth D. Merry /* values for Ethernet Page 0 Status field */ 2569*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV6_CAPABLE (0x80000000) 2570*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV4_CAPABLE (0x40000000) 2571*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_CONSOLE_CONNECTED (0x20000000) 2572*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_DEFAULT_IF (0x00000100) 2573*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_FW_DWNLD_ENABLED (0x00000080) 2574*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_TELNET_ENABLED (0x00000040) 2575*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_SSH2_ENABLED (0x00000020) 2576*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_DHCP_CLIENT_ENABLED (0x00000010) 2577*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV6_ENABLED (0x00000008) 2578*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV4_ENABLED (0x00000004) 2579*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_IPV6_ADDRESSES (0x00000002) 2580*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_STATUS_ETH_IF_ENABLED (0x00000001) 2581*d3c7b9a0SKenneth D. Merry 2582*d3c7b9a0SKenneth D. Merry /* values for Ethernet Page 0 MediaState field */ 2583*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_MS_DUPLEX_MASK (0x80) 2584*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_MS_HALF_DUPLEX (0x00) 2585*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_MS_FULL_DUPLEX (0x80) 2586*d3c7b9a0SKenneth D. Merry 2587*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_MS_CONNECT_SPEED_MASK (0x07) 2588*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_MS_NOT_CONNECTED (0x00) 2589*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_MS_10MBIT (0x01) 2590*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_MS_100MBIT (0x02) 2591*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG0_MS_1GBIT (0x03) 2592*d3c7b9a0SKenneth D. Merry 2593*d3c7b9a0SKenneth D. Merry 2594*d3c7b9a0SKenneth D. Merry /* Ethernet Page 1 */ 2595*d3c7b9a0SKenneth D. Merry 2596*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_CONFIG_PAGE_ETHERNET_1 2597*d3c7b9a0SKenneth D. Merry { 2598*d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER Header; /* 0x00 */ 2599*d3c7b9a0SKenneth D. Merry U32 Reserved0; /* 0x08 */ 2600*d3c7b9a0SKenneth D. Merry U32 Flags; /* 0x0C */ 2601*d3c7b9a0SKenneth D. Merry U8 MediaState; /* 0x10 */ 2602*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x11 */ 2603*d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x12 */ 2604*d3c7b9a0SKenneth D. Merry U8 MacAddress[6]; /* 0x14 */ 2605*d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x1A */ 2606*d3c7b9a0SKenneth D. Merry U8 Reserved4; /* 0x1B */ 2607*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticIpAddress; /* 0x1C */ 2608*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticSubnetMask; /* 0x2C */ 2609*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticGatewayIpAddress; /* 0x3C */ 2610*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticDNS1IpAddress; /* 0x4C */ 2611*d3c7b9a0SKenneth D. Merry MPI2_ETHERNET_IP_ADDR StaticDNS2IpAddress; /* 0x5C */ 2612*d3c7b9a0SKenneth D. Merry U32 Reserved5; /* 0x6C */ 2613*d3c7b9a0SKenneth D. Merry U32 Reserved6; /* 0x70 */ 2614*d3c7b9a0SKenneth D. Merry U32 Reserved7; /* 0x74 */ 2615*d3c7b9a0SKenneth D. Merry U32 Reserved8; /* 0x78 */ 2616*d3c7b9a0SKenneth D. Merry U8 HostName[MPI2_ETHERNET_HOST_NAME_LENGTH];/* 0x7C */ 2617*d3c7b9a0SKenneth D. Merry } MPI2_CONFIG_PAGE_ETHERNET_1, MPI2_POINTER PTR_MPI2_CONFIG_PAGE_ETHERNET_1, 2618*d3c7b9a0SKenneth D. Merry Mpi2EthernetPage1_t, MPI2_POINTER pMpi2EthernetPage1_t; 2619*d3c7b9a0SKenneth D. Merry 2620*d3c7b9a0SKenneth D. Merry #define MPI2_ETHERNETPAGE1_PAGEVERSION (0x00) 2621*d3c7b9a0SKenneth D. Merry 2622*d3c7b9a0SKenneth D. Merry /* values for Ethernet Page 1 Flags field */ 2623*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_SET_DEFAULT_IF (0x00000100) 2624*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_FW_DOWNLOAD (0x00000080) 2625*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_TELNET (0x00000040) 2626*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_SSH2 (0x00000020) 2627*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_DHCP_CLIENT (0x00000010) 2628*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_IPV6 (0x00000008) 2629*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_IPV4 (0x00000004) 2630*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_USE_IPV6_ADDRESSES (0x00000002) 2631*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_FLAG_ENABLE_ETH_IF (0x00000001) 2632*d3c7b9a0SKenneth D. Merry 2633*d3c7b9a0SKenneth D. Merry /* values for Ethernet Page 1 MediaState field */ 2634*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_MS_DUPLEX_MASK (0x80) 2635*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_MS_HALF_DUPLEX (0x00) 2636*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_MS_FULL_DUPLEX (0x80) 2637*d3c7b9a0SKenneth D. Merry 2638*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_MASK (0x07) 2639*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_AUTO (0x00) 2640*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_10MBIT (0x01) 2641*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_100MBIT (0x02) 2642*d3c7b9a0SKenneth D. Merry #define MPI2_ETHPG1_MS_DATA_RATE_1GBIT (0x03) 2643*d3c7b9a0SKenneth D. Merry 2644*d3c7b9a0SKenneth D. Merry 2645*d3c7b9a0SKenneth D. Merry #endif 2646*d3c7b9a0SKenneth D. Merry 2647