1265236Sken/*-
2283661Sslm * Copyright (c) 2012-2015 LSI Corp.
3299263Sslm * Copyright (c) 2013-2016 Avago Technologies
4265236Sken * All rights reserved.
5265236Sken *
6265236Sken * Redistribution and use in source and binary forms, with or without
7265236Sken * modification, are permitted provided that the following conditions
8265236Sken * are met:
9265236Sken * 1. Redistributions of source code must retain the above copyright
10265236Sken *    notice, this list of conditions and the following disclaimer.
11265236Sken * 2. Redistributions in binary form must reproduce the above copyright
12265236Sken *    notice, this list of conditions and the following disclaimer in the
13265236Sken *    documentation and/or other materials provided with the distribution.
14265236Sken * 3. Neither the name of the author nor the names of any co-contributors
15265236Sken *    may be used to endorse or promote products derived from this software
16265236Sken *    without specific prior written permission.
17265236Sken *
18265236Sken * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19265236Sken * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20265236Sken * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21265236Sken * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22265236Sken * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23265236Sken * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24265236Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25265236Sken * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26265236Sken * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27265236Sken * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28265236Sken * SUCH DAMAGE.
29265236Sken *
30283661Sslm * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
31265236Sken *
32265236Sken * $FreeBSD$
33265236Sken */
34265236Sken
35265236Sken/*
36283661Sslm *  Copyright (c) 2000-2015 LSI Corporation.
37299263Sslm *  Copyright (c) 2013-2016 Avago Technologies
38299263Sslm *  All rights reserved.
39265236Sken *
40265236Sken *
41265236Sken *           Name:  mpi2_targ.h
42265236Sken *          Title:  MPI Target mode messages and structures
43265236Sken *  Creation Date:  September 8, 2006
44265236Sken *
45299263Sslm *  mpi2_targ.h Version: 02.00.09
46265236Sken *
47265236Sken *  NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
48265236Sken *        prefix are for use only on MPI v2.5 products, and must not be used
49265236Sken *        with MPI v2.0 products. Unless otherwise noted, names beginning with
50265236Sken *        MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products.
51265236Sken *
52265236Sken *  Version History
53265236Sken *  ---------------
54265236Sken *
55265236Sken *  Date      Version   Description
56265236Sken *  --------  --------  ------------------------------------------------------
57265236Sken *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
58265236Sken *  08-31-07  02.00.01  Added Command Buffer Data Location Address Space bits to
59265236Sken *                      BufferPostFlags field of CommandBufferPostBase Request.
60265236Sken *  02-29-08  02.00.02  Modified various names to make them 32-character unique.
61265236Sken *  10-02-08  02.00.03  Removed NextCmdBufferOffset from
62265236Sken *                      MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST.
63265236Sken *                      Target Status Send Request only takes a single SGE for
64265236Sken *                      response data.
65265236Sken *  02-10-10  02.00.04  Added comment to MPI2_TARGET_SSP_RSP_IU structure.
66265236Sken *  11-18-11  02.00.05  Incorporating additions for MPI v2.5.
67265236Sken *  11-27-12  02.00.06  Added InitiatorDevHandle field to MPI2_TARGET_MODE_ABORT
68265236Sken *                      request message structure.
69265236Sken *                      Added AbortType MPI2_TARGET_MODE_ABORT_DEVHANDLE and
70265236Sken *                      MPI2_TARGET_MODE_ABORT_ALL_COMMANDS.
71299263Sslm *  06-13-14  02.00.07  Added MinMSIxIndex and MaxMSIxIndex fields to
72299263Sslm *                      MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST.
73299263Sslm *  11-18-14  02.00.08  Updated copyright information.
74299263Sslm *  03-16-15  02.00.09  Updated for MPI v2.6.
75299263Sslm *                      Added MPI26_TARGET_ASSIST_IOFLAGS_ESCAPE_PASSTHROUGH.
76265236Sken *  --------------------------------------------------------------------------
77265236Sken */
78265236Sken
79265236Sken#ifndef MPI2_TARG_H
80265236Sken#define MPI2_TARG_H
81265236Sken
82265236Sken
83265236Sken/******************************************************************************
84265236Sken*
85265236Sken*        SCSI Target Messages
86265236Sken*
87265236Sken*******************************************************************************/
88265236Sken
89265236Sken/****************************************************************************
90265236Sken*  Target Command Buffer Post Base Request
91265236Sken****************************************************************************/
92265236Sken
93265236Skentypedef struct _MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST
94265236Sken{
95265236Sken    U8                      BufferPostFlags;        /* 0x00 */
96265236Sken    U8                      Reserved1;              /* 0x01 */
97265236Sken    U8                      ChainOffset;            /* 0x02 */
98265236Sken    U8                      Function;               /* 0x03 */
99265236Sken    U16                     TotalCmdBuffers;        /* 0x04 */
100265236Sken    U8                      Reserved;               /* 0x06 */
101265236Sken    U8                      MsgFlags;               /* 0x07 */
102265236Sken    U8                      VP_ID;                  /* 0x08 */
103265236Sken    U8                      VF_ID;                  /* 0x09 */
104265236Sken    U16                     Reserved2;              /* 0x0A */
105265236Sken    U32                     Reserved3;              /* 0x0C */
106265236Sken    U16                     CmdBufferLength;        /* 0x10 */
107299263Sslm    U8                      MinMSIxIndex;           /* 0x12 */ /* MPI 2.5 and newer only; Reserved in MPI 2.0 */
108299263Sslm    U8                      MaxMSIxIndex;           /* 0x13 */ /* MPI 2.5 and newer only; Reserved in MPI 2.0 */
109265236Sken    U32                     BaseAddressLow;         /* 0x14 */
110265236Sken    U32                     BaseAddressHigh;        /* 0x18 */
111265236Sken} MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST,
112265236Sken  MPI2_POINTER PTR_MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST,
113265236Sken  Mpi2TargetCmdBufferPostBaseRequest_t,
114265236Sken  MPI2_POINTER pMpi2TargetCmdBufferPostBaseRequest_t;
115265236Sken
116265236Sken/* values for the BufferPostflags field */
117265236Sken#define MPI2_CMD_BUF_POST_BASE_ADDRESS_SPACE_MASK            (0x0C)
118265236Sken#define MPI2_CMD_BUF_POST_BASE_SYSTEM_ADDRESS_SPACE          (0x00)
119265236Sken#define MPI2_CMD_BUF_POST_BASE_IOCDDR_ADDRESS_SPACE          (0x04)
120299263Sslm#define MPI2_CMD_BUF_POST_BASE_IOCPLB_ADDRESS_SPACE          (0x08) /* only for MPI v2.5 and earlier */
121299263Sslm#define MPI26_CMD_BUF_POST_BASE_IOCCTL_ADDRESS_SPACE         (0x08) /* for MPI v2.6 only */
122299263Sslm#define MPI2_CMD_BUF_POST_BASE_IOCPLBNTA_ADDRESS_SPACE       (0x0C) /* only for MPI v2.5 and earlier */
123265236Sken
124265236Sken#define MPI2_CMD_BUF_POST_BASE_FLAGS_AUTO_POST_ALL           (0x01)
125265236Sken
126265236Sken
127265236Sken/****************************************************************************
128265236Sken*  Target Command Buffer Post List Request
129265236Sken****************************************************************************/
130265236Sken
131265236Skentypedef struct _MPI2_TARGET_CMD_BUF_POST_LIST_REQUEST
132265236Sken{
133265236Sken    U16                     Reserved;               /* 0x00 */
134265236Sken    U8                      ChainOffset;            /* 0x02 */
135265236Sken    U8                      Function;               /* 0x03 */
136265236Sken    U16                     CmdBufferCount;         /* 0x04 */
137265236Sken    U8                      Reserved1;              /* 0x06 */
138265236Sken    U8                      MsgFlags;               /* 0x07 */
139265236Sken    U8                      VP_ID;                  /* 0x08 */
140265236Sken    U8                      VF_ID;                  /* 0x09 */
141265236Sken    U16                     Reserved2;              /* 0x0A */
142265236Sken    U32                     Reserved3;              /* 0x0C */
143265236Sken    U16                     IoIndex[2];             /* 0x10 */
144265236Sken} MPI2_TARGET_CMD_BUF_POST_LIST_REQUEST,
145265236Sken  MPI2_POINTER PTR_MPI2_TARGET_CMD_BUF_POST_LIST_REQUEST,
146265236Sken  Mpi2TargetCmdBufferPostListRequest_t,
147265236Sken  MPI2_POINTER pMpi2TargetCmdBufferPostListRequest_t;
148265236Sken
149265236Sken/****************************************************************************
150265236Sken*  Target Command Buffer Post Base List Reply
151265236Sken****************************************************************************/
152265236Sken
153265236Skentypedef struct _MPI2_TARGET_BUF_POST_BASE_LIST_REPLY
154265236Sken{
155265236Sken    U8                      Flags;                  /* 0x00 */
156265236Sken    U8                      Reserved;               /* 0x01 */
157265236Sken    U8                      MsgLength;              /* 0x02 */
158265236Sken    U8                      Function;               /* 0x03 */
159265236Sken    U16                     Reserved1;              /* 0x04 */
160265236Sken    U8                      Reserved2;              /* 0x06 */
161265236Sken    U8                      MsgFlags;               /* 0x07 */
162265236Sken    U8                      VP_ID;                  /* 0x08 */
163265236Sken    U8                      VF_ID;                  /* 0x09 */
164265236Sken    U16                     Reserved3;              /* 0x0A */
165265236Sken    U16                     Reserved4;              /* 0x0C */
166265236Sken    U16                     IOCStatus;              /* 0x0E */
167265236Sken    U32                     IOCLogInfo;             /* 0x10 */
168265236Sken    U16                     IoIndex;                /* 0x14 */
169265236Sken    U16                     Reserved5;              /* 0x16 */
170265236Sken    U32                     Reserved6;              /* 0x18 */
171265236Sken} MPI2_TARGET_BUF_POST_BASE_LIST_REPLY,
172265236Sken  MPI2_POINTER PTR_MPI2_TARGET_BUF_POST_BASE_LIST_REPLY,
173265236Sken  Mpi2TargetCmdBufferPostBaseListReply_t,
174265236Sken  MPI2_POINTER pMpi2TargetCmdBufferPostBaseListReply_t;
175265236Sken
176265236Sken/* Flags defines */
177265236Sken#define MPI2_CMD_BUF_POST_REPLY_IOINDEX_VALID       (0x01)
178265236Sken
179265236Sken
180265236Sken/****************************************************************************
181265236Sken*  Command Buffer Formats (with 16 byte CDB)
182265236Sken****************************************************************************/
183265236Sken
184265236Skentypedef struct _MPI2_TARGET_SSP_CMD_BUFFER
185265236Sken{
186265236Sken    U8      FrameType;                                  /* 0x00 */
187265236Sken    U8      Reserved1;                                  /* 0x01 */
188265236Sken    U16     InitiatorConnectionTag;                     /* 0x02 */
189265236Sken    U32     HashedSourceSASAddress;                     /* 0x04 */
190265236Sken    U16     Reserved2;                                  /* 0x08 */
191265236Sken    U16     Flags;                                      /* 0x0A */
192265236Sken    U32     Reserved3;                                  /* 0x0C */
193265236Sken    U16     Tag;                                        /* 0x10 */
194265236Sken    U16     TargetPortTransferTag;                      /* 0x12 */
195265236Sken    U32     DataOffset;                                 /* 0x14 */
196265236Sken    /* COMMAND information unit starts here */
197265236Sken    U8      LogicalUnitNumber[8];                       /* 0x18 */
198265236Sken    U8      Reserved4;                                  /* 0x20 */
199265236Sken    U8      TaskAttribute; /* lower 3 bits */           /* 0x21 */
200265236Sken    U8      Reserved5;                                  /* 0x22 */
201265236Sken    U8      AdditionalCDBLength; /* upper 5 bits */     /* 0x23 */
202265236Sken    U8      CDB[16];                                    /* 0x24 */
203265236Sken    /* Additional CDB bytes extend past the CDB field */
204265236Sken} MPI2_TARGET_SSP_CMD_BUFFER, MPI2_POINTER PTR_MPI2_TARGET_SSP_CMD_BUFFER,
205265236Sken  Mpi2TargetSspCmdBuffer, MPI2_POINTER pMp2iTargetSspCmdBuffer;
206265236Sken
207265236Skentypedef struct _MPI2_TARGET_SSP_TASK_BUFFER
208265236Sken{
209265236Sken    U8      FrameType;                                  /* 0x00 */
210265236Sken    U8      Reserved1;                                  /* 0x01 */
211265236Sken    U16     InitiatorConnectionTag;                     /* 0x02 */
212265236Sken    U32     HashedSourceSASAddress;                     /* 0x04 */
213265236Sken    U16     Reserved2;                                  /* 0x08 */
214265236Sken    U16     Flags;                                      /* 0x0A */
215265236Sken    U32     Reserved3;                                  /* 0x0C */
216265236Sken    U16     Tag;                                        /* 0x10 */
217265236Sken    U16     TargetPortTransferTag;                      /* 0x12 */
218265236Sken    U32     DataOffset;                                 /* 0x14 */
219265236Sken    /* TASK information unit starts here */
220265236Sken    U8      LogicalUnitNumber[8];                       /* 0x18 */
221265236Sken    U16     Reserved4;                                  /* 0x20 */
222265236Sken    U8      TaskManagementFunction;                     /* 0x22 */
223265236Sken    U8      Reserved5;                                  /* 0x23 */
224265236Sken    U16     ManagedTaskTag;                             /* 0x24 */
225265236Sken    U16     Reserved6;                                  /* 0x26 */
226265236Sken    U32     Reserved7;                                  /* 0x28 */
227265236Sken    U32     Reserved8;                                  /* 0x2C */
228265236Sken    U32     Reserved9;                                  /* 0x30 */
229265236Sken} MPI2_TARGET_SSP_TASK_BUFFER, MPI2_POINTER PTR_MPI2_TARGET_SSP_TASK_BUFFER,
230265236Sken  Mpi2TargetSspTaskBuffer, MPI2_POINTER pMpi2TargetSspTaskBuffer;
231265236Sken
232265236Sken/* mask and shift for HashedSourceSASAddress field */
233265236Sken#define MPI2_TARGET_HASHED_SAS_ADDRESS_MASK     (0xFFFFFF00)
234265236Sken#define MPI2_TARGET_HASHED_SAS_ADDRESS_SHIFT    (8)
235265236Sken
236265236Sken
237265236Sken/****************************************************************************
238265236Sken*   MPI v2.0 Target Assist Request
239265236Sken****************************************************************************/
240265236Sken
241265236Skentypedef struct _MPI2_TARGET_ASSIST_REQUEST
242265236Sken{
243265236Sken    U8                  Reserved1;                          /* 0x00 */
244265236Sken    U8                  TargetAssistFlags;                  /* 0x01 */
245265236Sken    U8                  ChainOffset;                        /* 0x02 */
246265236Sken    U8                  Function;                           /* 0x03 */
247265236Sken    U16                 QueueTag;                           /* 0x04 */
248265236Sken    U8                  Reserved2;                          /* 0x06 */
249265236Sken    U8                  MsgFlags;                           /* 0x07 */
250265236Sken    U8                  VP_ID;                              /* 0x08 */
251265236Sken    U8                  VF_ID;                              /* 0x09 */
252265236Sken    U16                 Reserved3;                          /* 0x0A */
253265236Sken    U16                 IoIndex;                            /* 0x0C */
254265236Sken    U16                 InitiatorConnectionTag;             /* 0x0E */
255265236Sken    U16                 SGLFlags;                           /* 0x10 */
256265236Sken    U8                  SequenceNumber;                     /* 0x12 */
257265236Sken    U8                  Reserved4;                          /* 0x13 */
258265236Sken    U8                  SGLOffset0;                         /* 0x14 */
259265236Sken    U8                  SGLOffset1;                         /* 0x15 */
260265236Sken    U8                  SGLOffset2;                         /* 0x16 */
261265236Sken    U8                  SGLOffset3;                         /* 0x17 */
262265236Sken    U32                 SkipCount;                          /* 0x18 */
263265236Sken    U32                 DataLength;                         /* 0x1C */
264265236Sken    U32                 BidirectionalDataLength;            /* 0x20 */
265265236Sken    U16                 IoFlags;                            /* 0x24 */
266265236Sken    U16                 EEDPFlags;                          /* 0x26 */
267265236Sken    U32                 EEDPBlockSize;                      /* 0x28 */
268265236Sken    U32                 SecondaryReferenceTag;              /* 0x2C */
269265236Sken    U16                 SecondaryApplicationTag;            /* 0x30 */
270265236Sken    U16                 ApplicationTagTranslationMask;      /* 0x32 */
271265236Sken    U32                 PrimaryReferenceTag;                /* 0x34 */
272265236Sken    U16                 PrimaryApplicationTag;              /* 0x38 */
273265236Sken    U16                 PrimaryApplicationTagMask;          /* 0x3A */
274265236Sken    U32                 RelativeOffset;                     /* 0x3C */
275265236Sken    U32                 Reserved5;                          /* 0x40 */
276265236Sken    U32                 Reserved6;                          /* 0x44 */
277265236Sken    U32                 Reserved7;                          /* 0x48 */
278265236Sken    U32                 Reserved8;                          /* 0x4C */
279265236Sken    MPI2_SGE_IO_UNION   SGL[1];                             /* 0x50 */
280265236Sken} MPI2_TARGET_ASSIST_REQUEST, MPI2_POINTER PTR_MPI2_TARGET_ASSIST_REQUEST,
281265236Sken  Mpi2TargetAssistRequest_t, MPI2_POINTER pMpi2TargetAssistRequest_t;
282265236Sken
283265236Sken/* Target Assist TargetAssistFlags bits */
284265236Sken
285265236Sken#define MPI2_TARGET_ASSIST_FLAGS_REPOST_CMD_BUFFER      (0x80)
286265236Sken#define MPI2_TARGET_ASSIST_FLAGS_TLR                    (0x10)
287265236Sken#define MPI2_TARGET_ASSIST_FLAGS_RETRANSMIT             (0x04)
288265236Sken#define MPI2_TARGET_ASSIST_FLAGS_AUTO_STATUS            (0x02)
289265236Sken#define MPI2_TARGET_ASSIST_FLAGS_DATA_DIRECTION         (0x01)
290265236Sken
291265236Sken/* Target Assist SGLFlags bits */
292265236Sken
293265236Sken/* base values for Data Location Address Space */
294265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_ADDR_MASK           (0x0C)
295265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_SYSTEM_ADDR         (0x00)
296265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_IOCDDR_ADDR         (0x04)
297265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_IOCPLB_ADDR         (0x08)
298265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_PLBNTA_ADDR         (0x0C)
299265236Sken
300265236Sken/* base values for Type */
301265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_TYPE_MASK           (0x03)
302265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_MPI_TYPE            (0x00)
303265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_32IEEE_TYPE         (0x01)
304265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_64IEEE_TYPE         (0x02)
305265236Sken
306265236Sken/* shift values for each sub-field */
307265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_SGL3_SHIFT          (12)
308265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_SGL2_SHIFT          (8)
309265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_SGL1_SHIFT          (4)
310265236Sken#define MPI2_TARGET_ASSIST_SGLFLAGS_SGL0_SHIFT          (0)
311265236Sken
312265236Sken/* Target Assist IoFlags bits */
313265236Sken
314265236Sken#define MPI2_TARGET_ASSIST_IOFLAGS_BIDIRECTIONAL        (0x0800)
315265236Sken#define MPI2_TARGET_ASSIST_IOFLAGS_MULTICAST            (0x0400)
316265236Sken#define MPI2_TARGET_ASSIST_IOFLAGS_RECEIVE_FIRST        (0x0200)
317265236Sken
318265236Sken/* Target Assist EEDPFlags bits */
319265236Sken
320265236Sken#define MPI2_TA_EEDPFLAGS_INC_PRI_REFTAG            (0x8000)
321265236Sken#define MPI2_TA_EEDPFLAGS_INC_SEC_REFTAG            (0x4000)
322265236Sken#define MPI2_TA_EEDPFLAGS_INC_PRI_APPTAG            (0x2000)
323265236Sken#define MPI2_TA_EEDPFLAGS_INC_SEC_APPTAG            (0x1000)
324265236Sken
325265236Sken#define MPI2_TA_EEDPFLAGS_CHECK_REFTAG              (0x0400)
326265236Sken#define MPI2_TA_EEDPFLAGS_CHECK_APPTAG              (0x0200)
327265236Sken#define MPI2_TA_EEDPFLAGS_CHECK_GUARD               (0x0100)
328265236Sken
329265236Sken#define MPI2_TA_EEDPFLAGS_PASSTHRU_REFTAG           (0x0008)
330265236Sken
331265236Sken#define MPI2_TA_EEDPFLAGS_MASK_OP                   (0x0007)
332265236Sken#define MPI2_TA_EEDPFLAGS_NOOP_OP                   (0x0000)
333265236Sken#define MPI2_TA_EEDPFLAGS_CHECK_OP                  (0x0001)
334265236Sken#define MPI2_TA_EEDPFLAGS_STRIP_OP                  (0x0002)
335265236Sken#define MPI2_TA_EEDPFLAGS_CHECK_REMOVE_OP           (0x0003)
336265236Sken#define MPI2_TA_EEDPFLAGS_INSERT_OP                 (0x0004)
337265236Sken#define MPI2_TA_EEDPFLAGS_REPLACE_OP                (0x0006)
338265236Sken#define MPI2_TA_EEDPFLAGS_CHECK_REGEN_OP            (0x0007)
339265236Sken
340265236Sken
341265236Sken/****************************************************************************
342265236Sken*   MPI v2.5 Target Assist Request
343265236Sken****************************************************************************/
344265236Sken
345265236Skentypedef struct _MPI25_TARGET_ASSIST_REQUEST
346265236Sken{
347265236Sken    U8                  Reserved1;                          /* 0x00 */
348265236Sken    U8                  TargetAssistFlags;                  /* 0x01 */
349265236Sken    U8                  ChainOffset;                        /* 0x02 */
350265236Sken    U8                  Function;                           /* 0x03 */
351265236Sken    U16                 QueueTag;                           /* 0x04 */
352265236Sken    U8                  Reserved2;                          /* 0x06 */
353265236Sken    U8                  MsgFlags;                           /* 0x07 */
354265236Sken    U8                  VP_ID;                              /* 0x08 */
355265236Sken    U8                  VF_ID;                              /* 0x09 */
356265236Sken    U16                 Reserved3;                          /* 0x0A */
357265236Sken    U16                 IoIndex;                            /* 0x0C */
358265236Sken    U16                 InitiatorConnectionTag;             /* 0x0E */
359265236Sken    U8                  DMAFlags;                           /* 0x10 */
360265236Sken    U8                  Reserved9;                          /* 0x11 */
361265236Sken    U8                  SequenceNumber;                     /* 0x12 */
362265236Sken    U8                  Reserved4;                          /* 0x13 */
363265236Sken    U8                  SGLOffset0;                         /* 0x14 */
364265236Sken    U8                  SGLOffset1;                         /* 0x15 */
365265236Sken    U8                  SGLOffset2;                         /* 0x16 */
366265236Sken    U8                  SGLOffset3;                         /* 0x17 */
367265236Sken    U32                 SkipCount;                          /* 0x18 */
368265236Sken    U32                 DataLength;                         /* 0x1C */
369265236Sken    U32                 BidirectionalDataLength;            /* 0x20 */
370265236Sken    U16                 IoFlags;                            /* 0x24 */
371265236Sken    U16                 EEDPFlags;                          /* 0x26 */
372265236Sken    U16                 EEDPBlockSize;                      /* 0x28 */
373265236Sken    U16                 Reserved10;                         /* 0x2A */
374265236Sken    U32                 SecondaryReferenceTag;              /* 0x2C */
375265236Sken    U16                 SecondaryApplicationTag;            /* 0x30 */
376265236Sken    U16                 ApplicationTagTranslationMask;      /* 0x32 */
377265236Sken    U32                 PrimaryReferenceTag;                /* 0x34 */
378265236Sken    U16                 PrimaryApplicationTag;              /* 0x38 */
379265236Sken    U16                 PrimaryApplicationTagMask;          /* 0x3A */
380265236Sken    U32                 RelativeOffset;                     /* 0x3C */
381265236Sken    U32                 Reserved5;                          /* 0x40 */
382265236Sken    U32                 Reserved6;                          /* 0x44 */
383265236Sken    U32                 Reserved7;                          /* 0x48 */
384265236Sken    U32                 Reserved8;                          /* 0x4C */
385265236Sken    MPI25_SGE_IO_UNION  SGL;                                /* 0x50 */
386265236Sken} MPI25_TARGET_ASSIST_REQUEST, MPI2_POINTER PTR_MPI25_TARGET_ASSIST_REQUEST,
387265236Sken  Mpi25TargetAssistRequest_t, MPI2_POINTER pMpi25TargetAssistRequest_t;
388265236Sken
389265236Sken/* use MPI2_TARGET_ASSIST_FLAGS_ defines for the Flags field */
390265236Sken
391265236Sken/* Defines for the DMAFlags field
392265236Sken *  Each setting affects 4 SGLS, from SGL0 to SGL3.
393265236Sken *      D = Data
394265236Sken *      C = Cache DIF
395265236Sken *      I = Interleaved
396265236Sken *      H = Host DIF
397265236Sken */
398265236Sken#define MPI25_TA_DMAFLAGS_OP_MASK                   (0x0F)
399265236Sken#define MPI25_TA_DMAFLAGS_OP_D_D_D_D                (0x00)
400265236Sken#define MPI25_TA_DMAFLAGS_OP_D_D_D_C                (0x01)
401265236Sken#define MPI25_TA_DMAFLAGS_OP_D_D_D_I                (0x02)
402265236Sken#define MPI25_TA_DMAFLAGS_OP_D_D_C_C                (0x03)
403265236Sken#define MPI25_TA_DMAFLAGS_OP_D_D_C_I                (0x04)
404265236Sken#define MPI25_TA_DMAFLAGS_OP_D_D_I_I                (0x05)
405265236Sken#define MPI25_TA_DMAFLAGS_OP_D_C_C_C                (0x06)
406265236Sken#define MPI25_TA_DMAFLAGS_OP_D_C_C_I                (0x07)
407265236Sken#define MPI25_TA_DMAFLAGS_OP_D_C_I_I                (0x08)
408265236Sken#define MPI25_TA_DMAFLAGS_OP_D_I_I_I                (0x09)
409265236Sken#define MPI25_TA_DMAFLAGS_OP_D_H_D_D                (0x0A)
410265236Sken#define MPI25_TA_DMAFLAGS_OP_D_H_D_C                (0x0B)
411265236Sken#define MPI25_TA_DMAFLAGS_OP_D_H_D_I                (0x0C)
412265236Sken#define MPI25_TA_DMAFLAGS_OP_D_H_C_C                (0x0D)
413265236Sken#define MPI25_TA_DMAFLAGS_OP_D_H_C_I                (0x0E)
414265236Sken#define MPI25_TA_DMAFLAGS_OP_D_H_I_I                (0x0F)
415265236Sken
416265236Sken/* defines for the IoFlags field */
417299263Sslm#define MPI26_TARGET_ASSIST_IOFLAGS_ESCAPE_PASSTHROUGH  (0x2000) /* MPI v2.6 and later */
418265236Sken#define MPI25_TARGET_ASSIST_IOFLAGS_BIDIRECTIONAL       (0x0800)
419265236Sken#define MPI25_TARGET_ASSIST_IOFLAGS_RECEIVE_FIRST       (0x0200)
420265236Sken
421265236Sken/* defines for the EEDPFlags field */
422265236Sken#define MPI25_TA_EEDPFLAGS_INC_PRI_REFTAG               (0x8000)
423265236Sken#define MPI25_TA_EEDPFLAGS_INC_SEC_REFTAG               (0x4000)
424265236Sken#define MPI25_TA_EEDPFLAGS_INC_PRI_APPTAG               (0x2000)
425265236Sken#define MPI25_TA_EEDPFLAGS_INC_SEC_APPTAG               (0x1000)
426265236Sken
427265236Sken#define MPI25_TA_EEDPFLAGS_CHECK_REFTAG                 (0x0400)
428265236Sken#define MPI25_TA_EEDPFLAGS_CHECK_APPTAG                 (0x0200)
429265236Sken#define MPI25_TA_EEDPFLAGS_CHECK_GUARD                  (0x0100)
430265236Sken
431265236Sken#define MPI25_TA_EEDPFLAGS_ESCAPE_MODE_MASK             (0x00C0)
432265236Sken#define MPI25_TA_EEDPFLAGS_COMPATIBLE_MODE              (0x0000)
433265236Sken#define MPI25_TA_EEDPFLAGS_DO_NOT_DISABLE_MODE          (0x0040)
434265236Sken#define MPI25_TA_EEDPFLAGS_APPTAG_DISABLE_MODE          (0x0080)
435265236Sken#define MPI25_TA_EEDPFLAGS_APPTAG_REFTAG_DISABLE_MODE   (0x00C0)
436265236Sken
437265236Sken#define MPI25_TA_EEDPFLAGS_HOST_GUARD_METHOD_MASK       (0x0030)
438265236Sken#define MPI25_TA_EEDPFLAGS_T10_CRC_HOST_GUARD           (0x0000)
439265236Sken#define MPI25_TA_EEDPFLAGS_IP_CHKSUM_HOST_GUARD         (0x0010)
440265236Sken
441265236Sken#define MPI25_TA_EEDPFLAGS_PASSTHRU_REFTAG              (0x0008)
442265236Sken
443265236Sken#define MPI25_TA_EEDPFLAGS_MASK_OP                      (0x0007)
444265236Sken#define MPI25_TA_EEDPFLAGS_NOOP_OP                      (0x0000)
445265236Sken#define MPI25_TA_EEDPFLAGS_CHECK_OP                     (0x0001)
446265236Sken#define MPI25_TA_EEDPFLAGS_STRIP_OP                     (0x0002)
447265236Sken#define MPI25_TA_EEDPFLAGS_CHECK_REMOVE_OP              (0x0003)
448265236Sken#define MPI25_TA_EEDPFLAGS_INSERT_OP                    (0x0004)
449265236Sken#define MPI25_TA_EEDPFLAGS_REPLACE_OP                   (0x0006)
450265236Sken#define MPI25_TA_EEDPFLAGS_CHECK_REGEN_OP               (0x0007)
451265236Sken
452265236Sken
453265236Sken/****************************************************************************
454265236Sken*  Target Status Send Request
455265236Sken****************************************************************************/
456265236Sken
457265236Skentypedef struct _MPI2_TARGET_STATUS_SEND_REQUEST
458265236Sken{
459265236Sken    U8                      Reserved1;                  /* 0x00 */
460265236Sken    U8                      StatusFlags;                /* 0x01 */
461265236Sken    U8                      ChainOffset;                /* 0x02 */
462265236Sken    U8                      Function;                   /* 0x03 */
463265236Sken    U16                     QueueTag;                   /* 0x04 */
464265236Sken    U8                      Reserved2;                  /* 0x06 */
465265236Sken    U8                      MsgFlags;                   /* 0x07 */
466265236Sken    U8                      VP_ID;                      /* 0x08 */
467265236Sken    U8                      VF_ID;                      /* 0x09 */
468265236Sken    U16                     Reserved3;                  /* 0x0A */
469265236Sken    U16                     IoIndex;                    /* 0x0C */
470265236Sken    U16                     InitiatorConnectionTag;     /* 0x0E */
471265236Sken    U16                     SGLFlags;                   /* 0x10 */ /* MPI v2.0 only. Reserved on MPI v2.5. */
472265236Sken    U16                     Reserved4;                  /* 0x12 */
473265236Sken    U8                      SGLOffset0;                 /* 0x14 */
474265236Sken    U8                      Reserved5;                  /* 0x15 */
475265236Sken    U16                     Reserved6;                  /* 0x16 */
476265236Sken    U32                     Reserved7;                  /* 0x18 */
477265236Sken    U32                     Reserved8;                  /* 0x1C */
478265236Sken    MPI2_SIMPLE_SGE_UNION   StatusDataSGE;              /* 0x20 */ /* MPI v2.5: This must be an IEEE Simple Element 64. */
479265236Sken} MPI2_TARGET_STATUS_SEND_REQUEST,
480265236Sken  MPI2_POINTER PTR_MPI2_TARGET_STATUS_SEND_REQUEST,
481265236Sken  Mpi2TargetStatusSendRequest_t, MPI2_POINTER pMpi2TargetStatusSendRequest_t;
482265236Sken
483265236Sken/* Target Status Send StatusFlags bits */
484265236Sken
485265236Sken#define MPI2_TSS_FLAGS_REPOST_CMD_BUFFER            (0x80)
486265236Sken#define MPI2_TSS_FLAGS_RETRANSMIT                   (0x04)
487265236Sken#define MPI2_TSS_FLAGS_AUTO_GOOD_STATUS             (0x01)
488265236Sken
489265236Sken/* Target Status Send SGLFlags bits - MPI v2.0 only */
490265236Sken/* Data Location Address Space */
491265236Sken#define MPI2_TSS_SGLFLAGS_ADDR_MASK                 (0x0C)
492265236Sken#define MPI2_TSS_SGLFLAGS_SYSTEM_ADDR               (0x00)
493265236Sken#define MPI2_TSS_SGLFLAGS_IOCDDR_ADDR               (0x04)
494265236Sken#define MPI2_TSS_SGLFLAGS_IOCPLB_ADDR               (0x08)
495265236Sken#define MPI2_TSS_SGLFLAGS_IOCPLBNTA_ADDR            (0x0C)
496265236Sken/* Type */
497265236Sken#define MPI2_TSS_SGLFLAGS_TYPE_MASK                 (0x03)
498265236Sken#define MPI2_TSS_SGLFLAGS_MPI_TYPE                  (0x00)
499265236Sken#define MPI2_TSS_SGLFLAGS_IEEE32_TYPE               (0x01)
500265236Sken#define MPI2_TSS_SGLFLAGS_IEEE64_TYPE               (0x02)
501265236Sken
502265236Sken
503265236Sken
504265236Sken/*
505265236Sken * NOTE: The SSP status IU is big-endian. When used on a little-endian system,
506265236Sken * this structure properly orders the bytes.
507265236Sken */
508265236Skentypedef struct _MPI2_TARGET_SSP_RSP_IU
509265236Sken{
510265236Sken    U32     Reserved0[6]; /* reserved for SSP header */ /* 0x00 */
511265236Sken
512265236Sken    /* start of RESPONSE information unit */
513265236Sken    U32     Reserved1;                                  /* 0x18 */
514265236Sken    U32     Reserved2;                                  /* 0x1C */
515265236Sken    U16     Reserved3;                                  /* 0x20 */
516265236Sken    U8      DataPres; /* lower 2 bits */                /* 0x22 */
517265236Sken    U8      Status;                                     /* 0x23 */
518265236Sken    U32     Reserved4;                                  /* 0x24 */
519265236Sken    U32     SenseDataLength;                            /* 0x28 */
520265236Sken    U32     ResponseDataLength;                         /* 0x2C */
521265236Sken
522265236Sken    /* start of Response or Sense Data (size may vary dynamically) */
523265236Sken    U8      ResponseSenseData[4];                       /* 0x30 */
524265236Sken} MPI2_TARGET_SSP_RSP_IU, MPI2_POINTER PTR_MPI2_TARGET_SSP_RSP_IU,
525265236Sken  Mpi2TargetSspRspIu_t, MPI2_POINTER pMpi2TargetSspRspIu_t;
526265236Sken
527265236Sken
528265236Sken/****************************************************************************
529265236Sken*  Target Standard Reply - used with Target Assist or Target Status Send
530265236Sken****************************************************************************/
531265236Sken
532265236Skentypedef struct _MPI2_TARGET_STANDARD_REPLY
533265236Sken{
534265236Sken    U16                     Reserved;                   /* 0x00 */
535265236Sken    U8                      MsgLength;                  /* 0x02 */
536265236Sken    U8                      Function;                   /* 0x03 */
537265236Sken    U16                     Reserved1;                  /* 0x04 */
538265236Sken    U8                      Reserved2;                  /* 0x06 */
539265236Sken    U8                      MsgFlags;                   /* 0x07 */
540265236Sken    U8                      VP_ID;                      /* 0x08 */
541265236Sken    U8                      VF_ID;                      /* 0x09 */
542265236Sken    U16                     Reserved3;                  /* 0x0A */
543265236Sken    U16                     Reserved4;                  /* 0x0C */
544265236Sken    U16                     IOCStatus;                  /* 0x0E */
545265236Sken    U32                     IOCLogInfo;                 /* 0x10 */
546265236Sken    U16                     IoIndex;                    /* 0x14 */
547265236Sken    U16                     Reserved5;                  /* 0x16 */
548265236Sken    U32                     TransferCount;              /* 0x18 */
549265236Sken    U32                     BidirectionalTransferCount; /* 0x1C */
550265236Sken} MPI2_TARGET_STANDARD_REPLY, MPI2_POINTER PTR_MPI2_TARGET_STANDARD_REPLY,
551265236Sken  Mpi2TargetErrorReply_t, MPI2_POINTER pMpi2TargetErrorReply_t;
552265236Sken
553265236Sken
554265236Sken/****************************************************************************
555265236Sken*  Target Mode Abort Request
556265236Sken****************************************************************************/
557265236Sken
558265236Skentypedef struct _MPI2_TARGET_MODE_ABORT_REQUEST
559265236Sken{
560265236Sken    U8                      AbortType;                  /* 0x00 */
561265236Sken    U8                      Reserved1;                  /* 0x01 */
562265236Sken    U8                      ChainOffset;                /* 0x02 */
563265236Sken    U8                      Function;                   /* 0x03 */
564265236Sken    U16                     Reserved2;                  /* 0x04 */
565265236Sken    U8                      Reserved3;                  /* 0x06 */
566265236Sken    U8                      MsgFlags;                   /* 0x07 */
567265236Sken    U8                      VP_ID;                      /* 0x08 */
568265236Sken    U8                      VF_ID;                      /* 0x09 */
569265236Sken    U16                     Reserved4;                  /* 0x0A */
570265236Sken    U16                     IoIndexToAbort;             /* 0x0C */
571265236Sken    U16                     InitiatorDevHandle;         /* 0x0E */
572265236Sken    U32                     MidToAbort;                 /* 0x10 */
573265236Sken} MPI2_TARGET_MODE_ABORT, MPI2_POINTER PTR_MPI2_TARGET_MODE_ABORT,
574265236Sken  Mpi2TargetModeAbort_t, MPI2_POINTER pMpi2TargetModeAbort_t;
575265236Sken
576265236Sken/* Target Mode Abort AbortType values */
577265236Sken
578265236Sken#define MPI2_TARGET_MODE_ABORT_ALL_CMD_BUFFERS      (0x00)
579265236Sken#define MPI2_TARGET_MODE_ABORT_ALL_IO               (0x01)
580265236Sken#define MPI2_TARGET_MODE_ABORT_EXACT_IO             (0x02)
581265236Sken#define MPI2_TARGET_MODE_ABORT_EXACT_IO_REQUEST     (0x03)
582265236Sken#define MPI2_TARGET_MODE_ABORT_IO_REQUEST_AND_IO    (0x04)
583265236Sken#define MPI2_TARGET_MODE_ABORT_DEVHANDLE            (0x05)
584265236Sken#define MPI2_TARGET_MODE_ABORT_ALL_COMMANDS         (0x06)
585265236Sken
586265236Sken
587265236Sken/****************************************************************************
588265236Sken*  Target Mode Abort Reply
589265236Sken****************************************************************************/
590265236Sken
591265236Skentypedef struct _MPI2_TARGET_MODE_ABORT_REPLY
592265236Sken{
593265236Sken    U16                     Reserved;                   /* 0x00 */
594265236Sken    U8                      MsgLength;                  /* 0x02 */
595265236Sken    U8                      Function;                   /* 0x03 */
596265236Sken    U16                     Reserved1;                  /* 0x04 */
597265236Sken    U8                      Reserved2;                  /* 0x06 */
598265236Sken    U8                      MsgFlags;                   /* 0x07 */
599265236Sken    U8                      VP_ID;                      /* 0x08 */
600265236Sken    U8                      VF_ID;                      /* 0x09 */
601265236Sken    U16                     Reserved3;                  /* 0x0A */
602265236Sken    U16                     Reserved4;                  /* 0x0C */
603265236Sken    U16                     IOCStatus;                  /* 0x0E */
604265236Sken    U32                     IOCLogInfo;                 /* 0x10 */
605265236Sken    U32                     AbortCount;                 /* 0x14 */
606265236Sken} MPI2_TARGET_MODE_ABORT_REPLY, MPI2_POINTER PTR_MPI2_TARGET_MODE_ABORT_REPLY,
607265236Sken  Mpi2TargetModeAbortReply_t, MPI2_POINTER pMpi2TargetModeAbortReply_t;
608265236Sken
609265236Sken
610265236Sken#endif
611265236Sken
612