1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright 2000-2020 Broadcom Inc. All rights reserved. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Name: mpi2_ioc.h 7*4882a593Smuzhiyun * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages 8*4882a593Smuzhiyun * Creation Date: October 11, 2006 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * mpi2_ioc.h Version: 02.00.37 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 13*4882a593Smuzhiyun * prefix are for use only on MPI v2.5 products, and must not be used 14*4882a593Smuzhiyun * with MPI v2.0 products. Unless otherwise noted, names beginning with 15*4882a593Smuzhiyun * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. 16*4882a593Smuzhiyun * 17*4882a593Smuzhiyun * Version History 18*4882a593Smuzhiyun * --------------- 19*4882a593Smuzhiyun * 20*4882a593Smuzhiyun * Date Version Description 21*4882a593Smuzhiyun * -------- -------- ------------------------------------------------------ 22*4882a593Smuzhiyun * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 23*4882a593Smuzhiyun * 06-04-07 02.00.01 In IOCFacts Reply structure, renamed MaxDevices to 24*4882a593Smuzhiyun * MaxTargets. 25*4882a593Smuzhiyun * Added TotalImageSize field to FWDownload Request. 26*4882a593Smuzhiyun * Added reserved words to FWUpload Request. 27*4882a593Smuzhiyun * 06-26-07 02.00.02 Added IR Configuration Change List Event. 28*4882a593Smuzhiyun * 08-31-07 02.00.03 Removed SystemReplyQueueDepth field from the IOCInit 29*4882a593Smuzhiyun * request and replaced it with 30*4882a593Smuzhiyun * ReplyDescriptorPostQueueDepth and ReplyFreeQueueDepth. 31*4882a593Smuzhiyun * Replaced the MinReplyQueueDepth field of the IOCFacts 32*4882a593Smuzhiyun * reply with MaxReplyDescriptorPostQueueDepth. 33*4882a593Smuzhiyun * Added MPI2_RDPQ_DEPTH_MIN define to specify the minimum 34*4882a593Smuzhiyun * depth for the Reply Descriptor Post Queue. 35*4882a593Smuzhiyun * Added SASAddress field to Initiator Device Table 36*4882a593Smuzhiyun * Overflow Event data. 37*4882a593Smuzhiyun * 10-31-07 02.00.04 Added ReasonCode MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING 38*4882a593Smuzhiyun * for SAS Initiator Device Status Change Event data. 39*4882a593Smuzhiyun * Modified Reason Code defines for SAS Topology Change 40*4882a593Smuzhiyun * List Event data, including adding a bit for PHY Vacant 41*4882a593Smuzhiyun * status, and adding a mask for the Reason Code. 42*4882a593Smuzhiyun * Added define for 43*4882a593Smuzhiyun * MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING. 44*4882a593Smuzhiyun * Added define for MPI2_EXT_IMAGE_TYPE_MEGARAID. 45*4882a593Smuzhiyun * 12-18-07 02.00.05 Added Boot Status defines for the IOCExceptions field of 46*4882a593Smuzhiyun * the IOCFacts Reply. 47*4882a593Smuzhiyun * Removed MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define. 48*4882a593Smuzhiyun * Moved MPI2_VERSION_UNION to mpi2.h. 49*4882a593Smuzhiyun * Changed MPI2_EVENT_NOTIFICATION_REQUEST to use masks 50*4882a593Smuzhiyun * instead of enables, and added SASBroadcastPrimitiveMasks 51*4882a593Smuzhiyun * field. 52*4882a593Smuzhiyun * Added Log Entry Added Event and related structure. 53*4882a593Smuzhiyun * 02-29-08 02.00.06 Added define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID. 54*4882a593Smuzhiyun * Removed define MPI2_IOCFACTS_PROTOCOL_SMP_TARGET. 55*4882a593Smuzhiyun * Added MaxVolumes and MaxPersistentEntries fields to 56*4882a593Smuzhiyun * IOCFacts reply. 57*4882a593Smuzhiyun * Added ProtocalFlags and IOCCapabilities fields to 58*4882a593Smuzhiyun * MPI2_FW_IMAGE_HEADER. 59*4882a593Smuzhiyun * Removed MPI2_PORTENABLE_FLAGS_ENABLE_SINGLE_PORT. 60*4882a593Smuzhiyun * 03-03-08 02.00.07 Fixed MPI2_FW_IMAGE_HEADER by changing Reserved26 to 61*4882a593Smuzhiyun * a U16 (from a U32). 62*4882a593Smuzhiyun * Removed extra 's' from EventMasks name. 63*4882a593Smuzhiyun * 06-27-08 02.00.08 Fixed an offset in a comment. 64*4882a593Smuzhiyun * 10-02-08 02.00.09 Removed SystemReplyFrameSize from MPI2_IOC_INIT_REQUEST. 65*4882a593Smuzhiyun * Removed CurReplyFrameSize from MPI2_IOC_FACTS_REPLY and 66*4882a593Smuzhiyun * renamed MinReplyFrameSize to ReplyFrameSize. 67*4882a593Smuzhiyun * Added MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX. 68*4882a593Smuzhiyun * Added two new RAIDOperation values for Integrated RAID 69*4882a593Smuzhiyun * Operations Status Event data. 70*4882a593Smuzhiyun * Added four new IR Configuration Change List Event data 71*4882a593Smuzhiyun * ReasonCode values. 72*4882a593Smuzhiyun * Added two new ReasonCode defines for SAS Device Status 73*4882a593Smuzhiyun * Change Event data. 74*4882a593Smuzhiyun * Added three new DiscoveryStatus bits for the SAS 75*4882a593Smuzhiyun * Discovery event data. 76*4882a593Smuzhiyun * Added Multiplexing Status Change bit to the PhyStatus 77*4882a593Smuzhiyun * field of the SAS Topology Change List event data. 78*4882a593Smuzhiyun * Removed define for MPI2_INIT_IMAGE_BOOTFLAGS_XMEMCOPY. 79*4882a593Smuzhiyun * BootFlags are now product-specific. 80*4882a593Smuzhiyun * Added defines for the indivdual signature bytes 81*4882a593Smuzhiyun * for MPI2_INIT_IMAGE_FOOTER. 82*4882a593Smuzhiyun * 01-19-09 02.00.10 Added MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY define. 83*4882a593Smuzhiyun * Added MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR 84*4882a593Smuzhiyun * define. 85*4882a593Smuzhiyun * Added MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE 86*4882a593Smuzhiyun * define. 87*4882a593Smuzhiyun * Removed MPI2_EVENT_SAS_DISC_DS_SATA_INIT_FAILURE define. 88*4882a593Smuzhiyun * 05-06-09 02.00.11 Added MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR define. 89*4882a593Smuzhiyun * Added MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX define. 90*4882a593Smuzhiyun * Added two new reason codes for SAS Device Status Change 91*4882a593Smuzhiyun * Event. 92*4882a593Smuzhiyun * Added new event: SAS PHY Counter. 93*4882a593Smuzhiyun * 07-30-09 02.00.12 Added GPIO Interrupt event define and structure. 94*4882a593Smuzhiyun * Added MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define. 95*4882a593Smuzhiyun * Added new product id family for 2208. 96*4882a593Smuzhiyun * 10-28-09 02.00.13 Added HostMSIxVectors field to MPI2_IOC_INIT_REQUEST. 97*4882a593Smuzhiyun * Added MaxMSIxVectors field to MPI2_IOC_FACTS_REPLY. 98*4882a593Smuzhiyun * Added MinDevHandle field to MPI2_IOC_FACTS_REPLY. 99*4882a593Smuzhiyun * Added MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY. 100*4882a593Smuzhiyun * Added MPI2_EVENT_HOST_BASED_DISCOVERY_PHY define. 101*4882a593Smuzhiyun * Added MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER define. 102*4882a593Smuzhiyun * Added Host Based Discovery Phy Event data. 103*4882a593Smuzhiyun * Added defines for ProductID Product field 104*4882a593Smuzhiyun * (MPI2_FW_HEADER_PID_). 105*4882a593Smuzhiyun * Modified values for SAS ProductID Family 106*4882a593Smuzhiyun * (MPI2_FW_HEADER_PID_FAMILY_). 107*4882a593Smuzhiyun * 02-10-10 02.00.14 Added SAS Quiesce Event structure and defines. 108*4882a593Smuzhiyun * Added PowerManagementControl Request structures and 109*4882a593Smuzhiyun * defines. 110*4882a593Smuzhiyun * 05-12-10 02.00.15 Marked Task Set Full Event as obsolete. 111*4882a593Smuzhiyun * Added MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY define. 112*4882a593Smuzhiyun * 11-10-10 02.00.16 Added MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC. 113*4882a593Smuzhiyun * 02-23-11 02.00.17 Added SAS NOTIFY Primitive event, and added 114*4882a593Smuzhiyun * SASNotifyPrimitiveMasks field to 115*4882a593Smuzhiyun * MPI2_EVENT_NOTIFICATION_REQUEST. 116*4882a593Smuzhiyun * Added Temperature Threshold Event. 117*4882a593Smuzhiyun * Added Host Message Event. 118*4882a593Smuzhiyun * Added Send Host Message request and reply. 119*4882a593Smuzhiyun * 05-25-11 02.00.18 For Extended Image Header, added 120*4882a593Smuzhiyun * MPI2_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC and 121*4882a593Smuzhiyun * MPI2_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC defines. 122*4882a593Smuzhiyun * Deprecated MPI2_EXT_IMAGE_TYPE_MAX define. 123*4882a593Smuzhiyun * 08-24-11 02.00.19 Added PhysicalPort field to 124*4882a593Smuzhiyun * MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE structure. 125*4882a593Smuzhiyun * Marked MPI2_PM_CONTROL_FEATURE_PCIE_LINK as obsolete. 126*4882a593Smuzhiyun * 11-18-11 02.00.20 Incorporating additions for MPI v2.5. 127*4882a593Smuzhiyun * 03-29-12 02.00.21 Added a product specific range to event values. 128*4882a593Smuzhiyun * 07-26-12 02.00.22 Added MPI2_IOCFACTS_EXCEPT_PARTIAL_MEMORY_FAILURE. 129*4882a593Smuzhiyun * Added ElapsedSeconds field to 130*4882a593Smuzhiyun * MPI2_EVENT_DATA_IR_OPERATION_STATUS. 131*4882a593Smuzhiyun * 08-19-13 02.00.23 For IOCInit, added MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE 132*4882a593Smuzhiyun * and MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY. 133*4882a593Smuzhiyun * Added MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE. 134*4882a593Smuzhiyun * Added MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY. 135*4882a593Smuzhiyun * Added Encrypted Hash Extended Image. 136*4882a593Smuzhiyun * 12-05-13 02.00.24 Added MPI25_HASH_IMAGE_TYPE_BIOS. 137*4882a593Smuzhiyun * 11-18-14 02.00.25 Updated copyright information. 138*4882a593Smuzhiyun * 03-16-15 02.00.26 Updated for MPI v2.6. 139*4882a593Smuzhiyun * Added MPI2_EVENT_ACTIVE_CABLE_EXCEPTION and 140*4882a593Smuzhiyun * MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT. 141*4882a593Smuzhiyun * Added MPI26_FW_HEADER_PID_FAMILY_3324_SAS and 142*4882a593Smuzhiyun * MPI26_FW_HEADER_PID_FAMILY_3516_SAS. 143*4882a593Smuzhiyun * Added MPI26_CTRL_OP_SHUTDOWN. 144*4882a593Smuzhiyun * 08-25-15 02.00.27 Added IC ARCH Class based signature defines. 145*4882a593Smuzhiyun * Added MPI26_EVENT_PCIE_ENUM_ES_RESOURCES_EXHAUSTED event. 146*4882a593Smuzhiyun * Added ConigurationFlags field to IOCInit message to 147*4882a593Smuzhiyun * support NVMe SGL format control. 148*4882a593Smuzhiyun * Added PCIe SRIOV support. 149*4882a593Smuzhiyun * 02-17-16 02.00.28 Added SAS 4 22.5 gbs speed support. 150*4882a593Smuzhiyun * Added PCIe 4 16.0 GT/sec speec support. 151*4882a593Smuzhiyun * Removed AHCI support. 152*4882a593Smuzhiyun * Removed SOP support. 153*4882a593Smuzhiyun * 07-01-16 02.00.29 Added Archclass for 4008 product. 154*4882a593Smuzhiyun * Added IOCException MPI2_IOCFACTS_EXCEPT_PCIE_DISABLED 155*4882a593Smuzhiyun * 08-23-16 02.00.30 Added new defines for the ImageType field of FWDownload 156*4882a593Smuzhiyun * Request Message. 157*4882a593Smuzhiyun * Added new defines for the ImageType field of FWUpload 158*4882a593Smuzhiyun * Request Message. 159*4882a593Smuzhiyun * Added new values for the RegionType field in the Layout 160*4882a593Smuzhiyun * Data sections of the FLASH Layout Extended Image Data. 161*4882a593Smuzhiyun * Added new defines for the ReasonCode field of 162*4882a593Smuzhiyun * Active Cable Exception Event. 163*4882a593Smuzhiyun * Added MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE and 164*4882a593Smuzhiyun * MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE. 165*4882a593Smuzhiyun * 11-23-16 02.00.31 Added MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR and 166*4882a593Smuzhiyun * MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR. 167*4882a593Smuzhiyun * 02-02-17 02.00.32 Added MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP. 168*4882a593Smuzhiyun * Added MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT and related 169*4882a593Smuzhiyun * defines for the ReasonCode field. 170*4882a593Smuzhiyun * 06-13-17 02.00.33 Added MPI2_FW_DOWNLOAD_ITYPE_CPLD. 171*4882a593Smuzhiyun * 09-29-17 02.00.34 Added MPI26_EVENT_PCIDEV_STAT_RC_PCIE_HOT_RESET_FAILED 172*4882a593Smuzhiyun * to the ReasonCode field in PCIe Device Status Change 173*4882a593Smuzhiyun * Event Data. 174*4882a593Smuzhiyun * 07-22-18 02.00.35 Added FW_DOWNLOAD_ITYPE_CPLD and _PSOC. 175*4882a593Smuzhiyun * Moved FW image definitions ionto new mpi2_image,h 176*4882a593Smuzhiyun * 08-14-18 02.00.36 Fixed definition of MPI2_FW_DOWNLOAD_ITYPE_PSOC (0x16) 177*4882a593Smuzhiyun * 09-07-18 02.00.37 Added MPI26_EVENT_PCIE_TOPO_PI_16_LANES 178*4882a593Smuzhiyun * 10-02-19 02.00.38 Added MPI26_IOCINIT_CFGFLAGS_COREDUMP_ENABLE 179*4882a593Smuzhiyun * Added MPI26_IOCFACTS_CAPABILITY_COREDUMP_ENABLED 180*4882a593Smuzhiyun * Added MPI2_FW_DOWNLOAD_ITYPE_COREDUMP 181*4882a593Smuzhiyun * Added MPI2_FW_UPLOAD_ITYPE_COREDUMP 182*4882a593Smuzhiyun * -------------------------------------------------------------------------- 183*4882a593Smuzhiyun */ 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun #ifndef MPI2_IOC_H 186*4882a593Smuzhiyun #define MPI2_IOC_H 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun /***************************************************************************** 189*4882a593Smuzhiyun * 190*4882a593Smuzhiyun * IOC Messages 191*4882a593Smuzhiyun * 192*4882a593Smuzhiyun *****************************************************************************/ 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun /**************************************************************************** 195*4882a593Smuzhiyun * IOCInit message 196*4882a593Smuzhiyun ****************************************************************************/ 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun /*IOCInit Request message */ 199*4882a593Smuzhiyun typedef struct _MPI2_IOC_INIT_REQUEST { 200*4882a593Smuzhiyun U8 WhoInit; /*0x00 */ 201*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 202*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 203*4882a593Smuzhiyun U8 Function; /*0x03 */ 204*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 205*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 206*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 207*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 208*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 209*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 210*4882a593Smuzhiyun U16 MsgVersion; /*0x0C */ 211*4882a593Smuzhiyun U16 HeaderVersion; /*0x0E */ 212*4882a593Smuzhiyun U32 Reserved5; /*0x10 */ 213*4882a593Smuzhiyun U16 ConfigurationFlags; /* 0x14 */ 214*4882a593Smuzhiyun U8 HostPageSize; /*0x16 */ 215*4882a593Smuzhiyun U8 HostMSIxVectors; /*0x17 */ 216*4882a593Smuzhiyun U16 Reserved8; /*0x18 */ 217*4882a593Smuzhiyun U16 SystemRequestFrameSize; /*0x1A */ 218*4882a593Smuzhiyun U16 ReplyDescriptorPostQueueDepth; /*0x1C */ 219*4882a593Smuzhiyun U16 ReplyFreeQueueDepth; /*0x1E */ 220*4882a593Smuzhiyun U32 SenseBufferAddressHigh; /*0x20 */ 221*4882a593Smuzhiyun U32 SystemReplyAddressHigh; /*0x24 */ 222*4882a593Smuzhiyun U64 SystemRequestFrameBaseAddress; /*0x28 */ 223*4882a593Smuzhiyun U64 ReplyDescriptorPostQueueAddress; /*0x30 */ 224*4882a593Smuzhiyun U64 ReplyFreeQueueAddress; /*0x38 */ 225*4882a593Smuzhiyun U64 TimeStamp; /*0x40 */ 226*4882a593Smuzhiyun } MPI2_IOC_INIT_REQUEST, *PTR_MPI2_IOC_INIT_REQUEST, 227*4882a593Smuzhiyun Mpi2IOCInitRequest_t, *pMpi2IOCInitRequest_t; 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun /*WhoInit values */ 230*4882a593Smuzhiyun #define MPI2_WHOINIT_NOT_INITIALIZED (0x00) 231*4882a593Smuzhiyun #define MPI2_WHOINIT_SYSTEM_BIOS (0x01) 232*4882a593Smuzhiyun #define MPI2_WHOINIT_ROM_BIOS (0x02) 233*4882a593Smuzhiyun #define MPI2_WHOINIT_PCI_PEER (0x03) 234*4882a593Smuzhiyun #define MPI2_WHOINIT_HOST_DRIVER (0x04) 235*4882a593Smuzhiyun #define MPI2_WHOINIT_MANUFACTURER (0x05) 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun /* MsgFlags */ 238*4882a593Smuzhiyun #define MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE (0x01) 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun /*MsgVersion */ 242*4882a593Smuzhiyun #define MPI2_IOCINIT_MSGVERSION_MAJOR_MASK (0xFF00) 243*4882a593Smuzhiyun #define MPI2_IOCINIT_MSGVERSION_MAJOR_SHIFT (8) 244*4882a593Smuzhiyun #define MPI2_IOCINIT_MSGVERSION_MINOR_MASK (0x00FF) 245*4882a593Smuzhiyun #define MPI2_IOCINIT_MSGVERSION_MINOR_SHIFT (0) 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun /*HeaderVersion */ 248*4882a593Smuzhiyun #define MPI2_IOCINIT_HDRVERSION_UNIT_MASK (0xFF00) 249*4882a593Smuzhiyun #define MPI2_IOCINIT_HDRVERSION_UNIT_SHIFT (8) 250*4882a593Smuzhiyun #define MPI2_IOCINIT_HDRVERSION_DEV_MASK (0x00FF) 251*4882a593Smuzhiyun #define MPI2_IOCINIT_HDRVERSION_DEV_SHIFT (0) 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun /*ConfigurationFlags */ 254*4882a593Smuzhiyun #define MPI26_IOCINIT_CFGFLAGS_NVME_SGL_FORMAT (0x0001) 255*4882a593Smuzhiyun #define MPI26_IOCINIT_CFGFLAGS_COREDUMP_ENABLE (0x0002) 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun /*minimum depth for a Reply Descriptor Post Queue */ 258*4882a593Smuzhiyun #define MPI2_RDPQ_DEPTH_MIN (16) 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun /* Reply Descriptor Post Queue Array Entry */ 261*4882a593Smuzhiyun typedef struct _MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY { 262*4882a593Smuzhiyun U64 RDPQBaseAddress; /* 0x00 */ 263*4882a593Smuzhiyun U32 Reserved1; /* 0x08 */ 264*4882a593Smuzhiyun U32 Reserved2; /* 0x0C */ 265*4882a593Smuzhiyun } MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY, 266*4882a593Smuzhiyun *PTR_MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY, 267*4882a593Smuzhiyun Mpi2IOCInitRDPQArrayEntry, *pMpi2IOCInitRDPQArrayEntry; 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun /*IOCInit Reply message */ 271*4882a593Smuzhiyun typedef struct _MPI2_IOC_INIT_REPLY { 272*4882a593Smuzhiyun U8 WhoInit; /*0x00 */ 273*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 274*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 275*4882a593Smuzhiyun U8 Function; /*0x03 */ 276*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 277*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 278*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 279*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 280*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 281*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 282*4882a593Smuzhiyun U16 Reserved5; /*0x0C */ 283*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 284*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 285*4882a593Smuzhiyun } MPI2_IOC_INIT_REPLY, *PTR_MPI2_IOC_INIT_REPLY, 286*4882a593Smuzhiyun Mpi2IOCInitReply_t, *pMpi2IOCInitReply_t; 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun /**************************************************************************** 289*4882a593Smuzhiyun * IOCFacts message 290*4882a593Smuzhiyun ****************************************************************************/ 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun /*IOCFacts Request message */ 293*4882a593Smuzhiyun typedef struct _MPI2_IOC_FACTS_REQUEST { 294*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 295*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 296*4882a593Smuzhiyun U8 Function; /*0x03 */ 297*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 298*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 299*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 300*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 301*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 302*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 303*4882a593Smuzhiyun } MPI2_IOC_FACTS_REQUEST, *PTR_MPI2_IOC_FACTS_REQUEST, 304*4882a593Smuzhiyun Mpi2IOCFactsRequest_t, *pMpi2IOCFactsRequest_t; 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun /*IOCFacts Reply message */ 307*4882a593Smuzhiyun typedef struct _MPI2_IOC_FACTS_REPLY { 308*4882a593Smuzhiyun U16 MsgVersion; /*0x00 */ 309*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 310*4882a593Smuzhiyun U8 Function; /*0x03 */ 311*4882a593Smuzhiyun U16 HeaderVersion; /*0x04 */ 312*4882a593Smuzhiyun U8 IOCNumber; /*0x06 */ 313*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 314*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 315*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 316*4882a593Smuzhiyun U16 Reserved1; /*0x0A */ 317*4882a593Smuzhiyun U16 IOCExceptions; /*0x0C */ 318*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 319*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 320*4882a593Smuzhiyun U8 MaxChainDepth; /*0x14 */ 321*4882a593Smuzhiyun U8 WhoInit; /*0x15 */ 322*4882a593Smuzhiyun U8 NumberOfPorts; /*0x16 */ 323*4882a593Smuzhiyun U8 MaxMSIxVectors; /*0x17 */ 324*4882a593Smuzhiyun U16 RequestCredit; /*0x18 */ 325*4882a593Smuzhiyun U16 ProductID; /*0x1A */ 326*4882a593Smuzhiyun U32 IOCCapabilities; /*0x1C */ 327*4882a593Smuzhiyun MPI2_VERSION_UNION FWVersion; /*0x20 */ 328*4882a593Smuzhiyun U16 IOCRequestFrameSize; /*0x24 */ 329*4882a593Smuzhiyun U16 IOCMaxChainSegmentSize; /*0x26 */ 330*4882a593Smuzhiyun U16 MaxInitiators; /*0x28 */ 331*4882a593Smuzhiyun U16 MaxTargets; /*0x2A */ 332*4882a593Smuzhiyun U16 MaxSasExpanders; /*0x2C */ 333*4882a593Smuzhiyun U16 MaxEnclosures; /*0x2E */ 334*4882a593Smuzhiyun U16 ProtocolFlags; /*0x30 */ 335*4882a593Smuzhiyun U16 HighPriorityCredit; /*0x32 */ 336*4882a593Smuzhiyun U16 MaxReplyDescriptorPostQueueDepth; /*0x34 */ 337*4882a593Smuzhiyun U8 ReplyFrameSize; /*0x36 */ 338*4882a593Smuzhiyun U8 MaxVolumes; /*0x37 */ 339*4882a593Smuzhiyun U16 MaxDevHandle; /*0x38 */ 340*4882a593Smuzhiyun U16 MaxPersistentEntries; /*0x3A */ 341*4882a593Smuzhiyun U16 MinDevHandle; /*0x3C */ 342*4882a593Smuzhiyun U8 CurrentHostPageSize; /* 0x3E */ 343*4882a593Smuzhiyun U8 Reserved4; /* 0x3F */ 344*4882a593Smuzhiyun U8 SGEModifierMask; /*0x40 */ 345*4882a593Smuzhiyun U8 SGEModifierValue; /*0x41 */ 346*4882a593Smuzhiyun U8 SGEModifierShift; /*0x42 */ 347*4882a593Smuzhiyun U8 Reserved5; /*0x43 */ 348*4882a593Smuzhiyun } MPI2_IOC_FACTS_REPLY, *PTR_MPI2_IOC_FACTS_REPLY, 349*4882a593Smuzhiyun Mpi2IOCFactsReply_t, *pMpi2IOCFactsReply_t; 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun /*MsgVersion */ 352*4882a593Smuzhiyun #define MPI2_IOCFACTS_MSGVERSION_MAJOR_MASK (0xFF00) 353*4882a593Smuzhiyun #define MPI2_IOCFACTS_MSGVERSION_MAJOR_SHIFT (8) 354*4882a593Smuzhiyun #define MPI2_IOCFACTS_MSGVERSION_MINOR_MASK (0x00FF) 355*4882a593Smuzhiyun #define MPI2_IOCFACTS_MSGVERSION_MINOR_SHIFT (0) 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /*HeaderVersion */ 358*4882a593Smuzhiyun #define MPI2_IOCFACTS_HDRVERSION_UNIT_MASK (0xFF00) 359*4882a593Smuzhiyun #define MPI2_IOCFACTS_HDRVERSION_UNIT_SHIFT (8) 360*4882a593Smuzhiyun #define MPI2_IOCFACTS_HDRVERSION_DEV_MASK (0x00FF) 361*4882a593Smuzhiyun #define MPI2_IOCFACTS_HDRVERSION_DEV_SHIFT (0) 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun /*IOCExceptions */ 364*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_PCIE_DISABLED (0x0400) 365*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_PARTIAL_MEMORY_FAILURE (0x0200) 366*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX (0x0100) 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_MASK (0x00E0) 369*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_GOOD (0x0000) 370*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_BACKUP (0x0020) 371*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_RESTORED (0x0040) 372*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_CORRUPT_BACKUP (0x0060) 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED (0x0010) 375*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_MANUFACT_CHECKSUM_FAIL (0x0008) 376*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL (0x0004) 377*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID (0x0002) 378*4882a593Smuzhiyun #define MPI2_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL (0x0001) 379*4882a593Smuzhiyun 380*4882a593Smuzhiyun /*defines for WhoInit field are after the IOCInit Request */ 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun /*ProductID field uses MPI2_FW_HEADER_PID_ */ 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun /*IOCCapabilities */ 385*4882a593Smuzhiyun #define MPI26_IOCFACTS_CAPABILITY_COREDUMP_ENABLED (0x00200000) 386*4882a593Smuzhiyun #define MPI26_IOCFACTS_CAPABILITY_PCIE_SRIOV (0x00100000) 387*4882a593Smuzhiyun #define MPI26_IOCFACTS_CAPABILITY_ATOMIC_REQ (0x00080000) 388*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE (0x00040000) 389*4882a593Smuzhiyun #define MPI25_IOCFACTS_CAPABILITY_FAST_PATH_CAPABLE (0x00020000) 390*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY (0x00010000) 391*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX (0x00008000) 392*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR (0x00004000) 393*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY (0x00002000) 394*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID (0x00001000) 395*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_TLR (0x00000800) 396*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_MULTICAST (0x00000100) 397*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_BIDIRECTIONAL_TARGET (0x00000080) 398*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_EEDP (0x00000040) 399*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER (0x00000020) 400*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER (0x00000010) 401*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER (0x00000008) 402*4882a593Smuzhiyun #define MPI2_IOCFACTS_CAPABILITY_TASK_SET_FULL_HANDLING (0x00000004) 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun /*ProtocolFlags */ 405*4882a593Smuzhiyun #define MPI2_IOCFACTS_PROTOCOL_NVME_DEVICES (0x0008) 406*4882a593Smuzhiyun #define MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR (0x0002) 407*4882a593Smuzhiyun #define MPI2_IOCFACTS_PROTOCOL_SCSI_TARGET (0x0001) 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun /**************************************************************************** 410*4882a593Smuzhiyun * PortFacts message 411*4882a593Smuzhiyun ****************************************************************************/ 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun /*PortFacts Request message */ 414*4882a593Smuzhiyun typedef struct _MPI2_PORT_FACTS_REQUEST { 415*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 416*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 417*4882a593Smuzhiyun U8 Function; /*0x03 */ 418*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 419*4882a593Smuzhiyun U8 PortNumber; /*0x06 */ 420*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 421*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 422*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 423*4882a593Smuzhiyun U16 Reserved3; /*0x0A */ 424*4882a593Smuzhiyun } MPI2_PORT_FACTS_REQUEST, *PTR_MPI2_PORT_FACTS_REQUEST, 425*4882a593Smuzhiyun Mpi2PortFactsRequest_t, *pMpi2PortFactsRequest_t; 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun /*PortFacts Reply message */ 428*4882a593Smuzhiyun typedef struct _MPI2_PORT_FACTS_REPLY { 429*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 430*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 431*4882a593Smuzhiyun U8 Function; /*0x03 */ 432*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 433*4882a593Smuzhiyun U8 PortNumber; /*0x06 */ 434*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 435*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 436*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 437*4882a593Smuzhiyun U16 Reserved3; /*0x0A */ 438*4882a593Smuzhiyun U16 Reserved4; /*0x0C */ 439*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 440*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 441*4882a593Smuzhiyun U8 Reserved5; /*0x14 */ 442*4882a593Smuzhiyun U8 PortType; /*0x15 */ 443*4882a593Smuzhiyun U16 Reserved6; /*0x16 */ 444*4882a593Smuzhiyun U16 MaxPostedCmdBuffers; /*0x18 */ 445*4882a593Smuzhiyun U16 Reserved7; /*0x1A */ 446*4882a593Smuzhiyun } MPI2_PORT_FACTS_REPLY, *PTR_MPI2_PORT_FACTS_REPLY, 447*4882a593Smuzhiyun Mpi2PortFactsReply_t, *pMpi2PortFactsReply_t; 448*4882a593Smuzhiyun 449*4882a593Smuzhiyun /*PortType values */ 450*4882a593Smuzhiyun #define MPI2_PORTFACTS_PORTTYPE_INACTIVE (0x00) 451*4882a593Smuzhiyun #define MPI2_PORTFACTS_PORTTYPE_FC (0x10) 452*4882a593Smuzhiyun #define MPI2_PORTFACTS_PORTTYPE_ISCSI (0x20) 453*4882a593Smuzhiyun #define MPI2_PORTFACTS_PORTTYPE_SAS_PHYSICAL (0x30) 454*4882a593Smuzhiyun #define MPI2_PORTFACTS_PORTTYPE_SAS_VIRTUAL (0x31) 455*4882a593Smuzhiyun #define MPI2_PORTFACTS_PORTTYPE_TRI_MODE (0x40) 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun /**************************************************************************** 459*4882a593Smuzhiyun * PortEnable message 460*4882a593Smuzhiyun ****************************************************************************/ 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun /*PortEnable Request message */ 463*4882a593Smuzhiyun typedef struct _MPI2_PORT_ENABLE_REQUEST { 464*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 465*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 466*4882a593Smuzhiyun U8 Function; /*0x03 */ 467*4882a593Smuzhiyun U8 Reserved2; /*0x04 */ 468*4882a593Smuzhiyun U8 PortFlags; /*0x05 */ 469*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 470*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 471*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 472*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 473*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 474*4882a593Smuzhiyun } MPI2_PORT_ENABLE_REQUEST, *PTR_MPI2_PORT_ENABLE_REQUEST, 475*4882a593Smuzhiyun Mpi2PortEnableRequest_t, *pMpi2PortEnableRequest_t; 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun /*PortEnable Reply message */ 478*4882a593Smuzhiyun typedef struct _MPI2_PORT_ENABLE_REPLY { 479*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 480*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 481*4882a593Smuzhiyun U8 Function; /*0x03 */ 482*4882a593Smuzhiyun U8 Reserved2; /*0x04 */ 483*4882a593Smuzhiyun U8 PortFlags; /*0x05 */ 484*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 485*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 486*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 487*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 488*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 489*4882a593Smuzhiyun U16 Reserved5; /*0x0C */ 490*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 491*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 492*4882a593Smuzhiyun } MPI2_PORT_ENABLE_REPLY, *PTR_MPI2_PORT_ENABLE_REPLY, 493*4882a593Smuzhiyun Mpi2PortEnableReply_t, *pMpi2PortEnableReply_t; 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun /**************************************************************************** 496*4882a593Smuzhiyun * EventNotification message 497*4882a593Smuzhiyun ****************************************************************************/ 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun /*EventNotification Request message */ 500*4882a593Smuzhiyun #define MPI2_EVENT_NOTIFY_EVENTMASK_WORDS (4) 501*4882a593Smuzhiyun 502*4882a593Smuzhiyun typedef struct _MPI2_EVENT_NOTIFICATION_REQUEST { 503*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 504*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 505*4882a593Smuzhiyun U8 Function; /*0x03 */ 506*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 507*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 508*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 509*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 510*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 511*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 512*4882a593Smuzhiyun U32 Reserved5; /*0x0C */ 513*4882a593Smuzhiyun U32 Reserved6; /*0x10 */ 514*4882a593Smuzhiyun U32 EventMasks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS]; /*0x14 */ 515*4882a593Smuzhiyun U16 SASBroadcastPrimitiveMasks; /*0x24 */ 516*4882a593Smuzhiyun U16 SASNotifyPrimitiveMasks; /*0x26 */ 517*4882a593Smuzhiyun U32 Reserved8; /*0x28 */ 518*4882a593Smuzhiyun } MPI2_EVENT_NOTIFICATION_REQUEST, 519*4882a593Smuzhiyun *PTR_MPI2_EVENT_NOTIFICATION_REQUEST, 520*4882a593Smuzhiyun Mpi2EventNotificationRequest_t, 521*4882a593Smuzhiyun *pMpi2EventNotificationRequest_t; 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun /*EventNotification Reply message */ 524*4882a593Smuzhiyun typedef struct _MPI2_EVENT_NOTIFICATION_REPLY { 525*4882a593Smuzhiyun U16 EventDataLength; /*0x00 */ 526*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 527*4882a593Smuzhiyun U8 Function; /*0x03 */ 528*4882a593Smuzhiyun U16 Reserved1; /*0x04 */ 529*4882a593Smuzhiyun U8 AckRequired; /*0x06 */ 530*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 531*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 532*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 533*4882a593Smuzhiyun U16 Reserved2; /*0x0A */ 534*4882a593Smuzhiyun U16 Reserved3; /*0x0C */ 535*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 536*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 537*4882a593Smuzhiyun U16 Event; /*0x14 */ 538*4882a593Smuzhiyun U16 Reserved4; /*0x16 */ 539*4882a593Smuzhiyun U32 EventContext; /*0x18 */ 540*4882a593Smuzhiyun U32 EventData[1]; /*0x1C */ 541*4882a593Smuzhiyun } MPI2_EVENT_NOTIFICATION_REPLY, *PTR_MPI2_EVENT_NOTIFICATION_REPLY, 542*4882a593Smuzhiyun Mpi2EventNotificationReply_t, 543*4882a593Smuzhiyun *pMpi2EventNotificationReply_t; 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun /*AckRequired */ 546*4882a593Smuzhiyun #define MPI2_EVENT_NOTIFICATION_ACK_NOT_REQUIRED (0x00) 547*4882a593Smuzhiyun #define MPI2_EVENT_NOTIFICATION_ACK_REQUIRED (0x01) 548*4882a593Smuzhiyun 549*4882a593Smuzhiyun /*Event */ 550*4882a593Smuzhiyun #define MPI2_EVENT_LOG_DATA (0x0001) 551*4882a593Smuzhiyun #define MPI2_EVENT_STATE_CHANGE (0x0002) 552*4882a593Smuzhiyun #define MPI2_EVENT_HARD_RESET_RECEIVED (0x0005) 553*4882a593Smuzhiyun #define MPI2_EVENT_EVENT_CHANGE (0x000A) 554*4882a593Smuzhiyun #define MPI2_EVENT_TASK_SET_FULL (0x000E) /*obsolete */ 555*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEVICE_STATUS_CHANGE (0x000F) 556*4882a593Smuzhiyun #define MPI2_EVENT_IR_OPERATION_STATUS (0x0014) 557*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISCOVERY (0x0016) 558*4882a593Smuzhiyun #define MPI2_EVENT_SAS_BROADCAST_PRIMITIVE (0x0017) 559*4882a593Smuzhiyun #define MPI2_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE (0x0018) 560*4882a593Smuzhiyun #define MPI2_EVENT_SAS_INIT_TABLE_OVERFLOW (0x0019) 561*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST (0x001C) 562*4882a593Smuzhiyun #define MPI2_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE (0x001D) 563*4882a593Smuzhiyun #define MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE (0x001D) 564*4882a593Smuzhiyun #define MPI2_EVENT_IR_VOLUME (0x001E) 565*4882a593Smuzhiyun #define MPI2_EVENT_IR_PHYSICAL_DISK (0x001F) 566*4882a593Smuzhiyun #define MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST (0x0020) 567*4882a593Smuzhiyun #define MPI2_EVENT_LOG_ENTRY_ADDED (0x0021) 568*4882a593Smuzhiyun #define MPI2_EVENT_SAS_PHY_COUNTER (0x0022) 569*4882a593Smuzhiyun #define MPI2_EVENT_GPIO_INTERRUPT (0x0023) 570*4882a593Smuzhiyun #define MPI2_EVENT_HOST_BASED_DISCOVERY_PHY (0x0024) 571*4882a593Smuzhiyun #define MPI2_EVENT_SAS_QUIESCE (0x0025) 572*4882a593Smuzhiyun #define MPI2_EVENT_SAS_NOTIFY_PRIMITIVE (0x0026) 573*4882a593Smuzhiyun #define MPI2_EVENT_TEMP_THRESHOLD (0x0027) 574*4882a593Smuzhiyun #define MPI2_EVENT_HOST_MESSAGE (0x0028) 575*4882a593Smuzhiyun #define MPI2_EVENT_POWER_PERFORMANCE_CHANGE (0x0029) 576*4882a593Smuzhiyun #define MPI2_EVENT_PCIE_DEVICE_STATUS_CHANGE (0x0030) 577*4882a593Smuzhiyun #define MPI2_EVENT_PCIE_ENUMERATION (0x0031) 578*4882a593Smuzhiyun #define MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST (0x0032) 579*4882a593Smuzhiyun #define MPI2_EVENT_PCIE_LINK_COUNTER (0x0033) 580*4882a593Smuzhiyun #define MPI2_EVENT_ACTIVE_CABLE_EXCEPTION (0x0034) 581*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR (0x0035) 582*4882a593Smuzhiyun #define MPI2_EVENT_MIN_PRODUCT_SPECIFIC (0x006E) 583*4882a593Smuzhiyun #define MPI2_EVENT_MAX_PRODUCT_SPECIFIC (0x007F) 584*4882a593Smuzhiyun 585*4882a593Smuzhiyun /*Log Entry Added Event data */ 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun /*the following structure matches MPI2_LOG_0_ENTRY in mpi2_cnfg.h */ 588*4882a593Smuzhiyun #define MPI2_EVENT_DATA_LOG_DATA_LENGTH (0x1C) 589*4882a593Smuzhiyun 590*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_LOG_ENTRY_ADDED { 591*4882a593Smuzhiyun U64 TimeStamp; /*0x00 */ 592*4882a593Smuzhiyun U32 Reserved1; /*0x08 */ 593*4882a593Smuzhiyun U16 LogSequence; /*0x0C */ 594*4882a593Smuzhiyun U16 LogEntryQualifier; /*0x0E */ 595*4882a593Smuzhiyun U8 VP_ID; /*0x10 */ 596*4882a593Smuzhiyun U8 VF_ID; /*0x11 */ 597*4882a593Smuzhiyun U16 Reserved2; /*0x12 */ 598*4882a593Smuzhiyun U8 LogData[MPI2_EVENT_DATA_LOG_DATA_LENGTH]; /*0x14 */ 599*4882a593Smuzhiyun } MPI2_EVENT_DATA_LOG_ENTRY_ADDED, 600*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_LOG_ENTRY_ADDED, 601*4882a593Smuzhiyun Mpi2EventDataLogEntryAdded_t, 602*4882a593Smuzhiyun *pMpi2EventDataLogEntryAdded_t; 603*4882a593Smuzhiyun 604*4882a593Smuzhiyun /*GPIO Interrupt Event data */ 605*4882a593Smuzhiyun 606*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_GPIO_INTERRUPT { 607*4882a593Smuzhiyun U8 GPIONum; /*0x00 */ 608*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 609*4882a593Smuzhiyun U16 Reserved2; /*0x02 */ 610*4882a593Smuzhiyun } MPI2_EVENT_DATA_GPIO_INTERRUPT, 611*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_GPIO_INTERRUPT, 612*4882a593Smuzhiyun Mpi2EventDataGpioInterrupt_t, 613*4882a593Smuzhiyun *pMpi2EventDataGpioInterrupt_t; 614*4882a593Smuzhiyun 615*4882a593Smuzhiyun /*Temperature Threshold Event data */ 616*4882a593Smuzhiyun 617*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_TEMPERATURE { 618*4882a593Smuzhiyun U16 Status; /*0x00 */ 619*4882a593Smuzhiyun U8 SensorNum; /*0x02 */ 620*4882a593Smuzhiyun U8 Reserved1; /*0x03 */ 621*4882a593Smuzhiyun U16 CurrentTemperature; /*0x04 */ 622*4882a593Smuzhiyun U16 Reserved2; /*0x06 */ 623*4882a593Smuzhiyun U32 Reserved3; /*0x08 */ 624*4882a593Smuzhiyun U32 Reserved4; /*0x0C */ 625*4882a593Smuzhiyun } MPI2_EVENT_DATA_TEMPERATURE, 626*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_TEMPERATURE, 627*4882a593Smuzhiyun Mpi2EventDataTemperature_t, *pMpi2EventDataTemperature_t; 628*4882a593Smuzhiyun 629*4882a593Smuzhiyun /*Temperature Threshold Event data Status bits */ 630*4882a593Smuzhiyun #define MPI2_EVENT_TEMPERATURE3_EXCEEDED (0x0008) 631*4882a593Smuzhiyun #define MPI2_EVENT_TEMPERATURE2_EXCEEDED (0x0004) 632*4882a593Smuzhiyun #define MPI2_EVENT_TEMPERATURE1_EXCEEDED (0x0002) 633*4882a593Smuzhiyun #define MPI2_EVENT_TEMPERATURE0_EXCEEDED (0x0001) 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun /*Host Message Event data */ 636*4882a593Smuzhiyun 637*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_HOST_MESSAGE { 638*4882a593Smuzhiyun U8 SourceVF_ID; /*0x00 */ 639*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 640*4882a593Smuzhiyun U16 Reserved2; /*0x02 */ 641*4882a593Smuzhiyun U32 Reserved3; /*0x04 */ 642*4882a593Smuzhiyun U32 HostData[1]; /*0x08 */ 643*4882a593Smuzhiyun } MPI2_EVENT_DATA_HOST_MESSAGE, *PTR_MPI2_EVENT_DATA_HOST_MESSAGE, 644*4882a593Smuzhiyun Mpi2EventDataHostMessage_t, *pMpi2EventDataHostMessage_t; 645*4882a593Smuzhiyun 646*4882a593Smuzhiyun /*Power Performance Change Event data */ 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_POWER_PERF_CHANGE { 649*4882a593Smuzhiyun U8 CurrentPowerMode; /*0x00 */ 650*4882a593Smuzhiyun U8 PreviousPowerMode; /*0x01 */ 651*4882a593Smuzhiyun U16 Reserved1; /*0x02 */ 652*4882a593Smuzhiyun } MPI2_EVENT_DATA_POWER_PERF_CHANGE, 653*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_POWER_PERF_CHANGE, 654*4882a593Smuzhiyun Mpi2EventDataPowerPerfChange_t, 655*4882a593Smuzhiyun *pMpi2EventDataPowerPerfChange_t; 656*4882a593Smuzhiyun 657*4882a593Smuzhiyun /*defines for CurrentPowerMode and PreviousPowerMode fields */ 658*4882a593Smuzhiyun #define MPI2_EVENT_PM_INIT_MASK (0xC0) 659*4882a593Smuzhiyun #define MPI2_EVENT_PM_INIT_UNAVAILABLE (0x00) 660*4882a593Smuzhiyun #define MPI2_EVENT_PM_INIT_HOST (0x40) 661*4882a593Smuzhiyun #define MPI2_EVENT_PM_INIT_IO_UNIT (0x80) 662*4882a593Smuzhiyun #define MPI2_EVENT_PM_INIT_PCIE_DPA (0xC0) 663*4882a593Smuzhiyun 664*4882a593Smuzhiyun #define MPI2_EVENT_PM_MODE_MASK (0x07) 665*4882a593Smuzhiyun #define MPI2_EVENT_PM_MODE_UNAVAILABLE (0x00) 666*4882a593Smuzhiyun #define MPI2_EVENT_PM_MODE_UNKNOWN (0x01) 667*4882a593Smuzhiyun #define MPI2_EVENT_PM_MODE_FULL_POWER (0x04) 668*4882a593Smuzhiyun #define MPI2_EVENT_PM_MODE_REDUCED_POWER (0x05) 669*4882a593Smuzhiyun #define MPI2_EVENT_PM_MODE_STANDBY (0x06) 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun /* Active Cable Exception Event data */ 672*4882a593Smuzhiyun 673*4882a593Smuzhiyun typedef struct _MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT { 674*4882a593Smuzhiyun U32 ActiveCablePowerRequirement; /* 0x00 */ 675*4882a593Smuzhiyun U8 ReasonCode; /* 0x04 */ 676*4882a593Smuzhiyun U8 ReceptacleID; /* 0x05 */ 677*4882a593Smuzhiyun U16 Reserved1; /* 0x06 */ 678*4882a593Smuzhiyun } MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT, 679*4882a593Smuzhiyun *PTR_MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT, 680*4882a593Smuzhiyun Mpi25EventDataActiveCableExcept_t, 681*4882a593Smuzhiyun *pMpi25EventDataActiveCableExcept_t, 682*4882a593Smuzhiyun MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT, 683*4882a593Smuzhiyun *PTR_MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT, 684*4882a593Smuzhiyun Mpi26EventDataActiveCableExcept_t, 685*4882a593Smuzhiyun *pMpi26EventDataActiveCableExcept_t; 686*4882a593Smuzhiyun 687*4882a593Smuzhiyun /*MPI2.5 defines for the ReasonCode field */ 688*4882a593Smuzhiyun #define MPI25_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER (0x00) 689*4882a593Smuzhiyun #define MPI25_EVENT_ACTIVE_CABLE_PRESENT (0x01) 690*4882a593Smuzhiyun #define MPI25_EVENT_ACTIVE_CABLE_DEGRADED (0x02) 691*4882a593Smuzhiyun 692*4882a593Smuzhiyun /* defines for ReasonCode field */ 693*4882a593Smuzhiyun #define MPI26_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER (0x00) 694*4882a593Smuzhiyun #define MPI26_EVENT_ACTIVE_CABLE_PRESENT (0x01) 695*4882a593Smuzhiyun #define MPI26_EVENT_ACTIVE_CABLE_DEGRADED (0x02) 696*4882a593Smuzhiyun 697*4882a593Smuzhiyun /*Hard Reset Received Event data */ 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_HARD_RESET_RECEIVED { 700*4882a593Smuzhiyun U8 Reserved1; /*0x00 */ 701*4882a593Smuzhiyun U8 Port; /*0x01 */ 702*4882a593Smuzhiyun U16 Reserved2; /*0x02 */ 703*4882a593Smuzhiyun } MPI2_EVENT_DATA_HARD_RESET_RECEIVED, 704*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_HARD_RESET_RECEIVED, 705*4882a593Smuzhiyun Mpi2EventDataHardResetReceived_t, 706*4882a593Smuzhiyun *pMpi2EventDataHardResetReceived_t; 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun /*Task Set Full Event data */ 709*4882a593Smuzhiyun /* this event is obsolete */ 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_TASK_SET_FULL { 712*4882a593Smuzhiyun U16 DevHandle; /*0x00 */ 713*4882a593Smuzhiyun U16 CurrentDepth; /*0x02 */ 714*4882a593Smuzhiyun } MPI2_EVENT_DATA_TASK_SET_FULL, *PTR_MPI2_EVENT_DATA_TASK_SET_FULL, 715*4882a593Smuzhiyun Mpi2EventDataTaskSetFull_t, *pMpi2EventDataTaskSetFull_t; 716*4882a593Smuzhiyun 717*4882a593Smuzhiyun /*SAS Device Status Change Event data */ 718*4882a593Smuzhiyun 719*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE { 720*4882a593Smuzhiyun U16 TaskTag; /*0x00 */ 721*4882a593Smuzhiyun U8 ReasonCode; /*0x02 */ 722*4882a593Smuzhiyun U8 PhysicalPort; /*0x03 */ 723*4882a593Smuzhiyun U8 ASC; /*0x04 */ 724*4882a593Smuzhiyun U8 ASCQ; /*0x05 */ 725*4882a593Smuzhiyun U16 DevHandle; /*0x06 */ 726*4882a593Smuzhiyun U32 Reserved2; /*0x08 */ 727*4882a593Smuzhiyun U64 SASAddress; /*0x0C */ 728*4882a593Smuzhiyun U8 LUN[8]; /*0x14 */ 729*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 730*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 731*4882a593Smuzhiyun Mpi2EventDataSasDeviceStatusChange_t, 732*4882a593Smuzhiyun *pMpi2EventDataSasDeviceStatusChange_t; 733*4882a593Smuzhiyun 734*4882a593Smuzhiyun /*SAS Device Status Change Event data ReasonCode values */ 735*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_SMART_DATA (0x05) 736*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_UNSUPPORTED (0x07) 737*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08) 738*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_TASK_ABORT_INTERNAL (0x09) 739*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_ABORT_TASK_SET_INTERNAL (0x0A) 740*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_CLEAR_TASK_SET_INTERNAL (0x0B) 741*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_QUERY_TASK_INTERNAL (0x0C) 742*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_ASYNC_NOTIFICATION (0x0D) 743*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_INTERNAL_DEV_RESET (0x0E) 744*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_TASK_ABORT_INTERNAL (0x0F) 745*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE (0x10) 746*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_EXPANDER_REDUCED_FUNCTIONALITY (0x11) 747*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_EXPANDER_REDUCED_FUNCTIONALITY (0x12) 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun /*Integrated RAID Operation Status Event data */ 750*4882a593Smuzhiyun 751*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_IR_OPERATION_STATUS { 752*4882a593Smuzhiyun U16 VolDevHandle; /*0x00 */ 753*4882a593Smuzhiyun U16 Reserved1; /*0x02 */ 754*4882a593Smuzhiyun U8 RAIDOperation; /*0x04 */ 755*4882a593Smuzhiyun U8 PercentComplete; /*0x05 */ 756*4882a593Smuzhiyun U16 Reserved2; /*0x06 */ 757*4882a593Smuzhiyun U32 ElapsedSeconds; /*0x08 */ 758*4882a593Smuzhiyun } MPI2_EVENT_DATA_IR_OPERATION_STATUS, 759*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_IR_OPERATION_STATUS, 760*4882a593Smuzhiyun Mpi2EventDataIrOperationStatus_t, 761*4882a593Smuzhiyun *pMpi2EventDataIrOperationStatus_t; 762*4882a593Smuzhiyun 763*4882a593Smuzhiyun /*Integrated RAID Operation Status Event data RAIDOperation values */ 764*4882a593Smuzhiyun #define MPI2_EVENT_IR_RAIDOP_RESYNC (0x00) 765*4882a593Smuzhiyun #define MPI2_EVENT_IR_RAIDOP_ONLINE_CAP_EXPANSION (0x01) 766*4882a593Smuzhiyun #define MPI2_EVENT_IR_RAIDOP_CONSISTENCY_CHECK (0x02) 767*4882a593Smuzhiyun #define MPI2_EVENT_IR_RAIDOP_BACKGROUND_INIT (0x03) 768*4882a593Smuzhiyun #define MPI2_EVENT_IR_RAIDOP_MAKE_DATA_CONSISTENT (0x04) 769*4882a593Smuzhiyun 770*4882a593Smuzhiyun /*Integrated RAID Volume Event data */ 771*4882a593Smuzhiyun 772*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_IR_VOLUME { 773*4882a593Smuzhiyun U16 VolDevHandle; /*0x00 */ 774*4882a593Smuzhiyun U8 ReasonCode; /*0x02 */ 775*4882a593Smuzhiyun U8 Reserved1; /*0x03 */ 776*4882a593Smuzhiyun U32 NewValue; /*0x04 */ 777*4882a593Smuzhiyun U32 PreviousValue; /*0x08 */ 778*4882a593Smuzhiyun } MPI2_EVENT_DATA_IR_VOLUME, *PTR_MPI2_EVENT_DATA_IR_VOLUME, 779*4882a593Smuzhiyun Mpi2EventDataIrVolume_t, *pMpi2EventDataIrVolume_t; 780*4882a593Smuzhiyun 781*4882a593Smuzhiyun /*Integrated RAID Volume Event data ReasonCode values */ 782*4882a593Smuzhiyun #define MPI2_EVENT_IR_VOLUME_RC_SETTINGS_CHANGED (0x01) 783*4882a593Smuzhiyun #define MPI2_EVENT_IR_VOLUME_RC_STATUS_FLAGS_CHANGED (0x02) 784*4882a593Smuzhiyun #define MPI2_EVENT_IR_VOLUME_RC_STATE_CHANGED (0x03) 785*4882a593Smuzhiyun 786*4882a593Smuzhiyun /*Integrated RAID Physical Disk Event data */ 787*4882a593Smuzhiyun 788*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_IR_PHYSICAL_DISK { 789*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 790*4882a593Smuzhiyun U8 ReasonCode; /*0x02 */ 791*4882a593Smuzhiyun U8 PhysDiskNum; /*0x03 */ 792*4882a593Smuzhiyun U16 PhysDiskDevHandle; /*0x04 */ 793*4882a593Smuzhiyun U16 Reserved2; /*0x06 */ 794*4882a593Smuzhiyun U16 Slot; /*0x08 */ 795*4882a593Smuzhiyun U16 EnclosureHandle; /*0x0A */ 796*4882a593Smuzhiyun U32 NewValue; /*0x0C */ 797*4882a593Smuzhiyun U32 PreviousValue; /*0x10 */ 798*4882a593Smuzhiyun } MPI2_EVENT_DATA_IR_PHYSICAL_DISK, 799*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_IR_PHYSICAL_DISK, 800*4882a593Smuzhiyun Mpi2EventDataIrPhysicalDisk_t, 801*4882a593Smuzhiyun *pMpi2EventDataIrPhysicalDisk_t; 802*4882a593Smuzhiyun 803*4882a593Smuzhiyun /*Integrated RAID Physical Disk Event data ReasonCode values */ 804*4882a593Smuzhiyun #define MPI2_EVENT_IR_PHYSDISK_RC_SETTINGS_CHANGED (0x01) 805*4882a593Smuzhiyun #define MPI2_EVENT_IR_PHYSDISK_RC_STATUS_FLAGS_CHANGED (0x02) 806*4882a593Smuzhiyun #define MPI2_EVENT_IR_PHYSDISK_RC_STATE_CHANGED (0x03) 807*4882a593Smuzhiyun 808*4882a593Smuzhiyun /*Integrated RAID Configuration Change List Event data */ 809*4882a593Smuzhiyun 810*4882a593Smuzhiyun /* 811*4882a593Smuzhiyun *Host code (drivers, BIOS, utilities, etc.) should leave this define set to 812*4882a593Smuzhiyun *one and check NumElements at runtime. 813*4882a593Smuzhiyun */ 814*4882a593Smuzhiyun #ifndef MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT 815*4882a593Smuzhiyun #define MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT (1) 816*4882a593Smuzhiyun #endif 817*4882a593Smuzhiyun 818*4882a593Smuzhiyun typedef struct _MPI2_EVENT_IR_CONFIG_ELEMENT { 819*4882a593Smuzhiyun U16 ElementFlags; /*0x00 */ 820*4882a593Smuzhiyun U16 VolDevHandle; /*0x02 */ 821*4882a593Smuzhiyun U8 ReasonCode; /*0x04 */ 822*4882a593Smuzhiyun U8 PhysDiskNum; /*0x05 */ 823*4882a593Smuzhiyun U16 PhysDiskDevHandle; /*0x06 */ 824*4882a593Smuzhiyun } MPI2_EVENT_IR_CONFIG_ELEMENT, *PTR_MPI2_EVENT_IR_CONFIG_ELEMENT, 825*4882a593Smuzhiyun Mpi2EventIrConfigElement_t, *pMpi2EventIrConfigElement_t; 826*4882a593Smuzhiyun 827*4882a593Smuzhiyun /*IR Configuration Change List Event data ElementFlags values */ 828*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_EFLAGS_ELEMENT_TYPE_MASK (0x000F) 829*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLUME_ELEMENT (0x0000) 830*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLPHYSDISK_ELEMENT (0x0001) 831*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_EFLAGS_HOTSPARE_ELEMENT (0x0002) 832*4882a593Smuzhiyun 833*4882a593Smuzhiyun /*IR Configuration Change List Event data ReasonCode values */ 834*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_ADDED (0x01) 835*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_REMOVED (0x02) 836*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_NO_CHANGE (0x03) 837*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_HIDE (0x04) 838*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_UNHIDE (0x05) 839*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_VOLUME_CREATED (0x06) 840*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_VOLUME_DELETED (0x07) 841*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_PD_CREATED (0x08) 842*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_RC_PD_DELETED (0x09) 843*4882a593Smuzhiyun 844*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST { 845*4882a593Smuzhiyun U8 NumElements; /*0x00 */ 846*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 847*4882a593Smuzhiyun U8 Reserved2; /*0x02 */ 848*4882a593Smuzhiyun U8 ConfigNum; /*0x03 */ 849*4882a593Smuzhiyun U32 Flags; /*0x04 */ 850*4882a593Smuzhiyun MPI2_EVENT_IR_CONFIG_ELEMENT 851*4882a593Smuzhiyun ConfigElement[MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT];/*0x08 */ 852*4882a593Smuzhiyun } MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, 853*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, 854*4882a593Smuzhiyun Mpi2EventDataIrConfigChangeList_t, 855*4882a593Smuzhiyun *pMpi2EventDataIrConfigChangeList_t; 856*4882a593Smuzhiyun 857*4882a593Smuzhiyun /*IR Configuration Change List Event data Flags values */ 858*4882a593Smuzhiyun #define MPI2_EVENT_IR_CHANGE_FLAGS_FOREIGN_CONFIG (0x00000001) 859*4882a593Smuzhiyun 860*4882a593Smuzhiyun /*SAS Discovery Event data */ 861*4882a593Smuzhiyun 862*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_DISCOVERY { 863*4882a593Smuzhiyun U8 Flags; /*0x00 */ 864*4882a593Smuzhiyun U8 ReasonCode; /*0x01 */ 865*4882a593Smuzhiyun U8 PhysicalPort; /*0x02 */ 866*4882a593Smuzhiyun U8 Reserved1; /*0x03 */ 867*4882a593Smuzhiyun U32 DiscoveryStatus; /*0x04 */ 868*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_DISCOVERY, 869*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_DISCOVERY, 870*4882a593Smuzhiyun Mpi2EventDataSasDiscovery_t, *pMpi2EventDataSasDiscovery_t; 871*4882a593Smuzhiyun 872*4882a593Smuzhiyun /*SAS Discovery Event data Flags values */ 873*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DEVICE_CHANGE (0x02) 874*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_IN_PROGRESS (0x01) 875*4882a593Smuzhiyun 876*4882a593Smuzhiyun /*SAS Discovery Event data ReasonCode values */ 877*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_RC_STARTED (0x01) 878*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_RC_COMPLETED (0x02) 879*4882a593Smuzhiyun 880*4882a593Smuzhiyun /*SAS Discovery Event data DiscoveryStatus values */ 881*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 882*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_MAX_EXPANDERS_EXCEED (0x40000000) 883*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_MAX_DEVICES_EXCEED (0x20000000) 884*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 885*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR (0x08000000) 886*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 887*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 888*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_MULTI_PORT_DOMAIN (0x00002000) 889*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 890*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_UNSUPPORTED_DEVICE (0x00000800) 891*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_TABLE_LINK (0x00000400) 892*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_SUBTRACTIVE_LINK (0x00000200) 893*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_SMP_CRC_ERROR (0x00000100) 894*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_SMP_FUNCTION_FAILED (0x00000080) 895*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_INDEX_NOT_EXIST (0x00000040) 896*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_OUT_ROUTE_ENTRIES (0x00000020) 897*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_SMP_TIMEOUT (0x00000010) 898*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_MULTIPLE_PORTS (0x00000004) 899*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_UNADDRESSABLE_DEVICE (0x00000002) 900*4882a593Smuzhiyun #define MPI2_EVENT_SAS_DISC_DS_LOOP_DETECTED (0x00000001) 901*4882a593Smuzhiyun 902*4882a593Smuzhiyun /*SAS Broadcast Primitive Event data */ 903*4882a593Smuzhiyun 904*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE { 905*4882a593Smuzhiyun U8 PhyNum; /*0x00 */ 906*4882a593Smuzhiyun U8 Port; /*0x01 */ 907*4882a593Smuzhiyun U8 PortWidth; /*0x02 */ 908*4882a593Smuzhiyun U8 Primitive; /*0x03 */ 909*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 910*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 911*4882a593Smuzhiyun Mpi2EventDataSasBroadcastPrimitive_t, 912*4882a593Smuzhiyun *pMpi2EventDataSasBroadcastPrimitive_t; 913*4882a593Smuzhiyun 914*4882a593Smuzhiyun /*defines for the Primitive field */ 915*4882a593Smuzhiyun #define MPI2_EVENT_PRIMITIVE_CHANGE (0x01) 916*4882a593Smuzhiyun #define MPI2_EVENT_PRIMITIVE_SES (0x02) 917*4882a593Smuzhiyun #define MPI2_EVENT_PRIMITIVE_EXPANDER (0x03) 918*4882a593Smuzhiyun #define MPI2_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT (0x04) 919*4882a593Smuzhiyun #define MPI2_EVENT_PRIMITIVE_RESERVED3 (0x05) 920*4882a593Smuzhiyun #define MPI2_EVENT_PRIMITIVE_RESERVED4 (0x06) 921*4882a593Smuzhiyun #define MPI2_EVENT_PRIMITIVE_CHANGE0_RESERVED (0x07) 922*4882a593Smuzhiyun #define MPI2_EVENT_PRIMITIVE_CHANGE1_RESERVED (0x08) 923*4882a593Smuzhiyun 924*4882a593Smuzhiyun /*SAS Notify Primitive Event data */ 925*4882a593Smuzhiyun 926*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE { 927*4882a593Smuzhiyun U8 PhyNum; /*0x00 */ 928*4882a593Smuzhiyun U8 Port; /*0x01 */ 929*4882a593Smuzhiyun U8 Reserved1; /*0x02 */ 930*4882a593Smuzhiyun U8 Primitive; /*0x03 */ 931*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE, 932*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE, 933*4882a593Smuzhiyun Mpi2EventDataSasNotifyPrimitive_t, 934*4882a593Smuzhiyun *pMpi2EventDataSasNotifyPrimitive_t; 935*4882a593Smuzhiyun 936*4882a593Smuzhiyun /*defines for the Primitive field */ 937*4882a593Smuzhiyun #define MPI2_EVENT_NOTIFY_ENABLE_SPINUP (0x01) 938*4882a593Smuzhiyun #define MPI2_EVENT_NOTIFY_POWER_LOSS_EXPECTED (0x02) 939*4882a593Smuzhiyun #define MPI2_EVENT_NOTIFY_RESERVED1 (0x03) 940*4882a593Smuzhiyun #define MPI2_EVENT_NOTIFY_RESERVED2 (0x04) 941*4882a593Smuzhiyun 942*4882a593Smuzhiyun /*SAS Initiator Device Status Change Event data */ 943*4882a593Smuzhiyun 944*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE { 945*4882a593Smuzhiyun U8 ReasonCode; /*0x00 */ 946*4882a593Smuzhiyun U8 PhysicalPort; /*0x01 */ 947*4882a593Smuzhiyun U16 DevHandle; /*0x02 */ 948*4882a593Smuzhiyun U64 SASAddress; /*0x04 */ 949*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 950*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 951*4882a593Smuzhiyun Mpi2EventDataSasInitDevStatusChange_t, 952*4882a593Smuzhiyun *pMpi2EventDataSasInitDevStatusChange_t; 953*4882a593Smuzhiyun 954*4882a593Smuzhiyun /*SAS Initiator Device Status Change event ReasonCode values */ 955*4882a593Smuzhiyun #define MPI2_EVENT_SAS_INIT_RC_ADDED (0x01) 956*4882a593Smuzhiyun #define MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING (0x02) 957*4882a593Smuzhiyun 958*4882a593Smuzhiyun /*SAS Initiator Device Table Overflow Event data */ 959*4882a593Smuzhiyun 960*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW { 961*4882a593Smuzhiyun U16 MaxInit; /*0x00 */ 962*4882a593Smuzhiyun U16 CurrentInit; /*0x02 */ 963*4882a593Smuzhiyun U64 SASAddress; /*0x04 */ 964*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 965*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 966*4882a593Smuzhiyun Mpi2EventDataSasInitTableOverflow_t, 967*4882a593Smuzhiyun *pMpi2EventDataSasInitTableOverflow_t; 968*4882a593Smuzhiyun 969*4882a593Smuzhiyun /*SAS Topology Change List Event data */ 970*4882a593Smuzhiyun 971*4882a593Smuzhiyun /* 972*4882a593Smuzhiyun *Host code (drivers, BIOS, utilities, etc.) should leave this define set to 973*4882a593Smuzhiyun *one and check NumEntries at runtime. 974*4882a593Smuzhiyun */ 975*4882a593Smuzhiyun #ifndef MPI2_EVENT_SAS_TOPO_PHY_COUNT 976*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_PHY_COUNT (1) 977*4882a593Smuzhiyun #endif 978*4882a593Smuzhiyun 979*4882a593Smuzhiyun typedef struct _MPI2_EVENT_SAS_TOPO_PHY_ENTRY { 980*4882a593Smuzhiyun U16 AttachedDevHandle; /*0x00 */ 981*4882a593Smuzhiyun U8 LinkRate; /*0x02 */ 982*4882a593Smuzhiyun U8 PhyStatus; /*0x03 */ 983*4882a593Smuzhiyun } MPI2_EVENT_SAS_TOPO_PHY_ENTRY, *PTR_MPI2_EVENT_SAS_TOPO_PHY_ENTRY, 984*4882a593Smuzhiyun Mpi2EventSasTopoPhyEntry_t, *pMpi2EventSasTopoPhyEntry_t; 985*4882a593Smuzhiyun 986*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST { 987*4882a593Smuzhiyun U16 EnclosureHandle; /*0x00 */ 988*4882a593Smuzhiyun U16 ExpanderDevHandle; /*0x02 */ 989*4882a593Smuzhiyun U8 NumPhys; /*0x04 */ 990*4882a593Smuzhiyun U8 Reserved1; /*0x05 */ 991*4882a593Smuzhiyun U16 Reserved2; /*0x06 */ 992*4882a593Smuzhiyun U8 NumEntries; /*0x08 */ 993*4882a593Smuzhiyun U8 StartPhyNum; /*0x09 */ 994*4882a593Smuzhiyun U8 ExpStatus; /*0x0A */ 995*4882a593Smuzhiyun U8 PhysicalPort; /*0x0B */ 996*4882a593Smuzhiyun MPI2_EVENT_SAS_TOPO_PHY_ENTRY 997*4882a593Smuzhiyun PHY[MPI2_EVENT_SAS_TOPO_PHY_COUNT]; /*0x0C */ 998*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, 999*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, 1000*4882a593Smuzhiyun Mpi2EventDataSasTopologyChangeList_t, 1001*4882a593Smuzhiyun *pMpi2EventDataSasTopologyChangeList_t; 1002*4882a593Smuzhiyun 1003*4882a593Smuzhiyun /*values for the ExpStatus field */ 1004*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER (0x00) 1005*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_ES_ADDED (0x01) 1006*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_ES_NOT_RESPONDING (0x02) 1007*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_ES_RESPONDING (0x03) 1008*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING (0x04) 1009*4882a593Smuzhiyun 1010*4882a593Smuzhiyun /*defines for the LinkRate field */ 1011*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_CURRENT_MASK (0xF0) 1012*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_CURRENT_SHIFT (4) 1013*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_PREV_MASK (0x0F) 1014*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_PREV_SHIFT (0) 1015*4882a593Smuzhiyun 1016*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_UNKNOWN_LINK_RATE (0x00) 1017*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_PHY_DISABLED (0x01) 1018*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_NEGOTIATION_FAILED (0x02) 1019*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_SATA_OOB_COMPLETE (0x03) 1020*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_PORT_SELECTOR (0x04) 1021*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_SMP_RESET_IN_PROGRESS (0x05) 1022*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY (0x06) 1023*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_RATE_1_5 (0x08) 1024*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_RATE_3_0 (0x09) 1025*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_LR_RATE_6_0 (0x0A) 1026*4882a593Smuzhiyun #define MPI25_EVENT_SAS_TOPO_LR_RATE_12_0 (0x0B) 1027*4882a593Smuzhiyun #define MPI26_EVENT_SAS_TOPO_LR_RATE_22_5 (0x0C) 1028*4882a593Smuzhiyun 1029*4882a593Smuzhiyun /*values for the PhyStatus field */ 1030*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_PHYSTATUS_VACANT (0x80) 1031*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_PS_MULTIPLEX_CHANGE (0x10) 1032*4882a593Smuzhiyun /*values for the PhyStatus ReasonCode sub-field */ 1033*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_RC_MASK (0x0F) 1034*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED (0x01) 1035*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_RC_TARG_NOT_RESPONDING (0x02) 1036*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED (0x03) 1037*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_RC_NO_CHANGE (0x04) 1038*4882a593Smuzhiyun #define MPI2_EVENT_SAS_TOPO_RC_DELAY_NOT_RESPONDING (0x05) 1039*4882a593Smuzhiyun 1040*4882a593Smuzhiyun /*SAS Enclosure Device Status Change Event data */ 1041*4882a593Smuzhiyun 1042*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE { 1043*4882a593Smuzhiyun U16 EnclosureHandle; /*0x00 */ 1044*4882a593Smuzhiyun U8 ReasonCode; /*0x02 */ 1045*4882a593Smuzhiyun U8 PhysicalPort; /*0x03 */ 1046*4882a593Smuzhiyun U64 EnclosureLogicalID; /*0x04 */ 1047*4882a593Smuzhiyun U16 NumSlots; /*0x0C */ 1048*4882a593Smuzhiyun U16 StartSlot; /*0x0E */ 1049*4882a593Smuzhiyun U32 PhyBits; /*0x10 */ 1050*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE, 1051*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE, 1052*4882a593Smuzhiyun Mpi2EventDataSasEnclDevStatusChange_t, 1053*4882a593Smuzhiyun *pMpi2EventDataSasEnclDevStatusChange_t, 1054*4882a593Smuzhiyun MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE, 1055*4882a593Smuzhiyun *PTR_MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE, 1056*4882a593Smuzhiyun Mpi26EventDataEnclDevStatusChange_t, 1057*4882a593Smuzhiyun *pMpi26EventDataEnclDevStatusChange_t; 1058*4882a593Smuzhiyun 1059*4882a593Smuzhiyun /*SAS Enclosure Device Status Change event ReasonCode values */ 1060*4882a593Smuzhiyun #define MPI2_EVENT_SAS_ENCL_RC_ADDED (0x01) 1061*4882a593Smuzhiyun #define MPI2_EVENT_SAS_ENCL_RC_NOT_RESPONDING (0x02) 1062*4882a593Smuzhiyun 1063*4882a593Smuzhiyun /*Enclosure Device Status Change event ReasonCode values */ 1064*4882a593Smuzhiyun #define MPI26_EVENT_ENCL_RC_ADDED (0x01) 1065*4882a593Smuzhiyun #define MPI26_EVENT_ENCL_RC_NOT_RESPONDING (0x02) 1066*4882a593Smuzhiyun 1067*4882a593Smuzhiyun 1068*4882a593Smuzhiyun typedef struct _MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR { 1069*4882a593Smuzhiyun U16 DevHandle; /*0x00 */ 1070*4882a593Smuzhiyun U8 ReasonCode; /*0x02 */ 1071*4882a593Smuzhiyun U8 PhysicalPort; /*0x03 */ 1072*4882a593Smuzhiyun U32 Reserved1[2]; /*0x04 */ 1073*4882a593Smuzhiyun U64 SASAddress; /*0x0C */ 1074*4882a593Smuzhiyun U32 Reserved2[2]; /*0x14 */ 1075*4882a593Smuzhiyun } MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR, 1076*4882a593Smuzhiyun *PTR_MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR, 1077*4882a593Smuzhiyun Mpi25EventDataSasDeviceDiscoveryError_t, 1078*4882a593Smuzhiyun *pMpi25EventDataSasDeviceDiscoveryError_t; 1079*4882a593Smuzhiyun 1080*4882a593Smuzhiyun /*SAS Device Discovery Error Event data ReasonCode values */ 1081*4882a593Smuzhiyun #define MPI25_EVENT_SAS_DISC_ERR_SMP_FAILED (0x01) 1082*4882a593Smuzhiyun #define MPI25_EVENT_SAS_DISC_ERR_SMP_TIMEOUT (0x02) 1083*4882a593Smuzhiyun 1084*4882a593Smuzhiyun /*SAS PHY Counter Event data */ 1085*4882a593Smuzhiyun 1086*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_PHY_COUNTER { 1087*4882a593Smuzhiyun U64 TimeStamp; /*0x00 */ 1088*4882a593Smuzhiyun U32 Reserved1; /*0x08 */ 1089*4882a593Smuzhiyun U8 PhyEventCode; /*0x0C */ 1090*4882a593Smuzhiyun U8 PhyNum; /*0x0D */ 1091*4882a593Smuzhiyun U16 Reserved2; /*0x0E */ 1092*4882a593Smuzhiyun U32 PhyEventInfo; /*0x10 */ 1093*4882a593Smuzhiyun U8 CounterType; /*0x14 */ 1094*4882a593Smuzhiyun U8 ThresholdWindow; /*0x15 */ 1095*4882a593Smuzhiyun U8 TimeUnits; /*0x16 */ 1096*4882a593Smuzhiyun U8 Reserved3; /*0x17 */ 1097*4882a593Smuzhiyun U32 EventThreshold; /*0x18 */ 1098*4882a593Smuzhiyun U16 ThresholdFlags; /*0x1C */ 1099*4882a593Smuzhiyun U16 Reserved4; /*0x1E */ 1100*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_PHY_COUNTER, 1101*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_PHY_COUNTER, 1102*4882a593Smuzhiyun Mpi2EventDataSasPhyCounter_t, 1103*4882a593Smuzhiyun *pMpi2EventDataSasPhyCounter_t; 1104*4882a593Smuzhiyun 1105*4882a593Smuzhiyun /*use MPI2_SASPHY3_EVENT_CODE_ values from mpi2_cnfg.h 1106*4882a593Smuzhiyun *for the PhyEventCode field */ 1107*4882a593Smuzhiyun 1108*4882a593Smuzhiyun /*use MPI2_SASPHY3_COUNTER_TYPE_ values from mpi2_cnfg.h 1109*4882a593Smuzhiyun *for the CounterType field */ 1110*4882a593Smuzhiyun 1111*4882a593Smuzhiyun /*use MPI2_SASPHY3_TIME_UNITS_ values from mpi2_cnfg.h 1112*4882a593Smuzhiyun *for the TimeUnits field */ 1113*4882a593Smuzhiyun 1114*4882a593Smuzhiyun /*use MPI2_SASPHY3_TFLAGS_ values from mpi2_cnfg.h 1115*4882a593Smuzhiyun *for the ThresholdFlags field */ 1116*4882a593Smuzhiyun 1117*4882a593Smuzhiyun /*SAS Quiesce Event data */ 1118*4882a593Smuzhiyun 1119*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_SAS_QUIESCE { 1120*4882a593Smuzhiyun U8 ReasonCode; /*0x00 */ 1121*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1122*4882a593Smuzhiyun U16 Reserved2; /*0x02 */ 1123*4882a593Smuzhiyun U32 Reserved3; /*0x04 */ 1124*4882a593Smuzhiyun } MPI2_EVENT_DATA_SAS_QUIESCE, 1125*4882a593Smuzhiyun *PTR_MPI2_EVENT_DATA_SAS_QUIESCE, 1126*4882a593Smuzhiyun Mpi2EventDataSasQuiesce_t, *pMpi2EventDataSasQuiesce_t; 1127*4882a593Smuzhiyun 1128*4882a593Smuzhiyun /*SAS Quiesce Event data ReasonCode values */ 1129*4882a593Smuzhiyun #define MPI2_EVENT_SAS_QUIESCE_RC_STARTED (0x01) 1130*4882a593Smuzhiyun #define MPI2_EVENT_SAS_QUIESCE_RC_COMPLETED (0x02) 1131*4882a593Smuzhiyun 1132*4882a593Smuzhiyun /*Host Based Discovery Phy Event data */ 1133*4882a593Smuzhiyun 1134*4882a593Smuzhiyun typedef struct _MPI2_EVENT_HBD_PHY_SAS { 1135*4882a593Smuzhiyun U8 Flags; /*0x00 */ 1136*4882a593Smuzhiyun U8 NegotiatedLinkRate; /*0x01 */ 1137*4882a593Smuzhiyun U8 PhyNum; /*0x02 */ 1138*4882a593Smuzhiyun U8 PhysicalPort; /*0x03 */ 1139*4882a593Smuzhiyun U32 Reserved1; /*0x04 */ 1140*4882a593Smuzhiyun U8 InitialFrame[28]; /*0x08 */ 1141*4882a593Smuzhiyun } MPI2_EVENT_HBD_PHY_SAS, *PTR_MPI2_EVENT_HBD_PHY_SAS, 1142*4882a593Smuzhiyun Mpi2EventHbdPhySas_t, *pMpi2EventHbdPhySas_t; 1143*4882a593Smuzhiyun 1144*4882a593Smuzhiyun /*values for the Flags field */ 1145*4882a593Smuzhiyun #define MPI2_EVENT_HBD_SAS_FLAGS_FRAME_VALID (0x02) 1146*4882a593Smuzhiyun #define MPI2_EVENT_HBD_SAS_FLAGS_SATA_FRAME (0x01) 1147*4882a593Smuzhiyun 1148*4882a593Smuzhiyun /*use MPI2_SAS_NEG_LINK_RATE_ defines from mpi2_cnfg.h 1149*4882a593Smuzhiyun *for the NegotiatedLinkRate field */ 1150*4882a593Smuzhiyun 1151*4882a593Smuzhiyun typedef union _MPI2_EVENT_HBD_DESCRIPTOR { 1152*4882a593Smuzhiyun MPI2_EVENT_HBD_PHY_SAS Sas; 1153*4882a593Smuzhiyun } MPI2_EVENT_HBD_DESCRIPTOR, *PTR_MPI2_EVENT_HBD_DESCRIPTOR, 1154*4882a593Smuzhiyun Mpi2EventHbdDescriptor_t, *pMpi2EventHbdDescriptor_t; 1155*4882a593Smuzhiyun 1156*4882a593Smuzhiyun typedef struct _MPI2_EVENT_DATA_HBD_PHY { 1157*4882a593Smuzhiyun U8 DescriptorType; /*0x00 */ 1158*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1159*4882a593Smuzhiyun U16 Reserved2; /*0x02 */ 1160*4882a593Smuzhiyun U32 Reserved3; /*0x04 */ 1161*4882a593Smuzhiyun MPI2_EVENT_HBD_DESCRIPTOR Descriptor; /*0x08 */ 1162*4882a593Smuzhiyun } MPI2_EVENT_DATA_HBD_PHY, *PTR_MPI2_EVENT_DATA_HBD_PHY, 1163*4882a593Smuzhiyun Mpi2EventDataHbdPhy_t, 1164*4882a593Smuzhiyun *pMpi2EventDataMpi2EventDataHbdPhy_t; 1165*4882a593Smuzhiyun 1166*4882a593Smuzhiyun /*values for the DescriptorType field */ 1167*4882a593Smuzhiyun #define MPI2_EVENT_HBD_DT_SAS (0x01) 1168*4882a593Smuzhiyun 1169*4882a593Smuzhiyun 1170*4882a593Smuzhiyun /*PCIe Device Status Change Event data (MPI v2.6 and later) */ 1171*4882a593Smuzhiyun 1172*4882a593Smuzhiyun typedef struct _MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE { 1173*4882a593Smuzhiyun U16 TaskTag; /*0x00 */ 1174*4882a593Smuzhiyun U8 ReasonCode; /*0x02 */ 1175*4882a593Smuzhiyun U8 PhysicalPort; /*0x03 */ 1176*4882a593Smuzhiyun U8 ASC; /*0x04 */ 1177*4882a593Smuzhiyun U8 ASCQ; /*0x05 */ 1178*4882a593Smuzhiyun U16 DevHandle; /*0x06 */ 1179*4882a593Smuzhiyun U32 Reserved2; /*0x08 */ 1180*4882a593Smuzhiyun U64 WWID; /*0x0C */ 1181*4882a593Smuzhiyun U8 LUN[8]; /*0x14 */ 1182*4882a593Smuzhiyun } MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE, 1183*4882a593Smuzhiyun *PTR_MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE, 1184*4882a593Smuzhiyun Mpi26EventDataPCIeDeviceStatusChange_t, 1185*4882a593Smuzhiyun *pMpi26EventDataPCIeDeviceStatusChange_t; 1186*4882a593Smuzhiyun 1187*4882a593Smuzhiyun /*PCIe Device Status Change Event data ReasonCode values */ 1188*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_SMART_DATA (0x05) 1189*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_UNSUPPORTED (0x07) 1190*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08) 1191*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_TASK_ABORT_INTERNAL (0x09) 1192*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_ABORT_TASK_SET_INTERNAL (0x0A) 1193*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_CLEAR_TASK_SET_INTERNAL (0x0B) 1194*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_QUERY_TASK_INTERNAL (0x0C) 1195*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_ASYNC_NOTIFICATION (0x0D) 1196*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_CMP_INTERNAL_DEV_RESET (0x0E) 1197*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_CMP_TASK_ABORT_INTERNAL (0x0F) 1198*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_DEV_INIT_FAILURE (0x10) 1199*4882a593Smuzhiyun #define MPI26_EVENT_PCIDEV_STAT_RC_PCIE_HOT_RESET_FAILED (0x11) 1200*4882a593Smuzhiyun 1201*4882a593Smuzhiyun 1202*4882a593Smuzhiyun /*PCIe Enumeration Event data (MPI v2.6 and later) */ 1203*4882a593Smuzhiyun 1204*4882a593Smuzhiyun typedef struct _MPI26_EVENT_DATA_PCIE_ENUMERATION { 1205*4882a593Smuzhiyun U8 Flags; /*0x00 */ 1206*4882a593Smuzhiyun U8 ReasonCode; /*0x01 */ 1207*4882a593Smuzhiyun U8 PhysicalPort; /*0x02 */ 1208*4882a593Smuzhiyun U8 Reserved1; /*0x03 */ 1209*4882a593Smuzhiyun U32 EnumerationStatus; /*0x04 */ 1210*4882a593Smuzhiyun } MPI26_EVENT_DATA_PCIE_ENUMERATION, 1211*4882a593Smuzhiyun *PTR_MPI26_EVENT_DATA_PCIE_ENUMERATION, 1212*4882a593Smuzhiyun Mpi26EventDataPCIeEnumeration_t, 1213*4882a593Smuzhiyun *pMpi26EventDataPCIeEnumeration_t; 1214*4882a593Smuzhiyun 1215*4882a593Smuzhiyun /*PCIe Enumeration Event data Flags values */ 1216*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_ENUM_DEVICE_CHANGE (0x02) 1217*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_ENUM_IN_PROGRESS (0x01) 1218*4882a593Smuzhiyun 1219*4882a593Smuzhiyun /*PCIe Enumeration Event data ReasonCode values */ 1220*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_ENUM_RC_STARTED (0x01) 1221*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_ENUM_RC_COMPLETED (0x02) 1222*4882a593Smuzhiyun 1223*4882a593Smuzhiyun /*PCIe Enumeration Event data EnumerationStatus values */ 1224*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_ENUM_ES_MAX_SWITCHES_EXCEED (0x40000000) 1225*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_ENUM_ES_MAX_DEVICES_EXCEED (0x20000000) 1226*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_ENUM_ES_RESOURCES_EXHAUSTED (0x10000000) 1227*4882a593Smuzhiyun 1228*4882a593Smuzhiyun 1229*4882a593Smuzhiyun /*PCIe Topology Change List Event data (MPI v2.6 and later) */ 1230*4882a593Smuzhiyun 1231*4882a593Smuzhiyun /* 1232*4882a593Smuzhiyun *Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1233*4882a593Smuzhiyun *one and check NumEntries at runtime. 1234*4882a593Smuzhiyun */ 1235*4882a593Smuzhiyun #ifndef MPI26_EVENT_PCIE_TOPO_PORT_COUNT 1236*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PORT_COUNT (1) 1237*4882a593Smuzhiyun #endif 1238*4882a593Smuzhiyun 1239*4882a593Smuzhiyun typedef struct _MPI26_EVENT_PCIE_TOPO_PORT_ENTRY { 1240*4882a593Smuzhiyun U16 AttachedDevHandle; /*0x00 */ 1241*4882a593Smuzhiyun U8 PortStatus; /*0x02 */ 1242*4882a593Smuzhiyun U8 Reserved1; /*0x03 */ 1243*4882a593Smuzhiyun U8 CurrentPortInfo; /*0x04 */ 1244*4882a593Smuzhiyun U8 Reserved2; /*0x05 */ 1245*4882a593Smuzhiyun U8 PreviousPortInfo; /*0x06 */ 1246*4882a593Smuzhiyun U8 Reserved3; /*0x07 */ 1247*4882a593Smuzhiyun } MPI26_EVENT_PCIE_TOPO_PORT_ENTRY, 1248*4882a593Smuzhiyun *PTR_MPI26_EVENT_PCIE_TOPO_PORT_ENTRY, 1249*4882a593Smuzhiyun Mpi26EventPCIeTopoPortEntry_t, 1250*4882a593Smuzhiyun *pMpi26EventPCIeTopoPortEntry_t; 1251*4882a593Smuzhiyun 1252*4882a593Smuzhiyun /*PCIe Topology Change List Event data PortStatus values */ 1253*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PS_DEV_ADDED (0x01) 1254*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PS_NOT_RESPONDING (0x02) 1255*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PS_PORT_CHANGED (0x03) 1256*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PS_NO_CHANGE (0x04) 1257*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PS_DELAY_NOT_RESPONDING (0x05) 1258*4882a593Smuzhiyun 1259*4882a593Smuzhiyun /*PCIe Topology Change List Event data defines for CurrentPortInfo and 1260*4882a593Smuzhiyun *PreviousPortInfo 1261*4882a593Smuzhiyun */ 1262*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_LANE_MASK (0xF0) 1263*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_LANES_UNKNOWN (0x00) 1264*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_1_LANE (0x10) 1265*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_2_LANES (0x20) 1266*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_4_LANES (0x30) 1267*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_8_LANES (0x40) 1268*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_16_LANES (0x50) 1269*4882a593Smuzhiyun 1270*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_RATE_MASK (0x0F) 1271*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_RATE_UNKNOWN (0x00) 1272*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_RATE_DISABLED (0x01) 1273*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_RATE_2_5 (0x02) 1274*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_RATE_5_0 (0x03) 1275*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_RATE_8_0 (0x04) 1276*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_PI_RATE_16_0 (0x05) 1277*4882a593Smuzhiyun 1278*4882a593Smuzhiyun typedef struct _MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST { 1279*4882a593Smuzhiyun U16 EnclosureHandle; /*0x00 */ 1280*4882a593Smuzhiyun U16 SwitchDevHandle; /*0x02 */ 1281*4882a593Smuzhiyun U8 NumPorts; /*0x04 */ 1282*4882a593Smuzhiyun U8 Reserved1; /*0x05 */ 1283*4882a593Smuzhiyun U16 Reserved2; /*0x06 */ 1284*4882a593Smuzhiyun U8 NumEntries; /*0x08 */ 1285*4882a593Smuzhiyun U8 StartPortNum; /*0x09 */ 1286*4882a593Smuzhiyun U8 SwitchStatus; /*0x0A */ 1287*4882a593Smuzhiyun U8 PhysicalPort; /*0x0B */ 1288*4882a593Smuzhiyun MPI26_EVENT_PCIE_TOPO_PORT_ENTRY 1289*4882a593Smuzhiyun PortEntry[MPI26_EVENT_PCIE_TOPO_PORT_COUNT]; /*0x0C */ 1290*4882a593Smuzhiyun } MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST, 1291*4882a593Smuzhiyun *PTR_MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST, 1292*4882a593Smuzhiyun Mpi26EventDataPCIeTopologyChangeList_t, 1293*4882a593Smuzhiyun *pMpi26EventDataPCIeTopologyChangeList_t; 1294*4882a593Smuzhiyun 1295*4882a593Smuzhiyun /*PCIe Topology Change List Event data SwitchStatus values */ 1296*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_SS_NO_PCIE_SWITCH (0x00) 1297*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_SS_ADDED (0x01) 1298*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_SS_NOT_RESPONDING (0x02) 1299*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_SS_RESPONDING (0x03) 1300*4882a593Smuzhiyun #define MPI26_EVENT_PCIE_TOPO_SS_DELAY_NOT_RESPONDING (0x04) 1301*4882a593Smuzhiyun 1302*4882a593Smuzhiyun /*PCIe Link Counter Event data (MPI v2.6 and later) */ 1303*4882a593Smuzhiyun 1304*4882a593Smuzhiyun typedef struct _MPI26_EVENT_DATA_PCIE_LINK_COUNTER { 1305*4882a593Smuzhiyun U64 TimeStamp; /*0x00 */ 1306*4882a593Smuzhiyun U32 Reserved1; /*0x08 */ 1307*4882a593Smuzhiyun U8 LinkEventCode; /*0x0C */ 1308*4882a593Smuzhiyun U8 LinkNum; /*0x0D */ 1309*4882a593Smuzhiyun U16 Reserved2; /*0x0E */ 1310*4882a593Smuzhiyun U32 LinkEventInfo; /*0x10 */ 1311*4882a593Smuzhiyun U8 CounterType; /*0x14 */ 1312*4882a593Smuzhiyun U8 ThresholdWindow; /*0x15 */ 1313*4882a593Smuzhiyun U8 TimeUnits; /*0x16 */ 1314*4882a593Smuzhiyun U8 Reserved3; /*0x17 */ 1315*4882a593Smuzhiyun U32 EventThreshold; /*0x18 */ 1316*4882a593Smuzhiyun U16 ThresholdFlags; /*0x1C */ 1317*4882a593Smuzhiyun U16 Reserved4; /*0x1E */ 1318*4882a593Smuzhiyun } MPI26_EVENT_DATA_PCIE_LINK_COUNTER, 1319*4882a593Smuzhiyun *PTR_MPI26_EVENT_DATA_PCIE_LINK_COUNTER, 1320*4882a593Smuzhiyun Mpi26EventDataPcieLinkCounter_t, *pMpi26EventDataPcieLinkCounter_t; 1321*4882a593Smuzhiyun 1322*4882a593Smuzhiyun 1323*4882a593Smuzhiyun /*use MPI26_PCIELINK3_EVTCODE_ values from mpi2_cnfg.h for the LinkEventCode 1324*4882a593Smuzhiyun *field 1325*4882a593Smuzhiyun */ 1326*4882a593Smuzhiyun 1327*4882a593Smuzhiyun /*use MPI26_PCIELINK3_COUNTER_TYPE_ values from mpi2_cnfg.h for the CounterType 1328*4882a593Smuzhiyun *field 1329*4882a593Smuzhiyun */ 1330*4882a593Smuzhiyun 1331*4882a593Smuzhiyun /*use MPI26_PCIELINK3_TIME_UNITS_ values from mpi2_cnfg.h for the TimeUnits 1332*4882a593Smuzhiyun *field 1333*4882a593Smuzhiyun */ 1334*4882a593Smuzhiyun 1335*4882a593Smuzhiyun /*use MPI26_PCIELINK3_TFLAGS_ values from mpi2_cnfg.h for the ThresholdFlags 1336*4882a593Smuzhiyun *field 1337*4882a593Smuzhiyun */ 1338*4882a593Smuzhiyun 1339*4882a593Smuzhiyun /**************************************************************************** 1340*4882a593Smuzhiyun * EventAck message 1341*4882a593Smuzhiyun ****************************************************************************/ 1342*4882a593Smuzhiyun 1343*4882a593Smuzhiyun /*EventAck Request message */ 1344*4882a593Smuzhiyun typedef struct _MPI2_EVENT_ACK_REQUEST { 1345*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 1346*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 1347*4882a593Smuzhiyun U8 Function; /*0x03 */ 1348*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1349*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1350*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1351*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1352*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1353*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1354*4882a593Smuzhiyun U16 Event; /*0x0C */ 1355*4882a593Smuzhiyun U16 Reserved5; /*0x0E */ 1356*4882a593Smuzhiyun U32 EventContext; /*0x10 */ 1357*4882a593Smuzhiyun } MPI2_EVENT_ACK_REQUEST, *PTR_MPI2_EVENT_ACK_REQUEST, 1358*4882a593Smuzhiyun Mpi2EventAckRequest_t, *pMpi2EventAckRequest_t; 1359*4882a593Smuzhiyun 1360*4882a593Smuzhiyun /*EventAck Reply message */ 1361*4882a593Smuzhiyun typedef struct _MPI2_EVENT_ACK_REPLY { 1362*4882a593Smuzhiyun U16 Reserved1; /*0x00 */ 1363*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 1364*4882a593Smuzhiyun U8 Function; /*0x03 */ 1365*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1366*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1367*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1368*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1369*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1370*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1371*4882a593Smuzhiyun U16 Reserved5; /*0x0C */ 1372*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 1373*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 1374*4882a593Smuzhiyun } MPI2_EVENT_ACK_REPLY, *PTR_MPI2_EVENT_ACK_REPLY, 1375*4882a593Smuzhiyun Mpi2EventAckReply_t, *pMpi2EventAckReply_t; 1376*4882a593Smuzhiyun 1377*4882a593Smuzhiyun /**************************************************************************** 1378*4882a593Smuzhiyun * SendHostMessage message 1379*4882a593Smuzhiyun ****************************************************************************/ 1380*4882a593Smuzhiyun 1381*4882a593Smuzhiyun /*SendHostMessage Request message */ 1382*4882a593Smuzhiyun typedef struct _MPI2_SEND_HOST_MESSAGE_REQUEST { 1383*4882a593Smuzhiyun U16 HostDataLength; /*0x00 */ 1384*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 1385*4882a593Smuzhiyun U8 Function; /*0x03 */ 1386*4882a593Smuzhiyun U16 Reserved1; /*0x04 */ 1387*4882a593Smuzhiyun U8 Reserved2; /*0x06 */ 1388*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1389*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1390*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1391*4882a593Smuzhiyun U16 Reserved3; /*0x0A */ 1392*4882a593Smuzhiyun U8 Reserved4; /*0x0C */ 1393*4882a593Smuzhiyun U8 DestVF_ID; /*0x0D */ 1394*4882a593Smuzhiyun U16 Reserved5; /*0x0E */ 1395*4882a593Smuzhiyun U32 Reserved6; /*0x10 */ 1396*4882a593Smuzhiyun U32 Reserved7; /*0x14 */ 1397*4882a593Smuzhiyun U32 Reserved8; /*0x18 */ 1398*4882a593Smuzhiyun U32 Reserved9; /*0x1C */ 1399*4882a593Smuzhiyun U32 Reserved10; /*0x20 */ 1400*4882a593Smuzhiyun U32 HostData[1]; /*0x24 */ 1401*4882a593Smuzhiyun } MPI2_SEND_HOST_MESSAGE_REQUEST, 1402*4882a593Smuzhiyun *PTR_MPI2_SEND_HOST_MESSAGE_REQUEST, 1403*4882a593Smuzhiyun Mpi2SendHostMessageRequest_t, 1404*4882a593Smuzhiyun *pMpi2SendHostMessageRequest_t; 1405*4882a593Smuzhiyun 1406*4882a593Smuzhiyun /*SendHostMessage Reply message */ 1407*4882a593Smuzhiyun typedef struct _MPI2_SEND_HOST_MESSAGE_REPLY { 1408*4882a593Smuzhiyun U16 HostDataLength; /*0x00 */ 1409*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 1410*4882a593Smuzhiyun U8 Function; /*0x03 */ 1411*4882a593Smuzhiyun U16 Reserved1; /*0x04 */ 1412*4882a593Smuzhiyun U8 Reserved2; /*0x06 */ 1413*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1414*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1415*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1416*4882a593Smuzhiyun U16 Reserved3; /*0x0A */ 1417*4882a593Smuzhiyun U16 Reserved4; /*0x0C */ 1418*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 1419*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 1420*4882a593Smuzhiyun } MPI2_SEND_HOST_MESSAGE_REPLY, *PTR_MPI2_SEND_HOST_MESSAGE_REPLY, 1421*4882a593Smuzhiyun Mpi2SendHostMessageReply_t, *pMpi2SendHostMessageReply_t; 1422*4882a593Smuzhiyun 1423*4882a593Smuzhiyun /**************************************************************************** 1424*4882a593Smuzhiyun * FWDownload message 1425*4882a593Smuzhiyun ****************************************************************************/ 1426*4882a593Smuzhiyun 1427*4882a593Smuzhiyun /*MPI v2.0 FWDownload Request message */ 1428*4882a593Smuzhiyun typedef struct _MPI2_FW_DOWNLOAD_REQUEST { 1429*4882a593Smuzhiyun U8 ImageType; /*0x00 */ 1430*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1431*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 1432*4882a593Smuzhiyun U8 Function; /*0x03 */ 1433*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1434*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1435*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1436*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1437*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1438*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1439*4882a593Smuzhiyun U32 TotalImageSize; /*0x0C */ 1440*4882a593Smuzhiyun U32 Reserved5; /*0x10 */ 1441*4882a593Smuzhiyun MPI2_MPI_SGE_UNION SGL; /*0x14 */ 1442*4882a593Smuzhiyun } MPI2_FW_DOWNLOAD_REQUEST, *PTR_MPI2_FW_DOWNLOAD_REQUEST, 1443*4882a593Smuzhiyun Mpi2FWDownloadRequest, *pMpi2FWDownloadRequest; 1444*4882a593Smuzhiyun 1445*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT (0x01) 1446*4882a593Smuzhiyun 1447*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_FW (0x01) 1448*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_BIOS (0x02) 1449*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_MANUFACTURING (0x06) 1450*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_1 (0x07) 1451*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_2 (0x08) 1452*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_MEGARAID (0x09) 1453*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_COMPLETE (0x0A) 1454*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 1455*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY (0x0C) 1456*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP (0x0D) 1457*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_SBR (0x0E) 1458*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_SBR_BACKUP (0x0F) 1459*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_HIIM (0x10) 1460*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_HIIA (0x11) 1461*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_CTLR (0x12) 1462*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_IMR_FIRMWARE (0x13) 1463*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_MR_NVDATA (0x14) 1464*4882a593Smuzhiyun /*MPI v2.6 and newer */ 1465*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_CPLD (0x15) 1466*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_PSOC (0x16) 1467*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_COREDUMP (0x17) 1468*4882a593Smuzhiyun #define MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC (0xF0) 1469*4882a593Smuzhiyun 1470*4882a593Smuzhiyun /*MPI v2.0 FWDownload TransactionContext Element */ 1471*4882a593Smuzhiyun typedef struct _MPI2_FW_DOWNLOAD_TCSGE { 1472*4882a593Smuzhiyun U8 Reserved1; /*0x00 */ 1473*4882a593Smuzhiyun U8 ContextSize; /*0x01 */ 1474*4882a593Smuzhiyun U8 DetailsLength; /*0x02 */ 1475*4882a593Smuzhiyun U8 Flags; /*0x03 */ 1476*4882a593Smuzhiyun U32 Reserved2; /*0x04 */ 1477*4882a593Smuzhiyun U32 ImageOffset; /*0x08 */ 1478*4882a593Smuzhiyun U32 ImageSize; /*0x0C */ 1479*4882a593Smuzhiyun } MPI2_FW_DOWNLOAD_TCSGE, *PTR_MPI2_FW_DOWNLOAD_TCSGE, 1480*4882a593Smuzhiyun Mpi2FWDownloadTCSGE_t, *pMpi2FWDownloadTCSGE_t; 1481*4882a593Smuzhiyun 1482*4882a593Smuzhiyun /*MPI v2.5 FWDownload Request message */ 1483*4882a593Smuzhiyun typedef struct _MPI25_FW_DOWNLOAD_REQUEST { 1484*4882a593Smuzhiyun U8 ImageType; /*0x00 */ 1485*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1486*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 1487*4882a593Smuzhiyun U8 Function; /*0x03 */ 1488*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1489*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1490*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1491*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1492*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1493*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1494*4882a593Smuzhiyun U32 TotalImageSize; /*0x0C */ 1495*4882a593Smuzhiyun U32 Reserved5; /*0x10 */ 1496*4882a593Smuzhiyun U32 Reserved6; /*0x14 */ 1497*4882a593Smuzhiyun U32 ImageOffset; /*0x18 */ 1498*4882a593Smuzhiyun U32 ImageSize; /*0x1C */ 1499*4882a593Smuzhiyun MPI25_SGE_IO_UNION SGL; /*0x20 */ 1500*4882a593Smuzhiyun } MPI25_FW_DOWNLOAD_REQUEST, *PTR_MPI25_FW_DOWNLOAD_REQUEST, 1501*4882a593Smuzhiyun Mpi25FWDownloadRequest, *pMpi25FWDownloadRequest; 1502*4882a593Smuzhiyun 1503*4882a593Smuzhiyun /*FWDownload Reply message */ 1504*4882a593Smuzhiyun typedef struct _MPI2_FW_DOWNLOAD_REPLY { 1505*4882a593Smuzhiyun U8 ImageType; /*0x00 */ 1506*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1507*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 1508*4882a593Smuzhiyun U8 Function; /*0x03 */ 1509*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1510*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1511*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1512*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1513*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1514*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1515*4882a593Smuzhiyun U16 Reserved5; /*0x0C */ 1516*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 1517*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 1518*4882a593Smuzhiyun } MPI2_FW_DOWNLOAD_REPLY, *PTR_MPI2_FW_DOWNLOAD_REPLY, 1519*4882a593Smuzhiyun Mpi2FWDownloadReply_t, *pMpi2FWDownloadReply_t; 1520*4882a593Smuzhiyun 1521*4882a593Smuzhiyun /**************************************************************************** 1522*4882a593Smuzhiyun * FWUpload message 1523*4882a593Smuzhiyun ****************************************************************************/ 1524*4882a593Smuzhiyun 1525*4882a593Smuzhiyun /*MPI v2.0 FWUpload Request message */ 1526*4882a593Smuzhiyun typedef struct _MPI2_FW_UPLOAD_REQUEST { 1527*4882a593Smuzhiyun U8 ImageType; /*0x00 */ 1528*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1529*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 1530*4882a593Smuzhiyun U8 Function; /*0x03 */ 1531*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1532*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1533*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1534*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1535*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1536*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1537*4882a593Smuzhiyun U32 Reserved5; /*0x0C */ 1538*4882a593Smuzhiyun U32 Reserved6; /*0x10 */ 1539*4882a593Smuzhiyun MPI2_MPI_SGE_UNION SGL; /*0x14 */ 1540*4882a593Smuzhiyun } MPI2_FW_UPLOAD_REQUEST, *PTR_MPI2_FW_UPLOAD_REQUEST, 1541*4882a593Smuzhiyun Mpi2FWUploadRequest_t, *pMpi2FWUploadRequest_t; 1542*4882a593Smuzhiyun 1543*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_FW_CURRENT (0x00) 1544*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_FW_FLASH (0x01) 1545*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_BIOS_FLASH (0x02) 1546*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_FW_BACKUP (0x05) 1547*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_MANUFACTURING (0x06) 1548*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_CONFIG_1 (0x07) 1549*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_CONFIG_2 (0x08) 1550*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_MEGARAID (0x09) 1551*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_COMPLETE (0x0A) 1552*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 1553*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_CBB_BACKUP (0x0D) 1554*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_SBR (0x0E) 1555*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_SBR_BACKUP (0x0F) 1556*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_HIIM (0x10) 1557*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_HIIA (0x11) 1558*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_CTLR (0x12) 1559*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_IMR_FIRMWARE (0x13) 1560*4882a593Smuzhiyun #define MPI2_FW_UPLOAD_ITYPE_MR_NVDATA (0x14) 1561*4882a593Smuzhiyun 1562*4882a593Smuzhiyun 1563*4882a593Smuzhiyun /*MPI v2.0 FWUpload TransactionContext Element */ 1564*4882a593Smuzhiyun typedef struct _MPI2_FW_UPLOAD_TCSGE { 1565*4882a593Smuzhiyun U8 Reserved1; /*0x00 */ 1566*4882a593Smuzhiyun U8 ContextSize; /*0x01 */ 1567*4882a593Smuzhiyun U8 DetailsLength; /*0x02 */ 1568*4882a593Smuzhiyun U8 Flags; /*0x03 */ 1569*4882a593Smuzhiyun U32 Reserved2; /*0x04 */ 1570*4882a593Smuzhiyun U32 ImageOffset; /*0x08 */ 1571*4882a593Smuzhiyun U32 ImageSize; /*0x0C */ 1572*4882a593Smuzhiyun } MPI2_FW_UPLOAD_TCSGE, *PTR_MPI2_FW_UPLOAD_TCSGE, 1573*4882a593Smuzhiyun Mpi2FWUploadTCSGE_t, *pMpi2FWUploadTCSGE_t; 1574*4882a593Smuzhiyun 1575*4882a593Smuzhiyun /*MPI v2.5 FWUpload Request message */ 1576*4882a593Smuzhiyun typedef struct _MPI25_FW_UPLOAD_REQUEST { 1577*4882a593Smuzhiyun U8 ImageType; /*0x00 */ 1578*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1579*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 1580*4882a593Smuzhiyun U8 Function; /*0x03 */ 1581*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1582*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1583*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1584*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1585*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1586*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1587*4882a593Smuzhiyun U32 Reserved5; /*0x0C */ 1588*4882a593Smuzhiyun U32 Reserved6; /*0x10 */ 1589*4882a593Smuzhiyun U32 Reserved7; /*0x14 */ 1590*4882a593Smuzhiyun U32 ImageOffset; /*0x18 */ 1591*4882a593Smuzhiyun U32 ImageSize; /*0x1C */ 1592*4882a593Smuzhiyun MPI25_SGE_IO_UNION SGL; /*0x20 */ 1593*4882a593Smuzhiyun } MPI25_FW_UPLOAD_REQUEST, *PTR_MPI25_FW_UPLOAD_REQUEST, 1594*4882a593Smuzhiyun Mpi25FWUploadRequest_t, *pMpi25FWUploadRequest_t; 1595*4882a593Smuzhiyun 1596*4882a593Smuzhiyun /*FWUpload Reply message */ 1597*4882a593Smuzhiyun typedef struct _MPI2_FW_UPLOAD_REPLY { 1598*4882a593Smuzhiyun U8 ImageType; /*0x00 */ 1599*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1600*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 1601*4882a593Smuzhiyun U8 Function; /*0x03 */ 1602*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1603*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1604*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1605*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1606*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1607*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1608*4882a593Smuzhiyun U16 Reserved5; /*0x0C */ 1609*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 1610*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 1611*4882a593Smuzhiyun U32 ActualImageSize; /*0x14 */ 1612*4882a593Smuzhiyun } MPI2_FW_UPLOAD_REPLY, *PTR_MPI2_FW_UPLOAD_REPLY, 1613*4882a593Smuzhiyun Mpi2FWUploadReply_t, *pMPi2FWUploadReply_t; 1614*4882a593Smuzhiyun 1615*4882a593Smuzhiyun 1616*4882a593Smuzhiyun /**************************************************************************** 1617*4882a593Smuzhiyun * PowerManagementControl message 1618*4882a593Smuzhiyun ****************************************************************************/ 1619*4882a593Smuzhiyun 1620*4882a593Smuzhiyun /*PowerManagementControl Request message */ 1621*4882a593Smuzhiyun typedef struct _MPI2_PWR_MGMT_CONTROL_REQUEST { 1622*4882a593Smuzhiyun U8 Feature; /*0x00 */ 1623*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1624*4882a593Smuzhiyun U8 ChainOffset; /*0x02 */ 1625*4882a593Smuzhiyun U8 Function; /*0x03 */ 1626*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1627*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1628*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1629*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1630*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1631*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1632*4882a593Smuzhiyun U8 Parameter1; /*0x0C */ 1633*4882a593Smuzhiyun U8 Parameter2; /*0x0D */ 1634*4882a593Smuzhiyun U8 Parameter3; /*0x0E */ 1635*4882a593Smuzhiyun U8 Parameter4; /*0x0F */ 1636*4882a593Smuzhiyun U32 Reserved5; /*0x10 */ 1637*4882a593Smuzhiyun U32 Reserved6; /*0x14 */ 1638*4882a593Smuzhiyun } MPI2_PWR_MGMT_CONTROL_REQUEST, *PTR_MPI2_PWR_MGMT_CONTROL_REQUEST, 1639*4882a593Smuzhiyun Mpi2PwrMgmtControlRequest_t, *pMpi2PwrMgmtControlRequest_t; 1640*4882a593Smuzhiyun 1641*4882a593Smuzhiyun /*defines for the Feature field */ 1642*4882a593Smuzhiyun #define MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND (0x01) 1643*4882a593Smuzhiyun #define MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION (0x02) 1644*4882a593Smuzhiyun #define MPI2_PM_CONTROL_FEATURE_PCIE_LINK (0x03) /*obsolete */ 1645*4882a593Smuzhiyun #define MPI2_PM_CONTROL_FEATURE_IOC_SPEED (0x04) 1646*4882a593Smuzhiyun #define MPI2_PM_CONTROL_FEATURE_GLOBAL_PWR_MGMT_MODE (0x05) 1647*4882a593Smuzhiyun #define MPI2_PM_CONTROL_FEATURE_MIN_PRODUCT_SPECIFIC (0x80) 1648*4882a593Smuzhiyun #define MPI2_PM_CONTROL_FEATURE_MAX_PRODUCT_SPECIFIC (0xFF) 1649*4882a593Smuzhiyun 1650*4882a593Smuzhiyun /*parameter usage for the MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND Feature */ 1651*4882a593Smuzhiyun /*Parameter1 contains a PHY number */ 1652*4882a593Smuzhiyun /*Parameter2 indicates power condition action using these defines */ 1653*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_PARTIAL (0x01) 1654*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_SLUMBER (0x02) 1655*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_EXIT_PWR_MGMT (0x03) 1656*4882a593Smuzhiyun /*Parameter3 and Parameter4 are reserved */ 1657*4882a593Smuzhiyun 1658*4882a593Smuzhiyun /*parameter usage for the MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION 1659*4882a593Smuzhiyun * Feature */ 1660*4882a593Smuzhiyun /*Parameter1 contains SAS port width modulation group number */ 1661*4882a593Smuzhiyun /*Parameter2 indicates IOC action using these defines */ 1662*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_REQUEST_OWNERSHIP (0x01) 1663*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_CHANGE_MODULATION (0x02) 1664*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_RELINQUISH_OWNERSHIP (0x03) 1665*4882a593Smuzhiyun /*Parameter3 indicates desired modulation level using these defines */ 1666*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM3_25_PERCENT (0x00) 1667*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM3_50_PERCENT (0x01) 1668*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM3_75_PERCENT (0x02) 1669*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM3_100_PERCENT (0x03) 1670*4882a593Smuzhiyun /*Parameter4 is reserved */ 1671*4882a593Smuzhiyun 1672*4882a593Smuzhiyun /*this next set (_PCIE_LINK) is obsolete */ 1673*4882a593Smuzhiyun /*parameter usage for the MPI2_PM_CONTROL_FEATURE_PCIE_LINK Feature */ 1674*4882a593Smuzhiyun /*Parameter1 indicates desired PCIe link speed using these defines */ 1675*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_PCIE_2_5_GBPS (0x00) /*obsolete */ 1676*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_PCIE_5_0_GBPS (0x01) /*obsolete */ 1677*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_PCIE_8_0_GBPS (0x02) /*obsolete */ 1678*4882a593Smuzhiyun /*Parameter2 indicates desired PCIe link width using these defines */ 1679*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_WIDTH_X1 (0x01) /*obsolete */ 1680*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_WIDTH_X2 (0x02) /*obsolete */ 1681*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_WIDTH_X4 (0x04) /*obsolete */ 1682*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_WIDTH_X8 (0x08) /*obsolete */ 1683*4882a593Smuzhiyun /*Parameter3 and Parameter4 are reserved */ 1684*4882a593Smuzhiyun 1685*4882a593Smuzhiyun /*parameter usage for the MPI2_PM_CONTROL_FEATURE_IOC_SPEED Feature */ 1686*4882a593Smuzhiyun /*Parameter1 indicates desired IOC hardware clock speed using these defines */ 1687*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_FULL_IOC_SPEED (0x01) 1688*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_HALF_IOC_SPEED (0x02) 1689*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_QUARTER_IOC_SPEED (0x04) 1690*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_EIGHTH_IOC_SPEED (0x08) 1691*4882a593Smuzhiyun /*Parameter2, Parameter3, and Parameter4 are reserved */ 1692*4882a593Smuzhiyun 1693*4882a593Smuzhiyun /*parameter usage for the MPI2_PM_CONTROL_FEATURE_GLOBAL_PWR_MGMT_MODE Feature*/ 1694*4882a593Smuzhiyun /*Parameter1 indicates host action regarding global power management mode */ 1695*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_TAKE_CONTROL (0x01) 1696*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_CHANGE_GLOBAL_MODE (0x02) 1697*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM1_RELEASE_CONTROL (0x03) 1698*4882a593Smuzhiyun /*Parameter2 indicates the requested global power management mode */ 1699*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_FULL_PWR_PERF (0x01) 1700*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_REDUCED_PWR_PERF (0x08) 1701*4882a593Smuzhiyun #define MPI2_PM_CONTROL_PARAM2_STANDBY (0x40) 1702*4882a593Smuzhiyun /*Parameter3 and Parameter4 are reserved */ 1703*4882a593Smuzhiyun 1704*4882a593Smuzhiyun /*PowerManagementControl Reply message */ 1705*4882a593Smuzhiyun typedef struct _MPI2_PWR_MGMT_CONTROL_REPLY { 1706*4882a593Smuzhiyun U8 Feature; /*0x00 */ 1707*4882a593Smuzhiyun U8 Reserved1; /*0x01 */ 1708*4882a593Smuzhiyun U8 MsgLength; /*0x02 */ 1709*4882a593Smuzhiyun U8 Function; /*0x03 */ 1710*4882a593Smuzhiyun U16 Reserved2; /*0x04 */ 1711*4882a593Smuzhiyun U8 Reserved3; /*0x06 */ 1712*4882a593Smuzhiyun U8 MsgFlags; /*0x07 */ 1713*4882a593Smuzhiyun U8 VP_ID; /*0x08 */ 1714*4882a593Smuzhiyun U8 VF_ID; /*0x09 */ 1715*4882a593Smuzhiyun U16 Reserved4; /*0x0A */ 1716*4882a593Smuzhiyun U16 Reserved5; /*0x0C */ 1717*4882a593Smuzhiyun U16 IOCStatus; /*0x0E */ 1718*4882a593Smuzhiyun U32 IOCLogInfo; /*0x10 */ 1719*4882a593Smuzhiyun } MPI2_PWR_MGMT_CONTROL_REPLY, *PTR_MPI2_PWR_MGMT_CONTROL_REPLY, 1720*4882a593Smuzhiyun Mpi2PwrMgmtControlReply_t, *pMpi2PwrMgmtControlReply_t; 1721*4882a593Smuzhiyun 1722*4882a593Smuzhiyun /**************************************************************************** 1723*4882a593Smuzhiyun * IO Unit Control messages (MPI v2.6 and later only.) 1724*4882a593Smuzhiyun ****************************************************************************/ 1725*4882a593Smuzhiyun 1726*4882a593Smuzhiyun /* IO Unit Control Request Message */ 1727*4882a593Smuzhiyun typedef struct _MPI26_IOUNIT_CONTROL_REQUEST { 1728*4882a593Smuzhiyun U8 Operation; /* 0x00 */ 1729*4882a593Smuzhiyun U8 Reserved1; /* 0x01 */ 1730*4882a593Smuzhiyun U8 ChainOffset; /* 0x02 */ 1731*4882a593Smuzhiyun U8 Function; /* 0x03 */ 1732*4882a593Smuzhiyun U16 DevHandle; /* 0x04 */ 1733*4882a593Smuzhiyun U8 IOCParameter; /* 0x06 */ 1734*4882a593Smuzhiyun U8 MsgFlags; /* 0x07 */ 1735*4882a593Smuzhiyun U8 VP_ID; /* 0x08 */ 1736*4882a593Smuzhiyun U8 VF_ID; /* 0x09 */ 1737*4882a593Smuzhiyun U16 Reserved3; /* 0x0A */ 1738*4882a593Smuzhiyun U16 Reserved4; /* 0x0C */ 1739*4882a593Smuzhiyun U8 PhyNum; /* 0x0E */ 1740*4882a593Smuzhiyun U8 PrimFlags; /* 0x0F */ 1741*4882a593Smuzhiyun U32 Primitive; /* 0x10 */ 1742*4882a593Smuzhiyun U8 LookupMethod; /* 0x14 */ 1743*4882a593Smuzhiyun U8 Reserved5; /* 0x15 */ 1744*4882a593Smuzhiyun U16 SlotNumber; /* 0x16 */ 1745*4882a593Smuzhiyun U64 LookupAddress; /* 0x18 */ 1746*4882a593Smuzhiyun U32 IOCParameterValue; /* 0x20 */ 1747*4882a593Smuzhiyun U32 Reserved7; /* 0x24 */ 1748*4882a593Smuzhiyun U32 Reserved8; /* 0x28 */ 1749*4882a593Smuzhiyun } MPI26_IOUNIT_CONTROL_REQUEST, 1750*4882a593Smuzhiyun *PTR_MPI26_IOUNIT_CONTROL_REQUEST, 1751*4882a593Smuzhiyun Mpi26IoUnitControlRequest_t, 1752*4882a593Smuzhiyun *pMpi26IoUnitControlRequest_t; 1753*4882a593Smuzhiyun 1754*4882a593Smuzhiyun /* values for the Operation field */ 1755*4882a593Smuzhiyun #define MPI26_CTRL_OP_CLEAR_ALL_PERSISTENT (0x02) 1756*4882a593Smuzhiyun #define MPI26_CTRL_OP_SAS_PHY_LINK_RESET (0x06) 1757*4882a593Smuzhiyun #define MPI26_CTRL_OP_SAS_PHY_HARD_RESET (0x07) 1758*4882a593Smuzhiyun #define MPI26_CTRL_OP_PHY_CLEAR_ERROR_LOG (0x08) 1759*4882a593Smuzhiyun #define MPI26_CTRL_OP_LINK_CLEAR_ERROR_LOG (0x09) 1760*4882a593Smuzhiyun #define MPI26_CTRL_OP_SAS_SEND_PRIMITIVE (0x0A) 1761*4882a593Smuzhiyun #define MPI26_CTRL_OP_FORCE_FULL_DISCOVERY (0x0B) 1762*4882a593Smuzhiyun #define MPI26_CTRL_OP_REMOVE_DEVICE (0x0D) 1763*4882a593Smuzhiyun #define MPI26_CTRL_OP_LOOKUP_MAPPING (0x0E) 1764*4882a593Smuzhiyun #define MPI26_CTRL_OP_SET_IOC_PARAMETER (0x0F) 1765*4882a593Smuzhiyun #define MPI26_CTRL_OP_ENABLE_FP_DEVICE (0x10) 1766*4882a593Smuzhiyun #define MPI26_CTRL_OP_DISABLE_FP_DEVICE (0x11) 1767*4882a593Smuzhiyun #define MPI26_CTRL_OP_ENABLE_FP_ALL (0x12) 1768*4882a593Smuzhiyun #define MPI26_CTRL_OP_DISABLE_FP_ALL (0x13) 1769*4882a593Smuzhiyun #define MPI26_CTRL_OP_DEV_ENABLE_NCQ (0x14) 1770*4882a593Smuzhiyun #define MPI26_CTRL_OP_DEV_DISABLE_NCQ (0x15) 1771*4882a593Smuzhiyun #define MPI26_CTRL_OP_SHUTDOWN (0x16) 1772*4882a593Smuzhiyun #define MPI26_CTRL_OP_DEV_ENABLE_PERSIST_CONNECTION (0x17) 1773*4882a593Smuzhiyun #define MPI26_CTRL_OP_DEV_DISABLE_PERSIST_CONNECTION (0x18) 1774*4882a593Smuzhiyun #define MPI26_CTRL_OP_DEV_CLOSE_PERSIST_CONNECTION (0x19) 1775*4882a593Smuzhiyun #define MPI26_CTRL_OP_ENABLE_NVME_SGL_FORMAT (0x1A) 1776*4882a593Smuzhiyun #define MPI26_CTRL_OP_DISABLE_NVME_SGL_FORMAT (0x1B) 1777*4882a593Smuzhiyun #define MPI26_CTRL_OP_PRODUCT_SPECIFIC_MIN (0x80) 1778*4882a593Smuzhiyun 1779*4882a593Smuzhiyun /* values for the PrimFlags field */ 1780*4882a593Smuzhiyun #define MPI26_CTRL_PRIMFLAGS_SINGLE (0x08) 1781*4882a593Smuzhiyun #define MPI26_CTRL_PRIMFLAGS_TRIPLE (0x02) 1782*4882a593Smuzhiyun #define MPI26_CTRL_PRIMFLAGS_REDUNDANT (0x01) 1783*4882a593Smuzhiyun 1784*4882a593Smuzhiyun /* values for the LookupMethod field */ 1785*4882a593Smuzhiyun #define MPI26_CTRL_LOOKUP_METHOD_WWID_ADDRESS (0x01) 1786*4882a593Smuzhiyun #define MPI26_CTRL_LOOKUP_METHOD_ENCLOSURE_SLOT (0x02) 1787*4882a593Smuzhiyun #define MPI26_CTRL_LOOKUP_METHOD_SAS_DEVICE_NAME (0x03) 1788*4882a593Smuzhiyun 1789*4882a593Smuzhiyun 1790*4882a593Smuzhiyun /* IO Unit Control Reply Message */ 1791*4882a593Smuzhiyun typedef struct _MPI26_IOUNIT_CONTROL_REPLY { 1792*4882a593Smuzhiyun U8 Operation; /* 0x00 */ 1793*4882a593Smuzhiyun U8 Reserved1; /* 0x01 */ 1794*4882a593Smuzhiyun U8 MsgLength; /* 0x02 */ 1795*4882a593Smuzhiyun U8 Function; /* 0x03 */ 1796*4882a593Smuzhiyun U16 DevHandle; /* 0x04 */ 1797*4882a593Smuzhiyun U8 IOCParameter; /* 0x06 */ 1798*4882a593Smuzhiyun U8 MsgFlags; /* 0x07 */ 1799*4882a593Smuzhiyun U8 VP_ID; /* 0x08 */ 1800*4882a593Smuzhiyun U8 VF_ID; /* 0x09 */ 1801*4882a593Smuzhiyun U16 Reserved3; /* 0x0A */ 1802*4882a593Smuzhiyun U16 Reserved4; /* 0x0C */ 1803*4882a593Smuzhiyun U16 IOCStatus; /* 0x0E */ 1804*4882a593Smuzhiyun U32 IOCLogInfo; /* 0x10 */ 1805*4882a593Smuzhiyun } MPI26_IOUNIT_CONTROL_REPLY, 1806*4882a593Smuzhiyun *PTR_MPI26_IOUNIT_CONTROL_REPLY, 1807*4882a593Smuzhiyun Mpi26IoUnitControlReply_t, 1808*4882a593Smuzhiyun *pMpi26IoUnitControlReply_t; 1809*4882a593Smuzhiyun 1810*4882a593Smuzhiyun 1811*4882a593Smuzhiyun #endif 1812