Path: blob/master/drivers/message/fusion/lsi/mpi_ioc.h
15111 views
/*1* Copyright (c) 2000-2008 LSI Corporation.2*3*4* Name: mpi_ioc.h5* Title: MPI IOC, Port, Event, FW Download, and FW Upload messages6* Creation Date: August 11, 20007*8* mpi_ioc.h Version: 01.05.169*10* Version History11* ---------------12*13* Date Version Description14* -------- -------- ------------------------------------------------------15* 05-08-00 00.10.01 Original release for 0.10 spec dated 4/26/2000.16* 05-24-00 00.10.02 Added _MSG_IOC_INIT_REPLY structure.17* 06-06-00 01.00.01 Added CurReplyFrameSize field to _MSG_IOC_FACTS_REPLY.18* 06-12-00 01.00.02 Added _MSG_PORT_ENABLE_REPLY structure.19* Added _MSG_EVENT_ACK_REPLY structure.20* Added _MSG_FW_DOWNLOAD_REPLY structure.21* Added _MSG_TOOLBOX_REPLY structure.22* 06-30-00 01.00.03 Added MaxLanBuckets to _PORT_FACT_REPLY structure.23* 07-27-00 01.00.04 Added _EVENT_DATA structure definitions for _SCSI,24* _LINK_STATUS, _LOOP_STATE and _LOGOUT.25* 08-11-00 01.00.05 Switched positions of MsgLength and Function fields in26* _MSG_EVENT_ACK_REPLY structure to match specification.27* 11-02-00 01.01.01 Original release for post 1.0 work.28* Added a value for Manufacturer to WhoInit.29* 12-04-00 01.01.02 Modified IOCFacts reply, added FWUpload messages, and30* removed toolbox message.31* 01-09-01 01.01.03 Added event enabled and disabled defines.32* Added structures for FwHeader and DataHeader.33* Added ImageType to FwUpload reply.34* 02-20-01 01.01.04 Started using MPI_POINTER.35* 02-27-01 01.01.05 Added event for RAID status change and its event data.36* Added IocNumber field to MSG_IOC_FACTS_REPLY.37* 03-27-01 01.01.06 Added defines for ProductId field of MPI_FW_HEADER.38* Added structure offset comments.39* 04-09-01 01.01.07 Added structure EVENT_DATA_EVENT_CHANGE.40* 08-08-01 01.02.01 Original release for v1.2 work.41* New format for FWVersion and ProductId in42* MSG_IOC_FACTS_REPLY and MPI_FW_HEADER.43* 08-31-01 01.02.02 Addded event MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE and44* related structure and defines.45* Added event MPI_EVENT_ON_BUS_TIMER_EXPIRED.46* Added MPI_IOCINIT_FLAGS_DISCARD_FW_IMAGE.47* Replaced a reserved field in MSG_IOC_FACTS_REPLY with48* IOCExceptions and changed DataImageSize to reserved.49* Added MPI_FW_DOWNLOAD_ITYPE_NVSTORE_DATA and50* MPI_FW_UPLOAD_ITYPE_NVDATA.51* 09-28-01 01.02.03 Modified Event Data for Integrated RAID.52* 11-01-01 01.02.04 Added defines for MPI_EXT_IMAGE_HEADER ImageType field.53* 03-14-02 01.02.05 Added HeaderVersion field to MSG_IOC_FACTS_REPLY.54* 05-31-02 01.02.06 Added define for55* MPI_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID.56* Added AliasIndex to EVENT_DATA_LOGOUT structure.57* 04-01-03 01.02.07 Added defines for MPI_FW_HEADER_SIGNATURE_.58* 06-26-03 01.02.08 Added new values to the product family defines.59* 04-29-04 01.02.09 Added IOCCapabilities field to MSG_IOC_FACTS_REPLY and60* added related defines.61* 05-11-04 01.03.01 Original release for MPI v1.3.62* 08-19-04 01.05.01 Added four new fields to MSG_IOC_INIT.63* Added three new fields to MSG_IOC_FACTS_REPLY.64* Defined four new bits for the IOCCapabilities field of65* the IOCFacts reply.66* Added two new PortTypes for the PortFacts reply.67* Added six new events along with their EventData68* structures.69* Added a new MsgFlag to the FwDownload request to70* indicate last segment.71* Defined a new image type of boot loader.72* Added FW family codes for SAS product families.73* 10-05-04 01.05.02 Added ReplyFifoHostSignalingAddr field to74* MSG_IOC_FACTS_REPLY.75* 12-07-04 01.05.03 Added more defines for SAS Discovery Error event.76* 12-09-04 01.05.04 Added Unsupported device to SAS Device event.77* 01-15-05 01.05.05 Added event data for SAS SES Event.78* 02-09-05 01.05.06 Added MPI_FW_UPLOAD_ITYPE_FW_BACKUP define.79* 02-22-05 01.05.07 Added Host Page Buffer Persistent flag to IOC Facts80* Reply and IOC Init Request.81* 03-11-05 01.05.08 Added family code for 1068E family.82* Removed IOCFacts Reply EEDP Capability bit.83* 06-24-05 01.05.09 Added 5 new IOCFacts Reply IOCCapabilities bits.84* Added Max SATA Targets to SAS Discovery Error event.85* 08-30-05 01.05.10 Added 4 new events and their event data structures.86* Added new ReasonCode value for SAS Device Status Change87* event.88* Added new family code for FC949E.89* 03-27-06 01.05.11 Added MPI_IOCFACTS_CAPABILITY_TLR.90* Added additional Reason Codes and more event data fields91* to EVENT_DATA_SAS_DEVICE_STATUS_CHANGE.92* Added EVENT_DATA_SAS_BROADCAST_PRIMITIVE structure and93* new event.94* Added MPI_EVENT_SAS_SMP_ERROR and event data structure.95* Added MPI_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE and event96* data structure.97* Added MPI_EVENT_SAS_INIT_TABLE_OVERFLOW and event98* data structure.99* Added MPI_EXT_IMAGE_TYPE_INITIALIZATION.100* 10-11-06 01.05.12 Added MPI_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED.101* Added MaxInitiators field to PortFacts reply.102* Added SAS Device Status Change ReasonCode for103* asynchronous notificaiton.104* Added MPI_EVENT_SAS_EXPANDER_STATUS_CHANGE and event105* data structure.106* Added new ImageType values for FWDownload and FWUpload107* requests.108* 02-28-07 01.05.13 Added MPI_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT for SAS109* Broadcast Event Data (replacing _RESERVED2).110* For Discovery Error Event Data DiscoveryStatus field,111* replaced _MULTPL_PATHS with _UNSUPPORTED_DEVICE and112* added _MULTI_PORT_DOMAIN.113* 05-24-07 01.05.14 Added Common Boot Block type to FWDownload Request.114* Added Common Boot Block type to FWUpload Request.115* 08-07-07 01.05.15 Added MPI_EVENT_SAS_INIT_RC_REMOVED define.116* Added MPI_EVENT_IR2_RC_DUAL_PORT_ADDED and117* MPI_EVENT_IR2_RC_DUAL_PORT_REMOVED for IR2 event data.118* Added SASAddress field to SAS Initiator Device Table119* Overflow event data structure.120* 03-28-08 01.05.16 Added two new ReasonCode values to SAS Device Status121* Change Event data to indicate completion of internally122* generated task management.123* Added MPI_EVENT_DSCVRY_ERR_DS_SATA_INIT_FAILURE define.124* Added MPI_EVENT_SAS_INIT_RC_INACCESSIBLE define.125* --------------------------------------------------------------------------126*/127128#ifndef MPI_IOC_H129#define MPI_IOC_H130131132/*****************************************************************************133*134* I O C M e s s a g e s135*136*****************************************************************************/137138/****************************************************************************/139/* IOCInit message */140/****************************************************************************/141142typedef struct _MSG_IOC_INIT143{144U8 WhoInit; /* 00h */145U8 Reserved; /* 01h */146U8 ChainOffset; /* 02h */147U8 Function; /* 03h */148U8 Flags; /* 04h */149U8 MaxDevices; /* 05h */150U8 MaxBuses; /* 06h */151U8 MsgFlags; /* 07h */152U32 MsgContext; /* 08h */153U16 ReplyFrameSize; /* 0Ch */154U8 Reserved1[2]; /* 0Eh */155U32 HostMfaHighAddr; /* 10h */156U32 SenseBufferHighAddr; /* 14h */157U32 ReplyFifoHostSignalingAddr; /* 18h */158SGE_SIMPLE_UNION HostPageBufferSGE; /* 1Ch */159U16 MsgVersion; /* 28h */160U16 HeaderVersion; /* 2Ah */161} MSG_IOC_INIT, MPI_POINTER PTR_MSG_IOC_INIT,162IOCInit_t, MPI_POINTER pIOCInit_t;163164/* WhoInit values */165#define MPI_WHOINIT_NO_ONE (0x00)166#define MPI_WHOINIT_SYSTEM_BIOS (0x01)167#define MPI_WHOINIT_ROM_BIOS (0x02)168#define MPI_WHOINIT_PCI_PEER (0x03)169#define MPI_WHOINIT_HOST_DRIVER (0x04)170#define MPI_WHOINIT_MANUFACTURER (0x05)171172/* Flags values */173#define MPI_IOCINIT_FLAGS_HOST_PAGE_BUFFER_PERSISTENT (0x04)174#define MPI_IOCINIT_FLAGS_REPLY_FIFO_HOST_SIGNAL (0x02)175#define MPI_IOCINIT_FLAGS_DISCARD_FW_IMAGE (0x01)176177/* MsgVersion */178#define MPI_IOCINIT_MSGVERSION_MAJOR_MASK (0xFF00)179#define MPI_IOCINIT_MSGVERSION_MAJOR_SHIFT (8)180#define MPI_IOCINIT_MSGVERSION_MINOR_MASK (0x00FF)181#define MPI_IOCINIT_MSGVERSION_MINOR_SHIFT (0)182183/* HeaderVersion */184#define MPI_IOCINIT_HEADERVERSION_UNIT_MASK (0xFF00)185#define MPI_IOCINIT_HEADERVERSION_UNIT_SHIFT (8)186#define MPI_IOCINIT_HEADERVERSION_DEV_MASK (0x00FF)187#define MPI_IOCINIT_HEADERVERSION_DEV_SHIFT (0)188189190typedef struct _MSG_IOC_INIT_REPLY191{192U8 WhoInit; /* 00h */193U8 Reserved; /* 01h */194U8 MsgLength; /* 02h */195U8 Function; /* 03h */196U8 Flags; /* 04h */197U8 MaxDevices; /* 05h */198U8 MaxBuses; /* 06h */199U8 MsgFlags; /* 07h */200U32 MsgContext; /* 08h */201U16 Reserved2; /* 0Ch */202U16 IOCStatus; /* 0Eh */203U32 IOCLogInfo; /* 10h */204} MSG_IOC_INIT_REPLY, MPI_POINTER PTR_MSG_IOC_INIT_REPLY,205IOCInitReply_t, MPI_POINTER pIOCInitReply_t;206207208209/****************************************************************************/210/* IOC Facts message */211/****************************************************************************/212213typedef struct _MSG_IOC_FACTS214{215U8 Reserved[2]; /* 00h */216U8 ChainOffset; /* 01h */217U8 Function; /* 02h */218U8 Reserved1[3]; /* 03h */219U8 MsgFlags; /* 04h */220U32 MsgContext; /* 08h */221} MSG_IOC_FACTS, MPI_POINTER PTR_IOC_FACTS,222IOCFacts_t, MPI_POINTER pIOCFacts_t;223224typedef struct _MPI_FW_VERSION_STRUCT225{226U8 Dev; /* 00h */227U8 Unit; /* 01h */228U8 Minor; /* 02h */229U8 Major; /* 03h */230} MPI_FW_VERSION_STRUCT;231232typedef union _MPI_FW_VERSION233{234MPI_FW_VERSION_STRUCT Struct;235U32 Word;236} MPI_FW_VERSION;237238/* IOC Facts Reply */239typedef struct _MSG_IOC_FACTS_REPLY240{241U16 MsgVersion; /* 00h */242U8 MsgLength; /* 02h */243U8 Function; /* 03h */244U16 HeaderVersion; /* 04h */245U8 IOCNumber; /* 06h */246U8 MsgFlags; /* 07h */247U32 MsgContext; /* 08h */248U16 IOCExceptions; /* 0Ch */249U16 IOCStatus; /* 0Eh */250U32 IOCLogInfo; /* 10h */251U8 MaxChainDepth; /* 14h */252U8 WhoInit; /* 15h */253U8 BlockSize; /* 16h */254U8 Flags; /* 17h */255U16 ReplyQueueDepth; /* 18h */256U16 RequestFrameSize; /* 1Ah */257U16 Reserved_0101_FWVersion; /* 1Ch */ /* obsolete 16-bit FWVersion */258U16 ProductID; /* 1Eh */259U32 CurrentHostMfaHighAddr; /* 20h */260U16 GlobalCredits; /* 24h */261U8 NumberOfPorts; /* 26h */262U8 EventState; /* 27h */263U32 CurrentSenseBufferHighAddr; /* 28h */264U16 CurReplyFrameSize; /* 2Ch */265U8 MaxDevices; /* 2Eh */266U8 MaxBuses; /* 2Fh */267U32 FWImageSize; /* 30h */268U32 IOCCapabilities; /* 34h */269MPI_FW_VERSION FWVersion; /* 38h */270U16 HighPriorityQueueDepth; /* 3Ch */271U16 Reserved2; /* 3Eh */272SGE_SIMPLE_UNION HostPageBufferSGE; /* 40h */273U32 ReplyFifoHostSignalingAddr; /* 4Ch */274} MSG_IOC_FACTS_REPLY, MPI_POINTER PTR_MSG_IOC_FACTS_REPLY,275IOCFactsReply_t, MPI_POINTER pIOCFactsReply_t;276277#define MPI_IOCFACTS_MSGVERSION_MAJOR_MASK (0xFF00)278#define MPI_IOCFACTS_MSGVERSION_MAJOR_SHIFT (8)279#define MPI_IOCFACTS_MSGVERSION_MINOR_MASK (0x00FF)280#define MPI_IOCFACTS_MSGVERSION_MINOR_SHIFT (0)281282#define MPI_IOCFACTS_HDRVERSION_UNIT_MASK (0xFF00)283#define MPI_IOCFACTS_HDRVERSION_UNIT_SHIFT (8)284#define MPI_IOCFACTS_HDRVERSION_DEV_MASK (0x00FF)285#define MPI_IOCFACTS_HDRVERSION_DEV_SHIFT (0)286287#define MPI_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL (0x0001)288#define MPI_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID (0x0002)289#define MPI_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL (0x0004)290#define MPI_IOCFACTS_EXCEPT_PERSISTENT_TABLE_FULL (0x0008)291#define MPI_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED (0x0010)292293#define MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT (0x01)294#define MPI_IOCFACTS_FLAGS_REPLY_FIFO_HOST_SIGNAL (0x02)295#define MPI_IOCFACTS_FLAGS_HOST_PAGE_BUFFER_PERSISTENT (0x04)296297#define MPI_IOCFACTS_EVENTSTATE_DISABLED (0x00)298#define MPI_IOCFACTS_EVENTSTATE_ENABLED (0x01)299300#define MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q (0x00000001)301#define MPI_IOCFACTS_CAPABILITY_REPLY_HOST_SIGNAL (0x00000002)302#define MPI_IOCFACTS_CAPABILITY_QUEUE_FULL_HANDLING (0x00000004)303#define MPI_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER (0x00000008)304#define MPI_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER (0x00000010)305#define MPI_IOCFACTS_CAPABILITY_EXTENDED_BUFFER (0x00000020)306#define MPI_IOCFACTS_CAPABILITY_EEDP (0x00000040)307#define MPI_IOCFACTS_CAPABILITY_BIDIRECTIONAL (0x00000080)308#define MPI_IOCFACTS_CAPABILITY_MULTICAST (0x00000100)309#define MPI_IOCFACTS_CAPABILITY_SCSIIO32 (0x00000200)310#define MPI_IOCFACTS_CAPABILITY_NO_SCSIIO16 (0x00000400)311#define MPI_IOCFACTS_CAPABILITY_TLR (0x00000800)312313314/*****************************************************************************315*316* P o r t M e s s a g e s317*318*****************************************************************************/319320/****************************************************************************/321/* Port Facts message and Reply */322/****************************************************************************/323324typedef struct _MSG_PORT_FACTS325{326U8 Reserved[2]; /* 00h */327U8 ChainOffset; /* 02h */328U8 Function; /* 03h */329U8 Reserved1[2]; /* 04h */330U8 PortNumber; /* 06h */331U8 MsgFlags; /* 07h */332U32 MsgContext; /* 08h */333} MSG_PORT_FACTS, MPI_POINTER PTR_MSG_PORT_FACTS,334PortFacts_t, MPI_POINTER pPortFacts_t;335336typedef struct _MSG_PORT_FACTS_REPLY337{338U16 Reserved; /* 00h */339U8 MsgLength; /* 02h */340U8 Function; /* 03h */341U16 Reserved1; /* 04h */342U8 PortNumber; /* 06h */343U8 MsgFlags; /* 07h */344U32 MsgContext; /* 08h */345U16 Reserved2; /* 0Ch */346U16 IOCStatus; /* 0Eh */347U32 IOCLogInfo; /* 10h */348U8 Reserved3; /* 14h */349U8 PortType; /* 15h */350U16 MaxDevices; /* 16h */351U16 PortSCSIID; /* 18h */352U16 ProtocolFlags; /* 1Ah */353U16 MaxPostedCmdBuffers; /* 1Ch */354U16 MaxPersistentIDs; /* 1Eh */355U16 MaxLanBuckets; /* 20h */356U8 MaxInitiators; /* 22h */357U8 Reserved4; /* 23h */358U32 Reserved5; /* 24h */359} MSG_PORT_FACTS_REPLY, MPI_POINTER PTR_MSG_PORT_FACTS_REPLY,360PortFactsReply_t, MPI_POINTER pPortFactsReply_t;361362363/* PortTypes values */364365#define MPI_PORTFACTS_PORTTYPE_INACTIVE (0x00)366#define MPI_PORTFACTS_PORTTYPE_SCSI (0x01)367#define MPI_PORTFACTS_PORTTYPE_FC (0x10)368#define MPI_PORTFACTS_PORTTYPE_ISCSI (0x20)369#define MPI_PORTFACTS_PORTTYPE_SAS (0x30)370371/* ProtocolFlags values */372373#define MPI_PORTFACTS_PROTOCOL_LOGBUSADDR (0x01)374#define MPI_PORTFACTS_PROTOCOL_LAN (0x02)375#define MPI_PORTFACTS_PROTOCOL_TARGET (0x04)376#define MPI_PORTFACTS_PROTOCOL_INITIATOR (0x08)377378379/****************************************************************************/380/* Port Enable Message */381/****************************************************************************/382383typedef struct _MSG_PORT_ENABLE384{385U8 Reserved[2]; /* 00h */386U8 ChainOffset; /* 02h */387U8 Function; /* 03h */388U8 Reserved1[2]; /* 04h */389U8 PortNumber; /* 06h */390U8 MsgFlags; /* 07h */391U32 MsgContext; /* 08h */392} MSG_PORT_ENABLE, MPI_POINTER PTR_MSG_PORT_ENABLE,393PortEnable_t, MPI_POINTER pPortEnable_t;394395typedef struct _MSG_PORT_ENABLE_REPLY396{397U8 Reserved[2]; /* 00h */398U8 MsgLength; /* 02h */399U8 Function; /* 03h */400U8 Reserved1[2]; /* 04h */401U8 PortNumber; /* 05h */402U8 MsgFlags; /* 07h */403U32 MsgContext; /* 08h */404U16 Reserved2; /* 0Ch */405U16 IOCStatus; /* 0Eh */406U32 IOCLogInfo; /* 10h */407} MSG_PORT_ENABLE_REPLY, MPI_POINTER PTR_MSG_PORT_ENABLE_REPLY,408PortEnableReply_t, MPI_POINTER pPortEnableReply_t;409410411/*****************************************************************************412*413* E v e n t M e s s a g e s414*415*****************************************************************************/416417/****************************************************************************/418/* Event Notification messages */419/****************************************************************************/420421typedef struct _MSG_EVENT_NOTIFY422{423U8 Switch; /* 00h */424U8 Reserved; /* 01h */425U8 ChainOffset; /* 02h */426U8 Function; /* 03h */427U8 Reserved1[3]; /* 04h */428U8 MsgFlags; /* 07h */429U32 MsgContext; /* 08h */430} MSG_EVENT_NOTIFY, MPI_POINTER PTR_MSG_EVENT_NOTIFY,431EventNotification_t, MPI_POINTER pEventNotification_t;432433/* Event Notification Reply */434435typedef struct _MSG_EVENT_NOTIFY_REPLY436{437U16 EventDataLength; /* 00h */438U8 MsgLength; /* 02h */439U8 Function; /* 03h */440U8 Reserved1[2]; /* 04h */441U8 AckRequired; /* 06h */442U8 MsgFlags; /* 07h */443U32 MsgContext; /* 08h */444U8 Reserved2[2]; /* 0Ch */445U16 IOCStatus; /* 0Eh */446U32 IOCLogInfo; /* 10h */447U32 Event; /* 14h */448U32 EventContext; /* 18h */449U32 Data[1]; /* 1Ch */450} MSG_EVENT_NOTIFY_REPLY, MPI_POINTER PTR_MSG_EVENT_NOTIFY_REPLY,451EventNotificationReply_t, MPI_POINTER pEventNotificationReply_t;452453/* Event Acknowledge */454455typedef struct _MSG_EVENT_ACK456{457U8 Reserved[2]; /* 00h */458U8 ChainOffset; /* 02h */459U8 Function; /* 03h */460U8 Reserved1[3]; /* 04h */461U8 MsgFlags; /* 07h */462U32 MsgContext; /* 08h */463U32 Event; /* 0Ch */464U32 EventContext; /* 10h */465} MSG_EVENT_ACK, MPI_POINTER PTR_MSG_EVENT_ACK,466EventAck_t, MPI_POINTER pEventAck_t;467468typedef struct _MSG_EVENT_ACK_REPLY469{470U8 Reserved[2]; /* 00h */471U8 MsgLength; /* 02h */472U8 Function; /* 03h */473U8 Reserved1[3]; /* 04h */474U8 MsgFlags; /* 07h */475U32 MsgContext; /* 08h */476U16 Reserved2; /* 0Ch */477U16 IOCStatus; /* 0Eh */478U32 IOCLogInfo; /* 10h */479} MSG_EVENT_ACK_REPLY, MPI_POINTER PTR_MSG_EVENT_ACK_REPLY,480EventAckReply_t, MPI_POINTER pEventAckReply_t;481482/* Switch */483484#define MPI_EVENT_NOTIFICATION_SWITCH_OFF (0x00)485#define MPI_EVENT_NOTIFICATION_SWITCH_ON (0x01)486487/* Event */488489#define MPI_EVENT_NONE (0x00000000)490#define MPI_EVENT_LOG_DATA (0x00000001)491#define MPI_EVENT_STATE_CHANGE (0x00000002)492#define MPI_EVENT_UNIT_ATTENTION (0x00000003)493#define MPI_EVENT_IOC_BUS_RESET (0x00000004)494#define MPI_EVENT_EXT_BUS_RESET (0x00000005)495#define MPI_EVENT_RESCAN (0x00000006)496#define MPI_EVENT_LINK_STATUS_CHANGE (0x00000007)497#define MPI_EVENT_LOOP_STATE_CHANGE (0x00000008)498#define MPI_EVENT_LOGOUT (0x00000009)499#define MPI_EVENT_EVENT_CHANGE (0x0000000A)500#define MPI_EVENT_INTEGRATED_RAID (0x0000000B)501#define MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE (0x0000000C)502#define MPI_EVENT_ON_BUS_TIMER_EXPIRED (0x0000000D)503#define MPI_EVENT_QUEUE_FULL (0x0000000E)504#define MPI_EVENT_SAS_DEVICE_STATUS_CHANGE (0x0000000F)505#define MPI_EVENT_SAS_SES (0x00000010)506#define MPI_EVENT_PERSISTENT_TABLE_FULL (0x00000011)507#define MPI_EVENT_SAS_PHY_LINK_STATUS (0x00000012)508#define MPI_EVENT_SAS_DISCOVERY_ERROR (0x00000013)509#define MPI_EVENT_IR_RESYNC_UPDATE (0x00000014)510#define MPI_EVENT_IR2 (0x00000015)511#define MPI_EVENT_SAS_DISCOVERY (0x00000016)512#define MPI_EVENT_SAS_BROADCAST_PRIMITIVE (0x00000017)513#define MPI_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE (0x00000018)514#define MPI_EVENT_SAS_INIT_TABLE_OVERFLOW (0x00000019)515#define MPI_EVENT_SAS_SMP_ERROR (0x0000001A)516#define MPI_EVENT_SAS_EXPANDER_STATUS_CHANGE (0x0000001B)517#define MPI_EVENT_LOG_ENTRY_ADDED (0x00000021)518519/* AckRequired field values */520521#define MPI_EVENT_NOTIFICATION_ACK_NOT_REQUIRED (0x00)522#define MPI_EVENT_NOTIFICATION_ACK_REQUIRED (0x01)523524/* EventChange Event data */525526typedef struct _EVENT_DATA_EVENT_CHANGE527{528U8 EventState; /* 00h */529U8 Reserved; /* 01h */530U16 Reserved1; /* 02h */531} EVENT_DATA_EVENT_CHANGE, MPI_POINTER PTR_EVENT_DATA_EVENT_CHANGE,532EventDataEventChange_t, MPI_POINTER pEventDataEventChange_t;533534/* LogEntryAdded Event data */535536/* this structure matches MPI_LOG_0_ENTRY in mpi_cnfg.h */537#define MPI_EVENT_DATA_LOG_ENTRY_DATA_LENGTH (0x1C)538typedef struct _EVENT_DATA_LOG_ENTRY539{540U32 TimeStamp; /* 00h */541U32 Reserved1; /* 04h */542U16 LogSequence; /* 08h */543U16 LogEntryQualifier; /* 0Ah */544U8 LogData[MPI_EVENT_DATA_LOG_ENTRY_DATA_LENGTH]; /* 0Ch */545} EVENT_DATA_LOG_ENTRY, MPI_POINTER PTR_EVENT_DATA_LOG_ENTRY,546MpiEventDataLogEntry_t, MPI_POINTER pMpiEventDataLogEntry_t;547548typedef struct _EVENT_DATA_LOG_ENTRY_ADDED549{550U16 LogSequence; /* 00h */551U16 Reserved1; /* 02h */552U32 Reserved2; /* 04h */553EVENT_DATA_LOG_ENTRY LogEntry; /* 08h */554} EVENT_DATA_LOG_ENTRY_ADDED, MPI_POINTER PTR_EVENT_DATA_LOG_ENTRY_ADDED,555MpiEventDataLogEntryAdded_t, MPI_POINTER pMpiEventDataLogEntryAdded_t;556557/* SCSI Event data for Port, Bus and Device forms */558559typedef struct _EVENT_DATA_SCSI560{561U8 TargetID; /* 00h */562U8 BusPort; /* 01h */563U16 Reserved; /* 02h */564} EVENT_DATA_SCSI, MPI_POINTER PTR_EVENT_DATA_SCSI,565EventDataScsi_t, MPI_POINTER pEventDataScsi_t;566567/* SCSI Device Status Change Event data */568569typedef struct _EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE570{571U8 TargetID; /* 00h */572U8 Bus; /* 01h */573U8 ReasonCode; /* 02h */574U8 LUN; /* 03h */575U8 ASC; /* 04h */576U8 ASCQ; /* 05h */577U16 Reserved; /* 06h */578} EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE,579MPI_POINTER PTR_EVENT_DATA_SCSI_DEVICE_STATUS_CHANGE,580MpiEventDataScsiDeviceStatusChange_t,581MPI_POINTER pMpiEventDataScsiDeviceStatusChange_t;582583/* MPI SCSI Device Status Change Event data ReasonCode values */584#define MPI_EVENT_SCSI_DEV_STAT_RC_ADDED (0x03)585#define MPI_EVENT_SCSI_DEV_STAT_RC_NOT_RESPONDING (0x04)586#define MPI_EVENT_SCSI_DEV_STAT_RC_SMART_DATA (0x05)587588/* SAS Device Status Change Event data */589590typedef struct _EVENT_DATA_SAS_DEVICE_STATUS_CHANGE591{592U8 TargetID; /* 00h */593U8 Bus; /* 01h */594U8 ReasonCode; /* 02h */595U8 Reserved; /* 03h */596U8 ASC; /* 04h */597U8 ASCQ; /* 05h */598U16 DevHandle; /* 06h */599U32 DeviceInfo; /* 08h */600U16 ParentDevHandle; /* 0Ch */601U8 PhyNum; /* 0Eh */602U8 Reserved1; /* 0Fh */603U64 SASAddress; /* 10h */604U8 LUN[8]; /* 18h */605U16 TaskTag; /* 20h */606U16 Reserved2; /* 22h */607} EVENT_DATA_SAS_DEVICE_STATUS_CHANGE,608MPI_POINTER PTR_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE,609MpiEventDataSasDeviceStatusChange_t,610MPI_POINTER pMpiEventDataSasDeviceStatusChange_t;611612/* MPI SAS Device Status Change Event data ReasonCode values */613#define MPI_EVENT_SAS_DEV_STAT_RC_ADDED (0x03)614#define MPI_EVENT_SAS_DEV_STAT_RC_NOT_RESPONDING (0x04)615#define MPI_EVENT_SAS_DEV_STAT_RC_SMART_DATA (0x05)616#define MPI_EVENT_SAS_DEV_STAT_RC_NO_PERSIST_ADDED (0x06)617#define MPI_EVENT_SAS_DEV_STAT_RC_UNSUPPORTED (0x07)618#define MPI_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08)619#define MPI_EVENT_SAS_DEV_STAT_RC_TASK_ABORT_INTERNAL (0x09)620#define MPI_EVENT_SAS_DEV_STAT_RC_ABORT_TASK_SET_INTERNAL (0x0A)621#define MPI_EVENT_SAS_DEV_STAT_RC_CLEAR_TASK_SET_INTERNAL (0x0B)622#define MPI_EVENT_SAS_DEV_STAT_RC_QUERY_TASK_INTERNAL (0x0C)623#define MPI_EVENT_SAS_DEV_STAT_RC_ASYNC_NOTIFICATION (0x0D)624#define MPI_EVENT_SAS_DEV_STAT_RC_CMPL_INTERNAL_DEV_RESET (0x0E)625#define MPI_EVENT_SAS_DEV_STAT_RC_CMPL_TASK_ABORT_INTERNAL (0x0F)626627628/* SCSI Event data for Queue Full event */629630typedef struct _EVENT_DATA_QUEUE_FULL631{632U8 TargetID; /* 00h */633U8 Bus; /* 01h */634U16 CurrentDepth; /* 02h */635} EVENT_DATA_QUEUE_FULL, MPI_POINTER PTR_EVENT_DATA_QUEUE_FULL,636EventDataQueueFull_t, MPI_POINTER pEventDataQueueFull_t;637638/* MPI Integrated RAID Event data */639640typedef struct _EVENT_DATA_RAID641{642U8 VolumeID; /* 00h */643U8 VolumeBus; /* 01h */644U8 ReasonCode; /* 02h */645U8 PhysDiskNum; /* 03h */646U8 ASC; /* 04h */647U8 ASCQ; /* 05h */648U16 Reserved; /* 06h */649U32 SettingsStatus; /* 08h */650} EVENT_DATA_RAID, MPI_POINTER PTR_EVENT_DATA_RAID,651MpiEventDataRaid_t, MPI_POINTER pMpiEventDataRaid_t;652653/* MPI Integrated RAID Event data ReasonCode values */654#define MPI_EVENT_RAID_RC_VOLUME_CREATED (0x00)655#define MPI_EVENT_RAID_RC_VOLUME_DELETED (0x01)656#define MPI_EVENT_RAID_RC_VOLUME_SETTINGS_CHANGED (0x02)657#define MPI_EVENT_RAID_RC_VOLUME_STATUS_CHANGED (0x03)658#define MPI_EVENT_RAID_RC_VOLUME_PHYSDISK_CHANGED (0x04)659#define MPI_EVENT_RAID_RC_PHYSDISK_CREATED (0x05)660#define MPI_EVENT_RAID_RC_PHYSDISK_DELETED (0x06)661#define MPI_EVENT_RAID_RC_PHYSDISK_SETTINGS_CHANGED (0x07)662#define MPI_EVENT_RAID_RC_PHYSDISK_STATUS_CHANGED (0x08)663#define MPI_EVENT_RAID_RC_DOMAIN_VAL_NEEDED (0x09)664#define MPI_EVENT_RAID_RC_SMART_DATA (0x0A)665#define MPI_EVENT_RAID_RC_REPLACE_ACTION_STARTED (0x0B)666667668/* MPI Integrated RAID Resync Update Event data */669670typedef struct _MPI_EVENT_DATA_IR_RESYNC_UPDATE671{672U8 VolumeID; /* 00h */673U8 VolumeBus; /* 01h */674U8 ResyncComplete; /* 02h */675U8 Reserved1; /* 03h */676U32 Reserved2; /* 04h */677} MPI_EVENT_DATA_IR_RESYNC_UPDATE,678MPI_POINTER PTR_MPI_EVENT_DATA_IR_RESYNC_UPDATE,679MpiEventDataIrResyncUpdate_t, MPI_POINTER pMpiEventDataIrResyncUpdate_t;680681/* MPI IR2 Event data */682683/* MPI_LD_STATE or MPI_PD_STATE */684typedef struct _IR2_STATE_CHANGED685{686U16 PreviousState; /* 00h */687U16 NewState; /* 02h */688} IR2_STATE_CHANGED, MPI_POINTER PTR_IR2_STATE_CHANGED;689690typedef struct _IR2_PD_INFO691{692U16 DeviceHandle; /* 00h */693U8 TruncEnclosureHandle; /* 02h */694U8 TruncatedSlot; /* 03h */695} IR2_PD_INFO, MPI_POINTER PTR_IR2_PD_INFO;696697typedef union _MPI_IR2_RC_EVENT_DATA698{699IR2_STATE_CHANGED StateChanged;700U32 Lba;701IR2_PD_INFO PdInfo;702} MPI_IR2_RC_EVENT_DATA, MPI_POINTER PTR_MPI_IR2_RC_EVENT_DATA;703704typedef struct _MPI_EVENT_DATA_IR2705{706U8 TargetID; /* 00h */707U8 Bus; /* 01h */708U8 ReasonCode; /* 02h */709U8 PhysDiskNum; /* 03h */710MPI_IR2_RC_EVENT_DATA IR2EventData; /* 04h */711} MPI_EVENT_DATA_IR2, MPI_POINTER PTR_MPI_EVENT_DATA_IR2,712MpiEventDataIR2_t, MPI_POINTER pMpiEventDataIR2_t;713714/* MPI IR2 Event data ReasonCode values */715#define MPI_EVENT_IR2_RC_LD_STATE_CHANGED (0x01)716#define MPI_EVENT_IR2_RC_PD_STATE_CHANGED (0x02)717#define MPI_EVENT_IR2_RC_BAD_BLOCK_TABLE_FULL (0x03)718#define MPI_EVENT_IR2_RC_PD_INSERTED (0x04)719#define MPI_EVENT_IR2_RC_PD_REMOVED (0x05)720#define MPI_EVENT_IR2_RC_FOREIGN_CFG_DETECTED (0x06)721#define MPI_EVENT_IR2_RC_REBUILD_MEDIUM_ERROR (0x07)722#define MPI_EVENT_IR2_RC_DUAL_PORT_ADDED (0x08)723#define MPI_EVENT_IR2_RC_DUAL_PORT_REMOVED (0x09)724725/* defines for logical disk states */726#define MPI_LD_STATE_OPTIMAL (0x00)727#define MPI_LD_STATE_DEGRADED (0x01)728#define MPI_LD_STATE_FAILED (0x02)729#define MPI_LD_STATE_MISSING (0x03)730#define MPI_LD_STATE_OFFLINE (0x04)731732/* defines for physical disk states */733#define MPI_PD_STATE_ONLINE (0x00)734#define MPI_PD_STATE_MISSING (0x01)735#define MPI_PD_STATE_NOT_COMPATIBLE (0x02)736#define MPI_PD_STATE_FAILED (0x03)737#define MPI_PD_STATE_INITIALIZING (0x04)738#define MPI_PD_STATE_OFFLINE_AT_HOST_REQUEST (0x05)739#define MPI_PD_STATE_FAILED_AT_HOST_REQUEST (0x06)740#define MPI_PD_STATE_OFFLINE_FOR_ANOTHER_REASON (0xFF)741742/* MPI Link Status Change Event data */743744typedef struct _EVENT_DATA_LINK_STATUS745{746U8 State; /* 00h */747U8 Reserved; /* 01h */748U16 Reserved1; /* 02h */749U8 Reserved2; /* 04h */750U8 Port; /* 05h */751U16 Reserved3; /* 06h */752} EVENT_DATA_LINK_STATUS, MPI_POINTER PTR_EVENT_DATA_LINK_STATUS,753EventDataLinkStatus_t, MPI_POINTER pEventDataLinkStatus_t;754755#define MPI_EVENT_LINK_STATUS_FAILURE (0x00000000)756#define MPI_EVENT_LINK_STATUS_ACTIVE (0x00000001)757758/* MPI Loop State Change Event data */759760typedef struct _EVENT_DATA_LOOP_STATE761{762U8 Character4; /* 00h */763U8 Character3; /* 01h */764U8 Type; /* 02h */765U8 Reserved; /* 03h */766U8 Reserved1; /* 04h */767U8 Port; /* 05h */768U16 Reserved2; /* 06h */769} EVENT_DATA_LOOP_STATE, MPI_POINTER PTR_EVENT_DATA_LOOP_STATE,770EventDataLoopState_t, MPI_POINTER pEventDataLoopState_t;771772#define MPI_EVENT_LOOP_STATE_CHANGE_LIP (0x0001)773#define MPI_EVENT_LOOP_STATE_CHANGE_LPE (0x0002)774#define MPI_EVENT_LOOP_STATE_CHANGE_LPB (0x0003)775776/* MPI LOGOUT Event data */777778typedef struct _EVENT_DATA_LOGOUT779{780U32 NPortID; /* 00h */781U8 AliasIndex; /* 04h */782U8 Port; /* 05h */783U16 Reserved1; /* 06h */784} EVENT_DATA_LOGOUT, MPI_POINTER PTR_EVENT_DATA_LOGOUT,785EventDataLogout_t, MPI_POINTER pEventDataLogout_t;786787#define MPI_EVENT_LOGOUT_ALL_ALIASES (0xFF)788789/* SAS SES Event data */790791typedef struct _EVENT_DATA_SAS_SES792{793U8 PhyNum; /* 00h */794U8 Port; /* 01h */795U8 PortWidth; /* 02h */796U8 Reserved1; /* 04h */797} EVENT_DATA_SAS_SES, MPI_POINTER PTR_EVENT_DATA_SAS_SES,798MpiEventDataSasSes_t, MPI_POINTER pMpiEventDataSasSes_t;799800/* SAS Broadcast Primitive Event data */801802typedef struct _EVENT_DATA_SAS_BROADCAST_PRIMITIVE803{804U8 PhyNum; /* 00h */805U8 Port; /* 01h */806U8 PortWidth; /* 02h */807U8 Primitive; /* 04h */808} EVENT_DATA_SAS_BROADCAST_PRIMITIVE,809MPI_POINTER PTR_EVENT_DATA_SAS_BROADCAST_PRIMITIVE,810MpiEventDataSasBroadcastPrimitive_t,811MPI_POINTER pMpiEventDataSasBroadcastPrimitive_t;812813#define MPI_EVENT_PRIMITIVE_CHANGE (0x01)814#define MPI_EVENT_PRIMITIVE_EXPANDER (0x03)815#define MPI_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT (0x04)816#define MPI_EVENT_PRIMITIVE_RESERVED3 (0x05)817#define MPI_EVENT_PRIMITIVE_RESERVED4 (0x06)818#define MPI_EVENT_PRIMITIVE_CHANGE0_RESERVED (0x07)819#define MPI_EVENT_PRIMITIVE_CHANGE1_RESERVED (0x08)820821/* SAS Phy Link Status Event data */822823typedef struct _EVENT_DATA_SAS_PHY_LINK_STATUS824{825U8 PhyNum; /* 00h */826U8 LinkRates; /* 01h */827U16 DevHandle; /* 02h */828U64 SASAddress; /* 04h */829} EVENT_DATA_SAS_PHY_LINK_STATUS, MPI_POINTER PTR_EVENT_DATA_SAS_PHY_LINK_STATUS,830MpiEventDataSasPhyLinkStatus_t, MPI_POINTER pMpiEventDataSasPhyLinkStatus_t;831832/* defines for the LinkRates field of the SAS PHY Link Status event */833#define MPI_EVENT_SAS_PLS_LR_CURRENT_MASK (0xF0)834#define MPI_EVENT_SAS_PLS_LR_CURRENT_SHIFT (4)835#define MPI_EVENT_SAS_PLS_LR_PREVIOUS_MASK (0x0F)836#define MPI_EVENT_SAS_PLS_LR_PREVIOUS_SHIFT (0)837#define MPI_EVENT_SAS_PLS_LR_RATE_UNKNOWN (0x00)838#define MPI_EVENT_SAS_PLS_LR_RATE_PHY_DISABLED (0x01)839#define MPI_EVENT_SAS_PLS_LR_RATE_FAILED_SPEED_NEGOTIATION (0x02)840#define MPI_EVENT_SAS_PLS_LR_RATE_SATA_OOB_COMPLETE (0x03)841#define MPI_EVENT_SAS_PLS_LR_RATE_1_5 (0x08)842#define MPI_EVENT_SAS_PLS_LR_RATE_3_0 (0x09)843#define MPI_EVENT_SAS_PLS_LR_RATE_6_0 (0x0A)844845/* SAS Discovery Event data */846847typedef struct _EVENT_DATA_SAS_DISCOVERY848{849U32 DiscoveryStatus; /* 00h */850U32 Reserved1; /* 04h */851} EVENT_DATA_SAS_DISCOVERY, MPI_POINTER PTR_EVENT_DATA_SAS_DISCOVERY,852EventDataSasDiscovery_t, MPI_POINTER pEventDataSasDiscovery_t;853854#define MPI_EVENT_SAS_DSCVRY_COMPLETE (0x00000000)855#define MPI_EVENT_SAS_DSCVRY_IN_PROGRESS (0x00000001)856#define MPI_EVENT_SAS_DSCVRY_PHY_BITS_MASK (0xFFFF0000)857#define MPI_EVENT_SAS_DSCVRY_PHY_BITS_SHIFT (16)858859/* SAS Discovery Errror Event data */860861typedef struct _EVENT_DATA_DISCOVERY_ERROR862{863U32 DiscoveryStatus; /* 00h */864U8 Port; /* 04h */865U8 Reserved1; /* 05h */866U16 Reserved2; /* 06h */867} EVENT_DATA_DISCOVERY_ERROR, MPI_POINTER PTR_EVENT_DATA_DISCOVERY_ERROR,868EventDataDiscoveryError_t, MPI_POINTER pEventDataDiscoveryError_t;869870#define MPI_EVENT_DSCVRY_ERR_DS_LOOP_DETECTED (0x00000001)871#define MPI_EVENT_DSCVRY_ERR_DS_UNADDRESSABLE_DEVICE (0x00000002)872#define MPI_EVENT_DSCVRY_ERR_DS_MULTIPLE_PORTS (0x00000004)873#define MPI_EVENT_DSCVRY_ERR_DS_EXPANDER_ERR (0x00000008)874#define MPI_EVENT_DSCVRY_ERR_DS_SMP_TIMEOUT (0x00000010)875#define MPI_EVENT_DSCVRY_ERR_DS_OUT_ROUTE_ENTRIES (0x00000020)876#define MPI_EVENT_DSCVRY_ERR_DS_INDEX_NOT_EXIST (0x00000040)877#define MPI_EVENT_DSCVRY_ERR_DS_SMP_FUNCTION_FAILED (0x00000080)878#define MPI_EVENT_DSCVRY_ERR_DS_SMP_CRC_ERROR (0x00000100)879#define MPI_EVENT_DSCVRY_ERR_DS_MULTPL_SUBTRACTIVE (0x00000200)880#define MPI_EVENT_DSCVRY_ERR_DS_TABLE_TO_TABLE (0x00000400)881#define MPI_EVENT_DSCVRY_ERR_DS_UNSUPPORTED_DEVICE (0x00000800)882#define MPI_EVENT_DSCVRY_ERR_DS_MAX_SATA_TARGETS (0x00001000)883#define MPI_EVENT_DSCVRY_ERR_DS_MULTI_PORT_DOMAIN (0x00002000)884#define MPI_EVENT_DSCVRY_ERR_DS_SATA_INIT_FAILURE (0x00004000)885886/* SAS SMP Error Event data */887888typedef struct _EVENT_DATA_SAS_SMP_ERROR889{890U8 Status; /* 00h */891U8 Port; /* 01h */892U8 SMPFunctionResult; /* 02h */893U8 Reserved1; /* 03h */894U64 SASAddress; /* 04h */895} EVENT_DATA_SAS_SMP_ERROR, MPI_POINTER PTR_EVENT_DATA_SAS_SMP_ERROR,896MpiEventDataSasSmpError_t, MPI_POINTER pMpiEventDataSasSmpError_t;897898/* defines for the Status field of the SAS SMP Error event */899#define MPI_EVENT_SAS_SMP_FUNCTION_RESULT_VALID (0x00)900#define MPI_EVENT_SAS_SMP_CRC_ERROR (0x01)901#define MPI_EVENT_SAS_SMP_TIMEOUT (0x02)902#define MPI_EVENT_SAS_SMP_NO_DESTINATION (0x03)903#define MPI_EVENT_SAS_SMP_BAD_DESTINATION (0x04)904905/* SAS Initiator Device Status Change Event data */906907typedef struct _EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE908{909U8 ReasonCode; /* 00h */910U8 Port; /* 01h */911U16 DevHandle; /* 02h */912U64 SASAddress; /* 04h */913} EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE,914MPI_POINTER PTR_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE,915MpiEventDataSasInitDevStatusChange_t,916MPI_POINTER pMpiEventDataSasInitDevStatusChange_t;917918/* defines for the ReasonCode field of the SAS Initiator Device Status Change event */919#define MPI_EVENT_SAS_INIT_RC_ADDED (0x01)920#define MPI_EVENT_SAS_INIT_RC_REMOVED (0x02)921#define MPI_EVENT_SAS_INIT_RC_INACCESSIBLE (0x03)922923/* SAS Initiator Device Table Overflow Event data */924925typedef struct _EVENT_DATA_SAS_INIT_TABLE_OVERFLOW926{927U8 MaxInit; /* 00h */928U8 CurrentInit; /* 01h */929U16 Reserved1; /* 02h */930U64 SASAddress; /* 04h */931} EVENT_DATA_SAS_INIT_TABLE_OVERFLOW,932MPI_POINTER PTR_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW,933MpiEventDataSasInitTableOverflow_t,934MPI_POINTER pMpiEventDataSasInitTableOverflow_t;935936/* SAS Expander Status Change Event data */937938typedef struct _EVENT_DATA_SAS_EXPANDER_STATUS_CHANGE939{940U8 ReasonCode; /* 00h */941U8 Reserved1; /* 01h */942U16 Reserved2; /* 02h */943U8 PhysicalPort; /* 04h */944U8 Reserved3; /* 05h */945U16 EnclosureHandle; /* 06h */946U64 SASAddress; /* 08h */947U32 DiscoveryStatus; /* 10h */948U16 DevHandle; /* 14h */949U16 ParentDevHandle; /* 16h */950U16 ExpanderChangeCount; /* 18h */951U16 ExpanderRouteIndexes; /* 1Ah */952U8 NumPhys; /* 1Ch */953U8 SASLevel; /* 1Dh */954U8 Flags; /* 1Eh */955U8 Reserved4; /* 1Fh */956} EVENT_DATA_SAS_EXPANDER_STATUS_CHANGE,957MPI_POINTER PTR_EVENT_DATA_SAS_EXPANDER_STATUS_CHANGE,958MpiEventDataSasExpanderStatusChange_t,959MPI_POINTER pMpiEventDataSasExpanderStatusChange_t;960961/* values for ReasonCode field of SAS Expander Status Change Event data */962#define MPI_EVENT_SAS_EXP_RC_ADDED (0x00)963#define MPI_EVENT_SAS_EXP_RC_NOT_RESPONDING (0x01)964965/* values for DiscoveryStatus field of SAS Expander Status Change Event data */966#define MPI_EVENT_SAS_EXP_DS_LOOP_DETECTED (0x00000001)967#define MPI_EVENT_SAS_EXP_DS_UNADDRESSABLE_DEVICE (0x00000002)968#define MPI_EVENT_SAS_EXP_DS_MULTIPLE_PORTS (0x00000004)969#define MPI_EVENT_SAS_EXP_DS_EXPANDER_ERR (0x00000008)970#define MPI_EVENT_SAS_EXP_DS_SMP_TIMEOUT (0x00000010)971#define MPI_EVENT_SAS_EXP_DS_OUT_ROUTE_ENTRIES (0x00000020)972#define MPI_EVENT_SAS_EXP_DS_INDEX_NOT_EXIST (0x00000040)973#define MPI_EVENT_SAS_EXP_DS_SMP_FUNCTION_FAILED (0x00000080)974#define MPI_EVENT_SAS_EXP_DS_SMP_CRC_ERROR (0x00000100)975#define MPI_EVENT_SAS_EXP_DS_SUBTRACTIVE_LINK (0x00000200)976#define MPI_EVENT_SAS_EXP_DS_TABLE_LINK (0x00000400)977#define MPI_EVENT_SAS_EXP_DS_UNSUPPORTED_DEVICE (0x00000800)978979/* values for Flags field of SAS Expander Status Change Event data */980#define MPI_EVENT_SAS_EXP_FLAGS_ROUTE_TABLE_CONFIG (0x02)981#define MPI_EVENT_SAS_EXP_FLAGS_CONFIG_IN_PROGRESS (0x01)982983984985/*****************************************************************************986*987* F i r m w a r e L o a d M e s s a g e s988*989*****************************************************************************/990991/****************************************************************************/992/* Firmware Download message and associated structures */993/****************************************************************************/994995typedef struct _MSG_FW_DOWNLOAD996{997U8 ImageType; /* 00h */998U8 Reserved; /* 01h */999U8 ChainOffset; /* 02h */1000U8 Function; /* 03h */1001U8 Reserved1[3]; /* 04h */1002U8 MsgFlags; /* 07h */1003U32 MsgContext; /* 08h */1004SGE_MPI_UNION SGL; /* 0Ch */1005} MSG_FW_DOWNLOAD, MPI_POINTER PTR_MSG_FW_DOWNLOAD,1006FWDownload_t, MPI_POINTER pFWDownload_t;10071008#define MPI_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT (0x01)10091010#define MPI_FW_DOWNLOAD_ITYPE_RESERVED (0x00)1011#define MPI_FW_DOWNLOAD_ITYPE_FW (0x01)1012#define MPI_FW_DOWNLOAD_ITYPE_BIOS (0x02)1013#define MPI_FW_DOWNLOAD_ITYPE_NVDATA (0x03)1014#define MPI_FW_DOWNLOAD_ITYPE_BOOTLOADER (0x04)1015#define MPI_FW_DOWNLOAD_ITYPE_MANUFACTURING (0x06)1016#define MPI_FW_DOWNLOAD_ITYPE_CONFIG_1 (0x07)1017#define MPI_FW_DOWNLOAD_ITYPE_CONFIG_2 (0x08)1018#define MPI_FW_DOWNLOAD_ITYPE_MEGARAID (0x09)1019#define MPI_FW_DOWNLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B)102010211022typedef struct _FWDownloadTCSGE1023{1024U8 Reserved; /* 00h */1025U8 ContextSize; /* 01h */1026U8 DetailsLength; /* 02h */1027U8 Flags; /* 03h */1028U32 Reserved_0100_Checksum; /* 04h */ /* obsolete Checksum */1029U32 ImageOffset; /* 08h */1030U32 ImageSize; /* 0Ch */1031} FW_DOWNLOAD_TCSGE, MPI_POINTER PTR_FW_DOWNLOAD_TCSGE,1032FWDownloadTCSGE_t, MPI_POINTER pFWDownloadTCSGE_t;10331034/* Firmware Download reply */1035typedef struct _MSG_FW_DOWNLOAD_REPLY1036{1037U8 ImageType; /* 00h */1038U8 Reserved; /* 01h */1039U8 MsgLength; /* 02h */1040U8 Function; /* 03h */1041U8 Reserved1[3]; /* 04h */1042U8 MsgFlags; /* 07h */1043U32 MsgContext; /* 08h */1044U16 Reserved2; /* 0Ch */1045U16 IOCStatus; /* 0Eh */1046U32 IOCLogInfo; /* 10h */1047} MSG_FW_DOWNLOAD_REPLY, MPI_POINTER PTR_MSG_FW_DOWNLOAD_REPLY,1048FWDownloadReply_t, MPI_POINTER pFWDownloadReply_t;104910501051/****************************************************************************/1052/* Firmware Upload message and associated structures */1053/****************************************************************************/10541055typedef struct _MSG_FW_UPLOAD1056{1057U8 ImageType; /* 00h */1058U8 Reserved; /* 01h */1059U8 ChainOffset; /* 02h */1060U8 Function; /* 03h */1061U8 Reserved1[3]; /* 04h */1062U8 MsgFlags; /* 07h */1063U32 MsgContext; /* 08h */1064SGE_MPI_UNION SGL; /* 0Ch */1065} MSG_FW_UPLOAD, MPI_POINTER PTR_MSG_FW_UPLOAD,1066FWUpload_t, MPI_POINTER pFWUpload_t;10671068#define MPI_FW_UPLOAD_ITYPE_FW_IOC_MEM (0x00)1069#define MPI_FW_UPLOAD_ITYPE_FW_FLASH (0x01)1070#define MPI_FW_UPLOAD_ITYPE_BIOS_FLASH (0x02)1071#define MPI_FW_UPLOAD_ITYPE_NVDATA (0x03)1072#define MPI_FW_UPLOAD_ITYPE_BOOTLOADER (0x04)1073#define MPI_FW_UPLOAD_ITYPE_FW_BACKUP (0x05)1074#define MPI_FW_UPLOAD_ITYPE_MANUFACTURING (0x06)1075#define MPI_FW_UPLOAD_ITYPE_CONFIG_1 (0x07)1076#define MPI_FW_UPLOAD_ITYPE_CONFIG_2 (0x08)1077#define MPI_FW_UPLOAD_ITYPE_MEGARAID (0x09)1078#define MPI_FW_UPLOAD_ITYPE_COMPLETE (0x0A)1079#define MPI_FW_UPLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B)10801081typedef struct _FWUploadTCSGE1082{1083U8 Reserved; /* 00h */1084U8 ContextSize; /* 01h */1085U8 DetailsLength; /* 02h */1086U8 Flags; /* 03h */1087U32 Reserved1; /* 04h */1088U32 ImageOffset; /* 08h */1089U32 ImageSize; /* 0Ch */1090} FW_UPLOAD_TCSGE, MPI_POINTER PTR_FW_UPLOAD_TCSGE,1091FWUploadTCSGE_t, MPI_POINTER pFWUploadTCSGE_t;10921093/* Firmware Upload reply */1094typedef struct _MSG_FW_UPLOAD_REPLY1095{1096U8 ImageType; /* 00h */1097U8 Reserved; /* 01h */1098U8 MsgLength; /* 02h */1099U8 Function; /* 03h */1100U8 Reserved1[3]; /* 04h */1101U8 MsgFlags; /* 07h */1102U32 MsgContext; /* 08h */1103U16 Reserved2; /* 0Ch */1104U16 IOCStatus; /* 0Eh */1105U32 IOCLogInfo; /* 10h */1106U32 ActualImageSize; /* 14h */1107} MSG_FW_UPLOAD_REPLY, MPI_POINTER PTR_MSG_FW_UPLOAD_REPLY,1108FWUploadReply_t, MPI_POINTER pFWUploadReply_t;110911101111typedef struct _MPI_FW_HEADER1112{1113U32 ArmBranchInstruction0; /* 00h */1114U32 Signature0; /* 04h */1115U32 Signature1; /* 08h */1116U32 Signature2; /* 0Ch */1117U32 ArmBranchInstruction1; /* 10h */1118U32 ArmBranchInstruction2; /* 14h */1119U32 Reserved; /* 18h */1120U32 Checksum; /* 1Ch */1121U16 VendorId; /* 20h */1122U16 ProductId; /* 22h */1123MPI_FW_VERSION FWVersion; /* 24h */1124U32 SeqCodeVersion; /* 28h */1125U32 ImageSize; /* 2Ch */1126U32 NextImageHeaderOffset; /* 30h */1127U32 LoadStartAddress; /* 34h */1128U32 IopResetVectorValue; /* 38h */1129U32 IopResetRegAddr; /* 3Ch */1130U32 VersionNameWhat; /* 40h */1131U8 VersionName[32]; /* 44h */1132U32 VendorNameWhat; /* 64h */1133U8 VendorName[32]; /* 68h */1134} MPI_FW_HEADER, MPI_POINTER PTR_MPI_FW_HEADER,1135MpiFwHeader_t, MPI_POINTER pMpiFwHeader_t;11361137#define MPI_FW_HEADER_WHAT_SIGNATURE (0x29232840)11381139/* defines for using the ProductId field */1140#define MPI_FW_HEADER_PID_TYPE_MASK (0xF000)1141#define MPI_FW_HEADER_PID_TYPE_SCSI (0x0000)1142#define MPI_FW_HEADER_PID_TYPE_FC (0x1000)1143#define MPI_FW_HEADER_PID_TYPE_SAS (0x2000)11441145#define MPI_FW_HEADER_SIGNATURE_0 (0x5AEAA55A)1146#define MPI_FW_HEADER_SIGNATURE_1 (0xA55AEAA5)1147#define MPI_FW_HEADER_SIGNATURE_2 (0x5AA55AEA)11481149#define MPI_FW_HEADER_PID_PROD_MASK (0x0F00)1150#define MPI_FW_HEADER_PID_PROD_INITIATOR_SCSI (0x0100)1151#define MPI_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI (0x0200)1152#define MPI_FW_HEADER_PID_PROD_TARGET_SCSI (0x0300)1153#define MPI_FW_HEADER_PID_PROD_IM_SCSI (0x0400)1154#define MPI_FW_HEADER_PID_PROD_IS_SCSI (0x0500)1155#define MPI_FW_HEADER_PID_PROD_CTX_SCSI (0x0600)1156#define MPI_FW_HEADER_PID_PROD_IR_SCSI (0x0700)11571158#define MPI_FW_HEADER_PID_FAMILY_MASK (0x00FF)1159/* SCSI */1160#define MPI_FW_HEADER_PID_FAMILY_1030A0_SCSI (0x0001)1161#define MPI_FW_HEADER_PID_FAMILY_1030B0_SCSI (0x0002)1162#define MPI_FW_HEADER_PID_FAMILY_1030B1_SCSI (0x0003)1163#define MPI_FW_HEADER_PID_FAMILY_1030C0_SCSI (0x0004)1164#define MPI_FW_HEADER_PID_FAMILY_1020A0_SCSI (0x0005)1165#define MPI_FW_HEADER_PID_FAMILY_1020B0_SCSI (0x0006)1166#define MPI_FW_HEADER_PID_FAMILY_1020B1_SCSI (0x0007)1167#define MPI_FW_HEADER_PID_FAMILY_1020C0_SCSI (0x0008)1168#define MPI_FW_HEADER_PID_FAMILY_1035A0_SCSI (0x0009)1169#define MPI_FW_HEADER_PID_FAMILY_1035B0_SCSI (0x000A)1170#define MPI_FW_HEADER_PID_FAMILY_1030TA0_SCSI (0x000B)1171#define MPI_FW_HEADER_PID_FAMILY_1020TA0_SCSI (0x000C)1172/* Fibre Channel */1173#define MPI_FW_HEADER_PID_FAMILY_909_FC (0x0000)1174#define MPI_FW_HEADER_PID_FAMILY_919_FC (0x0001) /* 919 and 929 */1175#define MPI_FW_HEADER_PID_FAMILY_919X_FC (0x0002) /* 919X and 929X */1176#define MPI_FW_HEADER_PID_FAMILY_919XL_FC (0x0003) /* 919XL and 929XL */1177#define MPI_FW_HEADER_PID_FAMILY_939X_FC (0x0004) /* 939X and 949X */1178#define MPI_FW_HEADER_PID_FAMILY_959_FC (0x0005)1179#define MPI_FW_HEADER_PID_FAMILY_949E_FC (0x0006)1180/* SAS */1181#define MPI_FW_HEADER_PID_FAMILY_1064_SAS (0x0001)1182#define MPI_FW_HEADER_PID_FAMILY_1068_SAS (0x0002)1183#define MPI_FW_HEADER_PID_FAMILY_1078_SAS (0x0003)1184#define MPI_FW_HEADER_PID_FAMILY_106xE_SAS (0x0004) /* 1068E, 1066E, and 1064E */11851186typedef struct _MPI_EXT_IMAGE_HEADER1187{1188U8 ImageType; /* 00h */1189U8 Reserved; /* 01h */1190U16 Reserved1; /* 02h */1191U32 Checksum; /* 04h */1192U32 ImageSize; /* 08h */1193U32 NextImageHeaderOffset; /* 0Ch */1194U32 LoadStartAddress; /* 10h */1195U32 Reserved2; /* 14h */1196} MPI_EXT_IMAGE_HEADER, MPI_POINTER PTR_MPI_EXT_IMAGE_HEADER,1197MpiExtImageHeader_t, MPI_POINTER pMpiExtImageHeader_t;11981199/* defines for the ImageType field */1200#define MPI_EXT_IMAGE_TYPE_UNSPECIFIED (0x00)1201#define MPI_EXT_IMAGE_TYPE_FW (0x01)1202#define MPI_EXT_IMAGE_TYPE_NVDATA (0x03)1203#define MPI_EXT_IMAGE_TYPE_BOOTLOADER (0x04)1204#define MPI_EXT_IMAGE_TYPE_INITIALIZATION (0x05)12051206#endif120712081209