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