xref: /dflybsd-src/sys/dev/raid/mpr/mpi/mpi2_init.h (revision fd501800cafe382e0751b7be1342c553b3335543)
1*fd501800SSascha Wildner /*-
2*fd501800SSascha Wildner  * Copyright (c) 2012-2015 LSI Corp.
3*fd501800SSascha Wildner  * Copyright (c) 2013-2016 Avago Technologies
4*fd501800SSascha Wildner  * All rights reserved.
5*fd501800SSascha Wildner  *
6*fd501800SSascha Wildner  * Redistribution and use in source and binary forms, with or without
7*fd501800SSascha Wildner  * modification, are permitted provided that the following conditions
8*fd501800SSascha Wildner  * are met:
9*fd501800SSascha Wildner  * 1. Redistributions of source code must retain the above copyright
10*fd501800SSascha Wildner  *    notice, this list of conditions and the following disclaimer.
11*fd501800SSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
12*fd501800SSascha Wildner  *    notice, this list of conditions and the following disclaimer in the
13*fd501800SSascha Wildner  *    documentation and/or other materials provided with the distribution.
14*fd501800SSascha Wildner  * 3. Neither the name of the author nor the names of any co-contributors
15*fd501800SSascha Wildner  *    may be used to endorse or promote products derived from this software
16*fd501800SSascha Wildner  *    without specific prior written permission.
17*fd501800SSascha Wildner  *
18*fd501800SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19*fd501800SSascha Wildner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*fd501800SSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*fd501800SSascha Wildner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22*fd501800SSascha Wildner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*fd501800SSascha Wildner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*fd501800SSascha Wildner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*fd501800SSascha Wildner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*fd501800SSascha Wildner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*fd501800SSascha Wildner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*fd501800SSascha Wildner  * SUCH DAMAGE.
29*fd501800SSascha Wildner  *
30*fd501800SSascha Wildner  * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
31*fd501800SSascha Wildner  *
32*fd501800SSascha Wildner  * $FreeBSD: head/sys/dev/mpr/mpi/mpi2_init.h 318427 2017-05-17 21:33:37Z slm $
33*fd501800SSascha Wildner  */
34*fd501800SSascha Wildner 
35*fd501800SSascha Wildner /*
36*fd501800SSascha Wildner  *  Copyright (c) 2000-2015 LSI Corporation.
37*fd501800SSascha Wildner  *  Copyright (c) 2013-2016 Avago Technologies
38*fd501800SSascha Wildner  *  All rights reserved.
39*fd501800SSascha Wildner  *
40*fd501800SSascha Wildner  *
41*fd501800SSascha Wildner  *           Name:  mpi2_init.h
42*fd501800SSascha Wildner  *          Title:  MPI SCSI initiator mode messages and structures
43*fd501800SSascha Wildner  *  Creation Date:  June 23, 2006
44*fd501800SSascha Wildner  *
45*fd501800SSascha Wildner  *  mpi2_init.h Version:  02.00.21
46*fd501800SSascha Wildner  *
47*fd501800SSascha Wildner  *  NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
48*fd501800SSascha Wildner  *        prefix are for use only on MPI v2.5 products, and must not be used
49*fd501800SSascha Wildner  *        with MPI v2.0 products. Unless otherwise noted, names beginning with
50*fd501800SSascha Wildner  *        MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products.
51*fd501800SSascha Wildner  *
52*fd501800SSascha Wildner  *  Version History
53*fd501800SSascha Wildner  *  ---------------
54*fd501800SSascha Wildner  *
55*fd501800SSascha Wildner  *  Date      Version   Description
56*fd501800SSascha Wildner  *  --------  --------  ------------------------------------------------------
57*fd501800SSascha Wildner  *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
58*fd501800SSascha Wildner  *  10-31-07  02.00.01  Fixed name for pMpi2SCSITaskManagementRequest_t.
59*fd501800SSascha Wildner  *  12-18-07  02.00.02  Modified Task Management Target Reset Method defines.
60*fd501800SSascha Wildner  *  02-29-08  02.00.03  Added Query Task Set and Query Unit Attention.
61*fd501800SSascha Wildner  *  03-03-08  02.00.04  Fixed name of struct _MPI2_SCSI_TASK_MANAGE_REPLY.
62*fd501800SSascha Wildner  *  05-21-08  02.00.05  Fixed typo in name of Mpi2SepRequest_t.
63*fd501800SSascha Wildner  *  10-02-08  02.00.06  Removed Untagged and No Disconnect values from SCSI IO
64*fd501800SSascha Wildner  *                      Control field Task Attribute flags.
65*fd501800SSascha Wildner  *                      Moved LUN field defines to mpi2.h because they are
66*fd501800SSascha Wildner  *                      common to many structures.
67*fd501800SSascha Wildner  *  05-06-09  02.00.07  Changed task management type of Query Unit Attention to
68*fd501800SSascha Wildner  *                      Query Asynchronous Event.
69*fd501800SSascha Wildner  *                      Defined two new bits in the SlotStatus field of the SCSI
70*fd501800SSascha Wildner  *                      Enclosure Processor Request and Reply.
71*fd501800SSascha Wildner  *  10-28-09  02.00.08  Added defines for decoding the ResponseInfo bytes for
72*fd501800SSascha Wildner  *                      both SCSI IO Error Reply and SCSI Task Management Reply.
73*fd501800SSascha Wildner  *                      Added ResponseInfo field to MPI2_SCSI_TASK_MANAGE_REPLY.
74*fd501800SSascha Wildner  *                      Added MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG define.
75*fd501800SSascha Wildner  *  02-10-10  02.00.09  Removed unused structure that had "#if 0" around it.
76*fd501800SSascha Wildner  *  05-12-10  02.00.10  Added optional vendor-unique region to SCSI IO Request.
77*fd501800SSascha Wildner  *  11-10-10  02.00.11  Added MPI2_SCSIIO_NUM_SGLOFFSETS define.
78*fd501800SSascha Wildner  *  11-18-11  02.00.12  Incorporating additions for MPI v2.5.
79*fd501800SSascha Wildner  *  02-06-12  02.00.13  Added alternate defines for Task Priority / Command
80*fd501800SSascha Wildner  *                      Priority to match SAM-4.
81*fd501800SSascha Wildner  *                      Added EEDPErrorOffset to MPI2_SCSI_IO_REPLY.
82*fd501800SSascha Wildner  *  07-10-12  02.00.14  Added MPI2_SCSIIO_CONTROL_SHIFT_DATADIRECTION.
83*fd501800SSascha Wildner  *  04-09-13  02.00.15  Added SCSIStatusQualifier field to MPI2_SCSI_IO_REPLY,
84*fd501800SSascha Wildner  *                      replacing the Reserved4 field.
85*fd501800SSascha Wildner  *  11-18-14  02.00.16  Updated copyright information.
86*fd501800SSascha Wildner  *  03-16-15  02.00.17  Updated for MPI v2.6.
87*fd501800SSascha Wildner  *                      Added MPI26_SCSIIO_IOFLAGS_ESCAPE_PASSTHROUGH.
88*fd501800SSascha Wildner  *                      Added MPI2_SEP_REQ_SLOTSTATUS_DEV_OFF and
89*fd501800SSascha Wildner  *                      MPI2_SEP_REPLY_SLOTSTATUS_DEV_OFF.
90*fd501800SSascha Wildner  *  08-26-15  02.00.18  Added SCSITASKMGMT_MSGFLAGS for Target Reset.
91*fd501800SSascha Wildner  *  12-18-15  02.00.19  Added EEDPObservedValue added to SCSI IO Reply message.
92*fd501800SSascha Wildner  *  01-04-16  02.00.20  Modified EEDP reported values in SCSI IO Reply message.
93*fd501800SSascha Wildner  *  01-21-16  02.00.21  Modified MPI26_SCSITASKMGMT_MSGFLAGS_PCIE* defines to
94*fd501800SSascha Wildner  *                      be unique within first 32 characters.
95*fd501800SSascha Wildner  *  --------------------------------------------------------------------------
96*fd501800SSascha Wildner  */
97*fd501800SSascha Wildner 
98*fd501800SSascha Wildner #ifndef MPI2_INIT_H
99*fd501800SSascha Wildner #define MPI2_INIT_H
100*fd501800SSascha Wildner 
101*fd501800SSascha Wildner /*****************************************************************************
102*fd501800SSascha Wildner *
103*fd501800SSascha Wildner *               SCSI Initiator Messages
104*fd501800SSascha Wildner *
105*fd501800SSascha Wildner *****************************************************************************/
106*fd501800SSascha Wildner 
107*fd501800SSascha Wildner /****************************************************************************
108*fd501800SSascha Wildner *  SCSI IO messages and associated structures
109*fd501800SSascha Wildner ****************************************************************************/
110*fd501800SSascha Wildner 
111*fd501800SSascha Wildner typedef struct _MPI2_SCSI_IO_CDB_EEDP32
112*fd501800SSascha Wildner {
113*fd501800SSascha Wildner     U8                      CDB[20];                    /* 0x00 */
114*fd501800SSascha Wildner     U32                     PrimaryReferenceTag;        /* 0x14 */
115*fd501800SSascha Wildner     U16                     PrimaryApplicationTag;      /* 0x18 */
116*fd501800SSascha Wildner     U16                     PrimaryApplicationTagMask;  /* 0x1A */
117*fd501800SSascha Wildner     U32                     TransferLength;             /* 0x1C */
118*fd501800SSascha Wildner } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32,
119*fd501800SSascha Wildner   Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t;
120*fd501800SSascha Wildner 
121*fd501800SSascha Wildner /* MPI v2.0 CDB field */
122*fd501800SSascha Wildner typedef union _MPI2_SCSI_IO_CDB_UNION
123*fd501800SSascha Wildner {
124*fd501800SSascha Wildner     U8                      CDB32[32];
125*fd501800SSascha Wildner     MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
126*fd501800SSascha Wildner     MPI2_SGE_SIMPLE_UNION   SGE;
127*fd501800SSascha Wildner } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION,
128*fd501800SSascha Wildner   Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t;
129*fd501800SSascha Wildner 
130*fd501800SSascha Wildner /* MPI v2.0 SCSI IO Request Message */
131*fd501800SSascha Wildner typedef struct _MPI2_SCSI_IO_REQUEST
132*fd501800SSascha Wildner {
133*fd501800SSascha Wildner     U16                     DevHandle;                      /* 0x00 */
134*fd501800SSascha Wildner     U8                      ChainOffset;                    /* 0x02 */
135*fd501800SSascha Wildner     U8                      Function;                       /* 0x03 */
136*fd501800SSascha Wildner     U16                     Reserved1;                      /* 0x04 */
137*fd501800SSascha Wildner     U8                      Reserved2;                      /* 0x06 */
138*fd501800SSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
139*fd501800SSascha Wildner     U8                      VP_ID;                          /* 0x08 */
140*fd501800SSascha Wildner     U8                      VF_ID;                          /* 0x09 */
141*fd501800SSascha Wildner     U16                     Reserved3;                      /* 0x0A */
142*fd501800SSascha Wildner     U32                     SenseBufferLowAddress;          /* 0x0C */
143*fd501800SSascha Wildner     U16                     SGLFlags;                       /* 0x10 */
144*fd501800SSascha Wildner     U8                      SenseBufferLength;              /* 0x12 */
145*fd501800SSascha Wildner     U8                      Reserved4;                      /* 0x13 */
146*fd501800SSascha Wildner     U8                      SGLOffset0;                     /* 0x14 */
147*fd501800SSascha Wildner     U8                      SGLOffset1;                     /* 0x15 */
148*fd501800SSascha Wildner     U8                      SGLOffset2;                     /* 0x16 */
149*fd501800SSascha Wildner     U8                      SGLOffset3;                     /* 0x17 */
150*fd501800SSascha Wildner     U32                     SkipCount;                      /* 0x18 */
151*fd501800SSascha Wildner     U32                     DataLength;                     /* 0x1C */
152*fd501800SSascha Wildner     U32                     BidirectionalDataLength;        /* 0x20 */
153*fd501800SSascha Wildner     U16                     IoFlags;                        /* 0x24 */
154*fd501800SSascha Wildner     U16                     EEDPFlags;                      /* 0x26 */
155*fd501800SSascha Wildner     U32                     EEDPBlockSize;                  /* 0x28 */
156*fd501800SSascha Wildner     U32                     SecondaryReferenceTag;          /* 0x2C */
157*fd501800SSascha Wildner     U16                     SecondaryApplicationTag;        /* 0x30 */
158*fd501800SSascha Wildner     U16                     ApplicationTagTranslationMask;  /* 0x32 */
159*fd501800SSascha Wildner     U8                      LUN[8];                         /* 0x34 */
160*fd501800SSascha Wildner     U32                     Control;                        /* 0x3C */
161*fd501800SSascha Wildner     MPI2_SCSI_IO_CDB_UNION  CDB;                            /* 0x40 */
162*fd501800SSascha Wildner 
163*fd501800SSascha Wildner #ifdef MPI2_SCSI_IO_VENDOR_UNIQUE_REGION /* typically this is left undefined */
164*fd501800SSascha Wildner     MPI2_SCSI_IO_VENDOR_UNIQUE VendorRegion;
165*fd501800SSascha Wildner #endif
166*fd501800SSascha Wildner 
167*fd501800SSascha Wildner     MPI2_SGE_IO_UNION       SGL;                            /* 0x60 */
168*fd501800SSascha Wildner 
169*fd501800SSascha Wildner } MPI2_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST,
170*fd501800SSascha Wildner   Mpi2SCSIIORequest_t, MPI2_POINTER pMpi2SCSIIORequest_t;
171*fd501800SSascha Wildner 
172*fd501800SSascha Wildner /* SCSI IO MsgFlags bits */
173*fd501800SSascha Wildner 
174*fd501800SSascha Wildner /* MsgFlags for SenseBufferAddressSpace */
175*fd501800SSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_MASK_SENSE_ADDR        (0x0C)
176*fd501800SSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_SYSTEM_SENSE_ADDR      (0x00)
177*fd501800SSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCDDR_SENSE_ADDR      (0x04)
178*fd501800SSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCPLB_SENSE_ADDR      (0x08) /* for MPI v2.5 and earlier only */
179*fd501800SSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCPLBNTA_SENSE_ADDR   (0x0C) /* for MPI v2.5 and earlier only */
180*fd501800SSascha Wildner #define MPI26_SCSIIO_MSGFLAGS_IOCCTL_SENSE_ADDR     (0x08) /* for MPI v2.6 only */
181*fd501800SSascha Wildner 
182*fd501800SSascha Wildner /* SCSI IO SGLFlags bits */
183*fd501800SSascha Wildner 
184*fd501800SSascha Wildner /* base values for Data Location Address Space */
185*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_ADDR_MASK              (0x0C)
186*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SYSTEM_ADDR            (0x00)
187*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCDDR_ADDR            (0x04)
188*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCPLB_ADDR            (0x08)
189*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCPLBNTA_ADDR         (0x0C)
190*fd501800SSascha Wildner 
191*fd501800SSascha Wildner /* base values for Type */
192*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_MASK              (0x03)
193*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_MPI               (0x00)
194*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE32            (0x01)
195*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE64            (0x02)
196*fd501800SSascha Wildner 
197*fd501800SSascha Wildner /* shift values for each sub-field */
198*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL3_SHIFT             (12)
199*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL2_SHIFT             (8)
200*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL1_SHIFT             (4)
201*fd501800SSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL0_SHIFT             (0)
202*fd501800SSascha Wildner 
203*fd501800SSascha Wildner /* number of SGLOffset fields */
204*fd501800SSascha Wildner #define MPI2_SCSIIO_NUM_SGLOFFSETS                  (4)
205*fd501800SSascha Wildner 
206*fd501800SSascha Wildner /* SCSI IO IoFlags bits */
207*fd501800SSascha Wildner 
208*fd501800SSascha Wildner /* Large CDB Address Space */
209*fd501800SSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_MASK                   (0x6000)
210*fd501800SSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_SYSTEM                 (0x0000)
211*fd501800SSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCDDR                 (0x2000)
212*fd501800SSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCPLB                 (0x4000)
213*fd501800SSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCPLBNTA              (0x6000)
214*fd501800SSascha Wildner 
215*fd501800SSascha Wildner #define MPI2_SCSIIO_IOFLAGS_LARGE_CDB               (0x1000)
216*fd501800SSascha Wildner #define MPI2_SCSIIO_IOFLAGS_BIDIRECTIONAL           (0x0800)
217*fd501800SSascha Wildner #define MPI2_SCSIIO_IOFLAGS_MULTICAST               (0x0400)
218*fd501800SSascha Wildner #define MPI2_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR (0x0200)
219*fd501800SSascha Wildner #define MPI2_SCSIIO_IOFLAGS_CDBLENGTH_MASK          (0x01FF)
220*fd501800SSascha Wildner 
221*fd501800SSascha Wildner /* SCSI IO EEDPFlags bits */
222*fd501800SSascha Wildner 
223*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG        (0x8000)
224*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_REFTAG        (0x4000)
225*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_APPTAG        (0x2000)
226*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_APPTAG        (0x1000)
227*fd501800SSascha Wildner 
228*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG          (0x0400)
229*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG          (0x0200)
230*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD           (0x0100)
231*fd501800SSascha Wildner 
232*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_PASSTHRU_REFTAG       (0x0008)
233*fd501800SSascha Wildner 
234*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_MASK_OP               (0x0007)
235*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_NOOP_OP               (0x0000)
236*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_OP              (0x0001)
237*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_STRIP_OP              (0x0002)
238*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP       (0x0003)
239*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INSERT_OP             (0x0004)
240*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_REPLACE_OP            (0x0006)
241*fd501800SSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REGEN_OP        (0x0007)
242*fd501800SSascha Wildner 
243*fd501800SSascha Wildner /* SCSI IO LUN fields: use MPI2_LUN_ from mpi2.h */
244*fd501800SSascha Wildner 
245*fd501800SSascha Wildner /* SCSI IO Control bits */
246*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_ADDCDBLEN_MASK      (0xFC000000)
247*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_ADDCDBLEN_SHIFT     (26)
248*fd501800SSascha Wildner 
249*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_DATADIRECTION_MASK  (0x03000000)
250*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_SHIFT_DATADIRECTION (24)
251*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_NODATATRANSFER      (0x00000000)
252*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_WRITE               (0x01000000)
253*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_READ                (0x02000000)
254*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_BIDIRECTIONAL       (0x03000000)
255*fd501800SSascha Wildner 
256*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKPRI_MASK        (0x00007800)
257*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT       (11)
258*fd501800SSascha Wildner /* alternate name for the previous field; called Command Priority in SAM-4 */
259*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_CMDPRI_MASK         (0x00007800)
260*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_CMDPRI_SHIFT        (11)
261*fd501800SSascha Wildner 
262*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK  (0x00000700)
263*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_SIMPLEQ             (0x00000000)
264*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_HEADOFQ             (0x00000100)
265*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_ORDEREDQ            (0x00000200)
266*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_ACAQ                (0x00000400)
267*fd501800SSascha Wildner 
268*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_MASK            (0x000000C0)
269*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_NO_TLR              (0x00000000)
270*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_ON              (0x00000040)
271*fd501800SSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_OFF             (0x00000080)
272*fd501800SSascha Wildner 
273*fd501800SSascha Wildner 
274*fd501800SSascha Wildner /* MPI v2.5 CDB field */
275*fd501800SSascha Wildner typedef union _MPI25_SCSI_IO_CDB_UNION
276*fd501800SSascha Wildner {
277*fd501800SSascha Wildner     U8                      CDB32[32];
278*fd501800SSascha Wildner     MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
279*fd501800SSascha Wildner     MPI2_IEEE_SGE_SIMPLE64  SGE;
280*fd501800SSascha Wildner } MPI25_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI25_SCSI_IO_CDB_UNION,
281*fd501800SSascha Wildner   Mpi25ScsiIoCdb_t, MPI2_POINTER pMpi25ScsiIoCdb_t;
282*fd501800SSascha Wildner 
283*fd501800SSascha Wildner /* MPI v2.5/2.6 SCSI IO Request Message */
284*fd501800SSascha Wildner typedef struct _MPI25_SCSI_IO_REQUEST
285*fd501800SSascha Wildner {
286*fd501800SSascha Wildner     U16                     DevHandle;                      /* 0x00 */
287*fd501800SSascha Wildner     U8                      ChainOffset;                    /* 0x02 */
288*fd501800SSascha Wildner     U8                      Function;                       /* 0x03 */
289*fd501800SSascha Wildner     U16                     Reserved1;                      /* 0x04 */
290*fd501800SSascha Wildner     U8                      Reserved2;                      /* 0x06 */
291*fd501800SSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
292*fd501800SSascha Wildner     U8                      VP_ID;                          /* 0x08 */
293*fd501800SSascha Wildner     U8                      VF_ID;                          /* 0x09 */
294*fd501800SSascha Wildner     U16                     Reserved3;                      /* 0x0A */
295*fd501800SSascha Wildner     U32                     SenseBufferLowAddress;          /* 0x0C */
296*fd501800SSascha Wildner     U8                      DMAFlags;                       /* 0x10 */
297*fd501800SSascha Wildner     U8                      Reserved5;                      /* 0x11 */
298*fd501800SSascha Wildner     U8                      SenseBufferLength;              /* 0x12 */
299*fd501800SSascha Wildner     U8                      Reserved4;                      /* 0x13 */
300*fd501800SSascha Wildner     U8                      SGLOffset0;                     /* 0x14 */
301*fd501800SSascha Wildner     U8                      SGLOffset1;                     /* 0x15 */
302*fd501800SSascha Wildner     U8                      SGLOffset2;                     /* 0x16 */
303*fd501800SSascha Wildner     U8                      SGLOffset3;                     /* 0x17 */
304*fd501800SSascha Wildner     U32                     SkipCount;                      /* 0x18 */
305*fd501800SSascha Wildner     U32                     DataLength;                     /* 0x1C */
306*fd501800SSascha Wildner     U32                     BidirectionalDataLength;        /* 0x20 */
307*fd501800SSascha Wildner     U16                     IoFlags;                        /* 0x24 */
308*fd501800SSascha Wildner     U16                     EEDPFlags;                      /* 0x26 */
309*fd501800SSascha Wildner     U16                     EEDPBlockSize;                  /* 0x28 */
310*fd501800SSascha Wildner     U16                     Reserved6;                      /* 0x2A */
311*fd501800SSascha Wildner     U32                     SecondaryReferenceTag;          /* 0x2C */
312*fd501800SSascha Wildner     U16                     SecondaryApplicationTag;        /* 0x30 */
313*fd501800SSascha Wildner     U16                     ApplicationTagTranslationMask;  /* 0x32 */
314*fd501800SSascha Wildner     U8                      LUN[8];                         /* 0x34 */
315*fd501800SSascha Wildner     U32                     Control;                        /* 0x3C */
316*fd501800SSascha Wildner     MPI25_SCSI_IO_CDB_UNION CDB;                            /* 0x40 */
317*fd501800SSascha Wildner 
318*fd501800SSascha Wildner #ifdef MPI25_SCSI_IO_VENDOR_UNIQUE_REGION /* typically this is left undefined */
319*fd501800SSascha Wildner     MPI25_SCSI_IO_VENDOR_UNIQUE VendorRegion;
320*fd501800SSascha Wildner #endif
321*fd501800SSascha Wildner 
322*fd501800SSascha Wildner     MPI25_SGE_IO_UNION      SGL;                            /* 0x60 */
323*fd501800SSascha Wildner 
324*fd501800SSascha Wildner } MPI25_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI25_SCSI_IO_REQUEST,
325*fd501800SSascha Wildner   Mpi25SCSIIORequest_t, MPI2_POINTER pMpi25SCSIIORequest_t;
326*fd501800SSascha Wildner 
327*fd501800SSascha Wildner /* use MPI2_SCSIIO_MSGFLAGS_ defines for the MsgFlags field */
328*fd501800SSascha Wildner 
329*fd501800SSascha Wildner /* Defines for the DMAFlags field
330*fd501800SSascha Wildner  *  Each setting affects 4 SGLS, from SGL0 to SGL3.
331*fd501800SSascha Wildner  *      D = Data
332*fd501800SSascha Wildner  *      C = Cache DIF
333*fd501800SSascha Wildner  *      I = Interleaved
334*fd501800SSascha Wildner  *      H = Host DIF
335*fd501800SSascha Wildner  */
336*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_MASK               (0x0F)
337*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_D            (0x00)
338*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_C            (0x01)
339*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_I            (0x02)
340*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_C            (0x03)
341*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_I            (0x04)
342*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_I_I            (0x05)
343*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_C            (0x06)
344*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_I            (0x07)
345*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_C_I_I            (0x08)
346*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_I_I_I            (0x09)
347*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_D            (0x0A)
348*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_C            (0x0B)
349*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_I            (0x0C)
350*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_C            (0x0D)
351*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_I            (0x0E)
352*fd501800SSascha Wildner #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_I_I            (0x0F)
353*fd501800SSascha Wildner 
354*fd501800SSascha Wildner /* number of SGLOffset fields */
355*fd501800SSascha Wildner #define MPI25_SCSIIO_NUM_SGLOFFSETS                 (4)
356*fd501800SSascha Wildner 
357*fd501800SSascha Wildner /* defines for the IoFlags field */
358*fd501800SSascha Wildner #define MPI25_SCSIIO_IOFLAGS_IO_PATH_MASK           (0xC000)
359*fd501800SSascha Wildner #define MPI25_SCSIIO_IOFLAGS_NORMAL_PATH            (0x0000)
360*fd501800SSascha Wildner #define MPI25_SCSIIO_IOFLAGS_FAST_PATH              (0x4000)
361*fd501800SSascha Wildner 
362*fd501800SSascha Wildner #define MPI26_SCSIIO_IOFLAGS_ESCAPE_PASSTHROUGH         (0x2000) /* MPI v2.6 and later */
363*fd501800SSascha Wildner #define MPI25_SCSIIO_IOFLAGS_LARGE_CDB                  (0x1000)
364*fd501800SSascha Wildner #define MPI25_SCSIIO_IOFLAGS_BIDIRECTIONAL              (0x0800)
365*fd501800SSascha Wildner #define MPI26_SCSIIO_IOFLAGS_PORT_REQUEST               (0x0400) /* MPI v2.6 and later; IOC use only */
366*fd501800SSascha Wildner #define MPI25_SCSIIO_IOFLAGS_CDBLENGTH_MASK             (0x01FF)
367*fd501800SSascha Wildner 
368*fd501800SSascha Wildner /* MPI v2.5 defines for the EEDPFlags bits */
369*fd501800SSascha Wildner /* use MPI2_SCSIIO_EEDPFLAGS_ defines for the other EEDPFlags bits */
370*fd501800SSascha Wildner #define MPI25_SCSIIO_EEDPFLAGS_ESCAPE_MODE_MASK             (0x00C0)
371*fd501800SSascha Wildner #define MPI25_SCSIIO_EEDPFLAGS_COMPATIBLE_MODE              (0x0000)
372*fd501800SSascha Wildner #define MPI25_SCSIIO_EEDPFLAGS_DO_NOT_DISABLE_MODE          (0x0040)
373*fd501800SSascha Wildner #define MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE          (0x0080)
374*fd501800SSascha Wildner #define MPI25_SCSIIO_EEDPFLAGS_APPTAG_REFTAG_DISABLE_MODE   (0x00C0)
375*fd501800SSascha Wildner 
376*fd501800SSascha Wildner #define MPI25_SCSIIO_EEDPFLAGS_HOST_GUARD_METHOD_MASK       (0x0030)
377*fd501800SSascha Wildner #define MPI25_SCSIIO_EEDPFLAGS_T10_CRC_HOST_GUARD           (0x0000)
378*fd501800SSascha Wildner #define MPI25_SCSIIO_EEDPFLAGS_IP_CHKSUM_HOST_GUARD         (0x0010)
379*fd501800SSascha Wildner 
380*fd501800SSascha Wildner /* use MPI2_LUN_ defines from mpi2.h for the LUN field */
381*fd501800SSascha Wildner 
382*fd501800SSascha Wildner /* use MPI2_SCSIIO_CONTROL_ defines for the Control field */
383*fd501800SSascha Wildner 
384*fd501800SSascha Wildner 
385*fd501800SSascha Wildner /* NOTE: The SCSI IO Reply is nearly the same for MPI 2.0 and MPI 2.5, so
386*fd501800SSascha Wildner  *       MPI2_SCSI_IO_REPLY is used for both.
387*fd501800SSascha Wildner  */
388*fd501800SSascha Wildner 
389*fd501800SSascha Wildner /* SCSI IO Error Reply Message */
390*fd501800SSascha Wildner typedef struct _MPI2_SCSI_IO_REPLY
391*fd501800SSascha Wildner {
392*fd501800SSascha Wildner     U16                     DevHandle;                      /* 0x00 */
393*fd501800SSascha Wildner     U8                      MsgLength;                      /* 0x02 */
394*fd501800SSascha Wildner     U8                      Function;                       /* 0x03 */
395*fd501800SSascha Wildner     U16                     Reserved1;                      /* 0x04 */
396*fd501800SSascha Wildner     U8                      Reserved2;                      /* 0x06 */
397*fd501800SSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
398*fd501800SSascha Wildner     U8                      VP_ID;                          /* 0x08 */
399*fd501800SSascha Wildner     U8                      VF_ID;                          /* 0x09 */
400*fd501800SSascha Wildner     U16                     Reserved3;                      /* 0x0A */
401*fd501800SSascha Wildner     U8                      SCSIStatus;                     /* 0x0C */
402*fd501800SSascha Wildner     U8                      SCSIState;                      /* 0x0D */
403*fd501800SSascha Wildner     U16                     IOCStatus;                      /* 0x0E */
404*fd501800SSascha Wildner     U32                     IOCLogInfo;                     /* 0x10 */
405*fd501800SSascha Wildner     U32                     TransferCount;                  /* 0x14 */
406*fd501800SSascha Wildner     U32                     SenseCount;                     /* 0x18 */
407*fd501800SSascha Wildner     U32                     ResponseInfo;                   /* 0x1C */
408*fd501800SSascha Wildner     U16                     TaskTag;                        /* 0x20 */
409*fd501800SSascha Wildner     U16                     SCSIStatusQualifier;            /* 0x22 */
410*fd501800SSascha Wildner     U32                     BidirectionalTransferCount;     /* 0x24 */
411*fd501800SSascha Wildner     U32                     EEDPErrorOffset;                /* 0x28 */ /* MPI 2.5+ only; Reserved in MPI 2.0 */
412*fd501800SSascha Wildner     U16                     EEDPObservedAppTag;             /* 0x2C */ /* MPI 2.5+ only; Reserved in MPI 2.0 */
413*fd501800SSascha Wildner     U16                     EEDPObservedGuard;              /* 0x2E */ /* MPI 2.5+ only; Reserved in MPI 2.0 */
414*fd501800SSascha Wildner     U32                     EEDPObservedRefTag;             /* 0x30 */ /* MPI 2.5+ only; Reserved in MPI 2.0 */
415*fd501800SSascha Wildner } MPI2_SCSI_IO_REPLY, MPI2_POINTER PTR_MPI2_SCSI_IO_REPLY,
416*fd501800SSascha Wildner   Mpi2SCSIIOReply_t, MPI2_POINTER pMpi2SCSIIOReply_t;
417*fd501800SSascha Wildner 
418*fd501800SSascha Wildner /* SCSI IO Reply MsgFlags bits */
419*fd501800SSascha Wildner #define MPI26_SCSIIO_REPLY_MSGFLAGS_REFTAG_OBSERVED_VALID     (0x01)
420*fd501800SSascha Wildner #define MPI26_SCSIIO_REPLY_MSGFLAGS_GUARD_OBSERVED_VALID      (0x02)
421*fd501800SSascha Wildner #define MPI26_SCSIIO_REPLY_MSGFLAGS_APPTAG_OBSERVED_VALID     (0x04)
422*fd501800SSascha Wildner 
423*fd501800SSascha Wildner 
424*fd501800SSascha Wildner /* SCSI IO Reply SCSIStatus values (SAM-4 status codes) */
425*fd501800SSascha Wildner 
426*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_GOOD                   (0x00)
427*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_CHECK_CONDITION        (0x02)
428*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_CONDITION_MET          (0x04)
429*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_BUSY                   (0x08)
430*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_INTERMEDIATE           (0x10)
431*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET   (0x14)
432*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_RESERVATION_CONFLICT   (0x18)
433*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_COMMAND_TERMINATED     (0x22) /* obsolete */
434*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_TASK_SET_FULL          (0x28)
435*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_ACA_ACTIVE             (0x30)
436*fd501800SSascha Wildner #define MPI2_SCSI_STATUS_TASK_ABORTED           (0x40)
437*fd501800SSascha Wildner 
438*fd501800SSascha Wildner /* SCSI IO Reply SCSIState flags */
439*fd501800SSascha Wildner 
440*fd501800SSascha Wildner #define MPI2_SCSI_STATE_RESPONSE_INFO_VALID     (0x10)
441*fd501800SSascha Wildner #define MPI2_SCSI_STATE_TERMINATED              (0x08)
442*fd501800SSascha Wildner #define MPI2_SCSI_STATE_NO_SCSI_STATUS          (0x04)
443*fd501800SSascha Wildner #define MPI2_SCSI_STATE_AUTOSENSE_FAILED        (0x02)
444*fd501800SSascha Wildner #define MPI2_SCSI_STATE_AUTOSENSE_VALID         (0x01)
445*fd501800SSascha Wildner 
446*fd501800SSascha Wildner /* masks and shifts for the ResponseInfo field */
447*fd501800SSascha Wildner 
448*fd501800SSascha Wildner #define MPI2_SCSI_RI_MASK_REASONCODE            (0x000000FF)
449*fd501800SSascha Wildner #define MPI2_SCSI_RI_SHIFT_REASONCODE           (0)
450*fd501800SSascha Wildner 
451*fd501800SSascha Wildner #define MPI2_SCSI_TASKTAG_UNKNOWN               (0xFFFF)
452*fd501800SSascha Wildner 
453*fd501800SSascha Wildner 
454*fd501800SSascha Wildner /****************************************************************************
455*fd501800SSascha Wildner *  SCSI Task Management messages
456*fd501800SSascha Wildner ****************************************************************************/
457*fd501800SSascha Wildner 
458*fd501800SSascha Wildner /* SCSI Task Management Request Message */
459*fd501800SSascha Wildner typedef struct _MPI2_SCSI_TASK_MANAGE_REQUEST
460*fd501800SSascha Wildner {
461*fd501800SSascha Wildner     U16                     DevHandle;                      /* 0x00 */
462*fd501800SSascha Wildner     U8                      ChainOffset;                    /* 0x02 */
463*fd501800SSascha Wildner     U8                      Function;                       /* 0x03 */
464*fd501800SSascha Wildner     U8                      Reserved1;                      /* 0x04 */
465*fd501800SSascha Wildner     U8                      TaskType;                       /* 0x05 */
466*fd501800SSascha Wildner     U8                      Reserved2;                      /* 0x06 */
467*fd501800SSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
468*fd501800SSascha Wildner     U8                      VP_ID;                          /* 0x08 */
469*fd501800SSascha Wildner     U8                      VF_ID;                          /* 0x09 */
470*fd501800SSascha Wildner     U16                     Reserved3;                      /* 0x0A */
471*fd501800SSascha Wildner     U8                      LUN[8];                         /* 0x0C */
472*fd501800SSascha Wildner     U32                     Reserved4[7];                   /* 0x14 */
473*fd501800SSascha Wildner     U16                     TaskMID;                        /* 0x30 */
474*fd501800SSascha Wildner     U16                     Reserved5;                      /* 0x32 */
475*fd501800SSascha Wildner } MPI2_SCSI_TASK_MANAGE_REQUEST,
476*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REQUEST,
477*fd501800SSascha Wildner   Mpi2SCSITaskManagementRequest_t,
478*fd501800SSascha Wildner   MPI2_POINTER pMpi2SCSITaskManagementRequest_t;
479*fd501800SSascha Wildner 
480*fd501800SSascha Wildner /* TaskType values */
481*fd501800SSascha Wildner 
482*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK           (0x01)
483*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET        (0x02)
484*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET         (0x03)
485*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET   (0x05)
486*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET       (0x06)
487*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK           (0x07)
488*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_CLR_ACA              (0x08)
489*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_TASK_SET         (0x09)
490*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT      (0x0A)
491*fd501800SSascha Wildner 
492*fd501800SSascha Wildner /* obsolete TaskType name */
493*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_UNIT_ATTENTION   (MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT)
494*fd501800SSascha Wildner 
495*fd501800SSascha Wildner /* MsgFlags bits */
496*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_MASK_TARGET_RESET      (0x18)
497*fd501800SSascha Wildner #define MPI26_SCSITASKMGMT_MSGFLAGS_HOT_RESET_PCIE        (0x00)
498*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_LINK_RESET             (0x00)
499*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU    (0x01)
500*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_NEXUS_RESET_SRST       (0x08)
501*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_SAS_HARD_LINK_RESET    (0x10)
502*fd501800SSascha Wildner #define MPI26_SCSITASKMGMT_MSGFLAGS_PROTOCOL_LVL_RST_PCIE (0x18)
503*fd501800SSascha Wildner 
504*fd501800SSascha Wildner 
505*fd501800SSascha Wildner /* SCSI Task Management Reply Message */
506*fd501800SSascha Wildner typedef struct _MPI2_SCSI_TASK_MANAGE_REPLY
507*fd501800SSascha Wildner {
508*fd501800SSascha Wildner     U16                     DevHandle;                      /* 0x00 */
509*fd501800SSascha Wildner     U8                      MsgLength;                      /* 0x02 */
510*fd501800SSascha Wildner     U8                      Function;                       /* 0x03 */
511*fd501800SSascha Wildner     U8                      ResponseCode;                   /* 0x04 */
512*fd501800SSascha Wildner     U8                      TaskType;                       /* 0x05 */
513*fd501800SSascha Wildner     U8                      Reserved1;                      /* 0x06 */
514*fd501800SSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
515*fd501800SSascha Wildner     U8                      VP_ID;                          /* 0x08 */
516*fd501800SSascha Wildner     U8                      VF_ID;                          /* 0x09 */
517*fd501800SSascha Wildner     U16                     Reserved2;                      /* 0x0A */
518*fd501800SSascha Wildner     U16                     Reserved3;                      /* 0x0C */
519*fd501800SSascha Wildner     U16                     IOCStatus;                      /* 0x0E */
520*fd501800SSascha Wildner     U32                     IOCLogInfo;                     /* 0x10 */
521*fd501800SSascha Wildner     U32                     TerminationCount;               /* 0x14 */
522*fd501800SSascha Wildner     U32                     ResponseInfo;                   /* 0x18 */
523*fd501800SSascha Wildner } MPI2_SCSI_TASK_MANAGE_REPLY,
524*fd501800SSascha Wildner   MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REPLY,
525*fd501800SSascha Wildner   Mpi2SCSITaskManagementReply_t, MPI2_POINTER pMpi2SCSIManagementReply_t;
526*fd501800SSascha Wildner 
527*fd501800SSascha Wildner /* ResponseCode values */
528*fd501800SSascha Wildner 
529*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_COMPLETE               (0x00)
530*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RSP_INVALID_FRAME             (0x02)
531*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED          (0x04)
532*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_FAILED                 (0x05)
533*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED              (0x08)
534*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN            (0x09)
535*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG         (0x0A)
536*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC          (0x80)
537*fd501800SSascha Wildner 
538*fd501800SSascha Wildner /* masks and shifts for the ResponseInfo field */
539*fd501800SSascha Wildner 
540*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_REASONCODE            (0x000000FF)
541*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_REASONCODE           (0)
542*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI2                  (0x0000FF00)
543*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI2                 (8)
544*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI1                  (0x00FF0000)
545*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI1                 (16)
546*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI0                  (0xFF000000)
547*fd501800SSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI0                 (24)
548*fd501800SSascha Wildner 
549*fd501800SSascha Wildner 
550*fd501800SSascha Wildner /****************************************************************************
551*fd501800SSascha Wildner *  SCSI Enclosure Processor messages
552*fd501800SSascha Wildner ****************************************************************************/
553*fd501800SSascha Wildner 
554*fd501800SSascha Wildner /* SCSI Enclosure Processor Request Message */
555*fd501800SSascha Wildner typedef struct _MPI2_SEP_REQUEST
556*fd501800SSascha Wildner {
557*fd501800SSascha Wildner     U16                     DevHandle;          /* 0x00 */
558*fd501800SSascha Wildner     U8                      ChainOffset;        /* 0x02 */
559*fd501800SSascha Wildner     U8                      Function;           /* 0x03 */
560*fd501800SSascha Wildner     U8                      Action;             /* 0x04 */
561*fd501800SSascha Wildner     U8                      Flags;              /* 0x05 */
562*fd501800SSascha Wildner     U8                      Reserved1;          /* 0x06 */
563*fd501800SSascha Wildner     U8                      MsgFlags;           /* 0x07 */
564*fd501800SSascha Wildner     U8                      VP_ID;              /* 0x08 */
565*fd501800SSascha Wildner     U8                      VF_ID;              /* 0x09 */
566*fd501800SSascha Wildner     U16                     Reserved2;          /* 0x0A */
567*fd501800SSascha Wildner     U32                     SlotStatus;         /* 0x0C */
568*fd501800SSascha Wildner     U32                     Reserved3;          /* 0x10 */
569*fd501800SSascha Wildner     U32                     Reserved4;          /* 0x14 */
570*fd501800SSascha Wildner     U32                     Reserved5;          /* 0x18 */
571*fd501800SSascha Wildner     U16                     Slot;               /* 0x1C */
572*fd501800SSascha Wildner     U16                     EnclosureHandle;    /* 0x1E */
573*fd501800SSascha Wildner } MPI2_SEP_REQUEST, MPI2_POINTER PTR_MPI2_SEP_REQUEST,
574*fd501800SSascha Wildner   Mpi2SepRequest_t, MPI2_POINTER pMpi2SepRequest_t;
575*fd501800SSascha Wildner 
576*fd501800SSascha Wildner /* Action defines */
577*fd501800SSascha Wildner #define MPI2_SEP_REQ_ACTION_WRITE_STATUS                (0x00)
578*fd501800SSascha Wildner #define MPI2_SEP_REQ_ACTION_READ_STATUS                 (0x01)
579*fd501800SSascha Wildner 
580*fd501800SSascha Wildner /* Flags defines */
581*fd501800SSascha Wildner #define MPI2_SEP_REQ_FLAGS_DEVHANDLE_ADDRESS            (0x00)
582*fd501800SSascha Wildner #define MPI2_SEP_REQ_FLAGS_ENCLOSURE_SLOT_ADDRESS       (0x01)
583*fd501800SSascha Wildner 
584*fd501800SSascha Wildner /* SlotStatus defines */
585*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_DEV_OFF                 (0x00080000) /* MPI v2.6 and newer */
586*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE          (0x00040000)
587*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST        (0x00020000)
588*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED         (0x00000200)
589*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_HOT_SPARE               (0x00000100)
590*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_UNCONFIGURED            (0x00000080)
591*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_PREDICTED_FAULT         (0x00000040)
592*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IN_CRITICAL_ARRAY       (0x00000010)
593*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IN_FAILED_ARRAY         (0x00000008)
594*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_DEV_REBUILDING          (0x00000004)
595*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_DEV_FAULTY              (0x00000002)
596*fd501800SSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_NO_ERROR                (0x00000001)
597*fd501800SSascha Wildner 
598*fd501800SSascha Wildner 
599*fd501800SSascha Wildner /* SCSI Enclosure Processor Reply Message */
600*fd501800SSascha Wildner typedef struct _MPI2_SEP_REPLY
601*fd501800SSascha Wildner {
602*fd501800SSascha Wildner     U16                     DevHandle;          /* 0x00 */
603*fd501800SSascha Wildner     U8                      MsgLength;          /* 0x02 */
604*fd501800SSascha Wildner     U8                      Function;           /* 0x03 */
605*fd501800SSascha Wildner     U8                      Action;             /* 0x04 */
606*fd501800SSascha Wildner     U8                      Flags;              /* 0x05 */
607*fd501800SSascha Wildner     U8                      Reserved1;          /* 0x06 */
608*fd501800SSascha Wildner     U8                      MsgFlags;           /* 0x07 */
609*fd501800SSascha Wildner     U8                      VP_ID;              /* 0x08 */
610*fd501800SSascha Wildner     U8                      VF_ID;              /* 0x09 */
611*fd501800SSascha Wildner     U16                     Reserved2;          /* 0x0A */
612*fd501800SSascha Wildner     U16                     Reserved3;          /* 0x0C */
613*fd501800SSascha Wildner     U16                     IOCStatus;          /* 0x0E */
614*fd501800SSascha Wildner     U32                     IOCLogInfo;         /* 0x10 */
615*fd501800SSascha Wildner     U32                     SlotStatus;         /* 0x14 */
616*fd501800SSascha Wildner     U32                     Reserved4;          /* 0x18 */
617*fd501800SSascha Wildner     U16                     Slot;               /* 0x1C */
618*fd501800SSascha Wildner     U16                     EnclosureHandle;    /* 0x1E */
619*fd501800SSascha Wildner } MPI2_SEP_REPLY, MPI2_POINTER PTR_MPI2_SEP_REPLY,
620*fd501800SSascha Wildner   Mpi2SepReply_t, MPI2_POINTER pMpi2SepReply_t;
621*fd501800SSascha Wildner 
622*fd501800SSascha Wildner /* SlotStatus defines */
623*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_OFF               (0x00080000) /* MPI v2.6 and newer */
624*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_REMOVE_READY          (0x00040000)
625*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST      (0x00020000)
626*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED       (0x00000200)
627*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_HOT_SPARE             (0x00000100)
628*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_UNCONFIGURED          (0x00000080)
629*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_PREDICTED_FAULT       (0x00000040)
630*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IN_CRITICAL_ARRAY     (0x00000010)
631*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IN_FAILED_ARRAY       (0x00000008)
632*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_REBUILDING        (0x00000004)
633*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_FAULTY            (0x00000002)
634*fd501800SSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_NO_ERROR              (0x00000001)
635*fd501800SSascha Wildner 
636*fd501800SSascha Wildner 
637*fd501800SSascha Wildner #endif
638*fd501800SSascha Wildner 
639*fd501800SSascha Wildner 
640