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