xref: /freebsd/sys/dev/mpr/mpi/mpi2_ioc.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1991554f2SKenneth D. Merry /*-
2*8736c018SKashyap D Desai  *  Copyright 2000-2020 Broadcom Inc. All rights reserved.
3991554f2SKenneth D. Merry  *
4991554f2SKenneth D. Merry  * Redistribution and use in source and binary forms, with or without
5991554f2SKenneth D. Merry  * modification, are permitted provided that the following conditions
6991554f2SKenneth D. Merry  * are met:
7991554f2SKenneth D. Merry  * 1. Redistributions of source code must retain the above copyright
8991554f2SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer.
9991554f2SKenneth D. Merry  * 2. Redistributions in binary form must reproduce the above copyright
10991554f2SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer in the
11991554f2SKenneth D. Merry  *    documentation and/or other materials provided with the distribution.
12991554f2SKenneth D. Merry  * 3. Neither the name of the author nor the names of any co-contributors
13991554f2SKenneth D. Merry  *    may be used to endorse or promote products derived from this software
14991554f2SKenneth D. Merry  *    without specific prior written permission.
15991554f2SKenneth D. Merry  *
16991554f2SKenneth D. Merry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17991554f2SKenneth D. Merry  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18991554f2SKenneth D. Merry  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19991554f2SKenneth D. Merry  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20991554f2SKenneth D. Merry  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21991554f2SKenneth D. Merry  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22991554f2SKenneth D. Merry  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23991554f2SKenneth D. Merry  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24991554f2SKenneth D. Merry  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25991554f2SKenneth D. Merry  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26991554f2SKenneth D. Merry  * SUCH DAMAGE.
27991554f2SKenneth D. Merry  *
28*8736c018SKashyap D Desai  * Broadcom Inc. (LSI) MPT-Fusion Host Adapter FreeBSD
29991554f2SKenneth D. Merry  */
30991554f2SKenneth D. Merry 
31991554f2SKenneth D. Merry /*
32*8736c018SKashyap D Desai  *  Copyright 2000-2020 Broadcom Inc. All rights reserved.
33991554f2SKenneth D. Merry  *
34991554f2SKenneth D. Merry  *
35991554f2SKenneth D. Merry  *           Name:  mpi2_ioc.h
36991554f2SKenneth D. Merry  *          Title:  MPI IOC, Port, Event, FW Download, and FW Upload messages
37991554f2SKenneth D. Merry  *  Creation Date:  October 11, 2006
38991554f2SKenneth D. Merry  *
39*8736c018SKashyap D Desai  *  mpi2_ioc.h Version:  02.00.36
40991554f2SKenneth D. Merry  *
41991554f2SKenneth D. Merry  *  NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
42991554f2SKenneth D. Merry  *        prefix are for use only on MPI v2.5 products, and must not be used
43991554f2SKenneth D. Merry  *        with MPI v2.0 products. Unless otherwise noted, names beginning with
44991554f2SKenneth D. Merry  *        MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products.
45991554f2SKenneth D. Merry  *
46991554f2SKenneth D. Merry  *  Version History
47991554f2SKenneth D. Merry  *  ---------------
48991554f2SKenneth D. Merry  *
49991554f2SKenneth D. Merry  *  Date      Version   Description
50991554f2SKenneth D. Merry  *  --------  --------  ------------------------------------------------------
51991554f2SKenneth D. Merry  *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
52991554f2SKenneth D. Merry  *  06-04-07  02.00.01  In IOCFacts Reply structure, renamed MaxDevices to
53991554f2SKenneth D. Merry  *                      MaxTargets.
54991554f2SKenneth D. Merry  *                      Added TotalImageSize field to FWDownload Request.
55991554f2SKenneth D. Merry  *                      Added reserved words to FWUpload Request.
56991554f2SKenneth D. Merry  *  06-26-07  02.00.02  Added IR Configuration Change List Event.
57991554f2SKenneth D. Merry  *  08-31-07  02.00.03  Removed SystemReplyQueueDepth field from the IOCInit
58991554f2SKenneth D. Merry  *                      request and replaced it with
59991554f2SKenneth D. Merry  *                      ReplyDescriptorPostQueueDepth and ReplyFreeQueueDepth.
60991554f2SKenneth D. Merry  *                      Replaced the MinReplyQueueDepth field of the IOCFacts
61991554f2SKenneth D. Merry  *                      reply with MaxReplyDescriptorPostQueueDepth.
62991554f2SKenneth D. Merry  *                      Added MPI2_RDPQ_DEPTH_MIN define to specify the minimum
63991554f2SKenneth D. Merry  *                      depth for the Reply Descriptor Post Queue.
64991554f2SKenneth D. Merry  *                      Added SASAddress field to Initiator Device Table
65991554f2SKenneth D. Merry  *                      Overflow Event data.
66991554f2SKenneth D. Merry  *  10-31-07  02.00.04  Added ReasonCode MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING
67991554f2SKenneth D. Merry  *                      for SAS Initiator Device Status Change Event data.
68991554f2SKenneth D. Merry  *                      Modified Reason Code defines for SAS Topology Change
69991554f2SKenneth D. Merry  *                      List Event data, including adding a bit for PHY Vacant
70991554f2SKenneth D. Merry  *                      status, and adding a mask for the Reason Code.
71991554f2SKenneth D. Merry  *                      Added define for
72991554f2SKenneth D. Merry  *                      MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING.
73991554f2SKenneth D. Merry  *                      Added define for MPI2_EXT_IMAGE_TYPE_MEGARAID.
74991554f2SKenneth D. Merry  *  12-18-07  02.00.05  Added Boot Status defines for the IOCExceptions field of
75991554f2SKenneth D. Merry  *                      the IOCFacts Reply.
76991554f2SKenneth D. Merry  *                      Removed MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define.
77991554f2SKenneth D. Merry  *                      Moved MPI2_VERSION_UNION to mpi2.h.
78991554f2SKenneth D. Merry  *                      Changed MPI2_EVENT_NOTIFICATION_REQUEST to use masks
79991554f2SKenneth D. Merry  *                      instead of enables, and added SASBroadcastPrimitiveMasks
80991554f2SKenneth D. Merry  *                      field.
81991554f2SKenneth D. Merry  *                      Added Log Entry Added Event and related structure.
82991554f2SKenneth D. Merry  *  02-29-08  02.00.06  Added define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID.
83991554f2SKenneth D. Merry  *                      Removed define MPI2_IOCFACTS_PROTOCOL_SMP_TARGET.
84991554f2SKenneth D. Merry  *                      Added MaxVolumes and MaxPersistentEntries fields to
85991554f2SKenneth D. Merry  *                      IOCFacts reply.
86991554f2SKenneth D. Merry  *                      Added ProtocalFlags and IOCCapabilities fields to
87991554f2SKenneth D. Merry  *                      MPI2_FW_IMAGE_HEADER.
88991554f2SKenneth D. Merry  *                      Removed MPI2_PORTENABLE_FLAGS_ENABLE_SINGLE_PORT.
89991554f2SKenneth D. Merry  *  03-03-08  02.00.07  Fixed MPI2_FW_IMAGE_HEADER by changing Reserved26 to
90991554f2SKenneth D. Merry  *                      a U16 (from a U32).
91991554f2SKenneth D. Merry  *                      Removed extra 's' from EventMasks name.
92991554f2SKenneth D. Merry  *  06-27-08  02.00.08  Fixed an offset in a comment.
93991554f2SKenneth D. Merry  *  10-02-08  02.00.09  Removed SystemReplyFrameSize from MPI2_IOC_INIT_REQUEST.
94991554f2SKenneth D. Merry  *                      Removed CurReplyFrameSize from MPI2_IOC_FACTS_REPLY and
95991554f2SKenneth D. Merry  *                      renamed MinReplyFrameSize to ReplyFrameSize.
96991554f2SKenneth D. Merry  *                      Added MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX.
97991554f2SKenneth D. Merry  *                      Added two new RAIDOperation values for Integrated RAID
98991554f2SKenneth D. Merry  *                      Operations Status Event data.
99991554f2SKenneth D. Merry  *                      Added four new IR Configuration Change List Event data
100991554f2SKenneth D. Merry  *                      ReasonCode values.
101991554f2SKenneth D. Merry  *                      Added two new ReasonCode defines for SAS Device Status
102991554f2SKenneth D. Merry  *                      Change Event data.
103991554f2SKenneth D. Merry  *                      Added three new DiscoveryStatus bits for the SAS
104991554f2SKenneth D. Merry  *                      Discovery event data.
105991554f2SKenneth D. Merry  *                      Added Multiplexing Status Change bit to the PhyStatus
106991554f2SKenneth D. Merry  *                      field of the SAS Topology Change List event data.
107991554f2SKenneth D. Merry  *                      Removed define for MPI2_INIT_IMAGE_BOOTFLAGS_XMEMCOPY.
108991554f2SKenneth D. Merry  *                      BootFlags are now product-specific.
109991554f2SKenneth D. Merry  *                      Added defines for the indivdual signature bytes
110991554f2SKenneth D. Merry  *                      for MPI2_INIT_IMAGE_FOOTER.
111991554f2SKenneth D. Merry  *  01-19-09  02.00.10  Added MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY define.
112991554f2SKenneth D. Merry  *                      Added MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR
113991554f2SKenneth D. Merry  *                      define.
114991554f2SKenneth D. Merry  *                      Added MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE
115991554f2SKenneth D. Merry  *                      define.
116991554f2SKenneth D. Merry  *                      Removed MPI2_EVENT_SAS_DISC_DS_SATA_INIT_FAILURE define.
117991554f2SKenneth D. Merry  *  05-06-09  02.00.11  Added MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR define.
118991554f2SKenneth D. Merry  *                      Added MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX define.
119991554f2SKenneth D. Merry  *                      Added two new reason codes for SAS Device Status Change
120991554f2SKenneth D. Merry  *                      Event.
121991554f2SKenneth D. Merry  *                      Added new event: SAS PHY Counter.
122991554f2SKenneth D. Merry  *  07-30-09  02.00.12  Added GPIO Interrupt event define and structure.
123991554f2SKenneth D. Merry  *                      Added MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER define.
124991554f2SKenneth D. Merry  *                      Added new product id family for 2208.
125991554f2SKenneth D. Merry  *  10-28-09  02.00.13  Added HostMSIxVectors field to MPI2_IOC_INIT_REQUEST.
126991554f2SKenneth D. Merry  *                      Added MaxMSIxVectors field to MPI2_IOC_FACTS_REPLY.
127991554f2SKenneth D. Merry  *                      Added MinDevHandle field to MPI2_IOC_FACTS_REPLY.
128991554f2SKenneth D. Merry  *                      Added MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY.
129991554f2SKenneth D. Merry  *                      Added MPI2_EVENT_HOST_BASED_DISCOVERY_PHY define.
130991554f2SKenneth D. Merry  *                      Added MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER define.
131991554f2SKenneth D. Merry  *                      Added Host Based Discovery Phy Event data.
132991554f2SKenneth D. Merry  *                      Added defines for ProductID Product field
133991554f2SKenneth D. Merry  *                      (MPI2_FW_HEADER_PID_).
134991554f2SKenneth D. Merry  *                      Modified values for SAS ProductID Family
135991554f2SKenneth D. Merry  *                      (MPI2_FW_HEADER_PID_FAMILY_).
136991554f2SKenneth D. Merry  *  02-10-10  02.00.14  Added SAS Quiesce Event structure and defines.
137991554f2SKenneth D. Merry  *                      Added PowerManagementControl Request structures and
138991554f2SKenneth D. Merry  *                      defines.
139991554f2SKenneth D. Merry  *  05-12-10  02.00.15  Marked Task Set Full Event as obsolete.
140991554f2SKenneth D. Merry  *                      Added MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY define.
141991554f2SKenneth D. Merry  *  11-10-10  02.00.16  Added MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC.
142991554f2SKenneth D. Merry  *  02-23-11  02.00.17  Added SAS NOTIFY Primitive event, and added
143991554f2SKenneth D. Merry  *                      SASNotifyPrimitiveMasks field to
144991554f2SKenneth D. Merry  *                      MPI2_EVENT_NOTIFICATION_REQUEST.
145991554f2SKenneth D. Merry  *                      Added Temperature Threshold Event.
146991554f2SKenneth D. Merry  *                      Added Host Message Event.
147991554f2SKenneth D. Merry  *                      Added Send Host Message request and reply.
148991554f2SKenneth D. Merry  *  05-25-11  02.00.18  For Extended Image Header, added
149991554f2SKenneth D. Merry  *                      MPI2_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC and
150991554f2SKenneth D. Merry  *                      MPI2_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC defines.
151991554f2SKenneth D. Merry  *                      Deprecated MPI2_EXT_IMAGE_TYPE_MAX define.
152991554f2SKenneth D. Merry  *  08-24-11  02.00.19  Added PhysicalPort field to
153991554f2SKenneth D. Merry  *                      MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE structure.
154991554f2SKenneth D. Merry  *                      Marked MPI2_PM_CONTROL_FEATURE_PCIE_LINK as obsolete.
155991554f2SKenneth D. Merry  *  11-18-11  02.00.20  Incorporating additions for MPI v2.5.
156991554f2SKenneth D. Merry  *  03-29-12  02.00.21  Added a product specific range to event values.
157991554f2SKenneth D. Merry  *  07-26-12  02.00.22  Added MPI2_IOCFACTS_EXCEPT_PARTIAL_MEMORY_FAILURE.
158991554f2SKenneth D. Merry  *                      Added ElapsedSeconds field to
159991554f2SKenneth D. Merry  *                      MPI2_EVENT_DATA_IR_OPERATION_STATUS.
160991554f2SKenneth D. Merry  *  08-19-13  02.00.23  For IOCInit, added MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE
161991554f2SKenneth D. Merry  *                      and MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY.
162991554f2SKenneth D. Merry  *                      Added MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE.
163991554f2SKenneth D. Merry  *                      Added MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY.
164991554f2SKenneth D. Merry  *                      Added Encrypted Hash Extended Image.
165991554f2SKenneth D. Merry  *  12-05-13  02.00.24  Added MPI25_HASH_IMAGE_TYPE_BIOS.
16628ae62b0SStephen McConnell  *  11-18-14  02.00.25  Updated copyright information.
16728ae62b0SStephen McConnell  *  03-16-15  02.00.26  Updated for MPI v2.6.
16828ae62b0SStephen McConnell  *                      Added MPI2_EVENT_ACTIVE_CABLE_EXCEPTION and
16928ae62b0SStephen McConnell  *                      MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT.
17028ae62b0SStephen McConnell  *                      Added MPI2_EVENT_PCIE_LINK_COUNTER and
17128ae62b0SStephen McConnell  *                      MPI26_EVENT_DATA_PCIE_LINK_COUNTER.
17228ae62b0SStephen McConnell  *                      Added MPI26_CTRL_OP_SHUTDOWN.
17328ae62b0SStephen McConnell  *                      Added MPI26_CTRL_OP_LINK_CLEAR_ERROR_LOG
17467feec50SStephen McConnell  *                      Added MPI26_FW_HEADER_PID_FAMILY_3324_SAS and
17567feec50SStephen McConnell  *                      MPI26_FW_HEADER_PID_FAMILY_3516_SAS.
17667feec50SStephen McConnell  *  08-25-15  02.00.27  Added IC ARCH Class based signature defines.
17767feec50SStephen McConnell  *                      Added MPI26_EVENT_PCIE_ENUM_ES_RESOURCES_EXHAUSTED event.
17867feec50SStephen McConnell  *                      Added ConigurationFlags field to IOCInit message to
17967feec50SStephen McConnell  *                      support NVMe SGL format control.
18067feec50SStephen McConnell  *                      Added PCIe SRIOV support.
18167feec50SStephen McConnell  * 02-17-16   02.00.28  Added SAS 4 22.5 gbs speed support.
18267feec50SStephen McConnell  *                      Added PCIe 4 16.0 GT/sec speec support.
18367feec50SStephen McConnell  *                      Removed AHCI support.
18467feec50SStephen McConnell  *                      Removed SOP support.
18567feec50SStephen McConnell  * 07-01-16   02.00.29  Added Archclass for 4008 product.
18667feec50SStephen McConnell  *                      Added IOCException MPI2_IOCFACTS_EXCEPT_PCIE_DISABLED
18767feec50SStephen McConnell  * 08-23-16   02.00.30  Added new defines for the ImageType field of FWDownload
18867feec50SStephen McConnell  *                      Request Message.
18967feec50SStephen McConnell  *                      Added new defines for the ImageType field of FWUpload
19067feec50SStephen McConnell  *                      Request Message.
19167feec50SStephen McConnell  *                      Added new values for the RegionType field in the Layout
19267feec50SStephen McConnell  *                      Data sections of the FLASH Layout Extended Image Data.
19367feec50SStephen McConnell  *                      Added new defines for the ReasonCode field of
19467feec50SStephen McConnell  *                      Active Cable Exception Event.
19567feec50SStephen McConnell  *                      Added MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE and
19667feec50SStephen McConnell  *                      MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE.
1975f5baf0eSAlexander Motin  * 11-23-16   02.00.31  Added MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR and
1985f5baf0eSAlexander Motin  *                      MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR.
1995f5baf0eSAlexander Motin  * 02-02-17   02.00.32  Added MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP.
2005f5baf0eSAlexander Motin  *                      Added MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT and related
2015f5baf0eSAlexander Motin  *                      defines for the ReasonCode field.
202*8736c018SKashyap D Desai  * 06-13-17   02.00.33  Added MPI2_FW_DOWNLOAD_ITYPE_CPLD.
203*8736c018SKashyap D Desai  * 09-29-17   02.00.34  Added MPI26_EVENT_PCIDEV_STAT_RC_PCIE_HOT_RESET_FAILED
204*8736c018SKashyap D Desai  *                      to the ReasonCode field in PCIe Device Status Change
205*8736c018SKashyap D Desai  *                      Event Data.
206*8736c018SKashyap D Desai  * 07-22-18   02.00.35  Added FW_DOWNLOAD_ITYPE_CPLD and _PSOC.
207*8736c018SKashyap D Desai  *                      Moved FW image definitions ionto new mpi2_image,h
208*8736c018SKashyap D Desai  * 08-14-18   02.00.36  Fixed definition of MPI2_FW_DOWNLOAD_ITYPE_PSOC (0x16)
209991554f2SKenneth D. Merry  *  --------------------------------------------------------------------------
210991554f2SKenneth D. Merry  */
211991554f2SKenneth D. Merry 
212991554f2SKenneth D. Merry #ifndef MPI2_IOC_H
213991554f2SKenneth D. Merry #define MPI2_IOC_H
214991554f2SKenneth D. Merry 
215991554f2SKenneth D. Merry /*****************************************************************************
216991554f2SKenneth D. Merry *
217991554f2SKenneth D. Merry *               IOC Messages
218991554f2SKenneth D. Merry *
219991554f2SKenneth D. Merry *****************************************************************************/
220991554f2SKenneth D. Merry 
221991554f2SKenneth D. Merry /****************************************************************************
222991554f2SKenneth D. Merry *  IOCInit message
223991554f2SKenneth D. Merry ****************************************************************************/
224991554f2SKenneth D. Merry 
225991554f2SKenneth D. Merry /* IOCInit Request message */
226991554f2SKenneth D. Merry typedef struct _MPI2_IOC_INIT_REQUEST
227991554f2SKenneth D. Merry {
228991554f2SKenneth D. Merry     U8                      WhoInit;                        /* 0x00 */
229991554f2SKenneth D. Merry     U8                      Reserved1;                      /* 0x01 */
230991554f2SKenneth D. Merry     U8                      ChainOffset;                    /* 0x02 */
231991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
232991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x04 */
233991554f2SKenneth D. Merry     U8                      Reserved3;                      /* 0x06 */
234991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
235991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
236991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
237991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0A */
238991554f2SKenneth D. Merry     U16                     MsgVersion;                     /* 0x0C */
239991554f2SKenneth D. Merry     U16                     HeaderVersion;                  /* 0x0E */
240991554f2SKenneth D. Merry     U32                     Reserved5;                      /* 0x10 */
24128ae62b0SStephen McConnell     U16                     ConfigurationFlags;             /* 0x14 */
24228ae62b0SStephen McConnell     U8                      HostPageSize;                   /* 0x16 */
243991554f2SKenneth D. Merry     U8                      HostMSIxVectors;                /* 0x17 */
244991554f2SKenneth D. Merry     U16                     Reserved8;                      /* 0x18 */
245991554f2SKenneth D. Merry     U16                     SystemRequestFrameSize;         /* 0x1A */
246991554f2SKenneth D. Merry     U16                     ReplyDescriptorPostQueueDepth;  /* 0x1C */
247991554f2SKenneth D. Merry     U16                     ReplyFreeQueueDepth;            /* 0x1E */
248991554f2SKenneth D. Merry     U32                     SenseBufferAddressHigh;         /* 0x20 */
249991554f2SKenneth D. Merry     U32                     SystemReplyAddressHigh;         /* 0x24 */
250991554f2SKenneth D. Merry     U64                     SystemRequestFrameBaseAddress;  /* 0x28 */
251991554f2SKenneth D. Merry     U64                     ReplyDescriptorPostQueueAddress;/* 0x30 */
252991554f2SKenneth D. Merry     U64                     ReplyFreeQueueAddress;          /* 0x38 */
253991554f2SKenneth D. Merry     U64                     TimeStamp;                      /* 0x40 */
254991554f2SKenneth D. Merry } MPI2_IOC_INIT_REQUEST, MPI2_POINTER PTR_MPI2_IOC_INIT_REQUEST,
255991554f2SKenneth D. Merry   Mpi2IOCInitRequest_t, MPI2_POINTER pMpi2IOCInitRequest_t;
256991554f2SKenneth D. Merry 
257991554f2SKenneth D. Merry /* WhoInit values */
258991554f2SKenneth D. Merry #define MPI2_WHOINIT_NOT_INITIALIZED            (0x00)
259991554f2SKenneth D. Merry #define MPI2_WHOINIT_SYSTEM_BIOS                (0x01)
260991554f2SKenneth D. Merry #define MPI2_WHOINIT_ROM_BIOS                   (0x02)
261991554f2SKenneth D. Merry #define MPI2_WHOINIT_PCI_PEER                   (0x03)
262991554f2SKenneth D. Merry #define MPI2_WHOINIT_HOST_DRIVER                (0x04)
263991554f2SKenneth D. Merry #define MPI2_WHOINIT_MANUFACTURER               (0x05)
264991554f2SKenneth D. Merry 
265991554f2SKenneth D. Merry /* MsgFlags */
266991554f2SKenneth D. Merry #define MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE    (0x01)
267991554f2SKenneth D. Merry 
268991554f2SKenneth D. Merry /* MsgVersion */
269991554f2SKenneth D. Merry #define MPI2_IOCINIT_MSGVERSION_MAJOR_MASK      (0xFF00)
270991554f2SKenneth D. Merry #define MPI2_IOCINIT_MSGVERSION_MAJOR_SHIFT     (8)
271991554f2SKenneth D. Merry #define MPI2_IOCINIT_MSGVERSION_MINOR_MASK      (0x00FF)
272991554f2SKenneth D. Merry #define MPI2_IOCINIT_MSGVERSION_MINOR_SHIFT     (0)
273991554f2SKenneth D. Merry 
274991554f2SKenneth D. Merry /* HeaderVersion */
275991554f2SKenneth D. Merry #define MPI2_IOCINIT_HDRVERSION_UNIT_MASK       (0xFF00)
276991554f2SKenneth D. Merry #define MPI2_IOCINIT_HDRVERSION_UNIT_SHIFT      (8)
277991554f2SKenneth D. Merry #define MPI2_IOCINIT_HDRVERSION_DEV_MASK        (0x00FF)
278991554f2SKenneth D. Merry #define MPI2_IOCINIT_HDRVERSION_DEV_SHIFT       (0)
279991554f2SKenneth D. Merry 
28067feec50SStephen McConnell /* ConfigurationFlags */
28167feec50SStephen McConnell #define MPI26_IOCINIT_CFGFLAGS_NVME_SGL_FORMAT  (0x0001)
28267feec50SStephen McConnell 
283991554f2SKenneth D. Merry /* minimum depth for a Reply Descriptor Post Queue */
284991554f2SKenneth D. Merry #define MPI2_RDPQ_DEPTH_MIN                     (16)
285991554f2SKenneth D. Merry 
286991554f2SKenneth D. Merry /* Reply Descriptor Post Queue Array Entry */
287991554f2SKenneth D. Merry typedef struct _MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY
288991554f2SKenneth D. Merry {
289991554f2SKenneth D. Merry     U64                 RDPQBaseAddress;                    /* 0x00 */
290991554f2SKenneth D. Merry     U32                 Reserved1;                          /* 0x08 */
291991554f2SKenneth D. Merry     U32                 Reserved2;                          /* 0x0C */
292991554f2SKenneth D. Merry } MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY,
293991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY,
294991554f2SKenneth D. Merry   Mpi2IOCInitRDPQArrayEntry, MPI2_POINTER pMpi2IOCInitRDPQArrayEntry;
295991554f2SKenneth D. Merry 
296991554f2SKenneth D. Merry /* IOCInit Reply message */
297991554f2SKenneth D. Merry typedef struct _MPI2_IOC_INIT_REPLY
298991554f2SKenneth D. Merry {
299991554f2SKenneth D. Merry     U8                      WhoInit;                        /* 0x00 */
300991554f2SKenneth D. Merry     U8                      Reserved1;                      /* 0x01 */
301991554f2SKenneth D. Merry     U8                      MsgLength;                      /* 0x02 */
302991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
303991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x04 */
304991554f2SKenneth D. Merry     U8                      Reserved3;                      /* 0x06 */
305991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
306991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
307991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
308991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0A */
309991554f2SKenneth D. Merry     U16                     Reserved5;                      /* 0x0C */
310991554f2SKenneth D. Merry     U16                     IOCStatus;                      /* 0x0E */
311991554f2SKenneth D. Merry     U32                     IOCLogInfo;                     /* 0x10 */
312991554f2SKenneth D. Merry } MPI2_IOC_INIT_REPLY, MPI2_POINTER PTR_MPI2_IOC_INIT_REPLY,
313991554f2SKenneth D. Merry   Mpi2IOCInitReply_t, MPI2_POINTER pMpi2IOCInitReply_t;
314991554f2SKenneth D. Merry 
315991554f2SKenneth D. Merry /****************************************************************************
316991554f2SKenneth D. Merry *  IOCFacts message
317991554f2SKenneth D. Merry ****************************************************************************/
318991554f2SKenneth D. Merry 
319991554f2SKenneth D. Merry /* IOCFacts Request message */
320991554f2SKenneth D. Merry typedef struct _MPI2_IOC_FACTS_REQUEST
321991554f2SKenneth D. Merry {
322991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x00 */
323991554f2SKenneth D. Merry     U8                      ChainOffset;                    /* 0x02 */
324991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
325991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x04 */
326991554f2SKenneth D. Merry     U8                      Reserved3;                      /* 0x06 */
327991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
328991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
329991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
330991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0A */
331991554f2SKenneth D. Merry } MPI2_IOC_FACTS_REQUEST, MPI2_POINTER PTR_MPI2_IOC_FACTS_REQUEST,
332991554f2SKenneth D. Merry   Mpi2IOCFactsRequest_t, MPI2_POINTER pMpi2IOCFactsRequest_t;
333991554f2SKenneth D. Merry 
334991554f2SKenneth D. Merry /* IOCFacts Reply message */
335991554f2SKenneth D. Merry typedef struct _MPI2_IOC_FACTS_REPLY
336991554f2SKenneth D. Merry {
337991554f2SKenneth D. Merry     U16                     MsgVersion;                     /* 0x00 */
338991554f2SKenneth D. Merry     U8                      MsgLength;                      /* 0x02 */
339991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
340991554f2SKenneth D. Merry     U16                     HeaderVersion;                  /* 0x04 */
341991554f2SKenneth D. Merry     U8                      IOCNumber;                      /* 0x06 */
342991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
343991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
344991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
345991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x0A */
346991554f2SKenneth D. Merry     U16                     IOCExceptions;                  /* 0x0C */
347991554f2SKenneth D. Merry     U16                     IOCStatus;                      /* 0x0E */
348991554f2SKenneth D. Merry     U32                     IOCLogInfo;                     /* 0x10 */
349991554f2SKenneth D. Merry     U8                      MaxChainDepth;                  /* 0x14 */
350991554f2SKenneth D. Merry     U8                      WhoInit;                        /* 0x15 */
351991554f2SKenneth D. Merry     U8                      NumberOfPorts;                  /* 0x16 */
352991554f2SKenneth D. Merry     U8                      MaxMSIxVectors;                 /* 0x17 */
353991554f2SKenneth D. Merry     U16                     RequestCredit;                  /* 0x18 */
354991554f2SKenneth D. Merry     U16                     ProductID;                      /* 0x1A */
355991554f2SKenneth D. Merry     U32                     IOCCapabilities;                /* 0x1C */
356991554f2SKenneth D. Merry     MPI2_VERSION_UNION      FWVersion;                      /* 0x20 */
357991554f2SKenneth D. Merry     U16                     IOCRequestFrameSize;            /* 0x24 */
358991554f2SKenneth D. Merry     U16                     IOCMaxChainSegmentSize;         /* 0x26 */ /* MPI 2.5 only; Reserved in MPI 2.0 */
359991554f2SKenneth D. Merry     U16                     MaxInitiators;                  /* 0x28 */
360991554f2SKenneth D. Merry     U16                     MaxTargets;                     /* 0x2A */
361991554f2SKenneth D. Merry     U16                     MaxSasExpanders;                /* 0x2C */
362991554f2SKenneth D. Merry     U16                     MaxEnclosures;                  /* 0x2E */
363991554f2SKenneth D. Merry     U16                     ProtocolFlags;                  /* 0x30 */
364991554f2SKenneth D. Merry     U16                     HighPriorityCredit;             /* 0x32 */
365991554f2SKenneth D. Merry     U16                     MaxReplyDescriptorPostQueueDepth; /* 0x34 */
366991554f2SKenneth D. Merry     U8                      ReplyFrameSize;                 /* 0x36 */
367991554f2SKenneth D. Merry     U8                      MaxVolumes;                     /* 0x37 */
368991554f2SKenneth D. Merry     U16                     MaxDevHandle;                   /* 0x38 */
369991554f2SKenneth D. Merry     U16                     MaxPersistentEntries;           /* 0x3A */
370991554f2SKenneth D. Merry     U16                     MinDevHandle;                   /* 0x3C */
37128ae62b0SStephen McConnell     U8                      CurrentHostPageSize;            /* 0x3E */
37228ae62b0SStephen McConnell     U8                      Reserved4;                      /* 0x3F */
37328ae62b0SStephen McConnell     U8                      SGEModifierMask;                /* 0x40 */
37428ae62b0SStephen McConnell     U8                      SGEModifierValue;               /* 0x41 */
37528ae62b0SStephen McConnell     U8                      SGEModifierShift;               /* 0x42 */
37628ae62b0SStephen McConnell     U8                      Reserved5;                      /* 0x43 */
377991554f2SKenneth D. Merry } MPI2_IOC_FACTS_REPLY, MPI2_POINTER PTR_MPI2_IOC_FACTS_REPLY,
378991554f2SKenneth D. Merry   Mpi2IOCFactsReply_t, MPI2_POINTER pMpi2IOCFactsReply_t;
379991554f2SKenneth D. Merry 
380991554f2SKenneth D. Merry /* MsgVersion */
381991554f2SKenneth D. Merry #define MPI2_IOCFACTS_MSGVERSION_MAJOR_MASK             (0xFF00)
382991554f2SKenneth D. Merry #define MPI2_IOCFACTS_MSGVERSION_MAJOR_SHIFT            (8)
383991554f2SKenneth D. Merry #define MPI2_IOCFACTS_MSGVERSION_MINOR_MASK             (0x00FF)
384991554f2SKenneth D. Merry #define MPI2_IOCFACTS_MSGVERSION_MINOR_SHIFT            (0)
385991554f2SKenneth D. Merry 
386991554f2SKenneth D. Merry /* HeaderVersion */
387991554f2SKenneth D. Merry #define MPI2_IOCFACTS_HDRVERSION_UNIT_MASK              (0xFF00)
388991554f2SKenneth D. Merry #define MPI2_IOCFACTS_HDRVERSION_UNIT_SHIFT             (8)
389991554f2SKenneth D. Merry #define MPI2_IOCFACTS_HDRVERSION_DEV_MASK               (0x00FF)
390991554f2SKenneth D. Merry #define MPI2_IOCFACTS_HDRVERSION_DEV_SHIFT              (0)
391991554f2SKenneth D. Merry 
392991554f2SKenneth D. Merry /* IOCExceptions */
39367feec50SStephen McConnell #define MPI2_IOCFACTS_EXCEPT_PCIE_DISABLED              (0x0400)
394991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_PARTIAL_MEMORY_FAILURE     (0x0200)
395991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAX      (0x0100)
396991554f2SKenneth D. Merry 
397991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_MASK              (0x00E0)
398991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_GOOD              (0x0000)
399991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_BACKUP            (0x0020)
400991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_RESTORED          (0x0040)
401991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_BOOTSTAT_CORRUPT_BACKUP    (0x0060)
402991554f2SKenneth D. Merry 
403991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED       (0x0010)
404991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_MANUFACT_CHECKSUM_FAIL     (0x0008)
405991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL           (0x0004)
406991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID        (0x0002)
407991554f2SKenneth D. Merry #define MPI2_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL       (0x0001)
408991554f2SKenneth D. Merry 
409991554f2SKenneth D. Merry /* defines for WhoInit field are after the IOCInit Request */
410991554f2SKenneth D. Merry 
411991554f2SKenneth D. Merry /* ProductID field uses MPI2_FW_HEADER_PID_ */
412991554f2SKenneth D. Merry 
413991554f2SKenneth D. Merry /* IOCCapabilities */
41467feec50SStephen McConnell #define MPI26_IOCFACTS_CAPABILITY_PCIE_SRIOV            (0x00100000)
41567feec50SStephen McConnell #define MPI26_IOCFACTS_CAPABILITY_ATOMIC_REQ            (0x00080000)
416991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE     (0x00040000)
417991554f2SKenneth D. Merry #define MPI25_IOCFACTS_CAPABILITY_FAST_PATH_CAPABLE     (0x00020000)
418991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_HOST_BASED_DISCOVERY   (0x00010000)
419991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_MSI_X_INDEX            (0x00008000)
420991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_RAID_ACCELERATOR       (0x00004000)
421991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY           (0x00002000)
422991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID        (0x00001000)
423991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_TLR                    (0x00000800)
424991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_MULTICAST              (0x00000100)
425991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_BIDIRECTIONAL_TARGET   (0x00000080)
426991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_EEDP                   (0x00000040)
427991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER        (0x00000020)
428991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER        (0x00000010)
429991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER      (0x00000008)
430991554f2SKenneth D. Merry #define MPI2_IOCFACTS_CAPABILITY_TASK_SET_FULL_HANDLING (0x00000004)
431991554f2SKenneth D. Merry 
432991554f2SKenneth D. Merry /* ProtocolFlags */
43367feec50SStephen McConnell #define MPI2_IOCFACTS_PROTOCOL_NVME_DEVICES             (0x0008) /* MPI v2.6 and later */
434991554f2SKenneth D. Merry #define MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR           (0x0002)
43528ae62b0SStephen McConnell #define MPI2_IOCFACTS_PROTOCOL_SCSI_TARGET              (0x0001)
436991554f2SKenneth D. Merry 
437991554f2SKenneth D. Merry /****************************************************************************
438991554f2SKenneth D. Merry *  PortFacts message
439991554f2SKenneth D. Merry ****************************************************************************/
440991554f2SKenneth D. Merry 
441991554f2SKenneth D. Merry /* PortFacts Request message */
442991554f2SKenneth D. Merry typedef struct _MPI2_PORT_FACTS_REQUEST
443991554f2SKenneth D. Merry {
444991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x00 */
445991554f2SKenneth D. Merry     U8                      ChainOffset;                    /* 0x02 */
446991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
447991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x04 */
448991554f2SKenneth D. Merry     U8                      PortNumber;                     /* 0x06 */
449991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
450991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
451991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
452991554f2SKenneth D. Merry     U16                     Reserved3;                      /* 0x0A */
453991554f2SKenneth D. Merry } MPI2_PORT_FACTS_REQUEST, MPI2_POINTER PTR_MPI2_PORT_FACTS_REQUEST,
454991554f2SKenneth D. Merry   Mpi2PortFactsRequest_t, MPI2_POINTER pMpi2PortFactsRequest_t;
455991554f2SKenneth D. Merry 
456991554f2SKenneth D. Merry /* PortFacts Reply message */
457991554f2SKenneth D. Merry typedef struct _MPI2_PORT_FACTS_REPLY
458991554f2SKenneth D. Merry {
459991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x00 */
460991554f2SKenneth D. Merry     U8                      MsgLength;                      /* 0x02 */
461991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
462991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x04 */
463991554f2SKenneth D. Merry     U8                      PortNumber;                     /* 0x06 */
464991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
465991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
466991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
467991554f2SKenneth D. Merry     U16                     Reserved3;                      /* 0x0A */
468991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0C */
469991554f2SKenneth D. Merry     U16                     IOCStatus;                      /* 0x0E */
470991554f2SKenneth D. Merry     U32                     IOCLogInfo;                     /* 0x10 */
471991554f2SKenneth D. Merry     U8                      Reserved5;                      /* 0x14 */
472991554f2SKenneth D. Merry     U8                      PortType;                       /* 0x15 */
473991554f2SKenneth D. Merry     U16                     Reserved6;                      /* 0x16 */
474991554f2SKenneth D. Merry     U16                     MaxPostedCmdBuffers;            /* 0x18 */
475991554f2SKenneth D. Merry     U16                     Reserved7;                      /* 0x1A */
476991554f2SKenneth D. Merry } MPI2_PORT_FACTS_REPLY, MPI2_POINTER PTR_MPI2_PORT_FACTS_REPLY,
477991554f2SKenneth D. Merry   Mpi2PortFactsReply_t, MPI2_POINTER pMpi2PortFactsReply_t;
478991554f2SKenneth D. Merry 
479991554f2SKenneth D. Merry /* PortType values */
480991554f2SKenneth D. Merry #define MPI2_PORTFACTS_PORTTYPE_INACTIVE            (0x00)
481991554f2SKenneth D. Merry #define MPI2_PORTFACTS_PORTTYPE_FC                  (0x10)
482991554f2SKenneth D. Merry #define MPI2_PORTFACTS_PORTTYPE_ISCSI               (0x20)
483991554f2SKenneth D. Merry #define MPI2_PORTFACTS_PORTTYPE_SAS_PHYSICAL        (0x30)
484991554f2SKenneth D. Merry #define MPI2_PORTFACTS_PORTTYPE_SAS_VIRTUAL         (0x31)
48567feec50SStephen McConnell #define MPI2_PORTFACTS_PORTTYPE_TRI_MODE            (0x40) /* MPI v2.6 and later */
486991554f2SKenneth D. Merry 
487991554f2SKenneth D. Merry /****************************************************************************
488991554f2SKenneth D. Merry *  PortEnable message
489991554f2SKenneth D. Merry ****************************************************************************/
490991554f2SKenneth D. Merry 
491991554f2SKenneth D. Merry /* PortEnable Request message */
492991554f2SKenneth D. Merry typedef struct _MPI2_PORT_ENABLE_REQUEST
493991554f2SKenneth D. Merry {
494991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x00 */
495991554f2SKenneth D. Merry     U8                      ChainOffset;                    /* 0x02 */
496991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
497991554f2SKenneth D. Merry     U8                      Reserved2;                      /* 0x04 */
498991554f2SKenneth D. Merry     U8                      PortFlags;                      /* 0x05 */
499991554f2SKenneth D. Merry     U8                      Reserved3;                      /* 0x06 */
500991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
501991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
502991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
503991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0A */
504991554f2SKenneth D. Merry } MPI2_PORT_ENABLE_REQUEST, MPI2_POINTER PTR_MPI2_PORT_ENABLE_REQUEST,
505991554f2SKenneth D. Merry   Mpi2PortEnableRequest_t, MPI2_POINTER pMpi2PortEnableRequest_t;
506991554f2SKenneth D. Merry 
507991554f2SKenneth D. Merry /* PortEnable Reply message */
508991554f2SKenneth D. Merry typedef struct _MPI2_PORT_ENABLE_REPLY
509991554f2SKenneth D. Merry {
510991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x00 */
511991554f2SKenneth D. Merry     U8                      MsgLength;                      /* 0x02 */
512991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
513991554f2SKenneth D. Merry     U8                      Reserved2;                      /* 0x04 */
514991554f2SKenneth D. Merry     U8                      PortFlags;                      /* 0x05 */
515991554f2SKenneth D. Merry     U8                      Reserved3;                      /* 0x06 */
516991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
517991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
518991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
519991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0A */
520991554f2SKenneth D. Merry     U16                     Reserved5;                      /* 0x0C */
521991554f2SKenneth D. Merry     U16                     IOCStatus;                      /* 0x0E */
522991554f2SKenneth D. Merry     U32                     IOCLogInfo;                     /* 0x10 */
523991554f2SKenneth D. Merry } MPI2_PORT_ENABLE_REPLY, MPI2_POINTER PTR_MPI2_PORT_ENABLE_REPLY,
524991554f2SKenneth D. Merry   Mpi2PortEnableReply_t, MPI2_POINTER pMpi2PortEnableReply_t;
525991554f2SKenneth D. Merry 
526991554f2SKenneth D. Merry /****************************************************************************
527991554f2SKenneth D. Merry *  EventNotification message
528991554f2SKenneth D. Merry ****************************************************************************/
529991554f2SKenneth D. Merry 
530991554f2SKenneth D. Merry /* EventNotification Request message */
531991554f2SKenneth D. Merry #define MPI2_EVENT_NOTIFY_EVENTMASK_WORDS           (4)
532991554f2SKenneth D. Merry 
533991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_NOTIFICATION_REQUEST
534991554f2SKenneth D. Merry {
535991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x00 */
536991554f2SKenneth D. Merry     U8                      ChainOffset;                    /* 0x02 */
537991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
538991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x04 */
539991554f2SKenneth D. Merry     U8                      Reserved3;                      /* 0x06 */
540991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
541991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
542991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
543991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0A */
544991554f2SKenneth D. Merry     U32                     Reserved5;                      /* 0x0C */
545991554f2SKenneth D. Merry     U32                     Reserved6;                      /* 0x10 */
546991554f2SKenneth D. Merry     U32                     EventMasks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS];/* 0x14 */
547991554f2SKenneth D. Merry     U16                     SASBroadcastPrimitiveMasks;     /* 0x24 */
548991554f2SKenneth D. Merry     U16                     SASNotifyPrimitiveMasks;        /* 0x26 */
549991554f2SKenneth D. Merry     U32                     Reserved8;                      /* 0x28 */
550991554f2SKenneth D. Merry } MPI2_EVENT_NOTIFICATION_REQUEST,
551991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_NOTIFICATION_REQUEST,
552991554f2SKenneth D. Merry   Mpi2EventNotificationRequest_t, MPI2_POINTER pMpi2EventNotificationRequest_t;
553991554f2SKenneth D. Merry 
554991554f2SKenneth D. Merry /* EventNotification Reply message */
555991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_NOTIFICATION_REPLY
556991554f2SKenneth D. Merry {
557991554f2SKenneth D. Merry     U16                     EventDataLength;                /* 0x00 */
558991554f2SKenneth D. Merry     U8                      MsgLength;                      /* 0x02 */
559991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
560991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x04 */
561991554f2SKenneth D. Merry     U8                      AckRequired;                    /* 0x06 */
562991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
563991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
564991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
565991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x0A */
566991554f2SKenneth D. Merry     U16                     Reserved3;                      /* 0x0C */
567991554f2SKenneth D. Merry     U16                     IOCStatus;                      /* 0x0E */
568991554f2SKenneth D. Merry     U32                     IOCLogInfo;                     /* 0x10 */
569991554f2SKenneth D. Merry     U16                     Event;                          /* 0x14 */
570991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x16 */
571991554f2SKenneth D. Merry     U32                     EventContext;                   /* 0x18 */
572991554f2SKenneth D. Merry     U32                     EventData[1];                   /* 0x1C */
573991554f2SKenneth D. Merry } MPI2_EVENT_NOTIFICATION_REPLY, MPI2_POINTER PTR_MPI2_EVENT_NOTIFICATION_REPLY,
574991554f2SKenneth D. Merry   Mpi2EventNotificationReply_t, MPI2_POINTER pMpi2EventNotificationReply_t;
575991554f2SKenneth D. Merry 
576991554f2SKenneth D. Merry /* AckRequired */
577991554f2SKenneth D. Merry #define MPI2_EVENT_NOTIFICATION_ACK_NOT_REQUIRED    (0x00)
578991554f2SKenneth D. Merry #define MPI2_EVENT_NOTIFICATION_ACK_REQUIRED        (0x01)
579991554f2SKenneth D. Merry 
580991554f2SKenneth D. Merry /* Event */
581991554f2SKenneth D. Merry #define MPI2_EVENT_LOG_DATA                         (0x0001)
582991554f2SKenneth D. Merry #define MPI2_EVENT_STATE_CHANGE                     (0x0002)
583991554f2SKenneth D. Merry #define MPI2_EVENT_HARD_RESET_RECEIVED              (0x0005)
584991554f2SKenneth D. Merry #define MPI2_EVENT_EVENT_CHANGE                     (0x000A)
585991554f2SKenneth D. Merry #define MPI2_EVENT_TASK_SET_FULL                    (0x000E) /* obsolete */
586991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEVICE_STATUS_CHANGE         (0x000F)
587991554f2SKenneth D. Merry #define MPI2_EVENT_IR_OPERATION_STATUS              (0x0014)
588991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISCOVERY                    (0x0016)
589991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_BROADCAST_PRIMITIVE          (0x0017)
590991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE    (0x0018)
591991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_INIT_TABLE_OVERFLOW          (0x0019)
592991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST         (0x001C)
593991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE    (0x001D)
59467feec50SStephen McConnell #define MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE        (0x001D) /* MPI v2.6 and later */
595991554f2SKenneth D. Merry #define MPI2_EVENT_IR_VOLUME                        (0x001E)
596991554f2SKenneth D. Merry #define MPI2_EVENT_IR_PHYSICAL_DISK                 (0x001F)
597991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CONFIGURATION_CHANGE_LIST     (0x0020)
598991554f2SKenneth D. Merry #define MPI2_EVENT_LOG_ENTRY_ADDED                  (0x0021)
599991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_PHY_COUNTER                  (0x0022)
600991554f2SKenneth D. Merry #define MPI2_EVENT_GPIO_INTERRUPT                   (0x0023)
601991554f2SKenneth D. Merry #define MPI2_EVENT_HOST_BASED_DISCOVERY_PHY         (0x0024)
602991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_QUIESCE                      (0x0025)
603991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_NOTIFY_PRIMITIVE             (0x0026)
604991554f2SKenneth D. Merry #define MPI2_EVENT_TEMP_THRESHOLD                   (0x0027)
605991554f2SKenneth D. Merry #define MPI2_EVENT_HOST_MESSAGE                     (0x0028)
606991554f2SKenneth D. Merry #define MPI2_EVENT_POWER_PERFORMANCE_CHANGE         (0x0029)
60767feec50SStephen McConnell #define MPI2_EVENT_PCIE_DEVICE_STATUS_CHANGE        (0x0030) /* MPI v2.6 and later */
60867feec50SStephen McConnell #define MPI2_EVENT_PCIE_ENUMERATION                 (0x0031) /* MPI v2.6 and later */
60967feec50SStephen McConnell #define MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST        (0x0032) /* MPI v2.6 and later */
61067feec50SStephen McConnell #define MPI2_EVENT_PCIE_LINK_COUNTER                (0x0033) /* MPI v2.6 and later */
61128ae62b0SStephen McConnell #define MPI2_EVENT_ACTIVE_CABLE_EXCEPTION           (0x0034) /* MPI v2.6 and later */
6125f5baf0eSAlexander Motin #define MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR       (0x0035) /* MPI v2.5 and later */
613991554f2SKenneth D. Merry #define MPI2_EVENT_MIN_PRODUCT_SPECIFIC             (0x006E)
614991554f2SKenneth D. Merry #define MPI2_EVENT_MAX_PRODUCT_SPECIFIC             (0x007F)
615991554f2SKenneth D. Merry 
616991554f2SKenneth D. Merry /* Log Entry Added Event data */
617991554f2SKenneth D. Merry 
618991554f2SKenneth D. Merry /* the following structure matches MPI2_LOG_0_ENTRY in mpi2_cnfg.h */
619991554f2SKenneth D. Merry #define MPI2_EVENT_DATA_LOG_DATA_LENGTH             (0x1C)
620991554f2SKenneth D. Merry 
621991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_LOG_ENTRY_ADDED
622991554f2SKenneth D. Merry {
623991554f2SKenneth D. Merry     U64         TimeStamp;                          /* 0x00 */
624991554f2SKenneth D. Merry     U32         Reserved1;                          /* 0x08 */
625991554f2SKenneth D. Merry     U16         LogSequence;                        /* 0x0C */
626991554f2SKenneth D. Merry     U16         LogEntryQualifier;                  /* 0x0E */
627991554f2SKenneth D. Merry     U8          VP_ID;                              /* 0x10 */
628991554f2SKenneth D. Merry     U8          VF_ID;                              /* 0x11 */
629991554f2SKenneth D. Merry     U16         Reserved2;                          /* 0x12 */
630991554f2SKenneth D. Merry     U8          LogData[MPI2_EVENT_DATA_LOG_DATA_LENGTH];/* 0x14 */
631991554f2SKenneth D. Merry } MPI2_EVENT_DATA_LOG_ENTRY_ADDED,
632991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_LOG_ENTRY_ADDED,
633991554f2SKenneth D. Merry   Mpi2EventDataLogEntryAdded_t, MPI2_POINTER pMpi2EventDataLogEntryAdded_t;
634991554f2SKenneth D. Merry 
635991554f2SKenneth D. Merry /* GPIO Interrupt Event data */
636991554f2SKenneth D. Merry 
637991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_GPIO_INTERRUPT
638991554f2SKenneth D. Merry {
639991554f2SKenneth D. Merry     U8          GPIONum;                            /* 0x00 */
640991554f2SKenneth D. Merry     U8          Reserved1;                          /* 0x01 */
641991554f2SKenneth D. Merry     U16         Reserved2;                          /* 0x02 */
642991554f2SKenneth D. Merry } MPI2_EVENT_DATA_GPIO_INTERRUPT,
643991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_GPIO_INTERRUPT,
644991554f2SKenneth D. Merry   Mpi2EventDataGpioInterrupt_t, MPI2_POINTER pMpi2EventDataGpioInterrupt_t;
645991554f2SKenneth D. Merry 
646991554f2SKenneth D. Merry /* Temperature Threshold Event data */
647991554f2SKenneth D. Merry 
648991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_TEMPERATURE
649991554f2SKenneth D. Merry {
650991554f2SKenneth D. Merry     U16         Status;                             /* 0x00 */
651991554f2SKenneth D. Merry     U8          SensorNum;                          /* 0x02 */
652991554f2SKenneth D. Merry     U8          Reserved1;                          /* 0x03 */
653991554f2SKenneth D. Merry     U16         CurrentTemperature;                 /* 0x04 */
654991554f2SKenneth D. Merry     U16         Reserved2;                          /* 0x06 */
655991554f2SKenneth D. Merry     U32         Reserved3;                          /* 0x08 */
656991554f2SKenneth D. Merry     U32         Reserved4;                          /* 0x0C */
657991554f2SKenneth D. Merry } MPI2_EVENT_DATA_TEMPERATURE,
658991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_TEMPERATURE,
659991554f2SKenneth D. Merry   Mpi2EventDataTemperature_t, MPI2_POINTER pMpi2EventDataTemperature_t;
660991554f2SKenneth D. Merry 
661991554f2SKenneth D. Merry /* Temperature Threshold Event data Status bits */
662991554f2SKenneth D. Merry #define MPI2_EVENT_TEMPERATURE3_EXCEEDED            (0x0008)
663991554f2SKenneth D. Merry #define MPI2_EVENT_TEMPERATURE2_EXCEEDED            (0x0004)
664991554f2SKenneth D. Merry #define MPI2_EVENT_TEMPERATURE1_EXCEEDED            (0x0002)
665991554f2SKenneth D. Merry #define MPI2_EVENT_TEMPERATURE0_EXCEEDED            (0x0001)
666991554f2SKenneth D. Merry 
667991554f2SKenneth D. Merry /* Host Message Event data */
668991554f2SKenneth D. Merry 
669991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_HOST_MESSAGE
670991554f2SKenneth D. Merry {
671991554f2SKenneth D. Merry     U8          SourceVF_ID;                        /* 0x00 */
672991554f2SKenneth D. Merry     U8          Reserved1;                          /* 0x01 */
673991554f2SKenneth D. Merry     U16         Reserved2;                          /* 0x02 */
674991554f2SKenneth D. Merry     U32         Reserved3;                          /* 0x04 */
675991554f2SKenneth D. Merry     U32         HostData[1];                        /* 0x08 */
676991554f2SKenneth D. Merry } MPI2_EVENT_DATA_HOST_MESSAGE, MPI2_POINTER PTR_MPI2_EVENT_DATA_HOST_MESSAGE,
677991554f2SKenneth D. Merry   Mpi2EventDataHostMessage_t, MPI2_POINTER pMpi2EventDataHostMessage_t;
678991554f2SKenneth D. Merry 
67928ae62b0SStephen McConnell /* Power Performance Change Event data */
680991554f2SKenneth D. Merry 
681991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_POWER_PERF_CHANGE
682991554f2SKenneth D. Merry {
683991554f2SKenneth D. Merry     U8          CurrentPowerMode;                   /* 0x00 */
684991554f2SKenneth D. Merry     U8          PreviousPowerMode;                  /* 0x01 */
685991554f2SKenneth D. Merry     U16         Reserved1;                          /* 0x02 */
686991554f2SKenneth D. Merry } MPI2_EVENT_DATA_POWER_PERF_CHANGE,
687991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_POWER_PERF_CHANGE,
688991554f2SKenneth D. Merry   Mpi2EventDataPowerPerfChange_t, MPI2_POINTER pMpi2EventDataPowerPerfChange_t;
689991554f2SKenneth D. Merry 
690991554f2SKenneth D. Merry /* defines for CurrentPowerMode and PreviousPowerMode fields */
691991554f2SKenneth D. Merry #define MPI2_EVENT_PM_INIT_MASK              (0xC0)
692991554f2SKenneth D. Merry #define MPI2_EVENT_PM_INIT_UNAVAILABLE       (0x00)
693991554f2SKenneth D. Merry #define MPI2_EVENT_PM_INIT_HOST              (0x40)
694991554f2SKenneth D. Merry #define MPI2_EVENT_PM_INIT_IO_UNIT           (0x80)
695991554f2SKenneth D. Merry #define MPI2_EVENT_PM_INIT_PCIE_DPA          (0xC0)
696991554f2SKenneth D. Merry 
697991554f2SKenneth D. Merry #define MPI2_EVENT_PM_MODE_MASK              (0x07)
698991554f2SKenneth D. Merry #define MPI2_EVENT_PM_MODE_UNAVAILABLE       (0x00)
699991554f2SKenneth D. Merry #define MPI2_EVENT_PM_MODE_UNKNOWN           (0x01)
700991554f2SKenneth D. Merry #define MPI2_EVENT_PM_MODE_FULL_POWER        (0x04)
701991554f2SKenneth D. Merry #define MPI2_EVENT_PM_MODE_REDUCED_POWER     (0x05)
702991554f2SKenneth D. Merry #define MPI2_EVENT_PM_MODE_STANDBY           (0x06)
703991554f2SKenneth D. Merry 
70428ae62b0SStephen McConnell /* Active Cable Exception Event data */
70528ae62b0SStephen McConnell 
70628ae62b0SStephen McConnell typedef struct _MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT
70728ae62b0SStephen McConnell {
70828ae62b0SStephen McConnell     U32         ActiveCablePowerRequirement;        /* 0x00 */
70928ae62b0SStephen McConnell     U8          ReasonCode;                         /* 0x04 */
71028ae62b0SStephen McConnell     U8          ReceptacleID;                       /* 0x05 */
71128ae62b0SStephen McConnell     U16         Reserved1;                          /* 0x06 */
7125f5baf0eSAlexander Motin } MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
7135f5baf0eSAlexander Motin   MPI2_POINTER PTR_MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
7145f5baf0eSAlexander Motin   Mpi25EventDataActiveCableExcept_t,
7155f5baf0eSAlexander Motin   MPI2_POINTER pMpi25EventDataActiveCableExcept_t,
7165f5baf0eSAlexander Motin   MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
71728ae62b0SStephen McConnell   MPI2_POINTER PTR_MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
71828ae62b0SStephen McConnell   Mpi26EventDataActiveCableExcept_t,
71928ae62b0SStephen McConnell   MPI2_POINTER pMpi26EventDataActiveCableExcept_t;
72028ae62b0SStephen McConnell 
7215f5baf0eSAlexander Motin /* MPI2.5 defines for the ReasonCode field */
7225f5baf0eSAlexander Motin #define MPI25_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER     (0x00)
7235f5baf0eSAlexander Motin #define MPI25_EVENT_ACTIVE_CABLE_PRESENT                (0x01)
7245f5baf0eSAlexander Motin #define MPI25_EVENT_ACTIVE_CABLE_DEGRADED               (0x02)
7255f5baf0eSAlexander Motin 
7265f5baf0eSAlexander Motin /* MPI2.6 defines for the ReasonCode field */
72728ae62b0SStephen McConnell #define MPI26_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER     (0x00)
7280656476aSAlexander Motin #define MPI26_EVENT_ACTIVE_CABLE_PRESENT                (0x01)
7290656476aSAlexander Motin #define MPI26_EVENT_ACTIVE_CABLE_DEGRADED               (0x02)
7300656476aSAlexander Motin 
731991554f2SKenneth D. Merry /* Hard Reset Received Event data */
732991554f2SKenneth D. Merry 
733991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_HARD_RESET_RECEIVED
734991554f2SKenneth D. Merry {
735991554f2SKenneth D. Merry     U8                      Reserved1;                      /* 0x00 */
736991554f2SKenneth D. Merry     U8                      Port;                           /* 0x01 */
737991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x02 */
738991554f2SKenneth D. Merry } MPI2_EVENT_DATA_HARD_RESET_RECEIVED,
739991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_HARD_RESET_RECEIVED,
740991554f2SKenneth D. Merry   Mpi2EventDataHardResetReceived_t,
741991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataHardResetReceived_t;
742991554f2SKenneth D. Merry 
743991554f2SKenneth D. Merry /* Task Set Full Event data */
744991554f2SKenneth D. Merry /*   this event is obsolete */
745991554f2SKenneth D. Merry 
746991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_TASK_SET_FULL
747991554f2SKenneth D. Merry {
748991554f2SKenneth D. Merry     U16                     DevHandle;                      /* 0x00 */
749991554f2SKenneth D. Merry     U16                     CurrentDepth;                   /* 0x02 */
750991554f2SKenneth D. Merry } MPI2_EVENT_DATA_TASK_SET_FULL, MPI2_POINTER PTR_MPI2_EVENT_DATA_TASK_SET_FULL,
751991554f2SKenneth D. Merry   Mpi2EventDataTaskSetFull_t, MPI2_POINTER pMpi2EventDataTaskSetFull_t;
752991554f2SKenneth D. Merry 
753991554f2SKenneth D. Merry /* SAS Device Status Change Event data */
754991554f2SKenneth D. Merry 
755991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE
756991554f2SKenneth D. Merry {
757991554f2SKenneth D. Merry     U16                     TaskTag;                        /* 0x00 */
758991554f2SKenneth D. Merry     U8                      ReasonCode;                     /* 0x02 */
759991554f2SKenneth D. Merry     U8                      PhysicalPort;                   /* 0x03 */
760991554f2SKenneth D. Merry     U8                      ASC;                            /* 0x04 */
761991554f2SKenneth D. Merry     U8                      ASCQ;                           /* 0x05 */
762991554f2SKenneth D. Merry     U16                     DevHandle;                      /* 0x06 */
763991554f2SKenneth D. Merry     U32                     Reserved2;                      /* 0x08 */
764991554f2SKenneth D. Merry     U64                     SASAddress;                     /* 0x0C */
765991554f2SKenneth D. Merry     U8                      LUN[8];                         /* 0x14 */
766991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE,
767991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE,
768991554f2SKenneth D. Merry   Mpi2EventDataSasDeviceStatusChange_t,
769991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataSasDeviceStatusChange_t;
770991554f2SKenneth D. Merry 
771991554f2SKenneth D. Merry /* SAS Device Status Change Event data ReasonCode values */
772991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_SMART_DATA                           (0x05)
773991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_UNSUPPORTED                          (0x07)
774991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET                (0x08)
775991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_TASK_ABORT_INTERNAL                  (0x09)
776991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_ABORT_TASK_SET_INTERNAL              (0x0A)
777991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_CLEAR_TASK_SET_INTERNAL              (0x0B)
778991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_QUERY_TASK_INTERNAL                  (0x0C)
779991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_ASYNC_NOTIFICATION                   (0x0D)
780991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_INTERNAL_DEV_RESET               (0x0E)
781991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_TASK_ABORT_INTERNAL              (0x0F)
782991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_SATA_INIT_FAILURE                    (0x10)
783991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_EXPANDER_REDUCED_FUNCTIONALITY       (0x11)
784991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DEV_STAT_RC_CMP_EXPANDER_REDUCED_FUNCTIONALITY   (0x12)
785991554f2SKenneth D. Merry 
786991554f2SKenneth D. Merry /* Integrated RAID Operation Status Event data */
787991554f2SKenneth D. Merry 
788991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_IR_OPERATION_STATUS
789991554f2SKenneth D. Merry {
790991554f2SKenneth D. Merry     U16                     VolDevHandle;               /* 0x00 */
791991554f2SKenneth D. Merry     U16                     Reserved1;                  /* 0x02 */
792991554f2SKenneth D. Merry     U8                      RAIDOperation;              /* 0x04 */
793991554f2SKenneth D. Merry     U8                      PercentComplete;            /* 0x05 */
794991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x06 */
795991554f2SKenneth D. Merry     U32                     ElapsedSeconds;             /* 0x08 */
796991554f2SKenneth D. Merry } MPI2_EVENT_DATA_IR_OPERATION_STATUS,
797991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_OPERATION_STATUS,
798991554f2SKenneth D. Merry   Mpi2EventDataIrOperationStatus_t,
799991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataIrOperationStatus_t;
800991554f2SKenneth D. Merry 
801991554f2SKenneth D. Merry /* Integrated RAID Operation Status Event data RAIDOperation values */
802991554f2SKenneth D. Merry #define MPI2_EVENT_IR_RAIDOP_RESYNC                     (0x00)
803991554f2SKenneth D. Merry #define MPI2_EVENT_IR_RAIDOP_ONLINE_CAP_EXPANSION       (0x01)
804991554f2SKenneth D. Merry #define MPI2_EVENT_IR_RAIDOP_CONSISTENCY_CHECK          (0x02)
805991554f2SKenneth D. Merry #define MPI2_EVENT_IR_RAIDOP_BACKGROUND_INIT            (0x03)
806991554f2SKenneth D. Merry #define MPI2_EVENT_IR_RAIDOP_MAKE_DATA_CONSISTENT       (0x04)
807991554f2SKenneth D. Merry 
808991554f2SKenneth D. Merry /* Integrated RAID Volume Event data */
809991554f2SKenneth D. Merry 
810991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_IR_VOLUME
811991554f2SKenneth D. Merry {
812991554f2SKenneth D. Merry     U16                     VolDevHandle;               /* 0x00 */
813991554f2SKenneth D. Merry     U8                      ReasonCode;                 /* 0x02 */
814991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x03 */
815991554f2SKenneth D. Merry     U32                     NewValue;                   /* 0x04 */
816991554f2SKenneth D. Merry     U32                     PreviousValue;              /* 0x08 */
817991554f2SKenneth D. Merry } MPI2_EVENT_DATA_IR_VOLUME, MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_VOLUME,
818991554f2SKenneth D. Merry   Mpi2EventDataIrVolume_t, MPI2_POINTER pMpi2EventDataIrVolume_t;
819991554f2SKenneth D. Merry 
820991554f2SKenneth D. Merry /* Integrated RAID Volume Event data ReasonCode values */
821991554f2SKenneth D. Merry #define MPI2_EVENT_IR_VOLUME_RC_SETTINGS_CHANGED        (0x01)
822991554f2SKenneth D. Merry #define MPI2_EVENT_IR_VOLUME_RC_STATUS_FLAGS_CHANGED    (0x02)
823991554f2SKenneth D. Merry #define MPI2_EVENT_IR_VOLUME_RC_STATE_CHANGED           (0x03)
824991554f2SKenneth D. Merry 
825991554f2SKenneth D. Merry /* Integrated RAID Physical Disk Event data */
826991554f2SKenneth D. Merry 
827991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_IR_PHYSICAL_DISK
828991554f2SKenneth D. Merry {
829991554f2SKenneth D. Merry     U16                     Reserved1;                  /* 0x00 */
830991554f2SKenneth D. Merry     U8                      ReasonCode;                 /* 0x02 */
831991554f2SKenneth D. Merry     U8                      PhysDiskNum;                /* 0x03 */
832991554f2SKenneth D. Merry     U16                     PhysDiskDevHandle;          /* 0x04 */
833991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x06 */
834991554f2SKenneth D. Merry     U16                     Slot;                       /* 0x08 */
835991554f2SKenneth D. Merry     U16                     EnclosureHandle;            /* 0x0A */
836991554f2SKenneth D. Merry     U32                     NewValue;                   /* 0x0C */
837991554f2SKenneth D. Merry     U32                     PreviousValue;              /* 0x10 */
838991554f2SKenneth D. Merry } MPI2_EVENT_DATA_IR_PHYSICAL_DISK,
839991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_PHYSICAL_DISK,
840991554f2SKenneth D. Merry   Mpi2EventDataIrPhysicalDisk_t, MPI2_POINTER pMpi2EventDataIrPhysicalDisk_t;
841991554f2SKenneth D. Merry 
842991554f2SKenneth D. Merry /* Integrated RAID Physical Disk Event data ReasonCode values */
843991554f2SKenneth D. Merry #define MPI2_EVENT_IR_PHYSDISK_RC_SETTINGS_CHANGED      (0x01)
844991554f2SKenneth D. Merry #define MPI2_EVENT_IR_PHYSDISK_RC_STATUS_FLAGS_CHANGED  (0x02)
845991554f2SKenneth D. Merry #define MPI2_EVENT_IR_PHYSDISK_RC_STATE_CHANGED         (0x03)
846991554f2SKenneth D. Merry 
847991554f2SKenneth D. Merry /* Integrated RAID Configuration Change List Event data */
848991554f2SKenneth D. Merry 
849991554f2SKenneth D. Merry /*
850991554f2SKenneth D. Merry  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
851991554f2SKenneth D. Merry  * one and check NumElements at runtime.
852991554f2SKenneth D. Merry  */
853991554f2SKenneth D. Merry #ifndef MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT
854991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT          (1)
855991554f2SKenneth D. Merry #endif
856991554f2SKenneth D. Merry 
857991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_IR_CONFIG_ELEMENT
858991554f2SKenneth D. Merry {
859991554f2SKenneth D. Merry     U16                     ElementFlags;               /* 0x00 */
860991554f2SKenneth D. Merry     U16                     VolDevHandle;               /* 0x02 */
861991554f2SKenneth D. Merry     U8                      ReasonCode;                 /* 0x04 */
862991554f2SKenneth D. Merry     U8                      PhysDiskNum;                /* 0x05 */
863991554f2SKenneth D. Merry     U16                     PhysDiskDevHandle;          /* 0x06 */
864991554f2SKenneth D. Merry } MPI2_EVENT_IR_CONFIG_ELEMENT, MPI2_POINTER PTR_MPI2_EVENT_IR_CONFIG_ELEMENT,
865991554f2SKenneth D. Merry   Mpi2EventIrConfigElement_t, MPI2_POINTER pMpi2EventIrConfigElement_t;
866991554f2SKenneth D. Merry 
867991554f2SKenneth D. Merry /* IR Configuration Change List Event data ElementFlags values */
868991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_EFLAGS_ELEMENT_TYPE_MASK   (0x000F)
869991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLUME_ELEMENT      (0x0000)
870991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_EFLAGS_VOLPHYSDISK_ELEMENT (0x0001)
871991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_EFLAGS_HOTSPARE_ELEMENT    (0x0002)
872991554f2SKenneth D. Merry 
873991554f2SKenneth D. Merry /* IR Configuration Change List Event data ReasonCode values */
874991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_ADDED                   (0x01)
875991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_REMOVED                 (0x02)
876991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_NO_CHANGE               (0x03)
877991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_HIDE                    (0x04)
878991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_UNHIDE                  (0x05)
879991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_VOLUME_CREATED          (0x06)
880991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_VOLUME_DELETED          (0x07)
881991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_PD_CREATED              (0x08)
882991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_RC_PD_DELETED              (0x09)
883991554f2SKenneth D. Merry 
884991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST
885991554f2SKenneth D. Merry {
886991554f2SKenneth D. Merry     U8                              NumElements;        /* 0x00 */
887991554f2SKenneth D. Merry     U8                              Reserved1;          /* 0x01 */
888991554f2SKenneth D. Merry     U8                              Reserved2;          /* 0x02 */
889991554f2SKenneth D. Merry     U8                              ConfigNum;          /* 0x03 */
890991554f2SKenneth D. Merry     U32                             Flags;              /* 0x04 */
891991554f2SKenneth D. Merry     MPI2_EVENT_IR_CONFIG_ELEMENT    ConfigElement[MPI2_EVENT_IR_CONFIG_ELEMENT_COUNT];    /* 0x08 */
892991554f2SKenneth D. Merry } MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST,
893991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_IR_CONFIG_CHANGE_LIST,
894991554f2SKenneth D. Merry   Mpi2EventDataIrConfigChangeList_t,
895991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataIrConfigChangeList_t;
896991554f2SKenneth D. Merry 
897991554f2SKenneth D. Merry /* IR Configuration Change List Event data Flags values */
898991554f2SKenneth D. Merry #define MPI2_EVENT_IR_CHANGE_FLAGS_FOREIGN_CONFIG   (0x00000001)
899991554f2SKenneth D. Merry 
900991554f2SKenneth D. Merry /* SAS Discovery Event data */
901991554f2SKenneth D. Merry 
902991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_DISCOVERY
903991554f2SKenneth D. Merry {
904991554f2SKenneth D. Merry     U8                      Flags;                      /* 0x00 */
905991554f2SKenneth D. Merry     U8                      ReasonCode;                 /* 0x01 */
906991554f2SKenneth D. Merry     U8                      PhysicalPort;               /* 0x02 */
907991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x03 */
908991554f2SKenneth D. Merry     U32                     DiscoveryStatus;            /* 0x04 */
909991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_DISCOVERY,
910991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_DISCOVERY,
911991554f2SKenneth D. Merry   Mpi2EventDataSasDiscovery_t, MPI2_POINTER pMpi2EventDataSasDiscovery_t;
912991554f2SKenneth D. Merry 
913991554f2SKenneth D. Merry /* SAS Discovery Event data Flags values */
914991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DEVICE_CHANGE                   (0x02)
915991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_IN_PROGRESS                     (0x01)
916991554f2SKenneth D. Merry 
917991554f2SKenneth D. Merry /* SAS Discovery Event data ReasonCode values */
918991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_RC_STARTED                      (0x01)
919991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_RC_COMPLETED                    (0x02)
920991554f2SKenneth D. Merry 
921991554f2SKenneth D. Merry /* SAS Discovery Event data DiscoveryStatus values */
922991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_MAX_ENCLOSURES_EXCEED            (0x80000000)
923991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_MAX_EXPANDERS_EXCEED             (0x40000000)
924991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_MAX_DEVICES_EXCEED               (0x20000000)
925991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_MAX_TOPO_PHYS_EXCEED             (0x10000000)
926991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_DOWNSTREAM_INITIATOR             (0x08000000)
927991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_MULTI_SUBTRACTIVE_SUBTRACTIVE    (0x00008000)
928991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_EXP_MULTI_SUBTRACTIVE            (0x00004000)
929991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_MULTI_PORT_DOMAIN                (0x00002000)
930991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_TABLE_TO_SUBTRACTIVE_LINK        (0x00001000)
931991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_UNSUPPORTED_DEVICE               (0x00000800)
932991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_TABLE_LINK                       (0x00000400)
933991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_SUBTRACTIVE_LINK                 (0x00000200)
934991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_SMP_CRC_ERROR                    (0x00000100)
935991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_SMP_FUNCTION_FAILED              (0x00000080)
936991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_INDEX_NOT_EXIST                  (0x00000040)
937991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_OUT_ROUTE_ENTRIES                (0x00000020)
938991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_SMP_TIMEOUT                      (0x00000010)
939991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_MULTIPLE_PORTS                   (0x00000004)
940991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_UNADDRESSABLE_DEVICE             (0x00000002)
941991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_DISC_DS_LOOP_DETECTED                    (0x00000001)
942991554f2SKenneth D. Merry 
943991554f2SKenneth D. Merry /* SAS Broadcast Primitive Event data */
944991554f2SKenneth D. Merry 
945991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE
946991554f2SKenneth D. Merry {
947991554f2SKenneth D. Merry     U8                      PhyNum;                     /* 0x00 */
948991554f2SKenneth D. Merry     U8                      Port;                       /* 0x01 */
949991554f2SKenneth D. Merry     U8                      PortWidth;                  /* 0x02 */
950991554f2SKenneth D. Merry     U8                      Primitive;                  /* 0x03 */
951991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE,
952991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_BROADCAST_PRIMITIVE,
953991554f2SKenneth D. Merry   Mpi2EventDataSasBroadcastPrimitive_t,
954991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataSasBroadcastPrimitive_t;
955991554f2SKenneth D. Merry 
956991554f2SKenneth D. Merry /* defines for the Primitive field */
957991554f2SKenneth D. Merry #define MPI2_EVENT_PRIMITIVE_CHANGE                         (0x01)
958991554f2SKenneth D. Merry #define MPI2_EVENT_PRIMITIVE_SES                            (0x02)
959991554f2SKenneth D. Merry #define MPI2_EVENT_PRIMITIVE_EXPANDER                       (0x03)
960991554f2SKenneth D. Merry #define MPI2_EVENT_PRIMITIVE_ASYNCHRONOUS_EVENT             (0x04)
961991554f2SKenneth D. Merry #define MPI2_EVENT_PRIMITIVE_RESERVED3                      (0x05)
962991554f2SKenneth D. Merry #define MPI2_EVENT_PRIMITIVE_RESERVED4                      (0x06)
963991554f2SKenneth D. Merry #define MPI2_EVENT_PRIMITIVE_CHANGE0_RESERVED               (0x07)
964991554f2SKenneth D. Merry #define MPI2_EVENT_PRIMITIVE_CHANGE1_RESERVED               (0x08)
965991554f2SKenneth D. Merry 
966991554f2SKenneth D. Merry /* SAS Notify Primitive Event data */
967991554f2SKenneth D. Merry 
968991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE
969991554f2SKenneth D. Merry {
970991554f2SKenneth D. Merry     U8                      PhyNum;                     /* 0x00 */
971991554f2SKenneth D. Merry     U8                      Port;                       /* 0x01 */
972991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x02 */
973991554f2SKenneth D. Merry     U8                      Primitive;                  /* 0x03 */
974991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE,
975991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_NOTIFY_PRIMITIVE,
976991554f2SKenneth D. Merry   Mpi2EventDataSasNotifyPrimitive_t,
977991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataSasNotifyPrimitive_t;
978991554f2SKenneth D. Merry 
979991554f2SKenneth D. Merry /* defines for the Primitive field */
980991554f2SKenneth D. Merry #define MPI2_EVENT_NOTIFY_ENABLE_SPINUP                     (0x01)
981991554f2SKenneth D. Merry #define MPI2_EVENT_NOTIFY_POWER_LOSS_EXPECTED               (0x02)
982991554f2SKenneth D. Merry #define MPI2_EVENT_NOTIFY_RESERVED1                         (0x03)
983991554f2SKenneth D. Merry #define MPI2_EVENT_NOTIFY_RESERVED2                         (0x04)
984991554f2SKenneth D. Merry 
985991554f2SKenneth D. Merry /* SAS Initiator Device Status Change Event data */
986991554f2SKenneth D. Merry 
987991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE
988991554f2SKenneth D. Merry {
989991554f2SKenneth D. Merry     U8                      ReasonCode;                 /* 0x00 */
990991554f2SKenneth D. Merry     U8                      PhysicalPort;               /* 0x01 */
991991554f2SKenneth D. Merry     U16                     DevHandle;                  /* 0x02 */
992991554f2SKenneth D. Merry     U64                     SASAddress;                 /* 0x04 */
993991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE,
994991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_INIT_DEV_STATUS_CHANGE,
995991554f2SKenneth D. Merry   Mpi2EventDataSasInitDevStatusChange_t,
996991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataSasInitDevStatusChange_t;
997991554f2SKenneth D. Merry 
998991554f2SKenneth D. Merry /* SAS Initiator Device Status Change event ReasonCode values */
999991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_INIT_RC_ADDED                (0x01)
1000991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_INIT_RC_NOT_RESPONDING       (0x02)
1001991554f2SKenneth D. Merry 
1002991554f2SKenneth D. Merry /* SAS Initiator Device Table Overflow Event data */
1003991554f2SKenneth D. Merry 
1004991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW
1005991554f2SKenneth D. Merry {
1006991554f2SKenneth D. Merry     U16                     MaxInit;                    /* 0x00 */
1007991554f2SKenneth D. Merry     U16                     CurrentInit;                /* 0x02 */
1008991554f2SKenneth D. Merry     U64                     SASAddress;                 /* 0x04 */
1009991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW,
1010991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_INIT_TABLE_OVERFLOW,
1011991554f2SKenneth D. Merry   Mpi2EventDataSasInitTableOverflow_t,
1012991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataSasInitTableOverflow_t;
1013991554f2SKenneth D. Merry 
1014991554f2SKenneth D. Merry /* SAS Topology Change List Event data */
1015991554f2SKenneth D. Merry 
1016991554f2SKenneth D. Merry /*
1017991554f2SKenneth D. Merry  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
1018991554f2SKenneth D. Merry  * one and check NumEntries at runtime.
1019991554f2SKenneth D. Merry  */
1020991554f2SKenneth D. Merry #ifndef MPI2_EVENT_SAS_TOPO_PHY_COUNT
1021991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_PHY_COUNT           (1)
1022991554f2SKenneth D. Merry #endif
1023991554f2SKenneth D. Merry 
1024991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_SAS_TOPO_PHY_ENTRY
1025991554f2SKenneth D. Merry {
1026991554f2SKenneth D. Merry     U16                     AttachedDevHandle;          /* 0x00 */
1027991554f2SKenneth D. Merry     U8                      LinkRate;                   /* 0x02 */
1028991554f2SKenneth D. Merry     U8                      PhyStatus;                  /* 0x03 */
1029991554f2SKenneth D. Merry } MPI2_EVENT_SAS_TOPO_PHY_ENTRY, MPI2_POINTER PTR_MPI2_EVENT_SAS_TOPO_PHY_ENTRY,
1030991554f2SKenneth D. Merry   Mpi2EventSasTopoPhyEntry_t, MPI2_POINTER pMpi2EventSasTopoPhyEntry_t;
1031991554f2SKenneth D. Merry 
1032991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST
1033991554f2SKenneth D. Merry {
1034991554f2SKenneth D. Merry     U16                             EnclosureHandle;            /* 0x00 */
1035991554f2SKenneth D. Merry     U16                             ExpanderDevHandle;          /* 0x02 */
1036991554f2SKenneth D. Merry     U8                              NumPhys;                    /* 0x04 */
1037991554f2SKenneth D. Merry     U8                              Reserved1;                  /* 0x05 */
1038991554f2SKenneth D. Merry     U16                             Reserved2;                  /* 0x06 */
1039991554f2SKenneth D. Merry     U8                              NumEntries;                 /* 0x08 */
1040991554f2SKenneth D. Merry     U8                              StartPhyNum;                /* 0x09 */
1041991554f2SKenneth D. Merry     U8                              ExpStatus;                  /* 0x0A */
1042991554f2SKenneth D. Merry     U8                              PhysicalPort;               /* 0x0B */
1043991554f2SKenneth D. Merry     MPI2_EVENT_SAS_TOPO_PHY_ENTRY   PHY[MPI2_EVENT_SAS_TOPO_PHY_COUNT]; /* 0x0C*/
1044991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST,
1045991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_TOPOLOGY_CHANGE_LIST,
1046991554f2SKenneth D. Merry   Mpi2EventDataSasTopologyChangeList_t,
1047991554f2SKenneth D. Merry   MPI2_POINTER pMpi2EventDataSasTopologyChangeList_t;
1048991554f2SKenneth D. Merry 
1049991554f2SKenneth D. Merry /* values for the ExpStatus field */
1050991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_ES_NO_EXPANDER                  (0x00)
1051991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_ES_ADDED                        (0x01)
1052991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_ES_NOT_RESPONDING               (0x02)
1053991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_ES_RESPONDING                   (0x03)
1054991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING         (0x04)
1055991554f2SKenneth D. Merry 
1056991554f2SKenneth D. Merry /* defines for the LinkRate field */
1057991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_CURRENT_MASK                 (0xF0)
1058991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_CURRENT_SHIFT                (4)
1059991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_PREV_MASK                    (0x0F)
1060991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_PREV_SHIFT                   (0)
1061991554f2SKenneth D. Merry 
1062991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_UNKNOWN_LINK_RATE            (0x00)
1063991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_PHY_DISABLED                 (0x01)
1064991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_NEGOTIATION_FAILED           (0x02)
1065991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_SATA_OOB_COMPLETE            (0x03)
1066991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_PORT_SELECTOR                (0x04)
1067991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_SMP_RESET_IN_PROGRESS        (0x05)
1068991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_UNSUPPORTED_PHY              (0x06)
1069991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_RATE_1_5                     (0x08)
1070991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_RATE_3_0                     (0x09)
1071991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_LR_RATE_6_0                     (0x0A)
1072991554f2SKenneth D. Merry #define MPI25_EVENT_SAS_TOPO_LR_RATE_12_0                   (0x0B)
107367feec50SStephen McConnell #define MPI26_EVENT_SAS_TOPO_LR_RATE_22_5                   (0x0C)
1074991554f2SKenneth D. Merry 
1075991554f2SKenneth D. Merry /* values for the PhyStatus field */
1076991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_PHYSTATUS_VACANT                (0x80)
1077991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_PS_MULTIPLEX_CHANGE             (0x10)
1078991554f2SKenneth D. Merry /* values for the PhyStatus ReasonCode sub-field */
1079991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_RC_MASK                         (0x0F)
1080991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED                   (0x01)
1081991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_RC_TARG_NOT_RESPONDING          (0x02)
1082991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED                  (0x03)
1083991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_RC_NO_CHANGE                    (0x04)
1084991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_TOPO_RC_DELAY_NOT_RESPONDING         (0x05)
1085991554f2SKenneth D. Merry 
1086991554f2SKenneth D. Merry /* SAS Enclosure Device Status Change Event data */
1087991554f2SKenneth D. Merry 
1088991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE
1089991554f2SKenneth D. Merry {
1090991554f2SKenneth D. Merry     U16                     EnclosureHandle;            /* 0x00 */
1091991554f2SKenneth D. Merry     U8                      ReasonCode;                 /* 0x02 */
1092991554f2SKenneth D. Merry     U8                      PhysicalPort;               /* 0x03 */
1093991554f2SKenneth D. Merry     U64                     EnclosureLogicalID;         /* 0x04 */
1094991554f2SKenneth D. Merry     U16                     NumSlots;                   /* 0x0C */
1095991554f2SKenneth D. Merry     U16                     StartSlot;                  /* 0x0E */
1096991554f2SKenneth D. Merry     U32                     PhyBits;                    /* 0x10 */
1097991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE,
1098991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_ENCL_DEV_STATUS_CHANGE,
1099991554f2SKenneth D. Merry   Mpi2EventDataSasEnclDevStatusChange_t,
110067feec50SStephen McConnell   MPI2_POINTER pMpi2EventDataSasEnclDevStatusChange_t,
110167feec50SStephen McConnell   MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE,
110267feec50SStephen McConnell   MPI2_POINTER PTR_MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE,
110367feec50SStephen McConnell   Mpi26EventDataEnclDevStatusChange_t,
110467feec50SStephen McConnell   MPI2_POINTER pMpi26EventDataEnclDevStatusChange_t;
1105991554f2SKenneth D. Merry 
1106991554f2SKenneth D. Merry /* SAS Enclosure Device Status Change event ReasonCode values */
1107991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_ENCL_RC_ADDED                (0x01)
1108991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_ENCL_RC_NOT_RESPONDING       (0x02)
1109991554f2SKenneth D. Merry 
111067feec50SStephen McConnell /* Enclosure Device Status Change event ReasonCode values */
111167feec50SStephen McConnell #define MPI26_EVENT_ENCL_RC_ADDED                   (0x01)
111267feec50SStephen McConnell #define MPI26_EVENT_ENCL_RC_NOT_RESPONDING          (0x02)
1113991554f2SKenneth D. Merry 
1114991554f2SKenneth D. Merry /* SAS PHY Counter Event data */
1115991554f2SKenneth D. Merry 
1116991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_PHY_COUNTER
1117991554f2SKenneth D. Merry {
1118991554f2SKenneth D. Merry     U64         TimeStamp;          /* 0x00 */
1119991554f2SKenneth D. Merry     U32         Reserved1;          /* 0x08 */
1120991554f2SKenneth D. Merry     U8          PhyEventCode;       /* 0x0C */
1121991554f2SKenneth D. Merry     U8          PhyNum;             /* 0x0D */
1122991554f2SKenneth D. Merry     U16         Reserved2;          /* 0x0E */
1123991554f2SKenneth D. Merry     U32         PhyEventInfo;       /* 0x10 */
1124991554f2SKenneth D. Merry     U8          CounterType;        /* 0x14 */
1125991554f2SKenneth D. Merry     U8          ThresholdWindow;    /* 0x15 */
1126991554f2SKenneth D. Merry     U8          TimeUnits;          /* 0x16 */
1127991554f2SKenneth D. Merry     U8          Reserved3;          /* 0x17 */
1128991554f2SKenneth D. Merry     U32         EventThreshold;     /* 0x18 */
1129991554f2SKenneth D. Merry     U16         ThresholdFlags;     /* 0x1C */
1130991554f2SKenneth D. Merry     U16         Reserved4;          /* 0x1E */
1131991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_PHY_COUNTER,
1132991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_PHY_COUNTER,
1133991554f2SKenneth D. Merry   Mpi2EventDataSasPhyCounter_t, MPI2_POINTER pMpi2EventDataSasPhyCounter_t;
1134991554f2SKenneth D. Merry 
1135991554f2SKenneth D. Merry /* use MPI2_SASPHY3_EVENT_CODE_ values from mpi2_cnfg.h for the PhyEventCode field */
1136991554f2SKenneth D. Merry 
1137991554f2SKenneth D. Merry /* use MPI2_SASPHY3_COUNTER_TYPE_ values from mpi2_cnfg.h for the CounterType field */
1138991554f2SKenneth D. Merry 
1139991554f2SKenneth D. Merry /* use MPI2_SASPHY3_TIME_UNITS_ values from mpi2_cnfg.h for the TimeUnits field */
1140991554f2SKenneth D. Merry 
1141991554f2SKenneth D. Merry /* use MPI2_SASPHY3_TFLAGS_ values from mpi2_cnfg.h for the ThresholdFlags field */
1142991554f2SKenneth D. Merry 
1143991554f2SKenneth D. Merry /* SAS Quiesce Event data */
1144991554f2SKenneth D. Merry 
1145991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_SAS_QUIESCE
1146991554f2SKenneth D. Merry {
1147991554f2SKenneth D. Merry     U8                      ReasonCode;                 /* 0x00 */
1148991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1149991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x02 */
1150991554f2SKenneth D. Merry     U32                     Reserved3;                  /* 0x04 */
1151991554f2SKenneth D. Merry } MPI2_EVENT_DATA_SAS_QUIESCE,
1152991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_EVENT_DATA_SAS_QUIESCE,
1153991554f2SKenneth D. Merry   Mpi2EventDataSasQuiesce_t, MPI2_POINTER pMpi2EventDataSasQuiesce_t;
1154991554f2SKenneth D. Merry 
1155991554f2SKenneth D. Merry /* SAS Quiesce Event data ReasonCode values */
1156991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_QUIESCE_RC_STARTED                   (0x01)
1157991554f2SKenneth D. Merry #define MPI2_EVENT_SAS_QUIESCE_RC_COMPLETED                 (0x02)
1158991554f2SKenneth D. Merry 
11595f5baf0eSAlexander Motin typedef struct _MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR
11605f5baf0eSAlexander Motin {
11615f5baf0eSAlexander Motin     U16         DevHandle;                  /* 0x00 */
11625f5baf0eSAlexander Motin     U8          ReasonCode;                 /* 0x02 */
11635f5baf0eSAlexander Motin     U8          PhysicalPort;               /* 0x03 */
11645f5baf0eSAlexander Motin     U32         Reserved1[2];               /* 0x04 */
11655f5baf0eSAlexander Motin     U64         SASAddress;                 /* 0x0C */
11665f5baf0eSAlexander Motin     U32         Reserved2[2];               /* 0x14 */
11675f5baf0eSAlexander Motin } MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR,
11685f5baf0eSAlexander Motin   MPI2_POINTER PTR_MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR,
11695f5baf0eSAlexander Motin   Mpi25EventDataSasDeviceDiscoveryError_t,
11705f5baf0eSAlexander Motin   MPI2_POINTER pMpi25EventDataSasDeviceDiscoveryError_t;
11715f5baf0eSAlexander Motin 
11725f5baf0eSAlexander Motin /* SAS Device Discovery Error Event data ReasonCode values */
11735f5baf0eSAlexander Motin #define MPI25_EVENT_SAS_DISC_ERR_SMP_FAILED         (0x01)
11745f5baf0eSAlexander Motin #define MPI25_EVENT_SAS_DISC_ERR_SMP_TIMEOUT        (0x02)
11755f5baf0eSAlexander Motin 
1176991554f2SKenneth D. Merry /* Host Based Discovery Phy Event data */
1177991554f2SKenneth D. Merry 
1178991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_HBD_PHY_SAS
1179991554f2SKenneth D. Merry {
1180991554f2SKenneth D. Merry     U8          Flags;                      /* 0x00 */
1181991554f2SKenneth D. Merry     U8          NegotiatedLinkRate;         /* 0x01 */
1182991554f2SKenneth D. Merry     U8          PhyNum;                     /* 0x02 */
1183991554f2SKenneth D. Merry     U8          PhysicalPort;               /* 0x03 */
1184991554f2SKenneth D. Merry     U32         Reserved1;                  /* 0x04 */
1185991554f2SKenneth D. Merry     U8          InitialFrame[28];           /* 0x08 */
1186991554f2SKenneth D. Merry } MPI2_EVENT_HBD_PHY_SAS, MPI2_POINTER PTR_MPI2_EVENT_HBD_PHY_SAS,
1187991554f2SKenneth D. Merry   Mpi2EventHbdPhySas_t, MPI2_POINTER pMpi2EventHbdPhySas_t;
1188991554f2SKenneth D. Merry 
1189991554f2SKenneth D. Merry /* values for the Flags field */
1190991554f2SKenneth D. Merry #define MPI2_EVENT_HBD_SAS_FLAGS_FRAME_VALID        (0x02)
1191991554f2SKenneth D. Merry #define MPI2_EVENT_HBD_SAS_FLAGS_SATA_FRAME         (0x01)
1192991554f2SKenneth D. Merry 
1193991554f2SKenneth D. Merry /* use MPI2_SAS_NEG_LINK_RATE_ defines from mpi2_cnfg.h for the NegotiatedLinkRate field */
1194991554f2SKenneth D. Merry 
1195991554f2SKenneth D. Merry typedef union _MPI2_EVENT_HBD_DESCRIPTOR
1196991554f2SKenneth D. Merry {
1197991554f2SKenneth D. Merry     MPI2_EVENT_HBD_PHY_SAS      Sas;
1198991554f2SKenneth D. Merry } MPI2_EVENT_HBD_DESCRIPTOR, MPI2_POINTER PTR_MPI2_EVENT_HBD_DESCRIPTOR,
1199991554f2SKenneth D. Merry   Mpi2EventHbdDescriptor_t, MPI2_POINTER pMpi2EventHbdDescriptor_t;
1200991554f2SKenneth D. Merry 
1201991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_DATA_HBD_PHY
1202991554f2SKenneth D. Merry {
1203991554f2SKenneth D. Merry     U8                          DescriptorType;     /* 0x00 */
1204991554f2SKenneth D. Merry     U8                          Reserved1;          /* 0x01 */
1205991554f2SKenneth D. Merry     U16                         Reserved2;          /* 0x02 */
1206991554f2SKenneth D. Merry     U32                         Reserved3;          /* 0x04 */
1207991554f2SKenneth D. Merry     MPI2_EVENT_HBD_DESCRIPTOR   Descriptor;         /* 0x08 */
1208991554f2SKenneth D. Merry } MPI2_EVENT_DATA_HBD_PHY, MPI2_POINTER PTR_MPI2_EVENT_DATA_HBD_PHY,
1209991554f2SKenneth D. Merry   Mpi2EventDataHbdPhy_t, MPI2_POINTER pMpi2EventDataMpi2EventDataHbdPhy_t;
1210991554f2SKenneth D. Merry 
1211991554f2SKenneth D. Merry /* values for the DescriptorType field */
1212991554f2SKenneth D. Merry #define MPI2_EVENT_HBD_DT_SAS               (0x01)
1213991554f2SKenneth D. Merry 
121467feec50SStephen McConnell /* PCIe Device Status Change Event data (MPI v2.6 and later) */
121567feec50SStephen McConnell 
121667feec50SStephen McConnell typedef struct _MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE
121767feec50SStephen McConnell {
121867feec50SStephen McConnell     U16                     TaskTag;                        /* 0x00 */
121967feec50SStephen McConnell     U8                      ReasonCode;                     /* 0x02 */
122067feec50SStephen McConnell     U8                      PhysicalPort;                   /* 0x03 */
122167feec50SStephen McConnell     U8                      ASC;                            /* 0x04 */
122267feec50SStephen McConnell     U8                      ASCQ;                           /* 0x05 */
122367feec50SStephen McConnell     U16                     DevHandle;                      /* 0x06 */
122467feec50SStephen McConnell     U32                     Reserved2;                      /* 0x08 */
122567feec50SStephen McConnell     U64                     WWID;                           /* 0x0C */
122667feec50SStephen McConnell     U8                      LUN[8];                         /* 0x14 */
122767feec50SStephen McConnell } MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE,
122867feec50SStephen McConnell   MPI2_POINTER PTR_MPI26_EVENT_DATA_PCIE_DEVICE_STATUS_CHANGE,
122967feec50SStephen McConnell   Mpi26EventDataPCIeDeviceStatusChange_t,
123067feec50SStephen McConnell   MPI2_POINTER pMpi26EventDataPCIeDeviceStatusChange_t;
123167feec50SStephen McConnell 
123267feec50SStephen McConnell /* PCIe Device Status Change Event data ReasonCode values */
123367feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_SMART_DATA                           (0x05)
123467feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_UNSUPPORTED                          (0x07)
123567feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_INTERNAL_DEVICE_RESET                (0x08)
123667feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_TASK_ABORT_INTERNAL                  (0x09)
123767feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_ABORT_TASK_SET_INTERNAL              (0x0A)
123867feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_CLEAR_TASK_SET_INTERNAL              (0x0B)
123967feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_QUERY_TASK_INTERNAL                  (0x0C)
124067feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_ASYNC_NOTIFICATION                   (0x0D)
124167feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_CMP_INTERNAL_DEV_RESET               (0x0E)
124267feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_CMP_TASK_ABORT_INTERNAL              (0x0F)
124367feec50SStephen McConnell #define MPI26_EVENT_PCIDEV_STAT_RC_DEV_INIT_FAILURE                     (0x10)
1244*8736c018SKashyap D Desai #define MPI26_EVENT_PCIDEV_STAT_RC_PCIE_HOT_RESET_FAILED                (0x11)
124567feec50SStephen McConnell 
124667feec50SStephen McConnell /* PCIe Enumeration Event data (MPI v2.6 and later) */
124767feec50SStephen McConnell 
124867feec50SStephen McConnell typedef struct _MPI26_EVENT_DATA_PCIE_ENUMERATION
124967feec50SStephen McConnell {
125067feec50SStephen McConnell     U8                      Flags;                      /* 0x00 */
125167feec50SStephen McConnell     U8                      ReasonCode;                 /* 0x01 */
125267feec50SStephen McConnell     U8                      PhysicalPort;               /* 0x02 */
125367feec50SStephen McConnell     U8                      Reserved1;                  /* 0x03 */
125467feec50SStephen McConnell     U32                     EnumerationStatus;          /* 0x04 */
125567feec50SStephen McConnell } MPI26_EVENT_DATA_PCIE_ENUMERATION,
125667feec50SStephen McConnell   MPI2_POINTER PTR_MPI26_EVENT_DATA_PCIE_ENUMERATION,
125767feec50SStephen McConnell   Mpi26EventDataPCIeEnumeration_t,
125867feec50SStephen McConnell   MPI2_POINTER pMpi26EventDataPCIeEnumeration_t;
125967feec50SStephen McConnell 
126067feec50SStephen McConnell /* PCIe Enumeration Event data Flags values */
126167feec50SStephen McConnell #define MPI26_EVENT_PCIE_ENUM_DEVICE_CHANGE                 (0x02)
126267feec50SStephen McConnell #define MPI26_EVENT_PCIE_ENUM_IN_PROGRESS                   (0x01)
126367feec50SStephen McConnell 
126467feec50SStephen McConnell /* PCIe Enumeration Event data ReasonCode values */
126567feec50SStephen McConnell #define MPI26_EVENT_PCIE_ENUM_RC_STARTED                    (0x01)
126667feec50SStephen McConnell #define MPI26_EVENT_PCIE_ENUM_RC_COMPLETED                  (0x02)
126767feec50SStephen McConnell 
126867feec50SStephen McConnell /* PCIe Enumeration Event data EnumerationStatus values */
126967feec50SStephen McConnell #define MPI26_EVENT_PCIE_ENUM_ES_MAX_SWITCHES_EXCEED            (0x40000000)
127067feec50SStephen McConnell #define MPI26_EVENT_PCIE_ENUM_ES_MAX_DEVICES_EXCEED             (0x20000000)
127167feec50SStephen McConnell #define MPI26_EVENT_PCIE_ENUM_ES_RESOURCES_EXHAUSTED            (0x10000000)
127267feec50SStephen McConnell 
127367feec50SStephen McConnell /* PCIe Topology Change List Event data (MPI v2.6 and later) */
127467feec50SStephen McConnell 
127567feec50SStephen McConnell /*
127667feec50SStephen McConnell  * Host code (drivers, BIOS, utilities, etc.) should leave this define set to
127767feec50SStephen McConnell  * one and check NumEntries at runtime.
127867feec50SStephen McConnell  */
127967feec50SStephen McConnell #ifndef MPI26_EVENT_PCIE_TOPO_PORT_COUNT
128067feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PORT_COUNT        (1)
128167feec50SStephen McConnell #endif
128267feec50SStephen McConnell 
128367feec50SStephen McConnell typedef struct _MPI26_EVENT_PCIE_TOPO_PORT_ENTRY
128467feec50SStephen McConnell {
128567feec50SStephen McConnell     U16         AttachedDevHandle;      /* 0x00 */
128667feec50SStephen McConnell     U8          PortStatus;             /* 0x02 */
128767feec50SStephen McConnell     U8          Reserved1;              /* 0x03 */
128867feec50SStephen McConnell     U8          CurrentPortInfo;        /* 0x04 */
128967feec50SStephen McConnell     U8          Reserved2;              /* 0x05 */
129067feec50SStephen McConnell     U8          PreviousPortInfo;       /* 0x06 */
129167feec50SStephen McConnell     U8          Reserved3;              /* 0x07 */
129267feec50SStephen McConnell } MPI26_EVENT_PCIE_TOPO_PORT_ENTRY,
129367feec50SStephen McConnell   MPI2_POINTER PTR_MPI26_EVENT_PCIE_TOPO_PORT_ENTRY,
129467feec50SStephen McConnell   Mpi26EventPCIeTopoPortEntry_t,
129567feec50SStephen McConnell   MPI2_POINTER pMpi26EventPCIeTopoPortEntry_t;
129667feec50SStephen McConnell 
129767feec50SStephen McConnell /* PCIe Topology Change List Event data PortStatus values */
129867feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PS_DEV_ADDED                  (0x01)
129967feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PS_NOT_RESPONDING             (0x02)
130067feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PS_PORT_CHANGED               (0x03)
130167feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PS_NO_CHANGE                  (0x04)
130267feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PS_DELAY_NOT_RESPONDING       (0x05)
130367feec50SStephen McConnell 
130467feec50SStephen McConnell /* PCIe Topology Change List Event data defines for CurrentPortInfo and PreviousPortInfo */
130567feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_LANE_MASK                  (0xF0)
130667feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_LANES_UNKNOWN              (0x00)
130767feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_1_LANE                     (0x10)
130867feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_2_LANES                    (0x20)
130967feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_4_LANES                    (0x30)
131067feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_8_LANES                    (0x40)
131167feec50SStephen McConnell 
131267feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_RATE_MASK                  (0x0F)
131367feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_RATE_UNKNOWN               (0x00)
131467feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_RATE_DISABLED              (0x01)
131567feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_RATE_2_5                   (0x02)
131667feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_RATE_5_0                   (0x03)
131767feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_RATE_8_0                   (0x04)
131867feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_PI_RATE_16_0                  (0x05)
131967feec50SStephen McConnell 
132067feec50SStephen McConnell typedef struct _MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST
132167feec50SStephen McConnell {
132267feec50SStephen McConnell     U16                                 EnclosureHandle;        /* 0x00 */
132367feec50SStephen McConnell     U16                                 SwitchDevHandle;        /* 0x02 */
132467feec50SStephen McConnell     U8                                  NumPorts;               /* 0x04 */
132567feec50SStephen McConnell     U8                                  Reserved1;              /* 0x05 */
132667feec50SStephen McConnell     U16                                 Reserved2;              /* 0x06 */
132767feec50SStephen McConnell     U8                                  NumEntries;             /* 0x08 */
132867feec50SStephen McConnell     U8                                  StartPortNum;           /* 0x09 */
132967feec50SStephen McConnell     U8                                  SwitchStatus;           /* 0x0A */
133067feec50SStephen McConnell     U8                                  PhysicalPort;           /* 0x0B */
133167feec50SStephen McConnell     MPI26_EVENT_PCIE_TOPO_PORT_ENTRY    PortEntry[MPI26_EVENT_PCIE_TOPO_PORT_COUNT]; /* 0x0C */
133267feec50SStephen McConnell } MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST,
133367feec50SStephen McConnell   MPI2_POINTER PTR_MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST,
133467feec50SStephen McConnell   Mpi26EventDataPCIeTopologyChangeList_t,
133567feec50SStephen McConnell   MPI2_POINTER pMpi26EventDataPCIeTopologyChangeList_t;
133667feec50SStephen McConnell 
133767feec50SStephen McConnell /* PCIe Topology Change List Event data SwitchStatus values */
133867feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_SS_NO_PCIE_SWITCH             (0x00)
133967feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_SS_ADDED                      (0x01)
134067feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_SS_NOT_RESPONDING             (0x02)
134167feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_SS_RESPONDING                 (0x03)
134267feec50SStephen McConnell #define MPI26_EVENT_PCIE_TOPO_SS_DELAY_NOT_RESPONDING       (0x04)
134367feec50SStephen McConnell 
134467feec50SStephen McConnell /* PCIe Link Counter Event data (MPI v2.6 and later) */
134567feec50SStephen McConnell 
134667feec50SStephen McConnell typedef struct _MPI26_EVENT_DATA_PCIE_LINK_COUNTER
134767feec50SStephen McConnell {
134867feec50SStephen McConnell     U64         TimeStamp;          /* 0x00 */
134967feec50SStephen McConnell     U32         Reserved1;          /* 0x08 */
135067feec50SStephen McConnell     U8          LinkEventCode;      /* 0x0C */
135167feec50SStephen McConnell     U8          LinkNum;            /* 0x0D */
135267feec50SStephen McConnell     U16         Reserved2;          /* 0x0E */
135367feec50SStephen McConnell     U32         LinkEventInfo;      /* 0x10 */
135467feec50SStephen McConnell     U8          CounterType;        /* 0x14 */
135567feec50SStephen McConnell     U8          ThresholdWindow;    /* 0x15 */
135667feec50SStephen McConnell     U8          TimeUnits;          /* 0x16 */
135767feec50SStephen McConnell     U8          Reserved3;          /* 0x17 */
135867feec50SStephen McConnell     U32         EventThreshold;     /* 0x18 */
135967feec50SStephen McConnell     U16         ThresholdFlags;     /* 0x1C */
136067feec50SStephen McConnell     U16         Reserved4;          /* 0x1E */
136167feec50SStephen McConnell } MPI26_EVENT_DATA_PCIE_LINK_COUNTER,
136267feec50SStephen McConnell   MPI2_POINTER PTR_MPI26_EVENT_DATA_PCIE_LINK_COUNTER,
136367feec50SStephen McConnell   Mpi26EventDataPcieLinkCounter_t, MPI2_POINTER pMpi26EventDataPcieLinkCounter_t;
136467feec50SStephen McConnell 
136567feec50SStephen McConnell /* use MPI26_PCIELINK3_EVTCODE_ values from mpi2_cnfg.h for the LinkEventCode field */
136667feec50SStephen McConnell 
136767feec50SStephen McConnell /* use MPI26_PCIELINK3_COUNTER_TYPE_ values from mpi2_cnfg.h for the CounterType field */
136867feec50SStephen McConnell 
136967feec50SStephen McConnell /* use MPI26_PCIELINK3_TIME_UNITS_ values from mpi2_cnfg.h for the TimeUnits field */
137067feec50SStephen McConnell 
137167feec50SStephen McConnell /* use MPI26_PCIELINK3_TFLAGS_ values from mpi2_cnfg.h for the ThresholdFlags field */
137267feec50SStephen McConnell 
1373991554f2SKenneth D. Merry /****************************************************************************
1374991554f2SKenneth D. Merry *  EventAck message
1375991554f2SKenneth D. Merry ****************************************************************************/
1376991554f2SKenneth D. Merry 
1377991554f2SKenneth D. Merry /* EventAck Request message */
1378991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_ACK_REQUEST
1379991554f2SKenneth D. Merry {
1380991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x00 */
1381991554f2SKenneth D. Merry     U8                      ChainOffset;                    /* 0x02 */
1382991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
1383991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x04 */
1384991554f2SKenneth D. Merry     U8                      Reserved3;                      /* 0x06 */
1385991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
1386991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
1387991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
1388991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0A */
1389991554f2SKenneth D. Merry     U16                     Event;                          /* 0x0C */
1390991554f2SKenneth D. Merry     U16                     Reserved5;                      /* 0x0E */
1391991554f2SKenneth D. Merry     U32                     EventContext;                   /* 0x10 */
1392991554f2SKenneth D. Merry } MPI2_EVENT_ACK_REQUEST, MPI2_POINTER PTR_MPI2_EVENT_ACK_REQUEST,
1393991554f2SKenneth D. Merry   Mpi2EventAckRequest_t, MPI2_POINTER pMpi2EventAckRequest_t;
1394991554f2SKenneth D. Merry 
1395991554f2SKenneth D. Merry /* EventAck Reply message */
1396991554f2SKenneth D. Merry typedef struct _MPI2_EVENT_ACK_REPLY
1397991554f2SKenneth D. Merry {
1398991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x00 */
1399991554f2SKenneth D. Merry     U8                      MsgLength;                      /* 0x02 */
1400991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
1401991554f2SKenneth D. Merry     U16                     Reserved2;                      /* 0x04 */
1402991554f2SKenneth D. Merry     U8                      Reserved3;                      /* 0x06 */
1403991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
1404991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
1405991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
1406991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0A */
1407991554f2SKenneth D. Merry     U16                     Reserved5;                      /* 0x0C */
1408991554f2SKenneth D. Merry     U16                     IOCStatus;                      /* 0x0E */
1409991554f2SKenneth D. Merry     U32                     IOCLogInfo;                     /* 0x10 */
1410991554f2SKenneth D. Merry } MPI2_EVENT_ACK_REPLY, MPI2_POINTER PTR_MPI2_EVENT_ACK_REPLY,
1411991554f2SKenneth D. Merry   Mpi2EventAckReply_t, MPI2_POINTER pMpi2EventAckReply_t;
1412991554f2SKenneth D. Merry 
1413991554f2SKenneth D. Merry /****************************************************************************
1414991554f2SKenneth D. Merry *  SendHostMessage message
1415991554f2SKenneth D. Merry ****************************************************************************/
1416991554f2SKenneth D. Merry 
1417991554f2SKenneth D. Merry /* SendHostMessage Request message */
1418991554f2SKenneth D. Merry typedef struct _MPI2_SEND_HOST_MESSAGE_REQUEST
1419991554f2SKenneth D. Merry {
1420991554f2SKenneth D. Merry     U16                     HostDataLength;                 /* 0x00 */
1421991554f2SKenneth D. Merry     U8                      ChainOffset;                    /* 0x02 */
1422991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
1423991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x04 */
1424991554f2SKenneth D. Merry     U8                      Reserved2;                      /* 0x06 */
1425991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
1426991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
1427991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
1428991554f2SKenneth D. Merry     U16                     Reserved3;                      /* 0x0A */
1429991554f2SKenneth D. Merry     U8                      Reserved4;                      /* 0x0C */
1430991554f2SKenneth D. Merry     U8                      DestVF_ID;                      /* 0x0D */
1431991554f2SKenneth D. Merry     U16                     Reserved5;                      /* 0x0E */
1432991554f2SKenneth D. Merry     U32                     Reserved6;                      /* 0x10 */
1433991554f2SKenneth D. Merry     U32                     Reserved7;                      /* 0x14 */
1434991554f2SKenneth D. Merry     U32                     Reserved8;                      /* 0x18 */
1435991554f2SKenneth D. Merry     U32                     Reserved9;                      /* 0x1C */
1436991554f2SKenneth D. Merry     U32                     Reserved10;                     /* 0x20 */
1437991554f2SKenneth D. Merry     U32                     HostData[1];                    /* 0x24 */
1438991554f2SKenneth D. Merry } MPI2_SEND_HOST_MESSAGE_REQUEST,
1439991554f2SKenneth D. Merry   MPI2_POINTER PTR_MPI2_SEND_HOST_MESSAGE_REQUEST,
1440991554f2SKenneth D. Merry   Mpi2SendHostMessageRequest_t, MPI2_POINTER pMpi2SendHostMessageRequest_t;
1441991554f2SKenneth D. Merry 
1442991554f2SKenneth D. Merry /* SendHostMessage Reply message */
1443991554f2SKenneth D. Merry typedef struct _MPI2_SEND_HOST_MESSAGE_REPLY
1444991554f2SKenneth D. Merry {
1445991554f2SKenneth D. Merry     U16                     HostDataLength;                 /* 0x00 */
1446991554f2SKenneth D. Merry     U8                      MsgLength;                      /* 0x02 */
1447991554f2SKenneth D. Merry     U8                      Function;                       /* 0x03 */
1448991554f2SKenneth D. Merry     U16                     Reserved1;                      /* 0x04 */
1449991554f2SKenneth D. Merry     U8                      Reserved2;                      /* 0x06 */
1450991554f2SKenneth D. Merry     U8                      MsgFlags;                       /* 0x07 */
1451991554f2SKenneth D. Merry     U8                      VP_ID;                          /* 0x08 */
1452991554f2SKenneth D. Merry     U8                      VF_ID;                          /* 0x09 */
1453991554f2SKenneth D. Merry     U16                     Reserved3;                      /* 0x0A */
1454991554f2SKenneth D. Merry     U16                     Reserved4;                      /* 0x0C */
1455991554f2SKenneth D. Merry     U16                     IOCStatus;                      /* 0x0E */
1456991554f2SKenneth D. Merry     U32                     IOCLogInfo;                     /* 0x10 */
1457991554f2SKenneth D. Merry } MPI2_SEND_HOST_MESSAGE_REPLY, MPI2_POINTER PTR_MPI2_SEND_HOST_MESSAGE_REPLY,
1458991554f2SKenneth D. Merry   Mpi2SendHostMessageReply_t, MPI2_POINTER pMpi2SendHostMessageReply_t;
1459991554f2SKenneth D. Merry 
1460991554f2SKenneth D. Merry /****************************************************************************
1461991554f2SKenneth D. Merry *  FWDownload message
1462991554f2SKenneth D. Merry ****************************************************************************/
1463991554f2SKenneth D. Merry 
1464991554f2SKenneth D. Merry /* MPI v2.0 FWDownload Request message */
1465991554f2SKenneth D. Merry typedef struct _MPI2_FW_DOWNLOAD_REQUEST
1466991554f2SKenneth D. Merry {
1467991554f2SKenneth D. Merry     U8                      ImageType;                  /* 0x00 */
1468991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1469991554f2SKenneth D. Merry     U8                      ChainOffset;                /* 0x02 */
1470991554f2SKenneth D. Merry     U8                      Function;                   /* 0x03 */
1471991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x04 */
1472991554f2SKenneth D. Merry     U8                      Reserved3;                  /* 0x06 */
1473991554f2SKenneth D. Merry     U8                      MsgFlags;                   /* 0x07 */
1474991554f2SKenneth D. Merry     U8                      VP_ID;                      /* 0x08 */
1475991554f2SKenneth D. Merry     U8                      VF_ID;                      /* 0x09 */
1476991554f2SKenneth D. Merry     U16                     Reserved4;                  /* 0x0A */
1477991554f2SKenneth D. Merry     U32                     TotalImageSize;             /* 0x0C */
1478991554f2SKenneth D. Merry     U32                     Reserved5;                  /* 0x10 */
1479991554f2SKenneth D. Merry     MPI2_MPI_SGE_UNION      SGL;                        /* 0x14 */
1480991554f2SKenneth D. Merry } MPI2_FW_DOWNLOAD_REQUEST, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_REQUEST,
1481991554f2SKenneth D. Merry   Mpi2FWDownloadRequest, MPI2_POINTER pMpi2FWDownloadRequest;
1482991554f2SKenneth D. Merry 
1483991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT   (0x01)
1484991554f2SKenneth D. Merry 
1485991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_FW                   (0x01)
1486991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_BIOS                 (0x02)
1487991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_MANUFACTURING        (0x06)
1488991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_1             (0x07)
1489991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_CONFIG_2             (0x08)
1490991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_MEGARAID             (0x09)
1491991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_COMPLETE             (0x0A)
1492991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_COMMON_BOOT_BLOCK    (0x0B)
1493991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY           (0x0C) /* MPI v2.5 and newer */
14945f5baf0eSAlexander Motin #define MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP           (0x0D)
149567feec50SStephen McConnell #define MPI2_FW_DOWNLOAD_ITYPE_SBR                  (0x0E)
149667feec50SStephen McConnell #define MPI2_FW_DOWNLOAD_ITYPE_SBR_BACKUP           (0x0F)
149767feec50SStephen McConnell #define MPI2_FW_DOWNLOAD_ITYPE_HIIM                 (0x10)
149867feec50SStephen McConnell #define MPI2_FW_DOWNLOAD_ITYPE_HIIA                 (0x11)
149967feec50SStephen McConnell #define MPI2_FW_DOWNLOAD_ITYPE_CTLR                 (0x12)
150067feec50SStephen McConnell #define MPI2_FW_DOWNLOAD_ITYPE_IMR_FIRMWARE         (0x13)
150167feec50SStephen McConnell #define MPI2_FW_DOWNLOAD_ITYPE_MR_NVDATA            (0x14)
1502*8736c018SKashyap D Desai #define MPI2_FW_DOWNLOAD_ITYPE_CPLD                 (0x15) /* MPI v2.6 and newer */
1503*8736c018SKashyap D Desai #define MPI2_FW_DOWNLOAD_ITYPE_PSOC                 (0x16) /* MPI v2.6 and newer */
1504991554f2SKenneth D. Merry #define MPI2_FW_DOWNLOAD_ITYPE_MIN_PRODUCT_SPECIFIC (0xF0)
1505*8736c018SKashyap D Desai #define MPI2_FW_DOWNLOAD_ITYPE_TERMINATE            (0xFF) /* MPI v2.6 and newer */
1506*8736c018SKashyap D Desai 
1507991554f2SKenneth D. Merry /* MPI v2.0 FWDownload TransactionContext Element */
1508991554f2SKenneth D. Merry typedef struct _MPI2_FW_DOWNLOAD_TCSGE
1509991554f2SKenneth D. Merry {
1510991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x00 */
1511991554f2SKenneth D. Merry     U8                      ContextSize;                /* 0x01 */
1512991554f2SKenneth D. Merry     U8                      DetailsLength;              /* 0x02 */
1513991554f2SKenneth D. Merry     U8                      Flags;                      /* 0x03 */
1514991554f2SKenneth D. Merry     U32                     Reserved2;                  /* 0x04 */
1515991554f2SKenneth D. Merry     U32                     ImageOffset;                /* 0x08 */
1516991554f2SKenneth D. Merry     U32                     ImageSize;                  /* 0x0C */
1517991554f2SKenneth D. Merry } MPI2_FW_DOWNLOAD_TCSGE, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_TCSGE,
1518991554f2SKenneth D. Merry   Mpi2FWDownloadTCSGE_t, MPI2_POINTER pMpi2FWDownloadTCSGE_t;
1519991554f2SKenneth D. Merry 
1520991554f2SKenneth D. Merry /* MPI v2.5 FWDownload Request message */
1521991554f2SKenneth D. Merry typedef struct _MPI25_FW_DOWNLOAD_REQUEST
1522991554f2SKenneth D. Merry {
1523991554f2SKenneth D. Merry     U8                      ImageType;                  /* 0x00 */
1524991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1525991554f2SKenneth D. Merry     U8                      ChainOffset;                /* 0x02 */
1526991554f2SKenneth D. Merry     U8                      Function;                   /* 0x03 */
1527991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x04 */
1528991554f2SKenneth D. Merry     U8                      Reserved3;                  /* 0x06 */
1529991554f2SKenneth D. Merry     U8                      MsgFlags;                   /* 0x07 */
1530991554f2SKenneth D. Merry     U8                      VP_ID;                      /* 0x08 */
1531991554f2SKenneth D. Merry     U8                      VF_ID;                      /* 0x09 */
1532991554f2SKenneth D. Merry     U16                     Reserved4;                  /* 0x0A */
1533991554f2SKenneth D. Merry     U32                     TotalImageSize;             /* 0x0C */
1534991554f2SKenneth D. Merry     U32                     Reserved5;                  /* 0x10 */
1535991554f2SKenneth D. Merry     U32                     Reserved6;                  /* 0x14 */
1536991554f2SKenneth D. Merry     U32                     ImageOffset;                /* 0x18 */
1537991554f2SKenneth D. Merry     U32                     ImageSize;                  /* 0x1C */
1538991554f2SKenneth D. Merry     MPI25_SGE_IO_UNION      SGL;                        /* 0x20 */
1539991554f2SKenneth D. Merry } MPI25_FW_DOWNLOAD_REQUEST, MPI2_POINTER PTR_MPI25_FW_DOWNLOAD_REQUEST,
1540991554f2SKenneth D. Merry   Mpi25FWDownloadRequest, MPI2_POINTER pMpi25FWDownloadRequest;
1541991554f2SKenneth D. Merry 
1542991554f2SKenneth D. Merry /* FWDownload Reply message */
1543991554f2SKenneth D. Merry typedef struct _MPI2_FW_DOWNLOAD_REPLY
1544991554f2SKenneth D. Merry {
1545991554f2SKenneth D. Merry     U8                      ImageType;                  /* 0x00 */
1546991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1547991554f2SKenneth D. Merry     U8                      MsgLength;                  /* 0x02 */
1548991554f2SKenneth D. Merry     U8                      Function;                   /* 0x03 */
1549991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x04 */
1550991554f2SKenneth D. Merry     U8                      Reserved3;                  /* 0x06 */
1551991554f2SKenneth D. Merry     U8                      MsgFlags;                   /* 0x07 */
1552991554f2SKenneth D. Merry     U8                      VP_ID;                      /* 0x08 */
1553991554f2SKenneth D. Merry     U8                      VF_ID;                      /* 0x09 */
1554991554f2SKenneth D. Merry     U16                     Reserved4;                  /* 0x0A */
1555991554f2SKenneth D. Merry     U16                     Reserved5;                  /* 0x0C */
1556991554f2SKenneth D. Merry     U16                     IOCStatus;                  /* 0x0E */
1557991554f2SKenneth D. Merry     U32                     IOCLogInfo;                 /* 0x10 */
1558991554f2SKenneth D. Merry } MPI2_FW_DOWNLOAD_REPLY, MPI2_POINTER PTR_MPI2_FW_DOWNLOAD_REPLY,
1559991554f2SKenneth D. Merry   Mpi2FWDownloadReply_t, MPI2_POINTER pMpi2FWDownloadReply_t;
1560991554f2SKenneth D. Merry 
1561991554f2SKenneth D. Merry /****************************************************************************
1562991554f2SKenneth D. Merry *  FWUpload message
1563991554f2SKenneth D. Merry ****************************************************************************/
1564991554f2SKenneth D. Merry 
1565991554f2SKenneth D. Merry /* MPI v2.0 FWUpload Request message */
1566991554f2SKenneth D. Merry typedef struct _MPI2_FW_UPLOAD_REQUEST
1567991554f2SKenneth D. Merry {
1568991554f2SKenneth D. Merry     U8                      ImageType;                  /* 0x00 */
1569991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1570991554f2SKenneth D. Merry     U8                      ChainOffset;                /* 0x02 */
1571991554f2SKenneth D. Merry     U8                      Function;                   /* 0x03 */
1572991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x04 */
1573991554f2SKenneth D. Merry     U8                      Reserved3;                  /* 0x06 */
1574991554f2SKenneth D. Merry     U8                      MsgFlags;                   /* 0x07 */
1575991554f2SKenneth D. Merry     U8                      VP_ID;                      /* 0x08 */
1576991554f2SKenneth D. Merry     U8                      VF_ID;                      /* 0x09 */
1577991554f2SKenneth D. Merry     U16                     Reserved4;                  /* 0x0A */
1578991554f2SKenneth D. Merry     U32                     Reserved5;                  /* 0x0C */
1579991554f2SKenneth D. Merry     U32                     Reserved6;                  /* 0x10 */
1580991554f2SKenneth D. Merry     MPI2_MPI_SGE_UNION      SGL;                        /* 0x14 */
1581991554f2SKenneth D. Merry } MPI2_FW_UPLOAD_REQUEST, MPI2_POINTER PTR_MPI2_FW_UPLOAD_REQUEST,
1582991554f2SKenneth D. Merry   Mpi2FWUploadRequest_t, MPI2_POINTER pMpi2FWUploadRequest_t;
1583991554f2SKenneth D. Merry 
1584991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_FW_CURRENT         (0x00)
1585991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_FW_FLASH           (0x01)
1586991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_BIOS_FLASH         (0x02)
1587991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_FW_BACKUP          (0x05)
1588991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_MANUFACTURING      (0x06)
1589991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_CONFIG_1           (0x07)
1590991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_CONFIG_2           (0x08)
1591991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_MEGARAID           (0x09)
1592991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_COMPLETE           (0x0A)
1593991554f2SKenneth D. Merry #define MPI2_FW_UPLOAD_ITYPE_COMMON_BOOT_BLOCK  (0x0B)
159428ae62b0SStephen McConnell #define MPI2_FW_UPLOAD_ITYPE_CBB_BACKUP         (0x0D)
159567feec50SStephen McConnell #define MPI2_FW_UPLOAD_ITYPE_SBR                (0x0E)
159667feec50SStephen McConnell #define MPI2_FW_UPLOAD_ITYPE_SBR_BACKUP         (0x0F)
159767feec50SStephen McConnell #define MPI2_FW_UPLOAD_ITYPE_HIIM               (0x10)
159867feec50SStephen McConnell #define MPI2_FW_UPLOAD_ITYPE_HIIA               (0x11)
159967feec50SStephen McConnell #define MPI2_FW_UPLOAD_ITYPE_CTLR               (0x12)
160067feec50SStephen McConnell #define MPI2_FW_UPLOAD_ITYPE_IMR_FIRMWARE       (0x13)
160167feec50SStephen McConnell #define MPI2_FW_UPLOAD_ITYPE_MR_NVDATA          (0x14)
1602991554f2SKenneth D. Merry 
1603991554f2SKenneth D. Merry /* MPI v2.0 FWUpload TransactionContext Element */
1604991554f2SKenneth D. Merry typedef struct _MPI2_FW_UPLOAD_TCSGE
1605991554f2SKenneth D. Merry {
1606991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x00 */
1607991554f2SKenneth D. Merry     U8                      ContextSize;                /* 0x01 */
1608991554f2SKenneth D. Merry     U8                      DetailsLength;              /* 0x02 */
1609991554f2SKenneth D. Merry     U8                      Flags;                      /* 0x03 */
1610991554f2SKenneth D. Merry     U32                     Reserved2;                  /* 0x04 */
1611991554f2SKenneth D. Merry     U32                     ImageOffset;                /* 0x08 */
1612991554f2SKenneth D. Merry     U32                     ImageSize;                  /* 0x0C */
1613991554f2SKenneth D. Merry } MPI2_FW_UPLOAD_TCSGE, MPI2_POINTER PTR_MPI2_FW_UPLOAD_TCSGE,
1614991554f2SKenneth D. Merry   Mpi2FWUploadTCSGE_t, MPI2_POINTER pMpi2FWUploadTCSGE_t;
1615991554f2SKenneth D. Merry 
1616991554f2SKenneth D. Merry /* MPI v2.5 FWUpload Request message */
1617991554f2SKenneth D. Merry typedef struct _MPI25_FW_UPLOAD_REQUEST
1618991554f2SKenneth D. Merry {
1619991554f2SKenneth D. Merry     U8                      ImageType;                  /* 0x00 */
1620991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1621991554f2SKenneth D. Merry     U8                      ChainOffset;                /* 0x02 */
1622991554f2SKenneth D. Merry     U8                      Function;                   /* 0x03 */
1623991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x04 */
1624991554f2SKenneth D. Merry     U8                      Reserved3;                  /* 0x06 */
1625991554f2SKenneth D. Merry     U8                      MsgFlags;                   /* 0x07 */
1626991554f2SKenneth D. Merry     U8                      VP_ID;                      /* 0x08 */
1627991554f2SKenneth D. Merry     U8                      VF_ID;                      /* 0x09 */
1628991554f2SKenneth D. Merry     U16                     Reserved4;                  /* 0x0A */
1629991554f2SKenneth D. Merry     U32                     Reserved5;                  /* 0x0C */
1630991554f2SKenneth D. Merry     U32                     Reserved6;                  /* 0x10 */
1631991554f2SKenneth D. Merry     U32                     Reserved7;                  /* 0x14 */
1632991554f2SKenneth D. Merry     U32                     ImageOffset;                /* 0x18 */
1633991554f2SKenneth D. Merry     U32                     ImageSize;                  /* 0x1C */
1634991554f2SKenneth D. Merry     MPI25_SGE_IO_UNION      SGL;                        /* 0x20 */
1635991554f2SKenneth D. Merry } MPI25_FW_UPLOAD_REQUEST, MPI2_POINTER PTR_MPI25_FW_UPLOAD_REQUEST,
1636991554f2SKenneth D. Merry   Mpi25FWUploadRequest_t, MPI2_POINTER pMpi25FWUploadRequest_t;
1637991554f2SKenneth D. Merry 
1638991554f2SKenneth D. Merry /* FWUpload Reply message */
1639991554f2SKenneth D. Merry typedef struct _MPI2_FW_UPLOAD_REPLY
1640991554f2SKenneth D. Merry {
1641991554f2SKenneth D. Merry     U8                      ImageType;                  /* 0x00 */
1642991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1643991554f2SKenneth D. Merry     U8                      MsgLength;                  /* 0x02 */
1644991554f2SKenneth D. Merry     U8                      Function;                   /* 0x03 */
1645991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x04 */
1646991554f2SKenneth D. Merry     U8                      Reserved3;                  /* 0x06 */
1647991554f2SKenneth D. Merry     U8                      MsgFlags;                   /* 0x07 */
1648991554f2SKenneth D. Merry     U8                      VP_ID;                      /* 0x08 */
1649991554f2SKenneth D. Merry     U8                      VF_ID;                      /* 0x09 */
1650991554f2SKenneth D. Merry     U16                     Reserved4;                  /* 0x0A */
1651991554f2SKenneth D. Merry     U16                     Reserved5;                  /* 0x0C */
1652991554f2SKenneth D. Merry     U16                     IOCStatus;                  /* 0x0E */
1653991554f2SKenneth D. Merry     U32                     IOCLogInfo;                 /* 0x10 */
1654991554f2SKenneth D. Merry     U32                     ActualImageSize;            /* 0x14 */
1655991554f2SKenneth D. Merry } MPI2_FW_UPLOAD_REPLY, MPI2_POINTER PTR_MPI2_FW_UPLOAD_REPLY,
1656991554f2SKenneth D. Merry   Mpi2FWUploadReply_t, MPI2_POINTER pMPi2FWUploadReply_t;
1657991554f2SKenneth D. Merry 
1658991554f2SKenneth D. Merry /****************************************************************************
1659991554f2SKenneth D. Merry *  PowerManagementControl message
1660991554f2SKenneth D. Merry ****************************************************************************/
1661991554f2SKenneth D. Merry 
1662991554f2SKenneth D. Merry /* PowerManagementControl Request message */
1663991554f2SKenneth D. Merry typedef struct _MPI2_PWR_MGMT_CONTROL_REQUEST
1664991554f2SKenneth D. Merry {
1665991554f2SKenneth D. Merry     U8                      Feature;                    /* 0x00 */
1666991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1667991554f2SKenneth D. Merry     U8                      ChainOffset;                /* 0x02 */
1668991554f2SKenneth D. Merry     U8                      Function;                   /* 0x03 */
1669991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x04 */
1670991554f2SKenneth D. Merry     U8                      Reserved3;                  /* 0x06 */
1671991554f2SKenneth D. Merry     U8                      MsgFlags;                   /* 0x07 */
1672991554f2SKenneth D. Merry     U8                      VP_ID;                      /* 0x08 */
1673991554f2SKenneth D. Merry     U8                      VF_ID;                      /* 0x09 */
1674991554f2SKenneth D. Merry     U16                     Reserved4;                  /* 0x0A */
1675991554f2SKenneth D. Merry     U8                      Parameter1;                 /* 0x0C */
1676991554f2SKenneth D. Merry     U8                      Parameter2;                 /* 0x0D */
1677991554f2SKenneth D. Merry     U8                      Parameter3;                 /* 0x0E */
1678991554f2SKenneth D. Merry     U8                      Parameter4;                 /* 0x0F */
1679991554f2SKenneth D. Merry     U32                     Reserved5;                  /* 0x10 */
1680991554f2SKenneth D. Merry     U32                     Reserved6;                  /* 0x14 */
1681991554f2SKenneth D. Merry } MPI2_PWR_MGMT_CONTROL_REQUEST, MPI2_POINTER PTR_MPI2_PWR_MGMT_CONTROL_REQUEST,
1682991554f2SKenneth D. Merry   Mpi2PwrMgmtControlRequest_t, MPI2_POINTER pMpi2PwrMgmtControlRequest_t;
1683991554f2SKenneth D. Merry 
1684991554f2SKenneth D. Merry /* defines for the Feature field */
1685991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND       (0x01)
1686991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION   (0x02)
1687991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_FEATURE_PCIE_LINK               (0x03) /* obsolete */
1688991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_FEATURE_IOC_SPEED               (0x04)
1689991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_FEATURE_GLOBAL_PWR_MGMT_MODE    (0x05) /* reserved in MPI 2.0 */
1690991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_FEATURE_MIN_PRODUCT_SPECIFIC    (0x80)
1691991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_FEATURE_MAX_PRODUCT_SPECIFIC    (0xFF)
1692991554f2SKenneth D. Merry 
1693991554f2SKenneth D. Merry /* parameter usage for the MPI2_PM_CONTROL_FEATURE_DA_PHY_POWER_COND Feature */
1694991554f2SKenneth D. Merry /* Parameter1 contains a PHY number */
1695991554f2SKenneth D. Merry /* Parameter2 indicates power condition action using these defines */
1696991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_PARTIAL                  (0x01)
1697991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_SLUMBER                  (0x02)
1698991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_EXIT_PWR_MGMT            (0x03)
1699991554f2SKenneth D. Merry /* Parameter3 and Parameter4 are reserved */
1700991554f2SKenneth D. Merry 
1701991554f2SKenneth D. Merry /* parameter usage for the MPI2_PM_CONTROL_FEATURE_PORT_WIDTH_MODULATION Feature */
1702991554f2SKenneth D. Merry /* Parameter1 contains SAS port width modulation group number */
1703991554f2SKenneth D. Merry /* Parameter2 indicates IOC action using these defines */
1704991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_REQUEST_OWNERSHIP        (0x01)
1705991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_CHANGE_MODULATION        (0x02)
1706991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_RELINQUISH_OWNERSHIP     (0x03)
1707991554f2SKenneth D. Merry /* Parameter3 indicates desired modulation level using these defines */
1708991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM3_25_PERCENT               (0x00)
1709991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM3_50_PERCENT               (0x01)
1710991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM3_75_PERCENT               (0x02)
1711991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM3_100_PERCENT              (0x03)
1712991554f2SKenneth D. Merry /* Parameter4 is reserved */
1713991554f2SKenneth D. Merry 
1714991554f2SKenneth D. Merry /* this next set (_PCIE_LINK) is obsolete */
1715991554f2SKenneth D. Merry /* parameter usage for the MPI2_PM_CONTROL_FEATURE_PCIE_LINK Feature */
1716991554f2SKenneth D. Merry /* Parameter1 indicates desired PCIe link speed using these defines */
1717991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_PCIE_2_5_GBPS            (0x00) /* obsolete */
1718991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_PCIE_5_0_GBPS            (0x01) /* obsolete */
1719991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_PCIE_8_0_GBPS            (0x02) /* obsolete */
1720991554f2SKenneth D. Merry /* Parameter2 indicates desired PCIe link width using these defines */
1721991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_WIDTH_X1                 (0x01) /* obsolete */
1722991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_WIDTH_X2                 (0x02) /* obsolete */
1723991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_WIDTH_X4                 (0x04) /* obsolete */
1724991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_WIDTH_X8                 (0x08) /* obsolete */
1725991554f2SKenneth D. Merry /* Parameter3 and Parameter4 are reserved */
1726991554f2SKenneth D. Merry 
1727991554f2SKenneth D. Merry /* parameter usage for the MPI2_PM_CONTROL_FEATURE_IOC_SPEED Feature */
1728991554f2SKenneth D. Merry /* Parameter1 indicates desired IOC hardware clock speed using these defines */
1729991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_FULL_IOC_SPEED           (0x01)
1730991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_HALF_IOC_SPEED           (0x02)
1731991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_QUARTER_IOC_SPEED        (0x04)
1732991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_EIGHTH_IOC_SPEED         (0x08)
1733991554f2SKenneth D. Merry /* Parameter2, Parameter3, and Parameter4 are reserved */
1734991554f2SKenneth D. Merry 
1735991554f2SKenneth D. Merry /* parameter usage for the MPI2_PM_CONTROL_FEATURE_GLOBAL_PWR_MGMT_MODE Feature */
1736991554f2SKenneth D. Merry /* Parameter1 indicates host action regarding global power management mode */
1737991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_TAKE_CONTROL             (0x01)
1738991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_CHANGE_GLOBAL_MODE       (0x02)
1739991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM1_RELEASE_CONTROL          (0x03)
1740991554f2SKenneth D. Merry /* Parameter2 indicates the requested global power management mode */
1741991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_FULL_PWR_PERF            (0x01)
1742991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_REDUCED_PWR_PERF         (0x08)
1743991554f2SKenneth D. Merry #define MPI2_PM_CONTROL_PARAM2_STANDBY                  (0x40)
1744991554f2SKenneth D. Merry /* Parameter3 and Parameter4 are reserved */
1745991554f2SKenneth D. Merry 
1746991554f2SKenneth D. Merry /* PowerManagementControl Reply message */
1747991554f2SKenneth D. Merry typedef struct _MPI2_PWR_MGMT_CONTROL_REPLY
1748991554f2SKenneth D. Merry {
1749991554f2SKenneth D. Merry     U8                      Feature;                    /* 0x00 */
1750991554f2SKenneth D. Merry     U8                      Reserved1;                  /* 0x01 */
1751991554f2SKenneth D. Merry     U8                      MsgLength;                  /* 0x02 */
1752991554f2SKenneth D. Merry     U8                      Function;                   /* 0x03 */
1753991554f2SKenneth D. Merry     U16                     Reserved2;                  /* 0x04 */
1754991554f2SKenneth D. Merry     U8                      Reserved3;                  /* 0x06 */
1755991554f2SKenneth D. Merry     U8                      MsgFlags;                   /* 0x07 */
1756991554f2SKenneth D. Merry     U8                      VP_ID;                      /* 0x08 */
1757991554f2SKenneth D. Merry     U8                      VF_ID;                      /* 0x09 */
1758991554f2SKenneth D. Merry     U16                     Reserved4;                  /* 0x0A */
1759991554f2SKenneth D. Merry     U16                     Reserved5;                  /* 0x0C */
1760991554f2SKenneth D. Merry     U16                     IOCStatus;                  /* 0x0E */
1761991554f2SKenneth D. Merry     U32                     IOCLogInfo;                 /* 0x10 */
1762991554f2SKenneth D. Merry } MPI2_PWR_MGMT_CONTROL_REPLY, MPI2_POINTER PTR_MPI2_PWR_MGMT_CONTROL_REPLY,
1763991554f2SKenneth D. Merry   Mpi2PwrMgmtControlReply_t, MPI2_POINTER pMpi2PwrMgmtControlReply_t;
1764991554f2SKenneth D. Merry 
176528ae62b0SStephen McConnell /****************************************************************************
176628ae62b0SStephen McConnell *  IO Unit Control messages (MPI v2.6 and later only.)
176728ae62b0SStephen McConnell ****************************************************************************/
176828ae62b0SStephen McConnell 
176928ae62b0SStephen McConnell /* IO Unit Control Request Message */
177028ae62b0SStephen McConnell typedef struct _MPI26_IOUNIT_CONTROL_REQUEST
177128ae62b0SStephen McConnell {
177228ae62b0SStephen McConnell     U8                      Operation;          /* 0x00 */
177328ae62b0SStephen McConnell     U8                      Reserved1;          /* 0x01 */
177428ae62b0SStephen McConnell     U8                      ChainOffset;        /* 0x02 */
177528ae62b0SStephen McConnell     U8                      Function;           /* 0x03 */
177628ae62b0SStephen McConnell     U16                     DevHandle;          /* 0x04 */
177728ae62b0SStephen McConnell     U8                      IOCParameter;       /* 0x06 */
177828ae62b0SStephen McConnell     U8                      MsgFlags;           /* 0x07 */
177928ae62b0SStephen McConnell     U8                      VP_ID;              /* 0x08 */
178028ae62b0SStephen McConnell     U8                      VF_ID;              /* 0x09 */
178128ae62b0SStephen McConnell     U16                     Reserved3;          /* 0x0A */
178228ae62b0SStephen McConnell     U16                     Reserved4;          /* 0x0C */
178328ae62b0SStephen McConnell     U8                      PhyNum;             /* 0x0E */
178428ae62b0SStephen McConnell     U8                      PrimFlags;          /* 0x0F */
178528ae62b0SStephen McConnell     U32                     Primitive;          /* 0x10 */
178628ae62b0SStephen McConnell     U8                      LookupMethod;       /* 0x14 */
178728ae62b0SStephen McConnell     U8                      Reserved5;          /* 0x15 */
178828ae62b0SStephen McConnell     U16                     SlotNumber;         /* 0x16 */
178928ae62b0SStephen McConnell     U64                     LookupAddress;      /* 0x18 */
179028ae62b0SStephen McConnell     U32                     IOCParameterValue;  /* 0x20 */
179128ae62b0SStephen McConnell     U32                     Reserved7;          /* 0x24 */
179228ae62b0SStephen McConnell     U32                     Reserved8;          /* 0x28 */
179328ae62b0SStephen McConnell } MPI26_IOUNIT_CONTROL_REQUEST,
179428ae62b0SStephen McConnell   MPI2_POINTER PTR_MPI26_IOUNIT_CONTROL_REQUEST,
179528ae62b0SStephen McConnell   Mpi26IoUnitControlRequest_t, MPI2_POINTER pMpi26IoUnitControlRequest_t;
179628ae62b0SStephen McConnell 
179728ae62b0SStephen McConnell /* values for the Operation field */
179828ae62b0SStephen McConnell #define MPI26_CTRL_OP_CLEAR_ALL_PERSISTENT              (0x02)
179928ae62b0SStephen McConnell #define MPI26_CTRL_OP_SAS_PHY_LINK_RESET                (0x06)
180028ae62b0SStephen McConnell #define MPI26_CTRL_OP_SAS_PHY_HARD_RESET                (0x07)
180128ae62b0SStephen McConnell #define MPI26_CTRL_OP_PHY_CLEAR_ERROR_LOG               (0x08)
180228ae62b0SStephen McConnell #define MPI26_CTRL_OP_LINK_CLEAR_ERROR_LOG              (0x09)
180328ae62b0SStephen McConnell #define MPI26_CTRL_OP_SAS_SEND_PRIMITIVE                (0x0A)
180428ae62b0SStephen McConnell #define MPI26_CTRL_OP_FORCE_FULL_DISCOVERY              (0x0B)
180528ae62b0SStephen McConnell #define MPI26_CTRL_OP_REMOVE_DEVICE                     (0x0D)
180628ae62b0SStephen McConnell #define MPI26_CTRL_OP_LOOKUP_MAPPING                    (0x0E)
180728ae62b0SStephen McConnell #define MPI26_CTRL_OP_SET_IOC_PARAMETER                 (0x0F)
180828ae62b0SStephen McConnell #define MPI26_CTRL_OP_ENABLE_FP_DEVICE                  (0x10)
180928ae62b0SStephen McConnell #define MPI26_CTRL_OP_DISABLE_FP_DEVICE                 (0x11)
181028ae62b0SStephen McConnell #define MPI26_CTRL_OP_ENABLE_FP_ALL                     (0x12)
181128ae62b0SStephen McConnell #define MPI26_CTRL_OP_DISABLE_FP_ALL                    (0x13)
181228ae62b0SStephen McConnell #define MPI26_CTRL_OP_DEV_ENABLE_NCQ                    (0x14)
181328ae62b0SStephen McConnell #define MPI26_CTRL_OP_DEV_DISABLE_NCQ                   (0x15)
181428ae62b0SStephen McConnell #define MPI26_CTRL_OP_SHUTDOWN                          (0x16)
181528ae62b0SStephen McConnell #define MPI26_CTRL_OP_DEV_ENABLE_PERSIST_CONNECTION     (0x17)
181628ae62b0SStephen McConnell #define MPI26_CTRL_OP_DEV_DISABLE_PERSIST_CONNECTION    (0x18)
181728ae62b0SStephen McConnell #define MPI26_CTRL_OP_DEV_CLOSE_PERSIST_CONNECTION      (0x19)
181867feec50SStephen McConnell #define MPI26_CTRL_OP_ENABLE_NVME_SGL_FORMAT            (0x1A)
181967feec50SStephen McConnell #define MPI26_CTRL_OP_DISABLE_NVME_SGL_FORMAT           (0x1B)
182028ae62b0SStephen McConnell #define MPI26_CTRL_OP_PRODUCT_SPECIFIC_MIN              (0x80)
182128ae62b0SStephen McConnell 
182228ae62b0SStephen McConnell /* values for the PrimFlags field */
182328ae62b0SStephen McConnell #define MPI26_CTRL_PRIMFLAGS_SINGLE                     (0x08)
182428ae62b0SStephen McConnell #define MPI26_CTRL_PRIMFLAGS_TRIPLE                     (0x02)
182528ae62b0SStephen McConnell #define MPI26_CTRL_PRIMFLAGS_REDUNDANT                  (0x01)
182628ae62b0SStephen McConnell 
182728ae62b0SStephen McConnell /* values for the LookupMethod field */
182828ae62b0SStephen McConnell #define MPI26_CTRL_LOOKUP_METHOD_WWID_ADDRESS           (0x01)
182928ae62b0SStephen McConnell #define MPI26_CTRL_LOOKUP_METHOD_ENCLOSURE_SLOT         (0x02)
183028ae62b0SStephen McConnell #define MPI26_CTRL_LOOKUP_METHOD_SAS_DEVICE_NAME        (0x03)
183128ae62b0SStephen McConnell 
183228ae62b0SStephen McConnell /* IO Unit Control Reply Message */
183328ae62b0SStephen McConnell typedef struct _MPI26_IOUNIT_CONTROL_REPLY
183428ae62b0SStephen McConnell {
183528ae62b0SStephen McConnell     U8                      Operation;          /* 0x00 */
183628ae62b0SStephen McConnell     U8                      Reserved1;          /* 0x01 */
183728ae62b0SStephen McConnell     U8                      MsgLength;          /* 0x02 */
183828ae62b0SStephen McConnell     U8                      Function;           /* 0x03 */
183928ae62b0SStephen McConnell     U16                     DevHandle;          /* 0x04 */
184028ae62b0SStephen McConnell     U8                      IOCParameter;       /* 0x06 */
184128ae62b0SStephen McConnell     U8                      MsgFlags;           /* 0x07 */
184228ae62b0SStephen McConnell     U8                      VP_ID;              /* 0x08 */
184328ae62b0SStephen McConnell     U8                      VF_ID;              /* 0x09 */
184428ae62b0SStephen McConnell     U16                     Reserved3;          /* 0x0A */
184528ae62b0SStephen McConnell     U16                     Reserved4;          /* 0x0C */
184628ae62b0SStephen McConnell     U16                     IOCStatus;          /* 0x0E */
184728ae62b0SStephen McConnell     U32                     IOCLogInfo;         /* 0x10 */
184828ae62b0SStephen McConnell } MPI26_IOUNIT_CONTROL_REPLY, MPI2_POINTER PTR_MPI26_IOUNIT_CONTROL_REPLY,
184928ae62b0SStephen McConnell   Mpi26IoUnitControlReply_t, MPI2_POINTER pMpi26IoUnitControlReply_t;
185028ae62b0SStephen McConnell 
1851991554f2SKenneth D. Merry #endif
1852