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