0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062 #ifndef MPI_TARG_H
0063 #define MPI_TARG_H
0064
0065
0066
0067
0068
0069
0070
0071
0072 typedef struct _CMD_BUFFER_DESCRIPTOR
0073 {
0074 U16 IoIndex;
0075 U16 Reserved;
0076 union
0077 {
0078 U32 PhysicalAddress32;
0079 U64 PhysicalAddress64;
0080 } u;
0081 } CMD_BUFFER_DESCRIPTOR, MPI_POINTER PTR_CMD_BUFFER_DESCRIPTOR,
0082 CmdBufferDescriptor_t, MPI_POINTER pCmdBufferDescriptor_t;
0083
0084
0085
0086
0087
0088
0089 typedef struct _MSG_TARGET_CMD_BUFFER_POST_REQUEST
0090 {
0091 U8 BufferPostFlags;
0092 U8 BufferCount;
0093 U8 ChainOffset;
0094 U8 Function;
0095 U8 BufferLength;
0096 U8 Reserved;
0097 U8 Reserved1;
0098 U8 MsgFlags;
0099 U32 MsgContext;
0100 CMD_BUFFER_DESCRIPTOR Buffer[1];
0101 } MSG_TARGET_CMD_BUFFER_POST_REQUEST, MPI_POINTER PTR_MSG_TARGET_CMD_BUFFER_POST_REQUEST,
0102 TargetCmdBufferPostRequest_t, MPI_POINTER pTargetCmdBufferPostRequest_t;
0103
0104 #define CMD_BUFFER_POST_FLAGS_PORT_MASK (0x01)
0105 #define CMD_BUFFER_POST_FLAGS_ADDR_MODE_MASK (0x80)
0106 #define CMD_BUFFER_POST_FLAGS_ADDR_MODE_32 (0)
0107 #define CMD_BUFFER_POST_FLAGS_ADDR_MODE_64 (1)
0108 #define CMD_BUFFER_POST_FLAGS_64_BIT_ADDR (0x80)
0109
0110 #define CMD_BUFFER_POST_IO_INDEX_MASK (0x00003FFF)
0111 #define CMD_BUFFER_POST_IO_INDEX_MASK_0100 (0x000003FF)
0112
0113
0114 typedef struct _MSG_TARGET_CMD_BUFFER_POST_REPLY
0115 {
0116 U8 BufferPostFlags;
0117 U8 BufferCount;
0118 U8 MsgLength;
0119 U8 Function;
0120 U8 BufferLength;
0121 U8 Reserved;
0122 U8 Reserved1;
0123 U8 MsgFlags;
0124 U32 MsgContext;
0125 U16 Reserved2;
0126 U16 IOCStatus;
0127 U32 IOCLogInfo;
0128 } MSG_TARGET_CMD_BUFFER_POST_REPLY, MPI_POINTER PTR_MSG_TARGET_CMD_BUFFER_POST_REPLY,
0129 TargetCmdBufferPostReply_t, MPI_POINTER pTargetCmdBufferPostReply_t;
0130
0131
0132 typedef struct _MSG_PRIORITY_CMD_RECEIVED_REPLY
0133 {
0134 U16 Reserved;
0135 U8 MsgLength;
0136 U8 Function;
0137 U16 Reserved1;
0138 U8 Reserved2;
0139 U8 MsgFlags;
0140 U32 MsgContext;
0141 U8 PriorityReason;
0142 U8 Reserved3;
0143 U16 IOCStatus;
0144 U32 IOCLogInfo;
0145 U32 ReplyWord;
0146 } MSG_PRIORITY_CMD_RECEIVED_REPLY, MPI_POINTER PTR_MSG_PRIORITY_CMD_RECEIVED_REPLY,
0147 PriorityCommandReceivedReply_t, MPI_POINTER pPriorityCommandReceivedReply_t;
0148
0149
0150 typedef struct _MSG_TARGET_CMD_BUFFER_POST_ERROR_REPLY
0151 {
0152 U16 Reserved;
0153 U8 MsgLength;
0154 U8 Function;
0155 U16 Reserved1;
0156 U8 Reserved2;
0157 U8 MsgFlags;
0158 U32 MsgContext;
0159 U8 PriorityReason;
0160 U8 Reserved3;
0161 U16 IOCStatus;
0162 U32 IOCLogInfo;
0163 U32 ReplyWord;
0164 } MSG_TARGET_CMD_BUFFER_POST_ERROR_REPLY,
0165 MPI_POINTER PTR_MSG_TARGET_CMD_BUFFER_POST_ERROR_REPLY,
0166 TargetCmdBufferPostErrorReply_t, MPI_POINTER pTargetCmdBufferPostErrorReply_t;
0167
0168 #define PRIORITY_REASON_NO_DISCONNECT (0x00)
0169 #define PRIORITY_REASON_SCSI_TASK_MANAGEMENT (0x01)
0170 #define PRIORITY_REASON_CMD_PARITY_ERR (0x02)
0171 #define PRIORITY_REASON_MSG_OUT_PARITY_ERR (0x03)
0172 #define PRIORITY_REASON_LQ_CRC_ERR (0x04)
0173 #define PRIORITY_REASON_CMD_CRC_ERR (0x05)
0174 #define PRIORITY_REASON_PROTOCOL_ERR (0x06)
0175 #define PRIORITY_REASON_DATA_OUT_PARITY_ERR (0x07)
0176 #define PRIORITY_REASON_DATA_OUT_CRC_ERR (0x08)
0177 #define PRIORITY_REASON_TARGET_BUSY (0x09)
0178 #define PRIORITY_REASON_UNKNOWN (0xFF)
0179
0180
0181
0182
0183
0184
0185 typedef struct _MSG_TARGET_CMD_BUF_POST_BASE_REQUEST
0186 {
0187 U8 BufferPostFlags;
0188 U8 PortNumber;
0189 U8 ChainOffset;
0190 U8 Function;
0191 U16 TotalCmdBuffers;
0192 U8 Reserved;
0193 U8 MsgFlags;
0194 U32 MsgContext;
0195 U32 Reserved1;
0196 U16 CmdBufferLength;
0197 U16 NextCmdBufferOffset;
0198 U32 BaseAddressLow;
0199 U32 BaseAddressHigh;
0200 } MSG_TARGET_CMD_BUF_POST_BASE_REQUEST,
0201 MPI_POINTER PTR__MSG_TARGET_CMD_BUF_POST_BASE_REQUEST,
0202 TargetCmdBufferPostBaseRequest_t,
0203 MPI_POINTER pTargetCmdBufferPostBaseRequest_t;
0204
0205 #define CMD_BUFFER_POST_BASE_FLAGS_AUTO_POST_ALL (0x01)
0206
0207
0208 typedef struct _MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY
0209 {
0210 U16 Reserved;
0211 U8 MsgLength;
0212 U8 Function;
0213 U16 Reserved1;
0214 U8 Reserved2;
0215 U8 MsgFlags;
0216 U32 MsgContext;
0217 U16 Reserved3;
0218 U16 IOCStatus;
0219 U32 IOCLogInfo;
0220 } MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY,
0221 MPI_POINTER PTR_MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY,
0222 TargetCmdBufferPostBaseListReply_t,
0223 MPI_POINTER pTargetCmdBufferPostBaseListReply_t;
0224
0225
0226
0227
0228
0229
0230 typedef struct _MSG_TARGET_CMD_BUF_POST_LIST_REQUEST
0231 {
0232 U8 Reserved;
0233 U8 PortNumber;
0234 U8 ChainOffset;
0235 U8 Function;
0236 U16 CmdBufferCount;
0237 U8 Reserved1;
0238 U8 MsgFlags;
0239 U32 MsgContext;
0240 U32 Reserved2;
0241 U16 IoIndex[2];
0242 } MSG_TARGET_CMD_BUF_POST_LIST_REQUEST,
0243 MPI_POINTER PTR_MSG_TARGET_CMD_BUF_POST_LIST_REQUEST,
0244 TargetCmdBufferPostListRequest_t,
0245 MPI_POINTER pTargetCmdBufferPostListRequest_t;
0246
0247
0248
0249
0250
0251
0252 typedef struct _MPI_TARGET_FCP_CMD_BUFFER
0253 {
0254 U8 FcpLun[8];
0255 U8 FcpCntl[4];
0256 U8 FcpCdb[16];
0257 U32 FcpDl;
0258 U8 AliasIndex;
0259 U8 Reserved1;
0260 U16 OptionalOxid;
0261 } MPI_TARGET_FCP_CMD_BUFFER, MPI_POINTER PTR_MPI_TARGET_FCP_CMD_BUFFER,
0262 MpiTargetFcpCmdBuffer, MPI_POINTER pMpiTargetFcpCmdBuffer;
0263
0264
0265 typedef struct _MPI_TARGET_SCSI_SPI_CMD_BUFFER
0266 {
0267
0268 U8 L_QType;
0269 U8 Reserved;
0270 U16 Tag;
0271 U8 LogicalUnitNumber[8];
0272 U32 DataLength;
0273
0274 U8 ReservedFirstByteOfCommandIU;
0275 U8 TaskAttribute;
0276 U8 TaskManagementFlags;
0277 U8 AdditionalCDBLength;
0278 U8 CDB[16];
0279
0280 U8 AliasID;
0281 U8 Reserved1;
0282 U16 Reserved2;
0283 } MPI_TARGET_SCSI_SPI_CMD_BUFFER,
0284 MPI_POINTER PTR_MPI_TARGET_SCSI_SPI_CMD_BUFFER,
0285 MpiTargetScsiSpiCmdBuffer, MPI_POINTER pMpiTargetScsiSpiCmdBuffer;
0286
0287
0288 typedef struct _MPI_TARGET_SSP_CMD_BUFFER
0289 {
0290 U8 FrameType;
0291 U8 Reserved1;
0292 U16 Reserved2;
0293 U16 InitiatorTag;
0294 U16 DevHandle;
0295
0296 U8 LogicalUnitNumber[8];
0297 U8 Reserved3;
0298 U8 TaskAttribute;
0299 U8 Reserved4;
0300 U8 AdditionalCDBLength;
0301 U8 CDB[16];
0302
0303 } MPI_TARGET_SSP_CMD_BUFFER, MPI_POINTER PTR_MPI_TARGET_SSP_CMD_BUFFER,
0304 MpiTargetSspCmdBuffer, MPI_POINTER pMpiTargetSspCmdBuffer;
0305
0306 typedef struct _MPI_TARGET_SSP_TASK_BUFFER
0307 {
0308 U8 FrameType;
0309 U8 Reserved1;
0310 U16 Reserved2;
0311 U16 InitiatorTag;
0312 U16 DevHandle;
0313
0314 U8 LogicalUnitNumber[8];
0315 U8 Reserved3;
0316 U8 Reserved4;
0317 U8 TaskManagementFunction;
0318 U8 Reserved5;
0319 U16 ManagedTaskTag;
0320 U16 Reserved6;
0321 U32 Reserved7;
0322 U32 Reserved8;
0323 U32 Reserved9;
0324 } MPI_TARGET_SSP_TASK_BUFFER, MPI_POINTER PTR_MPI_TARGET_SSP_TASK_BUFFER,
0325 MpiTargetSspTaskBuffer, MPI_POINTER pMpiTargetSspTaskBuffer;
0326
0327
0328
0329
0330
0331
0332 typedef struct _MSG_TARGET_ASSIST_REQUEST
0333 {
0334 U8 StatusCode;
0335 U8 TargetAssistFlags;
0336 U8 ChainOffset;
0337 U8 Function;
0338 U16 QueueTag;
0339 U8 Reserved;
0340 U8 MsgFlags;
0341 U32 MsgContext;
0342 U32 ReplyWord;
0343 U8 LUN[8];
0344 U32 RelativeOffset;
0345 U32 DataLength;
0346 SGE_IO_UNION SGL[1];
0347 } MSG_TARGET_ASSIST_REQUEST, MPI_POINTER PTR_MSG_TARGET_ASSIST_REQUEST,
0348 TargetAssistRequest_t, MPI_POINTER pTargetAssistRequest_t;
0349
0350 #define TARGET_ASSIST_FLAGS_DATA_DIRECTION (0x01)
0351 #define TARGET_ASSIST_FLAGS_AUTO_STATUS (0x02)
0352 #define TARGET_ASSIST_FLAGS_HIGH_PRIORITY (0x04)
0353 #define TARGET_ASSIST_FLAGS_CONFIRMED (0x08)
0354 #define TARGET_ASSIST_FLAGS_REPOST_CMD_BUFFER (0x80)
0355
0356
0357 typedef struct _MSG_TARGET_ERROR_REPLY
0358 {
0359 U16 Reserved;
0360 U8 MsgLength;
0361 U8 Function;
0362 U16 Reserved1;
0363 U8 Reserved2;
0364 U8 MsgFlags;
0365 U32 MsgContext;
0366 U8 PriorityReason;
0367 U8 Reserved3;
0368 U16 IOCStatus;
0369 U32 IOCLogInfo;
0370 U32 ReplyWord;
0371 U32 TransferCount;
0372 } MSG_TARGET_ERROR_REPLY, MPI_POINTER PTR_MSG_TARGET_ERROR_REPLY,
0373 TargetErrorReply_t, MPI_POINTER pTargetErrorReply_t;
0374
0375
0376
0377
0378
0379
0380 typedef struct _MSG_TARGET_ASSIST_EXT_REQUEST
0381 {
0382 U8 StatusCode;
0383 U8 TargetAssistFlags;
0384 U8 ChainOffset;
0385 U8 Function;
0386 U16 QueueTag;
0387 U8 Reserved1;
0388 U8 MsgFlags;
0389 U32 MsgContext;
0390 U32 ReplyWord;
0391 U8 LUN[8];
0392 U32 RelativeOffset;
0393 U32 Reserved2;
0394 U32 Reserved3;
0395 U32 PrimaryReferenceTag;
0396 U16 PrimaryApplicationTag;
0397 U16 PrimaryApplicationTagMask;
0398 U32 Reserved4;
0399 U32 DataLength;
0400 U32 BidirectionalDataLength;
0401 U32 SecondaryReferenceTag;
0402 U16 SecondaryApplicationTag;
0403 U16 Reserved5;
0404 U16 EEDPFlags;
0405 U16 ApplicationTagTranslationMask;
0406 U32 EEDPBlockSize;
0407 U8 SGLOffset0;
0408 U8 SGLOffset1;
0409 U8 SGLOffset2;
0410 U8 SGLOffset3;
0411 U32 Reserved6;
0412 SGE_IO_UNION SGL[1];
0413 } MSG_TARGET_ASSIST_EXT_REQUEST, MPI_POINTER PTR_MSG_TARGET_ASSIST_EXT_REQUEST,
0414 TargetAssistExtRequest_t, MPI_POINTER pTargetAssistExtRequest_t;
0415
0416
0417
0418
0419 #define TARGET_ASSIST_EXT_MSGFLAGS_BIDIRECTIONAL (0x20)
0420 #define TARGET_ASSIST_EXT_MSGFLAGS_MULTICAST (0x10)
0421 #define TARGET_ASSIST_EXT_MSGFLAGS_SGL_OFFSET_CHAINS (0x08)
0422
0423
0424 #define TARGET_ASSIST_EXT_EEDP_MASK_OP (0x0007)
0425 #define TARGET_ASSIST_EXT_EEDP_NOOP_OP (0x0000)
0426 #define TARGET_ASSIST_EXT_EEDP_CHK_OP (0x0001)
0427 #define TARGET_ASSIST_EXT_EEDP_STRIP_OP (0x0002)
0428 #define TARGET_ASSIST_EXT_EEDP_CHKRM_OP (0x0003)
0429 #define TARGET_ASSIST_EXT_EEDP_INSERT_OP (0x0004)
0430 #define TARGET_ASSIST_EXT_EEDP_REPLACE_OP (0x0006)
0431 #define TARGET_ASSIST_EXT_EEDP_CHKREGEN_OP (0x0007)
0432
0433 #define TARGET_ASSIST_EXT_EEDP_PASS_REF_TAG (0x0008)
0434
0435 #define TARGET_ASSIST_EXT_EEDP_T10_CHK_MASK (0x0700)
0436 #define TARGET_ASSIST_EXT_EEDP_T10_CHK_GUARD (0x0100)
0437 #define TARGET_ASSIST_EXT_EEDP_T10_CHK_APPTAG (0x0200)
0438 #define TARGET_ASSIST_EXT_EEDP_T10_CHK_REFTAG (0x0400)
0439 #define TARGET_ASSIST_EXT_EEDP_T10_CHK_SHIFT (8)
0440
0441 #define TARGET_ASSIST_EXT_EEDP_INC_SEC_APPTAG (0x1000)
0442 #define TARGET_ASSIST_EXT_EEDP_INC_PRI_APPTAG (0x2000)
0443 #define TARGET_ASSIST_EXT_EEDP_INC_SEC_REFTAG (0x4000)
0444 #define TARGET_ASSIST_EXT_EEDP_INC_PRI_REFTAG (0x8000)
0445
0446
0447
0448
0449
0450
0451 typedef struct _MSG_TARGET_STATUS_SEND_REQUEST
0452 {
0453 U8 StatusCode;
0454 U8 StatusFlags;
0455 U8 ChainOffset;
0456 U8 Function;
0457 U16 QueueTag;
0458 U8 Reserved;
0459 U8 MsgFlags;
0460 U32 MsgContext;
0461 U32 ReplyWord;
0462 U8 LUN[8];
0463 SGE_SIMPLE_UNION StatusDataSGE;
0464 } MSG_TARGET_STATUS_SEND_REQUEST, MPI_POINTER PTR_MSG_TARGET_STATUS_SEND_REQUEST,
0465 TargetStatusSendRequest_t, MPI_POINTER pTargetStatusSendRequest_t;
0466
0467 #define TARGET_STATUS_SEND_FLAGS_AUTO_GOOD_STATUS (0x01)
0468 #define TARGET_STATUS_SEND_FLAGS_HIGH_PRIORITY (0x04)
0469 #define TARGET_STATUS_SEND_FLAGS_CONFIRMED (0x08)
0470 #define TARGET_STATUS_SEND_FLAGS_REPOST_CMD_BUFFER (0x80)
0471
0472
0473
0474
0475
0476 typedef struct _MPI_TARGET_FCP_RSP_BUFFER
0477 {
0478 U8 Reserved0[8];
0479 U8 Reserved1[2];
0480 U8 FcpFlags;
0481 U8 FcpStatus;
0482 U32 FcpResid;
0483 U32 FcpSenseLength;
0484 U32 FcpResponseLength;
0485 U8 FcpResponseData[8];
0486 U8 FcpSenseData[32];
0487 } MPI_TARGET_FCP_RSP_BUFFER, MPI_POINTER PTR_MPI_TARGET_FCP_RSP_BUFFER,
0488 MpiTargetFcpRspBuffer, MPI_POINTER pMpiTargetFcpRspBuffer;
0489
0490
0491
0492
0493
0494 typedef struct _MPI_TARGET_SCSI_SPI_STATUS_IU
0495 {
0496 U8 Reserved0;
0497 U8 Reserved1;
0498 U8 Valid;
0499 U8 Status;
0500 U32 SenseDataListLength;
0501 U32 PktFailuresListLength;
0502 U8 SenseData[52];
0503 } MPI_TARGET_SCSI_SPI_STATUS_IU, MPI_POINTER PTR_MPI_TARGET_SCSI_SPI_STATUS_IU,
0504 TargetScsiSpiStatusIU_t, MPI_POINTER pTargetScsiSpiStatusIU_t;
0505
0506
0507
0508
0509
0510 typedef struct _MPI_TARGET_SSP_RSP_IU
0511 {
0512 U32 Reserved0[6];
0513
0514 U32 Reserved1;
0515 U32 Reserved2;
0516 U16 Reserved3;
0517 U8 DataPres;
0518 U8 Status;
0519 U32 Reserved4;
0520 U32 SenseDataLength;
0521 U32 ResponseDataLength;
0522 U8 ResponseSenseData[4];
0523 } MPI_TARGET_SSP_RSP_IU, MPI_POINTER PTR_MPI_TARGET_SSP_RSP_IU,
0524 MpiTargetSspRspIu_t, MPI_POINTER pMpiTargetSspRspIu_t;
0525
0526
0527
0528
0529
0530
0531 typedef struct _MSG_TARGET_MODE_ABORT_REQUEST
0532 {
0533 U8 AbortType;
0534 U8 Reserved;
0535 U8 ChainOffset;
0536 U8 Function;
0537 U16 Reserved1;
0538 U8 Reserved2;
0539 U8 MsgFlags;
0540 U32 MsgContext;
0541 U32 ReplyWord;
0542 U32 MsgContextToAbort;
0543 } MSG_TARGET_MODE_ABORT, MPI_POINTER PTR_MSG_TARGET_MODE_ABORT,
0544 TargetModeAbort_t, MPI_POINTER pTargetModeAbort_t;
0545
0546 #define TARGET_MODE_ABORT_TYPE_ALL_CMD_BUFFERS (0x00)
0547 #define TARGET_MODE_ABORT_TYPE_ALL_IO (0x01)
0548 #define TARGET_MODE_ABORT_TYPE_EXACT_IO (0x02)
0549 #define TARGET_MODE_ABORT_TYPE_EXACT_IO_REQUEST (0x03)
0550
0551
0552
0553 typedef struct _MSG_TARGET_MODE_ABORT_REPLY
0554 {
0555 U16 Reserved;
0556 U8 MsgLength;
0557 U8 Function;
0558 U16 Reserved1;
0559 U8 Reserved2;
0560 U8 MsgFlags;
0561 U32 MsgContext;
0562 U16 Reserved3;
0563 U16 IOCStatus;
0564 U32 IOCLogInfo;
0565 U32 AbortCount;
0566 } MSG_TARGET_MODE_ABORT_REPLY, MPI_POINTER PTR_MSG_TARGET_MODE_ABORT_REPLY,
0567 TargetModeAbortReply_t, MPI_POINTER pTargetModeAbortReply_t;
0568
0569
0570
0571
0572
0573
0574 #define TARGET_MODE_REPLY_IO_INDEX_MASK (0x00003FFF)
0575 #define TARGET_MODE_REPLY_IO_INDEX_SHIFT (0)
0576 #define TARGET_MODE_REPLY_INITIATOR_INDEX_MASK (0x03FFC000)
0577 #define TARGET_MODE_REPLY_INITIATOR_INDEX_SHIFT (14)
0578 #define TARGET_MODE_REPLY_ALIAS_MASK (0x04000000)
0579 #define TARGET_MODE_REPLY_ALIAS_SHIFT (26)
0580 #define TARGET_MODE_REPLY_PORT_MASK (0x10000000)
0581 #define TARGET_MODE_REPLY_PORT_SHIFT (28)
0582
0583
0584 #define GET_IO_INDEX(x) (((x) & TARGET_MODE_REPLY_IO_INDEX_MASK) \
0585 >> TARGET_MODE_REPLY_IO_INDEX_SHIFT)
0586
0587 #define SET_IO_INDEX(t, i) \
0588 ((t) = ((t) & ~TARGET_MODE_REPLY_IO_INDEX_MASK) | \
0589 (((i) << TARGET_MODE_REPLY_IO_INDEX_SHIFT) & \
0590 TARGET_MODE_REPLY_IO_INDEX_MASK))
0591
0592 #define GET_INITIATOR_INDEX(x) (((x) & TARGET_MODE_REPLY_INITIATOR_INDEX_MASK) \
0593 >> TARGET_MODE_REPLY_INITIATOR_INDEX_SHIFT)
0594
0595 #define SET_INITIATOR_INDEX(t, ii) \
0596 ((t) = ((t) & ~TARGET_MODE_REPLY_INITIATOR_INDEX_MASK) | \
0597 (((ii) << TARGET_MODE_REPLY_INITIATOR_INDEX_SHIFT) & \
0598 TARGET_MODE_REPLY_INITIATOR_INDEX_MASK))
0599
0600 #define GET_ALIAS(x) (((x) & TARGET_MODE_REPLY_ALIAS_MASK) \
0601 >> TARGET_MODE_REPLY_ALIAS_SHIFT)
0602
0603 #define SET_ALIAS(t, a) ((t) = ((t) & ~TARGET_MODE_REPLY_ALIAS_MASK) | \
0604 (((a) << TARGET_MODE_REPLY_ALIAS_SHIFT) & \
0605 TARGET_MODE_REPLY_ALIAS_MASK))
0606
0607 #define GET_PORT(x) (((x) & TARGET_MODE_REPLY_PORT_MASK) \
0608 >> TARGET_MODE_REPLY_PORT_SHIFT)
0609
0610 #define SET_PORT(t, p) ((t) = ((t) & ~TARGET_MODE_REPLY_PORT_MASK) | \
0611 (((p) << TARGET_MODE_REPLY_PORT_SHIFT) & \
0612 TARGET_MODE_REPLY_PORT_MASK))
0613
0614
0615 #define TARGET_MODE_REPLY_0100_MASK_HOST_INDEX (0x000003FF)
0616 #define TARGET_MODE_REPLY_0100_SHIFT_HOST_INDEX (0)
0617 #define TARGET_MODE_REPLY_0100_MASK_IOC_INDEX (0x001FF800)
0618 #define TARGET_MODE_REPLY_0100_SHIFT_IOC_INDEX (11)
0619 #define TARGET_MODE_REPLY_0100_PORT_MASK (0x00400000)
0620 #define TARGET_MODE_REPLY_0100_PORT_SHIFT (22)
0621 #define TARGET_MODE_REPLY_0100_MASK_INITIATOR_INDEX (0x1F800000)
0622 #define TARGET_MODE_REPLY_0100_SHIFT_INITIATOR_INDEX (23)
0623
0624 #define GET_HOST_INDEX_0100(x) (((x) & TARGET_MODE_REPLY_0100_MASK_HOST_INDEX) \
0625 >> TARGET_MODE_REPLY_0100_SHIFT_HOST_INDEX)
0626
0627 #define SET_HOST_INDEX_0100(t, hi) \
0628 ((t) = ((t) & ~TARGET_MODE_REPLY_0100_MASK_HOST_INDEX) | \
0629 (((hi) << TARGET_MODE_REPLY_0100_SHIFT_HOST_INDEX) & \
0630 TARGET_MODE_REPLY_0100_MASK_HOST_INDEX))
0631
0632 #define GET_IOC_INDEX_0100(x) (((x) & TARGET_MODE_REPLY_0100_MASK_IOC_INDEX) \
0633 >> TARGET_MODE_REPLY_0100_SHIFT_IOC_INDEX)
0634
0635 #define SET_IOC_INDEX_0100(t, ii) \
0636 ((t) = ((t) & ~TARGET_MODE_REPLY_0100_MASK_IOC_INDEX) | \
0637 (((ii) << TARGET_MODE_REPLY_0100_SHIFT_IOC_INDEX) & \
0638 TARGET_MODE_REPLY_0100_MASK_IOC_INDEX))
0639
0640 #define GET_INITIATOR_INDEX_0100(x) \
0641 (((x) & TARGET_MODE_REPLY_0100_MASK_INITIATOR_INDEX) \
0642 >> TARGET_MODE_REPLY_0100_SHIFT_INITIATOR_INDEX)
0643
0644 #define SET_INITIATOR_INDEX_0100(t, ii) \
0645 ((t) = ((t) & ~TARGET_MODE_REPLY_0100_MASK_INITIATOR_INDEX) | \
0646 (((ii) << TARGET_MODE_REPLY_0100_SHIFT_INITIATOR_INDEX) & \
0647 TARGET_MODE_REPLY_0100_MASK_INITIATOR_INDEX))
0648
0649
0650 #endif
0651