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_init.h
38212420Sken *          Title:  MPI SCSI initiator mode messages and structures
39212420Sken *  Creation Date:  June 23, 2006
40212420Sken *
41230592Sken *    mpi2_init.h Version:  02.00.11
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 *  10-31-07  02.00.01  Fixed name for pMpi2SCSITaskManagementRequest_t.
50212420Sken *  12-18-07  02.00.02  Modified Task Management Target Reset Method defines.
51212420Sken *  02-29-08  02.00.03  Added Query Task Set and Query Unit Attention.
52212420Sken *  03-03-08  02.00.04  Fixed name of struct _MPI2_SCSI_TASK_MANAGE_REPLY.
53212420Sken *  05-21-08  02.00.05  Fixed typo in name of Mpi2SepRequest_t.
54212420Sken *  10-02-08  02.00.06  Removed Untagged and No Disconnect values from SCSI IO
55212420Sken *                      Control field Task Attribute flags.
56298955Spfg *                      Moved LUN field defines to mpi2.h because they are
57212420Sken *                      common to many structures.
58212420Sken *  05-06-09  02.00.07  Changed task management type of Query Unit Attention to
59212420Sken *                      Query Asynchronous Event.
60212420Sken *                      Defined two new bits in the SlotStatus field of the SCSI
61212420Sken *                      Enclosure Processor Request and Reply.
62212420Sken *  10-28-09  02.00.08  Added defines for decoding the ResponseInfo bytes for
63212420Sken *                      both SCSI IO Error Reply and SCSI Task Management Reply.
64212420Sken *                      Added ResponseInfo field to MPI2_SCSI_TASK_MANAGE_REPLY.
65212420Sken *                      Added MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG define.
66230592Sken *  02-10-10  02.00.09  Removed unused structure that had "#if 0" around it.
67230592Sken *  05-12-10  02.00.10  Added optional vendor-unique region to SCSI IO Request.
68230592Sken *  11-10-10  02.00.11  Added MPI2_SCSIIO_NUM_SGLOFFSETS define.
69212420Sken *  --------------------------------------------------------------------------
70212420Sken */
71212420Sken
72212420Sken#ifndef MPI2_INIT_H
73212420Sken#define MPI2_INIT_H
74212420Sken
75212420Sken/*****************************************************************************
76212420Sken*
77212420Sken*               SCSI Initiator Messages
78212420Sken*
79212420Sken*****************************************************************************/
80212420Sken
81212420Sken/****************************************************************************
82212420Sken*  SCSI IO messages and associated structures
83212420Sken****************************************************************************/
84212420Sken
85212420Skentypedef struct
86212420Sken{
87212420Sken    U8                      CDB[20];                    /* 0x00 */
88212420Sken    U32                     PrimaryReferenceTag;        /* 0x14 */
89212420Sken    U16                     PrimaryApplicationTag;      /* 0x18 */
90212420Sken    U16                     PrimaryApplicationTagMask;  /* 0x1A */
91212420Sken    U32                     TransferLength;             /* 0x1C */
92212420Sken} MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32,
93212420Sken  Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t;
94212420Sken
95212420Skentypedef union
96212420Sken{
97212420Sken    U8                      CDB32[32];
98212420Sken    MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
99212420Sken    MPI2_SGE_SIMPLE_UNION   SGE;
100212420Sken} MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION,
101212420Sken  Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t;
102212420Sken
103212420Sken/* SCSI IO Request Message */
104212420Skentypedef struct _MPI2_SCSI_IO_REQUEST
105212420Sken{
106212420Sken    U16                     DevHandle;                      /* 0x00 */
107212420Sken    U8                      ChainOffset;                    /* 0x02 */
108212420Sken    U8                      Function;                       /* 0x03 */
109212420Sken    U16                     Reserved1;                      /* 0x04 */
110212420Sken    U8                      Reserved2;                      /* 0x06 */
111212420Sken    U8                      MsgFlags;                       /* 0x07 */
112212420Sken    U8                      VP_ID;                          /* 0x08 */
113212420Sken    U8                      VF_ID;                          /* 0x09 */
114212420Sken    U16                     Reserved3;                      /* 0x0A */
115212420Sken    U32                     SenseBufferLowAddress;          /* 0x0C */
116212420Sken    U16                     SGLFlags;                       /* 0x10 */
117212420Sken    U8                      SenseBufferLength;              /* 0x12 */
118212420Sken    U8                      Reserved4;                      /* 0x13 */
119212420Sken    U8                      SGLOffset0;                     /* 0x14 */
120212420Sken    U8                      SGLOffset1;                     /* 0x15 */
121212420Sken    U8                      SGLOffset2;                     /* 0x16 */
122212420Sken    U8                      SGLOffset3;                     /* 0x17 */
123212420Sken    U32                     SkipCount;                      /* 0x18 */
124212420Sken    U32                     DataLength;                     /* 0x1C */
125212420Sken    U32                     BidirectionalDataLength;        /* 0x20 */
126212420Sken    U16                     IoFlags;                        /* 0x24 */
127212420Sken    U16                     EEDPFlags;                      /* 0x26 */
128212420Sken    U32                     EEDPBlockSize;                  /* 0x28 */
129212420Sken    U32                     SecondaryReferenceTag;          /* 0x2C */
130212420Sken    U16                     SecondaryApplicationTag;        /* 0x30 */
131212420Sken    U16                     ApplicationTagTranslationMask;  /* 0x32 */
132212420Sken    U8                      LUN[8];                         /* 0x34 */
133212420Sken    U32                     Control;                        /* 0x3C */
134212420Sken    MPI2_SCSI_IO_CDB_UNION  CDB;                            /* 0x40 */
135230592Sken
136230592Sken#ifdef MPI2_SCSI_IO_VENDOR_UNIQUE_REGION /* typically this is left undefined */
137230592Sken    MPI2_SCSI_IO_VENDOR_UNIQUE VendorRegion;
138230592Sken#endif
139230592Sken
140212420Sken    MPI2_SGE_IO_UNION       SGL;                            /* 0x60 */
141230592Sken
142212420Sken} MPI2_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST,
143212420Sken  Mpi2SCSIIORequest_t, MPI2_POINTER pMpi2SCSIIORequest_t;
144212420Sken
145212420Sken/* SCSI IO MsgFlags bits */
146212420Sken
147212420Sken/* MsgFlags for SenseBufferAddressSpace */
148212420Sken#define MPI2_SCSIIO_MSGFLAGS_MASK_SENSE_ADDR        (0x0C)
149212420Sken#define MPI2_SCSIIO_MSGFLAGS_SYSTEM_SENSE_ADDR      (0x00)
150212420Sken#define MPI2_SCSIIO_MSGFLAGS_IOCDDR_SENSE_ADDR      (0x04)
151212420Sken#define MPI2_SCSIIO_MSGFLAGS_IOCPLB_SENSE_ADDR      (0x08)
152212420Sken#define MPI2_SCSIIO_MSGFLAGS_IOCPLBNTA_SENSE_ADDR   (0x0C)
153212420Sken
154212420Sken/* SCSI IO SGLFlags bits */
155212420Sken
156212420Sken/* base values for Data Location Address Space */
157212420Sken#define MPI2_SCSIIO_SGLFLAGS_ADDR_MASK              (0x0C)
158212420Sken#define MPI2_SCSIIO_SGLFLAGS_SYSTEM_ADDR            (0x00)
159212420Sken#define MPI2_SCSIIO_SGLFLAGS_IOCDDR_ADDR            (0x04)
160212420Sken#define MPI2_SCSIIO_SGLFLAGS_IOCPLB_ADDR            (0x08)
161212420Sken#define MPI2_SCSIIO_SGLFLAGS_IOCPLBNTA_ADDR         (0x0C)
162212420Sken
163212420Sken/* base values for Type */
164212420Sken#define MPI2_SCSIIO_SGLFLAGS_TYPE_MASK              (0x03)
165212420Sken#define MPI2_SCSIIO_SGLFLAGS_TYPE_MPI               (0x00)
166212420Sken#define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE32            (0x01)
167212420Sken#define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE64            (0x02)
168212420Sken
169212420Sken/* shift values for each sub-field */
170212420Sken#define MPI2_SCSIIO_SGLFLAGS_SGL3_SHIFT             (12)
171212420Sken#define MPI2_SCSIIO_SGLFLAGS_SGL2_SHIFT             (8)
172212420Sken#define MPI2_SCSIIO_SGLFLAGS_SGL1_SHIFT             (4)
173212420Sken#define MPI2_SCSIIO_SGLFLAGS_SGL0_SHIFT             (0)
174212420Sken
175230592Sken/* number of SGLOffset fields */
176230592Sken#define MPI2_SCSIIO_NUM_SGLOFFSETS                  (4)
177230592Sken
178212420Sken/* SCSI IO IoFlags bits */
179212420Sken
180212420Sken/* Large CDB Address Space */
181212420Sken#define MPI2_SCSIIO_CDB_ADDR_MASK                   (0x6000)
182212420Sken#define MPI2_SCSIIO_CDB_ADDR_SYSTEM                 (0x0000)
183212420Sken#define MPI2_SCSIIO_CDB_ADDR_IOCDDR                 (0x2000)
184212420Sken#define MPI2_SCSIIO_CDB_ADDR_IOCPLB                 (0x4000)
185212420Sken#define MPI2_SCSIIO_CDB_ADDR_IOCPLBNTA              (0x6000)
186212420Sken
187212420Sken#define MPI2_SCSIIO_IOFLAGS_LARGE_CDB               (0x1000)
188212420Sken#define MPI2_SCSIIO_IOFLAGS_BIDIRECTIONAL           (0x0800)
189212420Sken#define MPI2_SCSIIO_IOFLAGS_MULTICAST               (0x0400)
190212420Sken#define MPI2_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR (0x0200)
191212420Sken#define MPI2_SCSIIO_IOFLAGS_CDBLENGTH_MASK          (0x01FF)
192212420Sken
193212420Sken/* SCSI IO EEDPFlags bits */
194212420Sken
195212420Sken#define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG        (0x8000)
196212420Sken#define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_REFTAG        (0x4000)
197212420Sken#define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_APPTAG        (0x2000)
198212420Sken#define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_APPTAG        (0x1000)
199212420Sken
200212420Sken#define MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG          (0x0400)
201212420Sken#define MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG          (0x0200)
202212420Sken#define MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD           (0x0100)
203212420Sken
204212420Sken#define MPI2_SCSIIO_EEDPFLAGS_PASSTHRU_REFTAG       (0x0008)
205212420Sken
206212420Sken#define MPI2_SCSIIO_EEDPFLAGS_MASK_OP               (0x0007)
207212420Sken#define MPI2_SCSIIO_EEDPFLAGS_NOOP_OP               (0x0000)
208212420Sken#define MPI2_SCSIIO_EEDPFLAGS_CHECK_OP              (0x0001)
209212420Sken#define MPI2_SCSIIO_EEDPFLAGS_STRIP_OP              (0x0002)
210212420Sken#define MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP       (0x0003)
211212420Sken#define MPI2_SCSIIO_EEDPFLAGS_INSERT_OP             (0x0004)
212212420Sken#define MPI2_SCSIIO_EEDPFLAGS_REPLACE_OP            (0x0006)
213212420Sken#define MPI2_SCSIIO_EEDPFLAGS_CHECK_REGEN_OP        (0x0007)
214212420Sken
215212420Sken/* SCSI IO LUN fields: use MPI2_LUN_ from mpi2.h */
216212420Sken
217212420Sken/* SCSI IO Control bits */
218212420Sken#define MPI2_SCSIIO_CONTROL_ADDCDBLEN_MASK      (0xFC000000)
219212420Sken#define MPI2_SCSIIO_CONTROL_ADDCDBLEN_SHIFT     (26)
220212420Sken
221212420Sken#define MPI2_SCSIIO_CONTROL_DATADIRECTION_MASK  (0x03000000)
222212420Sken#define MPI2_SCSIIO_CONTROL_NODATATRANSFER      (0x00000000)
223212420Sken#define MPI2_SCSIIO_CONTROL_WRITE               (0x01000000)
224212420Sken#define MPI2_SCSIIO_CONTROL_READ                (0x02000000)
225212420Sken#define MPI2_SCSIIO_CONTROL_BIDIRECTIONAL       (0x03000000)
226212420Sken
227212420Sken#define MPI2_SCSIIO_CONTROL_TASKPRI_MASK        (0x00007800)
228212420Sken#define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT       (11)
229212420Sken
230212420Sken#define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK  (0x00000700)
231212420Sken#define MPI2_SCSIIO_CONTROL_SIMPLEQ             (0x00000000)
232212420Sken#define MPI2_SCSIIO_CONTROL_HEADOFQ             (0x00000100)
233212420Sken#define MPI2_SCSIIO_CONTROL_ORDEREDQ            (0x00000200)
234212420Sken#define MPI2_SCSIIO_CONTROL_ACAQ                (0x00000400)
235212420Sken
236212420Sken#define MPI2_SCSIIO_CONTROL_TLR_MASK            (0x000000C0)
237212420Sken#define MPI2_SCSIIO_CONTROL_NO_TLR              (0x00000000)
238212420Sken#define MPI2_SCSIIO_CONTROL_TLR_ON              (0x00000040)
239212420Sken#define MPI2_SCSIIO_CONTROL_TLR_OFF             (0x00000080)
240212420Sken
241212420Sken
242212420Sken/* SCSI IO Error Reply Message */
243212420Skentypedef struct _MPI2_SCSI_IO_REPLY
244212420Sken{
245212420Sken    U16                     DevHandle;                      /* 0x00 */
246212420Sken    U8                      MsgLength;                      /* 0x02 */
247212420Sken    U8                      Function;                       /* 0x03 */
248212420Sken    U16                     Reserved1;                      /* 0x04 */
249212420Sken    U8                      Reserved2;                      /* 0x06 */
250212420Sken    U8                      MsgFlags;                       /* 0x07 */
251212420Sken    U8                      VP_ID;                          /* 0x08 */
252212420Sken    U8                      VF_ID;                          /* 0x09 */
253212420Sken    U16                     Reserved3;                      /* 0x0A */
254212420Sken    U8                      SCSIStatus;                     /* 0x0C */
255212420Sken    U8                      SCSIState;                      /* 0x0D */
256212420Sken    U16                     IOCStatus;                      /* 0x0E */
257212420Sken    U32                     IOCLogInfo;                     /* 0x10 */
258212420Sken    U32                     TransferCount;                  /* 0x14 */
259212420Sken    U32                     SenseCount;                     /* 0x18 */
260212420Sken    U32                     ResponseInfo;                   /* 0x1C */
261212420Sken    U16                     TaskTag;                        /* 0x20 */
262212420Sken    U16                     Reserved4;                      /* 0x22 */
263212420Sken    U32                     BidirectionalTransferCount;     /* 0x24 */
264212420Sken    U32                     Reserved5;                      /* 0x28 */
265212420Sken    U32                     Reserved6;                      /* 0x2C */
266212420Sken} MPI2_SCSI_IO_REPLY, MPI2_POINTER PTR_MPI2_SCSI_IO_REPLY,
267212420Sken  Mpi2SCSIIOReply_t, MPI2_POINTER pMpi2SCSIIOReply_t;
268212420Sken
269212420Sken/* SCSI IO Reply SCSIStatus values (SAM-4 status codes) */
270212420Sken
271212420Sken#define MPI2_SCSI_STATUS_GOOD                   (0x00)
272212420Sken#define MPI2_SCSI_STATUS_CHECK_CONDITION        (0x02)
273212420Sken#define MPI2_SCSI_STATUS_CONDITION_MET          (0x04)
274212420Sken#define MPI2_SCSI_STATUS_BUSY                   (0x08)
275212420Sken#define MPI2_SCSI_STATUS_INTERMEDIATE           (0x10)
276212420Sken#define MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET   (0x14)
277212420Sken#define MPI2_SCSI_STATUS_RESERVATION_CONFLICT   (0x18)
278212420Sken#define MPI2_SCSI_STATUS_COMMAND_TERMINATED     (0x22) /* obsolete */
279212420Sken#define MPI2_SCSI_STATUS_TASK_SET_FULL          (0x28)
280212420Sken#define MPI2_SCSI_STATUS_ACA_ACTIVE             (0x30)
281212420Sken#define MPI2_SCSI_STATUS_TASK_ABORTED           (0x40)
282212420Sken
283212420Sken/* SCSI IO Reply SCSIState flags */
284212420Sken
285212420Sken#define MPI2_SCSI_STATE_RESPONSE_INFO_VALID     (0x10)
286212420Sken#define MPI2_SCSI_STATE_TERMINATED              (0x08)
287212420Sken#define MPI2_SCSI_STATE_NO_SCSI_STATUS          (0x04)
288212420Sken#define MPI2_SCSI_STATE_AUTOSENSE_FAILED        (0x02)
289212420Sken#define MPI2_SCSI_STATE_AUTOSENSE_VALID         (0x01)
290212420Sken
291212420Sken/* masks and shifts for the ResponseInfo field */
292212420Sken
293212420Sken#define MPI2_SCSI_RI_MASK_REASONCODE            (0x000000FF)
294212420Sken#define MPI2_SCSI_RI_SHIFT_REASONCODE           (0)
295212420Sken
296212420Sken#define MPI2_SCSI_TASKTAG_UNKNOWN               (0xFFFF)
297212420Sken
298212420Sken
299212420Sken/****************************************************************************
300212420Sken*  SCSI Task Management messages
301212420Sken****************************************************************************/
302212420Sken
303212420Sken/* SCSI Task Management Request Message */
304212420Skentypedef struct _MPI2_SCSI_TASK_MANAGE_REQUEST
305212420Sken{
306212420Sken    U16                     DevHandle;                      /* 0x00 */
307212420Sken    U8                      ChainOffset;                    /* 0x02 */
308212420Sken    U8                      Function;                       /* 0x03 */
309212420Sken    U8                      Reserved1;                      /* 0x04 */
310212420Sken    U8                      TaskType;                       /* 0x05 */
311212420Sken    U8                      Reserved2;                      /* 0x06 */
312212420Sken    U8                      MsgFlags;                       /* 0x07 */
313212420Sken    U8                      VP_ID;                          /* 0x08 */
314212420Sken    U8                      VF_ID;                          /* 0x09 */
315212420Sken    U16                     Reserved3;                      /* 0x0A */
316212420Sken    U8                      LUN[8];                         /* 0x0C */
317212420Sken    U32                     Reserved4[7];                   /* 0x14 */
318212420Sken    U16                     TaskMID;                        /* 0x30 */
319212420Sken    U16                     Reserved5;                      /* 0x32 */
320212420Sken} MPI2_SCSI_TASK_MANAGE_REQUEST,
321212420Sken  MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REQUEST,
322212420Sken  Mpi2SCSITaskManagementRequest_t,
323212420Sken  MPI2_POINTER pMpi2SCSITaskManagementRequest_t;
324212420Sken
325212420Sken/* TaskType values */
326212420Sken
327212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK           (0x01)
328212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET        (0x02)
329212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET         (0x03)
330212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET   (0x05)
331212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET       (0x06)
332212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK           (0x07)
333212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_CLR_ACA              (0x08)
334212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_QRY_TASK_SET         (0x09)
335212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT      (0x0A)
336212420Sken
337212420Sken/* obsolete TaskType name */
338212420Sken#define MPI2_SCSITASKMGMT_TASKTYPE_QRY_UNIT_ATTENTION   (MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT)
339212420Sken
340212420Sken/* MsgFlags bits */
341212420Sken
342212420Sken#define MPI2_SCSITASKMGMT_MSGFLAGS_MASK_TARGET_RESET    (0x18)
343212420Sken#define MPI2_SCSITASKMGMT_MSGFLAGS_LINK_RESET           (0x00)
344212420Sken#define MPI2_SCSITASKMGMT_MSGFLAGS_NEXUS_RESET_SRST     (0x08)
345212420Sken#define MPI2_SCSITASKMGMT_MSGFLAGS_SAS_HARD_LINK_RESET  (0x10)
346212420Sken
347212420Sken#define MPI2_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU  (0x01)
348212420Sken
349212420Sken
350212420Sken
351212420Sken/* SCSI Task Management Reply Message */
352212420Skentypedef struct _MPI2_SCSI_TASK_MANAGE_REPLY
353212420Sken{
354212420Sken    U16                     DevHandle;                      /* 0x00 */
355212420Sken    U8                      MsgLength;                      /* 0x02 */
356212420Sken    U8                      Function;                       /* 0x03 */
357212420Sken    U8                      ResponseCode;                   /* 0x04 */
358212420Sken    U8                      TaskType;                       /* 0x05 */
359212420Sken    U8                      Reserved1;                      /* 0x06 */
360212420Sken    U8                      MsgFlags;                       /* 0x07 */
361212420Sken    U8                      VP_ID;                          /* 0x08 */
362212420Sken    U8                      VF_ID;                          /* 0x09 */
363212420Sken    U16                     Reserved2;                      /* 0x0A */
364212420Sken    U16                     Reserved3;                      /* 0x0C */
365212420Sken    U16                     IOCStatus;                      /* 0x0E */
366212420Sken    U32                     IOCLogInfo;                     /* 0x10 */
367212420Sken    U32                     TerminationCount;               /* 0x14 */
368212420Sken    U32                     ResponseInfo;                   /* 0x18 */
369212420Sken} MPI2_SCSI_TASK_MANAGE_REPLY,
370212420Sken  MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REPLY,
371212420Sken  Mpi2SCSITaskManagementReply_t, MPI2_POINTER pMpi2SCSIManagementReply_t;
372212420Sken
373212420Sken/* ResponseCode values */
374212420Sken
375212420Sken#define MPI2_SCSITASKMGMT_RSP_TM_COMPLETE               (0x00)
376212420Sken#define MPI2_SCSITASKMGMT_RSP_INVALID_FRAME             (0x02)
377212420Sken#define MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED          (0x04)
378212420Sken#define MPI2_SCSITASKMGMT_RSP_TM_FAILED                 (0x05)
379212420Sken#define MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED              (0x08)
380212420Sken#define MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN            (0x09)
381212420Sken#define MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG         (0x0A)
382212420Sken#define MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC          (0x80)
383212420Sken
384212420Sken/* masks and shifts for the ResponseInfo field */
385212420Sken
386212420Sken#define MPI2_SCSITASKMGMT_RI_MASK_REASONCODE            (0x000000FF)
387212420Sken#define MPI2_SCSITASKMGMT_RI_SHIFT_REASONCODE           (0)
388212420Sken#define MPI2_SCSITASKMGMT_RI_MASK_ARI2                  (0x0000FF00)
389212420Sken#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI2                 (8)
390212420Sken#define MPI2_SCSITASKMGMT_RI_MASK_ARI1                  (0x00FF0000)
391212420Sken#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI1                 (16)
392212420Sken#define MPI2_SCSITASKMGMT_RI_MASK_ARI0                  (0xFF000000)
393212420Sken#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI0                 (24)
394212420Sken
395212420Sken
396212420Sken/****************************************************************************
397212420Sken*  SCSI Enclosure Processor messages
398212420Sken****************************************************************************/
399212420Sken
400212420Sken/* SCSI Enclosure Processor Request Message */
401212420Skentypedef struct _MPI2_SEP_REQUEST
402212420Sken{
403212420Sken    U16                     DevHandle;          /* 0x00 */
404212420Sken    U8                      ChainOffset;        /* 0x02 */
405212420Sken    U8                      Function;           /* 0x03 */
406212420Sken    U8                      Action;             /* 0x04 */
407212420Sken    U8                      Flags;              /* 0x05 */
408212420Sken    U8                      Reserved1;          /* 0x06 */
409212420Sken    U8                      MsgFlags;           /* 0x07 */
410212420Sken    U8                      VP_ID;              /* 0x08 */
411212420Sken    U8                      VF_ID;              /* 0x09 */
412212420Sken    U16                     Reserved2;          /* 0x0A */
413212420Sken    U32                     SlotStatus;         /* 0x0C */
414212420Sken    U32                     Reserved3;          /* 0x10 */
415212420Sken    U32                     Reserved4;          /* 0x14 */
416212420Sken    U32                     Reserved5;          /* 0x18 */
417212420Sken    U16                     Slot;               /* 0x1C */
418212420Sken    U16                     EnclosureHandle;    /* 0x1E */
419212420Sken} MPI2_SEP_REQUEST, MPI2_POINTER PTR_MPI2_SEP_REQUEST,
420212420Sken  Mpi2SepRequest_t, MPI2_POINTER pMpi2SepRequest_t;
421212420Sken
422212420Sken/* Action defines */
423212420Sken#define MPI2_SEP_REQ_ACTION_WRITE_STATUS                (0x00)
424212420Sken#define MPI2_SEP_REQ_ACTION_READ_STATUS                 (0x01)
425212420Sken
426212420Sken/* Flags defines */
427212420Sken#define MPI2_SEP_REQ_FLAGS_DEVHANDLE_ADDRESS            (0x00)
428212420Sken#define MPI2_SEP_REQ_FLAGS_ENCLOSURE_SLOT_ADDRESS       (0x01)
429212420Sken
430212420Sken/* SlotStatus defines */
431212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE          (0x00040000)
432212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST        (0x00020000)
433212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED         (0x00000200)
434212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_HOT_SPARE               (0x00000100)
435212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_UNCONFIGURED            (0x00000080)
436212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_PREDICTED_FAULT         (0x00000040)
437212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_IN_CRITICAL_ARRAY       (0x00000010)
438212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_IN_FAILED_ARRAY         (0x00000008)
439212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_DEV_REBUILDING          (0x00000004)
440212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_DEV_FAULTY              (0x00000002)
441212420Sken#define MPI2_SEP_REQ_SLOTSTATUS_NO_ERROR                (0x00000001)
442212420Sken
443212420Sken
444212420Sken/* SCSI Enclosure Processor Reply Message */
445212420Skentypedef struct _MPI2_SEP_REPLY
446212420Sken{
447212420Sken    U16                     DevHandle;          /* 0x00 */
448212420Sken    U8                      MsgLength;          /* 0x02 */
449212420Sken    U8                      Function;           /* 0x03 */
450212420Sken    U8                      Action;             /* 0x04 */
451212420Sken    U8                      Flags;              /* 0x05 */
452212420Sken    U8                      Reserved1;          /* 0x06 */
453212420Sken    U8                      MsgFlags;           /* 0x07 */
454212420Sken    U8                      VP_ID;              /* 0x08 */
455212420Sken    U8                      VF_ID;              /* 0x09 */
456212420Sken    U16                     Reserved2;          /* 0x0A */
457212420Sken    U16                     Reserved3;          /* 0x0C */
458212420Sken    U16                     IOCStatus;          /* 0x0E */
459212420Sken    U32                     IOCLogInfo;         /* 0x10 */
460212420Sken    U32                     SlotStatus;         /* 0x14 */
461212420Sken    U32                     Reserved4;          /* 0x18 */
462212420Sken    U16                     Slot;               /* 0x1C */
463212420Sken    U16                     EnclosureHandle;    /* 0x1E */
464212420Sken} MPI2_SEP_REPLY, MPI2_POINTER PTR_MPI2_SEP_REPLY,
465212420Sken  Mpi2SepReply_t, MPI2_POINTER pMpi2SepReply_t;
466212420Sken
467212420Sken/* SlotStatus defines */
468212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_REMOVE_READY          (0x00040000)
469212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST      (0x00020000)
470212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED       (0x00000200)
471212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_HOT_SPARE             (0x00000100)
472212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_UNCONFIGURED          (0x00000080)
473212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_PREDICTED_FAULT       (0x00000040)
474212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_IN_CRITICAL_ARRAY     (0x00000010)
475212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_IN_FAILED_ARRAY       (0x00000008)
476212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_DEV_REBUILDING        (0x00000004)
477212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_DEV_FAULTY            (0x00000002)
478212420Sken#define MPI2_SEP_REPLY_SLOTSTATUS_NO_ERROR              (0x00000001)
479212420Sken
480212420Sken
481212420Sken#endif
482212420Sken
483212420Sken
484