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