1098ca2bdSWarner Losh /*- 2*7282444bSPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 3*7282444bSPedro F. Giffuni * 412af29abSMarius Strobl * Copyright (c) 2000-2010, LSI Logic Corporation and its contributors. 5b0a2fdeeSScott Long * All rights reserved. 6d3ecac66SMatt Jacob * 7d3ecac66SMatt Jacob * Redistribution and use in source and binary forms, with or without 8b0a2fdeeSScott Long * modification, are permitted provided that the following conditions are 9b0a2fdeeSScott Long * met: 10d3ecac66SMatt Jacob * 1. Redistributions of source code must retain the above copyright 11b0a2fdeeSScott Long * notice, this list of conditions and the following disclaimer. 12b0a2fdeeSScott Long * 2. Redistributions in binary form must reproduce at minimum a disclaimer 13b0a2fdeeSScott Long * substantially similar to the "NO WARRANTY" disclaimer below 14b0a2fdeeSScott Long * ("Disclaimer") and any redistribution must be conditioned upon including 15b0a2fdeeSScott Long * a substantially similar Disclaimer requirement for further binary 16b0a2fdeeSScott Long * redistribution. 17b0a2fdeeSScott Long * 3. Neither the name of the LSI Logic Corporation nor the names of its 18b0a2fdeeSScott Long * contributors may be used to endorse or promote products derived from 19b0a2fdeeSScott Long * this software without specific prior written permission. 20d3ecac66SMatt Jacob * 21b0a2fdeeSScott Long * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22b0a2fdeeSScott Long * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23d3ecac66SMatt Jacob * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24b0a2fdeeSScott Long * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25b0a2fdeeSScott Long * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26b0a2fdeeSScott Long * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27b0a2fdeeSScott Long * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28b0a2fdeeSScott Long * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29b0a2fdeeSScott Long * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30b0a2fdeeSScott Long * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE COPYRIGHT 31b0a2fdeeSScott Long * OWNER OR CONTRIBUTOR IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 329b631363SMatt Jacob * 339de3c85cSMatt Jacob * Name: mpi_ioc.h 349b631363SMatt Jacob * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages 359b631363SMatt Jacob * Creation Date: August 11, 2000 369b631363SMatt Jacob * 371bf5a6cfSMarius Strobl * mpi_ioc.h Version: 01.05.16 389b631363SMatt Jacob * 399b631363SMatt Jacob * Version History 409b631363SMatt Jacob * --------------- 419b631363SMatt Jacob * 429b631363SMatt Jacob * Date Version Description 439b631363SMatt Jacob * -------- -------- ------------------------------------------------------ 449b631363SMatt Jacob * 05-08-00 00.10.01 Original release for 0.10 spec dated 4/26/2000. 459b631363SMatt Jacob * 05-24-00 00.10.02 Added _MSG_IOC_INIT_REPLY structure. 469b631363SMatt Jacob * 06-06-00 01.00.01 Added CurReplyFrameSize field to _MSG_IOC_FACTS_REPLY. 479b631363SMatt Jacob * 06-12-00 01.00.02 Added _MSG_PORT_ENABLE_REPLY structure. 489b631363SMatt Jacob * Added _MSG_EVENT_ACK_REPLY structure. 499b631363SMatt Jacob * Added _MSG_FW_DOWNLOAD_REPLY structure. 509b631363SMatt Jacob * Added _MSG_TOOLBOX_REPLY structure. 519b631363SMatt Jacob * 06-30-00 01.00.03 Added MaxLanBuckets to _PORT_FACT_REPLY structure. 529b631363SMatt Jacob * 07-27-00 01.00.04 Added _EVENT_DATA structure definitions for _SCSI, 539b631363SMatt Jacob * _LINK_STATUS, _LOOP_STATE and _LOGOUT. 549b631363SMatt Jacob * 08-11-00 01.00.05 Switched positions of MsgLength and Function fields in 559b631363SMatt Jacob * _MSG_EVENT_ACK_REPLY structure to match specification. 569b631363SMatt Jacob * 11-02-00 01.01.01 Original release for post 1.0 work. 579b631363SMatt Jacob * Added a value for Manufacturer to WhoInit. 589b631363SMatt Jacob * 12-04-00 01.01.02 Modified IOCFacts reply, added FWUpload messages, and 599b631363SMatt Jacob * removed toolbox message. 609b631363SMatt Jacob * 01-09-01 01.01.03 Added event enabled and disabled defines. 619b631363SMatt Jacob * Added structures for FwHeader and DataHeader. 629b631363SMatt Jacob * Added ImageType to FwUpload reply. 639b631363SMatt Jacob * 02-20-01 01.01.04 Started using MPI_POINTER. 649b631363SMatt Jacob * 02-27-01 01.01.05 Added event for RAID status change and its event data. 659b631363SMatt Jacob * Added IocNumber field to MSG_IOC_FACTS_REPLY. 669b631363SMatt Jacob * 03-27-01 01.01.06 Added defines for ProductId field of MPI_FW_HEADER. 679b631363SMatt Jacob * Added structure offset comments. 689b631363SMatt Jacob * 04-09-01 01.01.07 Added structure EVENT_DATA_EVENT_CHANGE. 699b631363SMatt Jacob * 08-08-01 01.02.01 Original release for v1.2 work. 709b631363SMatt Jacob * New format for FWVersion and ProductId in 719b631363SMatt Jacob * MSG_IOC_FACTS_REPLY and MPI_FW_HEADER. 729b631363SMatt Jacob * 08-31-01 01.02.02 Addded event MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE and 739b631363SMatt Jacob * related structure and defines. 749b631363SMatt Jacob * Added event MPI_EVENT_ON_BUS_TIMER_EXPIRED. 759b631363SMatt Jacob * Added MPI_IOCINIT_FLAGS_DISCARD_FW_IMAGE. 769b631363SMatt Jacob * Replaced a reserved field in MSG_IOC_FACTS_REPLY with 779b631363SMatt Jacob * IOCExceptions and changed DataImageSize to reserved. 789b631363SMatt Jacob * Added MPI_FW_DOWNLOAD_ITYPE_NVSTORE_DATA and 799b631363SMatt Jacob * MPI_FW_UPLOAD_ITYPE_NVDATA. 809b631363SMatt Jacob * 09-28-01 01.02.03 Modified Event Data for Integrated RAID. 819b631363SMatt Jacob * 11-01-01 01.02.04 Added defines for MPI_EXT_IMAGE_HEADER ImageType field. 827fed69eeSMatt Jacob * 03-14-02 01.02.05 Added HeaderVersion field to MSG_IOC_FACTS_REPLY. 837fed69eeSMatt Jacob * 05-31-02 01.02.06 Added define for 847fed69eeSMatt Jacob * MPI_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID. 857fed69eeSMatt Jacob * Added AliasIndex to EVENT_DATA_LOGOUT structure. 867fed69eeSMatt Jacob * 04-01-03 01.02.07 Added defines for MPI_FW_HEADER_SIGNATURE_. 87b0a2fdeeSScott Long * 06-26-03 01.02.08 Added new values to the product family defines. 889de3c85cSMatt Jacob * 04-29-04 01.02.09 Added IOCCapabilities field to MSG_IOC_FACTS_REPLY and 899de3c85cSMatt Jacob * added related defines. 909de3c85cSMatt Jacob * 05-11-04 01.03.01 Original release for MPI v1.3. 919de3c85cSMatt Jacob * 08-19-04 01.05.01 Added four new fields to MSG_IOC_INIT. 929de3c85cSMatt Jacob * Added three new fields to MSG_IOC_FACTS_REPLY. 939de3c85cSMatt Jacob * Defined four new bits for the IOCCapabilities field of 949de3c85cSMatt Jacob * the IOCFacts reply. 959de3c85cSMatt Jacob * Added two new PortTypes for the PortFacts reply. 969de3c85cSMatt Jacob * Added six new events along with their EventData 979de3c85cSMatt Jacob * structures. 989de3c85cSMatt Jacob * Added a new MsgFlag to the FwDownload request to 999de3c85cSMatt Jacob * indicate last segment. 1009de3c85cSMatt Jacob * Defined a new image type of boot loader. 1019de3c85cSMatt Jacob * Added FW family codes for SAS product families. 1029de3c85cSMatt Jacob * 10-05-04 01.05.02 Added ReplyFifoHostSignalingAddr field to 1039de3c85cSMatt Jacob * MSG_IOC_FACTS_REPLY. 1049de3c85cSMatt Jacob * 12-07-04 01.05.03 Added more defines for SAS Discovery Error event. 1059de3c85cSMatt Jacob * 12-09-04 01.05.04 Added Unsupported device to SAS Device event. 1069de3c85cSMatt Jacob * 01-15-05 01.05.05 Added event data for SAS SES Event. 1079de3c85cSMatt Jacob * 02-09-05 01.05.06 Added MPI_FW_UPLOAD_ITYPE_FW_BACKUP define. 1089de3c85cSMatt Jacob * 02-22-05 01.05.07 Added Host Page Buffer Persistent flag to IOC Facts 1099de3c85cSMatt Jacob * Reply and IOC Init Request. 1109de3c85cSMatt Jacob * 03-11-05 01.05.08 Added family code for 1068E family. 1119de3c85cSMatt Jacob * Removed IOCFacts Reply EEDP Capability bit. 1129de3c85cSMatt Jacob * 06-24-05 01.05.09 Added 5 new IOCFacts Reply IOCCapabilities bits. 1139de3c85cSMatt Jacob * Added Max SATA Targets to SAS Discovery Error event. 1140b80d21bSMatt Jacob * 08-30-05 01.05.10 Added 4 new events and their event data structures. 1150b80d21bSMatt Jacob * Added new ReasonCode value for SAS Device Status Change 1160b80d21bSMatt Jacob * event. 1170b80d21bSMatt Jacob * Added new family code for FC949E. 11862ae194dSScott Long * 03-27-06 01.05.11 Added MPI_IOCFACTS_CAPABILITY_TLR. 11962ae194dSScott Long * Added additional Reason Codes and more event data fields 12062ae194dSScott Long * to EVENT_DATA_SAS_DEVICE_STATUS_CHANGE. 12162ae194dSScott Long * Added EVENT_DATA_SAS_BROADCAST_PRIMITIVE structure and 12262ae194dSScott Long * new event. 12362ae194dSScott Long * Added MPI_EVENT_SAS_SMP_ERROR and event data structure. 12462ae194dSScott Long * Added MPI_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE and event 12562ae194dSScott Long * data structure. 12662ae194dSScott Long * Added MPI_EVENT_SAS_INIT_TABLE_OVERFLOW and event 12762ae194dSScott Long * data structure. 12862ae194dSScott Long * Added MPI_EXT_IMAGE_TYPE_INITIALIZATION. 12962ae194dSScott Long * 10-11-06 01.05.12 Added MPI_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED. 13062ae194dSScott Long * Added MaxInitiators field to PortFacts reply. 13162ae194dSScott Long * Added SAS Device Status Change ReasonCode for 13262ae194dSScott Long * asynchronous notificaiton. 13362ae194dSScott Long * Added MPI_EVENT_SAS_EXPANDER_STATUS_CHANGE and event 13462ae194dSScott Long * data structure. 13562ae194dSScott Long * Added new ImageType values for FWDownload and FWUpload 13662ae194dSScott Long * requests. 13762ae194dSScott Long * 02-28-07 01.05.13 Added MPI_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT for SAS 13862ae194dSScott Long * Broadcast Event Data (replacing _RESERVED2). 13962ae194dSScott Long * For Discovery Error Event Data DiscoveryStatus field, 14062ae194dSScott Long * replaced _MULTPL_PATHS with _UNSUPPORTED_DEVICE and 14162ae194dSScott Long * added _MULTI_PORT_DOMAIN. 14262ae194dSScott Long * 05-24-07 01.05.14 Added Common Boot Block type to FWDownload Request. 14362ae194dSScott Long * Added Common Boot Block type to FWUpload Request. 1441bf5a6cfSMarius Strobl * 08-07-07 01.05.15 Added MPI_EVENT_SAS_INIT_RC_REMOVED define. 1451bf5a6cfSMarius Strobl * Added MPI_EVENT_IR2_RC_DUAL_PORT_ADDED and 1461bf5a6cfSMarius Strobl * MPI_EVENT_IR2_RC_DUAL_PORT_REMOVED for IR2 event data. 1471bf5a6cfSMarius Strobl * Added SASAddress field to SAS Initiator Device Table 1481bf5a6cfSMarius Strobl * Overflow event data structure. 1491bf5a6cfSMarius Strobl * 03-28-08 01.05.16 Added two new ReasonCode values to SAS Device Status 1501bf5a6cfSMarius Strobl * Change Event data to indicate completion of internally 1511bf5a6cfSMarius Strobl * generated task management. 1521bf5a6cfSMarius Strobl * Added MPI_EVENT_DSCVRY_ERR_DS_SATA_INIT_FAILURE define. 1531bf5a6cfSMarius Strobl * Added MPI_EVENT_SAS_INIT_RC_INACCESSIBLE define. 1549b631363SMatt Jacob * -------------------------------------------------------------------------- 1559b631363SMatt Jacob */ 1569b631363SMatt Jacob 1579b631363SMatt Jacob #ifndef MPI_IOC_H 1589b631363SMatt Jacob #define MPI_IOC_H 1599b631363SMatt Jacob 1609b631363SMatt Jacob /***************************************************************************** 1619b631363SMatt Jacob * 1629b631363SMatt Jacob * I O C M e s s a g e s 1639b631363SMatt Jacob * 1649b631363SMatt Jacob *****************************************************************************/ 1659b631363SMatt Jacob 1669b631363SMatt Jacob /****************************************************************************/ 1679b631363SMatt Jacob /* IOCInit message */ 1689b631363SMatt Jacob /****************************************************************************/ 1699b631363SMatt Jacob 1709b631363SMatt Jacob typedef struct _MSG_IOC_INIT 1719b631363SMatt Jacob { 1729b631363SMatt Jacob U8 WhoInit; /* 00h */ 1739b631363SMatt Jacob U8 Reserved; /* 01h */ 1749b631363SMatt Jacob U8 ChainOffset; /* 02h */ 1759b631363SMatt Jacob U8 Function; /* 03h */ 1769b631363SMatt Jacob U8 Flags; /* 04h */ 1779b631363SMatt Jacob U8 MaxDevices; /* 05h */ 1789b631363SMatt Jacob U8 MaxBuses; /* 06h */ 1799b631363SMatt Jacob U8 MsgFlags; /* 07h */ 1809b631363SMatt Jacob U32 MsgContext; /* 08h */ 1819b631363SMatt Jacob U16 ReplyFrameSize; /* 0Ch */ 1829b631363SMatt Jacob U8 Reserved1[2]; /* 0Eh */ 1839b631363SMatt Jacob U32 HostMfaHighAddr; /* 10h */ 1849b631363SMatt Jacob U32 SenseBufferHighAddr; /* 14h */ 1859de3c85cSMatt Jacob U32 ReplyFifoHostSignalingAddr; /* 18h */ 1869de3c85cSMatt Jacob SGE_SIMPLE_UNION HostPageBufferSGE; /* 1Ch */ 1879de3c85cSMatt Jacob U16 MsgVersion; /* 28h */ 1889de3c85cSMatt Jacob U16 HeaderVersion; /* 2Ah */ 1899b631363SMatt Jacob } MSG_IOC_INIT, MPI_POINTER PTR_MSG_IOC_INIT, 1909b631363SMatt Jacob IOCInit_t, MPI_POINTER pIOCInit_t; 1919b631363SMatt Jacob 1929b631363SMatt Jacob /* WhoInit values */ 1939b631363SMatt Jacob #define MPI_WHOINIT_NO_ONE (0x00) 1949b631363SMatt Jacob #define MPI_WHOINIT_SYSTEM_BIOS (0x01) 1959b631363SMatt Jacob #define MPI_WHOINIT_ROM_BIOS (0x02) 1969b631363SMatt Jacob #define MPI_WHOINIT_PCI_PEER (0x03) 1979b631363SMatt Jacob #define MPI_WHOINIT_HOST_DRIVER (0x04) 1989b631363SMatt Jacob #define MPI_WHOINIT_MANUFACTURER (0x05) 1999b631363SMatt Jacob 2009b631363SMatt Jacob /* Flags values */ 2019de3c85cSMatt Jacob #define MPI_IOCINIT_FLAGS_HOST_PAGE_BUFFER_PERSISTENT (0x04) 2029de3c85cSMatt Jacob #define MPI_IOCINIT_FLAGS_REPLY_FIFO_HOST_SIGNAL (0x02) 2039b631363SMatt Jacob #define MPI_IOCINIT_FLAGS_DISCARD_FW_IMAGE (0x01) 2049b631363SMatt Jacob 2059de3c85cSMatt Jacob /* MsgVersion */ 2069de3c85cSMatt Jacob #define MPI_IOCINIT_MSGVERSION_MAJOR_MASK (0xFF00) 2079de3c85cSMatt Jacob #define MPI_IOCINIT_MSGVERSION_MAJOR_SHIFT (8) 2089de3c85cSMatt Jacob #define MPI_IOCINIT_MSGVERSION_MINOR_MASK (0x00FF) 2099de3c85cSMatt Jacob #define MPI_IOCINIT_MSGVERSION_MINOR_SHIFT (0) 2109de3c85cSMatt Jacob 2119de3c85cSMatt Jacob /* HeaderVersion */ 2129de3c85cSMatt Jacob #define MPI_IOCINIT_HEADERVERSION_UNIT_MASK (0xFF00) 2139de3c85cSMatt Jacob #define MPI_IOCINIT_HEADERVERSION_UNIT_SHIFT (8) 2149de3c85cSMatt Jacob #define MPI_IOCINIT_HEADERVERSION_DEV_MASK (0x00FF) 2159de3c85cSMatt Jacob #define MPI_IOCINIT_HEADERVERSION_DEV_SHIFT (0) 2169de3c85cSMatt Jacob 2179b631363SMatt Jacob typedef struct _MSG_IOC_INIT_REPLY 2189b631363SMatt Jacob { 2199b631363SMatt Jacob U8 WhoInit; /* 00h */ 2209b631363SMatt Jacob U8 Reserved; /* 01h */ 2219b631363SMatt Jacob U8 MsgLength; /* 02h */ 2229b631363SMatt Jacob U8 Function; /* 03h */ 2239b631363SMatt Jacob U8 Flags; /* 04h */ 2249b631363SMatt Jacob U8 MaxDevices; /* 05h */ 2259b631363SMatt Jacob U8 MaxBuses; /* 06h */ 2269b631363SMatt Jacob U8 MsgFlags; /* 07h */ 2279b631363SMatt Jacob U32 MsgContext; /* 08h */ 2289b631363SMatt Jacob U16 Reserved2; /* 0Ch */ 2299b631363SMatt Jacob U16 IOCStatus; /* 0Eh */ 2309b631363SMatt Jacob U32 IOCLogInfo; /* 10h */ 2319b631363SMatt Jacob } MSG_IOC_INIT_REPLY, MPI_POINTER PTR_MSG_IOC_INIT_REPLY, 2329b631363SMatt Jacob IOCInitReply_t, MPI_POINTER pIOCInitReply_t; 2339b631363SMatt Jacob 2349b631363SMatt Jacob /****************************************************************************/ 2359b631363SMatt Jacob /* IOC Facts message */ 2369b631363SMatt Jacob /****************************************************************************/ 2379b631363SMatt Jacob 2389b631363SMatt Jacob typedef struct _MSG_IOC_FACTS 2399b631363SMatt Jacob { 2409b631363SMatt Jacob U8 Reserved[2]; /* 00h */ 2419b631363SMatt Jacob U8 ChainOffset; /* 01h */ 2429b631363SMatt Jacob U8 Function; /* 02h */ 2439b631363SMatt Jacob U8 Reserved1[3]; /* 03h */ 2449b631363SMatt Jacob U8 MsgFlags; /* 04h */ 2459b631363SMatt Jacob U32 MsgContext; /* 08h */ 2469b631363SMatt Jacob } MSG_IOC_FACTS, MPI_POINTER PTR_IOC_FACTS, 2479b631363SMatt Jacob IOCFacts_t, MPI_POINTER pIOCFacts_t; 2489b631363SMatt Jacob 2499b631363SMatt Jacob typedef struct _MPI_FW_VERSION_STRUCT 2509b631363SMatt Jacob { 2519b631363SMatt Jacob U8 Dev; /* 00h */ 2529b631363SMatt Jacob U8 Unit; /* 01h */ 2539b631363SMatt Jacob U8 Minor; /* 02h */ 2549b631363SMatt Jacob U8 Major; /* 03h */ 2559b631363SMatt Jacob } MPI_FW_VERSION_STRUCT; 2569b631363SMatt Jacob 2579b631363SMatt Jacob typedef union _MPI_FW_VERSION 2589b631363SMatt Jacob { 2599b631363SMatt Jacob MPI_FW_VERSION_STRUCT Struct; 2609b631363SMatt Jacob U32 Word; 2619b631363SMatt Jacob } MPI_FW_VERSION; 2629b631363SMatt Jacob 2639b631363SMatt Jacob /* IOC Facts Reply */ 2649b631363SMatt Jacob typedef struct _MSG_IOC_FACTS_REPLY 2659b631363SMatt Jacob { 2669b631363SMatt Jacob U16 MsgVersion; /* 00h */ 2679b631363SMatt Jacob U8 MsgLength; /* 02h */ 2689b631363SMatt Jacob U8 Function; /* 03h */ 2697fed69eeSMatt Jacob U16 HeaderVersion; /* 04h */ 2709b631363SMatt Jacob U8 IOCNumber; /* 06h */ 2719b631363SMatt Jacob U8 MsgFlags; /* 07h */ 2729b631363SMatt Jacob U32 MsgContext; /* 08h */ 2739b631363SMatt Jacob U16 IOCExceptions; /* 0Ch */ 2749b631363SMatt Jacob U16 IOCStatus; /* 0Eh */ 2759b631363SMatt Jacob U32 IOCLogInfo; /* 10h */ 2769b631363SMatt Jacob U8 MaxChainDepth; /* 14h */ 2779b631363SMatt Jacob U8 WhoInit; /* 15h */ 2789b631363SMatt Jacob U8 BlockSize; /* 16h */ 2799b631363SMatt Jacob U8 Flags; /* 17h */ 2809b631363SMatt Jacob U16 ReplyQueueDepth; /* 18h */ 2819b631363SMatt Jacob U16 RequestFrameSize; /* 1Ah */ 2829b631363SMatt Jacob U16 Reserved_0101_FWVersion; /* 1Ch */ /* obsolete 16-bit FWVersion */ 2839b631363SMatt Jacob U16 ProductID; /* 1Eh */ 2849b631363SMatt Jacob U32 CurrentHostMfaHighAddr; /* 20h */ 2859b631363SMatt Jacob U16 GlobalCredits; /* 24h */ 2869b631363SMatt Jacob U8 NumberOfPorts; /* 26h */ 2879b631363SMatt Jacob U8 EventState; /* 27h */ 2889b631363SMatt Jacob U32 CurrentSenseBufferHighAddr; /* 28h */ 2899b631363SMatt Jacob U16 CurReplyFrameSize; /* 2Ch */ 2909b631363SMatt Jacob U8 MaxDevices; /* 2Eh */ 2919b631363SMatt Jacob U8 MaxBuses; /* 2Fh */ 2929b631363SMatt Jacob U32 FWImageSize; /* 30h */ 2939de3c85cSMatt Jacob U32 IOCCapabilities; /* 34h */ 2949b631363SMatt Jacob MPI_FW_VERSION FWVersion; /* 38h */ 2959de3c85cSMatt Jacob U16 HighPriorityQueueDepth; /* 3Ch */ 2969de3c85cSMatt Jacob U16 Reserved2; /* 3Eh */ 2979de3c85cSMatt Jacob SGE_SIMPLE_UNION HostPageBufferSGE; /* 40h */ 2989de3c85cSMatt Jacob U32 ReplyFifoHostSignalingAddr; /* 4Ch */ 2999b631363SMatt Jacob } MSG_IOC_FACTS_REPLY, MPI_POINTER PTR_MSG_IOC_FACTS_REPLY, 3009b631363SMatt Jacob IOCFactsReply_t, MPI_POINTER pIOCFactsReply_t; 3019b631363SMatt Jacob 3029b631363SMatt Jacob #define MPI_IOCFACTS_MSGVERSION_MAJOR_MASK (0xFF00) 3039de3c85cSMatt Jacob #define MPI_IOCFACTS_MSGVERSION_MAJOR_SHIFT (8) 3049b631363SMatt Jacob #define MPI_IOCFACTS_MSGVERSION_MINOR_MASK (0x00FF) 3059de3c85cSMatt Jacob #define MPI_IOCFACTS_MSGVERSION_MINOR_SHIFT (0) 3069b631363SMatt Jacob 3079de3c85cSMatt Jacob #define MPI_IOCFACTS_HDRVERSION_UNIT_MASK (0xFF00) 3089de3c85cSMatt Jacob #define MPI_IOCFACTS_HDRVERSION_UNIT_SHIFT (8) 3099de3c85cSMatt Jacob #define MPI_IOCFACTS_HDRVERSION_DEV_MASK (0x00FF) 3109de3c85cSMatt Jacob #define MPI_IOCFACTS_HDRVERSION_DEV_SHIFT (0) 3117fed69eeSMatt Jacob 3129b631363SMatt Jacob #define MPI_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL (0x0001) 3137fed69eeSMatt Jacob #define MPI_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID (0x0002) 3149de3c85cSMatt Jacob #define MPI_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL (0x0004) 3159de3c85cSMatt Jacob #define MPI_IOCFACTS_EXCEPT_PERSISTENT_TABLE_FULL (0x0008) 31662ae194dSScott Long #define MPI_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED (0x0010) 3179b631363SMatt Jacob 3189b631363SMatt Jacob #define MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT (0x01) 3199de3c85cSMatt Jacob #define MPI_IOCFACTS_FLAGS_REPLY_FIFO_HOST_SIGNAL (0x02) 3209de3c85cSMatt Jacob #define MPI_IOCFACTS_FLAGS_HOST_PAGE_BUFFER_PERSISTENT (0x04) 3219b631363SMatt Jacob 3229b631363SMatt Jacob #define MPI_IOCFACTS_EVENTSTATE_DISABLED (0x00) 3239b631363SMatt Jacob #define MPI_IOCFACTS_EVENTSTATE_ENABLED (0x01) 3249b631363SMatt Jacob 3259de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q (0x00000001) 3269de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_REPLY_HOST_SIGNAL (0x00000002) 3279de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_QUEUE_FULL_HANDLING (0x00000004) 3289de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER (0x00000008) 3299de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER (0x00000010) 3309de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_EXTENDED_BUFFER (0x00000020) 3319de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_EEDP (0x00000040) 3329de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_BIDIRECTIONAL (0x00000080) 3339de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_MULTICAST (0x00000100) 3349de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_SCSIIO32 (0x00000200) 3359de3c85cSMatt Jacob #define MPI_IOCFACTS_CAPABILITY_NO_SCSIIO16 (0x00000400) 33662ae194dSScott Long #define MPI_IOCFACTS_CAPABILITY_TLR (0x00000800) 3379b631363SMatt Jacob 3389b631363SMatt Jacob /***************************************************************************** 3399b631363SMatt Jacob * 3409b631363SMatt Jacob * P o r t M e s s a g e s 3419b631363SMatt Jacob * 3429b631363SMatt Jacob *****************************************************************************/ 3439b631363SMatt Jacob 3449b631363SMatt Jacob /****************************************************************************/ 3459b631363SMatt Jacob /* Port Facts message and Reply */ 3469b631363SMatt Jacob /****************************************************************************/ 3479b631363SMatt Jacob 3489b631363SMatt Jacob typedef struct _MSG_PORT_FACTS 3499b631363SMatt Jacob { 3509b631363SMatt Jacob U8 Reserved[2]; /* 00h */ 3519b631363SMatt Jacob U8 ChainOffset; /* 02h */ 3529b631363SMatt Jacob U8 Function; /* 03h */ 3539b631363SMatt Jacob U8 Reserved1[2]; /* 04h */ 3549b631363SMatt Jacob U8 PortNumber; /* 06h */ 3559b631363SMatt Jacob U8 MsgFlags; /* 07h */ 3569b631363SMatt Jacob U32 MsgContext; /* 08h */ 3579b631363SMatt Jacob } MSG_PORT_FACTS, MPI_POINTER PTR_MSG_PORT_FACTS, 3589b631363SMatt Jacob PortFacts_t, MPI_POINTER pPortFacts_t; 3599b631363SMatt Jacob 3609b631363SMatt Jacob typedef struct _MSG_PORT_FACTS_REPLY 3619b631363SMatt Jacob { 3629b631363SMatt Jacob U16 Reserved; /* 00h */ 3639b631363SMatt Jacob U8 MsgLength; /* 02h */ 3649b631363SMatt Jacob U8 Function; /* 03h */ 3659b631363SMatt Jacob U16 Reserved1; /* 04h */ 3669b631363SMatt Jacob U8 PortNumber; /* 06h */ 3679b631363SMatt Jacob U8 MsgFlags; /* 07h */ 3689b631363SMatt Jacob U32 MsgContext; /* 08h */ 3699b631363SMatt Jacob U16 Reserved2; /* 0Ch */ 3709b631363SMatt Jacob U16 IOCStatus; /* 0Eh */ 3719b631363SMatt Jacob U32 IOCLogInfo; /* 10h */ 3729b631363SMatt Jacob U8 Reserved3; /* 14h */ 3739b631363SMatt Jacob U8 PortType; /* 15h */ 3749b631363SMatt Jacob U16 MaxDevices; /* 16h */ 3759b631363SMatt Jacob U16 PortSCSIID; /* 18h */ 3769b631363SMatt Jacob U16 ProtocolFlags; /* 1Ah */ 3779b631363SMatt Jacob U16 MaxPostedCmdBuffers; /* 1Ch */ 3789b631363SMatt Jacob U16 MaxPersistentIDs; /* 1Eh */ 3799b631363SMatt Jacob U16 MaxLanBuckets; /* 20h */ 38062ae194dSScott Long U8 MaxInitiators; /* 22h */ 38162ae194dSScott Long U8 Reserved4; /* 23h */ 3829b631363SMatt Jacob U32 Reserved5; /* 24h */ 3839b631363SMatt Jacob } MSG_PORT_FACTS_REPLY, MPI_POINTER PTR_MSG_PORT_FACTS_REPLY, 3849b631363SMatt Jacob PortFactsReply_t, MPI_POINTER pPortFactsReply_t; 3859b631363SMatt Jacob 3869b631363SMatt Jacob /* PortTypes values */ 3879b631363SMatt Jacob 3889b631363SMatt Jacob #define MPI_PORTFACTS_PORTTYPE_INACTIVE (0x00) 3899b631363SMatt Jacob #define MPI_PORTFACTS_PORTTYPE_SCSI (0x01) 3909b631363SMatt Jacob #define MPI_PORTFACTS_PORTTYPE_FC (0x10) 3919de3c85cSMatt Jacob #define MPI_PORTFACTS_PORTTYPE_ISCSI (0x20) 3929de3c85cSMatt Jacob #define MPI_PORTFACTS_PORTTYPE_SAS (0x30) 3939b631363SMatt Jacob 3949b631363SMatt Jacob /* ProtocolFlags values */ 3959b631363SMatt Jacob 3969b631363SMatt Jacob #define MPI_PORTFACTS_PROTOCOL_LOGBUSADDR (0x01) 3979b631363SMatt Jacob #define MPI_PORTFACTS_PROTOCOL_LAN (0x02) 3989b631363SMatt Jacob #define MPI_PORTFACTS_PROTOCOL_TARGET (0x04) 3999b631363SMatt Jacob #define MPI_PORTFACTS_PROTOCOL_INITIATOR (0x08) 4009b631363SMatt Jacob 4019b631363SMatt Jacob /****************************************************************************/ 4029b631363SMatt Jacob /* Port Enable Message */ 4039b631363SMatt Jacob /****************************************************************************/ 4049b631363SMatt Jacob 4059b631363SMatt Jacob typedef struct _MSG_PORT_ENABLE 4069b631363SMatt Jacob { 4079b631363SMatt Jacob U8 Reserved[2]; /* 00h */ 4089b631363SMatt Jacob U8 ChainOffset; /* 02h */ 4099b631363SMatt Jacob U8 Function; /* 03h */ 4109b631363SMatt Jacob U8 Reserved1[2]; /* 04h */ 4119b631363SMatt Jacob U8 PortNumber; /* 06h */ 4129b631363SMatt Jacob U8 MsgFlags; /* 07h */ 4139b631363SMatt Jacob U32 MsgContext; /* 08h */ 4149b631363SMatt Jacob } MSG_PORT_ENABLE, MPI_POINTER PTR_MSG_PORT_ENABLE, 4159b631363SMatt Jacob PortEnable_t, MPI_POINTER pPortEnable_t; 4169b631363SMatt Jacob 4179b631363SMatt Jacob typedef struct _MSG_PORT_ENABLE_REPLY 4189b631363SMatt Jacob { 4199b631363SMatt Jacob U8 Reserved[2]; /* 00h */ 4209b631363SMatt Jacob U8 MsgLength; /* 02h */ 4219b631363SMatt Jacob U8 Function; /* 03h */ 4229b631363SMatt Jacob U8 Reserved1[2]; /* 04h */ 4239b631363SMatt Jacob U8 PortNumber; /* 05h */ 4249b631363SMatt Jacob U8 MsgFlags; /* 07h */ 4259b631363SMatt Jacob U32 MsgContext; /* 08h */ 4269b631363SMatt Jacob U16 Reserved2; /* 0Ch */ 4279b631363SMatt Jacob U16 IOCStatus; /* 0Eh */ 4289b631363SMatt Jacob U32 IOCLogInfo; /* 10h */ 4299b631363SMatt Jacob } MSG_PORT_ENABLE_REPLY, MPI_POINTER PTR_MSG_PORT_ENABLE_REPLY, 4309b631363SMatt Jacob PortEnableReply_t, MPI_POINTER pPortEnableReply_t; 4319b631363SMatt Jacob 4329b631363SMatt Jacob /***************************************************************************** 4339b631363SMatt Jacob * 4349b631363SMatt Jacob * E v e n t M e s s a g e s 4359b631363SMatt Jacob * 4369b631363SMatt Jacob *****************************************************************************/ 4379b631363SMatt Jacob 4389b631363SMatt Jacob /****************************************************************************/ 4399b631363SMatt Jacob /* Event Notification messages */ 4409b631363SMatt Jacob /****************************************************************************/ 4419b631363SMatt Jacob 4429b631363SMatt Jacob typedef struct _MSG_EVENT_NOTIFY 4439b631363SMatt Jacob { 4449b631363SMatt Jacob U8 Switch; /* 00h */ 4459b631363SMatt Jacob U8 Reserved; /* 01h */ 4469b631363SMatt Jacob U8 ChainOffset; /* 02h */ 4479b631363SMatt Jacob U8 Function; /* 03h */ 4489b631363SMatt Jacob U8 Reserved1[3]; /* 04h */ 4499b631363SMatt Jacob U8 MsgFlags; /* 07h */ 4509b631363SMatt Jacob U32 MsgContext; /* 08h */ 4519b631363SMatt Jacob } MSG_EVENT_NOTIFY, MPI_POINTER PTR_MSG_EVENT_NOTIFY, 4529b631363SMatt Jacob EventNotification_t, MPI_POINTER pEventNotification_t; 4539b631363SMatt Jacob 4549b631363SMatt Jacob /* Event Notification Reply */ 4559b631363SMatt Jacob 4569b631363SMatt Jacob typedef struct _MSG_EVENT_NOTIFY_REPLY 4579b631363SMatt Jacob { 4589b631363SMatt Jacob U16 EventDataLength; /* 00h */ 4599b631363SMatt Jacob U8 MsgLength; /* 02h */ 4609b631363SMatt Jacob U8 Function; /* 03h */ 4619b631363SMatt Jacob U8 Reserved1[2]; /* 04h */ 4629b631363SMatt Jacob U8 AckRequired; /* 06h */ 4639b631363SMatt Jacob U8 MsgFlags; /* 07h */ 4649b631363SMatt Jacob U32 MsgContext; /* 08h */ 4659b631363SMatt Jacob U8 Reserved2[2]; /* 0Ch */ 4669b631363SMatt Jacob U16 IOCStatus; /* 0Eh */ 4679b631363SMatt Jacob U32 IOCLogInfo; /* 10h */ 4689b631363SMatt Jacob U32 Event; /* 14h */ 4699b631363SMatt Jacob U32 EventContext; /* 18h */ 4709b631363SMatt Jacob U32 Data[1]; /* 1Ch */ 4719b631363SMatt Jacob } MSG_EVENT_NOTIFY_REPLY, MPI_POINTER PTR_MSG_EVENT_NOTIFY_REPLY, 4729b631363SMatt Jacob EventNotificationReply_t, MPI_POINTER pEventNotificationReply_t; 4739b631363SMatt Jacob 4749b631363SMatt Jacob /* Event Acknowledge */ 4759b631363SMatt Jacob 4769b631363SMatt Jacob typedef struct _MSG_EVENT_ACK 4779b631363SMatt Jacob { 4789b631363SMatt Jacob U8 Reserved[2]; /* 00h */ 4799b631363SMatt Jacob U8 ChainOffset; /* 02h */ 4809b631363SMatt Jacob U8 Function; /* 03h */ 4819b631363SMatt Jacob U8 Reserved1[3]; /* 04h */ 4829b631363SMatt Jacob U8 MsgFlags; /* 07h */ 4839b631363SMatt Jacob U32 MsgContext; /* 08h */ 4849b631363SMatt Jacob U32 Event; /* 0Ch */ 4859b631363SMatt Jacob U32 EventContext; /* 10h */ 4869b631363SMatt Jacob } MSG_EVENT_ACK, MPI_POINTER PTR_MSG_EVENT_ACK, 4879b631363SMatt Jacob EventAck_t, MPI_POINTER pEventAck_t; 4889b631363SMatt Jacob 4899b631363SMatt Jacob typedef struct _MSG_EVENT_ACK_REPLY 4909b631363SMatt Jacob { 4919b631363SMatt Jacob U8 Reserved[2]; /* 00h */ 4929b631363SMatt Jacob U8 MsgLength; /* 02h */ 4939b631363SMatt Jacob U8 Function; /* 03h */ 4949b631363SMatt Jacob U8 Reserved1[3]; /* 04h */ 4959b631363SMatt Jacob U8 MsgFlags; /* 07h */ 4969b631363SMatt Jacob U32 MsgContext; /* 08h */ 4979b631363SMatt Jacob U16 Reserved2; /* 0Ch */ 4989b631363SMatt Jacob U16 IOCStatus; /* 0Eh */ 4999b631363SMatt Jacob U32 IOCLogInfo; /* 10h */ 5009b631363SMatt Jacob } MSG_EVENT_ACK_REPLY, MPI_POINTER PTR_MSG_EVENT_ACK_REPLY, 5019b631363SMatt Jacob EventAckReply_t, MPI_POINTER pEventAckReply_t; 5029b631363SMatt Jacob 5039b631363SMatt Jacob /* Switch */ 5049b631363SMatt Jacob 5059b631363SMatt Jacob #define MPI_EVENT_NOTIFICATION_SWITCH_OFF (0x00) 5069b631363SMatt Jacob #define MPI_EVENT_NOTIFICATION_SWITCH_ON (0x01) 5079b631363SMatt Jacob 5089b631363SMatt Jacob /* Event */ 5099b631363SMatt Jacob 5109b631363SMatt Jacob #define MPI_EVENT_NONE (0x00000000) 5119b631363SMatt Jacob #define MPI_EVENT_LOG_DATA (0x00000001) 5129b631363SMatt Jacob #define MPI_EVENT_STATE_CHANGE (0x00000002) 5139b631363SMatt Jacob #define MPI_EVENT_UNIT_ATTENTION (0x00000003) 5149b631363SMatt Jacob #define MPI_EVENT_IOC_BUS_RESET (0x00000004) 5159b631363SMatt Jacob #define MPI_EVENT_EXT_BUS_RESET (0x00000005) 5169b631363SMatt Jacob #define MPI_EVENT_RESCAN (0x00000006) 5179b631363SMatt Jacob #define MPI_EVENT_LINK_STATUS_CHANGE (0x00000007) 5189b631363SMatt Jacob #define MPI_EVENT_LOOP_STATE_CHANGE (0x00000008) 5199b631363SMatt Jacob #define MPI_EVENT_LOGOUT (0x00000009) 5209b631363SMatt Jacob #define MPI_EVENT_EVENT_CHANGE (0x0000000A) 5219b631363SMatt Jacob #define MPI_EVENT_INTEGRATED_RAID (0x0000000B) 5229b631363SMatt Jacob #define MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE (0x0000000C) 5239b631363SMatt Jacob #define MPI_EVENT_ON_BUS_TIMER_EXPIRED (0x0000000D) 5249de3c85cSMatt Jacob #define MPI_EVENT_QUEUE_FULL (0x0000000E) 5259de3c85cSMatt Jacob #define MPI_EVENT_SAS_DEVICE_STATUS_CHANGE (0x0000000F) 5269de3c85cSMatt Jacob #define MPI_EVENT_SAS_SES (0x00000010) 5279de3c85cSMatt Jacob #define MPI_EVENT_PERSISTENT_TABLE_FULL (0x00000011) 5289de3c85cSMatt Jacob #define MPI_EVENT_SAS_PHY_LINK_STATUS (0x00000012) 5299de3c85cSMatt Jacob #define MPI_EVENT_SAS_DISCOVERY_ERROR (0x00000013) 5300b80d21bSMatt Jacob #define MPI_EVENT_IR_RESYNC_UPDATE (0x00000014) 5310b80d21bSMatt Jacob #define MPI_EVENT_IR2 (0x00000015) 5320b80d21bSMatt Jacob #define MPI_EVENT_SAS_DISCOVERY (0x00000016) 53362ae194dSScott Long #define MPI_EVENT_SAS_BROADCAST_PRIMITIVE (0x00000017) 53462ae194dSScott Long #define MPI_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE (0x00000018) 53562ae194dSScott Long #define MPI_EVENT_SAS_INIT_TABLE_OVERFLOW (0x00000019) 53662ae194dSScott Long #define MPI_EVENT_SAS_SMP_ERROR (0x0000001A) 53762ae194dSScott Long #define MPI_EVENT_SAS_EXPANDER_STATUS_CHANGE (0x0000001B) 5380b80d21bSMatt Jacob #define MPI_EVENT_LOG_ENTRY_ADDED (0x00000021) 5399b631363SMatt Jacob 5409b631363SMatt Jacob /* AckRequired field values */ 5419b631363SMatt Jacob 5429b631363SMatt Jacob #define MPI_EVENT_NOTIFICATION_ACK_NOT_REQUIRED (0x00) 5439b631363SMatt Jacob #define MPI_EVENT_NOTIFICATION_ACK_REQUIRED (0x01) 5449b631363SMatt Jacob 5459b631363SMatt Jacob /* EventChange Event data */ 5469b631363SMatt Jacob 5479b631363SMatt Jacob typedef struct _EVENT_DATA_EVENT_CHANGE 5489b631363SMatt Jacob { 5499b631363SMatt Jacob U8 EventState; /* 00h */ 5509b631363SMatt Jacob U8 Reserved; /* 01h */ 5519b631363SMatt Jacob U16 Reserved1; /* 02h */ 5529b631363SMatt Jacob } EVENT_DATA_EVENT_CHANGE, MPI_POINTER PTR_EVENT_DATA_EVENT_CHANGE, 5539b631363SMatt Jacob EventDataEventChange_t, MPI_POINTER pEventDataEventChange_t; 5549b631363SMatt Jacob 5550b80d21bSMatt Jacob /* LogEntryAdded Event data */ 5560b80d21bSMatt Jacob 5570b80d21bSMatt Jacob /* this structure matches MPI_LOG_0_ENTRY in mpi_cnfg.h */ 5580b80d21bSMatt Jacob #define MPI_EVENT_DATA_LOG_ENTRY_DATA_LENGTH (0x1C) 5590b80d21bSMatt Jacob typedef struct _EVENT_DATA_LOG_ENTRY 5600b80d21bSMatt Jacob { 5610b80d21bSMatt Jacob U32 TimeStamp; /* 00h */ 5620b80d21bSMatt Jacob U32 Reserved1; /* 04h */ 5630b80d21bSMatt Jacob U16 LogSequence; /* 08h */ 5640b80d21bSMatt Jacob U16 LogEntryQualifier; /* 0Ah */ 5650b80d21bSMatt Jacob U8 LogData[MPI_EVENT_DATA_LOG_ENTRY_DATA_LENGTH]; /* 0Ch */ 5660b80d21bSMatt Jacob } EVENT_DATA_LOG_ENTRY, MPI_POINTER PTR_EVENT_DATA_LOG_ENTRY, 5670b80d21bSMatt Jacob MpiEventDataLogEntry_t, MPI_POINTER pMpiEventDataLogEntry_t; 5680b80d21bSMatt Jacob 5690b80d21bSMatt Jacob typedef struct _EVENT_DATA_LOG_ENTRY_ADDED 5700b80d21bSMatt Jacob { 5710b80d21bSMatt Jacob U16 LogSequence; /* 00h */ 5720b80d21bSMatt Jacob U16 Reserved1; /* 02h */ 5730b80d21bSMatt Jacob U32 Reserved2; /* 04h */ 5740b80d21bSMatt Jacob EVENT_DATA_LOG_ENTRY LogEntry; /* 08h */ 5750b80d21bSMatt Jacob } EVENT_DATA_LOG_ENTRY_ADDED, MPI_POINTER PTR_EVENT_DATA_LOG_ENTRY_ADDED, 5760b80d21bSMatt Jacob MpiEventDataLogEntryAdded_t, MPI_POINTER pMpiEventDataLogEntryAdded_t; 5770b80d21bSMatt Jacob 5789b631363SMatt Jacob /* SCSI Event data for Port, Bus and Device forms */ 5799b631363SMatt Jacob 5809b631363SMatt Jacob typedef struct _EVENT_DATA_SCSI 5819b631363SMatt Jacob { 5829b631363SMatt Jacob U8 TargetID; /* 00h */ 5839b631363SMatt Jacob U8 BusPort; /* 01h */ 5849b631363SMatt Jacob U16 Reserved; /* 02h */ 5859b631363SMatt Jacob } EVENT_DATA_SCSI, MPI_POINTER PTR_EVENT_DATA_SCSI, 5869b631363SMatt Jacob EventDataScsi_t, MPI_POINTER pEventDataScsi_t; 5879b631363SMatt Jacob 5889b631363SMatt Jacob /* SCSI Device Status Change Event data */ 5899b631363SMatt Jacob 5909b631363SMatt Jacob typedef struct _EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE 5919b631363SMatt Jacob { 5929b631363SMatt Jacob U8 TargetID; /* 00h */ 5939b631363SMatt Jacob U8 Bus; /* 01h */ 5949b631363SMatt Jacob U8 ReasonCode; /* 02h */ 5959b631363SMatt Jacob U8 LUN; /* 03h */ 5969b631363SMatt Jacob U8 ASC; /* 04h */ 5979b631363SMatt Jacob U8 ASCQ; /* 05h */ 5989b631363SMatt Jacob U16 Reserved; /* 06h */ 5999b631363SMatt Jacob } EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE, 6009b631363SMatt Jacob MPI_POINTER PTR_EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE, 6019b631363SMatt Jacob MpiEventDataScsiDeviceStatusChange_t, 6029b631363SMatt Jacob MPI_POINTER pMpiEventDataScsiDeviceStatusChange_t; 6039b631363SMatt Jacob 6049b631363SMatt Jacob /* MPI SCSI Device Status Change Event data ReasonCode values */ 6059b631363SMatt Jacob #define MPI_EVENT_SCSI_DEV_STAT_RC_ADDED (0x03) 6069b631363SMatt Jacob #define MPI_EVENT_SCSI_DEV_STAT_RC_NOT_RESPONDING (0x04) 6079b631363SMatt Jacob #define MPI_EVENT_SCSI_DEV_STAT_RC_SMART_DATA (0x05) 6089b631363SMatt Jacob 6099de3c85cSMatt Jacob /* SAS Device Status Change Event data */ 6109de3c85cSMatt Jacob 6119de3c85cSMatt Jacob typedef struct _EVENT_DATA_SAS_DEVICE_STATUS_CHANGE 6129de3c85cSMatt Jacob { 6139de3c85cSMatt Jacob U8 TargetID; /* 00h */ 6149de3c85cSMatt Jacob U8 Bus; /* 01h */ 6159de3c85cSMatt Jacob U8 ReasonCode; /* 02h */ 6169de3c85cSMatt Jacob U8 Reserved; /* 03h */ 6179de3c85cSMatt Jacob U8 ASC; /* 04h */ 6189de3c85cSMatt Jacob U8 ASCQ; /* 05h */ 6199de3c85cSMatt Jacob U16 DevHandle; /* 06h */ 6209de3c85cSMatt Jacob U32 DeviceInfo; /* 08h */ 6219de3c85cSMatt Jacob U16 ParentDevHandle; /* 0Ch */ 6229de3c85cSMatt Jacob U8 PhyNum; /* 0Eh */ 6239de3c85cSMatt Jacob U8 Reserved1; /* 0Fh */ 6249de3c85cSMatt Jacob U64 SASAddress; /* 10h */ 62562ae194dSScott Long U8 LUN[8]; /* 18h */ 62662ae194dSScott Long U16 TaskTag; /* 20h */ 62762ae194dSScott Long U16 Reserved2; /* 22h */ 6289de3c85cSMatt Jacob } EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 6299de3c85cSMatt Jacob MPI_POINTER PTR_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE, 6309de3c85cSMatt Jacob MpiEventDataSasDeviceStatusChange_t, 6319de3c85cSMatt Jacob MPI_POINTER pMpiEventDataSasDeviceStatusChange_t; 6329de3c85cSMatt Jacob 6339de3c85cSMatt Jacob /* MPI SAS Device Status Change Event data ReasonCode values */ 6349de3c85cSMatt Jacob #define MPI_EVENT_SAS_DEV_STAT_RC_ADDED (0x03) 6359de3c85cSMatt Jacob #define MPI_EVENT_SAS_DEV_STAT_RC_NOT_RESPONDING (0x04) 6369de3c85cSMatt Jacob #define MPI_EVENT_SAS_DEV_STAT_RC_SMART_DATA (0x05) 6379de3c85cSMatt Jacob #define MPI_EVENT_SAS_DEV_STAT_RC_NO_PERSIST_ADDED (0x06) 6389de3c85cSMatt Jacob #define MPI_EVENT_SAS_DEV_STAT_RC_UNSUPPORTED (0x07) 6390b80d21bSMatt Jacob #define MPI_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08) 64062ae194dSScott Long #define MPI_EVENT_SAS_DEV_STAT_RC_TASK_ABORT_INTERNAL (0x09) 64162ae194dSScott Long #define MPI_EVENT_SAS_DEV_STAT_RC_ABORT_TASK_SET_INTERNAL (0x0A) 64262ae194dSScott Long #define MPI_EVENT_SAS_DEV_STAT_RC_CLEAR_TASK_SET_INTERNAL (0x0B) 64362ae194dSScott Long #define MPI_EVENT_SAS_DEV_STAT_RC_QUERY_TASK_INTERNAL (0x0C) 64462ae194dSScott Long #define MPI_EVENT_SAS_DEV_STAT_RC_ASYNC_NOTIFICATION (0x0D) 6451bf5a6cfSMarius Strobl #define MPI_EVENT_SAS_DEV_STAT_RC_CMPL_INTERNAL_DEV_RESET (0x0E) 6461bf5a6cfSMarius Strobl #define MPI_EVENT_SAS_DEV_STAT_RC_CMPL_TASK_ABORT_INTERNAL (0x0F) 6479de3c85cSMatt Jacob 6489de3c85cSMatt Jacob /* SCSI Event data for Queue Full event */ 6499de3c85cSMatt Jacob 6509de3c85cSMatt Jacob typedef struct _EVENT_DATA_QUEUE_FULL 6519de3c85cSMatt Jacob { 6529de3c85cSMatt Jacob U8 TargetID; /* 00h */ 6539de3c85cSMatt Jacob U8 Bus; /* 01h */ 6549de3c85cSMatt Jacob U16 CurrentDepth; /* 02h */ 6559de3c85cSMatt Jacob } EVENT_DATA_QUEUE_FULL, MPI_POINTER PTR_EVENT_DATA_QUEUE_FULL, 6569de3c85cSMatt Jacob EventDataQueueFull_t, MPI_POINTER pEventDataQueueFull_t; 6579de3c85cSMatt Jacob 6589de3c85cSMatt Jacob /* MPI Integrated RAID Event data */ 6599de3c85cSMatt Jacob 6609de3c85cSMatt Jacob typedef struct _EVENT_DATA_RAID 6619de3c85cSMatt Jacob { 6629de3c85cSMatt Jacob U8 VolumeID; /* 00h */ 6639de3c85cSMatt Jacob U8 VolumeBus; /* 01h */ 6649de3c85cSMatt Jacob U8 ReasonCode; /* 02h */ 6659de3c85cSMatt Jacob U8 PhysDiskNum; /* 03h */ 6669de3c85cSMatt Jacob U8 ASC; /* 04h */ 6679de3c85cSMatt Jacob U8 ASCQ; /* 05h */ 6689de3c85cSMatt Jacob U16 Reserved; /* 06h */ 6699de3c85cSMatt Jacob U32 SettingsStatus; /* 08h */ 6709de3c85cSMatt Jacob } EVENT_DATA_RAID, MPI_POINTER PTR_EVENT_DATA_RAID, 6719de3c85cSMatt Jacob MpiEventDataRaid_t, MPI_POINTER pMpiEventDataRaid_t; 6729de3c85cSMatt Jacob 6739de3c85cSMatt Jacob /* MPI Integrated RAID Event data ReasonCode values */ 6749de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_VOLUME_CREATED (0x00) 6759de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_VOLUME_DELETED (0x01) 6769de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_VOLUME_SETTINGS_CHANGED (0x02) 6779de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_VOLUME_STATUS_CHANGED (0x03) 6789de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_VOLUME_PHYSDISK_CHANGED (0x04) 6799de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_PHYSDISK_CREATED (0x05) 6809de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_PHYSDISK_DELETED (0x06) 6819de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_PHYSDISK_SETTINGS_CHANGED (0x07) 6829de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_PHYSDISK_STATUS_CHANGED (0x08) 6839de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_DOMAIN_VAL_NEEDED (0x09) 6849de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_SMART_DATA (0x0A) 6859de3c85cSMatt Jacob #define MPI_EVENT_RAID_RC_REPLACE_ACTION_STARTED (0x0B) 6869de3c85cSMatt Jacob 6870b80d21bSMatt Jacob /* MPI Integrated RAID Resync Update Event data */ 6880b80d21bSMatt Jacob 6890b80d21bSMatt Jacob typedef struct _MPI_EVENT_DATA_IR_RESYNC_UPDATE 6900b80d21bSMatt Jacob { 6910b80d21bSMatt Jacob U8 VolumeID; /* 00h */ 6920b80d21bSMatt Jacob U8 VolumeBus; /* 01h */ 6930b80d21bSMatt Jacob U8 ResyncComplete; /* 02h */ 6940b80d21bSMatt Jacob U8 Reserved1; /* 03h */ 6950b80d21bSMatt Jacob U32 Reserved2; /* 04h */ 6960b80d21bSMatt Jacob } MPI_EVENT_DATA_IR_RESYNC_UPDATE, 6970b80d21bSMatt Jacob MPI_POINTER PTR_MPI_EVENT_DATA_IR_RESYNC_UPDATE, 6980b80d21bSMatt Jacob MpiEventDataIrResyncUpdate_t, MPI_POINTER pMpiEventDataIrResyncUpdate_t; 6990b80d21bSMatt Jacob 7000b80d21bSMatt Jacob /* MPI IR2 Event data */ 7010b80d21bSMatt Jacob 7020b80d21bSMatt Jacob /* MPI_LD_STATE or MPI_PD_STATE */ 7030b80d21bSMatt Jacob typedef struct _IR2_STATE_CHANGED 7040b80d21bSMatt Jacob { 7050b80d21bSMatt Jacob U16 PreviousState; /* 00h */ 7060b80d21bSMatt Jacob U16 NewState; /* 02h */ 7070b80d21bSMatt Jacob } IR2_STATE_CHANGED, MPI_POINTER PTR_IR2_STATE_CHANGED; 7080b80d21bSMatt Jacob 7090b80d21bSMatt Jacob typedef struct _IR2_PD_INFO 7100b80d21bSMatt Jacob { 7110b80d21bSMatt Jacob U16 DeviceHandle; /* 00h */ 7120b80d21bSMatt Jacob U8 TruncEnclosureHandle; /* 02h */ 7130b80d21bSMatt Jacob U8 TruncatedSlot; /* 03h */ 7140b80d21bSMatt Jacob } IR2_PD_INFO, MPI_POINTER PTR_IR2_PD_INFO; 7150b80d21bSMatt Jacob 7160b80d21bSMatt Jacob typedef union _MPI_IR2_RC_EVENT_DATA 7170b80d21bSMatt Jacob { 7180b80d21bSMatt Jacob IR2_STATE_CHANGED StateChanged; 7190b80d21bSMatt Jacob U32 Lba; 7200b80d21bSMatt Jacob IR2_PD_INFO PdInfo; 7210b80d21bSMatt Jacob } MPI_IR2_RC_EVENT_DATA, MPI_POINTER PTR_MPI_IR2_RC_EVENT_DATA; 7220b80d21bSMatt Jacob 7230b80d21bSMatt Jacob typedef struct _MPI_EVENT_DATA_IR2 7240b80d21bSMatt Jacob { 7250b80d21bSMatt Jacob U8 TargetID; /* 00h */ 7260b80d21bSMatt Jacob U8 Bus; /* 01h */ 7270b80d21bSMatt Jacob U8 ReasonCode; /* 02h */ 7280b80d21bSMatt Jacob U8 PhysDiskNum; /* 03h */ 7290b80d21bSMatt Jacob MPI_IR2_RC_EVENT_DATA IR2EventData; /* 04h */ 7300b80d21bSMatt Jacob } MPI_EVENT_DATA_IR2, MPI_POINTER PTR_MPI_EVENT_DATA_IR2, 7310b80d21bSMatt Jacob MpiEventDataIR2_t, MPI_POINTER pMpiEventDataIR2_t; 7320b80d21bSMatt Jacob 7330b80d21bSMatt Jacob /* MPI IR2 Event data ReasonCode values */ 7340b80d21bSMatt Jacob #define MPI_EVENT_IR2_RC_LD_STATE_CHANGED (0x01) 7350b80d21bSMatt Jacob #define MPI_EVENT_IR2_RC_PD_STATE_CHANGED (0x02) 7360b80d21bSMatt Jacob #define MPI_EVENT_IR2_RC_BAD_BLOCK_TABLE_FULL (0x03) 7370b80d21bSMatt Jacob #define MPI_EVENT_IR2_RC_PD_INSERTED (0x04) 7380b80d21bSMatt Jacob #define MPI_EVENT_IR2_RC_PD_REMOVED (0x05) 7390b80d21bSMatt Jacob #define MPI_EVENT_IR2_RC_FOREIGN_CFG_DETECTED (0x06) 7400b80d21bSMatt Jacob #define MPI_EVENT_IR2_RC_REBUILD_MEDIUM_ERROR (0x07) 7411bf5a6cfSMarius Strobl #define MPI_EVENT_IR2_RC_DUAL_PORT_ADDED (0x08) 7421bf5a6cfSMarius Strobl #define MPI_EVENT_IR2_RC_DUAL_PORT_REMOVED (0x09) 7430b80d21bSMatt Jacob 7440b80d21bSMatt Jacob /* defines for logical disk states */ 7450b80d21bSMatt Jacob #define MPI_LD_STATE_OPTIMAL (0x00) 7460b80d21bSMatt Jacob #define MPI_LD_STATE_DEGRADED (0x01) 7470b80d21bSMatt Jacob #define MPI_LD_STATE_FAILED (0x02) 7480b80d21bSMatt Jacob #define MPI_LD_STATE_MISSING (0x03) 7490b80d21bSMatt Jacob #define MPI_LD_STATE_OFFLINE (0x04) 7500b80d21bSMatt Jacob 7510b80d21bSMatt Jacob /* defines for physical disk states */ 7520b80d21bSMatt Jacob #define MPI_PD_STATE_ONLINE (0x00) 7530b80d21bSMatt Jacob #define MPI_PD_STATE_MISSING (0x01) 7540b80d21bSMatt Jacob #define MPI_PD_STATE_NOT_COMPATIBLE (0x02) 7550b80d21bSMatt Jacob #define MPI_PD_STATE_FAILED (0x03) 7560b80d21bSMatt Jacob #define MPI_PD_STATE_INITIALIZING (0x04) 7570b80d21bSMatt Jacob #define MPI_PD_STATE_OFFLINE_AT_HOST_REQUEST (0x05) 7580b80d21bSMatt Jacob #define MPI_PD_STATE_FAILED_AT_HOST_REQUEST (0x06) 7590b80d21bSMatt Jacob #define MPI_PD_STATE_OFFLINE_FOR_ANOTHER_REASON (0xFF) 7600b80d21bSMatt Jacob 7619b631363SMatt Jacob /* MPI Link Status Change Event data */ 7629b631363SMatt Jacob 7639b631363SMatt Jacob typedef struct _EVENT_DATA_LINK_STATUS 7649b631363SMatt Jacob { 7659b631363SMatt Jacob U8 State; /* 00h */ 7669b631363SMatt Jacob U8 Reserved; /* 01h */ 7679b631363SMatt Jacob U16 Reserved1; /* 02h */ 7689b631363SMatt Jacob U8 Reserved2; /* 04h */ 7699b631363SMatt Jacob U8 Port; /* 05h */ 7709b631363SMatt Jacob U16 Reserved3; /* 06h */ 7719b631363SMatt Jacob } EVENT_DATA_LINK_STATUS, MPI_POINTER PTR_EVENT_DATA_LINK_STATUS, 7729b631363SMatt Jacob EventDataLinkStatus_t, MPI_POINTER pEventDataLinkStatus_t; 7739b631363SMatt Jacob 7749b631363SMatt Jacob #define MPI_EVENT_LINK_STATUS_FAILURE (0x00000000) 7759b631363SMatt Jacob #define MPI_EVENT_LINK_STATUS_ACTIVE (0x00000001) 7769b631363SMatt Jacob 7779b631363SMatt Jacob /* MPI Loop State Change Event data */ 7789b631363SMatt Jacob 7799b631363SMatt Jacob typedef struct _EVENT_DATA_LOOP_STATE 7809b631363SMatt Jacob { 7819b631363SMatt Jacob U8 Character4; /* 00h */ 7829b631363SMatt Jacob U8 Character3; /* 01h */ 7839b631363SMatt Jacob U8 Type; /* 02h */ 7849b631363SMatt Jacob U8 Reserved; /* 03h */ 7859b631363SMatt Jacob U8 Reserved1; /* 04h */ 7869b631363SMatt Jacob U8 Port; /* 05h */ 7879b631363SMatt Jacob U16 Reserved2; /* 06h */ 7889b631363SMatt Jacob } EVENT_DATA_LOOP_STATE, MPI_POINTER PTR_EVENT_DATA_LOOP_STATE, 7899b631363SMatt Jacob EventDataLoopState_t, MPI_POINTER pEventDataLoopState_t; 7909b631363SMatt Jacob 7919b631363SMatt Jacob #define MPI_EVENT_LOOP_STATE_CHANGE_LIP (0x0001) 7929b631363SMatt Jacob #define MPI_EVENT_LOOP_STATE_CHANGE_LPE (0x0002) 7939b631363SMatt Jacob #define MPI_EVENT_LOOP_STATE_CHANGE_LPB (0x0003) 7949b631363SMatt Jacob 7959b631363SMatt Jacob /* MPI LOGOUT Event data */ 7969b631363SMatt Jacob 7979b631363SMatt Jacob typedef struct _EVENT_DATA_LOGOUT 7989b631363SMatt Jacob { 7999b631363SMatt Jacob U32 NPortID; /* 00h */ 8007fed69eeSMatt Jacob U8 AliasIndex; /* 04h */ 8019b631363SMatt Jacob U8 Port; /* 05h */ 8029b631363SMatt Jacob U16 Reserved1; /* 06h */ 8039b631363SMatt Jacob } EVENT_DATA_LOGOUT, MPI_POINTER PTR_EVENT_DATA_LOGOUT, 8049b631363SMatt Jacob EventDataLogout_t, MPI_POINTER pEventDataLogout_t; 8059b631363SMatt Jacob 8067fed69eeSMatt Jacob #define MPI_EVENT_LOGOUT_ALL_ALIASES (0xFF) 8077fed69eeSMatt Jacob 8089de3c85cSMatt Jacob /* SAS SES Event data */ 8097fed69eeSMatt Jacob 8109de3c85cSMatt Jacob typedef struct _EVENT_DATA_SAS_SES 8119b631363SMatt Jacob { 8129de3c85cSMatt Jacob U8 PhyNum; /* 00h */ 8139de3c85cSMatt Jacob U8 Port; /* 01h */ 8149de3c85cSMatt Jacob U8 PortWidth; /* 02h */ 8159de3c85cSMatt Jacob U8 Reserved1; /* 04h */ 8169de3c85cSMatt Jacob } EVENT_DATA_SAS_SES, MPI_POINTER PTR_EVENT_DATA_SAS_SES, 8179de3c85cSMatt Jacob MpiEventDataSasSes_t, MPI_POINTER pMpiEventDataSasSes_t; 8189b631363SMatt Jacob 81962ae194dSScott Long /* SAS Broadcast Primitive Event data */ 82062ae194dSScott Long 82162ae194dSScott Long typedef struct _EVENT_DATA_SAS_BROADCAST_PRIMITIVE 82262ae194dSScott Long { 82362ae194dSScott Long U8 PhyNum; /* 00h */ 82462ae194dSScott Long U8 Port; /* 01h */ 82562ae194dSScott Long U8 PortWidth; /* 02h */ 82662ae194dSScott Long U8 Primitive; /* 04h */ 82762ae194dSScott Long } EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 82862ae194dSScott Long MPI_POINTER PTR_EVENT_DATA_SAS_BROADCAST_PRIMITIVE, 82962ae194dSScott Long MpiEventDataSasBroadcastPrimitive_t, 83062ae194dSScott Long MPI_POINTER pMpiEventDataSasBroadcastPrimitive_t; 83162ae194dSScott Long 83262ae194dSScott Long #define MPI_EVENT_PRIMITIVE_CHANGE (0x01) 83362ae194dSScott Long #define MPI_EVENT_PRIMITIVE_EXPANDER (0x03) 83462ae194dSScott Long #define MPI_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT (0x04) 83562ae194dSScott Long #define MPI_EVENT_PRIMITIVE_RESERVED3 (0x05) 83662ae194dSScott Long #define MPI_EVENT_PRIMITIVE_RESERVED4 (0x06) 83762ae194dSScott Long #define MPI_EVENT_PRIMITIVE_CHANGE0_RESERVED (0x07) 83862ae194dSScott Long #define MPI_EVENT_PRIMITIVE_CHANGE1_RESERVED (0x08) 83962ae194dSScott Long 8409de3c85cSMatt Jacob /* SAS Phy Link Status Event data */ 8419de3c85cSMatt Jacob 8429de3c85cSMatt Jacob typedef struct _EVENT_DATA_SAS_PHY_LINK_STATUS 8439de3c85cSMatt Jacob { 8449de3c85cSMatt Jacob U8 PhyNum; /* 00h */ 8459de3c85cSMatt Jacob U8 LinkRates; /* 01h */ 8469de3c85cSMatt Jacob U16 DevHandle; /* 02h */ 8479de3c85cSMatt Jacob U64 SASAddress; /* 04h */ 8489de3c85cSMatt Jacob } EVENT_DATA_SAS_PHY_LINK_STATUS, MPI_POINTER PTR_EVENT_DATA_SAS_PHY_LINK_STATUS, 8499de3c85cSMatt Jacob MpiEventDataSasPhyLinkStatus_t, MPI_POINTER pMpiEventDataSasPhyLinkStatus_t; 8509de3c85cSMatt Jacob 8519de3c85cSMatt Jacob /* defines for the LinkRates field of the SAS PHY Link Status event */ 8529de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_CURRENT_MASK (0xF0) 8539de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_CURRENT_SHIFT (4) 8549de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_PREVIOUS_MASK (0x0F) 8559de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_PREVIOUS_SHIFT (0) 8569de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_RATE_UNKNOWN (0x00) 8579de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_RATE_PHY_DISABLED (0x01) 8589de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_RATE_FAILED_SPEED_NEGOTIATION (0x02) 8599de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_RATE_SATA_OOB_COMPLETE (0x03) 8609de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_RATE_1_5 (0x08) 8619de3c85cSMatt Jacob #define MPI_EVENT_SAS_PLS_LR_RATE_3_0 (0x09) 86212af29abSMarius Strobl #define MPI_EVENT_SAS_PLS_LR_RATE_6_0 (0x0A) 8639de3c85cSMatt Jacob 8640b80d21bSMatt Jacob /* SAS Discovery Event data */ 8650b80d21bSMatt Jacob 8660b80d21bSMatt Jacob typedef struct _EVENT_DATA_SAS_DISCOVERY 8670b80d21bSMatt Jacob { 8680b80d21bSMatt Jacob U32 DiscoveryStatus; /* 00h */ 8690b80d21bSMatt Jacob U32 Reserved1; /* 04h */ 8700b80d21bSMatt Jacob } EVENT_DATA_SAS_DISCOVERY, MPI_POINTER PTR_EVENT_DATA_SAS_DISCOVERY, 8710b80d21bSMatt Jacob EventDataSasDiscovery_t, MPI_POINTER pEventDataSasDiscovery_t; 8720b80d21bSMatt Jacob 8730b80d21bSMatt Jacob #define MPI_EVENT_SAS_DSCVRY_COMPLETE (0x00000000) 8740b80d21bSMatt Jacob #define MPI_EVENT_SAS_DSCVRY_IN_PROGRESS (0x00000001) 8750b80d21bSMatt Jacob #define MPI_EVENT_SAS_DSCVRY_PHY_BITS_MASK (0xFFFF0000) 8760b80d21bSMatt Jacob #define MPI_EVENT_SAS_DSCVRY_PHY_BITS_SHIFT (16) 8770b80d21bSMatt Jacob 8789de3c85cSMatt Jacob /* SAS Discovery Errror Event data */ 8799de3c85cSMatt Jacob 8809de3c85cSMatt Jacob typedef struct _EVENT_DATA_DISCOVERY_ERROR 8819de3c85cSMatt Jacob { 8829de3c85cSMatt Jacob U32 DiscoveryStatus; /* 00h */ 8839de3c85cSMatt Jacob U8 Port; /* 04h */ 8849de3c85cSMatt Jacob U8 Reserved1; /* 05h */ 8859de3c85cSMatt Jacob U16 Reserved2; /* 06h */ 8869de3c85cSMatt Jacob } EVENT_DATA_DISCOVERY_ERROR, MPI_POINTER PTR_EVENT_DATA_DISCOVERY_ERROR, 8879de3c85cSMatt Jacob EventDataDiscoveryError_t, MPI_POINTER pEventDataDiscoveryError_t; 8889de3c85cSMatt Jacob 8899de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_LOOP_DETECTED (0x00000001) 8909de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_UNADDRESSABLE_DEVICE (0x00000002) 8919de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_MULTIPLE_PORTS (0x00000004) 8929de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_EXPANDER_ERR (0x00000008) 8939de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_SMP_TIMEOUT (0x00000010) 8949de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_OUT_ROUTE_ENTRIES (0x00000020) 8959de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_INDEX_NOT_EXIST (0x00000040) 8969de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_SMP_FUNCTION_FAILED (0x00000080) 8979de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_SMP_CRC_ERROR (0x00000100) 8989de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_MULTPL_SUBTRACTIVE (0x00000200) 8999de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_TABLE_TO_TABLE (0x00000400) 90062ae194dSScott Long #define MPI_EVENT_DSCVRY_ERR_DS_UNSUPPORTED_DEVICE (0x00000800) 9019de3c85cSMatt Jacob #define MPI_EVENT_DSCVRY_ERR_DS_MAX_SATA_TARGETS (0x00001000) 90262ae194dSScott Long #define MPI_EVENT_DSCVRY_ERR_DS_MULTI_PORT_DOMAIN (0x00002000) 9031bf5a6cfSMarius Strobl #define MPI_EVENT_DSCVRY_ERR_DS_SATA_INIT_FAILURE (0x00004000) 90462ae194dSScott Long 90562ae194dSScott Long /* SAS SMP Error Event data */ 90662ae194dSScott Long 90762ae194dSScott Long typedef struct _EVENT_DATA_SAS_SMP_ERROR 90862ae194dSScott Long { 90962ae194dSScott Long U8 Status; /* 00h */ 91062ae194dSScott Long U8 Port; /* 01h */ 91162ae194dSScott Long U8 SMPFunctionResult; /* 02h */ 91262ae194dSScott Long U8 Reserved1; /* 03h */ 91362ae194dSScott Long U64 SASAddress; /* 04h */ 91462ae194dSScott Long } EVENT_DATA_SAS_SMP_ERROR, MPI_POINTER PTR_EVENT_DATA_SAS_SMP_ERROR, 91562ae194dSScott Long MpiEventDataSasSmpError_t, MPI_POINTER pMpiEventDataSasSmpError_t; 91662ae194dSScott Long 91762ae194dSScott Long /* defines for the Status field of the SAS SMP Error event */ 91862ae194dSScott Long #define MPI_EVENT_SAS_SMP_FUNCTION_RESULT_VALID (0x00) 91962ae194dSScott Long #define MPI_EVENT_SAS_SMP_CRC_ERROR (0x01) 92062ae194dSScott Long #define MPI_EVENT_SAS_SMP_TIMEOUT (0x02) 92162ae194dSScott Long #define MPI_EVENT_SAS_SMP_NO_DESTINATION (0x03) 92262ae194dSScott Long #define MPI_EVENT_SAS_SMP_BAD_DESTINATION (0x04) 92362ae194dSScott Long 92462ae194dSScott Long /* SAS Initiator Device Status Change Event data */ 92562ae194dSScott Long 92662ae194dSScott Long typedef struct _EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE 92762ae194dSScott Long { 92862ae194dSScott Long U8 ReasonCode; /* 00h */ 92962ae194dSScott Long U8 Port; /* 01h */ 93062ae194dSScott Long U16 DevHandle; /* 02h */ 93162ae194dSScott Long U64 SASAddress; /* 04h */ 93262ae194dSScott Long } EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 93362ae194dSScott Long MPI_POINTER PTR_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE, 93462ae194dSScott Long MpiEventDataSasInitDevStatusChange_t, 93562ae194dSScott Long MPI_POINTER pMpiEventDataSasInitDevStatusChange_t; 93662ae194dSScott Long 93762ae194dSScott Long /* defines for the ReasonCode field of the SAS Initiator Device Status Change event */ 93862ae194dSScott Long #define MPI_EVENT_SAS_INIT_RC_ADDED (0x01) 9391bf5a6cfSMarius Strobl #define MPI_EVENT_SAS_INIT_RC_REMOVED (0x02) 9401bf5a6cfSMarius Strobl #define MPI_EVENT_SAS_INIT_RC_INACCESSIBLE (0x03) 94162ae194dSScott Long 94262ae194dSScott Long /* SAS Initiator Device Table Overflow Event data */ 94362ae194dSScott Long 94462ae194dSScott Long typedef struct _EVENT_DATA_SAS_INIT_TABLE_OVERFLOW 94562ae194dSScott Long { 94662ae194dSScott Long U8 MaxInit; /* 00h */ 94762ae194dSScott Long U8 CurrentInit; /* 01h */ 94862ae194dSScott Long U16 Reserved1; /* 02h */ 9491bf5a6cfSMarius Strobl U64 SASAddress; /* 04h */ 95062ae194dSScott Long } EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 95162ae194dSScott Long MPI_POINTER PTR_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW, 95262ae194dSScott Long MpiEventDataSasInitTableOverflow_t, 95362ae194dSScott Long MPI_POINTER pMpiEventDataSasInitTableOverflow_t; 95462ae194dSScott Long 95562ae194dSScott Long /* SAS Expander Status Change Event data */ 95662ae194dSScott Long 95762ae194dSScott Long typedef struct _EVENT_DATA_SAS_EXPANDER_STATUS_CHANGE 95862ae194dSScott Long { 95962ae194dSScott Long U8 ReasonCode; /* 00h */ 96062ae194dSScott Long U8 Reserved1; /* 01h */ 96162ae194dSScott Long U16 Reserved2; /* 02h */ 96262ae194dSScott Long U8 PhysicalPort; /* 04h */ 96362ae194dSScott Long U8 Reserved3; /* 05h */ 96462ae194dSScott Long U16 EnclosureHandle; /* 06h */ 96562ae194dSScott Long U64 SASAddress; /* 08h */ 96662ae194dSScott Long U32 DiscoveryStatus; /* 10h */ 96762ae194dSScott Long U16 DevHandle; /* 14h */ 96862ae194dSScott Long U16 ParentDevHandle; /* 16h */ 96962ae194dSScott Long U16 ExpanderChangeCount; /* 18h */ 97062ae194dSScott Long U16 ExpanderRouteIndexes; /* 1Ah */ 97162ae194dSScott Long U8 NumPhys; /* 1Ch */ 97262ae194dSScott Long U8 SASLevel; /* 1Dh */ 97362ae194dSScott Long U8 Flags; /* 1Eh */ 97462ae194dSScott Long U8 Reserved4; /* 1Fh */ 97562ae194dSScott Long } EVENT_DATA_SAS_EXPANDER_STATUS_CHANGE, 97662ae194dSScott Long MPI_POINTER PTR_EVENT_DATA_SAS_EXPANDER_STATUS_CHANGE, 97762ae194dSScott Long MpiEventDataSasExpanderStatusChange_t, 97862ae194dSScott Long MPI_POINTER pMpiEventDataSasExpanderStatusChange_t; 97962ae194dSScott Long 98062ae194dSScott Long /* values for ReasonCode field of SAS Expander Status Change Event data */ 98162ae194dSScott Long #define MPI_EVENT_SAS_EXP_RC_ADDED (0x00) 98262ae194dSScott Long #define MPI_EVENT_SAS_EXP_RC_NOT_RESPONDING (0x01) 98362ae194dSScott Long 98462ae194dSScott Long /* values for DiscoveryStatus field of SAS Expander Status Change Event data */ 98562ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_LOOP_DETECTED (0x00000001) 98662ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_UNADDRESSABLE_DEVICE (0x00000002) 98762ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_MULTIPLE_PORTS (0x00000004) 98862ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_EXPANDER_ERR (0x00000008) 98962ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_SMP_TIMEOUT (0x00000010) 99062ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_OUT_ROUTE_ENTRIES (0x00000020) 99162ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_INDEX_NOT_EXIST (0x00000040) 99262ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_SMP_FUNCTION_FAILED (0x00000080) 99362ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_SMP_CRC_ERROR (0x00000100) 99462ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_SUBTRACTIVE_LINK (0x00000200) 99562ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_TABLE_LINK (0x00000400) 99662ae194dSScott Long #define MPI_EVENT_SAS_EXP_DS_UNSUPPORTED_DEVICE (0x00000800) 99762ae194dSScott Long 99862ae194dSScott Long /* values for Flags field of SAS Expander Status Change Event data */ 99962ae194dSScott Long #define MPI_EVENT_SAS_EXP_FLAGS_ROUTE_TABLE_CONFIG (0x02) 100062ae194dSScott Long #define MPI_EVENT_SAS_EXP_FLAGS_CONFIG_IN_PROGRESS (0x01) 100162ae194dSScott Long 10029b631363SMatt Jacob /***************************************************************************** 10039b631363SMatt Jacob * 10049b631363SMatt Jacob * F i r m w a r e L o a d M e s s a g e s 10059b631363SMatt Jacob * 10069b631363SMatt Jacob *****************************************************************************/ 10079b631363SMatt Jacob 10089b631363SMatt Jacob /****************************************************************************/ 10099b631363SMatt Jacob /* Firmware Download message and associated structures */ 10109b631363SMatt Jacob /****************************************************************************/ 10119b631363SMatt Jacob 10129b631363SMatt Jacob typedef struct _MSG_FW_DOWNLOAD 10139b631363SMatt Jacob { 10149b631363SMatt Jacob U8 ImageType; /* 00h */ 10159b631363SMatt Jacob U8 Reserved; /* 01h */ 10169b631363SMatt Jacob U8 ChainOffset; /* 02h */ 10179b631363SMatt Jacob U8 Function; /* 03h */ 10189b631363SMatt Jacob U8 Reserved1[3]; /* 04h */ 10199b631363SMatt Jacob U8 MsgFlags; /* 07h */ 10209b631363SMatt Jacob U32 MsgContext; /* 08h */ 10219b631363SMatt Jacob SGE_MPI_UNION SGL; /* 0Ch */ 10229b631363SMatt Jacob } MSG_FW_DOWNLOAD, MPI_POINTER PTR_MSG_FW_DOWNLOAD, 10239b631363SMatt Jacob FWDownload_t, MPI_POINTER pFWDownload_t; 10249b631363SMatt Jacob 10259de3c85cSMatt Jacob #define MPI_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT (0x01) 10269de3c85cSMatt Jacob 10279b631363SMatt Jacob #define MPI_FW_DOWNLOAD_ITYPE_RESERVED (0x00) 10289b631363SMatt Jacob #define MPI_FW_DOWNLOAD_ITYPE_FW (0x01) 10299b631363SMatt Jacob #define MPI_FW_DOWNLOAD_ITYPE_BIOS (0x02) 10309b631363SMatt Jacob #define MPI_FW_DOWNLOAD_ITYPE_NVDATA (0x03) 10319de3c85cSMatt Jacob #define MPI_FW_DOWNLOAD_ITYPE_BOOTLOADER (0x04) 103262ae194dSScott Long #define MPI_FW_DOWNLOAD_ITYPE_MANUFACTURING (0x06) 103362ae194dSScott Long #define MPI_FW_DOWNLOAD_ITYPE_CONFIG_1 (0x07) 103462ae194dSScott Long #define MPI_FW_DOWNLOAD_ITYPE_CONFIG_2 (0x08) 103562ae194dSScott Long #define MPI_FW_DOWNLOAD_ITYPE_MEGARAID (0x09) 103662ae194dSScott Long #define MPI_FW_DOWNLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 10379b631363SMatt Jacob 10389b631363SMatt Jacob typedef struct _FWDownloadTCSGE 10399b631363SMatt Jacob { 10409b631363SMatt Jacob U8 Reserved; /* 00h */ 10419b631363SMatt Jacob U8 ContextSize; /* 01h */ 10429b631363SMatt Jacob U8 DetailsLength; /* 02h */ 10439b631363SMatt Jacob U8 Flags; /* 03h */ 10449b631363SMatt Jacob U32 Reserved_0100_Checksum; /* 04h */ /* obsolete Checksum */ 10459b631363SMatt Jacob U32 ImageOffset; /* 08h */ 10469b631363SMatt Jacob U32 ImageSize; /* 0Ch */ 10479b631363SMatt Jacob } FW_DOWNLOAD_TCSGE, MPI_POINTER PTR_FW_DOWNLOAD_TCSGE, 10489b631363SMatt Jacob FWDownloadTCSGE_t, MPI_POINTER pFWDownloadTCSGE_t; 10499b631363SMatt Jacob 10509b631363SMatt Jacob /* Firmware Download reply */ 10519b631363SMatt Jacob typedef struct _MSG_FW_DOWNLOAD_REPLY 10529b631363SMatt Jacob { 10539b631363SMatt Jacob U8 ImageType; /* 00h */ 10549b631363SMatt Jacob U8 Reserved; /* 01h */ 10559b631363SMatt Jacob U8 MsgLength; /* 02h */ 10569b631363SMatt Jacob U8 Function; /* 03h */ 10579b631363SMatt Jacob U8 Reserved1[3]; /* 04h */ 10589b631363SMatt Jacob U8 MsgFlags; /* 07h */ 10599b631363SMatt Jacob U32 MsgContext; /* 08h */ 10609b631363SMatt Jacob U16 Reserved2; /* 0Ch */ 10619b631363SMatt Jacob U16 IOCStatus; /* 0Eh */ 10629b631363SMatt Jacob U32 IOCLogInfo; /* 10h */ 10639b631363SMatt Jacob } MSG_FW_DOWNLOAD_REPLY, MPI_POINTER PTR_MSG_FW_DOWNLOAD_REPLY, 10649b631363SMatt Jacob FWDownloadReply_t, MPI_POINTER pFWDownloadReply_t; 10659b631363SMatt Jacob 10669b631363SMatt Jacob /****************************************************************************/ 10679b631363SMatt Jacob /* Firmware Upload message and associated structures */ 10689b631363SMatt Jacob /****************************************************************************/ 10699b631363SMatt Jacob 10709b631363SMatt Jacob typedef struct _MSG_FW_UPLOAD 10719b631363SMatt Jacob { 10729b631363SMatt Jacob U8 ImageType; /* 00h */ 10739b631363SMatt Jacob U8 Reserved; /* 01h */ 10749b631363SMatt Jacob U8 ChainOffset; /* 02h */ 10759b631363SMatt Jacob U8 Function; /* 03h */ 10769b631363SMatt Jacob U8 Reserved1[3]; /* 04h */ 10779b631363SMatt Jacob U8 MsgFlags; /* 07h */ 10789b631363SMatt Jacob U32 MsgContext; /* 08h */ 10799b631363SMatt Jacob SGE_MPI_UNION SGL; /* 0Ch */ 10809b631363SMatt Jacob } MSG_FW_UPLOAD, MPI_POINTER PTR_MSG_FW_UPLOAD, 10819b631363SMatt Jacob FWUpload_t, MPI_POINTER pFWUpload_t; 10829b631363SMatt Jacob 10839b631363SMatt Jacob #define MPI_FW_UPLOAD_ITYPE_FW_IOC_MEM (0x00) 10849b631363SMatt Jacob #define MPI_FW_UPLOAD_ITYPE_FW_FLASH (0x01) 10859b631363SMatt Jacob #define MPI_FW_UPLOAD_ITYPE_BIOS_FLASH (0x02) 10869b631363SMatt Jacob #define MPI_FW_UPLOAD_ITYPE_NVDATA (0x03) 10879de3c85cSMatt Jacob #define MPI_FW_UPLOAD_ITYPE_BOOTLOADER (0x04) 10889de3c85cSMatt Jacob #define MPI_FW_UPLOAD_ITYPE_FW_BACKUP (0x05) 108962ae194dSScott Long #define MPI_FW_UPLOAD_ITYPE_MANUFACTURING (0x06) 109062ae194dSScott Long #define MPI_FW_UPLOAD_ITYPE_CONFIG_1 (0x07) 109162ae194dSScott Long #define MPI_FW_UPLOAD_ITYPE_CONFIG_2 (0x08) 109262ae194dSScott Long #define MPI_FW_UPLOAD_ITYPE_MEGARAID (0x09) 109362ae194dSScott Long #define MPI_FW_UPLOAD_ITYPE_COMPLETE (0x0A) 109462ae194dSScott Long #define MPI_FW_UPLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B) 10959b631363SMatt Jacob 10969b631363SMatt Jacob typedef struct _FWUploadTCSGE 10979b631363SMatt Jacob { 10989b631363SMatt Jacob U8 Reserved; /* 00h */ 10999b631363SMatt Jacob U8 ContextSize; /* 01h */ 11009b631363SMatt Jacob U8 DetailsLength; /* 02h */ 11019b631363SMatt Jacob U8 Flags; /* 03h */ 11029b631363SMatt Jacob U32 Reserved1; /* 04h */ 11039b631363SMatt Jacob U32 ImageOffset; /* 08h */ 11049b631363SMatt Jacob U32 ImageSize; /* 0Ch */ 11059b631363SMatt Jacob } FW_UPLOAD_TCSGE, MPI_POINTER PTR_FW_UPLOAD_TCSGE, 11069b631363SMatt Jacob FWUploadTCSGE_t, MPI_POINTER pFWUploadTCSGE_t; 11079b631363SMatt Jacob 11089b631363SMatt Jacob /* Firmware Upload reply */ 11099b631363SMatt Jacob typedef struct _MSG_FW_UPLOAD_REPLY 11109b631363SMatt Jacob { 11119b631363SMatt Jacob U8 ImageType; /* 00h */ 11129b631363SMatt Jacob U8 Reserved; /* 01h */ 11139b631363SMatt Jacob U8 MsgLength; /* 02h */ 11149b631363SMatt Jacob U8 Function; /* 03h */ 11159b631363SMatt Jacob U8 Reserved1[3]; /* 04h */ 11169b631363SMatt Jacob U8 MsgFlags; /* 07h */ 11179b631363SMatt Jacob U32 MsgContext; /* 08h */ 11189b631363SMatt Jacob U16 Reserved2; /* 0Ch */ 11199b631363SMatt Jacob U16 IOCStatus; /* 0Eh */ 11209b631363SMatt Jacob U32 IOCLogInfo; /* 10h */ 11219b631363SMatt Jacob U32 ActualImageSize; /* 14h */ 11229b631363SMatt Jacob } MSG_FW_UPLOAD_REPLY, MPI_POINTER PTR_MSG_FW_UPLOAD_REPLY, 11239b631363SMatt Jacob FWUploadReply_t, MPI_POINTER pFWUploadReply_t; 11249b631363SMatt Jacob 11259b631363SMatt Jacob typedef struct _MPI_FW_HEADER 11269b631363SMatt Jacob { 11279b631363SMatt Jacob U32 ArmBranchInstruction0; /* 00h */ 11289b631363SMatt Jacob U32 Signature0; /* 04h */ 11299b631363SMatt Jacob U32 Signature1; /* 08h */ 11309b631363SMatt Jacob U32 Signature2; /* 0Ch */ 11319b631363SMatt Jacob U32 ArmBranchInstruction1; /* 10h */ 11329b631363SMatt Jacob U32 ArmBranchInstruction2; /* 14h */ 11339b631363SMatt Jacob U32 Reserved; /* 18h */ 11349b631363SMatt Jacob U32 Checksum; /* 1Ch */ 11359b631363SMatt Jacob U16 VendorId; /* 20h */ 11369b631363SMatt Jacob U16 ProductId; /* 22h */ 11379b631363SMatt Jacob MPI_FW_VERSION FWVersion; /* 24h */ 11389b631363SMatt Jacob U32 SeqCodeVersion; /* 28h */ 11399b631363SMatt Jacob U32 ImageSize; /* 2Ch */ 11409b631363SMatt Jacob U32 NextImageHeaderOffset; /* 30h */ 11419b631363SMatt Jacob U32 LoadStartAddress; /* 34h */ 11429b631363SMatt Jacob U32 IopResetVectorValue; /* 38h */ 11439b631363SMatt Jacob U32 IopResetRegAddr; /* 3Ch */ 11449b631363SMatt Jacob U32 VersionNameWhat; /* 40h */ 11459b631363SMatt Jacob U8 VersionName[32]; /* 44h */ 11469b631363SMatt Jacob U32 VendorNameWhat; /* 64h */ 11479b631363SMatt Jacob U8 VendorName[32]; /* 68h */ 11489b631363SMatt Jacob } MPI_FW_HEADER, MPI_POINTER PTR_MPI_FW_HEADER, 11499b631363SMatt Jacob MpiFwHeader_t, MPI_POINTER pMpiFwHeader_t; 11509b631363SMatt Jacob 11519b631363SMatt Jacob #define MPI_FW_HEADER_WHAT_SIGNATURE (0x29232840) 11529b631363SMatt Jacob 11539b631363SMatt Jacob /* defines for using the ProductId field */ 11549b631363SMatt Jacob #define MPI_FW_HEADER_PID_TYPE_MASK (0xF000) 11559b631363SMatt Jacob #define MPI_FW_HEADER_PID_TYPE_SCSI (0x0000) 11569b631363SMatt Jacob #define MPI_FW_HEADER_PID_TYPE_FC (0x1000) 11579de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_TYPE_SAS (0x2000) 11589b631363SMatt Jacob 11597fed69eeSMatt Jacob #define MPI_FW_HEADER_SIGNATURE_0 (0x5AEAA55A) 11607fed69eeSMatt Jacob #define MPI_FW_HEADER_SIGNATURE_1 (0xA55AEAA5) 11617fed69eeSMatt Jacob #define MPI_FW_HEADER_SIGNATURE_2 (0x5AA55AEA) 11627fed69eeSMatt Jacob 11639b631363SMatt Jacob #define MPI_FW_HEADER_PID_PROD_MASK (0x0F00) 11649b631363SMatt Jacob #define MPI_FW_HEADER_PID_PROD_INITIATOR_SCSI (0x0100) 11659b631363SMatt Jacob #define MPI_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI (0x0200) 11669b631363SMatt Jacob #define MPI_FW_HEADER_PID_PROD_TARGET_SCSI (0x0300) 11679b631363SMatt Jacob #define MPI_FW_HEADER_PID_PROD_IM_SCSI (0x0400) 11689b631363SMatt Jacob #define MPI_FW_HEADER_PID_PROD_IS_SCSI (0x0500) 11699b631363SMatt Jacob #define MPI_FW_HEADER_PID_PROD_CTX_SCSI (0x0600) 11709de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_PROD_IR_SCSI (0x0700) 11719b631363SMatt Jacob 11729b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_MASK (0x00FF) 11739de3c85cSMatt Jacob /* SCSI */ 11749b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1030A0_SCSI (0x0001) 11759b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1030B0_SCSI (0x0002) 11769b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1030B1_SCSI (0x0003) 11779b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1030C0_SCSI (0x0004) 11789b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1020A0_SCSI (0x0005) 11799b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1020B0_SCSI (0x0006) 11809b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1020B1_SCSI (0x0007) 11819b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1020C0_SCSI (0x0008) 11829b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1035A0_SCSI (0x0009) 11839b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1035B0_SCSI (0x000A) 1184b0a2fdeeSScott Long #define MPI_FW_HEADER_PID_FAMILY_1030TA0_SCSI (0x000B) 1185b0a2fdeeSScott Long #define MPI_FW_HEADER_PID_FAMILY_1020TA0_SCSI (0x000C) 11869de3c85cSMatt Jacob /* Fibre Channel */ 11879b631363SMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_909_FC (0x0000) 11889de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_919_FC (0x0001) /* 919 and 929 */ 11899de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_919X_FC (0x0002) /* 919X and 929X */ 11909de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_919XL_FC (0x0003) /* 919XL and 929XL */ 11919de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_939X_FC (0x0004) /* 939X and 949X */ 11929de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_959_FC (0x0005) 11930b80d21bSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_949E_FC (0x0006) 11949de3c85cSMatt Jacob /* SAS */ 11959de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1064_SAS (0x0001) 11969de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1068_SAS (0x0002) 11979de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_1078_SAS (0x0003) 11989de3c85cSMatt Jacob #define MPI_FW_HEADER_PID_FAMILY_106xE_SAS (0x0004) /* 1068E, 1066E, and 1064E */ 11999b631363SMatt Jacob 12009b631363SMatt Jacob typedef struct _MPI_EXT_IMAGE_HEADER 12019b631363SMatt Jacob { 12029b631363SMatt Jacob U8 ImageType; /* 00h */ 12039b631363SMatt Jacob U8 Reserved; /* 01h */ 12049b631363SMatt Jacob U16 Reserved1; /* 02h */ 12059b631363SMatt Jacob U32 Checksum; /* 04h */ 12069b631363SMatt Jacob U32 ImageSize; /* 08h */ 12079b631363SMatt Jacob U32 NextImageHeaderOffset; /* 0Ch */ 12089b631363SMatt Jacob U32 LoadStartAddress; /* 10h */ 12099b631363SMatt Jacob U32 Reserved2; /* 14h */ 12109b631363SMatt Jacob } MPI_EXT_IMAGE_HEADER, MPI_POINTER PTR_MPI_EXT_IMAGE_HEADER, 12119b631363SMatt Jacob MpiExtImageHeader_t, MPI_POINTER pMpiExtImageHeader_t; 12129b631363SMatt Jacob 12139b631363SMatt Jacob /* defines for the ImageType field */ 12149b631363SMatt Jacob #define MPI_EXT_IMAGE_TYPE_UNSPECIFIED (0x00) 12159b631363SMatt Jacob #define MPI_EXT_IMAGE_TYPE_FW (0x01) 12169b631363SMatt Jacob #define MPI_EXT_IMAGE_TYPE_NVDATA (0x03) 12179de3c85cSMatt Jacob #define MPI_EXT_IMAGE_TYPE_BOOTLOADER (0x04) 121862ae194dSScott Long #define MPI_EXT_IMAGE_TYPE_INITIALIZATION (0x05) 12199b631363SMatt Jacob 12209b631363SMatt Jacob #endif 1221