mpi2_ioc.h revision 283661
1265236Sken/*- 2283661Sslm * Copyright (c) 2012-2015 LSI Corp. 3283661Sslm * Copyright (c) 2013-2015 Avago Technologies 4265236Sken * All rights reserved. 5265236Sken * 6265236Sken * Redistribution and use in source and binary forms, with or without 7265236Sken * modification, are permitted provided that the following conditions 8265236Sken * are met: 9265236Sken * 1. Redistributions of source code must retain the above copyright 10265236Sken * notice, this list of conditions and the following disclaimer. 11265236Sken * 2. Redistributions in binary form must reproduce the above copyright 12265236Sken * notice, this list of conditions and the following disclaimer in the 13265236Sken * documentation and/or other materials provided with the distribution. 14265236Sken * 3. Neither the name of the author nor the names of any co-contributors 15265236Sken * may be used to endorse or promote products derived from this software 16265236Sken * without specific prior written permission. 17265236Sken * 18265236Sken * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19265236Sken * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20265236Sken * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21265236Sken * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22265236Sken * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23265236Sken * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24265236Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25265236Sken * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26265236Sken * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27265236Sken * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28265236Sken * SUCH DAMAGE. 29265236Sken * 30283661Sslm * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD 31265236Sken * 32265236Sken * $FreeBSD: head/sys/dev/mpr/mpi/mpi2_ioc.h 283661 2015-05-28 18:24:22Z slm $ 33265236Sken */ 34265236Sken 35265236Sken/* 36283661Sslm * Copyright (c) 2000-2015 LSI Corporation. 37283661Sslm * Copyright (c) 2013-2015 Avago Technologies 38265236Sken * 39265236Sken * 40265236Sken * Name: mpi2_ioc.h 41265236Sken * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages 42265236Sken * Creation Date: October 11, 2006 43265236Sken * 44265236Sken * mpi2_ioc.h Version: 02.00.24 45265236Sken * 46265236Sken * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 47265236Sken * prefix are for use only on MPI v2.5 products, and must not be used 48265236Sken * with MPI v2.0 products. Unless otherwise noted, names beginning with 49265236Sken * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. 50265236Sken * 51265236Sken * Version History 52265236Sken * --------------- 53265236Sken * 54265236Sken * Date Version Description 55265236Sken * -------- -------- ------------------------------------------------------ 56265236Sken * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 57265236Sken * 06-04-07 02.00.01 In IOCFacts Reply structure, renamed MaxDevices to 58265236Sken * MaxTargets. 59265236Sken * Added TotalImageSize field to FWDownload Request. 60265236Sken * Added reserved words to FWUpload Request. 61265236Sken * 06-26-07 02.00.02 Added IR Configuration Change List Event. 62265236Sken * 08-31-07 02.00.03 Removed SystemReplyQueueDepth field from the IOCInit 63265236Sken * request and replaced it with 64265236Sken * ReplyDescriptorPostQueueDepth and ReplyFreeQueueDepth. 65265236Sken * Replaced the MinReplyQueueDepth field of the IOCFacts 66265236Sken * reply with MaxReplyDescriptorPostQueueDepth. 67265236Sken * Added MPI2_RDPQ_DEPTH_MIN define to specify the minimum 68265236Sken * depth for the Reply Descriptor Post Queue. 69265236Sken * Added SASAddress field to Initiator Device Table 70265236Sken * Overflow Event data. 71265236Sken * 10-31-07 02.00.04 Added ReasonCode MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING 72265236Sken * for SAS Initiator Device Status Change Event data. 73265236Sken * Modified Reason Code defines for SAS Topology Change 74265236Sken * List Event data, including adding a bit for PHY Vacant 75265236Sken * status, and adding a mask for the Reason Code. 76265236Sken * Added define for 77265236Sken * MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING. 78265236Sken * Added define for MPI2_EXT_IMAGE_TYPE_MEGARAID. 79265236Sken * 12-18-07 02.00.05 Added Boot Status defines for the IOCExceptions field of 80265236Sken * the IOCFacts Reply. 81265236Sken * Removed MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define. 82265236Sken * Moved MPI2_VERSION_UNION to mpi2.h. 83265236Sken * Changed MPI2_EVENT_NOTIFICATION_REQUEST to use masks 84265236Sken * instead of enables, and added SASBroadcastPrimitiveMasks 85265236Sken * field. 86265236Sken * Added Log Entry Added Event and related structure. 87265236Sken * 02-29-08 02.00.06 Added define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID. 88265236Sken * Removed define MPI2_IOCFACTS_PROTOCOL_SMP_TARGET. 89265236Sken * Added MaxVolumes and MaxPersistentEntries fields to 90265236Sken * IOCFacts reply. 91265236Sken * Added ProtocalFlags and IOCCapabilities fields to 92265236Sken * MPI2_FW_IMAGE_HEADER. 93265236Sken * Removed MPI2_PORTENABLE_FLAGS_ENABLE_SINGLE_PORT. 94265236Sken * 03-03-08 02.00.07 Fixed MPI2_FW_IMAGE_HEADER by changing Reserved26 to 95265236Sken * a U16 (from a U32). 96265236Sken * Removed extra 's' from EventMasks name. 97265236Sken * 06-27-08 02.00.08 Fixed an offset in a comment. 98265236Sken * 10-02-08 02.00.09 Removed SystemReplyFrameSize from MPI2_IOC_INIT_REQUEST. 99265236Sken * Removed CurReplyFrameSize from MPI2_IOC_FACTS_REPLY and 100265236Sken * renamed MinReplyFrameSize to ReplyFrameSize. 101265236Sken * Added MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX. 102265236Sken * Added two new RAIDOperation values for Integrated RAID 103265236Sken * Operations Status Event data. 104265236Sken * Added four new IR Configuration Change List Event data 105265236Sken * ReasonCode values. 106265236Sken * Added two new ReasonCode defines for SAS Device Status 107265236Sken * Change Event data. 108265236Sken * Added three new DiscoveryStatus bits for the SAS 109265236Sken * Discovery event data. 110265236Sken * Added Multiplexing Status Change bit to the PhyStatus 111265236Sken * field of the SAS Topology Change List event data. 112265236Sken * Removed define for MPI2_INIT_IMAGE_BOOTFLAGS_XMEMCOPY. 113265236Sken * BootFlags are now product-specific. 114265236Sken * Added defines for the indivdual signature bytes 115265236Sken * for MPI2_INIT_IMAGE_FOOTER. 116265236Sken * 01-19-09 02.00.10 Added MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY define. 117265236Sken * Added MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR 118265236Sken * define. 119265236Sken * Added MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE 120265236Sken * define. 121265236Sken * Removed MPI2_EVENT_SAS_DISC_DS_SATA_INIT_FAILURE define. 122265236Sken * 05-06-09 02.00.11 Added MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR define. 123265236Sken * Added MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX define. 124265236Sken * Added two new reason codes for SAS Device Status Change 125265236Sken * Event. 126265236Sken * Added new event: SAS PHY Counter. 127265236Sken * 07-30-09 02.00.12 Added GPIO Interrupt event define and structure. 128265236Sken * Added MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define. 129265236Sken * Added new product id family for 2208. 130265236Sken * 10-28-09 02.00.13 Added HostMSIxVectors field to MPI2_IOC_INIT_REQUEST. 131265236Sken * Added MaxMSIxVectors field to MPI2_IOC_FACTS_REPLY. 132265236Sken * Added MinDevHandle field to MPI2_IOC_FACTS_REPLY. 133265236Sken * Added MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY. 134265236Sken * Added MPI2_EVENT_HOST_BASED_DISCOVERY_PHY define. 135265236Sken * Added MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER define. 136265236Sken * Added Host Based Discovery Phy Event data. 137265236Sken * Added defines for ProductID Product field 138265236Sken * (MPI2_FW_HEADER_PID_). 139265236Sken * Modified values for SAS ProductID Family 140265236Sken * (MPI2_FW_HEADER_PID_FAMILY_). 141265236Sken * 02-10-10 02.00.14 Added SAS Quiesce Event structure and defines. 142265236Sken * Added PowerManagementControl Request structures and 143265236Sken * defines. 144265236Sken * 05-12-10 02.00.15 Marked Task Set Full Event as obsolete. 145265236Sken * Added MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY define. 146265236Sken * 11-10-10 02.00.16 Added MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC. 147265236Sken * 02-23-11 02.00.17 Added SAS NOTIFY Primitive event, and added 148265236Sken * SASNotifyPrimitiveMasks field to 149265236Sken * MPI2_EVENT_NOTIFICATION_REQUEST. 150265236Sken * Added Temperature Threshold Event. 151265236Sken * Added Host Message Event. 152265236Sken * Added Send Host Message request and reply. 153265236Sken * 05-25-11 02.00.18 For Extended Image Header, added 154265236Sken * MPI2_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC and 155265236Sken * MPI2_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC defines. 156265236Sken * Deprecated MPI2_EXT_IMAGE_TYPE_MAX define. 157265236Sken * 08-24-11 02.00.19 Added PhysicalPort field to 158265236Sken * MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE structure. 159265236Sken * Marked MPI2_PM_CONTROL_FEATURE_PCIE_LINK as obsolete. 160265236Sken * 11-18-11 02.00.20 Incorporating additions for MPI v2.5. 161265236Sken * 03-29-12 02.00.21 Added a product specific range to event values. 162265236Sken * 07-26-12 02.00.22 Added MPI2_IOCFACTS_EXCEPT_PARTIAL_MEMORY_FAILURE. 163265236Sken * Added ElapsedSeconds field to 164265236Sken * MPI2_EVENT_DATA_IR_OPERATION_STATUS. 165265236Sken * 08-19-13 02.00.23 For IOCInit, added MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE 166265236Sken * and MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY. 167265236Sken * Added MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE. 168265236Sken * Added MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY. 169265236Sken * Added Encrypted Hash Extended Image. 170265236Sken * 12-05-13 02.00.24 Added MPI25_HASH_IMAGE_TYPE_BIOS. 171265236Sken * -------------------------------------------------------------------------- 172265236Sken */ 173265236Sken 174265236Sken#ifndef MPI2_IOC_H 175265236Sken#define MPI2_IOC_H 176265236Sken 177265236Sken/***************************************************************************** 178265236Sken* 179265236Sken* IOC Messages 180265236Sken* 181265236Sken*****************************************************************************/ 182265236Sken 183265236Sken/**************************************************************************** 184265236Sken* IOCInit message 185265236Sken****************************************************************************/ 186265236Sken 187265236Sken/* IOCInit Request message */ 188265236Skentypedef struct _MPI2_IOC_INIT_REQUEST 189265236Sken{ 190265236Sken U8 WhoInit; /* 0x00 */ 191265236Sken U8 Reserved1; /* 0x01 */ 192265236Sken U8 ChainOffset; /* 0x02 */ 193265236Sken U8 Function; /* 0x03 */ 194265236Sken U16 Reserved2; /* 0x04 */ 195265236Sken U8 Reserved3; /* 0x06 */ 196265236Sken U8 MsgFlags; /* 0x07 */ 197265236Sken U8 VP_ID; /* 0x08 */ 198265236Sken U8 VF_ID; /* 0x09 */ 199265236Sken U16 Reserved4; /* 0x0A */ 200265236Sken U16 MsgVersion; /* 0x0C */ 201265236Sken U16 HeaderVersion; /* 0x0E */ 202265236Sken U32 Reserved5; /* 0x10 */ 203265236Sken U16 Reserved6; /* 0x14 */ 204265236Sken U8 Reserved7; /* 0x16 */ 205265236Sken U8 HostMSIxVectors; /* 0x17 */ 206265236Sken U16 Reserved8; /* 0x18 */ 207265236Sken U16 SystemRequestFrameSize; /* 0x1A */ 208265236Sken U16 ReplyDescriptorPostQueueDepth; /* 0x1C */ 209265236Sken U16 ReplyFreeQueueDepth; /* 0x1E */ 210265236Sken U32 SenseBufferAddressHigh; /* 0x20 */ 211265236Sken U32 SystemReplyAddressHigh; /* 0x24 */ 212265236Sken U64 SystemRequestFrameBaseAddress; /* 0x28 */ 213265236Sken U64 ReplyDescriptorPostQueueAddress;/* 0x30 */ 214265236Sken U64 ReplyFreeQueueAddress; /* 0x38 */ 215265236Sken U64 TimeStamp; /* 0x40 */ 216265236Sken} MPI2_IOC_INIT_REQUEST, MPI2_POINTER PTR_MPI2_IOC_INIT_REQUEST, 217265236Sken Mpi2IOCInitRequest_t, MPI2_POINTER pMpi2IOCInitRequest_t; 218265236Sken 219265236Sken/* WhoInit values */ 220265236Sken#define MPI2_WHOINIT_NOT_INITIALIZED (0x00) 221265236Sken#define MPI2_WHOINIT_SYSTEM_BIOS (0x01) 222265236Sken#define MPI2_WHOINIT_ROM_BIOS (0x02) 223265236Sken#define MPI2_WHOINIT_PCI_PEER (0x03) 224265236Sken#define MPI2_WHOINIT_HOST_DRIVER (0x04) 225265236Sken#define MPI2_WHOINIT_MANUFACTURER (0x05) 226265236Sken 227265236Sken/* MsgFlags */ 228265236Sken#define MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE (0x01) 229265236Sken 230265236Sken/* MsgVersion */ 231265236Sken#define MPI2_IOCINIT_MSGVERSION_MAJOR_MASK (0xFF00) 232265236Sken#define MPI2_IOCINIT_MSGVERSION_MAJOR_SHIFT (8) 233265236Sken#define MPI2_IOCINIT_MSGVERSION_MINOR_MASK (0x00FF) 234265236Sken#define MPI2_IOCINIT_MSGVERSION_MINOR_SHIFT (0) 235265236Sken 236265236Sken/* HeaderVersion */ 237265236Sken#define MPI2_IOCINIT_HDRVERSION_UNIT_MASK (0xFF00) 238265236Sken#define MPI2_IOCINIT_HDRVERSION_UNIT_SHIFT (8) 239265236Sken#define MPI2_IOCINIT_HDRVERSION_DEV_MASK (0x00FF) 240265236Sken#define MPI2_IOCINIT_HDRVERSION_DEV_SHIFT (0) 241265236Sken 242265236Sken/* minimum depth for a Reply Descriptor Post Queue */ 243265236Sken#define MPI2_RDPQ_DEPTH_MIN (16) 244265236Sken 245265236Sken/* Reply Descriptor Post Queue Array Entry */ 246265236Skentypedef struct _MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY 247265236Sken{ 248265236Sken U64 RDPQBaseAddress; /* 0x00 */ 249265236Sken U32 Reserved1; /* 0x08 */ 250265236Sken U32 Reserved2; /* 0x0C */ 251265236Sken} MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY, 252265236Sken MPI2_POINTER PTR_MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY, 253265236Sken Mpi2IOCInitRDPQArrayEntry, MPI2_POINTER pMpi2IOCInitRDPQArrayEntry; 254265236Sken 255265236Sken/* IOCInit Reply message */ 256265236Skentypedef struct _MPI2_IOC_INIT_REPLY 257265236Sken{ 258265236Sken U8 WhoInit; /* 0x00 */ 259265236Sken U8 Reserved1; /* 0x01 */ 260265236Sken U8 MsgLength; /* 0x02 */ 261265236Sken U8 Function; /* 0x03 */ 262265236Sken U16 Reserved2; /* 0x04 */ 263265236Sken U8 Reserved3; /* 0x06 */ 264265236Sken U8 MsgFlags; /* 0x07 */ 265265236Sken U8 VP_ID; /* 0x08 */ 266265236Sken U8 VF_ID; /* 0x09 */ 267265236Sken U16 Reserved4; /* 0x0A */ 268265236Sken U16 Reserved5; /* 0x0C */ 269265236Sken U16 IOCStatus; /* 0x0E */ 270265236Sken U32 IOCLogInfo; /* 0x10 */ 271265236Sken} MPI2_IOC_INIT_REPLY, MPI2_POINTER PTR_MPI2_IOC_INIT_REPLY, 272265236Sken Mpi2IOCInitReply_t, MPI2_POINTER pMpi2IOCInitReply_t; 273265236Sken 274265236Sken 275265236Sken/**************************************************************************** 276265236Sken* IOCFacts message 277265236Sken****************************************************************************/ 278265236Sken 279265236Sken/* IOCFacts Request message */ 280265236Skentypedef struct _MPI2_IOC_FACTS_REQUEST 281265236Sken{ 282265236Sken U16 Reserved1; /* 0x00 */ 283265236Sken U8 ChainOffset; /* 0x02 */ 284265236Sken U8 Function; /* 0x03 */ 285265236Sken U16 Reserved2; /* 0x04 */ 286265236Sken U8 Reserved3; /* 0x06 */ 287265236Sken U8 MsgFlags; /* 0x07 */ 288265236Sken U8 VP_ID; /* 0x08 */ 289265236Sken U8 VF_ID; /* 0x09 */ 290265236Sken U16 Reserved4; /* 0x0A */ 291265236Sken} MPI2_IOC_FACTS_REQUEST, MPI2_POINTER PTR_MPI2_IOC_FACTS_REQUEST, 292265236Sken Mpi2IOCFactsRequest_t, MPI2_POINTER pMpi2IOCFactsRequest_t; 293265236Sken 294265236Sken 295265236Sken/* IOCFacts Reply message */ 296265236Skentypedef struct _MPI2_IOC_FACTS_REPLY 297265236Sken{ 298265236Sken U16 MsgVersion; /* 0x00 */ 299265236Sken U8 MsgLength; /* 0x02 */ 300265236Sken U8 Function; /* 0x03 */ 301265236Sken U16 HeaderVersion; /* 0x04 */ 302265236Sken U8 IOCNumber; /* 0x06 */ 303265236Sken U8 MsgFlags; /* 0x07 */ 304265236Sken U8 VP_ID; /* 0x08 */ 305265236Sken U8 VF_ID; /* 0x09 */ 306265236Sken U16 Reserved1; /* 0x0A */ 307265236Sken U16 IOCExceptions; /* 0x0C */ 308265236Sken U16 IOCStatus; /* 0x0E */ 309265236Sken U32 IOCLogInfo; /* 0x10 */ 310265236Sken U8 MaxChainDepth; /* 0x14 */ 311265236Sken U8 WhoInit; /* 0x15 */ 312265236Sken U8 NumberOfPorts; /* 0x16 */ 313265236Sken U8 MaxMSIxVectors; /* 0x17 */ 314265236Sken U16 RequestCredit; /* 0x18 */ 315265236Sken U16 ProductID; /* 0x1A */ 316265236Sken U32 IOCCapabilities; /* 0x1C */ 317265236Sken MPI2_VERSION_UNION FWVersion; /* 0x20 */ 318265236Sken U16 IOCRequestFrameSize; /* 0x24 */ 319265236Sken U16 IOCMaxChainSegmentSize; /* 0x26 */ /* MPI 2.5 only; Reserved in MPI 2.0 */ 320265236Sken U16 MaxInitiators; /* 0x28 */ 321265236Sken U16 MaxTargets; /* 0x2A */ 322265236Sken U16 MaxSasExpanders; /* 0x2C */ 323265236Sken U16 MaxEnclosures; /* 0x2E */ 324265236Sken U16 ProtocolFlags; /* 0x30 */ 325265236Sken U16 HighPriorityCredit; /* 0x32 */ 326265236Sken U16 MaxReplyDescriptorPostQueueDepth; /* 0x34 */ 327265236Sken U8 ReplyFrameSize; /* 0x36 */ 328265236Sken U8 MaxVolumes; /* 0x37 */ 329265236Sken U16 MaxDevHandle; /* 0x38 */ 330265236Sken U16 MaxPersistentEntries; /* 0x3A */ 331265236Sken U16 MinDevHandle; /* 0x3C */ 332265236Sken U16 Reserved4; /* 0x3E */ 333265236Sken} MPI2_IOC_FACTS_REPLY, MPI2_POINTER PTR_MPI2_IOC_FACTS_REPLY, 334265236Sken Mpi2IOCFactsReply_t, MPI2_POINTER pMpi2IOCFactsReply_t; 335265236Sken 336265236Sken/* MsgVersion */ 337265236Sken#define MPI2_IOCFACTS_MSGVERSION_MAJOR_MASK (0xFF00) 338265236Sken#define MPI2_IOCFACTS_MSGVERSION_MAJOR_SHIFT (8) 339265236Sken#define MPI2_IOCFACTS_MSGVERSION_MINOR_MASK (0x00FF) 340265236Sken#define MPI2_IOCFACTS_MSGVERSION_MINOR_SHIFT (0) 341265236Sken 342265236Sken/* HeaderVersion */ 343265236Sken#define MPI2_IOCFACTS_HDRVERSION_UNIT_MASK (0xFF00) 344265236Sken#define MPI2_IOCFACTS_HDRVERSION_UNIT_SHIFT (8) 345265236Sken#define MPI2_IOCFACTS_HDRVERSION_DEV_MASK (0x00FF) 346265236Sken#define MPI2_IOCFACTS_HDRVERSION_DEV_SHIFT (0) 347265236Sken 348265236Sken/* IOCExceptions */ 349265236Sken#define MPI2_IOCFACTS_EXCEPT_PARTIAL_MEMORY_FAILURE (0x0200) 350265236Sken#define MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX (0x0100) 351265236Sken 352265236Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_MASK (0x00E0) 353265236Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_GOOD (0x0000) 354265236Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_BACKUP (0x0020) 355265236Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_RESTORED (0x0040) 356265236Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_CORRUPT_BACKUP (0x0060) 357265236Sken 358265236Sken#define MPI2_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED (0x0010) 359265236Sken#define MPI2_IOCFACTS_EXCEPT_MANUFACT_CHECKSUM_FAIL (0x0008) 360265236Sken#define MPI2_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL (0x0004) 361265236Sken#define MPI2_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID (0x0002) 362265236Sken#define MPI2_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL (0x0001) 363265236Sken 364265236Sken/* defines for WhoInit field are after the IOCInit Request */ 365265236Sken 366265236Sken/* ProductID field uses MPI2_FW_HEADER_PID_ */ 367265236Sken 368265236Sken/* IOCCapabilities */ 369265236Sken#define MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE (0x00040000) 370265236Sken#define MPI25_IOCFACTS_CAPABILITY_FAST_PATH_CAPABLE (0x00020000) 371265236Sken#define MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY (0x00010000) 372265236Sken#define MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX (0x00008000) 373265236Sken#define MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR (0x00004000) 374265236Sken#define MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY (0x00002000) 375265236Sken#define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID (0x00001000) 376265236Sken#define MPI2_IOCFACTS_CAPABILITY_TLR (0x00000800) 377265236Sken#define MPI2_IOCFACTS_CAPABILITY_MULTICAST (0x00000100) 378265236Sken#define MPI2_IOCFACTS_CAPABILITY_BIDIRECTIONAL_TARGET (0x00000080) 379265236Sken#define MPI2_IOCFACTS_CAPABILITY_EEDP (0x00000040) 380265236Sken#define MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER (0x00000020) 381265236Sken#define MPI2_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER (0x00000010) 382265236Sken#define MPI2_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER (0x00000008) 383265236Sken#define MPI2_IOCFACTS_CAPABILITY_TASK_SET_FULL_HANDLING (0x00000004) 384265236Sken 385265236Sken/* ProtocolFlags */ 386265236Sken#define MPI2_IOCFACTS_PROTOCOL_SCSI_TARGET (0x0001) 387265236Sken#define MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR (0x0002) 388265236Sken 389265236Sken 390265236Sken/**************************************************************************** 391265236Sken* PortFacts message 392265236Sken****************************************************************************/ 393265236Sken 394265236Sken/* PortFacts Request message */ 395265236Skentypedef struct _MPI2_PORT_FACTS_REQUEST 396265236Sken{ 397265236Sken U16 Reserved1; /* 0x00 */ 398265236Sken U8 ChainOffset; /* 0x02 */ 399265236Sken U8 Function; /* 0x03 */ 400265236Sken U16 Reserved2; /* 0x04 */ 401265236Sken U8 PortNumber; /* 0x06 */ 402265236Sken U8 MsgFlags; /* 0x07 */ 403265236Sken U8 VP_ID; /* 0x08 */ 404265236Sken U8 VF_ID; /* 0x09 */ 405265236Sken U16 Reserved3; /* 0x0A */ 406265236Sken} MPI2_PORT_FACTS_REQUEST, MPI2_POINTER PTR_MPI2_PORT_FACTS_REQUEST, 407265236Sken Mpi2PortFactsRequest_t, MPI2_POINTER pMpi2PortFactsRequest_t; 408265236Sken 409265236Sken/* PortFacts Reply message */ 410265236Skentypedef struct _MPI2_PORT_FACTS_REPLY 411265236Sken{ 412265236Sken U16 Reserved1; /* 0x00 */ 413265236Sken U8 MsgLength; /* 0x02 */ 414265236Sken U8 Function; /* 0x03 */ 415265236Sken U16 Reserved2; /* 0x04 */ 416265236Sken U8 PortNumber; /* 0x06 */ 417265236Sken U8 MsgFlags; /* 0x07 */ 418265236Sken U8 VP_ID; /* 0x08 */ 419265236Sken U8 VF_ID; /* 0x09 */ 420265236Sken U16 Reserved3; /* 0x0A */ 421265236Sken U16 Reserved4; /* 0x0C */ 422265236Sken U16 IOCStatus; /* 0x0E */ 423265236Sken U32 IOCLogInfo; /* 0x10 */ 424265236Sken U8 Reserved5; /* 0x14 */ 425265236Sken U8 PortType; /* 0x15 */ 426265236Sken U16 Reserved6; /* 0x16 */ 427265236Sken U16 MaxPostedCmdBuffers; /* 0x18 */ 428265236Sken U16 Reserved7; /* 0x1A */ 429265236Sken} MPI2_PORT_FACTS_REPLY, MPI2_POINTER PTR_MPI2_PORT_FACTS_REPLY, 430265236Sken Mpi2PortFactsReply_t, MPI2_POINTER pMpi2PortFactsReply_t; 431265236Sken 432265236Sken/* PortType values */ 433265236Sken#define MPI2_PORTFACTS_PORTTYPE_INACTIVE (0x00) 434265236Sken#define MPI2_PORTFACTS_PORTTYPE_FC (0x10) 435265236Sken#define MPI2_PORTFACTS_PORTTYPE_ISCSI (0x20) 436265236Sken#define MPI2_PORTFACTS_PORTTYPE_SAS_PHYSICAL (0x30) 437265236Sken#define MPI2_PORTFACTS_PORTTYPE_SAS_VIRTUAL (0x31) 438265236Sken 439265236Sken 440265236Sken/**************************************************************************** 441265236Sken* PortEnable message 442265236Sken****************************************************************************/ 443265236Sken 444265236Sken/* PortEnable Request message */ 445265236Skentypedef struct _MPI2_PORT_ENABLE_REQUEST 446265236Sken{ 447265236Sken U16 Reserved1; /* 0x00 */ 448265236Sken U8 ChainOffset; /* 0x02 */ 449265236Sken U8 Function; /* 0x03 */ 450265236Sken U8 Reserved2; /* 0x04 */ 451265236Sken U8 PortFlags; /* 0x05 */ 452265236Sken U8 Reserved3; /* 0x06 */ 453265236Sken U8 MsgFlags; /* 0x07 */ 454265236Sken U8 VP_ID; /* 0x08 */ 455265236Sken U8 VF_ID; /* 0x09 */ 456265236Sken U16 Reserved4; /* 0x0A */ 457265236Sken} MPI2_PORT_ENABLE_REQUEST, MPI2_POINTER PTR_MPI2_PORT_ENABLE_REQUEST, 458265236Sken Mpi2PortEnableRequest_t, MPI2_POINTER pMpi2PortEnableRequest_t; 459265236Sken 460265236Sken 461265236Sken/* PortEnable Reply message */ 462265236Skentypedef struct _MPI2_PORT_ENABLE_REPLY 463265236Sken{ 464265236Sken U16 Reserved1; /* 0x00 */ 465265236Sken U8 MsgLength; /* 0x02 */ 466265236Sken U8 Function; /* 0x03 */ 467265236Sken U8 Reserved2; /* 0x04 */ 468265236Sken U8 PortFlags; /* 0x05 */ 469265236Sken U8 Reserved3; /* 0x06 */ 470265236Sken U8 MsgFlags; /* 0x07 */ 471265236Sken U8 VP_ID; /* 0x08 */ 472265236Sken U8 VF_ID; /* 0x09 */ 473265236Sken U16 Reserved4; /* 0x0A */ 474265236Sken U16 Reserved5; /* 0x0C */ 475265236Sken U16 IOCStatus; /* 0x0E */ 476265236Sken U32 IOCLogInfo; /* 0x10 */ 477265236Sken} MPI2_PORT_ENABLE_REPLY, MPI2_POINTER PTR_MPI2_PORT_ENABLE_REPLY, 478265236Sken Mpi2PortEnableReply_t, MPI2_POINTER pMpi2PortEnableReply_t; 479265236Sken 480265236Sken 481265236Sken/**************************************************************************** 482265236Sken* EventNotification message 483265236Sken****************************************************************************/ 484265236Sken 485265236Sken/* EventNotification Request message */ 486265236Sken#define MPI2_EVENT_NOTIFY_EVENTMASK_WORDS (4) 487265236Sken 488265236Skentypedef struct _MPI2_EVENT_NOTIFICATION_REQUEST 489265236Sken{ 490265236Sken U16 Reserved1; /* 0x00 */ 491265236Sken U8 ChainOffset; /* 0x02 */ 492265236Sken U8 Function; /* 0x03 */ 493265236Sken U16 Reserved2; /* 0x04 */ 494265236Sken U8 Reserved3; /* 0x06 */ 495265236Sken U8 MsgFlags; /* 0x07 */ 496265236Sken U8 VP_ID; /* 0x08 */ 497265236Sken U8 VF_ID; /* 0x09 */ 498265236Sken U16 Reserved4; /* 0x0A */ 499265236Sken U32 Reserved5; /* 0x0C */ 500265236Sken U32 Reserved6; /* 0x10 */ 501265236Sken U32 EventMasks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS];/* 0x14 */ 502265236Sken U16 SASBroadcastPrimitiveMasks; /* 0x24 */ 503265236Sken U16 SASNotifyPrimitiveMasks; /* 0x26 */ 504265236Sken U32 Reserved8; /* 0x28 */ 505265236Sken} MPI2_EVENT_NOTIFICATION_REQUEST, 506265236Sken MPI2_POINTER PTR_MPI2_EVENT_NOTIFICATION_REQUEST, 507265236Sken Mpi2EventNotificationRequest_t, MPI2_POINTER pMpi2EventNotificationRequest_t; 508265236Sken 509265236Sken 510265236Sken/* EventNotification Reply message */ 511265236Skentypedef struct _MPI2_EVENT_NOTIFICATION_REPLY 512265236Sken{ 513265236Sken U16 EventDataLength; /* 0x00 */ 514265236Sken U8 MsgLength; /* 0x02 */ 515265236Sken U8 Function; /* 0x03 */ 516265236Sken U16 Reserved1; /* 0x04 */ 517265236Sken U8 AckRequired; /* 0x06 */ 518265236Sken U8 MsgFlags; /* 0x07 */ 519265236Sken U8 VP_ID; /* 0x08 */ 520265236Sken U8 VF_ID; /* 0x09 */ 521265236Sken U16 Reserved2; /* 0x0A */ 522265236Sken U16 Reserved3; /* 0x0C */ 523265236Sken U16 IOCStatus; /* 0x0E */ 524265236Sken U32 IOCLogInfo; /* 0x10 */ 525265236Sken U16 Event; /* 0x14 */ 526265236Sken U16 Reserved4; /* 0x16 */ 527265236Sken U32 EventContext; /* 0x18 */ 528265236Sken U32 EventData[1]; /* 0x1C */ 529265236Sken} MPI2_EVENT_NOTIFICATION_REPLY, MPI2_POINTER PTR_MPI2_EVENT_NOTIFICATION_REPLY, 530265236Sken Mpi2EventNotificationReply_t, MPI2_POINTER pMpi2EventNotificationReply_t; 531265236Sken 532265236Sken/* AckRequired */ 533265236Sken#define MPI2_EVENT_NOTIFICATION_ACK_NOT_REQUIRED (0x00) 534265236Sken#define MPI2_EVENT_NOTIFICATION_ACK_REQUIRED (0x01) 535265236Sken 536265236Sken/* Event */ 537265236Sken#define MPI2_EVENT_LOG_DATA (0x0001) 538265236Sken#define MPI2_EVENT_STATE_CHANGE (0x0002) 539265236Sken#define MPI2_EVENT_HARD_RESET_RECEIVED (0x0005) 540265236Sken#define MPI2_EVENT_EVENT_CHANGE (0x000A) 541265236Sken#define MPI2_EVENT_TASK_SET_FULL (0x000E) /* obsolete */ 542265236Sken#define MPI2_EVENT_SAS_DEVICE_STATUS_CHANGE (0x000F) 543265236Sken#define MPI2_EVENT_IR_OPERATION_STATUS (0x0014) 544265236Sken#define MPI2_EVENT_SAS_DISCOVERY (0x0016) 545265236Sken#define MPI2_EVENT_SAS_BROADCAST_PRIMITIVE (0x0017) 546265236Sken#define MPI2_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE (0x0018) 547265236Sken#define MPI2_EVENT_SAS_INIT_TABLE_OVERFLOW (0x0019) 548265236Sken#define MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST (0x001C) 549265236Sken#define MPI2_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE (0x001D) 550265236Sken#define MPI2_EVENT_IR_VOLUME (0x001E) 551265236Sken#define MPI2_EVENT_IR_PHYSICAL_DISK (0x001F) 552265236Sken#define MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST (0x0020) 553265236Sken#define MPI2_EVENT_LOG_ENTRY_ADDED (0x0021) 554265236Sken#define MPI2_EVENT_SAS_PHY_COUNTER (0x0022) 555265236Sken#define MPI2_EVENT_GPIO_INTERRUPT (0x0023) 556265236Sken#define MPI2_EVENT_HOST_BASED_DISCOVERY_PHY (0x0024) 557265236Sken#define MPI2_EVENT_SAS_QUIESCE (0x0025) 558265236Sken#define MPI2_EVENT_SAS_NOTIFY_PRIMITIVE (0x0026) 559265236Sken#define MPI2_EVENT_TEMP_THRESHOLD (0x0027) 560265236Sken#define MPI2_EVENT_HOST_MESSAGE (0x0028) 561265236Sken#define MPI2_EVENT_POWER_PERFORMANCE_CHANGE (0x0029) 562265236Sken#define MPI2_EVENT_MIN_PRODUCT_SPECIFIC (0x006E) 563265236Sken#define MPI2_EVENT_MAX_PRODUCT_SPECIFIC (0x007F) 564265236Sken 565265236Sken 566265236Sken/* Log Entry Added Event data */ 567265236Sken 568265236Sken/* the following structure matches MPI2_LOG_0_ENTRY in mpi2_cnfg.h */ 569265236Sken#define MPI2_EVENT_DATA_LOG_DATA_LENGTH (0x1C) 570265236Sken 571265236Skentypedef struct _MPI2_EVENT_DATA_LOG_ENTRY_ADDED 572265236Sken{ 573265236Sken U64 TimeStamp; /* 0x00 */ 574265236Sken U32 Reserved1; /* 0x08 */ 575265236Sken U16 LogSequence; /* 0x0C */ 576265236Sken U16 LogEntryQualifier; /* 0x0E */ 577265236Sken U8 VP_ID; /* 0x10 */ 578265236Sken U8 VF_ID; /* 0x11 */ 579265236Sken U16 Reserved2; /* 0x12 */ 580265236Sken U8 LogData[MPI2_EVENT_DATA_LOG_DATA_LENGTH];/* 0x14 */ 581265236Sken} MPI2_EVENT_DATA_LOG_ENTRY_ADDED, 582265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_LOG_ENTRY_ADDED, 583265236Sken Mpi2EventDataLogEntryAdded_t, MPI2_POINTER pMpi2EventDataLogEntryAdded_t; 584265236Sken 585265236Sken 586265236Sken/* GPIO Interrupt Event data */ 587265236Sken 588265236Skentypedef struct _MPI2_EVENT_DATA_GPIO_INTERRUPT 589265236Sken{ 590265236Sken U8 GPIONum; /* 0x00 */ 591265236Sken U8 Reserved1; /* 0x01 */ 592265236Sken U16 Reserved2; /* 0x02 */ 593265236Sken} MPI2_EVENT_DATA_GPIO_INTERRUPT, 594265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_GPIO_INTERRUPT, 595265236Sken Mpi2EventDataGpioInterrupt_t, MPI2_POINTER pMpi2EventDataGpioInterrupt_t; 596265236Sken 597265236Sken 598265236Sken/* Temperature Threshold Event data */ 599265236Sken 600265236Skentypedef struct _MPI2_EVENT_DATA_TEMPERATURE 601265236Sken{ 602265236Sken U16 Status; /* 0x00 */ 603265236Sken U8 SensorNum; /* 0x02 */ 604265236Sken U8 Reserved1; /* 0x03 */ 605265236Sken U16 CurrentTemperature; /* 0x04 */ 606265236Sken U16 Reserved2; /* 0x06 */ 607265236Sken U32 Reserved3; /* 0x08 */ 608265236Sken U32 Reserved4; /* 0x0C */ 609265236Sken} MPI2_EVENT_DATA_TEMPERATURE, 610265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_TEMPERATURE, 611265236Sken Mpi2EventDataTemperature_t, MPI2_POINTER pMpi2EventDataTemperature_t; 612265236Sken 613265236Sken/* Temperature Threshold Event data Status bits */ 614265236Sken#define MPI2_EVENT_TEMPERATURE3_EXCEEDED (0x0008) 615265236Sken#define MPI2_EVENT_TEMPERATURE2_EXCEEDED (0x0004) 616265236Sken#define MPI2_EVENT_TEMPERATURE1_EXCEEDED (0x0002) 617265236Sken#define MPI2_EVENT_TEMPERATURE0_EXCEEDED (0x0001) 618265236Sken 619265236Sken 620265236Sken/* Host Message Event data */ 621265236Sken 622265236Skentypedef struct _MPI2_EVENT_DATA_HOST_MESSAGE 623265236Sken{ 624265236Sken U8 SourceVF_ID; /* 0x00 */ 625265236Sken U8 Reserved1; /* 0x01 */ 626265236Sken U16 Reserved2; /* 0x02 */ 627265236Sken U32 Reserved3; /* 0x04 */ 628265236Sken U32 HostData[1]; /* 0x08 */ 629265236Sken} MPI2_EVENT_DATA_HOST_MESSAGE, MPI2_POINTER PTR_MPI2_EVENT_DATA_HOST_MESSAGE, 630265236Sken Mpi2EventDataHostMessage_t, MPI2_POINTER pMpi2EventDataHostMessage_t; 631265236Sken 632265236Sken 633265236Sken/* Power Performance Change Event */ 634265236Sken 635265236Skentypedef struct _MPI2_EVENT_DATA_POWER_PERF_CHANGE 636265236Sken{ 637265236Sken U8 CurrentPowerMode; /* 0x00 */ 638265236Sken U8 PreviousPowerMode; /* 0x01 */ 639265236Sken U16 Reserved1; /* 0x02 */ 640265236Sken} MPI2_EVENT_DATA_POWER_PERF_CHANGE, 641265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_POWER_PERF_CHANGE, 642265236Sken Mpi2EventDataPowerPerfChange_t, MPI2_POINTER pMpi2EventDataPowerPerfChange_t; 643265236Sken 644265236Sken/* defines for CurrentPowerMode and PreviousPowerMode fields */ 645265236Sken#define MPI2_EVENT_PM_INIT_MASK (0xC0) 646265236Sken#define MPI2_EVENT_PM_INIT_UNAVAILABLE (0x00) 647265236Sken#define MPI2_EVENT_PM_INIT_HOST (0x40) 648265236Sken#define MPI2_EVENT_PM_INIT_IO_UNIT (0x80) 649265236Sken#define MPI2_EVENT_PM_INIT_PCIE_DPA (0xC0) 650265236Sken 651265236Sken#define MPI2_EVENT_PM_MODE_MASK (0x07) 652265236Sken#define MPI2_EVENT_PM_MODE_UNAVAILABLE (0x00) 653265236Sken#define MPI2_EVENT_PM_MODE_UNKNOWN (0x01) 654265236Sken#define MPI2_EVENT_PM_MODE_FULL_POWER (0x04) 655265236Sken#define MPI2_EVENT_PM_MODE_REDUCED_POWER (0x05) 656265236Sken#define MPI2_EVENT_PM_MODE_STANDBY (0x06) 657265236Sken 658265236Sken 659265236Sken/* Hard Reset Received Event data */ 660265236Sken 661265236Skentypedef struct _MPI2_EVENT_DATA_HARD_RESET_RECEIVED 662265236Sken{ 663265236Sken U8 Reserved1; /* 0x00 */ 664265236Sken U8 Port; /* 0x01 */ 665265236Sken U16 Reserved2; /* 0x02 */ 666265236Sken} MPI2_EVENT_DATA_HARD_RESET_RECEIVED, 667265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_HARD_RESET_RECEIVED, 668265236Sken Mpi2EventDataHardResetReceived_t, 669265236Sken MPI2_POINTER pMpi2EventDataHardResetReceived_t; 670265236Sken 671265236Sken 672265236Sken/* Task Set Full Event data */ 673265236Sken/* this event is obsolete */ 674265236Sken 675265236Skentypedef struct _MPI2_EVENT_DATA_TASK_SET_FULL 676265236Sken{ 677265236Sken U16 DevHandle; /* 0x00 */ 678265236Sken U16 CurrentDepth; /* 0x02 */ 679265236Sken} MPI2_EVENT_DATA_TASK_SET_FULL, MPI2_POINTER PTR_MPI2_EVENT_DATA_TASK_SET_FULL, 680265236Sken Mpi2EventDataTaskSetFull_t, MPI2_POINTER pMpi2EventDataTaskSetFull_t; 681265236Sken 682265236Sken 683265236Sken/* SAS Device Status Change Event data */ 684265236Sken 685265236Skentypedef struct _MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE 686265236Sken{ 687265236Sken U16 TaskTag; /* 0x00 */ 688265236Sken U8 ReasonCode; /* 0x02 */ 689265236Sken U8 PhysicalPort; /* 0x03 */ 690265236Sken U8 ASC; /* 0x04 */ 691265236Sken U8 ASCQ; /* 0x05 */ 692265236Sken U16 DevHandle; /* 0x06 */ 693265236Sken U32 Reserved2; /* 0x08 */ 694265236Sken U64 SASAddress; /* 0x0C */ 695265236Sken U8 LUN[8]; /* 0x14 */ 696265236Sken} MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 697265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 698265236Sken Mpi2EventDataSasDeviceStatusChange_t, 699265236Sken MPI2_POINTER pMpi2EventDataSasDeviceStatusChange_t; 700265236Sken 701265236Sken/* SAS Device Status Change Event data ReasonCode values */ 702265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_SMART_DATA (0x05) 703265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_UNSUPPORTED (0x07) 704265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08) 705265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_TASK_ABORT_INTERNAL (0x09) 706265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_ABORT_TASK_SET_INTERNAL (0x0A) 707265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_CLEAR_TASK_SET_INTERNAL (0x0B) 708265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_QUERY_TASK_INTERNAL (0x0C) 709265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_ASYNC_NOTIFICATION (0x0D) 710265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_INTERNAL_DEV_RESET (0x0E) 711265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_TASK_ABORT_INTERNAL (0x0F) 712265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE (0x10) 713265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_EXPANDER_REDUCED_FUNCTIONALITY (0x11) 714265236Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_EXPANDER_REDUCED_FUNCTIONALITY (0x12) 715265236Sken 716265236Sken 717265236Sken/* Integrated RAID Operation Status Event data */ 718265236Sken 719265236Skentypedef struct _MPI2_EVENT_DATA_IR_OPERATION_STATUS 720265236Sken{ 721265236Sken U16 VolDevHandle; /* 0x00 */ 722265236Sken U16 Reserved1; /* 0x02 */ 723265236Sken U8 RAIDOperation; /* 0x04 */ 724265236Sken U8 PercentComplete; /* 0x05 */ 725265236Sken U16 Reserved2; /* 0x06 */ 726265236Sken U32 ElapsedSeconds; /* 0x08 */ 727265236Sken} MPI2_EVENT_DATA_IR_OPERATION_STATUS, 728265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_OPERATION_STATUS, 729265236Sken Mpi2EventDataIrOperationStatus_t, 730265236Sken MPI2_POINTER pMpi2EventDataIrOperationStatus_t; 731265236Sken 732265236Sken/* Integrated RAID Operation Status Event data RAIDOperation values */ 733265236Sken#define MPI2_EVENT_IR_RAIDOP_RESYNC (0x00) 734265236Sken#define MPI2_EVENT_IR_RAIDOP_ONLINE_CAP_EXPANSION (0x01) 735265236Sken#define MPI2_EVENT_IR_RAIDOP_CONSISTENCY_CHECK (0x02) 736265236Sken#define MPI2_EVENT_IR_RAIDOP_BACKGROUND_INIT (0x03) 737265236Sken#define MPI2_EVENT_IR_RAIDOP_MAKE_DATA_CONSISTENT (0x04) 738265236Sken 739265236Sken 740265236Sken/* Integrated RAID Volume Event data */ 741265236Sken 742265236Skentypedef struct _MPI2_EVENT_DATA_IR_VOLUME 743265236Sken{ 744265236Sken U16 VolDevHandle; /* 0x00 */ 745265236Sken U8 ReasonCode; /* 0x02 */ 746265236Sken U8 Reserved1; /* 0x03 */ 747265236Sken U32 NewValue; /* 0x04 */ 748265236Sken U32 PreviousValue; /* 0x08 */ 749265236Sken} MPI2_EVENT_DATA_IR_VOLUME, MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_VOLUME, 750265236Sken Mpi2EventDataIrVolume_t, MPI2_POINTER pMpi2EventDataIrVolume_t; 751265236Sken 752265236Sken/* Integrated RAID Volume Event data ReasonCode values */ 753265236Sken#define MPI2_EVENT_IR_VOLUME_RC_SETTINGS_CHANGED (0x01) 754265236Sken#define MPI2_EVENT_IR_VOLUME_RC_STATUS_FLAGS_CHANGED (0x02) 755265236Sken#define MPI2_EVENT_IR_VOLUME_RC_STATE_CHANGED (0x03) 756265236Sken 757265236Sken 758265236Sken/* Integrated RAID Physical Disk Event data */ 759265236Sken 760265236Skentypedef struct _MPI2_EVENT_DATA_IR_PHYSICAL_DISK 761265236Sken{ 762265236Sken U16 Reserved1; /* 0x00 */ 763265236Sken U8 ReasonCode; /* 0x02 */ 764265236Sken U8 PhysDiskNum; /* 0x03 */ 765265236Sken U16 PhysDiskDevHandle; /* 0x04 */ 766265236Sken U16 Reserved2; /* 0x06 */ 767265236Sken U16 Slot; /* 0x08 */ 768265236Sken U16 EnclosureHandle; /* 0x0A */ 769265236Sken U32 NewValue; /* 0x0C */ 770265236Sken U32 PreviousValue; /* 0x10 */ 771265236Sken} MPI2_EVENT_DATA_IR_PHYSICAL_DISK, 772265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_PHYSICAL_DISK, 773265236Sken Mpi2EventDataIrPhysicalDisk_t, MPI2_POINTER pMpi2EventDataIrPhysicalDisk_t; 774265236Sken 775265236Sken/* Integrated RAID Physical Disk Event data ReasonCode values */ 776265236Sken#define MPI2_EVENT_IR_PHYSDISK_RC_SETTINGS_CHANGED (0x01) 777265236Sken#define MPI2_EVENT_IR_PHYSDISK_RC_STATUS_FLAGS_CHANGED (0x02) 778265236Sken#define MPI2_EVENT_IR_PHYSDISK_RC_STATE_CHANGED (0x03) 779265236Sken 780265236Sken 781265236Sken/* Integrated RAID Configuration Change List Event data */ 782265236Sken 783265236Sken/* 784265236Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 785265236Sken * one and check NumElements at runtime. 786265236Sken */ 787265236Sken#ifndef MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT 788265236Sken#define MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT (1) 789265236Sken#endif 790265236Sken 791265236Skentypedef struct _MPI2_EVENT_IR_CONFIG_ELEMENT 792265236Sken{ 793265236Sken U16 ElementFlags; /* 0x00 */ 794265236Sken U16 VolDevHandle; /* 0x02 */ 795265236Sken U8 ReasonCode; /* 0x04 */ 796265236Sken U8 PhysDiskNum; /* 0x05 */ 797265236Sken U16 PhysDiskDevHandle; /* 0x06 */ 798265236Sken} MPI2_EVENT_IR_CONFIG_ELEMENT, MPI2_POINTER PTR_MPI2_EVENT_IR_CONFIG_ELEMENT, 799265236Sken Mpi2EventIrConfigElement_t, MPI2_POINTER pMpi2EventIrConfigElement_t; 800265236Sken 801265236Sken/* IR Configuration Change List Event data ElementFlags values */ 802265236Sken#define MPI2_EVENT_IR_CHANGE_EFLAGS_ELEMENT_TYPE_MASK (0x000F) 803265236Sken#define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLUME_ELEMENT (0x0000) 804265236Sken#define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLPHYSDISK_ELEMENT (0x0001) 805265236Sken#define MPI2_EVENT_IR_CHANGE_EFLAGS_HOTSPARE_ELEMENT (0x0002) 806265236Sken 807265236Sken/* IR Configuration Change List Event data ReasonCode values */ 808265236Sken#define MPI2_EVENT_IR_CHANGE_RC_ADDED (0x01) 809265236Sken#define MPI2_EVENT_IR_CHANGE_RC_REMOVED (0x02) 810265236Sken#define MPI2_EVENT_IR_CHANGE_RC_NO_CHANGE (0x03) 811265236Sken#define MPI2_EVENT_IR_CHANGE_RC_HIDE (0x04) 812265236Sken#define MPI2_EVENT_IR_CHANGE_RC_UNHIDE (0x05) 813265236Sken#define MPI2_EVENT_IR_CHANGE_RC_VOLUME_CREATED (0x06) 814265236Sken#define MPI2_EVENT_IR_CHANGE_RC_VOLUME_DELETED (0x07) 815265236Sken#define MPI2_EVENT_IR_CHANGE_RC_PD_CREATED (0x08) 816265236Sken#define MPI2_EVENT_IR_CHANGE_RC_PD_DELETED (0x09) 817265236Sken 818265236Skentypedef struct _MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST 819265236Sken{ 820265236Sken U8 NumElements; /* 0x00 */ 821265236Sken U8 Reserved1; /* 0x01 */ 822265236Sken U8 Reserved2; /* 0x02 */ 823265236Sken U8 ConfigNum; /* 0x03 */ 824265236Sken U32 Flags; /* 0x04 */ 825265236Sken MPI2_EVENT_IR_CONFIG_ELEMENT ConfigElement[MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT]; /* 0x08 */ 826265236Sken} MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, 827265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, 828265236Sken Mpi2EventDataIrConfigChangeList_t, 829265236Sken MPI2_POINTER pMpi2EventDataIrConfigChangeList_t; 830265236Sken 831265236Sken/* IR Configuration Change List Event data Flags values */ 832265236Sken#define MPI2_EVENT_IR_CHANGE_FLAGS_FOREIGN_CONFIG (0x00000001) 833265236Sken 834265236Sken 835265236Sken/* SAS Discovery Event data */ 836265236Sken 837265236Skentypedef struct _MPI2_EVENT_DATA_SAS_DISCOVERY 838265236Sken{ 839265236Sken U8 Flags; /* 0x00 */ 840265236Sken U8 ReasonCode; /* 0x01 */ 841265236Sken U8 PhysicalPort; /* 0x02 */ 842265236Sken U8 Reserved1; /* 0x03 */ 843265236Sken U32 DiscoveryStatus; /* 0x04 */ 844265236Sken} MPI2_EVENT_DATA_SAS_DISCOVERY, 845265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_DISCOVERY, 846265236Sken Mpi2EventDataSasDiscovery_t, MPI2_POINTER pMpi2EventDataSasDiscovery_t; 847265236Sken 848265236Sken/* SAS Discovery Event data Flags values */ 849265236Sken#define MPI2_EVENT_SAS_DISC_DEVICE_CHANGE (0x02) 850265236Sken#define MPI2_EVENT_SAS_DISC_IN_PROGRESS (0x01) 851265236Sken 852265236Sken/* SAS Discovery Event data ReasonCode values */ 853265236Sken#define MPI2_EVENT_SAS_DISC_RC_STARTED (0x01) 854265236Sken#define MPI2_EVENT_SAS_DISC_RC_COMPLETED (0x02) 855265236Sken 856265236Sken/* SAS Discovery Event data DiscoveryStatus values */ 857265236Sken#define MPI2_EVENT_SAS_DISC_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 858265236Sken#define MPI2_EVENT_SAS_DISC_DS_MAX_EXPANDERS_EXCEED (0x40000000) 859265236Sken#define MPI2_EVENT_SAS_DISC_DS_MAX_DEVICES_EXCEED (0x20000000) 860265236Sken#define MPI2_EVENT_SAS_DISC_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 861265236Sken#define MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR (0x08000000) 862265236Sken#define MPI2_EVENT_SAS_DISC_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 863265236Sken#define MPI2_EVENT_SAS_DISC_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 864265236Sken#define MPI2_EVENT_SAS_DISC_DS_MULTI_PORT_DOMAIN (0x00002000) 865265236Sken#define MPI2_EVENT_SAS_DISC_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 866265236Sken#define MPI2_EVENT_SAS_DISC_DS_UNSUPPORTED_DEVICE (0x00000800) 867265236Sken#define MPI2_EVENT_SAS_DISC_DS_TABLE_LINK (0x00000400) 868265236Sken#define MPI2_EVENT_SAS_DISC_DS_SUBTRACTIVE_LINK (0x00000200) 869265236Sken#define MPI2_EVENT_SAS_DISC_DS_SMP_CRC_ERROR (0x00000100) 870265236Sken#define MPI2_EVENT_SAS_DISC_DS_SMP_FUNCTION_FAILED (0x00000080) 871265236Sken#define MPI2_EVENT_SAS_DISC_DS_INDEX_NOT_EXIST (0x00000040) 872265236Sken#define MPI2_EVENT_SAS_DISC_DS_OUT_ROUTE_ENTRIES (0x00000020) 873265236Sken#define MPI2_EVENT_SAS_DISC_DS_SMP_TIMEOUT (0x00000010) 874265236Sken#define MPI2_EVENT_SAS_DISC_DS_MULTIPLE_PORTS (0x00000004) 875265236Sken#define MPI2_EVENT_SAS_DISC_DS_UNADDRESSABLE_DEVICE (0x00000002) 876265236Sken#define MPI2_EVENT_SAS_DISC_DS_LOOP_DETECTED (0x00000001) 877265236Sken 878265236Sken 879265236Sken/* SAS Broadcast Primitive Event data */ 880265236Sken 881265236Skentypedef struct _MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE 882265236Sken{ 883265236Sken U8 PhyNum; /* 0x00 */ 884265236Sken U8 Port; /* 0x01 */ 885265236Sken U8 PortWidth; /* 0x02 */ 886265236Sken U8 Primitive; /* 0x03 */ 887265236Sken} MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 888265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 889265236Sken Mpi2EventDataSasBroadcastPrimitive_t, 890265236Sken MPI2_POINTER pMpi2EventDataSasBroadcastPrimitive_t; 891265236Sken 892265236Sken/* defines for the Primitive field */ 893265236Sken#define MPI2_EVENT_PRIMITIVE_CHANGE (0x01) 894265236Sken#define MPI2_EVENT_PRIMITIVE_SES (0x02) 895265236Sken#define MPI2_EVENT_PRIMITIVE_EXPANDER (0x03) 896265236Sken#define MPI2_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT (0x04) 897265236Sken#define MPI2_EVENT_PRIMITIVE_RESERVED3 (0x05) 898265236Sken#define MPI2_EVENT_PRIMITIVE_RESERVED4 (0x06) 899265236Sken#define MPI2_EVENT_PRIMITIVE_CHANGE0_RESERVED (0x07) 900265236Sken#define MPI2_EVENT_PRIMITIVE_CHANGE1_RESERVED (0x08) 901265236Sken 902265236Sken 903265236Sken/* SAS Notify Primitive Event data */ 904265236Sken 905265236Skentypedef struct _MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE 906265236Sken{ 907265236Sken U8 PhyNum; /* 0x00 */ 908265236Sken U8 Port; /* 0x01 */ 909265236Sken U8 Reserved1; /* 0x02 */ 910265236Sken U8 Primitive; /* 0x03 */ 911265236Sken} MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE, 912265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE, 913265236Sken Mpi2EventDataSasNotifyPrimitive_t, 914265236Sken MPI2_POINTER pMpi2EventDataSasNotifyPrimitive_t; 915265236Sken 916265236Sken/* defines for the Primitive field */ 917265236Sken#define MPI2_EVENT_NOTIFY_ENABLE_SPINUP (0x01) 918265236Sken#define MPI2_EVENT_NOTIFY_POWER_LOSS_EXPECTED (0x02) 919265236Sken#define MPI2_EVENT_NOTIFY_RESERVED1 (0x03) 920265236Sken#define MPI2_EVENT_NOTIFY_RESERVED2 (0x04) 921265236Sken 922265236Sken 923265236Sken/* SAS Initiator Device Status Change Event data */ 924265236Sken 925265236Skentypedef struct _MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE 926265236Sken{ 927265236Sken U8 ReasonCode; /* 0x00 */ 928265236Sken U8 PhysicalPort; /* 0x01 */ 929265236Sken U16 DevHandle; /* 0x02 */ 930265236Sken U64 SASAddress; /* 0x04 */ 931265236Sken} MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 932265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 933265236Sken Mpi2EventDataSasInitDevStatusChange_t, 934265236Sken MPI2_POINTER pMpi2EventDataSasInitDevStatusChange_t; 935265236Sken 936265236Sken/* SAS Initiator Device Status Change event ReasonCode values */ 937265236Sken#define MPI2_EVENT_SAS_INIT_RC_ADDED (0x01) 938265236Sken#define MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING (0x02) 939265236Sken 940265236Sken 941265236Sken/* SAS Initiator Device Table Overflow Event data */ 942265236Sken 943265236Skentypedef struct _MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW 944265236Sken{ 945265236Sken U16 MaxInit; /* 0x00 */ 946265236Sken U16 CurrentInit; /* 0x02 */ 947265236Sken U64 SASAddress; /* 0x04 */ 948265236Sken} MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 949265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 950265236Sken Mpi2EventDataSasInitTableOverflow_t, 951265236Sken MPI2_POINTER pMpi2EventDataSasInitTableOverflow_t; 952265236Sken 953265236Sken 954265236Sken/* SAS Topology Change List Event data */ 955265236Sken 956265236Sken/* 957265236Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 958265236Sken * one and check NumEntries at runtime. 959265236Sken */ 960265236Sken#ifndef MPI2_EVENT_SAS_TOPO_PHY_COUNT 961265236Sken#define MPI2_EVENT_SAS_TOPO_PHY_COUNT (1) 962265236Sken#endif 963265236Sken 964265236Skentypedef struct _MPI2_EVENT_SAS_TOPO_PHY_ENTRY 965265236Sken{ 966265236Sken U16 AttachedDevHandle; /* 0x00 */ 967265236Sken U8 LinkRate; /* 0x02 */ 968265236Sken U8 PhyStatus; /* 0x03 */ 969265236Sken} MPI2_EVENT_SAS_TOPO_PHY_ENTRY, MPI2_POINTER PTR_MPI2_EVENT_SAS_TOPO_PHY_ENTRY, 970265236Sken Mpi2EventSasTopoPhyEntry_t, MPI2_POINTER pMpi2EventSasTopoPhyEntry_t; 971265236Sken 972265236Skentypedef struct _MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST 973265236Sken{ 974265236Sken U16 EnclosureHandle; /* 0x00 */ 975265236Sken U16 ExpanderDevHandle; /* 0x02 */ 976265236Sken U8 NumPhys; /* 0x04 */ 977265236Sken U8 Reserved1; /* 0x05 */ 978265236Sken U16 Reserved2; /* 0x06 */ 979265236Sken U8 NumEntries; /* 0x08 */ 980265236Sken U8 StartPhyNum; /* 0x09 */ 981265236Sken U8 ExpStatus; /* 0x0A */ 982265236Sken U8 PhysicalPort; /* 0x0B */ 983265236Sken MPI2_EVENT_SAS_TOPO_PHY_ENTRY PHY[MPI2_EVENT_SAS_TOPO_PHY_COUNT]; /* 0x0C*/ 984265236Sken} MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, 985265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, 986265236Sken Mpi2EventDataSasTopologyChangeList_t, 987265236Sken MPI2_POINTER pMpi2EventDataSasTopologyChangeList_t; 988265236Sken 989265236Sken/* values for the ExpStatus field */ 990265236Sken#define MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER (0x00) 991265236Sken#define MPI2_EVENT_SAS_TOPO_ES_ADDED (0x01) 992265236Sken#define MPI2_EVENT_SAS_TOPO_ES_NOT_RESPONDING (0x02) 993265236Sken#define MPI2_EVENT_SAS_TOPO_ES_RESPONDING (0x03) 994265236Sken#define MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING (0x04) 995265236Sken 996265236Sken/* defines for the LinkRate field */ 997265236Sken#define MPI2_EVENT_SAS_TOPO_LR_CURRENT_MASK (0xF0) 998265236Sken#define MPI2_EVENT_SAS_TOPO_LR_CURRENT_SHIFT (4) 999265236Sken#define MPI2_EVENT_SAS_TOPO_LR_PREV_MASK (0x0F) 1000265236Sken#define MPI2_EVENT_SAS_TOPO_LR_PREV_SHIFT (0) 1001265236Sken 1002265236Sken#define MPI2_EVENT_SAS_TOPO_LR_UNKNOWN_LINK_RATE (0x00) 1003265236Sken#define MPI2_EVENT_SAS_TOPO_LR_PHY_DISABLED (0x01) 1004265236Sken#define MPI2_EVENT_SAS_TOPO_LR_NEGOTIATION_FAILED (0x02) 1005265236Sken#define MPI2_EVENT_SAS_TOPO_LR_SATA_OOB_COMPLETE (0x03) 1006265236Sken#define MPI2_EVENT_SAS_TOPO_LR_PORT_SELECTOR (0x04) 1007265236Sken#define MPI2_EVENT_SAS_TOPO_LR_SMP_RESET_IN_PROGRESS (0x05) 1008265236Sken#define MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY (0x06) 1009265236Sken#define MPI2_EVENT_SAS_TOPO_LR_RATE_1_5 (0x08) 1010265236Sken#define MPI2_EVENT_SAS_TOPO_LR_RATE_3_0 (0x09) 1011265236Sken#define MPI2_EVENT_SAS_TOPO_LR_RATE_6_0 (0x0A) 1012265236Sken#define MPI25_EVENT_SAS_TOPO_LR_RATE_12_0 (0x0B) 1013265236Sken 1014265236Sken/* values for the PhyStatus field */ 1015265236Sken#define MPI2_EVENT_SAS_TOPO_PHYSTATUS_VACANT (0x80) 1016265236Sken#define MPI2_EVENT_SAS_TOPO_PS_MULTIPLEX_CHANGE (0x10) 1017265236Sken/* values for the PhyStatus ReasonCode sub-field */ 1018265236Sken#define MPI2_EVENT_SAS_TOPO_RC_MASK (0x0F) 1019265236Sken#define MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED (0x01) 1020265236Sken#define MPI2_EVENT_SAS_TOPO_RC_TARG_NOT_RESPONDING (0x02) 1021265236Sken#define MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED (0x03) 1022265236Sken#define MPI2_EVENT_SAS_TOPO_RC_NO_CHANGE (0x04) 1023265236Sken#define MPI2_EVENT_SAS_TOPO_RC_DELAY_NOT_RESPONDING (0x05) 1024265236Sken 1025265236Sken 1026265236Sken/* SAS Enclosure Device Status Change Event data */ 1027265236Sken 1028265236Skentypedef struct _MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE 1029265236Sken{ 1030265236Sken U16 EnclosureHandle; /* 0x00 */ 1031265236Sken U8 ReasonCode; /* 0x02 */ 1032265236Sken U8 PhysicalPort; /* 0x03 */ 1033265236Sken U64 EnclosureLogicalID; /* 0x04 */ 1034265236Sken U16 NumSlots; /* 0x0C */ 1035265236Sken U16 StartSlot; /* 0x0E */ 1036265236Sken U32 PhyBits; /* 0x10 */ 1037265236Sken} MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE, 1038265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE, 1039265236Sken Mpi2EventDataSasEnclDevStatusChange_t, 1040265236Sken MPI2_POINTER pMpi2EventDataSasEnclDevStatusChange_t; 1041265236Sken 1042265236Sken/* SAS Enclosure Device Status Change event ReasonCode values */ 1043265236Sken#define MPI2_EVENT_SAS_ENCL_RC_ADDED (0x01) 1044265236Sken#define MPI2_EVENT_SAS_ENCL_RC_NOT_RESPONDING (0x02) 1045265236Sken 1046265236Sken 1047265236Sken/* SAS PHY Counter Event data */ 1048265236Sken 1049265236Skentypedef struct _MPI2_EVENT_DATA_SAS_PHY_COUNTER 1050265236Sken{ 1051265236Sken U64 TimeStamp; /* 0x00 */ 1052265236Sken U32 Reserved1; /* 0x08 */ 1053265236Sken U8 PhyEventCode; /* 0x0C */ 1054265236Sken U8 PhyNum; /* 0x0D */ 1055265236Sken U16 Reserved2; /* 0x0E */ 1056265236Sken U32 PhyEventInfo; /* 0x10 */ 1057265236Sken U8 CounterType; /* 0x14 */ 1058265236Sken U8 ThresholdWindow; /* 0x15 */ 1059265236Sken U8 TimeUnits; /* 0x16 */ 1060265236Sken U8 Reserved3; /* 0x17 */ 1061265236Sken U32 EventThreshold; /* 0x18 */ 1062265236Sken U16 ThresholdFlags; /* 0x1C */ 1063265236Sken U16 Reserved4; /* 0x1E */ 1064265236Sken} MPI2_EVENT_DATA_SAS_PHY_COUNTER, 1065265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_PHY_COUNTER, 1066265236Sken Mpi2EventDataSasPhyCounter_t, MPI2_POINTER pMpi2EventDataSasPhyCounter_t; 1067265236Sken 1068265236Sken/* use MPI2_SASPHY3_EVENT_CODE_ values from mpi2_cnfg.h for the PhyEventCode field */ 1069265236Sken 1070265236Sken/* use MPI2_SASPHY3_COUNTER_TYPE_ values from mpi2_cnfg.h for the CounterType field */ 1071265236Sken 1072265236Sken/* use MPI2_SASPHY3_TIME_UNITS_ values from mpi2_cnfg.h for the TimeUnits field */ 1073265236Sken 1074265236Sken/* use MPI2_SASPHY3_TFLAGS_ values from mpi2_cnfg.h for the ThresholdFlags field */ 1075265236Sken 1076265236Sken 1077265236Sken/* SAS Quiesce Event data */ 1078265236Sken 1079265236Skentypedef struct _MPI2_EVENT_DATA_SAS_QUIESCE 1080265236Sken{ 1081265236Sken U8 ReasonCode; /* 0x00 */ 1082265236Sken U8 Reserved1; /* 0x01 */ 1083265236Sken U16 Reserved2; /* 0x02 */ 1084265236Sken U32 Reserved3; /* 0x04 */ 1085265236Sken} MPI2_EVENT_DATA_SAS_QUIESCE, 1086265236Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_QUIESCE, 1087265236Sken Mpi2EventDataSasQuiesce_t, MPI2_POINTER pMpi2EventDataSasQuiesce_t; 1088265236Sken 1089265236Sken/* SAS Quiesce Event data ReasonCode values */ 1090265236Sken#define MPI2_EVENT_SAS_QUIESCE_RC_STARTED (0x01) 1091265236Sken#define MPI2_EVENT_SAS_QUIESCE_RC_COMPLETED (0x02) 1092265236Sken 1093265236Sken 1094265236Sken/* Host Based Discovery Phy Event data */ 1095265236Sken 1096265236Skentypedef struct _MPI2_EVENT_HBD_PHY_SAS 1097265236Sken{ 1098265236Sken U8 Flags; /* 0x00 */ 1099265236Sken U8 NegotiatedLinkRate; /* 0x01 */ 1100265236Sken U8 PhyNum; /* 0x02 */ 1101265236Sken U8 PhysicalPort; /* 0x03 */ 1102265236Sken U32 Reserved1; /* 0x04 */ 1103265236Sken U8 InitialFrame[28]; /* 0x08 */ 1104265236Sken} MPI2_EVENT_HBD_PHY_SAS, MPI2_POINTER PTR_MPI2_EVENT_HBD_PHY_SAS, 1105265236Sken Mpi2EventHbdPhySas_t, MPI2_POINTER pMpi2EventHbdPhySas_t; 1106265236Sken 1107265236Sken/* values for the Flags field */ 1108265236Sken#define MPI2_EVENT_HBD_SAS_FLAGS_FRAME_VALID (0x02) 1109265236Sken#define MPI2_EVENT_HBD_SAS_FLAGS_SATA_FRAME (0x01) 1110265236Sken 1111265236Sken/* use MPI2_SAS_NEG_LINK_RATE_ defines from mpi2_cnfg.h for the NegotiatedLinkRate field */ 1112265236Sken 1113265236Skentypedef union _MPI2_EVENT_HBD_DESCRIPTOR 1114265236Sken{ 1115265236Sken MPI2_EVENT_HBD_PHY_SAS Sas; 1116265236Sken} MPI2_EVENT_HBD_DESCRIPTOR, MPI2_POINTER PTR_MPI2_EVENT_HBD_DESCRIPTOR, 1117265236Sken Mpi2EventHbdDescriptor_t, MPI2_POINTER pMpi2EventHbdDescriptor_t; 1118265236Sken 1119265236Skentypedef struct _MPI2_EVENT_DATA_HBD_PHY 1120265236Sken{ 1121265236Sken U8 DescriptorType; /* 0x00 */ 1122265236Sken U8 Reserved1; /* 0x01 */ 1123265236Sken U16 Reserved2; /* 0x02 */ 1124265236Sken U32 Reserved3; /* 0x04 */ 1125265236Sken MPI2_EVENT_HBD_DESCRIPTOR Descriptor; /* 0x08 */ 1126265236Sken} MPI2_EVENT_DATA_HBD_PHY, MPI2_POINTER PTR_MPI2_EVENT_DATA_HBD_PHY, 1127265236Sken Mpi2EventDataHbdPhy_t, MPI2_POINTER pMpi2EventDataMpi2EventDataHbdPhy_t; 1128265236Sken 1129265236Sken/* values for the DescriptorType field */ 1130265236Sken#define MPI2_EVENT_HBD_DT_SAS (0x01) 1131265236Sken 1132265236Sken 1133265236Sken 1134265236Sken/**************************************************************************** 1135265236Sken* EventAck message 1136265236Sken****************************************************************************/ 1137265236Sken 1138265236Sken/* EventAck Request message */ 1139265236Skentypedef struct _MPI2_EVENT_ACK_REQUEST 1140265236Sken{ 1141265236Sken U16 Reserved1; /* 0x00 */ 1142265236Sken U8 ChainOffset; /* 0x02 */ 1143265236Sken U8 Function; /* 0x03 */ 1144265236Sken U16 Reserved2; /* 0x04 */ 1145265236Sken U8 Reserved3; /* 0x06 */ 1146265236Sken U8 MsgFlags; /* 0x07 */ 1147265236Sken U8 VP_ID; /* 0x08 */ 1148265236Sken U8 VF_ID; /* 0x09 */ 1149265236Sken U16 Reserved4; /* 0x0A */ 1150265236Sken U16 Event; /* 0x0C */ 1151265236Sken U16 Reserved5; /* 0x0E */ 1152265236Sken U32 EventContext; /* 0x10 */ 1153265236Sken} MPI2_EVENT_ACK_REQUEST, MPI2_POINTER PTR_MPI2_EVENT_ACK_REQUEST, 1154265236Sken Mpi2EventAckRequest_t, MPI2_POINTER pMpi2EventAckRequest_t; 1155265236Sken 1156265236Sken 1157265236Sken/* EventAck Reply message */ 1158265236Skentypedef struct _MPI2_EVENT_ACK_REPLY 1159265236Sken{ 1160265236Sken U16 Reserved1; /* 0x00 */ 1161265236Sken U8 MsgLength; /* 0x02 */ 1162265236Sken U8 Function; /* 0x03 */ 1163265236Sken U16 Reserved2; /* 0x04 */ 1164265236Sken U8 Reserved3; /* 0x06 */ 1165265236Sken U8 MsgFlags; /* 0x07 */ 1166265236Sken U8 VP_ID; /* 0x08 */ 1167265236Sken U8 VF_ID; /* 0x09 */ 1168265236Sken U16 Reserved4; /* 0x0A */ 1169265236Sken U16 Reserved5; /* 0x0C */ 1170265236Sken U16 IOCStatus; /* 0x0E */ 1171265236Sken U32 IOCLogInfo; /* 0x10 */ 1172265236Sken} MPI2_EVENT_ACK_REPLY, MPI2_POINTER PTR_MPI2_EVENT_ACK_REPLY, 1173265236Sken Mpi2EventAckReply_t, MPI2_POINTER pMpi2EventAckReply_t; 1174265236Sken 1175265236Sken 1176265236Sken/**************************************************************************** 1177265236Sken* SendHostMessage message 1178265236Sken****************************************************************************/ 1179265236Sken 1180265236Sken/* SendHostMessage Request message */ 1181265236Skentypedef struct _MPI2_SEND_HOST_MESSAGE_REQUEST 1182265236Sken{ 1183265236Sken U16 HostDataLength; /* 0x00 */ 1184265236Sken U8 ChainOffset; /* 0x02 */ 1185265236Sken U8 Function; /* 0x03 */ 1186265236Sken U16 Reserved1; /* 0x04 */ 1187265236Sken U8 Reserved2; /* 0x06 */ 1188265236Sken U8 MsgFlags; /* 0x07 */ 1189265236Sken U8 VP_ID; /* 0x08 */ 1190265236Sken U8 VF_ID; /* 0x09 */ 1191265236Sken U16 Reserved3; /* 0x0A */ 1192265236Sken U8 Reserved4; /* 0x0C */ 1193265236Sken U8 DestVF_ID; /* 0x0D */ 1194265236Sken U16 Reserved5; /* 0x0E */ 1195265236Sken U32 Reserved6; /* 0x10 */ 1196265236Sken U32 Reserved7; /* 0x14 */ 1197265236Sken U32 Reserved8; /* 0x18 */ 1198265236Sken U32 Reserved9; /* 0x1C */ 1199265236Sken U32 Reserved10; /* 0x20 */ 1200265236Sken U32 HostData[1]; /* 0x24 */ 1201265236Sken} MPI2_SEND_HOST_MESSAGE_REQUEST, 1202265236Sken MPI2_POINTER PTR_MPI2_SEND_HOST_MESSAGE_REQUEST, 1203265236Sken Mpi2SendHostMessageRequest_t, MPI2_POINTER pMpi2SendHostMessageRequest_t; 1204265236Sken 1205265236Sken 1206265236Sken/* SendHostMessage Reply message */ 1207265236Skentypedef struct _MPI2_SEND_HOST_MESSAGE_REPLY 1208265236Sken{ 1209265236Sken U16 HostDataLength; /* 0x00 */ 1210265236Sken U8 MsgLength; /* 0x02 */ 1211265236Sken U8 Function; /* 0x03 */ 1212265236Sken U16 Reserved1; /* 0x04 */ 1213265236Sken U8 Reserved2; /* 0x06 */ 1214265236Sken U8 MsgFlags; /* 0x07 */ 1215265236Sken U8 VP_ID; /* 0x08 */ 1216265236Sken U8 VF_ID; /* 0x09 */ 1217265236Sken U16 Reserved3; /* 0x0A */ 1218265236Sken U16 Reserved4; /* 0x0C */ 1219265236Sken U16 IOCStatus; /* 0x0E */ 1220265236Sken U32 IOCLogInfo; /* 0x10 */ 1221265236Sken} MPI2_SEND_HOST_MESSAGE_REPLY, MPI2_POINTER PTR_MPI2_SEND_HOST_MESSAGE_REPLY, 1222265236Sken Mpi2SendHostMessageReply_t, MPI2_POINTER pMpi2SendHostMessageReply_t; 1223265236Sken 1224265236Sken 1225265236Sken/**************************************************************************** 1226265236Sken* FWDownload message 1227265236Sken****************************************************************************/ 1228265236Sken 1229265236Sken/* MPI v2.0 FWDownload Request message */ 1230265236Skentypedef struct _MPI2_FW_DOWNLOAD_REQUEST 1231265236Sken{ 1232265236Sken U8 ImageType; /* 0x00 */ 1233265236Sken U8 Reserved1; /* 0x01 */ 1234265236Sken U8 ChainOffset; /* 0x02 */ 1235265236Sken U8 Function; /* 0x03 */ 1236265236Sken U16 Reserved2; /* 0x04 */ 1237265236Sken U8 Reserved3; /* 0x06 */ 1238265236Sken U8 MsgFlags; /* 0x07 */ 1239265236Sken U8 VP_ID; /* 0x08 */ 1240265236Sken U8 VF_ID; /* 0x09 */ 1241265236Sken U16 Reserved4; /* 0x0A */ 1242265236Sken U32 TotalImageSize; /* 0x0C */ 1243265236Sken U32 Reserved5; /* 0x10 */ 1244265236Sken MPI2_MPI_SGE_UNION SGL; /* 0x14 */ 1245265236Sken} MPI2_FW_DOWNLOAD_REQUEST, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_REQUEST, 1246265236Sken Mpi2FWDownloadRequest, MPI2_POINTER pMpi2FWDownloadRequest; 1247265236Sken 1248265236Sken#define MPI2_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT (0x01) 1249265236Sken 1250265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_FW (0x01) 1251265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_BIOS (0x02) 1252265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_MANUFACTURING (0x06) 1253265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_1 (0x07) 1254265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_2 (0x08) 1255265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_MEGARAID (0x09) 1256265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_COMPLETE (0x0A) 1257265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 1258265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY (0x0C) /* MPI v2.5 and newer */ 1259265236Sken#define MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC (0xF0) 1260265236Sken 1261265236Sken/* MPI v2.0 FWDownload TransactionContext Element */ 1262265236Skentypedef struct _MPI2_FW_DOWNLOAD_TCSGE 1263265236Sken{ 1264265236Sken U8 Reserved1; /* 0x00 */ 1265265236Sken U8 ContextSize; /* 0x01 */ 1266265236Sken U8 DetailsLength; /* 0x02 */ 1267265236Sken U8 Flags; /* 0x03 */ 1268265236Sken U32 Reserved2; /* 0x04 */ 1269265236Sken U32 ImageOffset; /* 0x08 */ 1270265236Sken U32 ImageSize; /* 0x0C */ 1271265236Sken} MPI2_FW_DOWNLOAD_TCSGE, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_TCSGE, 1272265236Sken Mpi2FWDownloadTCSGE_t, MPI2_POINTER pMpi2FWDownloadTCSGE_t; 1273265236Sken 1274265236Sken 1275265236Sken/* MPI v2.5 FWDownload Request message */ 1276265236Skentypedef struct _MPI25_FW_DOWNLOAD_REQUEST 1277265236Sken{ 1278265236Sken U8 ImageType; /* 0x00 */ 1279265236Sken U8 Reserved1; /* 0x01 */ 1280265236Sken U8 ChainOffset; /* 0x02 */ 1281265236Sken U8 Function; /* 0x03 */ 1282265236Sken U16 Reserved2; /* 0x04 */ 1283265236Sken U8 Reserved3; /* 0x06 */ 1284265236Sken U8 MsgFlags; /* 0x07 */ 1285265236Sken U8 VP_ID; /* 0x08 */ 1286265236Sken U8 VF_ID; /* 0x09 */ 1287265236Sken U16 Reserved4; /* 0x0A */ 1288265236Sken U32 TotalImageSize; /* 0x0C */ 1289265236Sken U32 Reserved5; /* 0x10 */ 1290265236Sken U32 Reserved6; /* 0x14 */ 1291265236Sken U32 ImageOffset; /* 0x18 */ 1292265236Sken U32 ImageSize; /* 0x1C */ 1293265236Sken MPI25_SGE_IO_UNION SGL; /* 0x20 */ 1294265236Sken} MPI25_FW_DOWNLOAD_REQUEST, MPI2_POINTER PTR_MPI25_FW_DOWNLOAD_REQUEST, 1295265236Sken Mpi25FWDownloadRequest, MPI2_POINTER pMpi25FWDownloadRequest; 1296265236Sken 1297265236Sken 1298265236Sken/* FWDownload Reply message */ 1299265236Skentypedef struct _MPI2_FW_DOWNLOAD_REPLY 1300265236Sken{ 1301265236Sken U8 ImageType; /* 0x00 */ 1302265236Sken U8 Reserved1; /* 0x01 */ 1303265236Sken U8 MsgLength; /* 0x02 */ 1304265236Sken U8 Function; /* 0x03 */ 1305265236Sken U16 Reserved2; /* 0x04 */ 1306265236Sken U8 Reserved3; /* 0x06 */ 1307265236Sken U8 MsgFlags; /* 0x07 */ 1308265236Sken U8 VP_ID; /* 0x08 */ 1309265236Sken U8 VF_ID; /* 0x09 */ 1310265236Sken U16 Reserved4; /* 0x0A */ 1311265236Sken U16 Reserved5; /* 0x0C */ 1312265236Sken U16 IOCStatus; /* 0x0E */ 1313265236Sken U32 IOCLogInfo; /* 0x10 */ 1314265236Sken} MPI2_FW_DOWNLOAD_REPLY, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_REPLY, 1315265236Sken Mpi2FWDownloadReply_t, MPI2_POINTER pMpi2FWDownloadReply_t; 1316265236Sken 1317265236Sken 1318265236Sken/**************************************************************************** 1319265236Sken* FWUpload message 1320265236Sken****************************************************************************/ 1321265236Sken 1322265236Sken/* MPI v2.0 FWUpload Request message */ 1323265236Skentypedef struct _MPI2_FW_UPLOAD_REQUEST 1324265236Sken{ 1325265236Sken U8 ImageType; /* 0x00 */ 1326265236Sken U8 Reserved1; /* 0x01 */ 1327265236Sken U8 ChainOffset; /* 0x02 */ 1328265236Sken U8 Function; /* 0x03 */ 1329265236Sken U16 Reserved2; /* 0x04 */ 1330265236Sken U8 Reserved3; /* 0x06 */ 1331265236Sken U8 MsgFlags; /* 0x07 */ 1332265236Sken U8 VP_ID; /* 0x08 */ 1333265236Sken U8 VF_ID; /* 0x09 */ 1334265236Sken U16 Reserved4; /* 0x0A */ 1335265236Sken U32 Reserved5; /* 0x0C */ 1336265236Sken U32 Reserved6; /* 0x10 */ 1337265236Sken MPI2_MPI_SGE_UNION SGL; /* 0x14 */ 1338265236Sken} MPI2_FW_UPLOAD_REQUEST, MPI2_POINTER PTR_MPI2_FW_UPLOAD_REQUEST, 1339265236Sken Mpi2FWUploadRequest_t, MPI2_POINTER pMpi2FWUploadRequest_t; 1340265236Sken 1341265236Sken#define MPI2_FW_UPLOAD_ITYPE_FW_CURRENT (0x00) 1342265236Sken#define MPI2_FW_UPLOAD_ITYPE_FW_FLASH (0x01) 1343265236Sken#define MPI2_FW_UPLOAD_ITYPE_BIOS_FLASH (0x02) 1344265236Sken#define MPI2_FW_UPLOAD_ITYPE_FW_BACKUP (0x05) 1345265236Sken#define MPI2_FW_UPLOAD_ITYPE_MANUFACTURING (0x06) 1346265236Sken#define MPI2_FW_UPLOAD_ITYPE_CONFIG_1 (0x07) 1347265236Sken#define MPI2_FW_UPLOAD_ITYPE_CONFIG_2 (0x08) 1348265236Sken#define MPI2_FW_UPLOAD_ITYPE_MEGARAID (0x09) 1349265236Sken#define MPI2_FW_UPLOAD_ITYPE_COMPLETE (0x0A) 1350265236Sken#define MPI2_FW_UPLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 1351265236Sken 1352265236Sken/* MPI v2.0 FWUpload TransactionContext Element */ 1353265236Skentypedef struct _MPI2_FW_UPLOAD_TCSGE 1354265236Sken{ 1355265236Sken U8 Reserved1; /* 0x00 */ 1356265236Sken U8 ContextSize; /* 0x01 */ 1357265236Sken U8 DetailsLength; /* 0x02 */ 1358265236Sken U8 Flags; /* 0x03 */ 1359265236Sken U32 Reserved2; /* 0x04 */ 1360265236Sken U32 ImageOffset; /* 0x08 */ 1361265236Sken U32 ImageSize; /* 0x0C */ 1362265236Sken} MPI2_FW_UPLOAD_TCSGE, MPI2_POINTER PTR_MPI2_FW_UPLOAD_TCSGE, 1363265236Sken Mpi2FWUploadTCSGE_t, MPI2_POINTER pMpi2FWUploadTCSGE_t; 1364265236Sken 1365265236Sken 1366265236Sken/* MPI v2.5 FWUpload Request message */ 1367265236Skentypedef struct _MPI25_FW_UPLOAD_REQUEST 1368265236Sken{ 1369265236Sken U8 ImageType; /* 0x00 */ 1370265236Sken U8 Reserved1; /* 0x01 */ 1371265236Sken U8 ChainOffset; /* 0x02 */ 1372265236Sken U8 Function; /* 0x03 */ 1373265236Sken U16 Reserved2; /* 0x04 */ 1374265236Sken U8 Reserved3; /* 0x06 */ 1375265236Sken U8 MsgFlags; /* 0x07 */ 1376265236Sken U8 VP_ID; /* 0x08 */ 1377265236Sken U8 VF_ID; /* 0x09 */ 1378265236Sken U16 Reserved4; /* 0x0A */ 1379265236Sken U32 Reserved5; /* 0x0C */ 1380265236Sken U32 Reserved6; /* 0x10 */ 1381265236Sken U32 Reserved7; /* 0x14 */ 1382265236Sken U32 ImageOffset; /* 0x18 */ 1383265236Sken U32 ImageSize; /* 0x1C */ 1384265236Sken MPI25_SGE_IO_UNION SGL; /* 0x20 */ 1385265236Sken} MPI25_FW_UPLOAD_REQUEST, MPI2_POINTER PTR_MPI25_FW_UPLOAD_REQUEST, 1386265236Sken Mpi25FWUploadRequest_t, MPI2_POINTER pMpi25FWUploadRequest_t; 1387265236Sken 1388265236Sken 1389265236Sken/* FWUpload Reply message */ 1390265236Skentypedef struct _MPI2_FW_UPLOAD_REPLY 1391265236Sken{ 1392265236Sken U8 ImageType; /* 0x00 */ 1393265236Sken U8 Reserved1; /* 0x01 */ 1394265236Sken U8 MsgLength; /* 0x02 */ 1395265236Sken U8 Function; /* 0x03 */ 1396265236Sken U16 Reserved2; /* 0x04 */ 1397265236Sken U8 Reserved3; /* 0x06 */ 1398265236Sken U8 MsgFlags; /* 0x07 */ 1399265236Sken U8 VP_ID; /* 0x08 */ 1400265236Sken U8 VF_ID; /* 0x09 */ 1401265236Sken U16 Reserved4; /* 0x0A */ 1402265236Sken U16 Reserved5; /* 0x0C */ 1403265236Sken U16 IOCStatus; /* 0x0E */ 1404265236Sken U32 IOCLogInfo; /* 0x10 */ 1405265236Sken U32 ActualImageSize; /* 0x14 */ 1406265236Sken} MPI2_FW_UPLOAD_REPLY, MPI2_POINTER PTR_MPI2_FW_UPLOAD_REPLY, 1407265236Sken Mpi2FWUploadReply_t, MPI2_POINTER pMPi2FWUploadReply_t; 1408265236Sken 1409265236Sken 1410265236Sken/* FW Image Header */ 1411265236Skentypedef struct _MPI2_FW_IMAGE_HEADER 1412265236Sken{ 1413265236Sken U32 Signature; /* 0x00 */ 1414265236Sken U32 Signature0; /* 0x04 */ 1415265236Sken U32 Signature1; /* 0x08 */ 1416265236Sken U32 Signature2; /* 0x0C */ 1417265236Sken MPI2_VERSION_UNION MPIVersion; /* 0x10 */ 1418265236Sken MPI2_VERSION_UNION FWVersion; /* 0x14 */ 1419265236Sken MPI2_VERSION_UNION NVDATAVersion; /* 0x18 */ 1420265236Sken MPI2_VERSION_UNION PackageVersion; /* 0x1C */ 1421265236Sken U16 VendorID; /* 0x20 */ 1422265236Sken U16 ProductID; /* 0x22 */ 1423265236Sken U16 ProtocolFlags; /* 0x24 */ 1424265236Sken U16 Reserved26; /* 0x26 */ 1425265236Sken U32 IOCCapabilities; /* 0x28 */ 1426265236Sken U32 ImageSize; /* 0x2C */ 1427265236Sken U32 NextImageHeaderOffset; /* 0x30 */ 1428265236Sken U32 Checksum; /* 0x34 */ 1429265236Sken U32 Reserved38; /* 0x38 */ 1430265236Sken U32 Reserved3C; /* 0x3C */ 1431265236Sken U32 Reserved40; /* 0x40 */ 1432265236Sken U32 Reserved44; /* 0x44 */ 1433265236Sken U32 Reserved48; /* 0x48 */ 1434265236Sken U32 Reserved4C; /* 0x4C */ 1435265236Sken U32 Reserved50; /* 0x50 */ 1436265236Sken U32 Reserved54; /* 0x54 */ 1437265236Sken U32 Reserved58; /* 0x58 */ 1438265236Sken U32 Reserved5C; /* 0x5C */ 1439265236Sken U32 Reserved60; /* 0x60 */ 1440265236Sken U32 FirmwareVersionNameWhat; /* 0x64 */ 1441265236Sken U8 FirmwareVersionName[32]; /* 0x68 */ 1442265236Sken U32 VendorNameWhat; /* 0x88 */ 1443265236Sken U8 VendorName[32]; /* 0x8C */ 1444265236Sken U32 PackageNameWhat; /* 0x88 */ 1445265236Sken U8 PackageName[32]; /* 0x8C */ 1446265236Sken U32 ReservedD0; /* 0xD0 */ 1447265236Sken U32 ReservedD4; /* 0xD4 */ 1448265236Sken U32 ReservedD8; /* 0xD8 */ 1449265236Sken U32 ReservedDC; /* 0xDC */ 1450265236Sken U32 ReservedE0; /* 0xE0 */ 1451265236Sken U32 ReservedE4; /* 0xE4 */ 1452265236Sken U32 ReservedE8; /* 0xE8 */ 1453265236Sken U32 ReservedEC; /* 0xEC */ 1454265236Sken U32 ReservedF0; /* 0xF0 */ 1455265236Sken U32 ReservedF4; /* 0xF4 */ 1456265236Sken U32 ReservedF8; /* 0xF8 */ 1457265236Sken U32 ReservedFC; /* 0xFC */ 1458265236Sken} MPI2_FW_IMAGE_HEADER, MPI2_POINTER PTR_MPI2_FW_IMAGE_HEADER, 1459265236Sken Mpi2FWImageHeader_t, MPI2_POINTER pMpi2FWImageHeader_t; 1460265236Sken 1461265236Sken/* Signature field */ 1462265236Sken#define MPI2_FW_HEADER_SIGNATURE_OFFSET (0x00) 1463265236Sken#define MPI2_FW_HEADER_SIGNATURE_MASK (0xFF000000) 1464265236Sken#define MPI2_FW_HEADER_SIGNATURE (0xEA000000) 1465265236Sken 1466265236Sken/* Signature0 field */ 1467265236Sken#define MPI2_FW_HEADER_SIGNATURE0_OFFSET (0x04) 1468265236Sken#define MPI2_FW_HEADER_SIGNATURE0 (0x5AFAA55A) 1469265236Sken 1470265236Sken/* Signature1 field */ 1471265236Sken#define MPI2_FW_HEADER_SIGNATURE1_OFFSET (0x08) 1472265236Sken#define MPI2_FW_HEADER_SIGNATURE1 (0xA55AFAA5) 1473265236Sken 1474265236Sken/* Signature2 field */ 1475265236Sken#define MPI2_FW_HEADER_SIGNATURE2_OFFSET (0x0C) 1476265236Sken#define MPI2_FW_HEADER_SIGNATURE2 (0x5AA55AFA) 1477265236Sken 1478265236Sken 1479265236Sken/* defines for using the ProductID field */ 1480265236Sken#define MPI2_FW_HEADER_PID_TYPE_MASK (0xF000) 1481265236Sken#define MPI2_FW_HEADER_PID_TYPE_SAS (0x2000) 1482265236Sken 1483265236Sken#define MPI2_FW_HEADER_PID_PROD_MASK (0x0F00) 1484265236Sken#define MPI2_FW_HEADER_PID_PROD_A (0x0000) 1485265236Sken#define MPI2_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI (0x0200) 1486265236Sken#define MPI2_FW_HEADER_PID_PROD_IR_SCSI (0x0700) 1487265236Sken 1488265236Sken 1489265236Sken#define MPI2_FW_HEADER_PID_FAMILY_MASK (0x00FF) 1490265236Sken/* SAS ProductID Family bits */ 1491265236Sken#define MPI2_FW_HEADER_PID_FAMILY_2108_SAS (0x0013) 1492265236Sken#define MPI2_FW_HEADER_PID_FAMILY_2208_SAS (0x0014) 1493265236Sken#define MPI25_FW_HEADER_PID_FAMILY_3108_SAS (0x0021) 1494265236Sken 1495265236Sken/* use MPI2_IOCFACTS_PROTOCOL_ defines for ProtocolFlags field */ 1496265236Sken 1497265236Sken/* use MPI2_IOCFACTS_CAPABILITY_ defines for IOCCapabilities field */ 1498265236Sken 1499265236Sken 1500265236Sken#define MPI2_FW_HEADER_IMAGESIZE_OFFSET (0x2C) 1501265236Sken#define MPI2_FW_HEADER_NEXTIMAGE_OFFSET (0x30) 1502265236Sken#define MPI2_FW_HEADER_VERNMHWAT_OFFSET (0x64) 1503265236Sken 1504265236Sken#define MPI2_FW_HEADER_WHAT_SIGNATURE (0x29232840) 1505265236Sken 1506265236Sken#define MPI2_FW_HEADER_SIZE (0x100) 1507265236Sken 1508265236Sken 1509265236Sken/* Extended Image Header */ 1510265236Skentypedef struct _MPI2_EXT_IMAGE_HEADER 1511265236Sken 1512265236Sken{ 1513265236Sken U8 ImageType; /* 0x00 */ 1514265236Sken U8 Reserved1; /* 0x01 */ 1515265236Sken U16 Reserved2; /* 0x02 */ 1516265236Sken U32 Checksum; /* 0x04 */ 1517265236Sken U32 ImageSize; /* 0x08 */ 1518265236Sken U32 NextImageHeaderOffset; /* 0x0C */ 1519265236Sken U32 PackageVersion; /* 0x10 */ 1520265236Sken U32 Reserved3; /* 0x14 */ 1521265236Sken U32 Reserved4; /* 0x18 */ 1522265236Sken U32 Reserved5; /* 0x1C */ 1523265236Sken U8 IdentifyString[32]; /* 0x20 */ 1524265236Sken} MPI2_EXT_IMAGE_HEADER, MPI2_POINTER PTR_MPI2_EXT_IMAGE_HEADER, 1525265236Sken Mpi2ExtImageHeader_t, MPI2_POINTER pMpi2ExtImageHeader_t; 1526265236Sken 1527265236Sken/* useful offsets */ 1528265236Sken#define MPI2_EXT_IMAGE_IMAGETYPE_OFFSET (0x00) 1529265236Sken#define MPI2_EXT_IMAGE_IMAGESIZE_OFFSET (0x08) 1530265236Sken#define MPI2_EXT_IMAGE_NEXTIMAGE_OFFSET (0x0C) 1531265236Sken 1532265236Sken#define MPI2_EXT_IMAGE_HEADER_SIZE (0x40) 1533265236Sken 1534265236Sken/* defines for the ImageType field */ 1535265236Sken#define MPI2_EXT_IMAGE_TYPE_UNSPECIFIED (0x00) 1536265236Sken#define MPI2_EXT_IMAGE_TYPE_FW (0x01) 1537265236Sken#define MPI2_EXT_IMAGE_TYPE_NVDATA (0x03) 1538265236Sken#define MPI2_EXT_IMAGE_TYPE_BOOTLOADER (0x04) 1539265236Sken#define MPI2_EXT_IMAGE_TYPE_INITIALIZATION (0x05) 1540265236Sken#define MPI2_EXT_IMAGE_TYPE_FLASH_LAYOUT (0x06) 1541265236Sken#define MPI2_EXT_IMAGE_TYPE_SUPPORTED_DEVICES (0x07) 1542265236Sken#define MPI2_EXT_IMAGE_TYPE_MEGARAID (0x08) 1543265236Sken#define MPI2_EXT_IMAGE_TYPE_ENCRYPTED_HASH (0x09) /* MPI v2.5 and newer */ 1544265236Sken#define MPI2_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC (0x80) 1545265236Sken#define MPI2_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC (0xFF) 1546265236Sken 1547265236Sken#define MPI2_EXT_IMAGE_TYPE_MAX (MPI2_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC) /* deprecated */ 1548265236Sken 1549265236Sken 1550265236Sken 1551265236Sken/* FLASH Layout Extended Image Data */ 1552265236Sken 1553265236Sken/* 1554265236Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1555265236Sken * one and check RegionsPerLayout at runtime. 1556265236Sken */ 1557265236Sken#ifndef MPI2_FLASH_NUMBER_OF_REGIONS 1558265236Sken#define MPI2_FLASH_NUMBER_OF_REGIONS (1) 1559265236Sken#endif 1560265236Sken 1561265236Sken/* 1562265236Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1563265236Sken * one and check NumberOfLayouts at runtime. 1564265236Sken */ 1565265236Sken#ifndef MPI2_FLASH_NUMBER_OF_LAYOUTS 1566265236Sken#define MPI2_FLASH_NUMBER_OF_LAYOUTS (1) 1567265236Sken#endif 1568265236Sken 1569265236Skentypedef struct _MPI2_FLASH_REGION 1570265236Sken{ 1571265236Sken U8 RegionType; /* 0x00 */ 1572265236Sken U8 Reserved1; /* 0x01 */ 1573265236Sken U16 Reserved2; /* 0x02 */ 1574265236Sken U32 RegionOffset; /* 0x04 */ 1575265236Sken U32 RegionSize; /* 0x08 */ 1576265236Sken U32 Reserved3; /* 0x0C */ 1577265236Sken} MPI2_FLASH_REGION, MPI2_POINTER PTR_MPI2_FLASH_REGION, 1578265236Sken Mpi2FlashRegion_t, MPI2_POINTER pMpi2FlashRegion_t; 1579265236Sken 1580265236Skentypedef struct _MPI2_FLASH_LAYOUT 1581265236Sken{ 1582265236Sken U32 FlashSize; /* 0x00 */ 1583265236Sken U32 Reserved1; /* 0x04 */ 1584265236Sken U32 Reserved2; /* 0x08 */ 1585265236Sken U32 Reserved3; /* 0x0C */ 1586265236Sken MPI2_FLASH_REGION Region[MPI2_FLASH_NUMBER_OF_REGIONS];/* 0x10 */ 1587265236Sken} MPI2_FLASH_LAYOUT, MPI2_POINTER PTR_MPI2_FLASH_LAYOUT, 1588265236Sken Mpi2FlashLayout_t, MPI2_POINTER pMpi2FlashLayout_t; 1589265236Sken 1590265236Skentypedef struct _MPI2_FLASH_LAYOUT_DATA 1591265236Sken{ 1592265236Sken U8 ImageRevision; /* 0x00 */ 1593265236Sken U8 Reserved1; /* 0x01 */ 1594265236Sken U8 SizeOfRegion; /* 0x02 */ 1595265236Sken U8 Reserved2; /* 0x03 */ 1596265236Sken U16 NumberOfLayouts; /* 0x04 */ 1597265236Sken U16 RegionsPerLayout; /* 0x06 */ 1598265236Sken U16 MinimumSectorAlignment; /* 0x08 */ 1599265236Sken U16 Reserved3; /* 0x0A */ 1600265236Sken U32 Reserved4; /* 0x0C */ 1601265236Sken MPI2_FLASH_LAYOUT Layout[MPI2_FLASH_NUMBER_OF_LAYOUTS];/* 0x10 */ 1602265236Sken} MPI2_FLASH_LAYOUT_DATA, MPI2_POINTER PTR_MPI2_FLASH_LAYOUT_DATA, 1603265236Sken Mpi2FlashLayoutData_t, MPI2_POINTER pMpi2FlashLayoutData_t; 1604265236Sken 1605265236Sken/* defines for the RegionType field */ 1606265236Sken#define MPI2_FLASH_REGION_UNUSED (0x00) 1607265236Sken#define MPI2_FLASH_REGION_FIRMWARE (0x01) 1608265236Sken#define MPI2_FLASH_REGION_BIOS (0x02) 1609265236Sken#define MPI2_FLASH_REGION_NVDATA (0x03) 1610265236Sken#define MPI2_FLASH_REGION_FIRMWARE_BACKUP (0x05) 1611265236Sken#define MPI2_FLASH_REGION_MFG_INFORMATION (0x06) 1612265236Sken#define MPI2_FLASH_REGION_CONFIG_1 (0x07) 1613265236Sken#define MPI2_FLASH_REGION_CONFIG_2 (0x08) 1614265236Sken#define MPI2_FLASH_REGION_MEGARAID (0x09) 1615265236Sken#define MPI2_FLASH_REGION_INIT (0x0A) 1616265236Sken 1617265236Sken/* ImageRevision */ 1618265236Sken#define MPI2_FLASH_LAYOUT_IMAGE_REVISION (0x00) 1619265236Sken 1620265236Sken 1621265236Sken 1622265236Sken/* Supported Devices Extended Image Data */ 1623265236Sken 1624265236Sken/* 1625265236Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1626265236Sken * one and check NumberOfDevices at runtime. 1627265236Sken */ 1628265236Sken#ifndef MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES 1629265236Sken#define MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES (1) 1630265236Sken#endif 1631265236Sken 1632265236Skentypedef struct _MPI2_SUPPORTED_DEVICE 1633265236Sken{ 1634265236Sken U16 DeviceID; /* 0x00 */ 1635265236Sken U16 VendorID; /* 0x02 */ 1636265236Sken U16 DeviceIDMask; /* 0x04 */ 1637265236Sken U16 Reserved1; /* 0x06 */ 1638265236Sken U8 LowPCIRev; /* 0x08 */ 1639265236Sken U8 HighPCIRev; /* 0x09 */ 1640265236Sken U16 Reserved2; /* 0x0A */ 1641265236Sken U32 Reserved3; /* 0x0C */ 1642265236Sken} MPI2_SUPPORTED_DEVICE, MPI2_POINTER PTR_MPI2_SUPPORTED_DEVICE, 1643265236Sken Mpi2SupportedDevice_t, MPI2_POINTER pMpi2SupportedDevice_t; 1644265236Sken 1645265236Skentypedef struct _MPI2_SUPPORTED_DEVICES_DATA 1646265236Sken{ 1647265236Sken U8 ImageRevision; /* 0x00 */ 1648265236Sken U8 Reserved1; /* 0x01 */ 1649265236Sken U8 NumberOfDevices; /* 0x02 */ 1650265236Sken U8 Reserved2; /* 0x03 */ 1651265236Sken U32 Reserved3; /* 0x04 */ 1652265236Sken MPI2_SUPPORTED_DEVICE SupportedDevice[MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES]; /* 0x08 */ 1653265236Sken} MPI2_SUPPORTED_DEVICES_DATA, MPI2_POINTER PTR_MPI2_SUPPORTED_DEVICES_DATA, 1654265236Sken Mpi2SupportedDevicesData_t, MPI2_POINTER pMpi2SupportedDevicesData_t; 1655265236Sken 1656265236Sken/* ImageRevision */ 1657265236Sken#define MPI2_SUPPORTED_DEVICES_IMAGE_REVISION (0x00) 1658265236Sken 1659265236Sken 1660265236Sken/* Init Extended Image Data */ 1661265236Sken 1662265236Skentypedef struct _MPI2_INIT_IMAGE_FOOTER 1663265236Sken 1664265236Sken{ 1665265236Sken U32 BootFlags; /* 0x00 */ 1666265236Sken U32 ImageSize; /* 0x04 */ 1667265236Sken U32 Signature0; /* 0x08 */ 1668265236Sken U32 Signature1; /* 0x0C */ 1669265236Sken U32 Signature2; /* 0x10 */ 1670265236Sken U32 ResetVector; /* 0x14 */ 1671265236Sken} MPI2_INIT_IMAGE_FOOTER, MPI2_POINTER PTR_MPI2_INIT_IMAGE_FOOTER, 1672265236Sken Mpi2InitImageFooter_t, MPI2_POINTER pMpi2InitImageFooter_t; 1673265236Sken 1674265236Sken/* defines for the BootFlags field */ 1675265236Sken#define MPI2_INIT_IMAGE_BOOTFLAGS_OFFSET (0x00) 1676265236Sken 1677265236Sken/* defines for the ImageSize field */ 1678265236Sken#define MPI2_INIT_IMAGE_IMAGESIZE_OFFSET (0x04) 1679265236Sken 1680265236Sken/* defines for the Signature0 field */ 1681265236Sken#define MPI2_INIT_IMAGE_SIGNATURE0_OFFSET (0x08) 1682265236Sken#define MPI2_INIT_IMAGE_SIGNATURE0 (0x5AA55AEA) 1683265236Sken 1684265236Sken/* defines for the Signature1 field */ 1685265236Sken#define MPI2_INIT_IMAGE_SIGNATURE1_OFFSET (0x0C) 1686265236Sken#define MPI2_INIT_IMAGE_SIGNATURE1 (0xA55AEAA5) 1687265236Sken 1688265236Sken/* defines for the Signature2 field */ 1689265236Sken#define MPI2_INIT_IMAGE_SIGNATURE2_OFFSET (0x10) 1690265236Sken#define MPI2_INIT_IMAGE_SIGNATURE2 (0x5AEAA55A) 1691265236Sken 1692265236Sken/* Signature fields as individual bytes */ 1693265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_0 (0xEA) 1694265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_1 (0x5A) 1695265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_2 (0xA5) 1696265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_3 (0x5A) 1697265236Sken 1698265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_4 (0xA5) 1699265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_5 (0xEA) 1700265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_6 (0x5A) 1701265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_7 (0xA5) 1702265236Sken 1703265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_8 (0x5A) 1704265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_9 (0xA5) 1705265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_A (0xEA) 1706265236Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_B (0x5A) 1707265236Sken 1708265236Sken/* defines for the ResetVector field */ 1709265236Sken#define MPI2_INIT_IMAGE_RESETVECTOR_OFFSET (0x14) 1710265236Sken 1711265236Sken 1712265236Sken/* Encrypted Hash Extended Image Data */ 1713265236Sken 1714265236Skentypedef struct _MPI25_ENCRYPTED_HASH_ENTRY 1715265236Sken{ 1716265236Sken U8 HashImageType; /* 0x00 */ 1717265236Sken U8 HashAlgorithm; /* 0x01 */ 1718265236Sken U8 EncryptionAlgorithm; /* 0x02 */ 1719265236Sken U8 Reserved1; /* 0x03 */ 1720265236Sken U32 Reserved2; /* 0x04 */ 1721265236Sken U32 EncryptedHash[1]; /* 0x08 */ /* variable length */ 1722265236Sken} MPI25_ENCRYPTED_HASH_ENTRY, MPI2_POINTER PTR_MPI25_ENCRYPTED_HASH_ENTRY, 1723265236Sken Mpi25EncryptedHashEntry_t, MPI2_POINTER pMpi25EncryptedHashEntry_t; 1724265236Sken 1725265236Sken/* values for HashImageType */ 1726265236Sken#define MPI25_HASH_IMAGE_TYPE_UNUSED (0x00) 1727265236Sken#define MPI25_HASH_IMAGE_TYPE_FIRMWARE (0x01) 1728265236Sken#define MPI25_HASH_IMAGE_TYPE_BIOS (0x02) 1729265236Sken 1730265236Sken/* values for HashAlgorithm */ 1731265236Sken#define MPI25_HASH_ALGORITHM_UNUSED (0x00) 1732265236Sken#define MPI25_HASH_ALGORITHM_SHA256 (0x01) 1733265236Sken 1734265236Sken/* values for EncryptionAlgorithm */ 1735265236Sken#define MPI25_ENCRYPTION_ALG_UNUSED (0x00) 1736265236Sken#define MPI25_ENCRYPTION_ALG_RSA256 (0x01) 1737265236Sken 1738265236Skentypedef struct _MPI25_ENCRYPTED_HASH_DATA 1739265236Sken{ 1740265236Sken U8 ImageVersion; /* 0x00 */ 1741265236Sken U8 NumHash; /* 0x01 */ 1742265236Sken U16 Reserved1; /* 0x02 */ 1743265236Sken U32 Reserved2; /* 0x04 */ 1744265236Sken MPI25_ENCRYPTED_HASH_ENTRY EncryptedHashEntry[1]; /* 0x08 */ /* variable number of entries */ 1745265236Sken} MPI25_ENCRYPTED_HASH_DATA, MPI2_POINTER PTR_MPI25_ENCRYPTED_HASH_DATA, 1746265236Sken Mpi25EncryptedHashData_t, MPI2_POINTER pMpi25EncryptedHashData_t; 1747265236Sken 1748265236Sken/**************************************************************************** 1749265236Sken* PowerManagementControl message 1750265236Sken****************************************************************************/ 1751265236Sken 1752265236Sken/* PowerManagementControl Request message */ 1753265236Skentypedef struct _MPI2_PWR_MGMT_CONTROL_REQUEST 1754265236Sken{ 1755265236Sken U8 Feature; /* 0x00 */ 1756265236Sken U8 Reserved1; /* 0x01 */ 1757265236Sken U8 ChainOffset; /* 0x02 */ 1758265236Sken U8 Function; /* 0x03 */ 1759265236Sken U16 Reserved2; /* 0x04 */ 1760265236Sken U8 Reserved3; /* 0x06 */ 1761265236Sken U8 MsgFlags; /* 0x07 */ 1762265236Sken U8 VP_ID; /* 0x08 */ 1763265236Sken U8 VF_ID; /* 0x09 */ 1764265236Sken U16 Reserved4; /* 0x0A */ 1765265236Sken U8 Parameter1; /* 0x0C */ 1766265236Sken U8 Parameter2; /* 0x0D */ 1767265236Sken U8 Parameter3; /* 0x0E */ 1768265236Sken U8 Parameter4; /* 0x0F */ 1769265236Sken U32 Reserved5; /* 0x10 */ 1770265236Sken U32 Reserved6; /* 0x14 */ 1771265236Sken} MPI2_PWR_MGMT_CONTROL_REQUEST, MPI2_POINTER PTR_MPI2_PWR_MGMT_CONTROL_REQUEST, 1772265236Sken Mpi2PwrMgmtControlRequest_t, MPI2_POINTER pMpi2PwrMgmtControlRequest_t; 1773265236Sken 1774265236Sken/* defines for the Feature field */ 1775265236Sken#define MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND (0x01) 1776265236Sken#define MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION (0x02) 1777265236Sken#define MPI2_PM_CONTROL_FEATURE_PCIE_LINK (0x03) /* obsolete */ 1778265236Sken#define MPI2_PM_CONTROL_FEATURE_IOC_SPEED (0x04) 1779265236Sken#define MPI2_PM_CONTROL_FEATURE_GLOBAL_PWR_MGMT_MODE (0x05) /* reserved in MPI 2.0 */ 1780265236Sken#define MPI2_PM_CONTROL_FEATURE_MIN_PRODUCT_SPECIFIC (0x80) 1781265236Sken#define MPI2_PM_CONTROL_FEATURE_MAX_PRODUCT_SPECIFIC (0xFF) 1782265236Sken 1783265236Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND Feature */ 1784265236Sken/* Parameter1 contains a PHY number */ 1785265236Sken/* Parameter2 indicates power condition action using these defines */ 1786265236Sken#define MPI2_PM_CONTROL_PARAM2_PARTIAL (0x01) 1787265236Sken#define MPI2_PM_CONTROL_PARAM2_SLUMBER (0x02) 1788265236Sken#define MPI2_PM_CONTROL_PARAM2_EXIT_PWR_MGMT (0x03) 1789265236Sken/* Parameter3 and Parameter4 are reserved */ 1790265236Sken 1791265236Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION Feature */ 1792265236Sken/* Parameter1 contains SAS port width modulation group number */ 1793265236Sken/* Parameter2 indicates IOC action using these defines */ 1794265236Sken#define MPI2_PM_CONTROL_PARAM2_REQUEST_OWNERSHIP (0x01) 1795265236Sken#define MPI2_PM_CONTROL_PARAM2_CHANGE_MODULATION (0x02) 1796265236Sken#define MPI2_PM_CONTROL_PARAM2_RELINQUISH_OWNERSHIP (0x03) 1797265236Sken/* Parameter3 indicates desired modulation level using these defines */ 1798265236Sken#define MPI2_PM_CONTROL_PARAM3_25_PERCENT (0x00) 1799265236Sken#define MPI2_PM_CONTROL_PARAM3_50_PERCENT (0x01) 1800265236Sken#define MPI2_PM_CONTROL_PARAM3_75_PERCENT (0x02) 1801265236Sken#define MPI2_PM_CONTROL_PARAM3_100_PERCENT (0x03) 1802265236Sken/* Parameter4 is reserved */ 1803265236Sken 1804265236Sken/* this next set (_PCIE_LINK) is obsolete */ 1805265236Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_PCIE_LINK Feature */ 1806265236Sken/* Parameter1 indicates desired PCIe link speed using these defines */ 1807265236Sken#define MPI2_PM_CONTROL_PARAM1_PCIE_2_5_GBPS (0x00) /* obsolete */ 1808265236Sken#define MPI2_PM_CONTROL_PARAM1_PCIE_5_0_GBPS (0x01) /* obsolete */ 1809265236Sken#define MPI2_PM_CONTROL_PARAM1_PCIE_8_0_GBPS (0x02) /* obsolete */ 1810265236Sken/* Parameter2 indicates desired PCIe link width using these defines */ 1811265236Sken#define MPI2_PM_CONTROL_PARAM2_WIDTH_X1 (0x01) /* obsolete */ 1812265236Sken#define MPI2_PM_CONTROL_PARAM2_WIDTH_X2 (0x02) /* obsolete */ 1813265236Sken#define MPI2_PM_CONTROL_PARAM2_WIDTH_X4 (0x04) /* obsolete */ 1814265236Sken#define MPI2_PM_CONTROL_PARAM2_WIDTH_X8 (0x08) /* obsolete */ 1815265236Sken/* Parameter3 and Parameter4 are reserved */ 1816265236Sken 1817265236Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_IOC_SPEED Feature */ 1818265236Sken/* Parameter1 indicates desired IOC hardware clock speed using these defines */ 1819265236Sken#define MPI2_PM_CONTROL_PARAM1_FULL_IOC_SPEED (0x01) 1820265236Sken#define MPI2_PM_CONTROL_PARAM1_HALF_IOC_SPEED (0x02) 1821265236Sken#define MPI2_PM_CONTROL_PARAM1_QUARTER_IOC_SPEED (0x04) 1822265236Sken#define MPI2_PM_CONTROL_PARAM1_EIGHTH_IOC_SPEED (0x08) 1823265236Sken/* Parameter2, Parameter3, and Parameter4 are reserved */ 1824265236Sken 1825265236Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_GLOBAL_PWR_MGMT_MODE Feature */ 1826265236Sken/* Parameter1 indicates host action regarding global power management mode */ 1827265236Sken#define MPI2_PM_CONTROL_PARAM1_TAKE_CONTROL (0x01) 1828265236Sken#define MPI2_PM_CONTROL_PARAM1_CHANGE_GLOBAL_MODE (0x02) 1829265236Sken#define MPI2_PM_CONTROL_PARAM1_RELEASE_CONTROL (0x03) 1830265236Sken/* Parameter2 indicates the requested global power management mode */ 1831265236Sken#define MPI2_PM_CONTROL_PARAM2_FULL_PWR_PERF (0x01) 1832265236Sken#define MPI2_PM_CONTROL_PARAM2_REDUCED_PWR_PERF (0x08) 1833265236Sken#define MPI2_PM_CONTROL_PARAM2_STANDBY (0x40) 1834265236Sken/* Parameter3 and Parameter4 are reserved */ 1835265236Sken 1836265236Sken 1837265236Sken/* PowerManagementControl Reply message */ 1838265236Skentypedef struct _MPI2_PWR_MGMT_CONTROL_REPLY 1839265236Sken{ 1840265236Sken U8 Feature; /* 0x00 */ 1841265236Sken U8 Reserved1; /* 0x01 */ 1842265236Sken U8 MsgLength; /* 0x02 */ 1843265236Sken U8 Function; /* 0x03 */ 1844265236Sken U16 Reserved2; /* 0x04 */ 1845265236Sken U8 Reserved3; /* 0x06 */ 1846265236Sken U8 MsgFlags; /* 0x07 */ 1847265236Sken U8 VP_ID; /* 0x08 */ 1848265236Sken U8 VF_ID; /* 0x09 */ 1849265236Sken U16 Reserved4; /* 0x0A */ 1850265236Sken U16 Reserved5; /* 0x0C */ 1851265236Sken U16 IOCStatus; /* 0x0E */ 1852265236Sken U32 IOCLogInfo; /* 0x10 */ 1853265236Sken} MPI2_PWR_MGMT_CONTROL_REPLY, MPI2_POINTER PTR_MPI2_PWR_MGMT_CONTROL_REPLY, 1854265236Sken Mpi2PwrMgmtControlReply_t, MPI2_POINTER pMpi2PwrMgmtControlReply_t; 1855265236Sken 1856265236Sken 1857265236Sken#endif 1858265236Sken 1859