1*fd501800SSascha Wildner /*- 2*fd501800SSascha Wildner * Copyright (c) 2012-2015 LSI Corp. 3*fd501800SSascha Wildner * Copyright (c) 2013-2016 Avago Technologies 4*fd501800SSascha Wildner * All rights reserved. 5*fd501800SSascha Wildner * 6*fd501800SSascha Wildner * Redistribution and use in source and binary forms, with or without 7*fd501800SSascha Wildner * modification, are permitted provided that the following conditions 8*fd501800SSascha Wildner * are met: 9*fd501800SSascha Wildner * 1. Redistributions of source code must retain the above copyright 10*fd501800SSascha Wildner * notice, this list of conditions and the following disclaimer. 11*fd501800SSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 12*fd501800SSascha Wildner * notice, this list of conditions and the following disclaimer in the 13*fd501800SSascha Wildner * documentation and/or other materials provided with the distribution. 14*fd501800SSascha Wildner * 3. Neither the name of the author nor the names of any co-contributors 15*fd501800SSascha Wildner * may be used to endorse or promote products derived from this software 16*fd501800SSascha Wildner * without specific prior written permission. 17*fd501800SSascha Wildner * 18*fd501800SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19*fd501800SSascha Wildner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*fd501800SSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*fd501800SSascha Wildner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22*fd501800SSascha Wildner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23*fd501800SSascha Wildner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24*fd501800SSascha Wildner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25*fd501800SSascha Wildner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26*fd501800SSascha Wildner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27*fd501800SSascha Wildner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28*fd501800SSascha Wildner * SUCH DAMAGE. 29*fd501800SSascha Wildner * 30*fd501800SSascha Wildner * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD 31*fd501800SSascha Wildner * 32*fd501800SSascha Wildner * $FreeBSD: head/sys/dev/mpr/mpi/mpi2_ioc.h 331228 2018-03-19 23:21:45Z mav $ 33*fd501800SSascha Wildner */ 34*fd501800SSascha Wildner 35*fd501800SSascha Wildner /* 36*fd501800SSascha Wildner * Copyright (c) 2000-2015 LSI Corporation. 37*fd501800SSascha Wildner * Copyright (c) 2013-2016 Avago Technologies 38*fd501800SSascha Wildner * All rights reserved. 39*fd501800SSascha Wildner * 40*fd501800SSascha Wildner * 41*fd501800SSascha Wildner * Name: mpi2_ioc.h 42*fd501800SSascha Wildner * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages 43*fd501800SSascha Wildner * Creation Date: October 11, 2006 44*fd501800SSascha Wildner * 45*fd501800SSascha Wildner * mpi2_ioc.h Version: 02.00.32 46*fd501800SSascha Wildner * 47*fd501800SSascha Wildner * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 48*fd501800SSascha Wildner * prefix are for use only on MPI v2.5 products, and must not be used 49*fd501800SSascha Wildner * with MPI v2.0 products. Unless otherwise noted, names beginning with 50*fd501800SSascha Wildner * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. 51*fd501800SSascha Wildner * 52*fd501800SSascha Wildner * Version History 53*fd501800SSascha Wildner * --------------- 54*fd501800SSascha Wildner * 55*fd501800SSascha Wildner * Date Version Description 56*fd501800SSascha Wildner * -------- -------- ------------------------------------------------------ 57*fd501800SSascha Wildner * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 58*fd501800SSascha Wildner * 06-04-07 02.00.01 In IOCFacts Reply structure, renamed MaxDevices to 59*fd501800SSascha Wildner * MaxTargets. 60*fd501800SSascha Wildner * Added TotalImageSize field to FWDownload Request. 61*fd501800SSascha Wildner * Added reserved words to FWUpload Request. 62*fd501800SSascha Wildner * 06-26-07 02.00.02 Added IR Configuration Change List Event. 63*fd501800SSascha Wildner * 08-31-07 02.00.03 Removed SystemReplyQueueDepth field from the IOCInit 64*fd501800SSascha Wildner * request and replaced it with 65*fd501800SSascha Wildner * ReplyDescriptorPostQueueDepth and ReplyFreeQueueDepth. 66*fd501800SSascha Wildner * Replaced the MinReplyQueueDepth field of the IOCFacts 67*fd501800SSascha Wildner * reply with MaxReplyDescriptorPostQueueDepth. 68*fd501800SSascha Wildner * Added MPI2_RDPQ_DEPTH_MIN define to specify the minimum 69*fd501800SSascha Wildner * depth for the Reply Descriptor Post Queue. 70*fd501800SSascha Wildner * Added SASAddress field to Initiator Device Table 71*fd501800SSascha Wildner * Overflow Event data. 72*fd501800SSascha Wildner * 10-31-07 02.00.04 Added ReasonCode MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING 73*fd501800SSascha Wildner * for SAS Initiator Device Status Change Event data. 74*fd501800SSascha Wildner * Modified Reason Code defines for SAS Topology Change 75*fd501800SSascha Wildner * List Event data, including adding a bit for PHY Vacant 76*fd501800SSascha Wildner * status, and adding a mask for the Reason Code. 77*fd501800SSascha Wildner * Added define for 78*fd501800SSascha Wildner * MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING. 79*fd501800SSascha Wildner * Added define for MPI2_EXT_IMAGE_TYPE_MEGARAID. 80*fd501800SSascha Wildner * 12-18-07 02.00.05 Added Boot Status defines for the IOCExceptions field of 81*fd501800SSascha Wildner * the IOCFacts Reply. 82*fd501800SSascha Wildner * Removed MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define. 83*fd501800SSascha Wildner * Moved MPI2_VERSION_UNION to mpi2.h. 84*fd501800SSascha Wildner * Changed MPI2_EVENT_NOTIFICATION_REQUEST to use masks 85*fd501800SSascha Wildner * instead of enables, and added SASBroadcastPrimitiveMasks 86*fd501800SSascha Wildner * field. 87*fd501800SSascha Wildner * Added Log Entry Added Event and related structure. 88*fd501800SSascha Wildner * 02-29-08 02.00.06 Added define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID. 89*fd501800SSascha Wildner * Removed define MPI2_IOCFACTS_PROTOCOL_SMP_TARGET. 90*fd501800SSascha Wildner * Added MaxVolumes and MaxPersistentEntries fields to 91*fd501800SSascha Wildner * IOCFacts reply. 92*fd501800SSascha Wildner * Added ProtocalFlags and IOCCapabilities fields to 93*fd501800SSascha Wildner * MPI2_FW_IMAGE_HEADER. 94*fd501800SSascha Wildner * Removed MPI2_PORTENABLE_FLAGS_ENABLE_SINGLE_PORT. 95*fd501800SSascha Wildner * 03-03-08 02.00.07 Fixed MPI2_FW_IMAGE_HEADER by changing Reserved26 to 96*fd501800SSascha Wildner * a U16 (from a U32). 97*fd501800SSascha Wildner * Removed extra 's' from EventMasks name. 98*fd501800SSascha Wildner * 06-27-08 02.00.08 Fixed an offset in a comment. 99*fd501800SSascha Wildner * 10-02-08 02.00.09 Removed SystemReplyFrameSize from MPI2_IOC_INIT_REQUEST. 100*fd501800SSascha Wildner * Removed CurReplyFrameSize from MPI2_IOC_FACTS_REPLY and 101*fd501800SSascha Wildner * renamed MinReplyFrameSize to ReplyFrameSize. 102*fd501800SSascha Wildner * Added MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX. 103*fd501800SSascha Wildner * Added two new RAIDOperation values for Integrated RAID 104*fd501800SSascha Wildner * Operations Status Event data. 105*fd501800SSascha Wildner * Added four new IR Configuration Change List Event data 106*fd501800SSascha Wildner * ReasonCode values. 107*fd501800SSascha Wildner * Added two new ReasonCode defines for SAS Device Status 108*fd501800SSascha Wildner * Change Event data. 109*fd501800SSascha Wildner * Added three new DiscoveryStatus bits for the SAS 110*fd501800SSascha Wildner * Discovery event data. 111*fd501800SSascha Wildner * Added Multiplexing Status Change bit to the PhyStatus 112*fd501800SSascha Wildner * field of the SAS Topology Change List event data. 113*fd501800SSascha Wildner * Removed define for MPI2_INIT_IMAGE_BOOTFLAGS_XMEMCOPY. 114*fd501800SSascha Wildner * BootFlags are now product-specific. 115*fd501800SSascha Wildner * Added defines for the indivdual signature bytes 116*fd501800SSascha Wildner * for MPI2_INIT_IMAGE_FOOTER. 117*fd501800SSascha Wildner * 01-19-09 02.00.10 Added MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY define. 118*fd501800SSascha Wildner * Added MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR 119*fd501800SSascha Wildner * define. 120*fd501800SSascha Wildner * Added MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE 121*fd501800SSascha Wildner * define. 122*fd501800SSascha Wildner * Removed MPI2_EVENT_SAS_DISC_DS_SATA_INIT_FAILURE define. 123*fd501800SSascha Wildner * 05-06-09 02.00.11 Added MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR define. 124*fd501800SSascha Wildner * Added MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX define. 125*fd501800SSascha Wildner * Added two new reason codes for SAS Device Status Change 126*fd501800SSascha Wildner * Event. 127*fd501800SSascha Wildner * Added new event: SAS PHY Counter. 128*fd501800SSascha Wildner * 07-30-09 02.00.12 Added GPIO Interrupt event define and structure. 129*fd501800SSascha Wildner * Added MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define. 130*fd501800SSascha Wildner * Added new product id family for 2208. 131*fd501800SSascha Wildner * 10-28-09 02.00.13 Added HostMSIxVectors field to MPI2_IOC_INIT_REQUEST. 132*fd501800SSascha Wildner * Added MaxMSIxVectors field to MPI2_IOC_FACTS_REPLY. 133*fd501800SSascha Wildner * Added MinDevHandle field to MPI2_IOC_FACTS_REPLY. 134*fd501800SSascha Wildner * Added MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY. 135*fd501800SSascha Wildner * Added MPI2_EVENT_HOST_BASED_DISCOVERY_PHY define. 136*fd501800SSascha Wildner * Added MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER define. 137*fd501800SSascha Wildner * Added Host Based Discovery Phy Event data. 138*fd501800SSascha Wildner * Added defines for ProductID Product field 139*fd501800SSascha Wildner * (MPI2_FW_HEADER_PID_). 140*fd501800SSascha Wildner * Modified values for SAS ProductID Family 141*fd501800SSascha Wildner * (MPI2_FW_HEADER_PID_FAMILY_). 142*fd501800SSascha Wildner * 02-10-10 02.00.14 Added SAS Quiesce Event structure and defines. 143*fd501800SSascha Wildner * Added PowerManagementControl Request structures and 144*fd501800SSascha Wildner * defines. 145*fd501800SSascha Wildner * 05-12-10 02.00.15 Marked Task Set Full Event as obsolete. 146*fd501800SSascha Wildner * Added MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY define. 147*fd501800SSascha Wildner * 11-10-10 02.00.16 Added MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC. 148*fd501800SSascha Wildner * 02-23-11 02.00.17 Added SAS NOTIFY Primitive event, and added 149*fd501800SSascha Wildner * SASNotifyPrimitiveMasks field to 150*fd501800SSascha Wildner * MPI2_EVENT_NOTIFICATION_REQUEST. 151*fd501800SSascha Wildner * Added Temperature Threshold Event. 152*fd501800SSascha Wildner * Added Host Message Event. 153*fd501800SSascha Wildner * Added Send Host Message request and reply. 154*fd501800SSascha Wildner * 05-25-11 02.00.18 For Extended Image Header, added 155*fd501800SSascha Wildner * MPI2_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC and 156*fd501800SSascha Wildner * MPI2_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC defines. 157*fd501800SSascha Wildner * Deprecated MPI2_EXT_IMAGE_TYPE_MAX define. 158*fd501800SSascha Wildner * 08-24-11 02.00.19 Added PhysicalPort field to 159*fd501800SSascha Wildner * MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE structure. 160*fd501800SSascha Wildner * Marked MPI2_PM_CONTROL_FEATURE_PCIE_LINK as obsolete. 161*fd501800SSascha Wildner * 11-18-11 02.00.20 Incorporating additions for MPI v2.5. 162*fd501800SSascha Wildner * 03-29-12 02.00.21 Added a product specific range to event values. 163*fd501800SSascha Wildner * 07-26-12 02.00.22 Added MPI2_IOCFACTS_EXCEPT_PARTIAL_MEMORY_FAILURE. 164*fd501800SSascha Wildner * Added ElapsedSeconds field to 165*fd501800SSascha Wildner * MPI2_EVENT_DATA_IR_OPERATION_STATUS. 166*fd501800SSascha Wildner * 08-19-13 02.00.23 For IOCInit, added MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE 167*fd501800SSascha Wildner * and MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY. 168*fd501800SSascha Wildner * Added MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE. 169*fd501800SSascha Wildner * Added MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY. 170*fd501800SSascha Wildner * Added Encrypted Hash Extended Image. 171*fd501800SSascha Wildner * 12-05-13 02.00.24 Added MPI25_HASH_IMAGE_TYPE_BIOS. 172*fd501800SSascha Wildner * 11-18-14 02.00.25 Updated copyright information. 173*fd501800SSascha Wildner * 03-16-15 02.00.26 Updated for MPI v2.6. 174*fd501800SSascha Wildner * Added MPI2_EVENT_ACTIVE_CABLE_EXCEPTION and 175*fd501800SSascha Wildner * MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT. 176*fd501800SSascha Wildner * Added MPI2_EVENT_PCIE_LINK_COUNTER and 177*fd501800SSascha Wildner * MPI26_EVENT_DATA_PCIE_LINK_COUNTER. 178*fd501800SSascha Wildner * Added MPI26_CTRL_OP_SHUTDOWN. 179*fd501800SSascha Wildner * Added MPI26_CTRL_OP_LINK_CLEAR_ERROR_LOG 180*fd501800SSascha Wildner * Added MPI26_FW_HEADER_PID_FAMILY_3324_SAS and 181*fd501800SSascha Wildner * MPI26_FW_HEADER_PID_FAMILY_3516_SAS. 182*fd501800SSascha Wildner * 08-25-15 02.00.27 Added IC ARCH Class based signature defines. 183*fd501800SSascha Wildner * Added MPI26_EVENT_PCIE_ENUM_ES_RESOURCES_EXHAUSTED event. 184*fd501800SSascha Wildner * Added ConigurationFlags field to IOCInit message to 185*fd501800SSascha Wildner * support NVMe SGL format control. 186*fd501800SSascha Wildner * Added PCIe SRIOV support. 187*fd501800SSascha Wildner * 02-17-16 02.00.28 Added SAS 4 22.5 gbs speed support. 188*fd501800SSascha Wildner * Added PCIe 4 16.0 GT/sec speec support. 189*fd501800SSascha Wildner * Removed AHCI support. 190*fd501800SSascha Wildner * Removed SOP support. 191*fd501800SSascha Wildner * 07-01-16 02.00.29 Added Archclass for 4008 product. 192*fd501800SSascha Wildner * Added IOCException MPI2_IOCFACTS_EXCEPT_PCIE_DISABLED 193*fd501800SSascha Wildner * 08-23-16 02.00.30 Added new defines for the ImageType field of FWDownload 194*fd501800SSascha Wildner * Request Message. 195*fd501800SSascha Wildner * Added new defines for the ImageType field of FWUpload 196*fd501800SSascha Wildner * Request Message. 197*fd501800SSascha Wildner * Added new values for the RegionType field in the Layout 198*fd501800SSascha Wildner * Data sections of the FLASH Layout Extended Image Data. 199*fd501800SSascha Wildner * Added new defines for the ReasonCode field of 200*fd501800SSascha Wildner * Active Cable Exception Event. 201*fd501800SSascha Wildner * Added MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE and 202*fd501800SSascha Wildner * MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE. 203*fd501800SSascha Wildner * 11-23-16 02.00.31 Added MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR and 204*fd501800SSascha Wildner * MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR. 205*fd501800SSascha Wildner * 02-02-17 02.00.32 Added MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP. 206*fd501800SSascha Wildner * Added MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT and related 207*fd501800SSascha Wildner * defines for the ReasonCode field. 208*fd501800SSascha Wildner * -------------------------------------------------------------------------- 209*fd501800SSascha Wildner */ 210*fd501800SSascha Wildner 211*fd501800SSascha Wildner #ifndef MPI2_IOC_H 212*fd501800SSascha Wildner #define MPI2_IOC_H 213*fd501800SSascha Wildner 214*fd501800SSascha Wildner /***************************************************************************** 215*fd501800SSascha Wildner * 216*fd501800SSascha Wildner * IOC Messages 217*fd501800SSascha Wildner * 218*fd501800SSascha Wildner *****************************************************************************/ 219*fd501800SSascha Wildner 220*fd501800SSascha Wildner /**************************************************************************** 221*fd501800SSascha Wildner * IOCInit message 222*fd501800SSascha Wildner ****************************************************************************/ 223*fd501800SSascha Wildner 224*fd501800SSascha Wildner /* IOCInit Request message */ 225*fd501800SSascha Wildner typedef struct _MPI2_IOC_INIT_REQUEST 226*fd501800SSascha Wildner { 227*fd501800SSascha Wildner U8 WhoInit; /* 0x00 */ 228*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 229*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 230*fd501800SSascha Wildner U8 Function; /* 0x03 */ 231*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 232*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 233*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 234*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 235*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 236*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 237*fd501800SSascha Wildner U16 MsgVersion; /* 0x0C */ 238*fd501800SSascha Wildner U16 HeaderVersion; /* 0x0E */ 239*fd501800SSascha Wildner U32 Reserved5; /* 0x10 */ 240*fd501800SSascha Wildner U16 ConfigurationFlags; /* 0x14 */ 241*fd501800SSascha Wildner U8 HostPageSize; /* 0x16 */ 242*fd501800SSascha Wildner U8 HostMSIxVectors; /* 0x17 */ 243*fd501800SSascha Wildner U16 Reserved8; /* 0x18 */ 244*fd501800SSascha Wildner U16 SystemRequestFrameSize; /* 0x1A */ 245*fd501800SSascha Wildner U16 ReplyDescriptorPostQueueDepth; /* 0x1C */ 246*fd501800SSascha Wildner U16 ReplyFreeQueueDepth; /* 0x1E */ 247*fd501800SSascha Wildner U32 SenseBufferAddressHigh; /* 0x20 */ 248*fd501800SSascha Wildner U32 SystemReplyAddressHigh; /* 0x24 */ 249*fd501800SSascha Wildner U64 SystemRequestFrameBaseAddress; /* 0x28 */ 250*fd501800SSascha Wildner U64 ReplyDescriptorPostQueueAddress;/* 0x30 */ 251*fd501800SSascha Wildner U64 ReplyFreeQueueAddress; /* 0x38 */ 252*fd501800SSascha Wildner U64 TimeStamp; /* 0x40 */ 253*fd501800SSascha Wildner } MPI2_IOC_INIT_REQUEST, MPI2_POINTER PTR_MPI2_IOC_INIT_REQUEST, 254*fd501800SSascha Wildner Mpi2IOCInitRequest_t, MPI2_POINTER pMpi2IOCInitRequest_t; 255*fd501800SSascha Wildner 256*fd501800SSascha Wildner /* WhoInit values */ 257*fd501800SSascha Wildner #define MPI2_WHOINIT_NOT_INITIALIZED (0x00) 258*fd501800SSascha Wildner #define MPI2_WHOINIT_SYSTEM_BIOS (0x01) 259*fd501800SSascha Wildner #define MPI2_WHOINIT_ROM_BIOS (0x02) 260*fd501800SSascha Wildner #define MPI2_WHOINIT_PCI_PEER (0x03) 261*fd501800SSascha Wildner #define MPI2_WHOINIT_HOST_DRIVER (0x04) 262*fd501800SSascha Wildner #define MPI2_WHOINIT_MANUFACTURER (0x05) 263*fd501800SSascha Wildner 264*fd501800SSascha Wildner /* MsgFlags */ 265*fd501800SSascha Wildner #define MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE (0x01) 266*fd501800SSascha Wildner 267*fd501800SSascha Wildner /* MsgVersion */ 268*fd501800SSascha Wildner #define MPI2_IOCINIT_MSGVERSION_MAJOR_MASK (0xFF00) 269*fd501800SSascha Wildner #define MPI2_IOCINIT_MSGVERSION_MAJOR_SHIFT (8) 270*fd501800SSascha Wildner #define MPI2_IOCINIT_MSGVERSION_MINOR_MASK (0x00FF) 271*fd501800SSascha Wildner #define MPI2_IOCINIT_MSGVERSION_MINOR_SHIFT (0) 272*fd501800SSascha Wildner 273*fd501800SSascha Wildner /* HeaderVersion */ 274*fd501800SSascha Wildner #define MPI2_IOCINIT_HDRVERSION_UNIT_MASK (0xFF00) 275*fd501800SSascha Wildner #define MPI2_IOCINIT_HDRVERSION_UNIT_SHIFT (8) 276*fd501800SSascha Wildner #define MPI2_IOCINIT_HDRVERSION_DEV_MASK (0x00FF) 277*fd501800SSascha Wildner #define MPI2_IOCINIT_HDRVERSION_DEV_SHIFT (0) 278*fd501800SSascha Wildner 279*fd501800SSascha Wildner /* ConfigurationFlags */ 280*fd501800SSascha Wildner #define MPI26_IOCINIT_CFGFLAGS_NVME_SGL_FORMAT (0x0001) 281*fd501800SSascha Wildner 282*fd501800SSascha Wildner /* minimum depth for a Reply Descriptor Post Queue */ 283*fd501800SSascha Wildner #define MPI2_RDPQ_DEPTH_MIN (16) 284*fd501800SSascha Wildner 285*fd501800SSascha Wildner /* Reply Descriptor Post Queue Array Entry */ 286*fd501800SSascha Wildner typedef struct _MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY 287*fd501800SSascha Wildner { 288*fd501800SSascha Wildner U64 RDPQBaseAddress; /* 0x00 */ 289*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 290*fd501800SSascha Wildner U32 Reserved2; /* 0x0C */ 291*fd501800SSascha Wildner } MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY, 292*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY, 293*fd501800SSascha Wildner Mpi2IOCInitRDPQArrayEntry, MPI2_POINTER pMpi2IOCInitRDPQArrayEntry; 294*fd501800SSascha Wildner 295*fd501800SSascha Wildner /* IOCInit Reply message */ 296*fd501800SSascha Wildner typedef struct _MPI2_IOC_INIT_REPLY 297*fd501800SSascha Wildner { 298*fd501800SSascha Wildner U8 WhoInit; /* 0x00 */ 299*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 300*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 301*fd501800SSascha Wildner U8 Function; /* 0x03 */ 302*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 303*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 304*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 305*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 306*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 307*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 308*fd501800SSascha Wildner U16 Reserved5; /* 0x0C */ 309*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 310*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 311*fd501800SSascha Wildner } MPI2_IOC_INIT_REPLY, MPI2_POINTER PTR_MPI2_IOC_INIT_REPLY, 312*fd501800SSascha Wildner Mpi2IOCInitReply_t, MPI2_POINTER pMpi2IOCInitReply_t; 313*fd501800SSascha Wildner 314*fd501800SSascha Wildner 315*fd501800SSascha Wildner /**************************************************************************** 316*fd501800SSascha Wildner * IOCFacts message 317*fd501800SSascha Wildner ****************************************************************************/ 318*fd501800SSascha Wildner 319*fd501800SSascha Wildner /* IOCFacts Request message */ 320*fd501800SSascha Wildner typedef struct _MPI2_IOC_FACTS_REQUEST 321*fd501800SSascha Wildner { 322*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 323*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 324*fd501800SSascha Wildner U8 Function; /* 0x03 */ 325*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 326*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 327*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 328*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 329*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 330*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 331*fd501800SSascha Wildner } MPI2_IOC_FACTS_REQUEST, MPI2_POINTER PTR_MPI2_IOC_FACTS_REQUEST, 332*fd501800SSascha Wildner Mpi2IOCFactsRequest_t, MPI2_POINTER pMpi2IOCFactsRequest_t; 333*fd501800SSascha Wildner 334*fd501800SSascha Wildner 335*fd501800SSascha Wildner /* IOCFacts Reply message */ 336*fd501800SSascha Wildner typedef struct _MPI2_IOC_FACTS_REPLY 337*fd501800SSascha Wildner { 338*fd501800SSascha Wildner U16 MsgVersion; /* 0x00 */ 339*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 340*fd501800SSascha Wildner U8 Function; /* 0x03 */ 341*fd501800SSascha Wildner U16 HeaderVersion; /* 0x04 */ 342*fd501800SSascha Wildner U8 IOCNumber; /* 0x06 */ 343*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 344*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 345*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 346*fd501800SSascha Wildner U16 Reserved1; /* 0x0A */ 347*fd501800SSascha Wildner U16 IOCExceptions; /* 0x0C */ 348*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 349*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 350*fd501800SSascha Wildner U8 MaxChainDepth; /* 0x14 */ 351*fd501800SSascha Wildner U8 WhoInit; /* 0x15 */ 352*fd501800SSascha Wildner U8 NumberOfPorts; /* 0x16 */ 353*fd501800SSascha Wildner U8 MaxMSIxVectors; /* 0x17 */ 354*fd501800SSascha Wildner U16 RequestCredit; /* 0x18 */ 355*fd501800SSascha Wildner U16 ProductID; /* 0x1A */ 356*fd501800SSascha Wildner U32 IOCCapabilities; /* 0x1C */ 357*fd501800SSascha Wildner MPI2_VERSION_UNION FWVersion; /* 0x20 */ 358*fd501800SSascha Wildner U16 IOCRequestFrameSize; /* 0x24 */ 359*fd501800SSascha Wildner U16 IOCMaxChainSegmentSize; /* 0x26 */ /* MPI 2.5 only; Reserved in MPI 2.0 */ 360*fd501800SSascha Wildner U16 MaxInitiators; /* 0x28 */ 361*fd501800SSascha Wildner U16 MaxTargets; /* 0x2A */ 362*fd501800SSascha Wildner U16 MaxSasExpanders; /* 0x2C */ 363*fd501800SSascha Wildner U16 MaxEnclosures; /* 0x2E */ 364*fd501800SSascha Wildner U16 ProtocolFlags; /* 0x30 */ 365*fd501800SSascha Wildner U16 HighPriorityCredit; /* 0x32 */ 366*fd501800SSascha Wildner U16 MaxReplyDescriptorPostQueueDepth; /* 0x34 */ 367*fd501800SSascha Wildner U8 ReplyFrameSize; /* 0x36 */ 368*fd501800SSascha Wildner U8 MaxVolumes; /* 0x37 */ 369*fd501800SSascha Wildner U16 MaxDevHandle; /* 0x38 */ 370*fd501800SSascha Wildner U16 MaxPersistentEntries; /* 0x3A */ 371*fd501800SSascha Wildner U16 MinDevHandle; /* 0x3C */ 372*fd501800SSascha Wildner U8 CurrentHostPageSize; /* 0x3E */ 373*fd501800SSascha Wildner U8 Reserved4; /* 0x3F */ 374*fd501800SSascha Wildner U8 SGEModifierMask; /* 0x40 */ 375*fd501800SSascha Wildner U8 SGEModifierValue; /* 0x41 */ 376*fd501800SSascha Wildner U8 SGEModifierShift; /* 0x42 */ 377*fd501800SSascha Wildner U8 Reserved5; /* 0x43 */ 378*fd501800SSascha Wildner } MPI2_IOC_FACTS_REPLY, MPI2_POINTER PTR_MPI2_IOC_FACTS_REPLY, 379*fd501800SSascha Wildner Mpi2IOCFactsReply_t, MPI2_POINTER pMpi2IOCFactsReply_t; 380*fd501800SSascha Wildner 381*fd501800SSascha Wildner /* MsgVersion */ 382*fd501800SSascha Wildner #define MPI2_IOCFACTS_MSGVERSION_MAJOR_MASK (0xFF00) 383*fd501800SSascha Wildner #define MPI2_IOCFACTS_MSGVERSION_MAJOR_SHIFT (8) 384*fd501800SSascha Wildner #define MPI2_IOCFACTS_MSGVERSION_MINOR_MASK (0x00FF) 385*fd501800SSascha Wildner #define MPI2_IOCFACTS_MSGVERSION_MINOR_SHIFT (0) 386*fd501800SSascha Wildner 387*fd501800SSascha Wildner /* HeaderVersion */ 388*fd501800SSascha Wildner #define MPI2_IOCFACTS_HDRVERSION_UNIT_MASK (0xFF00) 389*fd501800SSascha Wildner #define MPI2_IOCFACTS_HDRVERSION_UNIT_SHIFT (8) 390*fd501800SSascha Wildner #define MPI2_IOCFACTS_HDRVERSION_DEV_MASK (0x00FF) 391*fd501800SSascha Wildner #define MPI2_IOCFACTS_HDRVERSION_DEV_SHIFT (0) 392*fd501800SSascha Wildner 393*fd501800SSascha Wildner /* IOCExceptions */ 394*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_PCIE_DISABLED (0x0400) 395*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_PARTIAL_MEMORY_FAILURE (0x0200) 396*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX (0x0100) 397*fd501800SSascha Wildner 398*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_MASK (0x00E0) 399*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_GOOD (0x0000) 400*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_BACKUP (0x0020) 401*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_RESTORED (0x0040) 402*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_CORRUPT_BACKUP (0x0060) 403*fd501800SSascha Wildner 404*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED (0x0010) 405*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_MANUFACT_CHECKSUM_FAIL (0x0008) 406*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL (0x0004) 407*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID (0x0002) 408*fd501800SSascha Wildner #define MPI2_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL (0x0001) 409*fd501800SSascha Wildner 410*fd501800SSascha Wildner /* defines for WhoInit field are after the IOCInit Request */ 411*fd501800SSascha Wildner 412*fd501800SSascha Wildner /* ProductID field uses MPI2_FW_HEADER_PID_ */ 413*fd501800SSascha Wildner 414*fd501800SSascha Wildner /* IOCCapabilities */ 415*fd501800SSascha Wildner #define MPI26_IOCFACTS_CAPABILITY_PCIE_SRIOV (0x00100000) 416*fd501800SSascha Wildner #define MPI26_IOCFACTS_CAPABILITY_ATOMIC_REQ (0x00080000) 417*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE (0x00040000) 418*fd501800SSascha Wildner #define MPI25_IOCFACTS_CAPABILITY_FAST_PATH_CAPABLE (0x00020000) 419*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY (0x00010000) 420*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX (0x00008000) 421*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR (0x00004000) 422*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY (0x00002000) 423*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID (0x00001000) 424*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_TLR (0x00000800) 425*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_MULTICAST (0x00000100) 426*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_BIDIRECTIONAL_TARGET (0x00000080) 427*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_EEDP (0x00000040) 428*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER (0x00000020) 429*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER (0x00000010) 430*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER (0x00000008) 431*fd501800SSascha Wildner #define MPI2_IOCFACTS_CAPABILITY_TASK_SET_FULL_HANDLING (0x00000004) 432*fd501800SSascha Wildner 433*fd501800SSascha Wildner /* ProtocolFlags */ 434*fd501800SSascha Wildner #define MPI2_IOCFACTS_PROTOCOL_NVME_DEVICES (0x0008) /* MPI v2.6 and later */ 435*fd501800SSascha Wildner #define MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR (0x0002) 436*fd501800SSascha Wildner #define MPI2_IOCFACTS_PROTOCOL_SCSI_TARGET (0x0001) 437*fd501800SSascha Wildner 438*fd501800SSascha Wildner 439*fd501800SSascha Wildner /**************************************************************************** 440*fd501800SSascha Wildner * PortFacts message 441*fd501800SSascha Wildner ****************************************************************************/ 442*fd501800SSascha Wildner 443*fd501800SSascha Wildner /* PortFacts Request message */ 444*fd501800SSascha Wildner typedef struct _MPI2_PORT_FACTS_REQUEST 445*fd501800SSascha Wildner { 446*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 447*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 448*fd501800SSascha Wildner U8 Function; /* 0x03 */ 449*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 450*fd501800SSascha Wildner U8 PortNumber; /* 0x06 */ 451*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 452*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 453*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 454*fd501800SSascha Wildner U16 Reserved3; /* 0x0A */ 455*fd501800SSascha Wildner } MPI2_PORT_FACTS_REQUEST, MPI2_POINTER PTR_MPI2_PORT_FACTS_REQUEST, 456*fd501800SSascha Wildner Mpi2PortFactsRequest_t, MPI2_POINTER pMpi2PortFactsRequest_t; 457*fd501800SSascha Wildner 458*fd501800SSascha Wildner /* PortFacts Reply message */ 459*fd501800SSascha Wildner typedef struct _MPI2_PORT_FACTS_REPLY 460*fd501800SSascha Wildner { 461*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 462*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 463*fd501800SSascha Wildner U8 Function; /* 0x03 */ 464*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 465*fd501800SSascha Wildner U8 PortNumber; /* 0x06 */ 466*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 467*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 468*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 469*fd501800SSascha Wildner U16 Reserved3; /* 0x0A */ 470*fd501800SSascha Wildner U16 Reserved4; /* 0x0C */ 471*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 472*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 473*fd501800SSascha Wildner U8 Reserved5; /* 0x14 */ 474*fd501800SSascha Wildner U8 PortType; /* 0x15 */ 475*fd501800SSascha Wildner U16 Reserved6; /* 0x16 */ 476*fd501800SSascha Wildner U16 MaxPostedCmdBuffers; /* 0x18 */ 477*fd501800SSascha Wildner U16 Reserved7; /* 0x1A */ 478*fd501800SSascha Wildner } MPI2_PORT_FACTS_REPLY, MPI2_POINTER PTR_MPI2_PORT_FACTS_REPLY, 479*fd501800SSascha Wildner Mpi2PortFactsReply_t, MPI2_POINTER pMpi2PortFactsReply_t; 480*fd501800SSascha Wildner 481*fd501800SSascha Wildner /* PortType values */ 482*fd501800SSascha Wildner #define MPI2_PORTFACTS_PORTTYPE_INACTIVE (0x00) 483*fd501800SSascha Wildner #define MPI2_PORTFACTS_PORTTYPE_FC (0x10) 484*fd501800SSascha Wildner #define MPI2_PORTFACTS_PORTTYPE_ISCSI (0x20) 485*fd501800SSascha Wildner #define MPI2_PORTFACTS_PORTTYPE_SAS_PHYSICAL (0x30) 486*fd501800SSascha Wildner #define MPI2_PORTFACTS_PORTTYPE_SAS_VIRTUAL (0x31) 487*fd501800SSascha Wildner #define MPI2_PORTFACTS_PORTTYPE_TRI_MODE (0x40) /* MPI v2.6 and later */ 488*fd501800SSascha Wildner 489*fd501800SSascha Wildner 490*fd501800SSascha Wildner /**************************************************************************** 491*fd501800SSascha Wildner * PortEnable message 492*fd501800SSascha Wildner ****************************************************************************/ 493*fd501800SSascha Wildner 494*fd501800SSascha Wildner /* PortEnable Request message */ 495*fd501800SSascha Wildner typedef struct _MPI2_PORT_ENABLE_REQUEST 496*fd501800SSascha Wildner { 497*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 498*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 499*fd501800SSascha Wildner U8 Function; /* 0x03 */ 500*fd501800SSascha Wildner U8 Reserved2; /* 0x04 */ 501*fd501800SSascha Wildner U8 PortFlags; /* 0x05 */ 502*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 503*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 504*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 505*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 506*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 507*fd501800SSascha Wildner } MPI2_PORT_ENABLE_REQUEST, MPI2_POINTER PTR_MPI2_PORT_ENABLE_REQUEST, 508*fd501800SSascha Wildner Mpi2PortEnableRequest_t, MPI2_POINTER pMpi2PortEnableRequest_t; 509*fd501800SSascha Wildner 510*fd501800SSascha Wildner 511*fd501800SSascha Wildner /* PortEnable Reply message */ 512*fd501800SSascha Wildner typedef struct _MPI2_PORT_ENABLE_REPLY 513*fd501800SSascha Wildner { 514*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 515*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 516*fd501800SSascha Wildner U8 Function; /* 0x03 */ 517*fd501800SSascha Wildner U8 Reserved2; /* 0x04 */ 518*fd501800SSascha Wildner U8 PortFlags; /* 0x05 */ 519*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 520*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 521*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 522*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 523*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 524*fd501800SSascha Wildner U16 Reserved5; /* 0x0C */ 525*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 526*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 527*fd501800SSascha Wildner } MPI2_PORT_ENABLE_REPLY, MPI2_POINTER PTR_MPI2_PORT_ENABLE_REPLY, 528*fd501800SSascha Wildner Mpi2PortEnableReply_t, MPI2_POINTER pMpi2PortEnableReply_t; 529*fd501800SSascha Wildner 530*fd501800SSascha Wildner 531*fd501800SSascha Wildner /**************************************************************************** 532*fd501800SSascha Wildner * EventNotification message 533*fd501800SSascha Wildner ****************************************************************************/ 534*fd501800SSascha Wildner 535*fd501800SSascha Wildner /* EventNotification Request message */ 536*fd501800SSascha Wildner #define MPI2_EVENT_NOTIFY_EVENTMASK_WORDS (4) 537*fd501800SSascha Wildner 538*fd501800SSascha Wildner typedef struct _MPI2_EVENT_NOTIFICATION_REQUEST 539*fd501800SSascha Wildner { 540*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 541*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 542*fd501800SSascha Wildner U8 Function; /* 0x03 */ 543*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 544*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 545*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 546*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 547*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 548*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 549*fd501800SSascha Wildner U32 Reserved5; /* 0x0C */ 550*fd501800SSascha Wildner U32 Reserved6; /* 0x10 */ 551*fd501800SSascha Wildner U32 EventMasks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS];/* 0x14 */ 552*fd501800SSascha Wildner U16 SASBroadcastPrimitiveMasks; /* 0x24 */ 553*fd501800SSascha Wildner U16 SASNotifyPrimitiveMasks; /* 0x26 */ 554*fd501800SSascha Wildner U32 Reserved8; /* 0x28 */ 555*fd501800SSascha Wildner } MPI2_EVENT_NOTIFICATION_REQUEST, 556*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_NOTIFICATION_REQUEST, 557*fd501800SSascha Wildner Mpi2EventNotificationRequest_t, MPI2_POINTER pMpi2EventNotificationRequest_t; 558*fd501800SSascha Wildner 559*fd501800SSascha Wildner 560*fd501800SSascha Wildner /* EventNotification Reply message */ 561*fd501800SSascha Wildner typedef struct _MPI2_EVENT_NOTIFICATION_REPLY 562*fd501800SSascha Wildner { 563*fd501800SSascha Wildner U16 EventDataLength; /* 0x00 */ 564*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 565*fd501800SSascha Wildner U8 Function; /* 0x03 */ 566*fd501800SSascha Wildner U16 Reserved1; /* 0x04 */ 567*fd501800SSascha Wildner U8 AckRequired; /* 0x06 */ 568*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 569*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 570*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 571*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 572*fd501800SSascha Wildner U16 Reserved3; /* 0x0C */ 573*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 574*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 575*fd501800SSascha Wildner U16 Event; /* 0x14 */ 576*fd501800SSascha Wildner U16 Reserved4; /* 0x16 */ 577*fd501800SSascha Wildner U32 EventContext; /* 0x18 */ 578*fd501800SSascha Wildner U32 EventData[1]; /* 0x1C */ 579*fd501800SSascha Wildner } MPI2_EVENT_NOTIFICATION_REPLY, MPI2_POINTER PTR_MPI2_EVENT_NOTIFICATION_REPLY, 580*fd501800SSascha Wildner Mpi2EventNotificationReply_t, MPI2_POINTER pMpi2EventNotificationReply_t; 581*fd501800SSascha Wildner 582*fd501800SSascha Wildner /* AckRequired */ 583*fd501800SSascha Wildner #define MPI2_EVENT_NOTIFICATION_ACK_NOT_REQUIRED (0x00) 584*fd501800SSascha Wildner #define MPI2_EVENT_NOTIFICATION_ACK_REQUIRED (0x01) 585*fd501800SSascha Wildner 586*fd501800SSascha Wildner /* Event */ 587*fd501800SSascha Wildner #define MPI2_EVENT_LOG_DATA (0x0001) 588*fd501800SSascha Wildner #define MPI2_EVENT_STATE_CHANGE (0x0002) 589*fd501800SSascha Wildner #define MPI2_EVENT_HARD_RESET_RECEIVED (0x0005) 590*fd501800SSascha Wildner #define MPI2_EVENT_EVENT_CHANGE (0x000A) 591*fd501800SSascha Wildner #define MPI2_EVENT_TASK_SET_FULL (0x000E) /* obsolete */ 592*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEVICE_STATUS_CHANGE (0x000F) 593*fd501800SSascha Wildner #define MPI2_EVENT_IR_OPERATION_STATUS (0x0014) 594*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISCOVERY (0x0016) 595*fd501800SSascha Wildner #define MPI2_EVENT_SAS_BROADCAST_PRIMITIVE (0x0017) 596*fd501800SSascha Wildner #define MPI2_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE (0x0018) 597*fd501800SSascha Wildner #define MPI2_EVENT_SAS_INIT_TABLE_OVERFLOW (0x0019) 598*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST (0x001C) 599*fd501800SSascha Wildner #define MPI2_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE (0x001D) 600*fd501800SSascha Wildner #define MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE (0x001D) /* MPI v2.6 and later */ 601*fd501800SSascha Wildner #define MPI2_EVENT_IR_VOLUME (0x001E) 602*fd501800SSascha Wildner #define MPI2_EVENT_IR_PHYSICAL_DISK (0x001F) 603*fd501800SSascha Wildner #define MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST (0x0020) 604*fd501800SSascha Wildner #define MPI2_EVENT_LOG_ENTRY_ADDED (0x0021) 605*fd501800SSascha Wildner #define MPI2_EVENT_SAS_PHY_COUNTER (0x0022) 606*fd501800SSascha Wildner #define MPI2_EVENT_GPIO_INTERRUPT (0x0023) 607*fd501800SSascha Wildner #define MPI2_EVENT_HOST_BASED_DISCOVERY_PHY (0x0024) 608*fd501800SSascha Wildner #define MPI2_EVENT_SAS_QUIESCE (0x0025) 609*fd501800SSascha Wildner #define MPI2_EVENT_SAS_NOTIFY_PRIMITIVE (0x0026) 610*fd501800SSascha Wildner #define MPI2_EVENT_TEMP_THRESHOLD (0x0027) 611*fd501800SSascha Wildner #define MPI2_EVENT_HOST_MESSAGE (0x0028) 612*fd501800SSascha Wildner #define MPI2_EVENT_POWER_PERFORMANCE_CHANGE (0x0029) 613*fd501800SSascha Wildner #define MPI2_EVENT_PCIE_DEVICE_STATUS_CHANGE (0x0030) /* MPI v2.6 and later */ 614*fd501800SSascha Wildner #define MPI2_EVENT_PCIE_ENUMERATION (0x0031) /* MPI v2.6 and later */ 615*fd501800SSascha Wildner #define MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST (0x0032) /* MPI v2.6 and later */ 616*fd501800SSascha Wildner #define MPI2_EVENT_PCIE_LINK_COUNTER (0x0033) /* MPI v2.6 and later */ 617*fd501800SSascha Wildner #define MPI2_EVENT_ACTIVE_CABLE_EXCEPTION (0x0034) /* MPI v2.6 and later */ 618*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR (0x0035) /* MPI v2.5 and later */ 619*fd501800SSascha Wildner #define MPI2_EVENT_MIN_PRODUCT_SPECIFIC (0x006E) 620*fd501800SSascha Wildner #define MPI2_EVENT_MAX_PRODUCT_SPECIFIC (0x007F) 621*fd501800SSascha Wildner 622*fd501800SSascha Wildner 623*fd501800SSascha Wildner /* Log Entry Added Event data */ 624*fd501800SSascha Wildner 625*fd501800SSascha Wildner /* the following structure matches MPI2_LOG_0_ENTRY in mpi2_cnfg.h */ 626*fd501800SSascha Wildner #define MPI2_EVENT_DATA_LOG_DATA_LENGTH (0x1C) 627*fd501800SSascha Wildner 628*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_LOG_ENTRY_ADDED 629*fd501800SSascha Wildner { 630*fd501800SSascha Wildner U64 TimeStamp; /* 0x00 */ 631*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 632*fd501800SSascha Wildner U16 LogSequence; /* 0x0C */ 633*fd501800SSascha Wildner U16 LogEntryQualifier; /* 0x0E */ 634*fd501800SSascha Wildner U8 VP_ID; /* 0x10 */ 635*fd501800SSascha Wildner U8 VF_ID; /* 0x11 */ 636*fd501800SSascha Wildner U16 Reserved2; /* 0x12 */ 637*fd501800SSascha Wildner U8 LogData[MPI2_EVENT_DATA_LOG_DATA_LENGTH];/* 0x14 */ 638*fd501800SSascha Wildner } MPI2_EVENT_DATA_LOG_ENTRY_ADDED, 639*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_LOG_ENTRY_ADDED, 640*fd501800SSascha Wildner Mpi2EventDataLogEntryAdded_t, MPI2_POINTER pMpi2EventDataLogEntryAdded_t; 641*fd501800SSascha Wildner 642*fd501800SSascha Wildner 643*fd501800SSascha Wildner /* GPIO Interrupt Event data */ 644*fd501800SSascha Wildner 645*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_GPIO_INTERRUPT 646*fd501800SSascha Wildner { 647*fd501800SSascha Wildner U8 GPIONum; /* 0x00 */ 648*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 649*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 650*fd501800SSascha Wildner } MPI2_EVENT_DATA_GPIO_INTERRUPT, 651*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_GPIO_INTERRUPT, 652*fd501800SSascha Wildner Mpi2EventDataGpioInterrupt_t, MPI2_POINTER pMpi2EventDataGpioInterrupt_t; 653*fd501800SSascha Wildner 654*fd501800SSascha Wildner 655*fd501800SSascha Wildner /* Temperature Threshold Event data */ 656*fd501800SSascha Wildner 657*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_TEMPERATURE 658*fd501800SSascha Wildner { 659*fd501800SSascha Wildner U16 Status; /* 0x00 */ 660*fd501800SSascha Wildner U8 SensorNum; /* 0x02 */ 661*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 662*fd501800SSascha Wildner U16 CurrentTemperature; /* 0x04 */ 663*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 664*fd501800SSascha Wildner U32 Reserved3; /* 0x08 */ 665*fd501800SSascha Wildner U32 Reserved4; /* 0x0C */ 666*fd501800SSascha Wildner } MPI2_EVENT_DATA_TEMPERATURE, 667*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_TEMPERATURE, 668*fd501800SSascha Wildner Mpi2EventDataTemperature_t, MPI2_POINTER pMpi2EventDataTemperature_t; 669*fd501800SSascha Wildner 670*fd501800SSascha Wildner /* Temperature Threshold Event data Status bits */ 671*fd501800SSascha Wildner #define MPI2_EVENT_TEMPERATURE3_EXCEEDED (0x0008) 672*fd501800SSascha Wildner #define MPI2_EVENT_TEMPERATURE2_EXCEEDED (0x0004) 673*fd501800SSascha Wildner #define MPI2_EVENT_TEMPERATURE1_EXCEEDED (0x0002) 674*fd501800SSascha Wildner #define MPI2_EVENT_TEMPERATURE0_EXCEEDED (0x0001) 675*fd501800SSascha Wildner 676*fd501800SSascha Wildner 677*fd501800SSascha Wildner /* Host Message Event data */ 678*fd501800SSascha Wildner 679*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_HOST_MESSAGE 680*fd501800SSascha Wildner { 681*fd501800SSascha Wildner U8 SourceVF_ID; /* 0x00 */ 682*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 683*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 684*fd501800SSascha Wildner U32 Reserved3; /* 0x04 */ 685*fd501800SSascha Wildner U32 HostData[1]; /* 0x08 */ 686*fd501800SSascha Wildner } MPI2_EVENT_DATA_HOST_MESSAGE, MPI2_POINTER PTR_MPI2_EVENT_DATA_HOST_MESSAGE, 687*fd501800SSascha Wildner Mpi2EventDataHostMessage_t, MPI2_POINTER pMpi2EventDataHostMessage_t; 688*fd501800SSascha Wildner 689*fd501800SSascha Wildner 690*fd501800SSascha Wildner /* Power Performance Change Event data */ 691*fd501800SSascha Wildner 692*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_POWER_PERF_CHANGE 693*fd501800SSascha Wildner { 694*fd501800SSascha Wildner U8 CurrentPowerMode; /* 0x00 */ 695*fd501800SSascha Wildner U8 PreviousPowerMode; /* 0x01 */ 696*fd501800SSascha Wildner U16 Reserved1; /* 0x02 */ 697*fd501800SSascha Wildner } MPI2_EVENT_DATA_POWER_PERF_CHANGE, 698*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_POWER_PERF_CHANGE, 699*fd501800SSascha Wildner Mpi2EventDataPowerPerfChange_t, MPI2_POINTER pMpi2EventDataPowerPerfChange_t; 700*fd501800SSascha Wildner 701*fd501800SSascha Wildner /* defines for CurrentPowerMode and PreviousPowerMode fields */ 702*fd501800SSascha Wildner #define MPI2_EVENT_PM_INIT_MASK (0xC0) 703*fd501800SSascha Wildner #define MPI2_EVENT_PM_INIT_UNAVAILABLE (0x00) 704*fd501800SSascha Wildner #define MPI2_EVENT_PM_INIT_HOST (0x40) 705*fd501800SSascha Wildner #define MPI2_EVENT_PM_INIT_IO_UNIT (0x80) 706*fd501800SSascha Wildner #define MPI2_EVENT_PM_INIT_PCIE_DPA (0xC0) 707*fd501800SSascha Wildner 708*fd501800SSascha Wildner #define MPI2_EVENT_PM_MODE_MASK (0x07) 709*fd501800SSascha Wildner #define MPI2_EVENT_PM_MODE_UNAVAILABLE (0x00) 710*fd501800SSascha Wildner #define MPI2_EVENT_PM_MODE_UNKNOWN (0x01) 711*fd501800SSascha Wildner #define MPI2_EVENT_PM_MODE_FULL_POWER (0x04) 712*fd501800SSascha Wildner #define MPI2_EVENT_PM_MODE_REDUCED_POWER (0x05) 713*fd501800SSascha Wildner #define MPI2_EVENT_PM_MODE_STANDBY (0x06) 714*fd501800SSascha Wildner 715*fd501800SSascha Wildner 716*fd501800SSascha Wildner /* Active Cable Exception Event data */ 717*fd501800SSascha Wildner 718*fd501800SSascha Wildner typedef struct _MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT 719*fd501800SSascha Wildner { 720*fd501800SSascha Wildner U32 ActiveCablePowerRequirement; /* 0x00 */ 721*fd501800SSascha Wildner U8 ReasonCode; /* 0x04 */ 722*fd501800SSascha Wildner U8 ReceptacleID; /* 0x05 */ 723*fd501800SSascha Wildner U16 Reserved1; /* 0x06 */ 724*fd501800SSascha Wildner } MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT, 725*fd501800SSascha Wildner MPI2_POINTER PTR_MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT, 726*fd501800SSascha Wildner Mpi25EventDataActiveCableExcept_t, 727*fd501800SSascha Wildner MPI2_POINTER pMpi25EventDataActiveCableExcept_t, 728*fd501800SSascha Wildner MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT, 729*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT, 730*fd501800SSascha Wildner Mpi26EventDataActiveCableExcept_t, 731*fd501800SSascha Wildner MPI2_POINTER pMpi26EventDataActiveCableExcept_t; 732*fd501800SSascha Wildner 733*fd501800SSascha Wildner /* MPI2.5 defines for the ReasonCode field */ 734*fd501800SSascha Wildner #define MPI25_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER (0x00) 735*fd501800SSascha Wildner #define MPI25_EVENT_ACTIVE_CABLE_PRESENT (0x01) 736*fd501800SSascha Wildner #define MPI25_EVENT_ACTIVE_CABLE_DEGRADED (0x02) 737*fd501800SSascha Wildner 738*fd501800SSascha Wildner /* MPI2.6 defines for the ReasonCode field */ 739*fd501800SSascha Wildner #define MPI26_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER (0x00) 740*fd501800SSascha Wildner #define MPI26_EVENT_ACTIVE_CABLE_PRESENT (0x01) 741*fd501800SSascha Wildner #define MPI26_EVENT_ACTIVE_CABLE_DEGRADED (0x02) 742*fd501800SSascha Wildner 743*fd501800SSascha Wildner /* Hard Reset Received Event data */ 744*fd501800SSascha Wildner 745*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_HARD_RESET_RECEIVED 746*fd501800SSascha Wildner { 747*fd501800SSascha Wildner U8 Reserved1; /* 0x00 */ 748*fd501800SSascha Wildner U8 Port; /* 0x01 */ 749*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 750*fd501800SSascha Wildner } MPI2_EVENT_DATA_HARD_RESET_RECEIVED, 751*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_HARD_RESET_RECEIVED, 752*fd501800SSascha Wildner Mpi2EventDataHardResetReceived_t, 753*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataHardResetReceived_t; 754*fd501800SSascha Wildner 755*fd501800SSascha Wildner 756*fd501800SSascha Wildner /* Task Set Full Event data */ 757*fd501800SSascha Wildner /* this event is obsolete */ 758*fd501800SSascha Wildner 759*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_TASK_SET_FULL 760*fd501800SSascha Wildner { 761*fd501800SSascha Wildner U16 DevHandle; /* 0x00 */ 762*fd501800SSascha Wildner U16 CurrentDepth; /* 0x02 */ 763*fd501800SSascha Wildner } MPI2_EVENT_DATA_TASK_SET_FULL, MPI2_POINTER PTR_MPI2_EVENT_DATA_TASK_SET_FULL, 764*fd501800SSascha Wildner Mpi2EventDataTaskSetFull_t, MPI2_POINTER pMpi2EventDataTaskSetFull_t; 765*fd501800SSascha Wildner 766*fd501800SSascha Wildner 767*fd501800SSascha Wildner /* SAS Device Status Change Event data */ 768*fd501800SSascha Wildner 769*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE 770*fd501800SSascha Wildner { 771*fd501800SSascha Wildner U16 TaskTag; /* 0x00 */ 772*fd501800SSascha Wildner U8 ReasonCode; /* 0x02 */ 773*fd501800SSascha Wildner U8 PhysicalPort; /* 0x03 */ 774*fd501800SSascha Wildner U8 ASC; /* 0x04 */ 775*fd501800SSascha Wildner U8 ASCQ; /* 0x05 */ 776*fd501800SSascha Wildner U16 DevHandle; /* 0x06 */ 777*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 778*fd501800SSascha Wildner U64 SASAddress; /* 0x0C */ 779*fd501800SSascha Wildner U8 LUN[8]; /* 0x14 */ 780*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 781*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 782*fd501800SSascha Wildner Mpi2EventDataSasDeviceStatusChange_t, 783*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataSasDeviceStatusChange_t; 784*fd501800SSascha Wildner 785*fd501800SSascha Wildner /* SAS Device Status Change Event data ReasonCode values */ 786*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_SMART_DATA (0x05) 787*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_UNSUPPORTED (0x07) 788*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08) 789*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_TASK_ABORT_INTERNAL (0x09) 790*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_ABORT_TASK_SET_INTERNAL (0x0A) 791*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_CLEAR_TASK_SET_INTERNAL (0x0B) 792*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_QUERY_TASK_INTERNAL (0x0C) 793*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_ASYNC_NOTIFICATION (0x0D) 794*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_INTERNAL_DEV_RESET (0x0E) 795*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_TASK_ABORT_INTERNAL (0x0F) 796*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE (0x10) 797*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_EXPANDER_REDUCED_FUNCTIONALITY (0x11) 798*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_EXPANDER_REDUCED_FUNCTIONALITY (0x12) 799*fd501800SSascha Wildner 800*fd501800SSascha Wildner 801*fd501800SSascha Wildner /* Integrated RAID Operation Status Event data */ 802*fd501800SSascha Wildner 803*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_IR_OPERATION_STATUS 804*fd501800SSascha Wildner { 805*fd501800SSascha Wildner U16 VolDevHandle; /* 0x00 */ 806*fd501800SSascha Wildner U16 Reserved1; /* 0x02 */ 807*fd501800SSascha Wildner U8 RAIDOperation; /* 0x04 */ 808*fd501800SSascha Wildner U8 PercentComplete; /* 0x05 */ 809*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 810*fd501800SSascha Wildner U32 ElapsedSeconds; /* 0x08 */ 811*fd501800SSascha Wildner } MPI2_EVENT_DATA_IR_OPERATION_STATUS, 812*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_OPERATION_STATUS, 813*fd501800SSascha Wildner Mpi2EventDataIrOperationStatus_t, 814*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataIrOperationStatus_t; 815*fd501800SSascha Wildner 816*fd501800SSascha Wildner /* Integrated RAID Operation Status Event data RAIDOperation values */ 817*fd501800SSascha Wildner #define MPI2_EVENT_IR_RAIDOP_RESYNC (0x00) 818*fd501800SSascha Wildner #define MPI2_EVENT_IR_RAIDOP_ONLINE_CAP_EXPANSION (0x01) 819*fd501800SSascha Wildner #define MPI2_EVENT_IR_RAIDOP_CONSISTENCY_CHECK (0x02) 820*fd501800SSascha Wildner #define MPI2_EVENT_IR_RAIDOP_BACKGROUND_INIT (0x03) 821*fd501800SSascha Wildner #define MPI2_EVENT_IR_RAIDOP_MAKE_DATA_CONSISTENT (0x04) 822*fd501800SSascha Wildner 823*fd501800SSascha Wildner 824*fd501800SSascha Wildner /* Integrated RAID Volume Event data */ 825*fd501800SSascha Wildner 826*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_IR_VOLUME 827*fd501800SSascha Wildner { 828*fd501800SSascha Wildner U16 VolDevHandle; /* 0x00 */ 829*fd501800SSascha Wildner U8 ReasonCode; /* 0x02 */ 830*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 831*fd501800SSascha Wildner U32 NewValue; /* 0x04 */ 832*fd501800SSascha Wildner U32 PreviousValue; /* 0x08 */ 833*fd501800SSascha Wildner } MPI2_EVENT_DATA_IR_VOLUME, MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_VOLUME, 834*fd501800SSascha Wildner Mpi2EventDataIrVolume_t, MPI2_POINTER pMpi2EventDataIrVolume_t; 835*fd501800SSascha Wildner 836*fd501800SSascha Wildner /* Integrated RAID Volume Event data ReasonCode values */ 837*fd501800SSascha Wildner #define MPI2_EVENT_IR_VOLUME_RC_SETTINGS_CHANGED (0x01) 838*fd501800SSascha Wildner #define MPI2_EVENT_IR_VOLUME_RC_STATUS_FLAGS_CHANGED (0x02) 839*fd501800SSascha Wildner #define MPI2_EVENT_IR_VOLUME_RC_STATE_CHANGED (0x03) 840*fd501800SSascha Wildner 841*fd501800SSascha Wildner 842*fd501800SSascha Wildner /* Integrated RAID Physical Disk Event data */ 843*fd501800SSascha Wildner 844*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_IR_PHYSICAL_DISK 845*fd501800SSascha Wildner { 846*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 847*fd501800SSascha Wildner U8 ReasonCode; /* 0x02 */ 848*fd501800SSascha Wildner U8 PhysDiskNum; /* 0x03 */ 849*fd501800SSascha Wildner U16 PhysDiskDevHandle; /* 0x04 */ 850*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 851*fd501800SSascha Wildner U16 Slot; /* 0x08 */ 852*fd501800SSascha Wildner U16 EnclosureHandle; /* 0x0A */ 853*fd501800SSascha Wildner U32 NewValue; /* 0x0C */ 854*fd501800SSascha Wildner U32 PreviousValue; /* 0x10 */ 855*fd501800SSascha Wildner } MPI2_EVENT_DATA_IR_PHYSICAL_DISK, 856*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_PHYSICAL_DISK, 857*fd501800SSascha Wildner Mpi2EventDataIrPhysicalDisk_t, MPI2_POINTER pMpi2EventDataIrPhysicalDisk_t; 858*fd501800SSascha Wildner 859*fd501800SSascha Wildner /* Integrated RAID Physical Disk Event data ReasonCode values */ 860*fd501800SSascha Wildner #define MPI2_EVENT_IR_PHYSDISK_RC_SETTINGS_CHANGED (0x01) 861*fd501800SSascha Wildner #define MPI2_EVENT_IR_PHYSDISK_RC_STATUS_FLAGS_CHANGED (0x02) 862*fd501800SSascha Wildner #define MPI2_EVENT_IR_PHYSDISK_RC_STATE_CHANGED (0x03) 863*fd501800SSascha Wildner 864*fd501800SSascha Wildner 865*fd501800SSascha Wildner /* Integrated RAID Configuration Change List Event data */ 866*fd501800SSascha Wildner 867*fd501800SSascha Wildner /* 868*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 869*fd501800SSascha Wildner * one and check NumElements at runtime. 870*fd501800SSascha Wildner */ 871*fd501800SSascha Wildner #ifndef MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT 872*fd501800SSascha Wildner #define MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT (1) 873*fd501800SSascha Wildner #endif 874*fd501800SSascha Wildner 875*fd501800SSascha Wildner typedef struct _MPI2_EVENT_IR_CONFIG_ELEMENT 876*fd501800SSascha Wildner { 877*fd501800SSascha Wildner U16 ElementFlags; /* 0x00 */ 878*fd501800SSascha Wildner U16 VolDevHandle; /* 0x02 */ 879*fd501800SSascha Wildner U8 ReasonCode; /* 0x04 */ 880*fd501800SSascha Wildner U8 PhysDiskNum; /* 0x05 */ 881*fd501800SSascha Wildner U16 PhysDiskDevHandle; /* 0x06 */ 882*fd501800SSascha Wildner } MPI2_EVENT_IR_CONFIG_ELEMENT, MPI2_POINTER PTR_MPI2_EVENT_IR_CONFIG_ELEMENT, 883*fd501800SSascha Wildner Mpi2EventIrConfigElement_t, MPI2_POINTER pMpi2EventIrConfigElement_t; 884*fd501800SSascha Wildner 885*fd501800SSascha Wildner /* IR Configuration Change List Event data ElementFlags values */ 886*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_EFLAGS_ELEMENT_TYPE_MASK (0x000F) 887*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLUME_ELEMENT (0x0000) 888*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLPHYSDISK_ELEMENT (0x0001) 889*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_EFLAGS_HOTSPARE_ELEMENT (0x0002) 890*fd501800SSascha Wildner 891*fd501800SSascha Wildner /* IR Configuration Change List Event data ReasonCode values */ 892*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_ADDED (0x01) 893*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_REMOVED (0x02) 894*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_NO_CHANGE (0x03) 895*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_HIDE (0x04) 896*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_UNHIDE (0x05) 897*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_VOLUME_CREATED (0x06) 898*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_VOLUME_DELETED (0x07) 899*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_PD_CREATED (0x08) 900*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_RC_PD_DELETED (0x09) 901*fd501800SSascha Wildner 902*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST 903*fd501800SSascha Wildner { 904*fd501800SSascha Wildner U8 NumElements; /* 0x00 */ 905*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 906*fd501800SSascha Wildner U8 Reserved2; /* 0x02 */ 907*fd501800SSascha Wildner U8 ConfigNum; /* 0x03 */ 908*fd501800SSascha Wildner U32 Flags; /* 0x04 */ 909*fd501800SSascha Wildner MPI2_EVENT_IR_CONFIG_ELEMENT ConfigElement[MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT]; /* 0x08 */ 910*fd501800SSascha Wildner } MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, 911*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, 912*fd501800SSascha Wildner Mpi2EventDataIrConfigChangeList_t, 913*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataIrConfigChangeList_t; 914*fd501800SSascha Wildner 915*fd501800SSascha Wildner /* IR Configuration Change List Event data Flags values */ 916*fd501800SSascha Wildner #define MPI2_EVENT_IR_CHANGE_FLAGS_FOREIGN_CONFIG (0x00000001) 917*fd501800SSascha Wildner 918*fd501800SSascha Wildner 919*fd501800SSascha Wildner /* SAS Discovery Event data */ 920*fd501800SSascha Wildner 921*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_DISCOVERY 922*fd501800SSascha Wildner { 923*fd501800SSascha Wildner U8 Flags; /* 0x00 */ 924*fd501800SSascha Wildner U8 ReasonCode; /* 0x01 */ 925*fd501800SSascha Wildner U8 PhysicalPort; /* 0x02 */ 926*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 927*fd501800SSascha Wildner U32 DiscoveryStatus; /* 0x04 */ 928*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_DISCOVERY, 929*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_DISCOVERY, 930*fd501800SSascha Wildner Mpi2EventDataSasDiscovery_t, MPI2_POINTER pMpi2EventDataSasDiscovery_t; 931*fd501800SSascha Wildner 932*fd501800SSascha Wildner /* SAS Discovery Event data Flags values */ 933*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DEVICE_CHANGE (0x02) 934*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_IN_PROGRESS (0x01) 935*fd501800SSascha Wildner 936*fd501800SSascha Wildner /* SAS Discovery Event data ReasonCode values */ 937*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_RC_STARTED (0x01) 938*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_RC_COMPLETED (0x02) 939*fd501800SSascha Wildner 940*fd501800SSascha Wildner /* SAS Discovery Event data DiscoveryStatus values */ 941*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 942*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_MAX_EXPANDERS_EXCEED (0x40000000) 943*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_MAX_DEVICES_EXCEED (0x20000000) 944*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 945*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR (0x08000000) 946*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 947*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 948*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_MULTI_PORT_DOMAIN (0x00002000) 949*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 950*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_UNSUPPORTED_DEVICE (0x00000800) 951*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_TABLE_LINK (0x00000400) 952*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_SUBTRACTIVE_LINK (0x00000200) 953*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_SMP_CRC_ERROR (0x00000100) 954*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_SMP_FUNCTION_FAILED (0x00000080) 955*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_INDEX_NOT_EXIST (0x00000040) 956*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_OUT_ROUTE_ENTRIES (0x00000020) 957*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_SMP_TIMEOUT (0x00000010) 958*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_MULTIPLE_PORTS (0x00000004) 959*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_UNADDRESSABLE_DEVICE (0x00000002) 960*fd501800SSascha Wildner #define MPI2_EVENT_SAS_DISC_DS_LOOP_DETECTED (0x00000001) 961*fd501800SSascha Wildner 962*fd501800SSascha Wildner 963*fd501800SSascha Wildner /* SAS Broadcast Primitive Event data */ 964*fd501800SSascha Wildner 965*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE 966*fd501800SSascha Wildner { 967*fd501800SSascha Wildner U8 PhyNum; /* 0x00 */ 968*fd501800SSascha Wildner U8 Port; /* 0x01 */ 969*fd501800SSascha Wildner U8 PortWidth; /* 0x02 */ 970*fd501800SSascha Wildner U8 Primitive; /* 0x03 */ 971*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 972*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 973*fd501800SSascha Wildner Mpi2EventDataSasBroadcastPrimitive_t, 974*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataSasBroadcastPrimitive_t; 975*fd501800SSascha Wildner 976*fd501800SSascha Wildner /* defines for the Primitive field */ 977*fd501800SSascha Wildner #define MPI2_EVENT_PRIMITIVE_CHANGE (0x01) 978*fd501800SSascha Wildner #define MPI2_EVENT_PRIMITIVE_SES (0x02) 979*fd501800SSascha Wildner #define MPI2_EVENT_PRIMITIVE_EXPANDER (0x03) 980*fd501800SSascha Wildner #define MPI2_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT (0x04) 981*fd501800SSascha Wildner #define MPI2_EVENT_PRIMITIVE_RESERVED3 (0x05) 982*fd501800SSascha Wildner #define MPI2_EVENT_PRIMITIVE_RESERVED4 (0x06) 983*fd501800SSascha Wildner #define MPI2_EVENT_PRIMITIVE_CHANGE0_RESERVED (0x07) 984*fd501800SSascha Wildner #define MPI2_EVENT_PRIMITIVE_CHANGE1_RESERVED (0x08) 985*fd501800SSascha Wildner 986*fd501800SSascha Wildner 987*fd501800SSascha Wildner /* SAS Notify Primitive Event data */ 988*fd501800SSascha Wildner 989*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE 990*fd501800SSascha Wildner { 991*fd501800SSascha Wildner U8 PhyNum; /* 0x00 */ 992*fd501800SSascha Wildner U8 Port; /* 0x01 */ 993*fd501800SSascha Wildner U8 Reserved1; /* 0x02 */ 994*fd501800SSascha Wildner U8 Primitive; /* 0x03 */ 995*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE, 996*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE, 997*fd501800SSascha Wildner Mpi2EventDataSasNotifyPrimitive_t, 998*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataSasNotifyPrimitive_t; 999*fd501800SSascha Wildner 1000*fd501800SSascha Wildner /* defines for the Primitive field */ 1001*fd501800SSascha Wildner #define MPI2_EVENT_NOTIFY_ENABLE_SPINUP (0x01) 1002*fd501800SSascha Wildner #define MPI2_EVENT_NOTIFY_POWER_LOSS_EXPECTED (0x02) 1003*fd501800SSascha Wildner #define MPI2_EVENT_NOTIFY_RESERVED1 (0x03) 1004*fd501800SSascha Wildner #define MPI2_EVENT_NOTIFY_RESERVED2 (0x04) 1005*fd501800SSascha Wildner 1006*fd501800SSascha Wildner 1007*fd501800SSascha Wildner /* SAS Initiator Device Status Change Event data */ 1008*fd501800SSascha Wildner 1009*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE 1010*fd501800SSascha Wildner { 1011*fd501800SSascha Wildner U8 ReasonCode; /* 0x00 */ 1012*fd501800SSascha Wildner U8 PhysicalPort; /* 0x01 */ 1013*fd501800SSascha Wildner U16 DevHandle; /* 0x02 */ 1014*fd501800SSascha Wildner U64 SASAddress; /* 0x04 */ 1015*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 1016*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 1017*fd501800SSascha Wildner Mpi2EventDataSasInitDevStatusChange_t, 1018*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataSasInitDevStatusChange_t; 1019*fd501800SSascha Wildner 1020*fd501800SSascha Wildner /* SAS Initiator Device Status Change event ReasonCode values */ 1021*fd501800SSascha Wildner #define MPI2_EVENT_SAS_INIT_RC_ADDED (0x01) 1022*fd501800SSascha Wildner #define MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING (0x02) 1023*fd501800SSascha Wildner 1024*fd501800SSascha Wildner 1025*fd501800SSascha Wildner /* SAS Initiator Device Table Overflow Event data */ 1026*fd501800SSascha Wildner 1027*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW 1028*fd501800SSascha Wildner { 1029*fd501800SSascha Wildner U16 MaxInit; /* 0x00 */ 1030*fd501800SSascha Wildner U16 CurrentInit; /* 0x02 */ 1031*fd501800SSascha Wildner U64 SASAddress; /* 0x04 */ 1032*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 1033*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 1034*fd501800SSascha Wildner Mpi2EventDataSasInitTableOverflow_t, 1035*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataSasInitTableOverflow_t; 1036*fd501800SSascha Wildner 1037*fd501800SSascha Wildner 1038*fd501800SSascha Wildner /* SAS Topology Change List Event data */ 1039*fd501800SSascha Wildner 1040*fd501800SSascha Wildner /* 1041*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1042*fd501800SSascha Wildner * one and check NumEntries at runtime. 1043*fd501800SSascha Wildner */ 1044*fd501800SSascha Wildner #ifndef MPI2_EVENT_SAS_TOPO_PHY_COUNT 1045*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_PHY_COUNT (1) 1046*fd501800SSascha Wildner #endif 1047*fd501800SSascha Wildner 1048*fd501800SSascha Wildner typedef struct _MPI2_EVENT_SAS_TOPO_PHY_ENTRY 1049*fd501800SSascha Wildner { 1050*fd501800SSascha Wildner U16 AttachedDevHandle; /* 0x00 */ 1051*fd501800SSascha Wildner U8 LinkRate; /* 0x02 */ 1052*fd501800SSascha Wildner U8 PhyStatus; /* 0x03 */ 1053*fd501800SSascha Wildner } MPI2_EVENT_SAS_TOPO_PHY_ENTRY, MPI2_POINTER PTR_MPI2_EVENT_SAS_TOPO_PHY_ENTRY, 1054*fd501800SSascha Wildner Mpi2EventSasTopoPhyEntry_t, MPI2_POINTER pMpi2EventSasTopoPhyEntry_t; 1055*fd501800SSascha Wildner 1056*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST 1057*fd501800SSascha Wildner { 1058*fd501800SSascha Wildner U16 EnclosureHandle; /* 0x00 */ 1059*fd501800SSascha Wildner U16 ExpanderDevHandle; /* 0x02 */ 1060*fd501800SSascha Wildner U8 NumPhys; /* 0x04 */ 1061*fd501800SSascha Wildner U8 Reserved1; /* 0x05 */ 1062*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 1063*fd501800SSascha Wildner U8 NumEntries; /* 0x08 */ 1064*fd501800SSascha Wildner U8 StartPhyNum; /* 0x09 */ 1065*fd501800SSascha Wildner U8 ExpStatus; /* 0x0A */ 1066*fd501800SSascha Wildner U8 PhysicalPort; /* 0x0B */ 1067*fd501800SSascha Wildner MPI2_EVENT_SAS_TOPO_PHY_ENTRY PHY[MPI2_EVENT_SAS_TOPO_PHY_COUNT]; /* 0x0C*/ 1068*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, 1069*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, 1070*fd501800SSascha Wildner Mpi2EventDataSasTopologyChangeList_t, 1071*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataSasTopologyChangeList_t; 1072*fd501800SSascha Wildner 1073*fd501800SSascha Wildner /* values for the ExpStatus field */ 1074*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER (0x00) 1075*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_ES_ADDED (0x01) 1076*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_ES_NOT_RESPONDING (0x02) 1077*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_ES_RESPONDING (0x03) 1078*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING (0x04) 1079*fd501800SSascha Wildner 1080*fd501800SSascha Wildner /* defines for the LinkRate field */ 1081*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_CURRENT_MASK (0xF0) 1082*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_CURRENT_SHIFT (4) 1083*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_PREV_MASK (0x0F) 1084*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_PREV_SHIFT (0) 1085*fd501800SSascha Wildner 1086*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_UNKNOWN_LINK_RATE (0x00) 1087*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_PHY_DISABLED (0x01) 1088*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_NEGOTIATION_FAILED (0x02) 1089*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_SATA_OOB_COMPLETE (0x03) 1090*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_PORT_SELECTOR (0x04) 1091*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_SMP_RESET_IN_PROGRESS (0x05) 1092*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY (0x06) 1093*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_RATE_1_5 (0x08) 1094*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_RATE_3_0 (0x09) 1095*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_LR_RATE_6_0 (0x0A) 1096*fd501800SSascha Wildner #define MPI25_EVENT_SAS_TOPO_LR_RATE_12_0 (0x0B) 1097*fd501800SSascha Wildner #define MPI26_EVENT_SAS_TOPO_LR_RATE_22_5 (0x0C) 1098*fd501800SSascha Wildner 1099*fd501800SSascha Wildner /* values for the PhyStatus field */ 1100*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_PHYSTATUS_VACANT (0x80) 1101*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_PS_MULTIPLEX_CHANGE (0x10) 1102*fd501800SSascha Wildner /* values for the PhyStatus ReasonCode sub-field */ 1103*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_RC_MASK (0x0F) 1104*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED (0x01) 1105*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_RC_TARG_NOT_RESPONDING (0x02) 1106*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED (0x03) 1107*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_RC_NO_CHANGE (0x04) 1108*fd501800SSascha Wildner #define MPI2_EVENT_SAS_TOPO_RC_DELAY_NOT_RESPONDING (0x05) 1109*fd501800SSascha Wildner 1110*fd501800SSascha Wildner 1111*fd501800SSascha Wildner /* SAS Enclosure Device Status Change Event data */ 1112*fd501800SSascha Wildner 1113*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE 1114*fd501800SSascha Wildner { 1115*fd501800SSascha Wildner U16 EnclosureHandle; /* 0x00 */ 1116*fd501800SSascha Wildner U8 ReasonCode; /* 0x02 */ 1117*fd501800SSascha Wildner U8 PhysicalPort; /* 0x03 */ 1118*fd501800SSascha Wildner U64 EnclosureLogicalID; /* 0x04 */ 1119*fd501800SSascha Wildner U16 NumSlots; /* 0x0C */ 1120*fd501800SSascha Wildner U16 StartSlot; /* 0x0E */ 1121*fd501800SSascha Wildner U32 PhyBits; /* 0x10 */ 1122*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE, 1123*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE, 1124*fd501800SSascha Wildner Mpi2EventDataSasEnclDevStatusChange_t, 1125*fd501800SSascha Wildner MPI2_POINTER pMpi2EventDataSasEnclDevStatusChange_t, 1126*fd501800SSascha Wildner MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE, 1127*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE, 1128*fd501800SSascha Wildner Mpi26EventDataEnclDevStatusChange_t, 1129*fd501800SSascha Wildner MPI2_POINTER pMpi26EventDataEnclDevStatusChange_t; 1130*fd501800SSascha Wildner 1131*fd501800SSascha Wildner /* SAS Enclosure Device Status Change event ReasonCode values */ 1132*fd501800SSascha Wildner #define MPI2_EVENT_SAS_ENCL_RC_ADDED (0x01) 1133*fd501800SSascha Wildner #define MPI2_EVENT_SAS_ENCL_RC_NOT_RESPONDING (0x02) 1134*fd501800SSascha Wildner 1135*fd501800SSascha Wildner /* Enclosure Device Status Change event ReasonCode values */ 1136*fd501800SSascha Wildner #define MPI26_EVENT_ENCL_RC_ADDED (0x01) 1137*fd501800SSascha Wildner #define MPI26_EVENT_ENCL_RC_NOT_RESPONDING (0x02) 1138*fd501800SSascha Wildner 1139*fd501800SSascha Wildner /* SAS PHY Counter Event data */ 1140*fd501800SSascha Wildner 1141*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_PHY_COUNTER 1142*fd501800SSascha Wildner { 1143*fd501800SSascha Wildner U64 TimeStamp; /* 0x00 */ 1144*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 1145*fd501800SSascha Wildner U8 PhyEventCode; /* 0x0C */ 1146*fd501800SSascha Wildner U8 PhyNum; /* 0x0D */ 1147*fd501800SSascha Wildner U16 Reserved2; /* 0x0E */ 1148*fd501800SSascha Wildner U32 PhyEventInfo; /* 0x10 */ 1149*fd501800SSascha Wildner U8 CounterType; /* 0x14 */ 1150*fd501800SSascha Wildner U8 ThresholdWindow; /* 0x15 */ 1151*fd501800SSascha Wildner U8 TimeUnits; /* 0x16 */ 1152*fd501800SSascha Wildner U8 Reserved3; /* 0x17 */ 1153*fd501800SSascha Wildner U32 EventThreshold; /* 0x18 */ 1154*fd501800SSascha Wildner U16 ThresholdFlags; /* 0x1C */ 1155*fd501800SSascha Wildner U16 Reserved4; /* 0x1E */ 1156*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_PHY_COUNTER, 1157*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_PHY_COUNTER, 1158*fd501800SSascha Wildner Mpi2EventDataSasPhyCounter_t, MPI2_POINTER pMpi2EventDataSasPhyCounter_t; 1159*fd501800SSascha Wildner 1160*fd501800SSascha Wildner /* use MPI2_SASPHY3_EVENT_CODE_ values from mpi2_cnfg.h for the PhyEventCode field */ 1161*fd501800SSascha Wildner 1162*fd501800SSascha Wildner /* use MPI2_SASPHY3_COUNTER_TYPE_ values from mpi2_cnfg.h for the CounterType field */ 1163*fd501800SSascha Wildner 1164*fd501800SSascha Wildner /* use MPI2_SASPHY3_TIME_UNITS_ values from mpi2_cnfg.h for the TimeUnits field */ 1165*fd501800SSascha Wildner 1166*fd501800SSascha Wildner /* use MPI2_SASPHY3_TFLAGS_ values from mpi2_cnfg.h for the ThresholdFlags field */ 1167*fd501800SSascha Wildner 1168*fd501800SSascha Wildner 1169*fd501800SSascha Wildner /* SAS Quiesce Event data */ 1170*fd501800SSascha Wildner 1171*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_SAS_QUIESCE 1172*fd501800SSascha Wildner { 1173*fd501800SSascha Wildner U8 ReasonCode; /* 0x00 */ 1174*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1175*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 1176*fd501800SSascha Wildner U32 Reserved3; /* 0x04 */ 1177*fd501800SSascha Wildner } MPI2_EVENT_DATA_SAS_QUIESCE, 1178*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_QUIESCE, 1179*fd501800SSascha Wildner Mpi2EventDataSasQuiesce_t, MPI2_POINTER pMpi2EventDataSasQuiesce_t; 1180*fd501800SSascha Wildner 1181*fd501800SSascha Wildner /* SAS Quiesce Event data ReasonCode values */ 1182*fd501800SSascha Wildner #define MPI2_EVENT_SAS_QUIESCE_RC_STARTED (0x01) 1183*fd501800SSascha Wildner #define MPI2_EVENT_SAS_QUIESCE_RC_COMPLETED (0x02) 1184*fd501800SSascha Wildner 1185*fd501800SSascha Wildner 1186*fd501800SSascha Wildner typedef struct _MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR 1187*fd501800SSascha Wildner { 1188*fd501800SSascha Wildner U16 DevHandle; /* 0x00 */ 1189*fd501800SSascha Wildner U8 ReasonCode; /* 0x02 */ 1190*fd501800SSascha Wildner U8 PhysicalPort; /* 0x03 */ 1191*fd501800SSascha Wildner U32 Reserved1[2]; /* 0x04 */ 1192*fd501800SSascha Wildner U64 SASAddress; /* 0x0C */ 1193*fd501800SSascha Wildner U32 Reserved2[2]; /* 0x14 */ 1194*fd501800SSascha Wildner } MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR, 1195*fd501800SSascha Wildner MPI2_POINTER PTR_MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR, 1196*fd501800SSascha Wildner Mpi25EventDataSasDeviceDiscoveryError_t, 1197*fd501800SSascha Wildner MPI2_POINTER pMpi25EventDataSasDeviceDiscoveryError_t; 1198*fd501800SSascha Wildner 1199*fd501800SSascha Wildner /* SAS Device Discovery Error Event data ReasonCode values */ 1200*fd501800SSascha Wildner #define MPI25_EVENT_SAS_DISC_ERR_SMP_FAILED (0x01) 1201*fd501800SSascha Wildner #define MPI25_EVENT_SAS_DISC_ERR_SMP_TIMEOUT (0x02) 1202*fd501800SSascha Wildner 1203*fd501800SSascha Wildner 1204*fd501800SSascha Wildner /* Host Based Discovery Phy Event data */ 1205*fd501800SSascha Wildner 1206*fd501800SSascha Wildner typedef struct _MPI2_EVENT_HBD_PHY_SAS 1207*fd501800SSascha Wildner { 1208*fd501800SSascha Wildner U8 Flags; /* 0x00 */ 1209*fd501800SSascha Wildner U8 NegotiatedLinkRate; /* 0x01 */ 1210*fd501800SSascha Wildner U8 PhyNum; /* 0x02 */ 1211*fd501800SSascha Wildner U8 PhysicalPort; /* 0x03 */ 1212*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 1213*fd501800SSascha Wildner U8 InitialFrame[28]; /* 0x08 */ 1214*fd501800SSascha Wildner } MPI2_EVENT_HBD_PHY_SAS, MPI2_POINTER PTR_MPI2_EVENT_HBD_PHY_SAS, 1215*fd501800SSascha Wildner Mpi2EventHbdPhySas_t, MPI2_POINTER pMpi2EventHbdPhySas_t; 1216*fd501800SSascha Wildner 1217*fd501800SSascha Wildner /* values for the Flags field */ 1218*fd501800SSascha Wildner #define MPI2_EVENT_HBD_SAS_FLAGS_FRAME_VALID (0x02) 1219*fd501800SSascha Wildner #define MPI2_EVENT_HBD_SAS_FLAGS_SATA_FRAME (0x01) 1220*fd501800SSascha Wildner 1221*fd501800SSascha Wildner /* use MPI2_SAS_NEG_LINK_RATE_ defines from mpi2_cnfg.h for the NegotiatedLinkRate field */ 1222*fd501800SSascha Wildner 1223*fd501800SSascha Wildner typedef union _MPI2_EVENT_HBD_DESCRIPTOR 1224*fd501800SSascha Wildner { 1225*fd501800SSascha Wildner MPI2_EVENT_HBD_PHY_SAS Sas; 1226*fd501800SSascha Wildner } MPI2_EVENT_HBD_DESCRIPTOR, MPI2_POINTER PTR_MPI2_EVENT_HBD_DESCRIPTOR, 1227*fd501800SSascha Wildner Mpi2EventHbdDescriptor_t, MPI2_POINTER pMpi2EventHbdDescriptor_t; 1228*fd501800SSascha Wildner 1229*fd501800SSascha Wildner typedef struct _MPI2_EVENT_DATA_HBD_PHY 1230*fd501800SSascha Wildner { 1231*fd501800SSascha Wildner U8 DescriptorType; /* 0x00 */ 1232*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1233*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 1234*fd501800SSascha Wildner U32 Reserved3; /* 0x04 */ 1235*fd501800SSascha Wildner MPI2_EVENT_HBD_DESCRIPTOR Descriptor; /* 0x08 */ 1236*fd501800SSascha Wildner } MPI2_EVENT_DATA_HBD_PHY, MPI2_POINTER PTR_MPI2_EVENT_DATA_HBD_PHY, 1237*fd501800SSascha Wildner Mpi2EventDataHbdPhy_t, MPI2_POINTER pMpi2EventDataMpi2EventDataHbdPhy_t; 1238*fd501800SSascha Wildner 1239*fd501800SSascha Wildner /* values for the DescriptorType field */ 1240*fd501800SSascha Wildner #define MPI2_EVENT_HBD_DT_SAS (0x01) 1241*fd501800SSascha Wildner 1242*fd501800SSascha Wildner 1243*fd501800SSascha Wildner /* PCIe Device Status Change Event data (MPI v2.6 and later) */ 1244*fd501800SSascha Wildner 1245*fd501800SSascha Wildner typedef struct _MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE 1246*fd501800SSascha Wildner { 1247*fd501800SSascha Wildner U16 TaskTag; /* 0x00 */ 1248*fd501800SSascha Wildner U8 ReasonCode; /* 0x02 */ 1249*fd501800SSascha Wildner U8 PhysicalPort; /* 0x03 */ 1250*fd501800SSascha Wildner U8 ASC; /* 0x04 */ 1251*fd501800SSascha Wildner U8 ASCQ; /* 0x05 */ 1252*fd501800SSascha Wildner U16 DevHandle; /* 0x06 */ 1253*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 1254*fd501800SSascha Wildner U64 WWID; /* 0x0C */ 1255*fd501800SSascha Wildner U8 LUN[8]; /* 0x14 */ 1256*fd501800SSascha Wildner } MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE, 1257*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE, 1258*fd501800SSascha Wildner Mpi26EventDataPCIeDeviceStatusChange_t, 1259*fd501800SSascha Wildner MPI2_POINTER pMpi26EventDataPCIeDeviceStatusChange_t; 1260*fd501800SSascha Wildner 1261*fd501800SSascha Wildner /* PCIe Device Status Change Event data ReasonCode values */ 1262*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_SMART_DATA (0x05) 1263*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_UNSUPPORTED (0x07) 1264*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08) 1265*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_TASK_ABORT_INTERNAL (0x09) 1266*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_ABORT_TASK_SET_INTERNAL (0x0A) 1267*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_CLEAR_TASK_SET_INTERNAL (0x0B) 1268*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_QUERY_TASK_INTERNAL (0x0C) 1269*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_ASYNC_NOTIFICATION (0x0D) 1270*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_CMP_INTERNAL_DEV_RESET (0x0E) 1271*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_CMP_TASK_ABORT_INTERNAL (0x0F) 1272*fd501800SSascha Wildner #define MPI26_EVENT_PCIDEV_STAT_RC_DEV_INIT_FAILURE (0x10) 1273*fd501800SSascha Wildner 1274*fd501800SSascha Wildner 1275*fd501800SSascha Wildner /* PCIe Enumeration Event data (MPI v2.6 and later) */ 1276*fd501800SSascha Wildner 1277*fd501800SSascha Wildner typedef struct _MPI26_EVENT_DATA_PCIE_ENUMERATION 1278*fd501800SSascha Wildner { 1279*fd501800SSascha Wildner U8 Flags; /* 0x00 */ 1280*fd501800SSascha Wildner U8 ReasonCode; /* 0x01 */ 1281*fd501800SSascha Wildner U8 PhysicalPort; /* 0x02 */ 1282*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 1283*fd501800SSascha Wildner U32 EnumerationStatus; /* 0x04 */ 1284*fd501800SSascha Wildner } MPI26_EVENT_DATA_PCIE_ENUMERATION, 1285*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_EVENT_DATA_PCIE_ENUMERATION, 1286*fd501800SSascha Wildner Mpi26EventDataPCIeEnumeration_t, 1287*fd501800SSascha Wildner MPI2_POINTER pMpi26EventDataPCIeEnumeration_t; 1288*fd501800SSascha Wildner 1289*fd501800SSascha Wildner /* PCIe Enumeration Event data Flags values */ 1290*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_ENUM_DEVICE_CHANGE (0x02) 1291*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_ENUM_IN_PROGRESS (0x01) 1292*fd501800SSascha Wildner 1293*fd501800SSascha Wildner /* PCIe Enumeration Event data ReasonCode values */ 1294*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_ENUM_RC_STARTED (0x01) 1295*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_ENUM_RC_COMPLETED (0x02) 1296*fd501800SSascha Wildner 1297*fd501800SSascha Wildner /* PCIe Enumeration Event data EnumerationStatus values */ 1298*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_ENUM_ES_MAX_SWITCHES_EXCEED (0x40000000) 1299*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_ENUM_ES_MAX_DEVICES_EXCEED (0x20000000) 1300*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_ENUM_ES_RESOURCES_EXHAUSTED (0x10000000) 1301*fd501800SSascha Wildner 1302*fd501800SSascha Wildner 1303*fd501800SSascha Wildner /* PCIe Topology Change List Event data (MPI v2.6 and later) */ 1304*fd501800SSascha Wildner 1305*fd501800SSascha Wildner /* 1306*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1307*fd501800SSascha Wildner * one and check NumEntries at runtime. 1308*fd501800SSascha Wildner */ 1309*fd501800SSascha Wildner #ifndef MPI26_EVENT_PCIE_TOPO_PORT_COUNT 1310*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PORT_COUNT (1) 1311*fd501800SSascha Wildner #endif 1312*fd501800SSascha Wildner 1313*fd501800SSascha Wildner typedef struct _MPI26_EVENT_PCIE_TOPO_PORT_ENTRY 1314*fd501800SSascha Wildner { 1315*fd501800SSascha Wildner U16 AttachedDevHandle; /* 0x00 */ 1316*fd501800SSascha Wildner U8 PortStatus; /* 0x02 */ 1317*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 1318*fd501800SSascha Wildner U8 CurrentPortInfo; /* 0x04 */ 1319*fd501800SSascha Wildner U8 Reserved2; /* 0x05 */ 1320*fd501800SSascha Wildner U8 PreviousPortInfo; /* 0x06 */ 1321*fd501800SSascha Wildner U8 Reserved3; /* 0x07 */ 1322*fd501800SSascha Wildner } MPI26_EVENT_PCIE_TOPO_PORT_ENTRY, 1323*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_EVENT_PCIE_TOPO_PORT_ENTRY, 1324*fd501800SSascha Wildner Mpi26EventPCIeTopoPortEntry_t, 1325*fd501800SSascha Wildner MPI2_POINTER pMpi26EventPCIeTopoPortEntry_t; 1326*fd501800SSascha Wildner 1327*fd501800SSascha Wildner /* PCIe Topology Change List Event data PortStatus values */ 1328*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PS_DEV_ADDED (0x01) 1329*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PS_NOT_RESPONDING (0x02) 1330*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PS_PORT_CHANGED (0x03) 1331*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PS_NO_CHANGE (0x04) 1332*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PS_DELAY_NOT_RESPONDING (0x05) 1333*fd501800SSascha Wildner 1334*fd501800SSascha Wildner /* PCIe Topology Change List Event data defines for CurrentPortInfo and PreviousPortInfo */ 1335*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_LANE_MASK (0xF0) 1336*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_LANES_UNKNOWN (0x00) 1337*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_1_LANE (0x10) 1338*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_2_LANES (0x20) 1339*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_4_LANES (0x30) 1340*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_8_LANES (0x40) 1341*fd501800SSascha Wildner 1342*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_RATE_MASK (0x0F) 1343*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_RATE_UNKNOWN (0x00) 1344*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_RATE_DISABLED (0x01) 1345*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_RATE_2_5 (0x02) 1346*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_RATE_5_0 (0x03) 1347*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_RATE_8_0 (0x04) 1348*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_PI_RATE_16_0 (0x05) 1349*fd501800SSascha Wildner 1350*fd501800SSascha Wildner typedef struct _MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST 1351*fd501800SSascha Wildner { 1352*fd501800SSascha Wildner U16 EnclosureHandle; /* 0x00 */ 1353*fd501800SSascha Wildner U16 SwitchDevHandle; /* 0x02 */ 1354*fd501800SSascha Wildner U8 NumPorts; /* 0x04 */ 1355*fd501800SSascha Wildner U8 Reserved1; /* 0x05 */ 1356*fd501800SSascha Wildner U16 Reserved2; /* 0x06 */ 1357*fd501800SSascha Wildner U8 NumEntries; /* 0x08 */ 1358*fd501800SSascha Wildner U8 StartPortNum; /* 0x09 */ 1359*fd501800SSascha Wildner U8 SwitchStatus; /* 0x0A */ 1360*fd501800SSascha Wildner U8 PhysicalPort; /* 0x0B */ 1361*fd501800SSascha Wildner MPI26_EVENT_PCIE_TOPO_PORT_ENTRY PortEntry[MPI26_EVENT_PCIE_TOPO_PORT_COUNT]; /* 0x0C */ 1362*fd501800SSascha Wildner } MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST, 1363*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST, 1364*fd501800SSascha Wildner Mpi26EventDataPCIeTopologyChangeList_t, 1365*fd501800SSascha Wildner MPI2_POINTER pMpi26EventDataPCIeTopologyChangeList_t; 1366*fd501800SSascha Wildner 1367*fd501800SSascha Wildner /* PCIe Topology Change List Event data SwitchStatus values */ 1368*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_SS_NO_PCIE_SWITCH (0x00) 1369*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_SS_ADDED (0x01) 1370*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_SS_NOT_RESPONDING (0x02) 1371*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_SS_RESPONDING (0x03) 1372*fd501800SSascha Wildner #define MPI26_EVENT_PCIE_TOPO_SS_DELAY_NOT_RESPONDING (0x04) 1373*fd501800SSascha Wildner 1374*fd501800SSascha Wildner /* PCIe Link Counter Event data (MPI v2.6 and later) */ 1375*fd501800SSascha Wildner 1376*fd501800SSascha Wildner typedef struct _MPI26_EVENT_DATA_PCIE_LINK_COUNTER 1377*fd501800SSascha Wildner { 1378*fd501800SSascha Wildner U64 TimeStamp; /* 0x00 */ 1379*fd501800SSascha Wildner U32 Reserved1; /* 0x08 */ 1380*fd501800SSascha Wildner U8 LinkEventCode; /* 0x0C */ 1381*fd501800SSascha Wildner U8 LinkNum; /* 0x0D */ 1382*fd501800SSascha Wildner U16 Reserved2; /* 0x0E */ 1383*fd501800SSascha Wildner U32 LinkEventInfo; /* 0x10 */ 1384*fd501800SSascha Wildner U8 CounterType; /* 0x14 */ 1385*fd501800SSascha Wildner U8 ThresholdWindow; /* 0x15 */ 1386*fd501800SSascha Wildner U8 TimeUnits; /* 0x16 */ 1387*fd501800SSascha Wildner U8 Reserved3; /* 0x17 */ 1388*fd501800SSascha Wildner U32 EventThreshold; /* 0x18 */ 1389*fd501800SSascha Wildner U16 ThresholdFlags; /* 0x1C */ 1390*fd501800SSascha Wildner U16 Reserved4; /* 0x1E */ 1391*fd501800SSascha Wildner } MPI26_EVENT_DATA_PCIE_LINK_COUNTER, 1392*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_EVENT_DATA_PCIE_LINK_COUNTER, 1393*fd501800SSascha Wildner Mpi26EventDataPcieLinkCounter_t, MPI2_POINTER pMpi26EventDataPcieLinkCounter_t; 1394*fd501800SSascha Wildner 1395*fd501800SSascha Wildner 1396*fd501800SSascha Wildner /* use MPI26_PCIELINK3_EVTCODE_ values from mpi2_cnfg.h for the LinkEventCode field */ 1397*fd501800SSascha Wildner 1398*fd501800SSascha Wildner /* use MPI26_PCIELINK3_COUNTER_TYPE_ values from mpi2_cnfg.h for the CounterType field */ 1399*fd501800SSascha Wildner 1400*fd501800SSascha Wildner /* use MPI26_PCIELINK3_TIME_UNITS_ values from mpi2_cnfg.h for the TimeUnits field */ 1401*fd501800SSascha Wildner 1402*fd501800SSascha Wildner /* use MPI26_PCIELINK3_TFLAGS_ values from mpi2_cnfg.h for the ThresholdFlags field */ 1403*fd501800SSascha Wildner 1404*fd501800SSascha Wildner /**************************************************************************** 1405*fd501800SSascha Wildner * EventAck message 1406*fd501800SSascha Wildner ****************************************************************************/ 1407*fd501800SSascha Wildner 1408*fd501800SSascha Wildner /* EventAck Request message */ 1409*fd501800SSascha Wildner typedef struct _MPI2_EVENT_ACK_REQUEST 1410*fd501800SSascha Wildner { 1411*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 1412*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 1413*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1414*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 1415*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 1416*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1417*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1418*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1419*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 1420*fd501800SSascha Wildner U16 Event; /* 0x0C */ 1421*fd501800SSascha Wildner U16 Reserved5; /* 0x0E */ 1422*fd501800SSascha Wildner U32 EventContext; /* 0x10 */ 1423*fd501800SSascha Wildner } MPI2_EVENT_ACK_REQUEST, MPI2_POINTER PTR_MPI2_EVENT_ACK_REQUEST, 1424*fd501800SSascha Wildner Mpi2EventAckRequest_t, MPI2_POINTER pMpi2EventAckRequest_t; 1425*fd501800SSascha Wildner 1426*fd501800SSascha Wildner 1427*fd501800SSascha Wildner /* EventAck Reply message */ 1428*fd501800SSascha Wildner typedef struct _MPI2_EVENT_ACK_REPLY 1429*fd501800SSascha Wildner { 1430*fd501800SSascha Wildner U16 Reserved1; /* 0x00 */ 1431*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 1432*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1433*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 1434*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 1435*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1436*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1437*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1438*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 1439*fd501800SSascha Wildner U16 Reserved5; /* 0x0C */ 1440*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 1441*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 1442*fd501800SSascha Wildner } MPI2_EVENT_ACK_REPLY, MPI2_POINTER PTR_MPI2_EVENT_ACK_REPLY, 1443*fd501800SSascha Wildner Mpi2EventAckReply_t, MPI2_POINTER pMpi2EventAckReply_t; 1444*fd501800SSascha Wildner 1445*fd501800SSascha Wildner 1446*fd501800SSascha Wildner /**************************************************************************** 1447*fd501800SSascha Wildner * SendHostMessage message 1448*fd501800SSascha Wildner ****************************************************************************/ 1449*fd501800SSascha Wildner 1450*fd501800SSascha Wildner /* SendHostMessage Request message */ 1451*fd501800SSascha Wildner typedef struct _MPI2_SEND_HOST_MESSAGE_REQUEST 1452*fd501800SSascha Wildner { 1453*fd501800SSascha Wildner U16 HostDataLength; /* 0x00 */ 1454*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 1455*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1456*fd501800SSascha Wildner U16 Reserved1; /* 0x04 */ 1457*fd501800SSascha Wildner U8 Reserved2; /* 0x06 */ 1458*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1459*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1460*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1461*fd501800SSascha Wildner U16 Reserved3; /* 0x0A */ 1462*fd501800SSascha Wildner U8 Reserved4; /* 0x0C */ 1463*fd501800SSascha Wildner U8 DestVF_ID; /* 0x0D */ 1464*fd501800SSascha Wildner U16 Reserved5; /* 0x0E */ 1465*fd501800SSascha Wildner U32 Reserved6; /* 0x10 */ 1466*fd501800SSascha Wildner U32 Reserved7; /* 0x14 */ 1467*fd501800SSascha Wildner U32 Reserved8; /* 0x18 */ 1468*fd501800SSascha Wildner U32 Reserved9; /* 0x1C */ 1469*fd501800SSascha Wildner U32 Reserved10; /* 0x20 */ 1470*fd501800SSascha Wildner U32 HostData[1]; /* 0x24 */ 1471*fd501800SSascha Wildner } MPI2_SEND_HOST_MESSAGE_REQUEST, 1472*fd501800SSascha Wildner MPI2_POINTER PTR_MPI2_SEND_HOST_MESSAGE_REQUEST, 1473*fd501800SSascha Wildner Mpi2SendHostMessageRequest_t, MPI2_POINTER pMpi2SendHostMessageRequest_t; 1474*fd501800SSascha Wildner 1475*fd501800SSascha Wildner 1476*fd501800SSascha Wildner /* SendHostMessage Reply message */ 1477*fd501800SSascha Wildner typedef struct _MPI2_SEND_HOST_MESSAGE_REPLY 1478*fd501800SSascha Wildner { 1479*fd501800SSascha Wildner U16 HostDataLength; /* 0x00 */ 1480*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 1481*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1482*fd501800SSascha Wildner U16 Reserved1; /* 0x04 */ 1483*fd501800SSascha Wildner U8 Reserved2; /* 0x06 */ 1484*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1485*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1486*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1487*fd501800SSascha Wildner U16 Reserved3; /* 0x0A */ 1488*fd501800SSascha Wildner U16 Reserved4; /* 0x0C */ 1489*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 1490*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 1491*fd501800SSascha Wildner } MPI2_SEND_HOST_MESSAGE_REPLY, MPI2_POINTER PTR_MPI2_SEND_HOST_MESSAGE_REPLY, 1492*fd501800SSascha Wildner Mpi2SendHostMessageReply_t, MPI2_POINTER pMpi2SendHostMessageReply_t; 1493*fd501800SSascha Wildner 1494*fd501800SSascha Wildner 1495*fd501800SSascha Wildner /**************************************************************************** 1496*fd501800SSascha Wildner * FWDownload message 1497*fd501800SSascha Wildner ****************************************************************************/ 1498*fd501800SSascha Wildner 1499*fd501800SSascha Wildner /* MPI v2.0 FWDownload Request message */ 1500*fd501800SSascha Wildner typedef struct _MPI2_FW_DOWNLOAD_REQUEST 1501*fd501800SSascha Wildner { 1502*fd501800SSascha Wildner U8 ImageType; /* 0x00 */ 1503*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1504*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 1505*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1506*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 1507*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 1508*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1509*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1510*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1511*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 1512*fd501800SSascha Wildner U32 TotalImageSize; /* 0x0C */ 1513*fd501800SSascha Wildner U32 Reserved5; /* 0x10 */ 1514*fd501800SSascha Wildner MPI2_MPI_SGE_UNION SGL; /* 0x14 */ 1515*fd501800SSascha Wildner } MPI2_FW_DOWNLOAD_REQUEST, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_REQUEST, 1516*fd501800SSascha Wildner Mpi2FWDownloadRequest, MPI2_POINTER pMpi2FWDownloadRequest; 1517*fd501800SSascha Wildner 1518*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT (0x01) 1519*fd501800SSascha Wildner 1520*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_FW (0x01) 1521*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_BIOS (0x02) 1522*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_MANUFACTURING (0x06) 1523*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_1 (0x07) 1524*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_2 (0x08) 1525*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_MEGARAID (0x09) 1526*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_COMPLETE (0x0A) 1527*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 1528*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY (0x0C) /* MPI v2.5 and newer */ 1529*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP (0x0D) 1530*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_SBR (0x0E) 1531*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_SBR_BACKUP (0x0F) 1532*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_HIIM (0x10) 1533*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_HIIA (0x11) 1534*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_CTLR (0x12) 1535*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_IMR_FIRMWARE (0x13) 1536*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_MR_NVDATA (0x14) 1537*fd501800SSascha Wildner #define MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC (0xF0) 1538*fd501800SSascha Wildner 1539*fd501800SSascha Wildner /* MPI v2.0 FWDownload TransactionContext Element */ 1540*fd501800SSascha Wildner typedef struct _MPI2_FW_DOWNLOAD_TCSGE 1541*fd501800SSascha Wildner { 1542*fd501800SSascha Wildner U8 Reserved1; /* 0x00 */ 1543*fd501800SSascha Wildner U8 ContextSize; /* 0x01 */ 1544*fd501800SSascha Wildner U8 DetailsLength; /* 0x02 */ 1545*fd501800SSascha Wildner U8 Flags; /* 0x03 */ 1546*fd501800SSascha Wildner U32 Reserved2; /* 0x04 */ 1547*fd501800SSascha Wildner U32 ImageOffset; /* 0x08 */ 1548*fd501800SSascha Wildner U32 ImageSize; /* 0x0C */ 1549*fd501800SSascha Wildner } MPI2_FW_DOWNLOAD_TCSGE, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_TCSGE, 1550*fd501800SSascha Wildner Mpi2FWDownloadTCSGE_t, MPI2_POINTER pMpi2FWDownloadTCSGE_t; 1551*fd501800SSascha Wildner 1552*fd501800SSascha Wildner 1553*fd501800SSascha Wildner /* MPI v2.5 FWDownload Request message */ 1554*fd501800SSascha Wildner typedef struct _MPI25_FW_DOWNLOAD_REQUEST 1555*fd501800SSascha Wildner { 1556*fd501800SSascha Wildner U8 ImageType; /* 0x00 */ 1557*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1558*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 1559*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1560*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 1561*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 1562*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1563*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1564*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1565*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 1566*fd501800SSascha Wildner U32 TotalImageSize; /* 0x0C */ 1567*fd501800SSascha Wildner U32 Reserved5; /* 0x10 */ 1568*fd501800SSascha Wildner U32 Reserved6; /* 0x14 */ 1569*fd501800SSascha Wildner U32 ImageOffset; /* 0x18 */ 1570*fd501800SSascha Wildner U32 ImageSize; /* 0x1C */ 1571*fd501800SSascha Wildner MPI25_SGE_IO_UNION SGL; /* 0x20 */ 1572*fd501800SSascha Wildner } MPI25_FW_DOWNLOAD_REQUEST, MPI2_POINTER PTR_MPI25_FW_DOWNLOAD_REQUEST, 1573*fd501800SSascha Wildner Mpi25FWDownloadRequest, MPI2_POINTER pMpi25FWDownloadRequest; 1574*fd501800SSascha Wildner 1575*fd501800SSascha Wildner 1576*fd501800SSascha Wildner /* FWDownload Reply message */ 1577*fd501800SSascha Wildner typedef struct _MPI2_FW_DOWNLOAD_REPLY 1578*fd501800SSascha Wildner { 1579*fd501800SSascha Wildner U8 ImageType; /* 0x00 */ 1580*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1581*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 1582*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1583*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 1584*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 1585*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1586*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1587*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1588*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 1589*fd501800SSascha Wildner U16 Reserved5; /* 0x0C */ 1590*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 1591*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 1592*fd501800SSascha Wildner } MPI2_FW_DOWNLOAD_REPLY, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_REPLY, 1593*fd501800SSascha Wildner Mpi2FWDownloadReply_t, MPI2_POINTER pMpi2FWDownloadReply_t; 1594*fd501800SSascha Wildner 1595*fd501800SSascha Wildner 1596*fd501800SSascha Wildner /**************************************************************************** 1597*fd501800SSascha Wildner * FWUpload message 1598*fd501800SSascha Wildner ****************************************************************************/ 1599*fd501800SSascha Wildner 1600*fd501800SSascha Wildner /* MPI v2.0 FWUpload Request message */ 1601*fd501800SSascha Wildner typedef struct _MPI2_FW_UPLOAD_REQUEST 1602*fd501800SSascha Wildner { 1603*fd501800SSascha Wildner U8 ImageType; /* 0x00 */ 1604*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1605*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 1606*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1607*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 1608*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 1609*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1610*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1611*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1612*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 1613*fd501800SSascha Wildner U32 Reserved5; /* 0x0C */ 1614*fd501800SSascha Wildner U32 Reserved6; /* 0x10 */ 1615*fd501800SSascha Wildner MPI2_MPI_SGE_UNION SGL; /* 0x14 */ 1616*fd501800SSascha Wildner } MPI2_FW_UPLOAD_REQUEST, MPI2_POINTER PTR_MPI2_FW_UPLOAD_REQUEST, 1617*fd501800SSascha Wildner Mpi2FWUploadRequest_t, MPI2_POINTER pMpi2FWUploadRequest_t; 1618*fd501800SSascha Wildner 1619*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_FW_CURRENT (0x00) 1620*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_FW_FLASH (0x01) 1621*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_BIOS_FLASH (0x02) 1622*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_FW_BACKUP (0x05) 1623*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_MANUFACTURING (0x06) 1624*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_CONFIG_1 (0x07) 1625*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_CONFIG_2 (0x08) 1626*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_MEGARAID (0x09) 1627*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_COMPLETE (0x0A) 1628*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 1629*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_CBB_BACKUP (0x0D) 1630*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_SBR (0x0E) 1631*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_SBR_BACKUP (0x0F) 1632*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_HIIM (0x10) 1633*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_HIIA (0x11) 1634*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_CTLR (0x12) 1635*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_IMR_FIRMWARE (0x13) 1636*fd501800SSascha Wildner #define MPI2_FW_UPLOAD_ITYPE_MR_NVDATA (0x14) 1637*fd501800SSascha Wildner 1638*fd501800SSascha Wildner /* MPI v2.0 FWUpload TransactionContext Element */ 1639*fd501800SSascha Wildner typedef struct _MPI2_FW_UPLOAD_TCSGE 1640*fd501800SSascha Wildner { 1641*fd501800SSascha Wildner U8 Reserved1; /* 0x00 */ 1642*fd501800SSascha Wildner U8 ContextSize; /* 0x01 */ 1643*fd501800SSascha Wildner U8 DetailsLength; /* 0x02 */ 1644*fd501800SSascha Wildner U8 Flags; /* 0x03 */ 1645*fd501800SSascha Wildner U32 Reserved2; /* 0x04 */ 1646*fd501800SSascha Wildner U32 ImageOffset; /* 0x08 */ 1647*fd501800SSascha Wildner U32 ImageSize; /* 0x0C */ 1648*fd501800SSascha Wildner } MPI2_FW_UPLOAD_TCSGE, MPI2_POINTER PTR_MPI2_FW_UPLOAD_TCSGE, 1649*fd501800SSascha Wildner Mpi2FWUploadTCSGE_t, MPI2_POINTER pMpi2FWUploadTCSGE_t; 1650*fd501800SSascha Wildner 1651*fd501800SSascha Wildner 1652*fd501800SSascha Wildner /* MPI v2.5 FWUpload Request message */ 1653*fd501800SSascha Wildner typedef struct _MPI25_FW_UPLOAD_REQUEST 1654*fd501800SSascha Wildner { 1655*fd501800SSascha Wildner U8 ImageType; /* 0x00 */ 1656*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1657*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 1658*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1659*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 1660*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 1661*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1662*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1663*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1664*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 1665*fd501800SSascha Wildner U32 Reserved5; /* 0x0C */ 1666*fd501800SSascha Wildner U32 Reserved6; /* 0x10 */ 1667*fd501800SSascha Wildner U32 Reserved7; /* 0x14 */ 1668*fd501800SSascha Wildner U32 ImageOffset; /* 0x18 */ 1669*fd501800SSascha Wildner U32 ImageSize; /* 0x1C */ 1670*fd501800SSascha Wildner MPI25_SGE_IO_UNION SGL; /* 0x20 */ 1671*fd501800SSascha Wildner } MPI25_FW_UPLOAD_REQUEST, MPI2_POINTER PTR_MPI25_FW_UPLOAD_REQUEST, 1672*fd501800SSascha Wildner Mpi25FWUploadRequest_t, MPI2_POINTER pMpi25FWUploadRequest_t; 1673*fd501800SSascha Wildner 1674*fd501800SSascha Wildner 1675*fd501800SSascha Wildner /* FWUpload Reply message */ 1676*fd501800SSascha Wildner typedef struct _MPI2_FW_UPLOAD_REPLY 1677*fd501800SSascha Wildner { 1678*fd501800SSascha Wildner U8 ImageType; /* 0x00 */ 1679*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1680*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 1681*fd501800SSascha Wildner U8 Function; /* 0x03 */ 1682*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 1683*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 1684*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 1685*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 1686*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 1687*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 1688*fd501800SSascha Wildner U16 Reserved5; /* 0x0C */ 1689*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 1690*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 1691*fd501800SSascha Wildner U32 ActualImageSize; /* 0x14 */ 1692*fd501800SSascha Wildner } MPI2_FW_UPLOAD_REPLY, MPI2_POINTER PTR_MPI2_FW_UPLOAD_REPLY, 1693*fd501800SSascha Wildner Mpi2FWUploadReply_t, MPI2_POINTER pMPi2FWUploadReply_t; 1694*fd501800SSascha Wildner 1695*fd501800SSascha Wildner 1696*fd501800SSascha Wildner /* FW Image Header */ 1697*fd501800SSascha Wildner typedef struct _MPI2_FW_IMAGE_HEADER 1698*fd501800SSascha Wildner { 1699*fd501800SSascha Wildner U32 Signature; /* 0x00 */ 1700*fd501800SSascha Wildner U32 Signature0; /* 0x04 */ 1701*fd501800SSascha Wildner U32 Signature1; /* 0x08 */ 1702*fd501800SSascha Wildner U32 Signature2; /* 0x0C */ 1703*fd501800SSascha Wildner MPI2_VERSION_UNION MPIVersion; /* 0x10 */ 1704*fd501800SSascha Wildner MPI2_VERSION_UNION FWVersion; /* 0x14 */ 1705*fd501800SSascha Wildner MPI2_VERSION_UNION NVDATAVersion; /* 0x18 */ 1706*fd501800SSascha Wildner MPI2_VERSION_UNION PackageVersion; /* 0x1C */ 1707*fd501800SSascha Wildner U16 VendorID; /* 0x20 */ 1708*fd501800SSascha Wildner U16 ProductID; /* 0x22 */ 1709*fd501800SSascha Wildner U16 ProtocolFlags; /* 0x24 */ 1710*fd501800SSascha Wildner U16 Reserved26; /* 0x26 */ 1711*fd501800SSascha Wildner U32 IOCCapabilities; /* 0x28 */ 1712*fd501800SSascha Wildner U32 ImageSize; /* 0x2C */ 1713*fd501800SSascha Wildner U32 NextImageHeaderOffset; /* 0x30 */ 1714*fd501800SSascha Wildner U32 Checksum; /* 0x34 */ 1715*fd501800SSascha Wildner U32 Reserved38; /* 0x38 */ 1716*fd501800SSascha Wildner U32 Reserved3C; /* 0x3C */ 1717*fd501800SSascha Wildner U32 Reserved40; /* 0x40 */ 1718*fd501800SSascha Wildner U32 Reserved44; /* 0x44 */ 1719*fd501800SSascha Wildner U32 Reserved48; /* 0x48 */ 1720*fd501800SSascha Wildner U32 Reserved4C; /* 0x4C */ 1721*fd501800SSascha Wildner U32 Reserved50; /* 0x50 */ 1722*fd501800SSascha Wildner U32 Reserved54; /* 0x54 */ 1723*fd501800SSascha Wildner U32 Reserved58; /* 0x58 */ 1724*fd501800SSascha Wildner U32 Reserved5C; /* 0x5C */ 1725*fd501800SSascha Wildner U32 BootFlags; /* 0x60 */ /* reserved in MPI v2.5 and earlier */ 1726*fd501800SSascha Wildner U32 FirmwareVersionNameWhat; /* 0x64 */ 1727*fd501800SSascha Wildner U8 FirmwareVersionName[32]; /* 0x68 */ 1728*fd501800SSascha Wildner U32 VendorNameWhat; /* 0x88 */ 1729*fd501800SSascha Wildner U8 VendorName[32]; /* 0x8C */ 1730*fd501800SSascha Wildner U32 PackageNameWhat; /* 0x88 */ 1731*fd501800SSascha Wildner U8 PackageName[32]; /* 0x8C */ 1732*fd501800SSascha Wildner U32 ReservedD0; /* 0xD0 */ 1733*fd501800SSascha Wildner U32 ReservedD4; /* 0xD4 */ 1734*fd501800SSascha Wildner U32 ReservedD8; /* 0xD8 */ 1735*fd501800SSascha Wildner U32 ReservedDC; /* 0xDC */ 1736*fd501800SSascha Wildner U32 ReservedE0; /* 0xE0 */ 1737*fd501800SSascha Wildner U32 ReservedE4; /* 0xE4 */ 1738*fd501800SSascha Wildner U32 ReservedE8; /* 0xE8 */ 1739*fd501800SSascha Wildner U32 ReservedEC; /* 0xEC */ 1740*fd501800SSascha Wildner U32 ReservedF0; /* 0xF0 */ 1741*fd501800SSascha Wildner U32 ReservedF4; /* 0xF4 */ 1742*fd501800SSascha Wildner U32 ReservedF8; /* 0xF8 */ 1743*fd501800SSascha Wildner U32 ReservedFC; /* 0xFC */ 1744*fd501800SSascha Wildner } MPI2_FW_IMAGE_HEADER, MPI2_POINTER PTR_MPI2_FW_IMAGE_HEADER, 1745*fd501800SSascha Wildner Mpi2FWImageHeader_t, MPI2_POINTER pMpi2FWImageHeader_t; 1746*fd501800SSascha Wildner 1747*fd501800SSascha Wildner /* Signature field */ 1748*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE_OFFSET (0x00) 1749*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE_MASK (0xFF000000) 1750*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE (0xEA000000) 1751*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE (0xEB000000) 1752*fd501800SSascha Wildner 1753*fd501800SSascha Wildner /* Signature0 field */ 1754*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE0_OFFSET (0x04) 1755*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE0 (0x5AFAA55A) 1756*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE0_BASE (0x5AEAA500) /* Last byte is defined by architecture */ 1757*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE0_ARC_0 (0x5A) 1758*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE0_ARC_1 (0x00) 1759*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE0_ARC_2 (0x01) 1760*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE0_ARC_3 (0x02) 1761*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE0 (MPI26_FW_HEADER_SIGNATURE0_BASE+MPI26_FW_HEADER_SIGNATURE0_ARC_0) // legacy (0x5AEAA55A) 1762*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE0_3516 (MPI26_FW_HEADER_SIGNATURE0_BASE+MPI26_FW_HEADER_SIGNATURE0_ARC_1) 1763*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE0_4008 (MPI26_FW_HEADER_SIGNATURE0_BASE+MPI26_FW_HEADER_SIGNATURE0_ARC_3) 1764*fd501800SSascha Wildner 1765*fd501800SSascha Wildner /* Signature1 field */ 1766*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE1_OFFSET (0x08) 1767*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE1 (0xA55AFAA5) 1768*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE1 (0xA55AEAA5) 1769*fd501800SSascha Wildner 1770*fd501800SSascha Wildner /* Signature2 field */ 1771*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE2_OFFSET (0x0C) 1772*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIGNATURE2 (0x5AA55AFA) 1773*fd501800SSascha Wildner #define MPI26_FW_HEADER_SIGNATURE2 (0x5AA55AEA) 1774*fd501800SSascha Wildner 1775*fd501800SSascha Wildner 1776*fd501800SSascha Wildner /* defines for using the ProductID field */ 1777*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_TYPE_MASK (0xF000) 1778*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_TYPE_SAS (0x2000) 1779*fd501800SSascha Wildner 1780*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_PROD_MASK (0x0F00) 1781*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_PROD_A (0x0000) 1782*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI (0x0200) 1783*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_PROD_IR_SCSI (0x0700) 1784*fd501800SSascha Wildner 1785*fd501800SSascha Wildner 1786*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_FAMILY_MASK (0x00FF) 1787*fd501800SSascha Wildner /* SAS ProductID Family bits */ 1788*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_FAMILY_2108_SAS (0x0013) 1789*fd501800SSascha Wildner #define MPI2_FW_HEADER_PID_FAMILY_2208_SAS (0x0014) 1790*fd501800SSascha Wildner #define MPI25_FW_HEADER_PID_FAMILY_3108_SAS (0x0021) 1791*fd501800SSascha Wildner #define MPI26_FW_HEADER_PID_FAMILY_3324_SAS (0x0028) 1792*fd501800SSascha Wildner #define MPI26_FW_HEADER_PID_FAMILY_3516_SAS (0x0031) 1793*fd501800SSascha Wildner 1794*fd501800SSascha Wildner /* use MPI2_IOCFACTS_PROTOCOL_ defines for ProtocolFlags field */ 1795*fd501800SSascha Wildner 1796*fd501800SSascha Wildner /* use MPI2_IOCFACTS_CAPABILITY_ defines for IOCCapabilities field */ 1797*fd501800SSascha Wildner 1798*fd501800SSascha Wildner 1799*fd501800SSascha Wildner #define MPI2_FW_HEADER_IMAGESIZE_OFFSET (0x2C) 1800*fd501800SSascha Wildner #define MPI2_FW_HEADER_NEXTIMAGE_OFFSET (0x30) 1801*fd501800SSascha Wildner #define MPI26_FW_HEADER_BOOTFLAGS_OFFSET (0x60) 1802*fd501800SSascha Wildner #define MPI2_FW_HEADER_VERNMHWAT_OFFSET (0x64) 1803*fd501800SSascha Wildner 1804*fd501800SSascha Wildner #define MPI2_FW_HEADER_WHAT_SIGNATURE (0x29232840) 1805*fd501800SSascha Wildner 1806*fd501800SSascha Wildner #define MPI2_FW_HEADER_SIZE (0x100) 1807*fd501800SSascha Wildner 1808*fd501800SSascha Wildner 1809*fd501800SSascha Wildner /* Extended Image Header */ 1810*fd501800SSascha Wildner typedef struct _MPI2_EXT_IMAGE_HEADER 1811*fd501800SSascha Wildner 1812*fd501800SSascha Wildner { 1813*fd501800SSascha Wildner U8 ImageType; /* 0x00 */ 1814*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1815*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 1816*fd501800SSascha Wildner U32 Checksum; /* 0x04 */ 1817*fd501800SSascha Wildner U32 ImageSize; /* 0x08 */ 1818*fd501800SSascha Wildner U32 NextImageHeaderOffset; /* 0x0C */ 1819*fd501800SSascha Wildner U32 PackageVersion; /* 0x10 */ 1820*fd501800SSascha Wildner U32 Reserved3; /* 0x14 */ 1821*fd501800SSascha Wildner U32 Reserved4; /* 0x18 */ 1822*fd501800SSascha Wildner U32 Reserved5; /* 0x1C */ 1823*fd501800SSascha Wildner U8 IdentifyString[32]; /* 0x20 */ 1824*fd501800SSascha Wildner } MPI2_EXT_IMAGE_HEADER, MPI2_POINTER PTR_MPI2_EXT_IMAGE_HEADER, 1825*fd501800SSascha Wildner Mpi2ExtImageHeader_t, MPI2_POINTER pMpi2ExtImageHeader_t; 1826*fd501800SSascha Wildner 1827*fd501800SSascha Wildner /* useful offsets */ 1828*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_IMAGETYPE_OFFSET (0x00) 1829*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_IMAGESIZE_OFFSET (0x08) 1830*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_NEXTIMAGE_OFFSET (0x0C) 1831*fd501800SSascha Wildner 1832*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_HEADER_SIZE (0x40) 1833*fd501800SSascha Wildner 1834*fd501800SSascha Wildner /* defines for the ImageType field */ 1835*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_UNSPECIFIED (0x00) 1836*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_FW (0x01) 1837*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_NVDATA (0x03) 1838*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_BOOTLOADER (0x04) 1839*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_INITIALIZATION (0x05) 1840*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_FLASH_LAYOUT (0x06) 1841*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_SUPPORTED_DEVICES (0x07) 1842*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_MEGARAID (0x08) 1843*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_ENCRYPTED_HASH (0x09) /* MPI v2.5 and newer */ 1844*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC (0x80) 1845*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC (0xFF) 1846*fd501800SSascha Wildner 1847*fd501800SSascha Wildner #define MPI2_EXT_IMAGE_TYPE_MAX (MPI2_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC) /* deprecated */ 1848*fd501800SSascha Wildner 1849*fd501800SSascha Wildner 1850*fd501800SSascha Wildner 1851*fd501800SSascha Wildner /* FLASH Layout Extended Image Data */ 1852*fd501800SSascha Wildner 1853*fd501800SSascha Wildner /* 1854*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1855*fd501800SSascha Wildner * one and check RegionsPerLayout at runtime. 1856*fd501800SSascha Wildner */ 1857*fd501800SSascha Wildner #ifndef MPI2_FLASH_NUMBER_OF_REGIONS 1858*fd501800SSascha Wildner #define MPI2_FLASH_NUMBER_OF_REGIONS (1) 1859*fd501800SSascha Wildner #endif 1860*fd501800SSascha Wildner 1861*fd501800SSascha Wildner /* 1862*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1863*fd501800SSascha Wildner * one and check NumberOfLayouts at runtime. 1864*fd501800SSascha Wildner */ 1865*fd501800SSascha Wildner #ifndef MPI2_FLASH_NUMBER_OF_LAYOUTS 1866*fd501800SSascha Wildner #define MPI2_FLASH_NUMBER_OF_LAYOUTS (1) 1867*fd501800SSascha Wildner #endif 1868*fd501800SSascha Wildner 1869*fd501800SSascha Wildner typedef struct _MPI2_FLASH_REGION 1870*fd501800SSascha Wildner { 1871*fd501800SSascha Wildner U8 RegionType; /* 0x00 */ 1872*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1873*fd501800SSascha Wildner U16 Reserved2; /* 0x02 */ 1874*fd501800SSascha Wildner U32 RegionOffset; /* 0x04 */ 1875*fd501800SSascha Wildner U32 RegionSize; /* 0x08 */ 1876*fd501800SSascha Wildner U32 Reserved3; /* 0x0C */ 1877*fd501800SSascha Wildner } MPI2_FLASH_REGION, MPI2_POINTER PTR_MPI2_FLASH_REGION, 1878*fd501800SSascha Wildner Mpi2FlashRegion_t, MPI2_POINTER pMpi2FlashRegion_t; 1879*fd501800SSascha Wildner 1880*fd501800SSascha Wildner typedef struct _MPI2_FLASH_LAYOUT 1881*fd501800SSascha Wildner { 1882*fd501800SSascha Wildner U32 FlashSize; /* 0x00 */ 1883*fd501800SSascha Wildner U32 Reserved1; /* 0x04 */ 1884*fd501800SSascha Wildner U32 Reserved2; /* 0x08 */ 1885*fd501800SSascha Wildner U32 Reserved3; /* 0x0C */ 1886*fd501800SSascha Wildner MPI2_FLASH_REGION Region[MPI2_FLASH_NUMBER_OF_REGIONS];/* 0x10 */ 1887*fd501800SSascha Wildner } MPI2_FLASH_LAYOUT, MPI2_POINTER PTR_MPI2_FLASH_LAYOUT, 1888*fd501800SSascha Wildner Mpi2FlashLayout_t, MPI2_POINTER pMpi2FlashLayout_t; 1889*fd501800SSascha Wildner 1890*fd501800SSascha Wildner typedef struct _MPI2_FLASH_LAYOUT_DATA 1891*fd501800SSascha Wildner { 1892*fd501800SSascha Wildner U8 ImageRevision; /* 0x00 */ 1893*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1894*fd501800SSascha Wildner U8 SizeOfRegion; /* 0x02 */ 1895*fd501800SSascha Wildner U8 Reserved2; /* 0x03 */ 1896*fd501800SSascha Wildner U16 NumberOfLayouts; /* 0x04 */ 1897*fd501800SSascha Wildner U16 RegionsPerLayout; /* 0x06 */ 1898*fd501800SSascha Wildner U16 MinimumSectorAlignment; /* 0x08 */ 1899*fd501800SSascha Wildner U16 Reserved3; /* 0x0A */ 1900*fd501800SSascha Wildner U32 Reserved4; /* 0x0C */ 1901*fd501800SSascha Wildner MPI2_FLASH_LAYOUT Layout[MPI2_FLASH_NUMBER_OF_LAYOUTS];/* 0x10 */ 1902*fd501800SSascha Wildner } MPI2_FLASH_LAYOUT_DATA, MPI2_POINTER PTR_MPI2_FLASH_LAYOUT_DATA, 1903*fd501800SSascha Wildner Mpi2FlashLayoutData_t, MPI2_POINTER pMpi2FlashLayoutData_t; 1904*fd501800SSascha Wildner 1905*fd501800SSascha Wildner /* defines for the RegionType field */ 1906*fd501800SSascha Wildner #define MPI2_FLASH_REGION_UNUSED (0x00) 1907*fd501800SSascha Wildner #define MPI2_FLASH_REGION_FIRMWARE (0x01) 1908*fd501800SSascha Wildner #define MPI2_FLASH_REGION_BIOS (0x02) 1909*fd501800SSascha Wildner #define MPI2_FLASH_REGION_NVDATA (0x03) 1910*fd501800SSascha Wildner #define MPI2_FLASH_REGION_FIRMWARE_BACKUP (0x05) 1911*fd501800SSascha Wildner #define MPI2_FLASH_REGION_MFG_INFORMATION (0x06) 1912*fd501800SSascha Wildner #define MPI2_FLASH_REGION_CONFIG_1 (0x07) 1913*fd501800SSascha Wildner #define MPI2_FLASH_REGION_CONFIG_2 (0x08) 1914*fd501800SSascha Wildner #define MPI2_FLASH_REGION_MEGARAID (0x09) 1915*fd501800SSascha Wildner #define MPI2_FLASH_REGION_COMMON_BOOT_BLOCK (0x0A) 1916*fd501800SSascha Wildner #define MPI2_FLASH_REGION_INIT (MPI2_FLASH_REGION_COMMON_BOOT_BLOCK) /* older name */ 1917*fd501800SSascha Wildner #define MPI2_FLASH_REGION_CBB_BACKUP (0x0D) 1918*fd501800SSascha Wildner #define MPI2_FLASH_REGION_SBR (0x0E) 1919*fd501800SSascha Wildner #define MPI2_FLASH_REGION_SBR_BACKUP (0x0F) 1920*fd501800SSascha Wildner #define MPI2_FLASH_REGION_HIIM (0x10) 1921*fd501800SSascha Wildner #define MPI2_FLASH_REGION_HIIA (0x11) 1922*fd501800SSascha Wildner #define MPI2_FLASH_REGION_CTLR (0x12) 1923*fd501800SSascha Wildner #define MPI2_FLASH_REGION_IMR_FIRMWARE (0x13) 1924*fd501800SSascha Wildner #define MPI2_FLASH_REGION_MR_NVDATA (0x14) 1925*fd501800SSascha Wildner 1926*fd501800SSascha Wildner /* ImageRevision */ 1927*fd501800SSascha Wildner #define MPI2_FLASH_LAYOUT_IMAGE_REVISION (0x00) 1928*fd501800SSascha Wildner 1929*fd501800SSascha Wildner 1930*fd501800SSascha Wildner 1931*fd501800SSascha Wildner /* Supported Devices Extended Image Data */ 1932*fd501800SSascha Wildner 1933*fd501800SSascha Wildner /* 1934*fd501800SSascha Wildner * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1935*fd501800SSascha Wildner * one and check NumberOfDevices at runtime. 1936*fd501800SSascha Wildner */ 1937*fd501800SSascha Wildner #ifndef MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES 1938*fd501800SSascha Wildner #define MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES (1) 1939*fd501800SSascha Wildner #endif 1940*fd501800SSascha Wildner 1941*fd501800SSascha Wildner typedef struct _MPI2_SUPPORTED_DEVICE 1942*fd501800SSascha Wildner { 1943*fd501800SSascha Wildner U16 DeviceID; /* 0x00 */ 1944*fd501800SSascha Wildner U16 VendorID; /* 0x02 */ 1945*fd501800SSascha Wildner U16 DeviceIDMask; /* 0x04 */ 1946*fd501800SSascha Wildner U16 Reserved1; /* 0x06 */ 1947*fd501800SSascha Wildner U8 LowPCIRev; /* 0x08 */ 1948*fd501800SSascha Wildner U8 HighPCIRev; /* 0x09 */ 1949*fd501800SSascha Wildner U16 Reserved2; /* 0x0A */ 1950*fd501800SSascha Wildner U32 Reserved3; /* 0x0C */ 1951*fd501800SSascha Wildner } MPI2_SUPPORTED_DEVICE, MPI2_POINTER PTR_MPI2_SUPPORTED_DEVICE, 1952*fd501800SSascha Wildner Mpi2SupportedDevice_t, MPI2_POINTER pMpi2SupportedDevice_t; 1953*fd501800SSascha Wildner 1954*fd501800SSascha Wildner typedef struct _MPI2_SUPPORTED_DEVICES_DATA 1955*fd501800SSascha Wildner { 1956*fd501800SSascha Wildner U8 ImageRevision; /* 0x00 */ 1957*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 1958*fd501800SSascha Wildner U8 NumberOfDevices; /* 0x02 */ 1959*fd501800SSascha Wildner U8 Reserved2; /* 0x03 */ 1960*fd501800SSascha Wildner U32 Reserved3; /* 0x04 */ 1961*fd501800SSascha Wildner MPI2_SUPPORTED_DEVICE SupportedDevice[MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES]; /* 0x08 */ 1962*fd501800SSascha Wildner } MPI2_SUPPORTED_DEVICES_DATA, MPI2_POINTER PTR_MPI2_SUPPORTED_DEVICES_DATA, 1963*fd501800SSascha Wildner Mpi2SupportedDevicesData_t, MPI2_POINTER pMpi2SupportedDevicesData_t; 1964*fd501800SSascha Wildner 1965*fd501800SSascha Wildner /* ImageRevision */ 1966*fd501800SSascha Wildner #define MPI2_SUPPORTED_DEVICES_IMAGE_REVISION (0x00) 1967*fd501800SSascha Wildner 1968*fd501800SSascha Wildner 1969*fd501800SSascha Wildner /* Init Extended Image Data */ 1970*fd501800SSascha Wildner 1971*fd501800SSascha Wildner typedef struct _MPI2_INIT_IMAGE_FOOTER 1972*fd501800SSascha Wildner 1973*fd501800SSascha Wildner { 1974*fd501800SSascha Wildner U32 BootFlags; /* 0x00 */ 1975*fd501800SSascha Wildner U32 ImageSize; /* 0x04 */ 1976*fd501800SSascha Wildner U32 Signature0; /* 0x08 */ 1977*fd501800SSascha Wildner U32 Signature1; /* 0x0C */ 1978*fd501800SSascha Wildner U32 Signature2; /* 0x10 */ 1979*fd501800SSascha Wildner U32 ResetVector; /* 0x14 */ 1980*fd501800SSascha Wildner } MPI2_INIT_IMAGE_FOOTER, MPI2_POINTER PTR_MPI2_INIT_IMAGE_FOOTER, 1981*fd501800SSascha Wildner Mpi2InitImageFooter_t, MPI2_POINTER pMpi2InitImageFooter_t; 1982*fd501800SSascha Wildner 1983*fd501800SSascha Wildner /* defines for the BootFlags field */ 1984*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_BOOTFLAGS_OFFSET (0x00) 1985*fd501800SSascha Wildner 1986*fd501800SSascha Wildner /* defines for the ImageSize field */ 1987*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_IMAGESIZE_OFFSET (0x04) 1988*fd501800SSascha Wildner 1989*fd501800SSascha Wildner /* defines for the Signature0 field */ 1990*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE0_OFFSET (0x08) 1991*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE0 (0x5AA55AEA) 1992*fd501800SSascha Wildner 1993*fd501800SSascha Wildner /* defines for the Signature1 field */ 1994*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE1_OFFSET (0x0C) 1995*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE1 (0xA55AEAA5) 1996*fd501800SSascha Wildner 1997*fd501800SSascha Wildner /* defines for the Signature2 field */ 1998*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE2_OFFSET (0x10) 1999*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE2 (0x5AEAA55A) 2000*fd501800SSascha Wildner 2001*fd501800SSascha Wildner /* Signature fields as individual bytes */ 2002*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_0 (0xEA) 2003*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_1 (0x5A) 2004*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_2 (0xA5) 2005*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_3 (0x5A) 2006*fd501800SSascha Wildner 2007*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_4 (0xA5) 2008*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_5 (0xEA) 2009*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_6 (0x5A) 2010*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_7 (0xA5) 2011*fd501800SSascha Wildner 2012*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_8 (0x5A) 2013*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_9 (0xA5) 2014*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_A (0xEA) 2015*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_SIGNATURE_BYTE_B (0x5A) 2016*fd501800SSascha Wildner 2017*fd501800SSascha Wildner /* defines for the ResetVector field */ 2018*fd501800SSascha Wildner #define MPI2_INIT_IMAGE_RESETVECTOR_OFFSET (0x14) 2019*fd501800SSascha Wildner 2020*fd501800SSascha Wildner 2021*fd501800SSascha Wildner /* Encrypted Hash Extended Image Data */ 2022*fd501800SSascha Wildner 2023*fd501800SSascha Wildner typedef struct _MPI25_ENCRYPTED_HASH_ENTRY 2024*fd501800SSascha Wildner { 2025*fd501800SSascha Wildner U8 HashImageType; /* 0x00 */ 2026*fd501800SSascha Wildner U8 HashAlgorithm; /* 0x01 */ 2027*fd501800SSascha Wildner U8 EncryptionAlgorithm; /* 0x02 */ 2028*fd501800SSascha Wildner U8 Reserved1; /* 0x03 */ 2029*fd501800SSascha Wildner U32 Reserved2; /* 0x04 */ 2030*fd501800SSascha Wildner U32 EncryptedHash[1]; /* 0x08 */ /* variable length */ 2031*fd501800SSascha Wildner } MPI25_ENCRYPTED_HASH_ENTRY, MPI2_POINTER PTR_MPI25_ENCRYPTED_HASH_ENTRY, 2032*fd501800SSascha Wildner Mpi25EncryptedHashEntry_t, MPI2_POINTER pMpi25EncryptedHashEntry_t; 2033*fd501800SSascha Wildner 2034*fd501800SSascha Wildner /* values for HashImageType */ 2035*fd501800SSascha Wildner #define MPI25_HASH_IMAGE_TYPE_UNUSED (0x00) 2036*fd501800SSascha Wildner #define MPI25_HASH_IMAGE_TYPE_FIRMWARE (0x01) 2037*fd501800SSascha Wildner #define MPI25_HASH_IMAGE_TYPE_BIOS (0x02) 2038*fd501800SSascha Wildner 2039*fd501800SSascha Wildner /* values for HashAlgorithm */ 2040*fd501800SSascha Wildner #define MPI25_HASH_ALGORITHM_UNUSED (0x00) 2041*fd501800SSascha Wildner #define MPI25_HASH_ALGORITHM_SHA256 (0x01) 2042*fd501800SSascha Wildner 2043*fd501800SSascha Wildner /* values for EncryptionAlgorithm */ 2044*fd501800SSascha Wildner #define MPI25_ENCRYPTION_ALG_UNUSED (0x00) 2045*fd501800SSascha Wildner #define MPI25_ENCRYPTION_ALG_RSA256 (0x01) 2046*fd501800SSascha Wildner 2047*fd501800SSascha Wildner typedef struct _MPI25_ENCRYPTED_HASH_DATA 2048*fd501800SSascha Wildner { 2049*fd501800SSascha Wildner U8 ImageVersion; /* 0x00 */ 2050*fd501800SSascha Wildner U8 NumHash; /* 0x01 */ 2051*fd501800SSascha Wildner U16 Reserved1; /* 0x02 */ 2052*fd501800SSascha Wildner U32 Reserved2; /* 0x04 */ 2053*fd501800SSascha Wildner MPI25_ENCRYPTED_HASH_ENTRY EncryptedHashEntry[1]; /* 0x08 */ /* variable number of entries */ 2054*fd501800SSascha Wildner } MPI25_ENCRYPTED_HASH_DATA, MPI2_POINTER PTR_MPI25_ENCRYPTED_HASH_DATA, 2055*fd501800SSascha Wildner Mpi25EncryptedHashData_t, MPI2_POINTER pMpi25EncryptedHashData_t; 2056*fd501800SSascha Wildner 2057*fd501800SSascha Wildner /**************************************************************************** 2058*fd501800SSascha Wildner * PowerManagementControl message 2059*fd501800SSascha Wildner ****************************************************************************/ 2060*fd501800SSascha Wildner 2061*fd501800SSascha Wildner /* PowerManagementControl Request message */ 2062*fd501800SSascha Wildner typedef struct _MPI2_PWR_MGMT_CONTROL_REQUEST 2063*fd501800SSascha Wildner { 2064*fd501800SSascha Wildner U8 Feature; /* 0x00 */ 2065*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 2066*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 2067*fd501800SSascha Wildner U8 Function; /* 0x03 */ 2068*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 2069*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 2070*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 2071*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 2072*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 2073*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 2074*fd501800SSascha Wildner U8 Parameter1; /* 0x0C */ 2075*fd501800SSascha Wildner U8 Parameter2; /* 0x0D */ 2076*fd501800SSascha Wildner U8 Parameter3; /* 0x0E */ 2077*fd501800SSascha Wildner U8 Parameter4; /* 0x0F */ 2078*fd501800SSascha Wildner U32 Reserved5; /* 0x10 */ 2079*fd501800SSascha Wildner U32 Reserved6; /* 0x14 */ 2080*fd501800SSascha Wildner } MPI2_PWR_MGMT_CONTROL_REQUEST, MPI2_POINTER PTR_MPI2_PWR_MGMT_CONTROL_REQUEST, 2081*fd501800SSascha Wildner Mpi2PwrMgmtControlRequest_t, MPI2_POINTER pMpi2PwrMgmtControlRequest_t; 2082*fd501800SSascha Wildner 2083*fd501800SSascha Wildner /* defines for the Feature field */ 2084*fd501800SSascha Wildner #define MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND (0x01) 2085*fd501800SSascha Wildner #define MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION (0x02) 2086*fd501800SSascha Wildner #define MPI2_PM_CONTROL_FEATURE_PCIE_LINK (0x03) /* obsolete */ 2087*fd501800SSascha Wildner #define MPI2_PM_CONTROL_FEATURE_IOC_SPEED (0x04) 2088*fd501800SSascha Wildner #define MPI2_PM_CONTROL_FEATURE_GLOBAL_PWR_MGMT_MODE (0x05) /* reserved in MPI 2.0 */ 2089*fd501800SSascha Wildner #define MPI2_PM_CONTROL_FEATURE_MIN_PRODUCT_SPECIFIC (0x80) 2090*fd501800SSascha Wildner #define MPI2_PM_CONTROL_FEATURE_MAX_PRODUCT_SPECIFIC (0xFF) 2091*fd501800SSascha Wildner 2092*fd501800SSascha Wildner /* parameter usage for the MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND Feature */ 2093*fd501800SSascha Wildner /* Parameter1 contains a PHY number */ 2094*fd501800SSascha Wildner /* Parameter2 indicates power condition action using these defines */ 2095*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_PARTIAL (0x01) 2096*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_SLUMBER (0x02) 2097*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_EXIT_PWR_MGMT (0x03) 2098*fd501800SSascha Wildner /* Parameter3 and Parameter4 are reserved */ 2099*fd501800SSascha Wildner 2100*fd501800SSascha Wildner /* parameter usage for the MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION Feature */ 2101*fd501800SSascha Wildner /* Parameter1 contains SAS port width modulation group number */ 2102*fd501800SSascha Wildner /* Parameter2 indicates IOC action using these defines */ 2103*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_REQUEST_OWNERSHIP (0x01) 2104*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_CHANGE_MODULATION (0x02) 2105*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_RELINQUISH_OWNERSHIP (0x03) 2106*fd501800SSascha Wildner /* Parameter3 indicates desired modulation level using these defines */ 2107*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM3_25_PERCENT (0x00) 2108*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM3_50_PERCENT (0x01) 2109*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM3_75_PERCENT (0x02) 2110*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM3_100_PERCENT (0x03) 2111*fd501800SSascha Wildner /* Parameter4 is reserved */ 2112*fd501800SSascha Wildner 2113*fd501800SSascha Wildner /* this next set (_PCIE_LINK) is obsolete */ 2114*fd501800SSascha Wildner /* parameter usage for the MPI2_PM_CONTROL_FEATURE_PCIE_LINK Feature */ 2115*fd501800SSascha Wildner /* Parameter1 indicates desired PCIe link speed using these defines */ 2116*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_PCIE_2_5_GBPS (0x00) /* obsolete */ 2117*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_PCIE_5_0_GBPS (0x01) /* obsolete */ 2118*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_PCIE_8_0_GBPS (0x02) /* obsolete */ 2119*fd501800SSascha Wildner /* Parameter2 indicates desired PCIe link width using these defines */ 2120*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_WIDTH_X1 (0x01) /* obsolete */ 2121*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_WIDTH_X2 (0x02) /* obsolete */ 2122*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_WIDTH_X4 (0x04) /* obsolete */ 2123*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_WIDTH_X8 (0x08) /* obsolete */ 2124*fd501800SSascha Wildner /* Parameter3 and Parameter4 are reserved */ 2125*fd501800SSascha Wildner 2126*fd501800SSascha Wildner /* parameter usage for the MPI2_PM_CONTROL_FEATURE_IOC_SPEED Feature */ 2127*fd501800SSascha Wildner /* Parameter1 indicates desired IOC hardware clock speed using these defines */ 2128*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_FULL_IOC_SPEED (0x01) 2129*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_HALF_IOC_SPEED (0x02) 2130*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_QUARTER_IOC_SPEED (0x04) 2131*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_EIGHTH_IOC_SPEED (0x08) 2132*fd501800SSascha Wildner /* Parameter2, Parameter3, and Parameter4 are reserved */ 2133*fd501800SSascha Wildner 2134*fd501800SSascha Wildner /* parameter usage for the MPI2_PM_CONTROL_FEATURE_GLOBAL_PWR_MGMT_MODE Feature */ 2135*fd501800SSascha Wildner /* Parameter1 indicates host action regarding global power management mode */ 2136*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_TAKE_CONTROL (0x01) 2137*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_CHANGE_GLOBAL_MODE (0x02) 2138*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM1_RELEASE_CONTROL (0x03) 2139*fd501800SSascha Wildner /* Parameter2 indicates the requested global power management mode */ 2140*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_FULL_PWR_PERF (0x01) 2141*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_REDUCED_PWR_PERF (0x08) 2142*fd501800SSascha Wildner #define MPI2_PM_CONTROL_PARAM2_STANDBY (0x40) 2143*fd501800SSascha Wildner /* Parameter3 and Parameter4 are reserved */ 2144*fd501800SSascha Wildner 2145*fd501800SSascha Wildner 2146*fd501800SSascha Wildner /* PowerManagementControl Reply message */ 2147*fd501800SSascha Wildner typedef struct _MPI2_PWR_MGMT_CONTROL_REPLY 2148*fd501800SSascha Wildner { 2149*fd501800SSascha Wildner U8 Feature; /* 0x00 */ 2150*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 2151*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 2152*fd501800SSascha Wildner U8 Function; /* 0x03 */ 2153*fd501800SSascha Wildner U16 Reserved2; /* 0x04 */ 2154*fd501800SSascha Wildner U8 Reserved3; /* 0x06 */ 2155*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 2156*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 2157*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 2158*fd501800SSascha Wildner U16 Reserved4; /* 0x0A */ 2159*fd501800SSascha Wildner U16 Reserved5; /* 0x0C */ 2160*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 2161*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 2162*fd501800SSascha Wildner } MPI2_PWR_MGMT_CONTROL_REPLY, MPI2_POINTER PTR_MPI2_PWR_MGMT_CONTROL_REPLY, 2163*fd501800SSascha Wildner Mpi2PwrMgmtControlReply_t, MPI2_POINTER pMpi2PwrMgmtControlReply_t; 2164*fd501800SSascha Wildner 2165*fd501800SSascha Wildner 2166*fd501800SSascha Wildner /**************************************************************************** 2167*fd501800SSascha Wildner * IO Unit Control messages (MPI v2.6 and later only.) 2168*fd501800SSascha Wildner ****************************************************************************/ 2169*fd501800SSascha Wildner 2170*fd501800SSascha Wildner /* IO Unit Control Request Message */ 2171*fd501800SSascha Wildner typedef struct _MPI26_IOUNIT_CONTROL_REQUEST 2172*fd501800SSascha Wildner { 2173*fd501800SSascha Wildner U8 Operation; /* 0x00 */ 2174*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 2175*fd501800SSascha Wildner U8 ChainOffset; /* 0x02 */ 2176*fd501800SSascha Wildner U8 Function; /* 0x03 */ 2177*fd501800SSascha Wildner U16 DevHandle; /* 0x04 */ 2178*fd501800SSascha Wildner U8 IOCParameter; /* 0x06 */ 2179*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 2180*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 2181*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 2182*fd501800SSascha Wildner U16 Reserved3; /* 0x0A */ 2183*fd501800SSascha Wildner U16 Reserved4; /* 0x0C */ 2184*fd501800SSascha Wildner U8 PhyNum; /* 0x0E */ 2185*fd501800SSascha Wildner U8 PrimFlags; /* 0x0F */ 2186*fd501800SSascha Wildner U32 Primitive; /* 0x10 */ 2187*fd501800SSascha Wildner U8 LookupMethod; /* 0x14 */ 2188*fd501800SSascha Wildner U8 Reserved5; /* 0x15 */ 2189*fd501800SSascha Wildner U16 SlotNumber; /* 0x16 */ 2190*fd501800SSascha Wildner U64 LookupAddress; /* 0x18 */ 2191*fd501800SSascha Wildner U32 IOCParameterValue; /* 0x20 */ 2192*fd501800SSascha Wildner U32 Reserved7; /* 0x24 */ 2193*fd501800SSascha Wildner U32 Reserved8; /* 0x28 */ 2194*fd501800SSascha Wildner } MPI26_IOUNIT_CONTROL_REQUEST, 2195*fd501800SSascha Wildner MPI2_POINTER PTR_MPI26_IOUNIT_CONTROL_REQUEST, 2196*fd501800SSascha Wildner Mpi26IoUnitControlRequest_t, MPI2_POINTER pMpi26IoUnitControlRequest_t; 2197*fd501800SSascha Wildner 2198*fd501800SSascha Wildner /* values for the Operation field */ 2199*fd501800SSascha Wildner #define MPI26_CTRL_OP_CLEAR_ALL_PERSISTENT (0x02) 2200*fd501800SSascha Wildner #define MPI26_CTRL_OP_SAS_PHY_LINK_RESET (0x06) 2201*fd501800SSascha Wildner #define MPI26_CTRL_OP_SAS_PHY_HARD_RESET (0x07) 2202*fd501800SSascha Wildner #define MPI26_CTRL_OP_PHY_CLEAR_ERROR_LOG (0x08) 2203*fd501800SSascha Wildner #define MPI26_CTRL_OP_LINK_CLEAR_ERROR_LOG (0x09) 2204*fd501800SSascha Wildner #define MPI26_CTRL_OP_SAS_SEND_PRIMITIVE (0x0A) 2205*fd501800SSascha Wildner #define MPI26_CTRL_OP_FORCE_FULL_DISCOVERY (0x0B) 2206*fd501800SSascha Wildner #define MPI26_CTRL_OP_REMOVE_DEVICE (0x0D) 2207*fd501800SSascha Wildner #define MPI26_CTRL_OP_LOOKUP_MAPPING (0x0E) 2208*fd501800SSascha Wildner #define MPI26_CTRL_OP_SET_IOC_PARAMETER (0x0F) 2209*fd501800SSascha Wildner #define MPI26_CTRL_OP_ENABLE_FP_DEVICE (0x10) 2210*fd501800SSascha Wildner #define MPI26_CTRL_OP_DISABLE_FP_DEVICE (0x11) 2211*fd501800SSascha Wildner #define MPI26_CTRL_OP_ENABLE_FP_ALL (0x12) 2212*fd501800SSascha Wildner #define MPI26_CTRL_OP_DISABLE_FP_ALL (0x13) 2213*fd501800SSascha Wildner #define MPI26_CTRL_OP_DEV_ENABLE_NCQ (0x14) 2214*fd501800SSascha Wildner #define MPI26_CTRL_OP_DEV_DISABLE_NCQ (0x15) 2215*fd501800SSascha Wildner #define MPI26_CTRL_OP_SHUTDOWN (0x16) 2216*fd501800SSascha Wildner #define MPI26_CTRL_OP_DEV_ENABLE_PERSIST_CONNECTION (0x17) 2217*fd501800SSascha Wildner #define MPI26_CTRL_OP_DEV_DISABLE_PERSIST_CONNECTION (0x18) 2218*fd501800SSascha Wildner #define MPI26_CTRL_OP_DEV_CLOSE_PERSIST_CONNECTION (0x19) 2219*fd501800SSascha Wildner #define MPI26_CTRL_OP_ENABLE_NVME_SGL_FORMAT (0x1A) 2220*fd501800SSascha Wildner #define MPI26_CTRL_OP_DISABLE_NVME_SGL_FORMAT (0x1B) 2221*fd501800SSascha Wildner #define MPI26_CTRL_OP_PRODUCT_SPECIFIC_MIN (0x80) 2222*fd501800SSascha Wildner 2223*fd501800SSascha Wildner /* values for the PrimFlags field */ 2224*fd501800SSascha Wildner #define MPI26_CTRL_PRIMFLAGS_SINGLE (0x08) 2225*fd501800SSascha Wildner #define MPI26_CTRL_PRIMFLAGS_TRIPLE (0x02) 2226*fd501800SSascha Wildner #define MPI26_CTRL_PRIMFLAGS_REDUNDANT (0x01) 2227*fd501800SSascha Wildner 2228*fd501800SSascha Wildner /* values for the LookupMethod field */ 2229*fd501800SSascha Wildner #define MPI26_CTRL_LOOKUP_METHOD_WWID_ADDRESS (0x01) 2230*fd501800SSascha Wildner #define MPI26_CTRL_LOOKUP_METHOD_ENCLOSURE_SLOT (0x02) 2231*fd501800SSascha Wildner #define MPI26_CTRL_LOOKUP_METHOD_SAS_DEVICE_NAME (0x03) 2232*fd501800SSascha Wildner 2233*fd501800SSascha Wildner 2234*fd501800SSascha Wildner /* IO Unit Control Reply Message */ 2235*fd501800SSascha Wildner typedef struct _MPI26_IOUNIT_CONTROL_REPLY 2236*fd501800SSascha Wildner { 2237*fd501800SSascha Wildner U8 Operation; /* 0x00 */ 2238*fd501800SSascha Wildner U8 Reserved1; /* 0x01 */ 2239*fd501800SSascha Wildner U8 MsgLength; /* 0x02 */ 2240*fd501800SSascha Wildner U8 Function; /* 0x03 */ 2241*fd501800SSascha Wildner U16 DevHandle; /* 0x04 */ 2242*fd501800SSascha Wildner U8 IOCParameter; /* 0x06 */ 2243*fd501800SSascha Wildner U8 MsgFlags; /* 0x07 */ 2244*fd501800SSascha Wildner U8 VP_ID; /* 0x08 */ 2245*fd501800SSascha Wildner U8 VF_ID; /* 0x09 */ 2246*fd501800SSascha Wildner U16 Reserved3; /* 0x0A */ 2247*fd501800SSascha Wildner U16 Reserved4; /* 0x0C */ 2248*fd501800SSascha Wildner U16 IOCStatus; /* 0x0E */ 2249*fd501800SSascha Wildner U32 IOCLogInfo; /* 0x10 */ 2250*fd501800SSascha Wildner } MPI26_IOUNIT_CONTROL_REPLY, MPI2_POINTER PTR_MPI26_IOUNIT_CONTROL_REPLY, 2251*fd501800SSascha Wildner Mpi26IoUnitControlReply_t, MPI2_POINTER pMpi26IoUnitControlReply_t; 2252*fd501800SSascha Wildner 2253*fd501800SSascha Wildner 2254*fd501800SSascha Wildner #endif 2255*fd501800SSascha Wildner 2256