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