1230592Sken/*- 2279253Sslm * Copyright (c) 2006-2015 LSI Corp. 3279253Sslm * Copyright (c) 2013-2015 Avago Technologies 4230592Sken * All rights reserved. 5230592Sken * 6230592Sken * Redistribution and use in source and binary forms, with or without 7230592Sken * modification, are permitted provided that the following conditions 8230592Sken * are met: 9230592Sken * 1. Redistributions of source code must retain the above copyright 10230592Sken * notice, this list of conditions and the following disclaimer. 11230592Sken * 2. Redistributions in binary form must reproduce the above copyright 12230592Sken * notice, this list of conditions and the following disclaimer in the 13230592Sken * documentation and/or other materials provided with the distribution. 14230592Sken * 15230592Sken * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16230592Sken * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17230592Sken * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18230592Sken * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19230592Sken * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20230592Sken * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21230592Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22230592Sken * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23230592Sken * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24230592Sken * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25230592Sken * SUCH DAMAGE. 26230592Sken * 27279253Sslm * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD 28230592Sken * 29230592Sken * $FreeBSD$ 30230592Sken */ 31230592Sken 32212420Sken/* 33279253Sslm * Copyright (c) 2006-2015 LSI Corporation. 34279253Sslm * Copyright (c) 2013-2015 Avago Technologies 35212420Sken * 36212420Sken * 37212420Sken * Name: mpi2_ioc.h 38212420Sken * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages 39212420Sken * Creation Date: October 11, 2006 40212420Sken * 41230592Sken * mpi2_ioc.h Version: 02.00.16 42212420Sken * 43212420Sken * Version History 44212420Sken * --------------- 45212420Sken * 46212420Sken * Date Version Description 47212420Sken * -------- -------- ------------------------------------------------------ 48212420Sken * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 49212420Sken * 06-04-07 02.00.01 In IOCFacts Reply structure, renamed MaxDevices to 50212420Sken * MaxTargets. 51212420Sken * Added TotalImageSize field to FWDownload Request. 52212420Sken * Added reserved words to FWUpload Request. 53212420Sken * 06-26-07 02.00.02 Added IR Configuration Change List Event. 54212420Sken * 08-31-07 02.00.03 Removed SystemReplyQueueDepth field from the IOCInit 55212420Sken * request and replaced it with 56212420Sken * ReplyDescriptorPostQueueDepth and ReplyFreeQueueDepth. 57212420Sken * Replaced the MinReplyQueueDepth field of the IOCFacts 58212420Sken * reply with MaxReplyDescriptorPostQueueDepth. 59212420Sken * Added MPI2_RDPQ_DEPTH_MIN define to specify the minimum 60212420Sken * depth for the Reply Descriptor Post Queue. 61212420Sken * Added SASAddress field to Initiator Device Table 62212420Sken * Overflow Event data. 63212420Sken * 10-31-07 02.00.04 Added ReasonCode MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING 64212420Sken * for SAS Initiator Device Status Change Event data. 65212420Sken * Modified Reason Code defines for SAS Topology Change 66212420Sken * List Event data, including adding a bit for PHY Vacant 67212420Sken * status, and adding a mask for the Reason Code. 68212420Sken * Added define for 69212420Sken * MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING. 70212420Sken * Added define for MPI2_EXT_IMAGE_TYPE_MEGARAID. 71212420Sken * 12-18-07 02.00.05 Added Boot Status defines for the IOCExceptions field of 72212420Sken * the IOCFacts Reply. 73212420Sken * Removed MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define. 74212420Sken * Moved MPI2_VERSION_UNION to mpi2.h. 75212420Sken * Changed MPI2_EVENT_NOTIFICATION_REQUEST to use masks 76212420Sken * instead of enables, and added SASBroadcastPrimitiveMasks 77212420Sken * field. 78212420Sken * Added Log Entry Added Event and related structure. 79212420Sken * 02-29-08 02.00.06 Added define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID. 80212420Sken * Removed define MPI2_IOCFACTS_PROTOCOL_SMP_TARGET. 81212420Sken * Added MaxVolumes and MaxPersistentEntries fields to 82212420Sken * IOCFacts reply. 83212420Sken * Added ProtocalFlags and IOCCapabilities fields to 84212420Sken * MPI2_FW_IMAGE_HEADER. 85212420Sken * Removed MPI2_PORTENABLE_FLAGS_ENABLE_SINGLE_PORT. 86212420Sken * 03-03-08 02.00.07 Fixed MPI2_FW_IMAGE_HEADER by changing Reserved26 to 87212420Sken * a U16 (from a U32). 88212420Sken * Removed extra 's' from EventMasks name. 89212420Sken * 06-27-08 02.00.08 Fixed an offset in a comment. 90212420Sken * 10-02-08 02.00.09 Removed SystemReplyFrameSize from MPI2_IOC_INIT_REQUEST. 91212420Sken * Removed CurReplyFrameSize from MPI2_IOC_FACTS_REPLY and 92212420Sken * renamed MinReplyFrameSize to ReplyFrameSize. 93212420Sken * Added MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX. 94212420Sken * Added two new RAIDOperation values for Integrated RAID 95212420Sken * Operations Status Event data. 96212420Sken * Added four new IR Configuration Change List Event data 97212420Sken * ReasonCode values. 98212420Sken * Added two new ReasonCode defines for SAS Device Status 99212420Sken * Change Event data. 100212420Sken * Added three new DiscoveryStatus bits for the SAS 101212420Sken * Discovery event data. 102212420Sken * Added Multiplexing Status Change bit to the PhyStatus 103212420Sken * field of the SAS Topology Change List event data. 104212420Sken * Removed define for MPI2_INIT_IMAGE_BOOTFLAGS_XMEMCOPY. 105212420Sken * BootFlags are now product-specific. 106212420Sken * Added defines for the indivdual signature bytes 107212420Sken * for MPI2_INIT_IMAGE_FOOTER. 108212420Sken * 01-19-09 02.00.10 Added MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY define. 109212420Sken * Added MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR 110212420Sken * define. 111212420Sken * Added MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE 112212420Sken * define. 113212420Sken * Removed MPI2_EVENT_SAS_DISC_DS_SATA_INIT_FAILURE define. 114212420Sken * 05-06-09 02.00.11 Added MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR define. 115212420Sken * Added MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX define. 116212420Sken * Added two new reason codes for SAS Device Status Change 117212420Sken * Event. 118212420Sken * Added new event: SAS PHY Counter. 119212420Sken * 07-30-09 02.00.12 Added GPIO Interrupt event define and structure. 120212420Sken * Added MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define. 121212420Sken * Added new product id family for 2208. 122212420Sken * 10-28-09 02.00.13 Added HostMSIxVectors field to MPI2_IOC_INIT_REQUEST. 123212420Sken * Added MaxMSIxVectors field to MPI2_IOC_FACTS_REPLY. 124212420Sken * Added MinDevHandle field to MPI2_IOC_FACTS_REPLY. 125212420Sken * Added MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY. 126212420Sken * Added MPI2_EVENT_HOST_BASED_DISCOVERY_PHY define. 127212420Sken * Added MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER define. 128212420Sken * Added Host Based Discovery Phy Event data. 129212420Sken * Added defines for ProductID Product field 130212420Sken * (MPI2_FW_HEADER_PID_). 131212420Sken * Modified values for SAS ProductID Family 132212420Sken * (MPI2_FW_HEADER_PID_FAMILY_). 133230592Sken * 02-10-10 02.00.14 Added SAS Quiesce Event structure and defines. 134230592Sken * Added PowerManagementControl Request structures and 135230592Sken * defines. 136230592Sken * 05-12-10 02.00.15 Marked Task Set Full Event as obsolete. 137230592Sken * Added MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY define. 138230592Sken * 11-10-10 02.00.16 Added MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC. 139212420Sken * -------------------------------------------------------------------------- 140212420Sken */ 141212420Sken 142212420Sken#ifndef MPI2_IOC_H 143212420Sken#define MPI2_IOC_H 144212420Sken 145212420Sken/***************************************************************************** 146212420Sken* 147212420Sken* IOC Messages 148212420Sken* 149212420Sken*****************************************************************************/ 150212420Sken 151212420Sken/**************************************************************************** 152212420Sken* IOCInit message 153212420Sken****************************************************************************/ 154212420Sken 155212420Sken/* IOCInit Request message */ 156212420Skentypedef struct _MPI2_IOC_INIT_REQUEST 157212420Sken{ 158212420Sken U8 WhoInit; /* 0x00 */ 159212420Sken U8 Reserved1; /* 0x01 */ 160212420Sken U8 ChainOffset; /* 0x02 */ 161212420Sken U8 Function; /* 0x03 */ 162212420Sken U16 Reserved2; /* 0x04 */ 163212420Sken U8 Reserved3; /* 0x06 */ 164212420Sken U8 MsgFlags; /* 0x07 */ 165212420Sken U8 VP_ID; /* 0x08 */ 166212420Sken U8 VF_ID; /* 0x09 */ 167212420Sken U16 Reserved4; /* 0x0A */ 168212420Sken U16 MsgVersion; /* 0x0C */ 169212420Sken U16 HeaderVersion; /* 0x0E */ 170212420Sken U32 Reserved5; /* 0x10 */ 171212420Sken U16 Reserved6; /* 0x14 */ 172212420Sken U8 Reserved7; /* 0x16 */ 173212420Sken U8 HostMSIxVectors; /* 0x17 */ 174212420Sken U16 Reserved8; /* 0x18 */ 175212420Sken U16 SystemRequestFrameSize; /* 0x1A */ 176212420Sken U16 ReplyDescriptorPostQueueDepth; /* 0x1C */ 177212420Sken U16 ReplyFreeQueueDepth; /* 0x1E */ 178212420Sken U32 SenseBufferAddressHigh; /* 0x20 */ 179212420Sken U32 SystemReplyAddressHigh; /* 0x24 */ 180212420Sken U64 SystemRequestFrameBaseAddress; /* 0x28 */ 181212420Sken U64 ReplyDescriptorPostQueueAddress;/* 0x30 */ 182212420Sken U64 ReplyFreeQueueAddress; /* 0x38 */ 183212420Sken U64 TimeStamp; /* 0x40 */ 184212420Sken} MPI2_IOC_INIT_REQUEST, MPI2_POINTER PTR_MPI2_IOC_INIT_REQUEST, 185212420Sken Mpi2IOCInitRequest_t, MPI2_POINTER pMpi2IOCInitRequest_t; 186212420Sken 187212420Sken/* WhoInit values */ 188212420Sken#define MPI2_WHOINIT_NOT_INITIALIZED (0x00) 189212420Sken#define MPI2_WHOINIT_SYSTEM_BIOS (0x01) 190212420Sken#define MPI2_WHOINIT_ROM_BIOS (0x02) 191212420Sken#define MPI2_WHOINIT_PCI_PEER (0x03) 192212420Sken#define MPI2_WHOINIT_HOST_DRIVER (0x04) 193212420Sken#define MPI2_WHOINIT_MANUFACTURER (0x05) 194212420Sken 195212420Sken/* MsgVersion */ 196212420Sken#define MPI2_IOCINIT_MSGVERSION_MAJOR_MASK (0xFF00) 197212420Sken#define MPI2_IOCINIT_MSGVERSION_MAJOR_SHIFT (8) 198212420Sken#define MPI2_IOCINIT_MSGVERSION_MINOR_MASK (0x00FF) 199212420Sken#define MPI2_IOCINIT_MSGVERSION_MINOR_SHIFT (0) 200212420Sken 201212420Sken/* HeaderVersion */ 202212420Sken#define MPI2_IOCINIT_HDRVERSION_UNIT_MASK (0xFF00) 203212420Sken#define MPI2_IOCINIT_HDRVERSION_UNIT_SHIFT (8) 204212420Sken#define MPI2_IOCINIT_HDRVERSION_DEV_MASK (0x00FF) 205212420Sken#define MPI2_IOCINIT_HDRVERSION_DEV_SHIFT (0) 206212420Sken 207212420Sken/* minimum depth for the Reply Descriptor Post Queue */ 208212420Sken#define MPI2_RDPQ_DEPTH_MIN (16) 209212420Sken 210212420Sken 211212420Sken/* IOCInit Reply message */ 212212420Skentypedef struct _MPI2_IOC_INIT_REPLY 213212420Sken{ 214212420Sken U8 WhoInit; /* 0x00 */ 215212420Sken U8 Reserved1; /* 0x01 */ 216212420Sken U8 MsgLength; /* 0x02 */ 217212420Sken U8 Function; /* 0x03 */ 218212420Sken U16 Reserved2; /* 0x04 */ 219212420Sken U8 Reserved3; /* 0x06 */ 220212420Sken U8 MsgFlags; /* 0x07 */ 221212420Sken U8 VP_ID; /* 0x08 */ 222212420Sken U8 VF_ID; /* 0x09 */ 223212420Sken U16 Reserved4; /* 0x0A */ 224212420Sken U16 Reserved5; /* 0x0C */ 225212420Sken U16 IOCStatus; /* 0x0E */ 226212420Sken U32 IOCLogInfo; /* 0x10 */ 227212420Sken} MPI2_IOC_INIT_REPLY, MPI2_POINTER PTR_MPI2_IOC_INIT_REPLY, 228212420Sken Mpi2IOCInitReply_t, MPI2_POINTER pMpi2IOCInitReply_t; 229212420Sken 230212420Sken 231212420Sken/**************************************************************************** 232212420Sken* IOCFacts message 233212420Sken****************************************************************************/ 234212420Sken 235212420Sken/* IOCFacts Request message */ 236212420Skentypedef struct _MPI2_IOC_FACTS_REQUEST 237212420Sken{ 238212420Sken U16 Reserved1; /* 0x00 */ 239212420Sken U8 ChainOffset; /* 0x02 */ 240212420Sken U8 Function; /* 0x03 */ 241212420Sken U16 Reserved2; /* 0x04 */ 242212420Sken U8 Reserved3; /* 0x06 */ 243212420Sken U8 MsgFlags; /* 0x07 */ 244212420Sken U8 VP_ID; /* 0x08 */ 245212420Sken U8 VF_ID; /* 0x09 */ 246212420Sken U16 Reserved4; /* 0x0A */ 247212420Sken} MPI2_IOC_FACTS_REQUEST, MPI2_POINTER PTR_MPI2_IOC_FACTS_REQUEST, 248212420Sken Mpi2IOCFactsRequest_t, MPI2_POINTER pMpi2IOCFactsRequest_t; 249212420Sken 250212420Sken 251212420Sken/* IOCFacts Reply message */ 252212420Skentypedef struct _MPI2_IOC_FACTS_REPLY 253212420Sken{ 254212420Sken U16 MsgVersion; /* 0x00 */ 255212420Sken U8 MsgLength; /* 0x02 */ 256212420Sken U8 Function; /* 0x03 */ 257212420Sken U16 HeaderVersion; /* 0x04 */ 258212420Sken U8 IOCNumber; /* 0x06 */ 259212420Sken U8 MsgFlags; /* 0x07 */ 260212420Sken U8 VP_ID; /* 0x08 */ 261212420Sken U8 VF_ID; /* 0x09 */ 262212420Sken U16 Reserved1; /* 0x0A */ 263212420Sken U16 IOCExceptions; /* 0x0C */ 264212420Sken U16 IOCStatus; /* 0x0E */ 265212420Sken U32 IOCLogInfo; /* 0x10 */ 266212420Sken U8 MaxChainDepth; /* 0x14 */ 267212420Sken U8 WhoInit; /* 0x15 */ 268212420Sken U8 NumberOfPorts; /* 0x16 */ 269212420Sken U8 MaxMSIxVectors; /* 0x17 */ 270212420Sken U16 RequestCredit; /* 0x18 */ 271212420Sken U16 ProductID; /* 0x1A */ 272212420Sken U32 IOCCapabilities; /* 0x1C */ 273212420Sken MPI2_VERSION_UNION FWVersion; /* 0x20 */ 274212420Sken U16 IOCRequestFrameSize; /* 0x24 */ 275212420Sken U16 Reserved3; /* 0x26 */ 276212420Sken U16 MaxInitiators; /* 0x28 */ 277212420Sken U16 MaxTargets; /* 0x2A */ 278212420Sken U16 MaxSasExpanders; /* 0x2C */ 279212420Sken U16 MaxEnclosures; /* 0x2E */ 280212420Sken U16 ProtocolFlags; /* 0x30 */ 281212420Sken U16 HighPriorityCredit; /* 0x32 */ 282212420Sken U16 MaxReplyDescriptorPostQueueDepth; /* 0x34 */ 283212420Sken U8 ReplyFrameSize; /* 0x36 */ 284212420Sken U8 MaxVolumes; /* 0x37 */ 285212420Sken U16 MaxDevHandle; /* 0x38 */ 286212420Sken U16 MaxPersistentEntries; /* 0x3A */ 287212420Sken U16 MinDevHandle; /* 0x3C */ 288212420Sken U16 Reserved4; /* 0x3E */ 289212420Sken} MPI2_IOC_FACTS_REPLY, MPI2_POINTER PTR_MPI2_IOC_FACTS_REPLY, 290212420Sken Mpi2IOCFactsReply_t, MPI2_POINTER pMpi2IOCFactsReply_t; 291212420Sken 292212420Sken/* MsgVersion */ 293212420Sken#define MPI2_IOCFACTS_MSGVERSION_MAJOR_MASK (0xFF00) 294212420Sken#define MPI2_IOCFACTS_MSGVERSION_MAJOR_SHIFT (8) 295212420Sken#define MPI2_IOCFACTS_MSGVERSION_MINOR_MASK (0x00FF) 296212420Sken#define MPI2_IOCFACTS_MSGVERSION_MINOR_SHIFT (0) 297212420Sken 298212420Sken/* HeaderVersion */ 299212420Sken#define MPI2_IOCFACTS_HDRVERSION_UNIT_MASK (0xFF00) 300212420Sken#define MPI2_IOCFACTS_HDRVERSION_UNIT_SHIFT (8) 301212420Sken#define MPI2_IOCFACTS_HDRVERSION_DEV_MASK (0x00FF) 302212420Sken#define MPI2_IOCFACTS_HDRVERSION_DEV_SHIFT (0) 303212420Sken 304212420Sken/* IOCExceptions */ 305212420Sken#define MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX (0x0100) 306212420Sken 307212420Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_MASK (0x00E0) 308212420Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_GOOD (0x0000) 309212420Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_BACKUP (0x0020) 310212420Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_RESTORED (0x0040) 311212420Sken#define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_CORRUPT_BACKUP (0x0060) 312212420Sken 313212420Sken#define MPI2_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED (0x0010) 314212420Sken#define MPI2_IOCFACTS_EXCEPT_MANUFACT_CHECKSUM_FAIL (0x0008) 315212420Sken#define MPI2_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL (0x0004) 316212420Sken#define MPI2_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID (0x0002) 317212420Sken#define MPI2_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL (0x0001) 318212420Sken 319212420Sken/* defines for WhoInit field are after the IOCInit Request */ 320212420Sken 321212420Sken/* ProductID field uses MPI2_FW_HEADER_PID_ */ 322212420Sken 323212420Sken/* IOCCapabilities */ 324212420Sken#define MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY (0x00010000) 325212420Sken#define MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX (0x00008000) 326212420Sken#define MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR (0x00004000) 327212420Sken#define MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY (0x00002000) 328212420Sken#define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID (0x00001000) 329212420Sken#define MPI2_IOCFACTS_CAPABILITY_TLR (0x00000800) 330212420Sken#define MPI2_IOCFACTS_CAPABILITY_MULTICAST (0x00000100) 331212420Sken#define MPI2_IOCFACTS_CAPABILITY_BIDIRECTIONAL_TARGET (0x00000080) 332212420Sken#define MPI2_IOCFACTS_CAPABILITY_EEDP (0x00000040) 333212420Sken#define MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER (0x00000020) 334212420Sken#define MPI2_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER (0x00000010) 335212420Sken#define MPI2_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER (0x00000008) 336212420Sken#define MPI2_IOCFACTS_CAPABILITY_TASK_SET_FULL_HANDLING (0x00000004) 337212420Sken 338212420Sken/* ProtocolFlags */ 339212420Sken#define MPI2_IOCFACTS_PROTOCOL_SCSI_TARGET (0x0001) 340212420Sken#define MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR (0x0002) 341212420Sken 342212420Sken 343212420Sken/**************************************************************************** 344212420Sken* PortFacts message 345212420Sken****************************************************************************/ 346212420Sken 347212420Sken/* PortFacts Request message */ 348212420Skentypedef struct _MPI2_PORT_FACTS_REQUEST 349212420Sken{ 350212420Sken U16 Reserved1; /* 0x00 */ 351212420Sken U8 ChainOffset; /* 0x02 */ 352212420Sken U8 Function; /* 0x03 */ 353212420Sken U16 Reserved2; /* 0x04 */ 354212420Sken U8 PortNumber; /* 0x06 */ 355212420Sken U8 MsgFlags; /* 0x07 */ 356212420Sken U8 VP_ID; /* 0x08 */ 357212420Sken U8 VF_ID; /* 0x09 */ 358212420Sken U16 Reserved3; /* 0x0A */ 359212420Sken} MPI2_PORT_FACTS_REQUEST, MPI2_POINTER PTR_MPI2_PORT_FACTS_REQUEST, 360212420Sken Mpi2PortFactsRequest_t, MPI2_POINTER pMpi2PortFactsRequest_t; 361212420Sken 362212420Sken/* PortFacts Reply message */ 363212420Skentypedef struct _MPI2_PORT_FACTS_REPLY 364212420Sken{ 365212420Sken U16 Reserved1; /* 0x00 */ 366212420Sken U8 MsgLength; /* 0x02 */ 367212420Sken U8 Function; /* 0x03 */ 368212420Sken U16 Reserved2; /* 0x04 */ 369212420Sken U8 PortNumber; /* 0x06 */ 370212420Sken U8 MsgFlags; /* 0x07 */ 371212420Sken U8 VP_ID; /* 0x08 */ 372212420Sken U8 VF_ID; /* 0x09 */ 373212420Sken U16 Reserved3; /* 0x0A */ 374212420Sken U16 Reserved4; /* 0x0C */ 375212420Sken U16 IOCStatus; /* 0x0E */ 376212420Sken U32 IOCLogInfo; /* 0x10 */ 377212420Sken U8 Reserved5; /* 0x14 */ 378212420Sken U8 PortType; /* 0x15 */ 379212420Sken U16 Reserved6; /* 0x16 */ 380212420Sken U16 MaxPostedCmdBuffers; /* 0x18 */ 381212420Sken U16 Reserved7; /* 0x1A */ 382212420Sken} MPI2_PORT_FACTS_REPLY, MPI2_POINTER PTR_MPI2_PORT_FACTS_REPLY, 383212420Sken Mpi2PortFactsReply_t, MPI2_POINTER pMpi2PortFactsReply_t; 384212420Sken 385212420Sken/* PortType values */ 386212420Sken#define MPI2_PORTFACTS_PORTTYPE_INACTIVE (0x00) 387212420Sken#define MPI2_PORTFACTS_PORTTYPE_FC (0x10) 388212420Sken#define MPI2_PORTFACTS_PORTTYPE_ISCSI (0x20) 389212420Sken#define MPI2_PORTFACTS_PORTTYPE_SAS_PHYSICAL (0x30) 390212420Sken#define MPI2_PORTFACTS_PORTTYPE_SAS_VIRTUAL (0x31) 391212420Sken 392212420Sken 393212420Sken/**************************************************************************** 394212420Sken* PortEnable message 395212420Sken****************************************************************************/ 396212420Sken 397212420Sken/* PortEnable Request message */ 398212420Skentypedef struct _MPI2_PORT_ENABLE_REQUEST 399212420Sken{ 400212420Sken U16 Reserved1; /* 0x00 */ 401212420Sken U8 ChainOffset; /* 0x02 */ 402212420Sken U8 Function; /* 0x03 */ 403212420Sken U8 Reserved2; /* 0x04 */ 404212420Sken U8 PortFlags; /* 0x05 */ 405212420Sken U8 Reserved3; /* 0x06 */ 406212420Sken U8 MsgFlags; /* 0x07 */ 407212420Sken U8 VP_ID; /* 0x08 */ 408212420Sken U8 VF_ID; /* 0x09 */ 409212420Sken U16 Reserved4; /* 0x0A */ 410212420Sken} MPI2_PORT_ENABLE_REQUEST, MPI2_POINTER PTR_MPI2_PORT_ENABLE_REQUEST, 411212420Sken Mpi2PortEnableRequest_t, MPI2_POINTER pMpi2PortEnableRequest_t; 412212420Sken 413212420Sken 414212420Sken/* PortEnable Reply message */ 415212420Skentypedef struct _MPI2_PORT_ENABLE_REPLY 416212420Sken{ 417212420Sken U16 Reserved1; /* 0x00 */ 418212420Sken U8 MsgLength; /* 0x02 */ 419212420Sken U8 Function; /* 0x03 */ 420212420Sken U8 Reserved2; /* 0x04 */ 421212420Sken U8 PortFlags; /* 0x05 */ 422212420Sken U8 Reserved3; /* 0x06 */ 423212420Sken U8 MsgFlags; /* 0x07 */ 424212420Sken U8 VP_ID; /* 0x08 */ 425212420Sken U8 VF_ID; /* 0x09 */ 426212420Sken U16 Reserved4; /* 0x0A */ 427212420Sken U16 Reserved5; /* 0x0C */ 428212420Sken U16 IOCStatus; /* 0x0E */ 429212420Sken U32 IOCLogInfo; /* 0x10 */ 430212420Sken} MPI2_PORT_ENABLE_REPLY, MPI2_POINTER PTR_MPI2_PORT_ENABLE_REPLY, 431212420Sken Mpi2PortEnableReply_t, MPI2_POINTER pMpi2PortEnableReply_t; 432212420Sken 433212420Sken 434212420Sken/**************************************************************************** 435212420Sken* EventNotification message 436212420Sken****************************************************************************/ 437212420Sken 438212420Sken/* EventNotification Request message */ 439212420Sken#define MPI2_EVENT_NOTIFY_EVENTMASK_WORDS (4) 440212420Sken 441212420Skentypedef struct _MPI2_EVENT_NOTIFICATION_REQUEST 442212420Sken{ 443212420Sken U16 Reserved1; /* 0x00 */ 444212420Sken U8 ChainOffset; /* 0x02 */ 445212420Sken U8 Function; /* 0x03 */ 446212420Sken U16 Reserved2; /* 0x04 */ 447212420Sken U8 Reserved3; /* 0x06 */ 448212420Sken U8 MsgFlags; /* 0x07 */ 449212420Sken U8 VP_ID; /* 0x08 */ 450212420Sken U8 VF_ID; /* 0x09 */ 451212420Sken U16 Reserved4; /* 0x0A */ 452212420Sken U32 Reserved5; /* 0x0C */ 453212420Sken U32 Reserved6; /* 0x10 */ 454212420Sken U32 EventMasks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS];/* 0x14 */ 455212420Sken U16 SASBroadcastPrimitiveMasks; /* 0x24 */ 456212420Sken U16 Reserved7; /* 0x26 */ 457212420Sken U32 Reserved8; /* 0x28 */ 458212420Sken} MPI2_EVENT_NOTIFICATION_REQUEST, 459212420Sken MPI2_POINTER PTR_MPI2_EVENT_NOTIFICATION_REQUEST, 460212420Sken Mpi2EventNotificationRequest_t, MPI2_POINTER pMpi2EventNotificationRequest_t; 461212420Sken 462212420Sken 463212420Sken/* EventNotification Reply message */ 464212420Skentypedef struct _MPI2_EVENT_NOTIFICATION_REPLY 465212420Sken{ 466212420Sken U16 EventDataLength; /* 0x00 */ 467212420Sken U8 MsgLength; /* 0x02 */ 468212420Sken U8 Function; /* 0x03 */ 469212420Sken U16 Reserved1; /* 0x04 */ 470212420Sken U8 AckRequired; /* 0x06 */ 471212420Sken U8 MsgFlags; /* 0x07 */ 472212420Sken U8 VP_ID; /* 0x08 */ 473212420Sken U8 VF_ID; /* 0x09 */ 474212420Sken U16 Reserved2; /* 0x0A */ 475212420Sken U16 Reserved3; /* 0x0C */ 476212420Sken U16 IOCStatus; /* 0x0E */ 477212420Sken U32 IOCLogInfo; /* 0x10 */ 478212420Sken U16 Event; /* 0x14 */ 479212420Sken U16 Reserved4; /* 0x16 */ 480212420Sken U32 EventContext; /* 0x18 */ 481212420Sken U32 EventData[1]; /* 0x1C */ 482212420Sken} MPI2_EVENT_NOTIFICATION_REPLY, MPI2_POINTER PTR_MPI2_EVENT_NOTIFICATION_REPLY, 483212420Sken Mpi2EventNotificationReply_t, MPI2_POINTER pMpi2EventNotificationReply_t; 484212420Sken 485212420Sken/* AckRequired */ 486212420Sken#define MPI2_EVENT_NOTIFICATION_ACK_NOT_REQUIRED (0x00) 487212420Sken#define MPI2_EVENT_NOTIFICATION_ACK_REQUIRED (0x01) 488212420Sken 489212420Sken/* Event */ 490212420Sken#define MPI2_EVENT_LOG_DATA (0x0001) 491212420Sken#define MPI2_EVENT_STATE_CHANGE (0x0002) 492212420Sken#define MPI2_EVENT_HARD_RESET_RECEIVED (0x0005) 493212420Sken#define MPI2_EVENT_EVENT_CHANGE (0x000A) 494230592Sken#define MPI2_EVENT_TASK_SET_FULL (0x000E) /* obsolete */ 495212420Sken#define MPI2_EVENT_SAS_DEVICE_STATUS_CHANGE (0x000F) 496212420Sken#define MPI2_EVENT_IR_OPERATION_STATUS (0x0014) 497212420Sken#define MPI2_EVENT_SAS_DISCOVERY (0x0016) 498212420Sken#define MPI2_EVENT_SAS_BROADCAST_PRIMITIVE (0x0017) 499212420Sken#define MPI2_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE (0x0018) 500212420Sken#define MPI2_EVENT_SAS_INIT_TABLE_OVERFLOW (0x0019) 501212420Sken#define MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST (0x001C) 502212420Sken#define MPI2_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE (0x001D) 503212420Sken#define MPI2_EVENT_IR_VOLUME (0x001E) 504212420Sken#define MPI2_EVENT_IR_PHYSICAL_DISK (0x001F) 505212420Sken#define MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST (0x0020) 506212420Sken#define MPI2_EVENT_LOG_ENTRY_ADDED (0x0021) 507212420Sken#define MPI2_EVENT_SAS_PHY_COUNTER (0x0022) 508212420Sken#define MPI2_EVENT_GPIO_INTERRUPT (0x0023) 509212420Sken#define MPI2_EVENT_HOST_BASED_DISCOVERY_PHY (0x0024) 510230592Sken#define MPI2_EVENT_SAS_QUIESCE (0x0025) 511212420Sken 512212420Sken 513212420Sken/* Log Entry Added Event data */ 514212420Sken 515212420Sken/* the following structure matches MPI2_LOG_0_ENTRY in mpi2_cnfg.h */ 516212420Sken#define MPI2_EVENT_DATA_LOG_DATA_LENGTH (0x1C) 517212420Sken 518212420Skentypedef struct _MPI2_EVENT_DATA_LOG_ENTRY_ADDED 519212420Sken{ 520212420Sken U64 TimeStamp; /* 0x00 */ 521212420Sken U32 Reserved1; /* 0x08 */ 522212420Sken U16 LogSequence; /* 0x0C */ 523212420Sken U16 LogEntryQualifier; /* 0x0E */ 524212420Sken U8 VP_ID; /* 0x10 */ 525212420Sken U8 VF_ID; /* 0x11 */ 526212420Sken U16 Reserved2; /* 0x12 */ 527212420Sken U8 LogData[MPI2_EVENT_DATA_LOG_DATA_LENGTH];/* 0x14 */ 528212420Sken} MPI2_EVENT_DATA_LOG_ENTRY_ADDED, 529212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_LOG_ENTRY_ADDED, 530212420Sken Mpi2EventDataLogEntryAdded_t, MPI2_POINTER pMpi2EventDataLogEntryAdded_t; 531212420Sken 532212420Sken/* GPIO Interrupt Event data */ 533212420Sken 534212420Skentypedef struct _MPI2_EVENT_DATA_GPIO_INTERRUPT 535212420Sken{ 536212420Sken U8 GPIONum; /* 0x00 */ 537212420Sken U8 Reserved1; /* 0x01 */ 538212420Sken U16 Reserved2; /* 0x02 */ 539212420Sken} MPI2_EVENT_DATA_GPIO_INTERRUPT, 540212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_GPIO_INTERRUPT, 541212420Sken Mpi2EventDataGpioInterrupt_t, MPI2_POINTER pMpi2EventDataGpioInterrupt_t; 542212420Sken 543212420Sken/* Hard Reset Received Event data */ 544212420Sken 545212420Skentypedef struct _MPI2_EVENT_DATA_HARD_RESET_RECEIVED 546212420Sken{ 547212420Sken U8 Reserved1; /* 0x00 */ 548212420Sken U8 Port; /* 0x01 */ 549212420Sken U16 Reserved2; /* 0x02 */ 550212420Sken} MPI2_EVENT_DATA_HARD_RESET_RECEIVED, 551212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_HARD_RESET_RECEIVED, 552212420Sken Mpi2EventDataHardResetReceived_t, 553212420Sken MPI2_POINTER pMpi2EventDataHardResetReceived_t; 554212420Sken 555212420Sken/* Task Set Full Event data */ 556230592Sken/* this event is obsolete */ 557212420Sken 558212420Skentypedef struct _MPI2_EVENT_DATA_TASK_SET_FULL 559212420Sken{ 560212420Sken U16 DevHandle; /* 0x00 */ 561212420Sken U16 CurrentDepth; /* 0x02 */ 562212420Sken} MPI2_EVENT_DATA_TASK_SET_FULL, MPI2_POINTER PTR_MPI2_EVENT_DATA_TASK_SET_FULL, 563212420Sken Mpi2EventDataTaskSetFull_t, MPI2_POINTER pMpi2EventDataTaskSetFull_t; 564212420Sken 565212420Sken 566212420Sken/* SAS Device Status Change Event data */ 567212420Sken 568212420Skentypedef struct _MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE 569212420Sken{ 570212420Sken U16 TaskTag; /* 0x00 */ 571212420Sken U8 ReasonCode; /* 0x02 */ 572212420Sken U8 Reserved1; /* 0x03 */ 573212420Sken U8 ASC; /* 0x04 */ 574212420Sken U8 ASCQ; /* 0x05 */ 575212420Sken U16 DevHandle; /* 0x06 */ 576212420Sken U32 Reserved2; /* 0x08 */ 577212420Sken U64 SASAddress; /* 0x0C */ 578212420Sken U8 LUN[8]; /* 0x14 */ 579212420Sken} MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 580212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 581212420Sken Mpi2EventDataSasDeviceStatusChange_t, 582212420Sken MPI2_POINTER pMpi2EventDataSasDeviceStatusChange_t; 583212420Sken 584212420Sken/* SAS Device Status Change Event data ReasonCode values */ 585212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_SMART_DATA (0x05) 586212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_UNSUPPORTED (0x07) 587212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08) 588212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_TASK_ABORT_INTERNAL (0x09) 589212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_ABORT_TASK_SET_INTERNAL (0x0A) 590212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_CLEAR_TASK_SET_INTERNAL (0x0B) 591212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_QUERY_TASK_INTERNAL (0x0C) 592212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_ASYNC_NOTIFICATION (0x0D) 593212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_INTERNAL_DEV_RESET (0x0E) 594212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_TASK_ABORT_INTERNAL (0x0F) 595212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE (0x10) 596212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_EXPANDER_REDUCED_FUNCTIONALITY (0x11) 597212420Sken#define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_EXPANDER_REDUCED_FUNCTIONALITY (0x12) 598212420Sken 599212420Sken 600212420Sken/* Integrated RAID Operation Status Event data */ 601212420Sken 602212420Skentypedef struct _MPI2_EVENT_DATA_IR_OPERATION_STATUS 603212420Sken{ 604212420Sken U16 VolDevHandle; /* 0x00 */ 605212420Sken U16 Reserved1; /* 0x02 */ 606212420Sken U8 RAIDOperation; /* 0x04 */ 607212420Sken U8 PercentComplete; /* 0x05 */ 608212420Sken U16 Reserved2; /* 0x06 */ 609212420Sken U32 Resereved3; /* 0x08 */ 610212420Sken} MPI2_EVENT_DATA_IR_OPERATION_STATUS, 611212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_OPERATION_STATUS, 612212420Sken Mpi2EventDataIrOperationStatus_t, 613212420Sken MPI2_POINTER pMpi2EventDataIrOperationStatus_t; 614212420Sken 615212420Sken/* Integrated RAID Operation Status Event data RAIDOperation values */ 616212420Sken#define MPI2_EVENT_IR_RAIDOP_RESYNC (0x00) 617212420Sken#define MPI2_EVENT_IR_RAIDOP_ONLINE_CAP_EXPANSION (0x01) 618212420Sken#define MPI2_EVENT_IR_RAIDOP_CONSISTENCY_CHECK (0x02) 619212420Sken#define MPI2_EVENT_IR_RAIDOP_BACKGROUND_INIT (0x03) 620212420Sken#define MPI2_EVENT_IR_RAIDOP_MAKE_DATA_CONSISTENT (0x04) 621212420Sken 622212420Sken 623212420Sken/* Integrated RAID Volume Event data */ 624212420Sken 625212420Skentypedef struct _MPI2_EVENT_DATA_IR_VOLUME 626212420Sken{ 627212420Sken U16 VolDevHandle; /* 0x00 */ 628212420Sken U8 ReasonCode; /* 0x02 */ 629212420Sken U8 Reserved1; /* 0x03 */ 630212420Sken U32 NewValue; /* 0x04 */ 631212420Sken U32 PreviousValue; /* 0x08 */ 632212420Sken} MPI2_EVENT_DATA_IR_VOLUME, MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_VOLUME, 633212420Sken Mpi2EventDataIrVolume_t, MPI2_POINTER pMpi2EventDataIrVolume_t; 634212420Sken 635212420Sken/* Integrated RAID Volume Event data ReasonCode values */ 636212420Sken#define MPI2_EVENT_IR_VOLUME_RC_SETTINGS_CHANGED (0x01) 637212420Sken#define MPI2_EVENT_IR_VOLUME_RC_STATUS_FLAGS_CHANGED (0x02) 638212420Sken#define MPI2_EVENT_IR_VOLUME_RC_STATE_CHANGED (0x03) 639212420Sken 640212420Sken 641212420Sken/* Integrated RAID Physical Disk Event data */ 642212420Sken 643212420Skentypedef struct _MPI2_EVENT_DATA_IR_PHYSICAL_DISK 644212420Sken{ 645212420Sken U16 Reserved1; /* 0x00 */ 646212420Sken U8 ReasonCode; /* 0x02 */ 647212420Sken U8 PhysDiskNum; /* 0x03 */ 648212420Sken U16 PhysDiskDevHandle; /* 0x04 */ 649212420Sken U16 Reserved2; /* 0x06 */ 650212420Sken U16 Slot; /* 0x08 */ 651212420Sken U16 EnclosureHandle; /* 0x0A */ 652212420Sken U32 NewValue; /* 0x0C */ 653212420Sken U32 PreviousValue; /* 0x10 */ 654212420Sken} MPI2_EVENT_DATA_IR_PHYSICAL_DISK, 655212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_PHYSICAL_DISK, 656212420Sken Mpi2EventDataIrPhysicalDisk_t, MPI2_POINTER pMpi2EventDataIrPhysicalDisk_t; 657212420Sken 658212420Sken/* Integrated RAID Physical Disk Event data ReasonCode values */ 659212420Sken#define MPI2_EVENT_IR_PHYSDISK_RC_SETTINGS_CHANGED (0x01) 660212420Sken#define MPI2_EVENT_IR_PHYSDISK_RC_STATUS_FLAGS_CHANGED (0x02) 661212420Sken#define MPI2_EVENT_IR_PHYSDISK_RC_STATE_CHANGED (0x03) 662212420Sken 663212420Sken 664212420Sken/* Integrated RAID Configuration Change List Event data */ 665212420Sken 666212420Sken/* 667212420Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 668212420Sken * one and check NumElements at runtime. 669212420Sken */ 670212420Sken#ifndef MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT 671212420Sken#define MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT (1) 672212420Sken#endif 673212420Sken 674212420Skentypedef struct _MPI2_EVENT_IR_CONFIG_ELEMENT 675212420Sken{ 676212420Sken U16 ElementFlags; /* 0x00 */ 677212420Sken U16 VolDevHandle; /* 0x02 */ 678212420Sken U8 ReasonCode; /* 0x04 */ 679212420Sken U8 PhysDiskNum; /* 0x05 */ 680212420Sken U16 PhysDiskDevHandle; /* 0x06 */ 681212420Sken} MPI2_EVENT_IR_CONFIG_ELEMENT, MPI2_POINTER PTR_MPI2_EVENT_IR_CONFIG_ELEMENT, 682212420Sken Mpi2EventIrConfigElement_t, MPI2_POINTER pMpi2EventIrConfigElement_t; 683212420Sken 684212420Sken/* IR Configuration Change List Event data ElementFlags values */ 685212420Sken#define MPI2_EVENT_IR_CHANGE_EFLAGS_ELEMENT_TYPE_MASK (0x000F) 686212420Sken#define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLUME_ELEMENT (0x0000) 687212420Sken#define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLPHYSDISK_ELEMENT (0x0001) 688212420Sken#define MPI2_EVENT_IR_CHANGE_EFLAGS_HOTSPARE_ELEMENT (0x0002) 689212420Sken 690212420Sken/* IR Configuration Change List Event data ReasonCode values */ 691212420Sken#define MPI2_EVENT_IR_CHANGE_RC_ADDED (0x01) 692212420Sken#define MPI2_EVENT_IR_CHANGE_RC_REMOVED (0x02) 693212420Sken#define MPI2_EVENT_IR_CHANGE_RC_NO_CHANGE (0x03) 694212420Sken#define MPI2_EVENT_IR_CHANGE_RC_HIDE (0x04) 695212420Sken#define MPI2_EVENT_IR_CHANGE_RC_UNHIDE (0x05) 696212420Sken#define MPI2_EVENT_IR_CHANGE_RC_VOLUME_CREATED (0x06) 697212420Sken#define MPI2_EVENT_IR_CHANGE_RC_VOLUME_DELETED (0x07) 698212420Sken#define MPI2_EVENT_IR_CHANGE_RC_PD_CREATED (0x08) 699212420Sken#define MPI2_EVENT_IR_CHANGE_RC_PD_DELETED (0x09) 700212420Sken 701212420Skentypedef struct _MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST 702212420Sken{ 703212420Sken U8 NumElements; /* 0x00 */ 704212420Sken U8 Reserved1; /* 0x01 */ 705212420Sken U8 Reserved2; /* 0x02 */ 706212420Sken U8 ConfigNum; /* 0x03 */ 707212420Sken U32 Flags; /* 0x04 */ 708212420Sken MPI2_EVENT_IR_CONFIG_ELEMENT ConfigElement[MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT]; /* 0x08 */ 709212420Sken} MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, 710212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST, 711212420Sken Mpi2EventDataIrConfigChangeList_t, 712212420Sken MPI2_POINTER pMpi2EventDataIrConfigChangeList_t; 713212420Sken 714212420Sken/* IR Configuration Change List Event data Flags values */ 715212420Sken#define MPI2_EVENT_IR_CHANGE_FLAGS_FOREIGN_CONFIG (0x00000001) 716212420Sken 717212420Sken 718212420Sken/* SAS Discovery Event data */ 719212420Sken 720212420Skentypedef struct _MPI2_EVENT_DATA_SAS_DISCOVERY 721212420Sken{ 722212420Sken U8 Flags; /* 0x00 */ 723212420Sken U8 ReasonCode; /* 0x01 */ 724212420Sken U8 PhysicalPort; /* 0x02 */ 725212420Sken U8 Reserved1; /* 0x03 */ 726212420Sken U32 DiscoveryStatus; /* 0x04 */ 727212420Sken} MPI2_EVENT_DATA_SAS_DISCOVERY, 728212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_DISCOVERY, 729212420Sken Mpi2EventDataSasDiscovery_t, MPI2_POINTER pMpi2EventDataSasDiscovery_t; 730212420Sken 731212420Sken/* SAS Discovery Event data Flags values */ 732212420Sken#define MPI2_EVENT_SAS_DISC_DEVICE_CHANGE (0x02) 733212420Sken#define MPI2_EVENT_SAS_DISC_IN_PROGRESS (0x01) 734212420Sken 735212420Sken/* SAS Discovery Event data ReasonCode values */ 736212420Sken#define MPI2_EVENT_SAS_DISC_RC_STARTED (0x01) 737212420Sken#define MPI2_EVENT_SAS_DISC_RC_COMPLETED (0x02) 738212420Sken 739212420Sken/* SAS Discovery Event data DiscoveryStatus values */ 740212420Sken#define MPI2_EVENT_SAS_DISC_DS_MAX_ENCLOSURES_EXCEED (0x80000000) 741212420Sken#define MPI2_EVENT_SAS_DISC_DS_MAX_EXPANDERS_EXCEED (0x40000000) 742212420Sken#define MPI2_EVENT_SAS_DISC_DS_MAX_DEVICES_EXCEED (0x20000000) 743212420Sken#define MPI2_EVENT_SAS_DISC_DS_MAX_TOPO_PHYS_EXCEED (0x10000000) 744212420Sken#define MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR (0x08000000) 745212420Sken#define MPI2_EVENT_SAS_DISC_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE (0x00008000) 746212420Sken#define MPI2_EVENT_SAS_DISC_DS_EXP_MULTI_SUBTRACTIVE (0x00004000) 747212420Sken#define MPI2_EVENT_SAS_DISC_DS_MULTI_PORT_DOMAIN (0x00002000) 748212420Sken#define MPI2_EVENT_SAS_DISC_DS_TABLE_TO_SUBTRACTIVE_LINK (0x00001000) 749212420Sken#define MPI2_EVENT_SAS_DISC_DS_UNSUPPORTED_DEVICE (0x00000800) 750212420Sken#define MPI2_EVENT_SAS_DISC_DS_TABLE_LINK (0x00000400) 751212420Sken#define MPI2_EVENT_SAS_DISC_DS_SUBTRACTIVE_LINK (0x00000200) 752212420Sken#define MPI2_EVENT_SAS_DISC_DS_SMP_CRC_ERROR (0x00000100) 753212420Sken#define MPI2_EVENT_SAS_DISC_DS_SMP_FUNCTION_FAILED (0x00000080) 754212420Sken#define MPI2_EVENT_SAS_DISC_DS_INDEX_NOT_EXIST (0x00000040) 755212420Sken#define MPI2_EVENT_SAS_DISC_DS_OUT_ROUTE_ENTRIES (0x00000020) 756212420Sken#define MPI2_EVENT_SAS_DISC_DS_SMP_TIMEOUT (0x00000010) 757212420Sken#define MPI2_EVENT_SAS_DISC_DS_MULTIPLE_PORTS (0x00000004) 758212420Sken#define MPI2_EVENT_SAS_DISC_DS_UNADDRESSABLE_DEVICE (0x00000002) 759212420Sken#define MPI2_EVENT_SAS_DISC_DS_LOOP_DETECTED (0x00000001) 760212420Sken 761212420Sken 762212420Sken/* SAS Broadcast Primitive Event data */ 763212420Sken 764212420Skentypedef struct _MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE 765212420Sken{ 766212420Sken U8 PhyNum; /* 0x00 */ 767212420Sken U8 Port; /* 0x01 */ 768212420Sken U8 PortWidth; /* 0x02 */ 769212420Sken U8 Primitive; /* 0x03 */ 770212420Sken} MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 771212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 772212420Sken Mpi2EventDataSasBroadcastPrimitive_t, 773212420Sken MPI2_POINTER pMpi2EventDataSasBroadcastPrimitive_t; 774212420Sken 775212420Sken/* defines for the Primitive field */ 776212420Sken#define MPI2_EVENT_PRIMITIVE_CHANGE (0x01) 777212420Sken#define MPI2_EVENT_PRIMITIVE_SES (0x02) 778212420Sken#define MPI2_EVENT_PRIMITIVE_EXPANDER (0x03) 779212420Sken#define MPI2_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT (0x04) 780212420Sken#define MPI2_EVENT_PRIMITIVE_RESERVED3 (0x05) 781212420Sken#define MPI2_EVENT_PRIMITIVE_RESERVED4 (0x06) 782212420Sken#define MPI2_EVENT_PRIMITIVE_CHANGE0_RESERVED (0x07) 783212420Sken#define MPI2_EVENT_PRIMITIVE_CHANGE1_RESERVED (0x08) 784212420Sken 785212420Sken 786212420Sken/* SAS Initiator Device Status Change Event data */ 787212420Sken 788212420Skentypedef struct _MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE 789212420Sken{ 790212420Sken U8 ReasonCode; /* 0x00 */ 791212420Sken U8 PhysicalPort; /* 0x01 */ 792212420Sken U16 DevHandle; /* 0x02 */ 793212420Sken U64 SASAddress; /* 0x04 */ 794212420Sken} MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 795212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 796212420Sken Mpi2EventDataSasInitDevStatusChange_t, 797212420Sken MPI2_POINTER pMpi2EventDataSasInitDevStatusChange_t; 798212420Sken 799212420Sken/* SAS Initiator Device Status Change event ReasonCode values */ 800212420Sken#define MPI2_EVENT_SAS_INIT_RC_ADDED (0x01) 801212420Sken#define MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING (0x02) 802212420Sken 803212420Sken 804212420Sken/* SAS Initiator Device Table Overflow Event data */ 805212420Sken 806212420Skentypedef struct _MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW 807212420Sken{ 808212420Sken U16 MaxInit; /* 0x00 */ 809212420Sken U16 CurrentInit; /* 0x02 */ 810212420Sken U64 SASAddress; /* 0x04 */ 811212420Sken} MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 812212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 813212420Sken Mpi2EventDataSasInitTableOverflow_t, 814212420Sken MPI2_POINTER pMpi2EventDataSasInitTableOverflow_t; 815212420Sken 816212420Sken 817212420Sken/* SAS Topology Change List Event data */ 818212420Sken 819212420Sken/* 820212420Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 821212420Sken * one and check NumEntries at runtime. 822212420Sken */ 823212420Sken#ifndef MPI2_EVENT_SAS_TOPO_PHY_COUNT 824212420Sken#define MPI2_EVENT_SAS_TOPO_PHY_COUNT (1) 825212420Sken#endif 826212420Sken 827212420Skentypedef struct _MPI2_EVENT_SAS_TOPO_PHY_ENTRY 828212420Sken{ 829212420Sken U16 AttachedDevHandle; /* 0x00 */ 830212420Sken U8 LinkRate; /* 0x02 */ 831212420Sken U8 PhyStatus; /* 0x03 */ 832212420Sken} MPI2_EVENT_SAS_TOPO_PHY_ENTRY, MPI2_POINTER PTR_MPI2_EVENT_SAS_TOPO_PHY_ENTRY, 833212420Sken Mpi2EventSasTopoPhyEntry_t, MPI2_POINTER pMpi2EventSasTopoPhyEntry_t; 834212420Sken 835212420Skentypedef struct _MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST 836212420Sken{ 837212420Sken U16 EnclosureHandle; /* 0x00 */ 838212420Sken U16 ExpanderDevHandle; /* 0x02 */ 839212420Sken U8 NumPhys; /* 0x04 */ 840212420Sken U8 Reserved1; /* 0x05 */ 841212420Sken U16 Reserved2; /* 0x06 */ 842212420Sken U8 NumEntries; /* 0x08 */ 843212420Sken U8 StartPhyNum; /* 0x09 */ 844212420Sken U8 ExpStatus; /* 0x0A */ 845212420Sken U8 PhysicalPort; /* 0x0B */ 846212420Sken MPI2_EVENT_SAS_TOPO_PHY_ENTRY PHY[MPI2_EVENT_SAS_TOPO_PHY_COUNT]; /* 0x0C*/ 847212420Sken} MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, 848212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST, 849212420Sken Mpi2EventDataSasTopologyChangeList_t, 850212420Sken MPI2_POINTER pMpi2EventDataSasTopologyChangeList_t; 851212420Sken 852212420Sken/* values for the ExpStatus field */ 853212420Sken#define MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER (0x00) 854212420Sken#define MPI2_EVENT_SAS_TOPO_ES_ADDED (0x01) 855212420Sken#define MPI2_EVENT_SAS_TOPO_ES_NOT_RESPONDING (0x02) 856212420Sken#define MPI2_EVENT_SAS_TOPO_ES_RESPONDING (0x03) 857212420Sken#define MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING (0x04) 858212420Sken 859212420Sken/* defines for the LinkRate field */ 860212420Sken#define MPI2_EVENT_SAS_TOPO_LR_CURRENT_MASK (0xF0) 861212420Sken#define MPI2_EVENT_SAS_TOPO_LR_CURRENT_SHIFT (4) 862212420Sken#define MPI2_EVENT_SAS_TOPO_LR_PREV_MASK (0x0F) 863212420Sken#define MPI2_EVENT_SAS_TOPO_LR_PREV_SHIFT (0) 864212420Sken 865212420Sken#define MPI2_EVENT_SAS_TOPO_LR_UNKNOWN_LINK_RATE (0x00) 866212420Sken#define MPI2_EVENT_SAS_TOPO_LR_PHY_DISABLED (0x01) 867212420Sken#define MPI2_EVENT_SAS_TOPO_LR_NEGOTIATION_FAILED (0x02) 868212420Sken#define MPI2_EVENT_SAS_TOPO_LR_SATA_OOB_COMPLETE (0x03) 869212420Sken#define MPI2_EVENT_SAS_TOPO_LR_PORT_SELECTOR (0x04) 870212420Sken#define MPI2_EVENT_SAS_TOPO_LR_SMP_RESET_IN_PROGRESS (0x05) 871230592Sken#define MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY (0x06) 872212420Sken#define MPI2_EVENT_SAS_TOPO_LR_RATE_1_5 (0x08) 873212420Sken#define MPI2_EVENT_SAS_TOPO_LR_RATE_3_0 (0x09) 874212420Sken#define MPI2_EVENT_SAS_TOPO_LR_RATE_6_0 (0x0A) 875212420Sken 876212420Sken/* values for the PhyStatus field */ 877212420Sken#define MPI2_EVENT_SAS_TOPO_PHYSTATUS_VACANT (0x80) 878212420Sken#define MPI2_EVENT_SAS_TOPO_PS_MULTIPLEX_CHANGE (0x10) 879212420Sken/* values for the PhyStatus ReasonCode sub-field */ 880212420Sken#define MPI2_EVENT_SAS_TOPO_RC_MASK (0x0F) 881212420Sken#define MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED (0x01) 882212420Sken#define MPI2_EVENT_SAS_TOPO_RC_TARG_NOT_RESPONDING (0x02) 883212420Sken#define MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED (0x03) 884212420Sken#define MPI2_EVENT_SAS_TOPO_RC_NO_CHANGE (0x04) 885212420Sken#define MPI2_EVENT_SAS_TOPO_RC_DELAY_NOT_RESPONDING (0x05) 886212420Sken 887212420Sken 888212420Sken/* SAS Enclosure Device Status Change Event data */ 889212420Sken 890212420Skentypedef struct _MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE 891212420Sken{ 892212420Sken U16 EnclosureHandle; /* 0x00 */ 893212420Sken U8 ReasonCode; /* 0x02 */ 894212420Sken U8 PhysicalPort; /* 0x03 */ 895212420Sken U64 EnclosureLogicalID; /* 0x04 */ 896212420Sken U16 NumSlots; /* 0x0C */ 897212420Sken U16 StartSlot; /* 0x0E */ 898212420Sken U32 PhyBits; /* 0x10 */ 899212420Sken} MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE, 900212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE, 901212420Sken Mpi2EventDataSasEnclDevStatusChange_t, 902212420Sken MPI2_POINTER pMpi2EventDataSasEnclDevStatusChange_t; 903212420Sken 904212420Sken/* SAS Enclosure Device Status Change event ReasonCode values */ 905212420Sken#define MPI2_EVENT_SAS_ENCL_RC_ADDED (0x01) 906212420Sken#define MPI2_EVENT_SAS_ENCL_RC_NOT_RESPONDING (0x02) 907212420Sken 908212420Sken 909212420Sken/* SAS PHY Counter Event data */ 910212420Sken 911212420Skentypedef struct _MPI2_EVENT_DATA_SAS_PHY_COUNTER 912212420Sken{ 913212420Sken U64 TimeStamp; /* 0x00 */ 914212420Sken U32 Reserved1; /* 0x08 */ 915212420Sken U8 PhyEventCode; /* 0x0C */ 916212420Sken U8 PhyNum; /* 0x0D */ 917212420Sken U16 Reserved2; /* 0x0E */ 918212420Sken U32 PhyEventInfo; /* 0x10 */ 919212420Sken U8 CounterType; /* 0x14 */ 920212420Sken U8 ThresholdWindow; /* 0x15 */ 921212420Sken U8 TimeUnits; /* 0x16 */ 922212420Sken U8 Reserved3; /* 0x17 */ 923212420Sken U32 EventThreshold; /* 0x18 */ 924212420Sken U16 ThresholdFlags; /* 0x1C */ 925212420Sken U16 Reserved4; /* 0x1E */ 926212420Sken} MPI2_EVENT_DATA_SAS_PHY_COUNTER, 927212420Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_PHY_COUNTER, 928212420Sken Mpi2EventDataSasPhyCounter_t, MPI2_POINTER pMpi2EventDataSasPhyCounter_t; 929212420Sken 930212420Sken/* use MPI2_SASPHY3_EVENT_CODE_ values from mpi2_cnfg.h for the PhyEventCode field */ 931212420Sken 932212420Sken/* use MPI2_SASPHY3_COUNTER_TYPE_ values from mpi2_cnfg.h for the CounterType field */ 933212420Sken 934212420Sken/* use MPI2_SASPHY3_TIME_UNITS_ values from mpi2_cnfg.h for the TimeUnits field */ 935212420Sken 936212420Sken/* use MPI2_SASPHY3_TFLAGS_ values from mpi2_cnfg.h for the ThresholdFlags field */ 937212420Sken 938212420Sken 939230592Sken/* SAS Quiesce Event data */ 940230592Sken 941230592Skentypedef struct _MPI2_EVENT_DATA_SAS_QUIESCE 942230592Sken{ 943230592Sken U8 ReasonCode; /* 0x00 */ 944230592Sken U8 Reserved1; /* 0x01 */ 945230592Sken U16 Reserved2; /* 0x02 */ 946230592Sken U32 Reserved3; /* 0x04 */ 947230592Sken} MPI2_EVENT_DATA_SAS_QUIESCE, 948230592Sken MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_QUIESCE, 949230592Sken Mpi2EventDataSasQuiesce_t, MPI2_POINTER pMpi2EventDataSasQuiesce_t; 950230592Sken 951230592Sken/* SAS Quiesce Event data ReasonCode values */ 952230592Sken#define MPI2_EVENT_SAS_QUIESCE_RC_STARTED (0x01) 953230592Sken#define MPI2_EVENT_SAS_QUIESCE_RC_COMPLETED (0x02) 954230592Sken 955230592Sken 956212420Sken/* Host Based Discovery Phy Event data */ 957212420Sken 958212420Skentypedef struct _MPI2_EVENT_HBD_PHY_SAS 959212420Sken{ 960212420Sken U8 Flags; /* 0x00 */ 961212420Sken U8 NegotiatedLinkRate; /* 0x01 */ 962212420Sken U8 PhyNum; /* 0x02 */ 963212420Sken U8 PhysicalPort; /* 0x03 */ 964212420Sken U32 Reserved1; /* 0x04 */ 965212420Sken U8 InitialFrame[28]; /* 0x08 */ 966212420Sken} MPI2_EVENT_HBD_PHY_SAS, MPI2_POINTER PTR_MPI2_EVENT_HBD_PHY_SAS, 967212420Sken Mpi2EventHbdPhySas_t, MPI2_POINTER pMpi2EventHbdPhySas_t; 968212420Sken 969212420Sken/* values for the Flags field */ 970212420Sken#define MPI2_EVENT_HBD_SAS_FLAGS_FRAME_VALID (0x02) 971212420Sken#define MPI2_EVENT_HBD_SAS_FLAGS_SATA_FRAME (0x01) 972212420Sken 973212420Sken/* use MPI2_SAS_NEG_LINK_RATE_ defines from mpi2_cnfg.h for the NegotiatedLinkRate field */ 974212420Sken 975212420Skentypedef union _MPI2_EVENT_HBD_DESCRIPTOR 976212420Sken{ 977212420Sken MPI2_EVENT_HBD_PHY_SAS Sas; 978212420Sken} MPI2_EVENT_HBD_DESCRIPTOR, MPI2_POINTER PTR_MPI2_EVENT_HBD_DESCRIPTOR, 979212420Sken Mpi2EventHbdDescriptor_t, MPI2_POINTER pMpi2EventHbdDescriptor_t; 980212420Sken 981212420Skentypedef struct _MPI2_EVENT_DATA_HBD_PHY 982212420Sken{ 983212420Sken U8 DescriptorType; /* 0x00 */ 984212420Sken U8 Reserved1; /* 0x01 */ 985212420Sken U16 Reserved2; /* 0x02 */ 986212420Sken U32 Reserved3; /* 0x04 */ 987212420Sken MPI2_EVENT_HBD_DESCRIPTOR Descriptor; /* 0x08 */ 988212420Sken} MPI2_EVENT_DATA_HBD_PHY, MPI2_POINTER PTR_MPI2_EVENT_DATA_HBD_PHY, 989212420Sken Mpi2EventDataHbdPhy_t, MPI2_POINTER pMpi2EventDataMpi2EventDataHbdPhy_t; 990212420Sken 991212420Sken/* values for the DescriptorType field */ 992212420Sken#define MPI2_EVENT_HBD_DT_SAS (0x01) 993212420Sken 994212420Sken 995212420Sken 996212420Sken/**************************************************************************** 997212420Sken* EventAck message 998212420Sken****************************************************************************/ 999212420Sken 1000212420Sken/* EventAck Request message */ 1001212420Skentypedef struct _MPI2_EVENT_ACK_REQUEST 1002212420Sken{ 1003212420Sken U16 Reserved1; /* 0x00 */ 1004212420Sken U8 ChainOffset; /* 0x02 */ 1005212420Sken U8 Function; /* 0x03 */ 1006212420Sken U16 Reserved2; /* 0x04 */ 1007212420Sken U8 Reserved3; /* 0x06 */ 1008212420Sken U8 MsgFlags; /* 0x07 */ 1009212420Sken U8 VP_ID; /* 0x08 */ 1010212420Sken U8 VF_ID; /* 0x09 */ 1011212420Sken U16 Reserved4; /* 0x0A */ 1012212420Sken U16 Event; /* 0x0C */ 1013212420Sken U16 Reserved5; /* 0x0E */ 1014212420Sken U32 EventContext; /* 0x10 */ 1015212420Sken} MPI2_EVENT_ACK_REQUEST, MPI2_POINTER PTR_MPI2_EVENT_ACK_REQUEST, 1016212420Sken Mpi2EventAckRequest_t, MPI2_POINTER pMpi2EventAckRequest_t; 1017212420Sken 1018212420Sken 1019212420Sken/* EventAck Reply message */ 1020212420Skentypedef struct _MPI2_EVENT_ACK_REPLY 1021212420Sken{ 1022212420Sken U16 Reserved1; /* 0x00 */ 1023212420Sken U8 MsgLength; /* 0x02 */ 1024212420Sken U8 Function; /* 0x03 */ 1025212420Sken U16 Reserved2; /* 0x04 */ 1026212420Sken U8 Reserved3; /* 0x06 */ 1027212420Sken U8 MsgFlags; /* 0x07 */ 1028212420Sken U8 VP_ID; /* 0x08 */ 1029212420Sken U8 VF_ID; /* 0x09 */ 1030212420Sken U16 Reserved4; /* 0x0A */ 1031212420Sken U16 Reserved5; /* 0x0C */ 1032212420Sken U16 IOCStatus; /* 0x0E */ 1033212420Sken U32 IOCLogInfo; /* 0x10 */ 1034212420Sken} MPI2_EVENT_ACK_REPLY, MPI2_POINTER PTR_MPI2_EVENT_ACK_REPLY, 1035212420Sken Mpi2EventAckReply_t, MPI2_POINTER pMpi2EventAckReply_t; 1036212420Sken 1037212420Sken 1038212420Sken/**************************************************************************** 1039212420Sken* FWDownload message 1040212420Sken****************************************************************************/ 1041212420Sken 1042212420Sken/* FWDownload Request message */ 1043212420Skentypedef struct _MPI2_FW_DOWNLOAD_REQUEST 1044212420Sken{ 1045212420Sken U8 ImageType; /* 0x00 */ 1046212420Sken U8 Reserved1; /* 0x01 */ 1047212420Sken U8 ChainOffset; /* 0x02 */ 1048212420Sken U8 Function; /* 0x03 */ 1049212420Sken U16 Reserved2; /* 0x04 */ 1050212420Sken U8 Reserved3; /* 0x06 */ 1051212420Sken U8 MsgFlags; /* 0x07 */ 1052212420Sken U8 VP_ID; /* 0x08 */ 1053212420Sken U8 VF_ID; /* 0x09 */ 1054212420Sken U16 Reserved4; /* 0x0A */ 1055212420Sken U32 TotalImageSize; /* 0x0C */ 1056212420Sken U32 Reserved5; /* 0x10 */ 1057212420Sken MPI2_MPI_SGE_UNION SGL; /* 0x14 */ 1058212420Sken} MPI2_FW_DOWNLOAD_REQUEST, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_REQUEST, 1059212420Sken Mpi2FWDownloadRequest, MPI2_POINTER pMpi2FWDownloadRequest; 1060212420Sken 1061212420Sken#define MPI2_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT (0x01) 1062212420Sken 1063212420Sken#define MPI2_FW_DOWNLOAD_ITYPE_FW (0x01) 1064212420Sken#define MPI2_FW_DOWNLOAD_ITYPE_BIOS (0x02) 1065212420Sken#define MPI2_FW_DOWNLOAD_ITYPE_MANUFACTURING (0x06) 1066212420Sken#define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_1 (0x07) 1067212420Sken#define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_2 (0x08) 1068212420Sken#define MPI2_FW_DOWNLOAD_ITYPE_MEGARAID (0x09) 1069230592Sken#define MPI2_FW_DOWNLOAD_ITYPE_COMPLETE (0x0A) 1070212420Sken#define MPI2_FW_DOWNLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 1071230592Sken#define MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC (0xF0) 1072212420Sken 1073212420Sken/* FWDownload TransactionContext Element */ 1074212420Skentypedef struct _MPI2_FW_DOWNLOAD_TCSGE 1075212420Sken{ 1076212420Sken U8 Reserved1; /* 0x00 */ 1077212420Sken U8 ContextSize; /* 0x01 */ 1078212420Sken U8 DetailsLength; /* 0x02 */ 1079212420Sken U8 Flags; /* 0x03 */ 1080212420Sken U32 Reserved2; /* 0x04 */ 1081212420Sken U32 ImageOffset; /* 0x08 */ 1082212420Sken U32 ImageSize; /* 0x0C */ 1083212420Sken} MPI2_FW_DOWNLOAD_TCSGE, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_TCSGE, 1084212420Sken Mpi2FWDownloadTCSGE_t, MPI2_POINTER pMpi2FWDownloadTCSGE_t; 1085212420Sken 1086212420Sken/* FWDownload Reply message */ 1087212420Skentypedef struct _MPI2_FW_DOWNLOAD_REPLY 1088212420Sken{ 1089212420Sken U8 ImageType; /* 0x00 */ 1090212420Sken U8 Reserved1; /* 0x01 */ 1091212420Sken U8 MsgLength; /* 0x02 */ 1092212420Sken U8 Function; /* 0x03 */ 1093212420Sken U16 Reserved2; /* 0x04 */ 1094212420Sken U8 Reserved3; /* 0x06 */ 1095212420Sken U8 MsgFlags; /* 0x07 */ 1096212420Sken U8 VP_ID; /* 0x08 */ 1097212420Sken U8 VF_ID; /* 0x09 */ 1098212420Sken U16 Reserved4; /* 0x0A */ 1099212420Sken U16 Reserved5; /* 0x0C */ 1100212420Sken U16 IOCStatus; /* 0x0E */ 1101212420Sken U32 IOCLogInfo; /* 0x10 */ 1102212420Sken} MPI2_FW_DOWNLOAD_REPLY, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_REPLY, 1103212420Sken Mpi2FWDownloadReply_t, MPI2_POINTER pMpi2FWDownloadReply_t; 1104212420Sken 1105212420Sken 1106212420Sken/**************************************************************************** 1107212420Sken* FWUpload message 1108212420Sken****************************************************************************/ 1109212420Sken 1110212420Sken/* FWUpload Request message */ 1111212420Skentypedef struct _MPI2_FW_UPLOAD_REQUEST 1112212420Sken{ 1113212420Sken U8 ImageType; /* 0x00 */ 1114212420Sken U8 Reserved1; /* 0x01 */ 1115212420Sken U8 ChainOffset; /* 0x02 */ 1116212420Sken U8 Function; /* 0x03 */ 1117212420Sken U16 Reserved2; /* 0x04 */ 1118212420Sken U8 Reserved3; /* 0x06 */ 1119212420Sken U8 MsgFlags; /* 0x07 */ 1120212420Sken U8 VP_ID; /* 0x08 */ 1121212420Sken U8 VF_ID; /* 0x09 */ 1122212420Sken U16 Reserved4; /* 0x0A */ 1123212420Sken U32 Reserved5; /* 0x0C */ 1124212420Sken U32 Reserved6; /* 0x10 */ 1125212420Sken MPI2_MPI_SGE_UNION SGL; /* 0x14 */ 1126212420Sken} MPI2_FW_UPLOAD_REQUEST, MPI2_POINTER PTR_MPI2_FW_UPLOAD_REQUEST, 1127212420Sken Mpi2FWUploadRequest_t, MPI2_POINTER pMpi2FWUploadRequest_t; 1128212420Sken 1129212420Sken#define MPI2_FW_UPLOAD_ITYPE_FW_CURRENT (0x00) 1130212420Sken#define MPI2_FW_UPLOAD_ITYPE_FW_FLASH (0x01) 1131212420Sken#define MPI2_FW_UPLOAD_ITYPE_BIOS_FLASH (0x02) 1132212420Sken#define MPI2_FW_UPLOAD_ITYPE_FW_BACKUP (0x05) 1133212420Sken#define MPI2_FW_UPLOAD_ITYPE_MANUFACTURING (0x06) 1134212420Sken#define MPI2_FW_UPLOAD_ITYPE_CONFIG_1 (0x07) 1135212420Sken#define MPI2_FW_UPLOAD_ITYPE_CONFIG_2 (0x08) 1136212420Sken#define MPI2_FW_UPLOAD_ITYPE_MEGARAID (0x09) 1137212420Sken#define MPI2_FW_UPLOAD_ITYPE_COMPLETE (0x0A) 1138212420Sken#define MPI2_FW_UPLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 1139212420Sken 1140212420Skentypedef struct _MPI2_FW_UPLOAD_TCSGE 1141212420Sken{ 1142212420Sken U8 Reserved1; /* 0x00 */ 1143212420Sken U8 ContextSize; /* 0x01 */ 1144212420Sken U8 DetailsLength; /* 0x02 */ 1145212420Sken U8 Flags; /* 0x03 */ 1146212420Sken U32 Reserved2; /* 0x04 */ 1147212420Sken U32 ImageOffset; /* 0x08 */ 1148212420Sken U32 ImageSize; /* 0x0C */ 1149212420Sken} MPI2_FW_UPLOAD_TCSGE, MPI2_POINTER PTR_MPI2_FW_UPLOAD_TCSGE, 1150212420Sken Mpi2FWUploadTCSGE_t, MPI2_POINTER pMpi2FWUploadTCSGE_t; 1151212420Sken 1152212420Sken/* FWUpload Reply message */ 1153212420Skentypedef struct _MPI2_FW_UPLOAD_REPLY 1154212420Sken{ 1155212420Sken U8 ImageType; /* 0x00 */ 1156212420Sken U8 Reserved1; /* 0x01 */ 1157212420Sken U8 MsgLength; /* 0x02 */ 1158212420Sken U8 Function; /* 0x03 */ 1159212420Sken U16 Reserved2; /* 0x04 */ 1160212420Sken U8 Reserved3; /* 0x06 */ 1161212420Sken U8 MsgFlags; /* 0x07 */ 1162212420Sken U8 VP_ID; /* 0x08 */ 1163212420Sken U8 VF_ID; /* 0x09 */ 1164212420Sken U16 Reserved4; /* 0x0A */ 1165212420Sken U16 Reserved5; /* 0x0C */ 1166212420Sken U16 IOCStatus; /* 0x0E */ 1167212420Sken U32 IOCLogInfo; /* 0x10 */ 1168212420Sken U32 ActualImageSize; /* 0x14 */ 1169212420Sken} MPI2_FW_UPLOAD_REPLY, MPI2_POINTER PTR_MPI2_FW_UPLOAD_REPLY, 1170212420Sken Mpi2FWUploadReply_t, MPI2_POINTER pMPi2FWUploadReply_t; 1171212420Sken 1172212420Sken 1173212420Sken/* FW Image Header */ 1174212420Skentypedef struct _MPI2_FW_IMAGE_HEADER 1175212420Sken{ 1176212420Sken U32 Signature; /* 0x00 */ 1177212420Sken U32 Signature0; /* 0x04 */ 1178212420Sken U32 Signature1; /* 0x08 */ 1179212420Sken U32 Signature2; /* 0x0C */ 1180212420Sken MPI2_VERSION_UNION MPIVersion; /* 0x10 */ 1181212420Sken MPI2_VERSION_UNION FWVersion; /* 0x14 */ 1182212420Sken MPI2_VERSION_UNION NVDATAVersion; /* 0x18 */ 1183212420Sken MPI2_VERSION_UNION PackageVersion; /* 0x1C */ 1184212420Sken U16 VendorID; /* 0x20 */ 1185212420Sken U16 ProductID; /* 0x22 */ 1186212420Sken U16 ProtocolFlags; /* 0x24 */ 1187212420Sken U16 Reserved26; /* 0x26 */ 1188212420Sken U32 IOCCapabilities; /* 0x28 */ 1189212420Sken U32 ImageSize; /* 0x2C */ 1190212420Sken U32 NextImageHeaderOffset; /* 0x30 */ 1191212420Sken U32 Checksum; /* 0x34 */ 1192212420Sken U32 Reserved38; /* 0x38 */ 1193212420Sken U32 Reserved3C; /* 0x3C */ 1194212420Sken U32 Reserved40; /* 0x40 */ 1195212420Sken U32 Reserved44; /* 0x44 */ 1196212420Sken U32 Reserved48; /* 0x48 */ 1197212420Sken U32 Reserved4C; /* 0x4C */ 1198212420Sken U32 Reserved50; /* 0x50 */ 1199212420Sken U32 Reserved54; /* 0x54 */ 1200212420Sken U32 Reserved58; /* 0x58 */ 1201212420Sken U32 Reserved5C; /* 0x5C */ 1202212420Sken U32 Reserved60; /* 0x60 */ 1203212420Sken U32 FirmwareVersionNameWhat; /* 0x64 */ 1204212420Sken U8 FirmwareVersionName[32]; /* 0x68 */ 1205212420Sken U32 VendorNameWhat; /* 0x88 */ 1206212420Sken U8 VendorName[32]; /* 0x8C */ 1207212420Sken U32 PackageNameWhat; /* 0x88 */ 1208212420Sken U8 PackageName[32]; /* 0x8C */ 1209212420Sken U32 ReservedD0; /* 0xD0 */ 1210212420Sken U32 ReservedD4; /* 0xD4 */ 1211212420Sken U32 ReservedD8; /* 0xD8 */ 1212212420Sken U32 ReservedDC; /* 0xDC */ 1213212420Sken U32 ReservedE0; /* 0xE0 */ 1214212420Sken U32 ReservedE4; /* 0xE4 */ 1215212420Sken U32 ReservedE8; /* 0xE8 */ 1216212420Sken U32 ReservedEC; /* 0xEC */ 1217212420Sken U32 ReservedF0; /* 0xF0 */ 1218212420Sken U32 ReservedF4; /* 0xF4 */ 1219212420Sken U32 ReservedF8; /* 0xF8 */ 1220212420Sken U32 ReservedFC; /* 0xFC */ 1221212420Sken} MPI2_FW_IMAGE_HEADER, MPI2_POINTER PTR_MPI2_FW_IMAGE_HEADER, 1222212420Sken Mpi2FWImageHeader_t, MPI2_POINTER pMpi2FWImageHeader_t; 1223212420Sken 1224212420Sken/* Signature field */ 1225212420Sken#define MPI2_FW_HEADER_SIGNATURE_OFFSET (0x00) 1226212420Sken#define MPI2_FW_HEADER_SIGNATURE_MASK (0xFF000000) 1227212420Sken#define MPI2_FW_HEADER_SIGNATURE (0xEA000000) 1228212420Sken 1229212420Sken/* Signature0 field */ 1230212420Sken#define MPI2_FW_HEADER_SIGNATURE0_OFFSET (0x04) 1231212420Sken#define MPI2_FW_HEADER_SIGNATURE0 (0x5AFAA55A) 1232212420Sken 1233212420Sken/* Signature1 field */ 1234212420Sken#define MPI2_FW_HEADER_SIGNATURE1_OFFSET (0x08) 1235212420Sken#define MPI2_FW_HEADER_SIGNATURE1 (0xA55AFAA5) 1236212420Sken 1237212420Sken/* Signature2 field */ 1238212420Sken#define MPI2_FW_HEADER_SIGNATURE2_OFFSET (0x0C) 1239212420Sken#define MPI2_FW_HEADER_SIGNATURE2 (0x5AA55AFA) 1240212420Sken 1241212420Sken 1242212420Sken/* defines for using the ProductID field */ 1243212420Sken#define MPI2_FW_HEADER_PID_TYPE_MASK (0xF000) 1244212420Sken#define MPI2_FW_HEADER_PID_TYPE_SAS (0x2000) 1245212420Sken 1246212420Sken#define MPI2_FW_HEADER_PID_PROD_MASK (0x0F00) 1247212420Sken#define MPI2_FW_HEADER_PID_PROD_A (0x0000) 1248212420Sken#define MPI2_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI (0x0200) 1249212420Sken#define MPI2_FW_HEADER_PID_PROD_IR_SCSI (0x0700) 1250212420Sken 1251212420Sken 1252212420Sken#define MPI2_FW_HEADER_PID_FAMILY_MASK (0x00FF) 1253212420Sken/* SAS */ 1254212420Sken#define MPI2_FW_HEADER_PID_FAMILY_2108_SAS (0x0013) 1255212420Sken#define MPI2_FW_HEADER_PID_FAMILY_2208_SAS (0x0014) 1256212420Sken 1257212420Sken/* use MPI2_IOCFACTS_PROTOCOL_ defines for ProtocolFlags field */ 1258212420Sken 1259212420Sken/* use MPI2_IOCFACTS_CAPABILITY_ defines for IOCCapabilities field */ 1260212420Sken 1261212420Sken 1262212420Sken#define MPI2_FW_HEADER_IMAGESIZE_OFFSET (0x2C) 1263212420Sken#define MPI2_FW_HEADER_NEXTIMAGE_OFFSET (0x30) 1264212420Sken#define MPI2_FW_HEADER_VERNMHWAT_OFFSET (0x64) 1265212420Sken 1266212420Sken#define MPI2_FW_HEADER_WHAT_SIGNATURE (0x29232840) 1267212420Sken 1268212420Sken#define MPI2_FW_HEADER_SIZE (0x100) 1269212420Sken 1270212420Sken 1271212420Sken/* Extended Image Header */ 1272212420Skentypedef struct _MPI2_EXT_IMAGE_HEADER 1273212420Sken 1274212420Sken{ 1275212420Sken U8 ImageType; /* 0x00 */ 1276212420Sken U8 Reserved1; /* 0x01 */ 1277212420Sken U16 Reserved2; /* 0x02 */ 1278212420Sken U32 Checksum; /* 0x04 */ 1279212420Sken U32 ImageSize; /* 0x08 */ 1280212420Sken U32 NextImageHeaderOffset; /* 0x0C */ 1281212420Sken U32 PackageVersion; /* 0x10 */ 1282212420Sken U32 Reserved3; /* 0x14 */ 1283212420Sken U32 Reserved4; /* 0x18 */ 1284212420Sken U32 Reserved5; /* 0x1C */ 1285212420Sken U8 IdentifyString[32]; /* 0x20 */ 1286212420Sken} MPI2_EXT_IMAGE_HEADER, MPI2_POINTER PTR_MPI2_EXT_IMAGE_HEADER, 1287212420Sken Mpi2ExtImageHeader_t, MPI2_POINTER pMpi2ExtImageHeader_t; 1288212420Sken 1289212420Sken/* useful offsets */ 1290212420Sken#define MPI2_EXT_IMAGE_IMAGETYPE_OFFSET (0x00) 1291212420Sken#define MPI2_EXT_IMAGE_IMAGESIZE_OFFSET (0x08) 1292212420Sken#define MPI2_EXT_IMAGE_NEXTIMAGE_OFFSET (0x0C) 1293212420Sken 1294212420Sken#define MPI2_EXT_IMAGE_HEADER_SIZE (0x40) 1295212420Sken 1296212420Sken/* defines for the ImageType field */ 1297212420Sken#define MPI2_EXT_IMAGE_TYPE_UNSPECIFIED (0x00) 1298212420Sken#define MPI2_EXT_IMAGE_TYPE_FW (0x01) 1299212420Sken#define MPI2_EXT_IMAGE_TYPE_NVDATA (0x03) 1300212420Sken#define MPI2_EXT_IMAGE_TYPE_BOOTLOADER (0x04) 1301212420Sken#define MPI2_EXT_IMAGE_TYPE_INITIALIZATION (0x05) 1302212420Sken#define MPI2_EXT_IMAGE_TYPE_FLASH_LAYOUT (0x06) 1303212420Sken#define MPI2_EXT_IMAGE_TYPE_SUPPORTED_DEVICES (0x07) 1304212420Sken#define MPI2_EXT_IMAGE_TYPE_MEGARAID (0x08) 1305212420Sken 1306212420Sken#define MPI2_EXT_IMAGE_TYPE_MAX (MPI2_EXT_IMAGE_TYPE_MEGARAID) 1307212420Sken 1308212420Sken 1309212420Sken 1310212420Sken/* FLASH Layout Extended Image Data */ 1311212420Sken 1312212420Sken/* 1313212420Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1314212420Sken * one and check RegionsPerLayout at runtime. 1315212420Sken */ 1316212420Sken#ifndef MPI2_FLASH_NUMBER_OF_REGIONS 1317212420Sken#define MPI2_FLASH_NUMBER_OF_REGIONS (1) 1318212420Sken#endif 1319212420Sken 1320212420Sken/* 1321212420Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1322212420Sken * one and check NumberOfLayouts at runtime. 1323212420Sken */ 1324212420Sken#ifndef MPI2_FLASH_NUMBER_OF_LAYOUTS 1325212420Sken#define MPI2_FLASH_NUMBER_OF_LAYOUTS (1) 1326212420Sken#endif 1327212420Sken 1328212420Skentypedef struct _MPI2_FLASH_REGION 1329212420Sken{ 1330212420Sken U8 RegionType; /* 0x00 */ 1331212420Sken U8 Reserved1; /* 0x01 */ 1332212420Sken U16 Reserved2; /* 0x02 */ 1333212420Sken U32 RegionOffset; /* 0x04 */ 1334212420Sken U32 RegionSize; /* 0x08 */ 1335212420Sken U32 Reserved3; /* 0x0C */ 1336212420Sken} MPI2_FLASH_REGION, MPI2_POINTER PTR_MPI2_FLASH_REGION, 1337212420Sken Mpi2FlashRegion_t, MPI2_POINTER pMpi2FlashRegion_t; 1338212420Sken 1339212420Skentypedef struct _MPI2_FLASH_LAYOUT 1340212420Sken{ 1341212420Sken U32 FlashSize; /* 0x00 */ 1342212420Sken U32 Reserved1; /* 0x04 */ 1343212420Sken U32 Reserved2; /* 0x08 */ 1344212420Sken U32 Reserved3; /* 0x0C */ 1345212420Sken MPI2_FLASH_REGION Region[MPI2_FLASH_NUMBER_OF_REGIONS];/* 0x10 */ 1346212420Sken} MPI2_FLASH_LAYOUT, MPI2_POINTER PTR_MPI2_FLASH_LAYOUT, 1347212420Sken Mpi2FlashLayout_t, MPI2_POINTER pMpi2FlashLayout_t; 1348212420Sken 1349212420Skentypedef struct _MPI2_FLASH_LAYOUT_DATA 1350212420Sken{ 1351212420Sken U8 ImageRevision; /* 0x00 */ 1352212420Sken U8 Reserved1; /* 0x01 */ 1353212420Sken U8 SizeOfRegion; /* 0x02 */ 1354212420Sken U8 Reserved2; /* 0x03 */ 1355212420Sken U16 NumberOfLayouts; /* 0x04 */ 1356212420Sken U16 RegionsPerLayout; /* 0x06 */ 1357212420Sken U16 MinimumSectorAlignment; /* 0x08 */ 1358212420Sken U16 Reserved3; /* 0x0A */ 1359212420Sken U32 Reserved4; /* 0x0C */ 1360212420Sken MPI2_FLASH_LAYOUT Layout[MPI2_FLASH_NUMBER_OF_LAYOUTS];/* 0x10 */ 1361212420Sken} MPI2_FLASH_LAYOUT_DATA, MPI2_POINTER PTR_MPI2_FLASH_LAYOUT_DATA, 1362212420Sken Mpi2FlashLayoutData_t, MPI2_POINTER pMpi2FlashLayoutData_t; 1363212420Sken 1364212420Sken/* defines for the RegionType field */ 1365212420Sken#define MPI2_FLASH_REGION_UNUSED (0x00) 1366212420Sken#define MPI2_FLASH_REGION_FIRMWARE (0x01) 1367212420Sken#define MPI2_FLASH_REGION_BIOS (0x02) 1368212420Sken#define MPI2_FLASH_REGION_NVDATA (0x03) 1369212420Sken#define MPI2_FLASH_REGION_FIRMWARE_BACKUP (0x05) 1370212420Sken#define MPI2_FLASH_REGION_MFG_INFORMATION (0x06) 1371212420Sken#define MPI2_FLASH_REGION_CONFIG_1 (0x07) 1372212420Sken#define MPI2_FLASH_REGION_CONFIG_2 (0x08) 1373212420Sken#define MPI2_FLASH_REGION_MEGARAID (0x09) 1374212420Sken#define MPI2_FLASH_REGION_INIT (0x0A) 1375212420Sken 1376212420Sken/* ImageRevision */ 1377212420Sken#define MPI2_FLASH_LAYOUT_IMAGE_REVISION (0x00) 1378212420Sken 1379212420Sken 1380212420Sken 1381212420Sken/* Supported Devices Extended Image Data */ 1382212420Sken 1383212420Sken/* 1384212420Sken * Host code (drivers, BIOS, utilities, etc.) should leave this define set to 1385212420Sken * one and check NumberOfDevices at runtime. 1386212420Sken */ 1387212420Sken#ifndef MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES 1388212420Sken#define MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES (1) 1389212420Sken#endif 1390212420Sken 1391212420Skentypedef struct _MPI2_SUPPORTED_DEVICE 1392212420Sken{ 1393212420Sken U16 DeviceID; /* 0x00 */ 1394212420Sken U16 VendorID; /* 0x02 */ 1395212420Sken U16 DeviceIDMask; /* 0x04 */ 1396212420Sken U16 Reserved1; /* 0x06 */ 1397212420Sken U8 LowPCIRev; /* 0x08 */ 1398212420Sken U8 HighPCIRev; /* 0x09 */ 1399212420Sken U16 Reserved2; /* 0x0A */ 1400212420Sken U32 Reserved3; /* 0x0C */ 1401212420Sken} MPI2_SUPPORTED_DEVICE, MPI2_POINTER PTR_MPI2_SUPPORTED_DEVICE, 1402212420Sken Mpi2SupportedDevice_t, MPI2_POINTER pMpi2SupportedDevice_t; 1403212420Sken 1404212420Skentypedef struct _MPI2_SUPPORTED_DEVICES_DATA 1405212420Sken{ 1406212420Sken U8 ImageRevision; /* 0x00 */ 1407212420Sken U8 Reserved1; /* 0x01 */ 1408212420Sken U8 NumberOfDevices; /* 0x02 */ 1409212420Sken U8 Reserved2; /* 0x03 */ 1410212420Sken U32 Reserved3; /* 0x04 */ 1411212420Sken MPI2_SUPPORTED_DEVICE SupportedDevice[MPI2_SUPPORTED_DEVICES_IMAGE_NUM_DEVICES]; /* 0x08 */ 1412212420Sken} MPI2_SUPPORTED_DEVICES_DATA, MPI2_POINTER PTR_MPI2_SUPPORTED_DEVICES_DATA, 1413212420Sken Mpi2SupportedDevicesData_t, MPI2_POINTER pMpi2SupportedDevicesData_t; 1414212420Sken 1415212420Sken/* ImageRevision */ 1416212420Sken#define MPI2_SUPPORTED_DEVICES_IMAGE_REVISION (0x00) 1417212420Sken 1418212420Sken 1419212420Sken/* Init Extended Image Data */ 1420212420Sken 1421212420Skentypedef struct _MPI2_INIT_IMAGE_FOOTER 1422212420Sken 1423212420Sken{ 1424212420Sken U32 BootFlags; /* 0x00 */ 1425212420Sken U32 ImageSize; /* 0x04 */ 1426212420Sken U32 Signature0; /* 0x08 */ 1427212420Sken U32 Signature1; /* 0x0C */ 1428212420Sken U32 Signature2; /* 0x10 */ 1429212420Sken U32 ResetVector; /* 0x14 */ 1430212420Sken} MPI2_INIT_IMAGE_FOOTER, MPI2_POINTER PTR_MPI2_INIT_IMAGE_FOOTER, 1431212420Sken Mpi2InitImageFooter_t, MPI2_POINTER pMpi2InitImageFooter_t; 1432212420Sken 1433212420Sken/* defines for the BootFlags field */ 1434212420Sken#define MPI2_INIT_IMAGE_BOOTFLAGS_OFFSET (0x00) 1435212420Sken 1436212420Sken/* defines for the ImageSize field */ 1437212420Sken#define MPI2_INIT_IMAGE_IMAGESIZE_OFFSET (0x04) 1438212420Sken 1439212420Sken/* defines for the Signature0 field */ 1440212420Sken#define MPI2_INIT_IMAGE_SIGNATURE0_OFFSET (0x08) 1441212420Sken#define MPI2_INIT_IMAGE_SIGNATURE0 (0x5AA55AEA) 1442212420Sken 1443212420Sken/* defines for the Signature1 field */ 1444212420Sken#define MPI2_INIT_IMAGE_SIGNATURE1_OFFSET (0x0C) 1445212420Sken#define MPI2_INIT_IMAGE_SIGNATURE1 (0xA55AEAA5) 1446212420Sken 1447212420Sken/* defines for the Signature2 field */ 1448212420Sken#define MPI2_INIT_IMAGE_SIGNATURE2_OFFSET (0x10) 1449212420Sken#define MPI2_INIT_IMAGE_SIGNATURE2 (0x5AEAA55A) 1450212420Sken 1451212420Sken/* Signature fields as individual bytes */ 1452212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_0 (0xEA) 1453212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_1 (0x5A) 1454212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_2 (0xA5) 1455212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_3 (0x5A) 1456212420Sken 1457212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_4 (0xA5) 1458212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_5 (0xEA) 1459212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_6 (0x5A) 1460212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_7 (0xA5) 1461212420Sken 1462212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_8 (0x5A) 1463212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_9 (0xA5) 1464212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_A (0xEA) 1465212420Sken#define MPI2_INIT_IMAGE_SIGNATURE_BYTE_B (0x5A) 1466212420Sken 1467212420Sken/* defines for the ResetVector field */ 1468212420Sken#define MPI2_INIT_IMAGE_RESETVECTOR_OFFSET (0x14) 1469212420Sken 1470212420Sken 1471230592Sken/**************************************************************************** 1472230592Sken* PowerManagementControl message 1473230592Sken****************************************************************************/ 1474230592Sken 1475230592Sken/* PowerManagementControl Request message */ 1476230592Skentypedef struct _MPI2_PWR_MGMT_CONTROL_REQUEST 1477230592Sken{ 1478230592Sken U8 Feature; /* 0x00 */ 1479230592Sken U8 Reserved1; /* 0x01 */ 1480230592Sken U8 ChainOffset; /* 0x02 */ 1481230592Sken U8 Function; /* 0x03 */ 1482230592Sken U16 Reserved2; /* 0x04 */ 1483230592Sken U8 Reserved3; /* 0x06 */ 1484230592Sken U8 MsgFlags; /* 0x07 */ 1485230592Sken U8 VP_ID; /* 0x08 */ 1486230592Sken U8 VF_ID; /* 0x09 */ 1487230592Sken U16 Reserved4; /* 0x0A */ 1488230592Sken U8 Parameter1; /* 0x0C */ 1489230592Sken U8 Parameter2; /* 0x0D */ 1490230592Sken U8 Parameter3; /* 0x0E */ 1491230592Sken U8 Parameter4; /* 0x0F */ 1492230592Sken U32 Reserved5; /* 0x10 */ 1493230592Sken U32 Reserved6; /* 0x14 */ 1494230592Sken} MPI2_PWR_MGMT_CONTROL_REQUEST, MPI2_POINTER PTR_MPI2_PWR_MGMT_CONTROL_REQUEST, 1495230592Sken Mpi2PwrMgmtControlRequest_t, MPI2_POINTER pMpi2PwrMgmtControlRequest_t; 1496230592Sken 1497230592Sken/* defines for the Feature field */ 1498230592Sken#define MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND (0x01) 1499230592Sken#define MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION (0x02) 1500230592Sken#define MPI2_PM_CONTROL_FEATURE_PCIE_LINK (0x03) 1501230592Sken#define MPI2_PM_CONTROL_FEATURE_IOC_SPEED (0x04) 1502230592Sken#define MPI2_PM_CONTROL_FEATURE_MIN_PRODUCT_SPECIFIC (0x80) 1503230592Sken#define MPI2_PM_CONTROL_FEATURE_MAX_PRODUCT_SPECIFIC (0xFF) 1504230592Sken 1505230592Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND Feature */ 1506230592Sken/* Parameter1 contains a PHY number */ 1507230592Sken/* Parameter2 indicates power condition action using these defines */ 1508230592Sken#define MPI2_PM_CONTROL_PARAM2_PARTIAL (0x01) 1509230592Sken#define MPI2_PM_CONTROL_PARAM2_SLUMBER (0x02) 1510230592Sken#define MPI2_PM_CONTROL_PARAM2_EXIT_PWR_MGMT (0x03) 1511230592Sken/* Parameter3 and Parameter4 are reserved */ 1512230592Sken 1513230592Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION Feature */ 1514230592Sken/* Parameter1 contains SAS port width modulation group number */ 1515230592Sken/* Parameter2 indicates IOC action using these defines */ 1516230592Sken#define MPI2_PM_CONTROL_PARAM2_REQUEST_OWNERSHIP (0x01) 1517230592Sken#define MPI2_PM_CONTROL_PARAM2_CHANGE_MODULATION (0x02) 1518230592Sken#define MPI2_PM_CONTROL_PARAM2_RELINQUISH_OWNERSHIP (0x03) 1519230592Sken/* Parameter3 indicates desired modulation level using these defines */ 1520230592Sken#define MPI2_PM_CONTROL_PARAM3_25_PERCENT (0x00) 1521230592Sken#define MPI2_PM_CONTROL_PARAM3_50_PERCENT (0x01) 1522230592Sken#define MPI2_PM_CONTROL_PARAM3_75_PERCENT (0x02) 1523230592Sken#define MPI2_PM_CONTROL_PARAM3_100_PERCENT (0x03) 1524230592Sken/* Parameter4 is reserved */ 1525230592Sken 1526230592Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_PCIE_LINK Feature */ 1527230592Sken/* Parameter1 indicates desired PCIe link speed using these defines */ 1528230592Sken#define MPI2_PM_CONTROL_PARAM1_PCIE_2_5_GBPS (0x00) 1529230592Sken#define MPI2_PM_CONTROL_PARAM1_PCIE_5_0_GBPS (0x01) 1530230592Sken#define MPI2_PM_CONTROL_PARAM1_PCIE_8_0_GBPS (0x02) 1531230592Sken/* Parameter2 indicates desired PCIe link width using these defines */ 1532230592Sken#define MPI2_PM_CONTROL_PARAM2_WIDTH_X1 (0x01) 1533230592Sken#define MPI2_PM_CONTROL_PARAM2_WIDTH_X2 (0x02) 1534230592Sken#define MPI2_PM_CONTROL_PARAM2_WIDTH_X4 (0x04) 1535230592Sken#define MPI2_PM_CONTROL_PARAM2_WIDTH_X8 (0x08) 1536230592Sken/* Parameter3 and Parameter4 are reserved */ 1537230592Sken 1538230592Sken/* parameter usage for the MPI2_PM_CONTROL_FEATURE_IOC_SPEED Feature */ 1539230592Sken/* Parameter1 indicates desired IOC hardware clock speed using these defines */ 1540230592Sken#define MPI2_PM_CONTROL_PARAM1_FULL_IOC_SPEED (0x01) 1541230592Sken#define MPI2_PM_CONTROL_PARAM1_HALF_IOC_SPEED (0x02) 1542230592Sken#define MPI2_PM_CONTROL_PARAM1_QUARTER_IOC_SPEED (0x04) 1543230592Sken#define MPI2_PM_CONTROL_PARAM1_EIGHTH_IOC_SPEED (0x08) 1544230592Sken/* Parameter2, Parameter3, and Parameter4 are reserved */ 1545230592Sken 1546230592Sken 1547230592Sken/* PowerManagementControl Reply message */ 1548230592Skentypedef struct _MPI2_PWR_MGMT_CONTROL_REPLY 1549230592Sken{ 1550230592Sken U8 Feature; /* 0x00 */ 1551230592Sken U8 Reserved1; /* 0x01 */ 1552230592Sken U8 MsgLength; /* 0x02 */ 1553230592Sken U8 Function; /* 0x03 */ 1554230592Sken U16 Reserved2; /* 0x04 */ 1555230592Sken U8 Reserved3; /* 0x06 */ 1556230592Sken U8 MsgFlags; /* 0x07 */ 1557230592Sken U8 VP_ID; /* 0x08 */ 1558230592Sken U8 VF_ID; /* 0x09 */ 1559230592Sken U16 Reserved4; /* 0x0A */ 1560230592Sken U16 Reserved5; /* 0x0C */ 1561230592Sken U16 IOCStatus; /* 0x0E */ 1562230592Sken U32 IOCLogInfo; /* 0x10 */ 1563230592Sken} MPI2_PWR_MGMT_CONTROL_REPLY, MPI2_POINTER PTR_MPI2_PWR_MGMT_CONTROL_REPLY, 1564230592Sken Mpi2PwrMgmtControlReply_t, MPI2_POINTER pMpi2PwrMgmtControlReply_t; 1565230592Sken 1566230592Sken 1567212420Sken#endif 1568212420Sken 1569