xref: /dflybsd-src/sys/dev/raid/mps/mpi/mpi2_init.h (revision eb403c9356ce5a2d494a31e006698fd95cf594b1)
1*c12c399aSSascha Wildner /*-
2*c12c399aSSascha Wildner  * Copyright (c) 2011 LSI Corp.
3*c12c399aSSascha Wildner  * All rights reserved.
4*c12c399aSSascha Wildner  *
5*c12c399aSSascha Wildner  * Redistribution and use in source and binary forms, with or without
6*c12c399aSSascha Wildner  * modification, are permitted provided that the following conditions
7*c12c399aSSascha Wildner  * are met:
8*c12c399aSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
9*c12c399aSSascha Wildner  *    notice, this list of conditions and the following disclaimer.
10*c12c399aSSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
11*c12c399aSSascha Wildner  *    notice, this list of conditions and the following disclaimer in the
12*c12c399aSSascha Wildner  *    documentation and/or other materials provided with the distribution.
13*c12c399aSSascha Wildner  *
14*c12c399aSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*c12c399aSSascha Wildner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*c12c399aSSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*c12c399aSSascha Wildner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*c12c399aSSascha Wildner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*c12c399aSSascha Wildner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*c12c399aSSascha Wildner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*c12c399aSSascha Wildner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*c12c399aSSascha Wildner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*c12c399aSSascha Wildner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*c12c399aSSascha Wildner  * SUCH DAMAGE.
25*c12c399aSSascha Wildner  *
26*c12c399aSSascha Wildner  * LSI MPT-Fusion Host Adapter FreeBSD
27*c12c399aSSascha Wildner  *
28*c12c399aSSascha Wildner  * $FreeBSD: src/sys/dev/mps/mpi/mpi2_init.h,v 1.2 2012/01/26 18:17:21 ken Exp $
29*c12c399aSSascha Wildner  */
30*c12c399aSSascha Wildner 
31*c12c399aSSascha Wildner /*
32*c12c399aSSascha Wildner  *  Copyright (c) 2000-2011 LSI Corporation.
33*c12c399aSSascha Wildner  *
34*c12c399aSSascha Wildner  *
35*c12c399aSSascha Wildner  *           Name:  mpi2_init.h
36*c12c399aSSascha Wildner  *          Title:  MPI SCSI initiator mode messages and structures
37*c12c399aSSascha Wildner  *  Creation Date:  June 23, 2006
38*c12c399aSSascha Wildner  *
39*c12c399aSSascha Wildner  *    mpi2_init.h Version:  02.00.11
40*c12c399aSSascha Wildner  *
41*c12c399aSSascha Wildner  *  Version History
42*c12c399aSSascha Wildner  *  ---------------
43*c12c399aSSascha Wildner  *
44*c12c399aSSascha Wildner  *  Date      Version   Description
45*c12c399aSSascha Wildner  *  --------  --------  ------------------------------------------------------
46*c12c399aSSascha Wildner  *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
47*c12c399aSSascha Wildner  *  10-31-07  02.00.01  Fixed name for pMpi2SCSITaskManagementRequest_t.
48*c12c399aSSascha Wildner  *  12-18-07  02.00.02  Modified Task Management Target Reset Method defines.
49*c12c399aSSascha Wildner  *  02-29-08  02.00.03  Added Query Task Set and Query Unit Attention.
50*c12c399aSSascha Wildner  *  03-03-08  02.00.04  Fixed name of struct _MPI2_SCSI_TASK_MANAGE_REPLY.
51*c12c399aSSascha Wildner  *  05-21-08  02.00.05  Fixed typo in name of Mpi2SepRequest_t.
52*c12c399aSSascha Wildner  *  10-02-08  02.00.06  Removed Untagged and No Disconnect values from SCSI IO
53*c12c399aSSascha Wildner  *                      Control field Task Attribute flags.
54*c12c399aSSascha Wildner  *                      Moved LUN field defines to mpi2.h becasue they are
55*c12c399aSSascha Wildner  *                      common to many structures.
56*c12c399aSSascha Wildner  *  05-06-09  02.00.07  Changed task management type of Query Unit Attention to
57*c12c399aSSascha Wildner  *                      Query Asynchronous Event.
58*c12c399aSSascha Wildner  *                      Defined two new bits in the SlotStatus field of the SCSI
59*c12c399aSSascha Wildner  *                      Enclosure Processor Request and Reply.
60*c12c399aSSascha Wildner  *  10-28-09  02.00.08  Added defines for decoding the ResponseInfo bytes for
61*c12c399aSSascha Wildner  *                      both SCSI IO Error Reply and SCSI Task Management Reply.
62*c12c399aSSascha Wildner  *                      Added ResponseInfo field to MPI2_SCSI_TASK_MANAGE_REPLY.
63*c12c399aSSascha Wildner  *                      Added MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG define.
64*c12c399aSSascha Wildner  *  02-10-10  02.00.09  Removed unused structure that had "#if 0" around it.
65*c12c399aSSascha Wildner  *  05-12-10  02.00.10  Added optional vendor-unique region to SCSI IO Request.
66*c12c399aSSascha Wildner  *  11-10-10  02.00.11  Added MPI2_SCSIIO_NUM_SGLOFFSETS define.
67*c12c399aSSascha Wildner  *  --------------------------------------------------------------------------
68*c12c399aSSascha Wildner  */
69*c12c399aSSascha Wildner 
70*c12c399aSSascha Wildner #ifndef MPI2_INIT_H
71*c12c399aSSascha Wildner #define MPI2_INIT_H
72*c12c399aSSascha Wildner 
73*c12c399aSSascha Wildner /*****************************************************************************
74*c12c399aSSascha Wildner *
75*c12c399aSSascha Wildner *               SCSI Initiator Messages
76*c12c399aSSascha Wildner *
77*c12c399aSSascha Wildner *****************************************************************************/
78*c12c399aSSascha Wildner 
79*c12c399aSSascha Wildner /****************************************************************************
80*c12c399aSSascha Wildner *  SCSI IO messages and associated structures
81*c12c399aSSascha Wildner ****************************************************************************/
82*c12c399aSSascha Wildner 
83*c12c399aSSascha Wildner typedef struct
84*c12c399aSSascha Wildner {
85*c12c399aSSascha Wildner     U8                      CDB[20];                    /* 0x00 */
86*c12c399aSSascha Wildner     U32                     PrimaryReferenceTag;        /* 0x14 */
87*c12c399aSSascha Wildner     U16                     PrimaryApplicationTag;      /* 0x18 */
88*c12c399aSSascha Wildner     U16                     PrimaryApplicationTagMask;  /* 0x1A */
89*c12c399aSSascha Wildner     U32                     TransferLength;             /* 0x1C */
90*c12c399aSSascha Wildner } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32,
91*c12c399aSSascha Wildner   Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t;
92*c12c399aSSascha Wildner 
93*c12c399aSSascha Wildner typedef union
94*c12c399aSSascha Wildner {
95*c12c399aSSascha Wildner     U8                      CDB32[32];
96*c12c399aSSascha Wildner     MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
97*c12c399aSSascha Wildner     MPI2_SGE_SIMPLE_UNION   SGE;
98*c12c399aSSascha Wildner } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION,
99*c12c399aSSascha Wildner   Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t;
100*c12c399aSSascha Wildner 
101*c12c399aSSascha Wildner /* SCSI IO Request Message */
102*c12c399aSSascha Wildner typedef struct _MPI2_SCSI_IO_REQUEST
103*c12c399aSSascha Wildner {
104*c12c399aSSascha Wildner     U16                     DevHandle;                      /* 0x00 */
105*c12c399aSSascha Wildner     U8                      ChainOffset;                    /* 0x02 */
106*c12c399aSSascha Wildner     U8                      Function;                       /* 0x03 */
107*c12c399aSSascha Wildner     U16                     Reserved1;                      /* 0x04 */
108*c12c399aSSascha Wildner     U8                      Reserved2;                      /* 0x06 */
109*c12c399aSSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
110*c12c399aSSascha Wildner     U8                      VP_ID;                          /* 0x08 */
111*c12c399aSSascha Wildner     U8                      VF_ID;                          /* 0x09 */
112*c12c399aSSascha Wildner     U16                     Reserved3;                      /* 0x0A */
113*c12c399aSSascha Wildner     U32                     SenseBufferLowAddress;          /* 0x0C */
114*c12c399aSSascha Wildner     U16                     SGLFlags;                       /* 0x10 */
115*c12c399aSSascha Wildner     U8                      SenseBufferLength;              /* 0x12 */
116*c12c399aSSascha Wildner     U8                      Reserved4;                      /* 0x13 */
117*c12c399aSSascha Wildner     U8                      SGLOffset0;                     /* 0x14 */
118*c12c399aSSascha Wildner     U8                      SGLOffset1;                     /* 0x15 */
119*c12c399aSSascha Wildner     U8                      SGLOffset2;                     /* 0x16 */
120*c12c399aSSascha Wildner     U8                      SGLOffset3;                     /* 0x17 */
121*c12c399aSSascha Wildner     U32                     SkipCount;                      /* 0x18 */
122*c12c399aSSascha Wildner     U32                     DataLength;                     /* 0x1C */
123*c12c399aSSascha Wildner     U32                     BidirectionalDataLength;        /* 0x20 */
124*c12c399aSSascha Wildner     U16                     IoFlags;                        /* 0x24 */
125*c12c399aSSascha Wildner     U16                     EEDPFlags;                      /* 0x26 */
126*c12c399aSSascha Wildner     U32                     EEDPBlockSize;                  /* 0x28 */
127*c12c399aSSascha Wildner     U32                     SecondaryReferenceTag;          /* 0x2C */
128*c12c399aSSascha Wildner     U16                     SecondaryApplicationTag;        /* 0x30 */
129*c12c399aSSascha Wildner     U16                     ApplicationTagTranslationMask;  /* 0x32 */
130*c12c399aSSascha Wildner     U8                      LUN[8];                         /* 0x34 */
131*c12c399aSSascha Wildner     U32                     Control;                        /* 0x3C */
132*c12c399aSSascha Wildner     MPI2_SCSI_IO_CDB_UNION  CDB;                            /* 0x40 */
133*c12c399aSSascha Wildner 
134*c12c399aSSascha Wildner #ifdef MPI2_SCSI_IO_VENDOR_UNIQUE_REGION /* typically this is left undefined */
135*c12c399aSSascha Wildner     MPI2_SCSI_IO_VENDOR_UNIQUE VendorRegion;
136*c12c399aSSascha Wildner #endif
137*c12c399aSSascha Wildner 
138*c12c399aSSascha Wildner     MPI2_SGE_IO_UNION       SGL;                            /* 0x60 */
139*c12c399aSSascha Wildner 
140*c12c399aSSascha Wildner } MPI2_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST,
141*c12c399aSSascha Wildner   Mpi2SCSIIORequest_t, MPI2_POINTER pMpi2SCSIIORequest_t;
142*c12c399aSSascha Wildner 
143*c12c399aSSascha Wildner /* SCSI IO MsgFlags bits */
144*c12c399aSSascha Wildner 
145*c12c399aSSascha Wildner /* MsgFlags for SenseBufferAddressSpace */
146*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_MASK_SENSE_ADDR        (0x0C)
147*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_SYSTEM_SENSE_ADDR      (0x00)
148*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCDDR_SENSE_ADDR      (0x04)
149*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCPLB_SENSE_ADDR      (0x08)
150*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCPLBNTA_SENSE_ADDR   (0x0C)
151*c12c399aSSascha Wildner 
152*c12c399aSSascha Wildner /* SCSI IO SGLFlags bits */
153*c12c399aSSascha Wildner 
154*c12c399aSSascha Wildner /* base values for Data Location Address Space */
155*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_ADDR_MASK              (0x0C)
156*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SYSTEM_ADDR            (0x00)
157*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCDDR_ADDR            (0x04)
158*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCPLB_ADDR            (0x08)
159*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCPLBNTA_ADDR         (0x0C)
160*c12c399aSSascha Wildner 
161*c12c399aSSascha Wildner /* base values for Type */
162*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_MASK              (0x03)
163*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_MPI               (0x00)
164*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE32            (0x01)
165*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE64            (0x02)
166*c12c399aSSascha Wildner 
167*c12c399aSSascha Wildner /* shift values for each sub-field */
168*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL3_SHIFT             (12)
169*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL2_SHIFT             (8)
170*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL1_SHIFT             (4)
171*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL0_SHIFT             (0)
172*c12c399aSSascha Wildner 
173*c12c399aSSascha Wildner /* number of SGLOffset fields */
174*c12c399aSSascha Wildner #define MPI2_SCSIIO_NUM_SGLOFFSETS                  (4)
175*c12c399aSSascha Wildner 
176*c12c399aSSascha Wildner /* SCSI IO IoFlags bits */
177*c12c399aSSascha Wildner 
178*c12c399aSSascha Wildner /* Large CDB Address Space */
179*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_MASK                   (0x6000)
180*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_SYSTEM                 (0x0000)
181*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCDDR                 (0x2000)
182*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCPLB                 (0x4000)
183*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCPLBNTA              (0x6000)
184*c12c399aSSascha Wildner 
185*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_LARGE_CDB               (0x1000)
186*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_BIDIRECTIONAL           (0x0800)
187*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_MULTICAST               (0x0400)
188*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR (0x0200)
189*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_CDBLENGTH_MASK          (0x01FF)
190*c12c399aSSascha Wildner 
191*c12c399aSSascha Wildner /* SCSI IO EEDPFlags bits */
192*c12c399aSSascha Wildner 
193*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG        (0x8000)
194*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_REFTAG        (0x4000)
195*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_APPTAG        (0x2000)
196*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_APPTAG        (0x1000)
197*c12c399aSSascha Wildner 
198*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG          (0x0400)
199*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG          (0x0200)
200*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD           (0x0100)
201*c12c399aSSascha Wildner 
202*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_PASSTHRU_REFTAG       (0x0008)
203*c12c399aSSascha Wildner 
204*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_MASK_OP               (0x0007)
205*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_NOOP_OP               (0x0000)
206*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_OP              (0x0001)
207*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_STRIP_OP              (0x0002)
208*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP       (0x0003)
209*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INSERT_OP             (0x0004)
210*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_REPLACE_OP            (0x0006)
211*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REGEN_OP        (0x0007)
212*c12c399aSSascha Wildner 
213*c12c399aSSascha Wildner /* SCSI IO LUN fields: use MPI2_LUN_ from mpi2.h */
214*c12c399aSSascha Wildner 
215*c12c399aSSascha Wildner /* SCSI IO Control bits */
216*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_ADDCDBLEN_MASK      (0xFC000000)
217*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_ADDCDBLEN_SHIFT     (26)
218*c12c399aSSascha Wildner 
219*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_DATADIRECTION_MASK  (0x03000000)
220*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_NODATATRANSFER      (0x00000000)
221*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_WRITE               (0x01000000)
222*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_READ                (0x02000000)
223*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_BIDIRECTIONAL       (0x03000000)
224*c12c399aSSascha Wildner 
225*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKPRI_MASK        (0x00007800)
226*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT       (11)
227*c12c399aSSascha Wildner 
228*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK  (0x00000700)
229*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_SIMPLEQ             (0x00000000)
230*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_HEADOFQ             (0x00000100)
231*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_ORDEREDQ            (0x00000200)
232*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_ACAQ                (0x00000400)
233*c12c399aSSascha Wildner 
234*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_MASK            (0x000000C0)
235*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_NO_TLR              (0x00000000)
236*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_ON              (0x00000040)
237*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_OFF             (0x00000080)
238*c12c399aSSascha Wildner 
239*c12c399aSSascha Wildner 
240*c12c399aSSascha Wildner /* SCSI IO Error Reply Message */
241*c12c399aSSascha Wildner typedef struct _MPI2_SCSI_IO_REPLY
242*c12c399aSSascha Wildner {
243*c12c399aSSascha Wildner     U16                     DevHandle;                      /* 0x00 */
244*c12c399aSSascha Wildner     U8                      MsgLength;                      /* 0x02 */
245*c12c399aSSascha Wildner     U8                      Function;                       /* 0x03 */
246*c12c399aSSascha Wildner     U16                     Reserved1;                      /* 0x04 */
247*c12c399aSSascha Wildner     U8                      Reserved2;                      /* 0x06 */
248*c12c399aSSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
249*c12c399aSSascha Wildner     U8                      VP_ID;                          /* 0x08 */
250*c12c399aSSascha Wildner     U8                      VF_ID;                          /* 0x09 */
251*c12c399aSSascha Wildner     U16                     Reserved3;                      /* 0x0A */
252*c12c399aSSascha Wildner     U8                      SCSIStatus;                     /* 0x0C */
253*c12c399aSSascha Wildner     U8                      SCSIState;                      /* 0x0D */
254*c12c399aSSascha Wildner     U16                     IOCStatus;                      /* 0x0E */
255*c12c399aSSascha Wildner     U32                     IOCLogInfo;                     /* 0x10 */
256*c12c399aSSascha Wildner     U32                     TransferCount;                  /* 0x14 */
257*c12c399aSSascha Wildner     U32                     SenseCount;                     /* 0x18 */
258*c12c399aSSascha Wildner     U32                     ResponseInfo;                   /* 0x1C */
259*c12c399aSSascha Wildner     U16                     TaskTag;                        /* 0x20 */
260*c12c399aSSascha Wildner     U16                     Reserved4;                      /* 0x22 */
261*c12c399aSSascha Wildner     U32                     BidirectionalTransferCount;     /* 0x24 */
262*c12c399aSSascha Wildner     U32                     Reserved5;                      /* 0x28 */
263*c12c399aSSascha Wildner     U32                     Reserved6;                      /* 0x2C */
264*c12c399aSSascha Wildner } MPI2_SCSI_IO_REPLY, MPI2_POINTER PTR_MPI2_SCSI_IO_REPLY,
265*c12c399aSSascha Wildner   Mpi2SCSIIOReply_t, MPI2_POINTER pMpi2SCSIIOReply_t;
266*c12c399aSSascha Wildner 
267*c12c399aSSascha Wildner /* SCSI IO Reply SCSIStatus values (SAM-4 status codes) */
268*c12c399aSSascha Wildner 
269*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_GOOD                   (0x00)
270*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_CHECK_CONDITION        (0x02)
271*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_CONDITION_MET          (0x04)
272*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_BUSY                   (0x08)
273*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_INTERMEDIATE           (0x10)
274*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET   (0x14)
275*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_RESERVATION_CONFLICT   (0x18)
276*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_COMMAND_TERMINATED     (0x22) /* obsolete */
277*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_TASK_SET_FULL          (0x28)
278*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_ACA_ACTIVE             (0x30)
279*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_TASK_ABORTED           (0x40)
280*c12c399aSSascha Wildner 
281*c12c399aSSascha Wildner /* SCSI IO Reply SCSIState flags */
282*c12c399aSSascha Wildner 
283*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_RESPONSE_INFO_VALID     (0x10)
284*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_TERMINATED              (0x08)
285*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_NO_SCSI_STATUS          (0x04)
286*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_AUTOSENSE_FAILED        (0x02)
287*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_AUTOSENSE_VALID         (0x01)
288*c12c399aSSascha Wildner 
289*c12c399aSSascha Wildner /* masks and shifts for the ResponseInfo field */
290*c12c399aSSascha Wildner 
291*c12c399aSSascha Wildner #define MPI2_SCSI_RI_MASK_REASONCODE            (0x000000FF)
292*c12c399aSSascha Wildner #define MPI2_SCSI_RI_SHIFT_REASONCODE           (0)
293*c12c399aSSascha Wildner 
294*c12c399aSSascha Wildner #define MPI2_SCSI_TASKTAG_UNKNOWN               (0xFFFF)
295*c12c399aSSascha Wildner 
296*c12c399aSSascha Wildner 
297*c12c399aSSascha Wildner /****************************************************************************
298*c12c399aSSascha Wildner *  SCSI Task Management messages
299*c12c399aSSascha Wildner ****************************************************************************/
300*c12c399aSSascha Wildner 
301*c12c399aSSascha Wildner /* SCSI Task Management Request Message */
302*c12c399aSSascha Wildner typedef struct _MPI2_SCSI_TASK_MANAGE_REQUEST
303*c12c399aSSascha Wildner {
304*c12c399aSSascha Wildner     U16                     DevHandle;                      /* 0x00 */
305*c12c399aSSascha Wildner     U8                      ChainOffset;                    /* 0x02 */
306*c12c399aSSascha Wildner     U8                      Function;                       /* 0x03 */
307*c12c399aSSascha Wildner     U8                      Reserved1;                      /* 0x04 */
308*c12c399aSSascha Wildner     U8                      TaskType;                       /* 0x05 */
309*c12c399aSSascha Wildner     U8                      Reserved2;                      /* 0x06 */
310*c12c399aSSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
311*c12c399aSSascha Wildner     U8                      VP_ID;                          /* 0x08 */
312*c12c399aSSascha Wildner     U8                      VF_ID;                          /* 0x09 */
313*c12c399aSSascha Wildner     U16                     Reserved3;                      /* 0x0A */
314*c12c399aSSascha Wildner     U8                      LUN[8];                         /* 0x0C */
315*c12c399aSSascha Wildner     U32                     Reserved4[7];                   /* 0x14 */
316*c12c399aSSascha Wildner     U16                     TaskMID;                        /* 0x30 */
317*c12c399aSSascha Wildner     U16                     Reserved5;                      /* 0x32 */
318*c12c399aSSascha Wildner } MPI2_SCSI_TASK_MANAGE_REQUEST,
319*c12c399aSSascha Wildner   MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REQUEST,
320*c12c399aSSascha Wildner   Mpi2SCSITaskManagementRequest_t,
321*c12c399aSSascha Wildner   MPI2_POINTER pMpi2SCSITaskManagementRequest_t;
322*c12c399aSSascha Wildner 
323*c12c399aSSascha Wildner /* TaskType values */
324*c12c399aSSascha Wildner 
325*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK           (0x01)
326*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET        (0x02)
327*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET         (0x03)
328*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET   (0x05)
329*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET       (0x06)
330*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK           (0x07)
331*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_CLR_ACA              (0x08)
332*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_TASK_SET         (0x09)
333*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT      (0x0A)
334*c12c399aSSascha Wildner 
335*c12c399aSSascha Wildner /* obsolete TaskType name */
336*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_UNIT_ATTENTION   (MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT)
337*c12c399aSSascha Wildner 
338*c12c399aSSascha Wildner /* MsgFlags bits */
339*c12c399aSSascha Wildner 
340*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_MASK_TARGET_RESET    (0x18)
341*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_LINK_RESET           (0x00)
342*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_NEXUS_RESET_SRST     (0x08)
343*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_SAS_HARD_LINK_RESET  (0x10)
344*c12c399aSSascha Wildner 
345*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU  (0x01)
346*c12c399aSSascha Wildner 
347*c12c399aSSascha Wildner 
348*c12c399aSSascha Wildner 
349*c12c399aSSascha Wildner /* SCSI Task Management Reply Message */
350*c12c399aSSascha Wildner typedef struct _MPI2_SCSI_TASK_MANAGE_REPLY
351*c12c399aSSascha Wildner {
352*c12c399aSSascha Wildner     U16                     DevHandle;                      /* 0x00 */
353*c12c399aSSascha Wildner     U8                      MsgLength;                      /* 0x02 */
354*c12c399aSSascha Wildner     U8                      Function;                       /* 0x03 */
355*c12c399aSSascha Wildner     U8                      ResponseCode;                   /* 0x04 */
356*c12c399aSSascha Wildner     U8                      TaskType;                       /* 0x05 */
357*c12c399aSSascha Wildner     U8                      Reserved1;                      /* 0x06 */
358*c12c399aSSascha Wildner     U8                      MsgFlags;                       /* 0x07 */
359*c12c399aSSascha Wildner     U8                      VP_ID;                          /* 0x08 */
360*c12c399aSSascha Wildner     U8                      VF_ID;                          /* 0x09 */
361*c12c399aSSascha Wildner     U16                     Reserved2;                      /* 0x0A */
362*c12c399aSSascha Wildner     U16                     Reserved3;                      /* 0x0C */
363*c12c399aSSascha Wildner     U16                     IOCStatus;                      /* 0x0E */
364*c12c399aSSascha Wildner     U32                     IOCLogInfo;                     /* 0x10 */
365*c12c399aSSascha Wildner     U32                     TerminationCount;               /* 0x14 */
366*c12c399aSSascha Wildner     U32                     ResponseInfo;                   /* 0x18 */
367*c12c399aSSascha Wildner } MPI2_SCSI_TASK_MANAGE_REPLY,
368*c12c399aSSascha Wildner   MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REPLY,
369*c12c399aSSascha Wildner   Mpi2SCSITaskManagementReply_t, MPI2_POINTER pMpi2SCSIManagementReply_t;
370*c12c399aSSascha Wildner 
371*c12c399aSSascha Wildner /* ResponseCode values */
372*c12c399aSSascha Wildner 
373*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_COMPLETE               (0x00)
374*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_INVALID_FRAME             (0x02)
375*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED          (0x04)
376*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_FAILED                 (0x05)
377*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED              (0x08)
378*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN            (0x09)
379*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG         (0x0A)
380*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC          (0x80)
381*c12c399aSSascha Wildner 
382*c12c399aSSascha Wildner /* masks and shifts for the ResponseInfo field */
383*c12c399aSSascha Wildner 
384*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_REASONCODE            (0x000000FF)
385*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_REASONCODE           (0)
386*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI2                  (0x0000FF00)
387*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI2                 (8)
388*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI1                  (0x00FF0000)
389*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI1                 (16)
390*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI0                  (0xFF000000)
391*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI0                 (24)
392*c12c399aSSascha Wildner 
393*c12c399aSSascha Wildner 
394*c12c399aSSascha Wildner /****************************************************************************
395*c12c399aSSascha Wildner *  SCSI Enclosure Processor messages
396*c12c399aSSascha Wildner ****************************************************************************/
397*c12c399aSSascha Wildner 
398*c12c399aSSascha Wildner /* SCSI Enclosure Processor Request Message */
399*c12c399aSSascha Wildner typedef struct _MPI2_SEP_REQUEST
400*c12c399aSSascha Wildner {
401*c12c399aSSascha Wildner     U16                     DevHandle;          /* 0x00 */
402*c12c399aSSascha Wildner     U8                      ChainOffset;        /* 0x02 */
403*c12c399aSSascha Wildner     U8                      Function;           /* 0x03 */
404*c12c399aSSascha Wildner     U8                      Action;             /* 0x04 */
405*c12c399aSSascha Wildner     U8                      Flags;              /* 0x05 */
406*c12c399aSSascha Wildner     U8                      Reserved1;          /* 0x06 */
407*c12c399aSSascha Wildner     U8                      MsgFlags;           /* 0x07 */
408*c12c399aSSascha Wildner     U8                      VP_ID;              /* 0x08 */
409*c12c399aSSascha Wildner     U8                      VF_ID;              /* 0x09 */
410*c12c399aSSascha Wildner     U16                     Reserved2;          /* 0x0A */
411*c12c399aSSascha Wildner     U32                     SlotStatus;         /* 0x0C */
412*c12c399aSSascha Wildner     U32                     Reserved3;          /* 0x10 */
413*c12c399aSSascha Wildner     U32                     Reserved4;          /* 0x14 */
414*c12c399aSSascha Wildner     U32                     Reserved5;          /* 0x18 */
415*c12c399aSSascha Wildner     U16                     Slot;               /* 0x1C */
416*c12c399aSSascha Wildner     U16                     EnclosureHandle;    /* 0x1E */
417*c12c399aSSascha Wildner } MPI2_SEP_REQUEST, MPI2_POINTER PTR_MPI2_SEP_REQUEST,
418*c12c399aSSascha Wildner   Mpi2SepRequest_t, MPI2_POINTER pMpi2SepRequest_t;
419*c12c399aSSascha Wildner 
420*c12c399aSSascha Wildner /* Action defines */
421*c12c399aSSascha Wildner #define MPI2_SEP_REQ_ACTION_WRITE_STATUS                (0x00)
422*c12c399aSSascha Wildner #define MPI2_SEP_REQ_ACTION_READ_STATUS                 (0x01)
423*c12c399aSSascha Wildner 
424*c12c399aSSascha Wildner /* Flags defines */
425*c12c399aSSascha Wildner #define MPI2_SEP_REQ_FLAGS_DEVHANDLE_ADDRESS            (0x00)
426*c12c399aSSascha Wildner #define MPI2_SEP_REQ_FLAGS_ENCLOSURE_SLOT_ADDRESS       (0x01)
427*c12c399aSSascha Wildner 
428*c12c399aSSascha Wildner /* SlotStatus defines */
429*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE          (0x00040000)
430*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST        (0x00020000)
431*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED         (0x00000200)
432*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_HOT_SPARE               (0x00000100)
433*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_UNCONFIGURED            (0x00000080)
434*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_PREDICTED_FAULT         (0x00000040)
435*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IN_CRITICAL_ARRAY       (0x00000010)
436*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IN_FAILED_ARRAY         (0x00000008)
437*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_DEV_REBUILDING          (0x00000004)
438*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_DEV_FAULTY              (0x00000002)
439*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_NO_ERROR                (0x00000001)
440*c12c399aSSascha Wildner 
441*c12c399aSSascha Wildner 
442*c12c399aSSascha Wildner /* SCSI Enclosure Processor Reply Message */
443*c12c399aSSascha Wildner typedef struct _MPI2_SEP_REPLY
444*c12c399aSSascha Wildner {
445*c12c399aSSascha Wildner     U16                     DevHandle;          /* 0x00 */
446*c12c399aSSascha Wildner     U8                      MsgLength;          /* 0x02 */
447*c12c399aSSascha Wildner     U8                      Function;           /* 0x03 */
448*c12c399aSSascha Wildner     U8                      Action;             /* 0x04 */
449*c12c399aSSascha Wildner     U8                      Flags;              /* 0x05 */
450*c12c399aSSascha Wildner     U8                      Reserved1;          /* 0x06 */
451*c12c399aSSascha Wildner     U8                      MsgFlags;           /* 0x07 */
452*c12c399aSSascha Wildner     U8                      VP_ID;              /* 0x08 */
453*c12c399aSSascha Wildner     U8                      VF_ID;              /* 0x09 */
454*c12c399aSSascha Wildner     U16                     Reserved2;          /* 0x0A */
455*c12c399aSSascha Wildner     U16                     Reserved3;          /* 0x0C */
456*c12c399aSSascha Wildner     U16                     IOCStatus;          /* 0x0E */
457*c12c399aSSascha Wildner     U32                     IOCLogInfo;         /* 0x10 */
458*c12c399aSSascha Wildner     U32                     SlotStatus;         /* 0x14 */
459*c12c399aSSascha Wildner     U32                     Reserved4;          /* 0x18 */
460*c12c399aSSascha Wildner     U16                     Slot;               /* 0x1C */
461*c12c399aSSascha Wildner     U16                     EnclosureHandle;    /* 0x1E */
462*c12c399aSSascha Wildner } MPI2_SEP_REPLY, MPI2_POINTER PTR_MPI2_SEP_REPLY,
463*c12c399aSSascha Wildner   Mpi2SepReply_t, MPI2_POINTER pMpi2SepReply_t;
464*c12c399aSSascha Wildner 
465*c12c399aSSascha Wildner /* SlotStatus defines */
466*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_REMOVE_READY          (0x00040000)
467*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST      (0x00020000)
468*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED       (0x00000200)
469*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_HOT_SPARE             (0x00000100)
470*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_UNCONFIGURED          (0x00000080)
471*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_PREDICTED_FAULT       (0x00000040)
472*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IN_CRITICAL_ARRAY     (0x00000010)
473*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IN_FAILED_ARRAY       (0x00000008)
474*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_REBUILDING        (0x00000004)
475*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_FAULTY            (0x00000002)
476*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_NO_ERROR              (0x00000001)
477*c12c399aSSascha Wildner 
478*c12c399aSSascha Wildner 
479*c12c399aSSascha Wildner #endif
480