1d043c564SKenneth D. Merry /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3718cf2ccSPedro F. Giffuni * 4ef065d89SStephen McConnell * Copyright (c) 2006-2015 LSI Corp. 5ef065d89SStephen McConnell * Copyright (c) 2013-2015 Avago Technologies 6d043c564SKenneth D. Merry * All rights reserved. 7d043c564SKenneth D. Merry * 8d043c564SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 9d043c564SKenneth D. Merry * modification, are permitted provided that the following conditions 10d043c564SKenneth D. Merry * are met: 11d043c564SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright 12d043c564SKenneth D. Merry * notice, this list of conditions and the following disclaimer. 13d043c564SKenneth D. Merry * 2. Redistributions in binary form must reproduce the above copyright 14d043c564SKenneth D. Merry * notice, this list of conditions and the following disclaimer in the 15d043c564SKenneth D. Merry * documentation and/or other materials provided with the distribution. 16d043c564SKenneth D. Merry * 17d043c564SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18d043c564SKenneth D. Merry * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19d043c564SKenneth D. Merry * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20d043c564SKenneth D. Merry * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21d043c564SKenneth D. Merry * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22d043c564SKenneth D. Merry * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23d043c564SKenneth D. Merry * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24d043c564SKenneth D. Merry * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25d043c564SKenneth D. Merry * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26d043c564SKenneth D. Merry * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27d043c564SKenneth D. Merry * SUCH DAMAGE. 28d043c564SKenneth D. Merry * 29ef065d89SStephen McConnell * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD 30d043c564SKenneth D. Merry */ 31d043c564SKenneth D. Merry 32d3c7b9a0SKenneth D. Merry /* 33ef065d89SStephen McConnell * Copyright (c) 2006-2015 LSI Corporation. 34ef065d89SStephen McConnell * Copyright (c) 2013-2015 Avago Technologies 35d3c7b9a0SKenneth D. Merry * 36d3c7b9a0SKenneth D. Merry * 37d3c7b9a0SKenneth D. Merry * Name: mpi2_targ.h 38d3c7b9a0SKenneth D. Merry * Title: MPI Target mode messages and structures 39d3c7b9a0SKenneth D. Merry * Creation Date: September 8, 2006 40d3c7b9a0SKenneth D. Merry * 41d043c564SKenneth D. Merry * mpi2_targ.h Version: 02.00.04 42d3c7b9a0SKenneth D. Merry * 43d3c7b9a0SKenneth D. Merry * Version History 44d3c7b9a0SKenneth D. Merry * --------------- 45d3c7b9a0SKenneth D. Merry * 46d3c7b9a0SKenneth D. Merry * Date Version Description 47d3c7b9a0SKenneth D. Merry * -------- -------- ------------------------------------------------------ 48d3c7b9a0SKenneth D. Merry * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 49d3c7b9a0SKenneth D. Merry * 08-31-07 02.00.01 Added Command Buffer Data Location Address Space bits to 50d3c7b9a0SKenneth D. Merry * BufferPostFlags field of CommandBufferPostBase Request. 51d3c7b9a0SKenneth D. Merry * 02-29-08 02.00.02 Modified various names to make them 32-character unique. 52d3c7b9a0SKenneth D. Merry * 10-02-08 02.00.03 Removed NextCmdBufferOffset from 53d3c7b9a0SKenneth D. Merry * MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST. 54d3c7b9a0SKenneth D. Merry * Target Status Send Request only takes a single SGE for 55d3c7b9a0SKenneth D. Merry * response data. 56d043c564SKenneth D. Merry * 02-10-10 02.00.04 Added comment to MPI2_TARGET_SSP_RSP_IU structure. 57d3c7b9a0SKenneth D. Merry * -------------------------------------------------------------------------- 58d3c7b9a0SKenneth D. Merry */ 59d3c7b9a0SKenneth D. Merry 60d3c7b9a0SKenneth D. Merry #ifndef MPI2_TARG_H 61d3c7b9a0SKenneth D. Merry #define MPI2_TARG_H 62d3c7b9a0SKenneth D. Merry 63d3c7b9a0SKenneth D. Merry /****************************************************************************** 64d3c7b9a0SKenneth D. Merry * 65d3c7b9a0SKenneth D. Merry * SCSI Target Messages 66d3c7b9a0SKenneth D. Merry * 67d3c7b9a0SKenneth D. Merry *******************************************************************************/ 68d3c7b9a0SKenneth D. Merry 69d3c7b9a0SKenneth D. Merry /**************************************************************************** 70d3c7b9a0SKenneth D. Merry * Target Command Buffer Post Base Request 71d3c7b9a0SKenneth D. Merry ****************************************************************************/ 72d3c7b9a0SKenneth D. Merry 73d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST 74d3c7b9a0SKenneth D. Merry { 75d3c7b9a0SKenneth D. Merry U8 BufferPostFlags; /* 0x00 */ 76d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x01 */ 77d3c7b9a0SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 78d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 79d3c7b9a0SKenneth D. Merry U16 TotalCmdBuffers; /* 0x04 */ 80d3c7b9a0SKenneth D. Merry U8 Reserved; /* 0x06 */ 81d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 82d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 83d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 84d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x0A */ 85d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x0C */ 86d3c7b9a0SKenneth D. Merry U16 CmdBufferLength; /* 0x10 */ 87d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x12 */ 88d3c7b9a0SKenneth D. Merry U32 BaseAddressLow; /* 0x14 */ 89d3c7b9a0SKenneth D. Merry U32 BaseAddressHigh; /* 0x18 */ 90d3c7b9a0SKenneth D. Merry } MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST, 91d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_TARGET_CMD_BUF_POST_BASE_REQUEST, 92d3c7b9a0SKenneth D. Merry Mpi2TargetCmdBufferPostBaseRequest_t, 93d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2TargetCmdBufferPostBaseRequest_t; 94d3c7b9a0SKenneth D. Merry 95d3c7b9a0SKenneth D. Merry /* values for the BufferPostflags field */ 96d3c7b9a0SKenneth D. Merry #define MPI2_CMD_BUF_POST_BASE_ADDRESS_SPACE_MASK (0x0C) 97d3c7b9a0SKenneth D. Merry #define MPI2_CMD_BUF_POST_BASE_SYSTEM_ADDRESS_SPACE (0x00) 98d3c7b9a0SKenneth D. Merry #define MPI2_CMD_BUF_POST_BASE_IOCDDR_ADDRESS_SPACE (0x04) 99d3c7b9a0SKenneth D. Merry #define MPI2_CMD_BUF_POST_BASE_IOCPLB_ADDRESS_SPACE (0x08) 100d3c7b9a0SKenneth D. Merry #define MPI2_CMD_BUF_POST_BASE_IOCPLBNTA_ADDRESS_SPACE (0x0C) 101d3c7b9a0SKenneth D. Merry 102d3c7b9a0SKenneth D. Merry #define MPI2_CMD_BUF_POST_BASE_FLAGS_AUTO_POST_ALL (0x01) 103d3c7b9a0SKenneth D. Merry 104d3c7b9a0SKenneth D. Merry /**************************************************************************** 105d3c7b9a0SKenneth D. Merry * Target Command Buffer Post List Request 106d3c7b9a0SKenneth D. Merry ****************************************************************************/ 107d3c7b9a0SKenneth D. Merry 108d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_CMD_BUF_POST_LIST_REQUEST 109d3c7b9a0SKenneth D. Merry { 110d3c7b9a0SKenneth D. Merry U16 Reserved; /* 0x00 */ 111d3c7b9a0SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 112d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 113d3c7b9a0SKenneth D. Merry U16 CmdBufferCount; /* 0x04 */ 114d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x06 */ 115d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 116d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 117d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 118d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x0A */ 119d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x0C */ 120d3c7b9a0SKenneth D. Merry U16 IoIndex[2]; /* 0x10 */ 121d3c7b9a0SKenneth D. Merry } MPI2_TARGET_CMD_BUF_POST_LIST_REQUEST, 122d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_TARGET_CMD_BUF_POST_LIST_REQUEST, 123d3c7b9a0SKenneth D. Merry Mpi2TargetCmdBufferPostListRequest_t, 124d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2TargetCmdBufferPostListRequest_t; 125d3c7b9a0SKenneth D. Merry 126d3c7b9a0SKenneth D. Merry /**************************************************************************** 127d3c7b9a0SKenneth D. Merry * Target Command Buffer Post Base List Reply 128d3c7b9a0SKenneth D. Merry ****************************************************************************/ 129d3c7b9a0SKenneth D. Merry 130d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_BUF_POST_BASE_LIST_REPLY 131d3c7b9a0SKenneth D. Merry { 132d3c7b9a0SKenneth D. Merry U8 Flags; /* 0x00 */ 133d3c7b9a0SKenneth D. Merry U8 Reserved; /* 0x01 */ 134d3c7b9a0SKenneth D. Merry U8 MsgLength; /* 0x02 */ 135d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 136d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x04 */ 137d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x06 */ 138d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 139d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 140d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 141d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0A */ 142d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x0C */ 143d3c7b9a0SKenneth D. Merry U16 IOCStatus; /* 0x0E */ 144d3c7b9a0SKenneth D. Merry U32 IOCLogInfo; /* 0x10 */ 145d3c7b9a0SKenneth D. Merry U16 IoIndex; /* 0x14 */ 146d3c7b9a0SKenneth D. Merry U16 Reserved5; /* 0x16 */ 147d3c7b9a0SKenneth D. Merry U32 Reserved6; /* 0x18 */ 148d3c7b9a0SKenneth D. Merry } MPI2_TARGET_BUF_POST_BASE_LIST_REPLY, 149d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_TARGET_BUF_POST_BASE_LIST_REPLY, 150d3c7b9a0SKenneth D. Merry Mpi2TargetCmdBufferPostBaseListReply_t, 151d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2TargetCmdBufferPostBaseListReply_t; 152d3c7b9a0SKenneth D. Merry 153d3c7b9a0SKenneth D. Merry /* Flags defines */ 154d3c7b9a0SKenneth D. Merry #define MPI2_CMD_BUF_POST_REPLY_IOINDEX_VALID (0x01) 155d3c7b9a0SKenneth D. Merry 156d3c7b9a0SKenneth D. Merry /**************************************************************************** 157d3c7b9a0SKenneth D. Merry * Command Buffer Formats (with 16 byte CDB) 158d3c7b9a0SKenneth D. Merry ****************************************************************************/ 159d3c7b9a0SKenneth D. Merry 160d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_SSP_CMD_BUFFER 161d3c7b9a0SKenneth D. Merry { 162d3c7b9a0SKenneth D. Merry U8 FrameType; /* 0x00 */ 163d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x01 */ 164d3c7b9a0SKenneth D. Merry U16 InitiatorConnectionTag; /* 0x02 */ 165d3c7b9a0SKenneth D. Merry U32 HashedSourceSASAddress; /* 0x04 */ 166d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x08 */ 167d3c7b9a0SKenneth D. Merry U16 Flags; /* 0x0A */ 168d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x0C */ 169d3c7b9a0SKenneth D. Merry U16 Tag; /* 0x10 */ 170d3c7b9a0SKenneth D. Merry U16 TargetPortTransferTag; /* 0x12 */ 171d3c7b9a0SKenneth D. Merry U32 DataOffset; /* 0x14 */ 172d3c7b9a0SKenneth D. Merry /* COMMAND information unit starts here */ 173d3c7b9a0SKenneth D. Merry U8 LogicalUnitNumber[8]; /* 0x18 */ 174d3c7b9a0SKenneth D. Merry U8 Reserved4; /* 0x20 */ 175d3c7b9a0SKenneth D. Merry U8 TaskAttribute; /* lower 3 bits */ /* 0x21 */ 176d3c7b9a0SKenneth D. Merry U8 Reserved5; /* 0x22 */ 177d3c7b9a0SKenneth D. Merry U8 AdditionalCDBLength; /* upper 5 bits */ /* 0x23 */ 178d3c7b9a0SKenneth D. Merry U8 CDB[16]; /* 0x24 */ 179d3c7b9a0SKenneth D. Merry /* Additional CDB bytes extend past the CDB field */ 180d3c7b9a0SKenneth D. Merry } MPI2_TARGET_SSP_CMD_BUFFER, MPI2_POINTER PTR_MPI2_TARGET_SSP_CMD_BUFFER, 181d3c7b9a0SKenneth D. Merry Mpi2TargetSspCmdBuffer, MPI2_POINTER pMp2iTargetSspCmdBuffer; 182d3c7b9a0SKenneth D. Merry 183d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_SSP_TASK_BUFFER 184d3c7b9a0SKenneth D. Merry { 185d3c7b9a0SKenneth D. Merry U8 FrameType; /* 0x00 */ 186d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x01 */ 187d3c7b9a0SKenneth D. Merry U16 InitiatorConnectionTag; /* 0x02 */ 188d3c7b9a0SKenneth D. Merry U32 HashedSourceSASAddress; /* 0x04 */ 189d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x08 */ 190d3c7b9a0SKenneth D. Merry U16 Flags; /* 0x0A */ 191d3c7b9a0SKenneth D. Merry U32 Reserved3; /* 0x0C */ 192d3c7b9a0SKenneth D. Merry U16 Tag; /* 0x10 */ 193d3c7b9a0SKenneth D. Merry U16 TargetPortTransferTag; /* 0x12 */ 194d3c7b9a0SKenneth D. Merry U32 DataOffset; /* 0x14 */ 195d3c7b9a0SKenneth D. Merry /* TASK information unit starts here */ 196d3c7b9a0SKenneth D. Merry U8 LogicalUnitNumber[8]; /* 0x18 */ 197d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x20 */ 198d3c7b9a0SKenneth D. Merry U8 TaskManagementFunction; /* 0x22 */ 199d3c7b9a0SKenneth D. Merry U8 Reserved5; /* 0x23 */ 200d3c7b9a0SKenneth D. Merry U16 ManagedTaskTag; /* 0x24 */ 201d3c7b9a0SKenneth D. Merry U16 Reserved6; /* 0x26 */ 202d3c7b9a0SKenneth D. Merry U32 Reserved7; /* 0x28 */ 203d3c7b9a0SKenneth D. Merry U32 Reserved8; /* 0x2C */ 204d3c7b9a0SKenneth D. Merry U32 Reserved9; /* 0x30 */ 205d3c7b9a0SKenneth D. Merry } MPI2_TARGET_SSP_TASK_BUFFER, MPI2_POINTER PTR_MPI2_TARGET_SSP_TASK_BUFFER, 206d3c7b9a0SKenneth D. Merry Mpi2TargetSspTaskBuffer, MPI2_POINTER pMpi2TargetSspTaskBuffer; 207d3c7b9a0SKenneth D. Merry 208d3c7b9a0SKenneth D. Merry /* mask and shift for HashedSourceSASAddress field */ 209d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_HASHED_SAS_ADDRESS_MASK (0xFFFFFF00) 210d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_HASHED_SAS_ADDRESS_SHIFT (8) 211d3c7b9a0SKenneth D. Merry 212d3c7b9a0SKenneth D. Merry /**************************************************************************** 213d3c7b9a0SKenneth D. Merry * Target Assist Request 214d3c7b9a0SKenneth D. Merry ****************************************************************************/ 215d3c7b9a0SKenneth D. Merry 216d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_ASSIST_REQUEST 217d3c7b9a0SKenneth D. Merry { 218d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x00 */ 219d3c7b9a0SKenneth D. Merry U8 TargetAssistFlags; /* 0x01 */ 220d3c7b9a0SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 221d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 222d3c7b9a0SKenneth D. Merry U16 QueueTag; /* 0x04 */ 223d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x06 */ 224d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 225d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 226d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 227d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0A */ 228d3c7b9a0SKenneth D. Merry U16 IoIndex; /* 0x0C */ 229d3c7b9a0SKenneth D. Merry U16 InitiatorConnectionTag; /* 0x0E */ 230d3c7b9a0SKenneth D. Merry U16 SGLFlags; /* 0x10 */ 231d3c7b9a0SKenneth D. Merry U8 SequenceNumber; /* 0x12 */ 232d3c7b9a0SKenneth D. Merry U8 Reserved4; /* 0x13 */ 233d3c7b9a0SKenneth D. Merry U8 SGLOffset0; /* 0x14 */ 234d3c7b9a0SKenneth D. Merry U8 SGLOffset1; /* 0x15 */ 235d3c7b9a0SKenneth D. Merry U8 SGLOffset2; /* 0x16 */ 236d3c7b9a0SKenneth D. Merry U8 SGLOffset3; /* 0x17 */ 237d3c7b9a0SKenneth D. Merry U32 SkipCount; /* 0x18 */ 238d3c7b9a0SKenneth D. Merry U32 DataLength; /* 0x1C */ 239d3c7b9a0SKenneth D. Merry U32 BidirectionalDataLength; /* 0x20 */ 240d3c7b9a0SKenneth D. Merry U16 IoFlags; /* 0x24 */ 241d3c7b9a0SKenneth D. Merry U16 EEDPFlags; /* 0x26 */ 242d3c7b9a0SKenneth D. Merry U32 EEDPBlockSize; /* 0x28 */ 243d3c7b9a0SKenneth D. Merry U32 SecondaryReferenceTag; /* 0x2C */ 244d3c7b9a0SKenneth D. Merry U16 SecondaryApplicationTag; /* 0x30 */ 245d3c7b9a0SKenneth D. Merry U16 ApplicationTagTranslationMask; /* 0x32 */ 246d3c7b9a0SKenneth D. Merry U32 PrimaryReferenceTag; /* 0x34 */ 247d3c7b9a0SKenneth D. Merry U16 PrimaryApplicationTag; /* 0x38 */ 248d3c7b9a0SKenneth D. Merry U16 PrimaryApplicationTagMask; /* 0x3A */ 249d3c7b9a0SKenneth D. Merry U32 RelativeOffset; /* 0x3C */ 250d3c7b9a0SKenneth D. Merry U32 Reserved5; /* 0x40 */ 251d3c7b9a0SKenneth D. Merry U32 Reserved6; /* 0x44 */ 252d3c7b9a0SKenneth D. Merry U32 Reserved7; /* 0x48 */ 253d3c7b9a0SKenneth D. Merry U32 Reserved8; /* 0x4C */ 254d3c7b9a0SKenneth D. Merry MPI2_SGE_IO_UNION SGL[1]; /* 0x50 */ 255d3c7b9a0SKenneth D. Merry } MPI2_TARGET_ASSIST_REQUEST, MPI2_POINTER PTR_MPI2_TARGET_ASSIST_REQUEST, 256d3c7b9a0SKenneth D. Merry Mpi2TargetAssistRequest_t, MPI2_POINTER pMpi2TargetAssistRequest_t; 257d3c7b9a0SKenneth D. Merry 258d3c7b9a0SKenneth D. Merry /* Target Assist TargetAssistFlags bits */ 259d3c7b9a0SKenneth D. Merry 260d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_FLAGS_REPOST_CMD_BUFFER (0x80) 261d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_FLAGS_TLR (0x10) 262d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_FLAGS_RETRANSMIT (0x04) 263d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_FLAGS_AUTO_STATUS (0x02) 264d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_FLAGS_DATA_DIRECTION (0x01) 265d3c7b9a0SKenneth D. Merry 266d3c7b9a0SKenneth D. Merry /* Target Assist SGLFlags bits */ 267d3c7b9a0SKenneth D. Merry 268d3c7b9a0SKenneth D. Merry /* base values for Data Location Address Space */ 269d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_ADDR_MASK (0x0C) 270d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_SYSTEM_ADDR (0x00) 271d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_IOCDDR_ADDR (0x04) 272d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_IOCPLB_ADDR (0x08) 273d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_PLBNTA_ADDR (0x0C) 274d3c7b9a0SKenneth D. Merry 275d3c7b9a0SKenneth D. Merry /* base values for Type */ 276d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_TYPE_MASK (0x03) 277d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_MPI_TYPE (0x00) 278d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_32IEEE_TYPE (0x01) 279d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_64IEEE_TYPE (0x02) 280d3c7b9a0SKenneth D. Merry 281d3c7b9a0SKenneth D. Merry /* shift values for each sub-field */ 282d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_SGL3_SHIFT (12) 283d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_SGL2_SHIFT (8) 284d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_SGL1_SHIFT (4) 285d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_SGLFLAGS_SGL0_SHIFT (0) 286d3c7b9a0SKenneth D. Merry 287d3c7b9a0SKenneth D. Merry /* Target Assist IoFlags bits */ 288d3c7b9a0SKenneth D. Merry 289d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_IOFLAGS_BIDIRECTIONAL (0x0800) 290d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_IOFLAGS_MULTICAST (0x0400) 291d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_ASSIST_IOFLAGS_RECEIVE_FIRST (0x0200) 292d3c7b9a0SKenneth D. Merry 293d3c7b9a0SKenneth D. Merry /* Target Assist EEDPFlags bits */ 294d3c7b9a0SKenneth D. Merry 295d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_INC_PRI_REFTAG (0x8000) 296d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_INC_SEC_REFTAG (0x4000) 297d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_INC_PRI_APPTAG (0x2000) 298d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_INC_SEC_APPTAG (0x1000) 299d3c7b9a0SKenneth D. Merry 300d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_CHECK_REFTAG (0x0400) 301d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_CHECK_APPTAG (0x0200) 302d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_CHECK_GUARD (0x0100) 303d3c7b9a0SKenneth D. Merry 304d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_PASSTHRU_REFTAG (0x0008) 305d3c7b9a0SKenneth D. Merry 306d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_MASK_OP (0x0007) 307d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_NOOP_OP (0x0000) 308d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_CHECK_OP (0x0001) 309d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_STRIP_OP (0x0002) 310d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_CHECK_REMOVE_OP (0x0003) 311d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_INSERT_OP (0x0004) 312d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_REPLACE_OP (0x0006) 313d3c7b9a0SKenneth D. Merry #define MPI2_TA_EEDPFLAGS_CHECK_REGEN_OP (0x0007) 314d3c7b9a0SKenneth D. Merry 315d3c7b9a0SKenneth D. Merry /**************************************************************************** 316d3c7b9a0SKenneth D. Merry * Target Status Send Request 317d3c7b9a0SKenneth D. Merry ****************************************************************************/ 318d3c7b9a0SKenneth D. Merry 319d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_STATUS_SEND_REQUEST 320d3c7b9a0SKenneth D. Merry { 321d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x00 */ 322d3c7b9a0SKenneth D. Merry U8 StatusFlags; /* 0x01 */ 323d3c7b9a0SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 324d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 325d3c7b9a0SKenneth D. Merry U16 QueueTag; /* 0x04 */ 326d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x06 */ 327d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 328d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 329d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 330d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0A */ 331d3c7b9a0SKenneth D. Merry U16 IoIndex; /* 0x0C */ 332d3c7b9a0SKenneth D. Merry U16 InitiatorConnectionTag; /* 0x0E */ 333d3c7b9a0SKenneth D. Merry U16 SGLFlags; /* 0x10 */ 334d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x12 */ 335d3c7b9a0SKenneth D. Merry U8 SGLOffset0; /* 0x14 */ 336d3c7b9a0SKenneth D. Merry U8 Reserved5; /* 0x15 */ 337d3c7b9a0SKenneth D. Merry U16 Reserved6; /* 0x16 */ 338d3c7b9a0SKenneth D. Merry U32 Reserved7; /* 0x18 */ 339d3c7b9a0SKenneth D. Merry U32 Reserved8; /* 0x1C */ 340d3c7b9a0SKenneth D. Merry MPI2_SIMPLE_SGE_UNION StatusDataSGE; /* 0x20 */ 341d3c7b9a0SKenneth D. Merry } MPI2_TARGET_STATUS_SEND_REQUEST, 342d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_TARGET_STATUS_SEND_REQUEST, 343d3c7b9a0SKenneth D. Merry Mpi2TargetStatusSendRequest_t, MPI2_POINTER pMpi2TargetStatusSendRequest_t; 344d3c7b9a0SKenneth D. Merry 345d3c7b9a0SKenneth D. Merry /* Target Status Send StatusFlags bits */ 346d3c7b9a0SKenneth D. Merry 347d3c7b9a0SKenneth D. Merry #define MPI2_TSS_FLAGS_REPOST_CMD_BUFFER (0x80) 348d3c7b9a0SKenneth D. Merry #define MPI2_TSS_FLAGS_RETRANSMIT (0x04) 349d3c7b9a0SKenneth D. Merry #define MPI2_TSS_FLAGS_AUTO_GOOD_STATUS (0x01) 350d3c7b9a0SKenneth D. Merry 351d3c7b9a0SKenneth D. Merry /* Target Status Send SGLFlags bits */ 352d3c7b9a0SKenneth D. Merry /* Data Location Address Space */ 353d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_ADDR_MASK (0x0C) 354d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_SYSTEM_ADDR (0x00) 355d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_IOCDDR_ADDR (0x04) 356d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_IOCPLB_ADDR (0x08) 357d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_IOCPLBNTA_ADDR (0x0C) 358d3c7b9a0SKenneth D. Merry /* Type */ 359d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_TYPE_MASK (0x03) 360d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_MPI_TYPE (0x00) 361d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_IEEE32_TYPE (0x01) 362d3c7b9a0SKenneth D. Merry #define MPI2_TSS_SGLFLAGS_IEEE64_TYPE (0x02) 363d3c7b9a0SKenneth D. Merry 364d3c7b9a0SKenneth D. Merry /* 365d3c7b9a0SKenneth D. Merry * NOTE: The SSP status IU is big-endian. When used on a little-endian system, 366d3c7b9a0SKenneth D. Merry * this structure properly orders the bytes. 367d3c7b9a0SKenneth D. Merry */ 368d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_SSP_RSP_IU 369d3c7b9a0SKenneth D. Merry { 370d3c7b9a0SKenneth D. Merry U32 Reserved0[6]; /* reserved for SSP header */ /* 0x00 */ 371d043c564SKenneth D. Merry 372d3c7b9a0SKenneth D. Merry /* start of RESPONSE information unit */ 373d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x18 */ 374d3c7b9a0SKenneth D. Merry U32 Reserved2; /* 0x1C */ 375d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x20 */ 376d3c7b9a0SKenneth D. Merry U8 DataPres; /* lower 2 bits */ /* 0x22 */ 377d3c7b9a0SKenneth D. Merry U8 Status; /* 0x23 */ 378d3c7b9a0SKenneth D. Merry U32 Reserved4; /* 0x24 */ 379d3c7b9a0SKenneth D. Merry U32 SenseDataLength; /* 0x28 */ 380d3c7b9a0SKenneth D. Merry U32 ResponseDataLength; /* 0x2C */ 381d043c564SKenneth D. Merry 382d043c564SKenneth D. Merry /* start of Response or Sense Data (size may vary dynamically) */ 383d3c7b9a0SKenneth D. Merry U8 ResponseSenseData[4]; /* 0x30 */ 384d3c7b9a0SKenneth D. Merry } MPI2_TARGET_SSP_RSP_IU, MPI2_POINTER PTR_MPI2_TARGET_SSP_RSP_IU, 385d3c7b9a0SKenneth D. Merry Mpi2TargetSspRspIu_t, MPI2_POINTER pMpi2TargetSspRspIu_t; 386d3c7b9a0SKenneth D. Merry 387d3c7b9a0SKenneth D. Merry /**************************************************************************** 388d3c7b9a0SKenneth D. Merry * Target Standard Reply - used with Target Assist or Target Status Send 389d3c7b9a0SKenneth D. Merry ****************************************************************************/ 390d3c7b9a0SKenneth D. Merry 391d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_STANDARD_REPLY 392d3c7b9a0SKenneth D. Merry { 393d3c7b9a0SKenneth D. Merry U16 Reserved; /* 0x00 */ 394d3c7b9a0SKenneth D. Merry U8 MsgLength; /* 0x02 */ 395d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 396d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x04 */ 397d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x06 */ 398d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 399d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 400d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 401d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0A */ 402d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x0C */ 403d3c7b9a0SKenneth D. Merry U16 IOCStatus; /* 0x0E */ 404d3c7b9a0SKenneth D. Merry U32 IOCLogInfo; /* 0x10 */ 405d3c7b9a0SKenneth D. Merry U16 IoIndex; /* 0x14 */ 406d3c7b9a0SKenneth D. Merry U16 Reserved5; /* 0x16 */ 407d3c7b9a0SKenneth D. Merry U32 TransferCount; /* 0x18 */ 408d3c7b9a0SKenneth D. Merry U32 BidirectionalTransferCount; /* 0x1C */ 409d3c7b9a0SKenneth D. Merry } MPI2_TARGET_STANDARD_REPLY, MPI2_POINTER PTR_MPI2_TARGET_STANDARD_REPLY, 410d3c7b9a0SKenneth D. Merry Mpi2TargetErrorReply_t, MPI2_POINTER pMpi2TargetErrorReply_t; 411d3c7b9a0SKenneth D. Merry 412d3c7b9a0SKenneth D. Merry /**************************************************************************** 413d3c7b9a0SKenneth D. Merry * Target Mode Abort Request 414d3c7b9a0SKenneth D. Merry ****************************************************************************/ 415d3c7b9a0SKenneth D. Merry 416d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_MODE_ABORT_REQUEST 417d3c7b9a0SKenneth D. Merry { 418d3c7b9a0SKenneth D. Merry U8 AbortType; /* 0x00 */ 419d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x01 */ 420d3c7b9a0SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 421d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 422d3c7b9a0SKenneth D. Merry U16 Reserved2; /* 0x04 */ 423d3c7b9a0SKenneth D. Merry U8 Reserved3; /* 0x06 */ 424d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 425d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 426d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 427d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x0A */ 428d3c7b9a0SKenneth D. Merry U16 IoIndexToAbort; /* 0x0C */ 429d3c7b9a0SKenneth D. Merry U16 Reserved6; /* 0x0E */ 430d3c7b9a0SKenneth D. Merry U32 MidToAbort; /* 0x10 */ 431d3c7b9a0SKenneth D. Merry } MPI2_TARGET_MODE_ABORT, MPI2_POINTER PTR_MPI2_TARGET_MODE_ABORT, 432d3c7b9a0SKenneth D. Merry Mpi2TargetModeAbort_t, MPI2_POINTER pMpi2TargetModeAbort_t; 433d3c7b9a0SKenneth D. Merry 434d3c7b9a0SKenneth D. Merry /* Target Mode Abort AbortType values */ 435d3c7b9a0SKenneth D. Merry 436d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_MODE_ABORT_ALL_CMD_BUFFERS (0x00) 437d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_MODE_ABORT_ALL_IO (0x01) 438d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_MODE_ABORT_EXACT_IO (0x02) 439d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_MODE_ABORT_EXACT_IO_REQUEST (0x03) 440d3c7b9a0SKenneth D. Merry #define MPI2_TARGET_MODE_ABORT_IO_REQUEST_AND_IO (0x04) 441d3c7b9a0SKenneth D. Merry 442d3c7b9a0SKenneth D. Merry /**************************************************************************** 443d3c7b9a0SKenneth D. Merry * Target Mode Abort Reply 444d3c7b9a0SKenneth D. Merry ****************************************************************************/ 445d3c7b9a0SKenneth D. Merry 446d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_MODE_ABORT_REPLY 447d3c7b9a0SKenneth D. Merry { 448d3c7b9a0SKenneth D. Merry U16 Reserved; /* 0x00 */ 449d3c7b9a0SKenneth D. Merry U8 MsgLength; /* 0x02 */ 450d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 451d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x04 */ 452d3c7b9a0SKenneth D. Merry U8 Reserved2; /* 0x06 */ 453d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 454d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 455d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 456d3c7b9a0SKenneth D. Merry U16 Reserved3; /* 0x0A */ 457d3c7b9a0SKenneth D. Merry U16 Reserved4; /* 0x0C */ 458d3c7b9a0SKenneth D. Merry U16 IOCStatus; /* 0x0E */ 459d3c7b9a0SKenneth D. Merry U32 IOCLogInfo; /* 0x10 */ 460d3c7b9a0SKenneth D. Merry U32 AbortCount; /* 0x14 */ 461d3c7b9a0SKenneth D. Merry } MPI2_TARGET_MODE_ABORT_REPLY, MPI2_POINTER PTR_MPI2_TARGET_MODE_ABORT_REPLY, 462d3c7b9a0SKenneth D. Merry Mpi2TargetModeAbortReply_t, MPI2_POINTER pMpi2TargetModeAbortReply_t; 463d3c7b9a0SKenneth D. Merry 464d3c7b9a0SKenneth D. Merry #endif 465