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
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131 #ifndef MPI2_H
0132 #define MPI2_H
0133
0134
0135
0136
0137
0138
0139
0140 #define MPI2_VERSION_MAJOR_MASK (0xFF00)
0141 #define MPI2_VERSION_MAJOR_SHIFT (8)
0142 #define MPI2_VERSION_MINOR_MASK (0x00FF)
0143 #define MPI2_VERSION_MINOR_SHIFT (0)
0144
0145
0146 #define MPI2_VERSION_MAJOR (0x02)
0147
0148
0149 #define MPI2_VERSION_MINOR (0x00)
0150 #define MPI2_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \
0151 MPI2_VERSION_MINOR)
0152 #define MPI2_VERSION_02_00 (0x0200)
0153
0154
0155 #define MPI25_VERSION_MINOR (0x05)
0156 #define MPI25_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \
0157 MPI25_VERSION_MINOR)
0158 #define MPI2_VERSION_02_05 (0x0205)
0159
0160
0161 #define MPI26_VERSION_MINOR (0x06)
0162 #define MPI26_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \
0163 MPI26_VERSION_MINOR)
0164 #define MPI2_VERSION_02_06 (0x0206)
0165
0166
0167
0168 #define MPI2_HEADER_VERSION_UNIT (0x39)
0169 #define MPI2_HEADER_VERSION_DEV (0x00)
0170 #define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
0171 #define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
0172 #define MPI2_HEADER_VERSION_DEV_MASK (0x00FF)
0173 #define MPI2_HEADER_VERSION_DEV_SHIFT (0)
0174 #define MPI2_HEADER_VERSION ((MPI2_HEADER_VERSION_UNIT << 8) | \
0175 MPI2_HEADER_VERSION_DEV)
0176
0177
0178
0179
0180
0181
0182
0183 #define MPI2_IOC_STATE_RESET (0x00000000)
0184 #define MPI2_IOC_STATE_READY (0x10000000)
0185 #define MPI2_IOC_STATE_OPERATIONAL (0x20000000)
0186 #define MPI2_IOC_STATE_FAULT (0x40000000)
0187 #define MPI2_IOC_STATE_COREDUMP (0x50000000)
0188
0189 #define MPI2_IOC_STATE_MASK (0xF0000000)
0190 #define MPI2_IOC_STATE_SHIFT (28)
0191
0192
0193 #define MPI2_FAULT_PRODUCT_SPECIFIC_MIN (0x0000)
0194 #define MPI2_FAULT_PRODUCT_SPECIFIC_MAX (0xEFFF)
0195
0196
0197
0198
0199
0200
0201
0202 typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS {
0203 U32 Doorbell;
0204 U32 WriteSequence;
0205 U32 HostDiagnostic;
0206 U32 Reserved1;
0207 U32 DiagRWData;
0208 U32 DiagRWAddressLow;
0209 U32 DiagRWAddressHigh;
0210 U32 Reserved2[5];
0211 U32 HostInterruptStatus;
0212 U32 HostInterruptMask;
0213 U32 DCRData;
0214 U32 DCRAddress;
0215 U32 Reserved3[2];
0216 U32 ReplyFreeHostIndex;
0217 U32 Reserved4[8];
0218 U32 ReplyPostHostIndex;
0219 U32 Reserved5;
0220 U32 HCBSize;
0221 U32 HCBAddressLow;
0222 U32 HCBAddressHigh;
0223 U32 Reserved6[12];
0224 U32 Scratchpad[4];
0225 U32 RequestDescriptorPostLow;
0226 U32 RequestDescriptorPostHigh;
0227 U32 AtomicRequestDescriptorPost;
0228 U32 Reserved7[13];
0229 } MPI2_SYSTEM_INTERFACE_REGS,
0230 *PTR_MPI2_SYSTEM_INTERFACE_REGS,
0231 Mpi2SystemInterfaceRegs_t,
0232 *pMpi2SystemInterfaceRegs_t;
0233
0234
0235
0236
0237 #define MPI2_DOORBELL_OFFSET (0x00000000)
0238
0239
0240 #define MPI2_DOORBELL_USED (0x08000000)
0241 #define MPI2_DOORBELL_WHO_INIT_MASK (0x07000000)
0242 #define MPI2_DOORBELL_WHO_INIT_SHIFT (24)
0243 #define MPI2_DOORBELL_FAULT_CODE_MASK (0x0000FFFF)
0244 #define MPI2_DOORBELL_DATA_MASK (0x0000FFFF)
0245
0246
0247 #define MPI2_DOORBELL_FUNCTION_MASK (0xFF000000)
0248 #define MPI2_DOORBELL_FUNCTION_SHIFT (24)
0249 #define MPI2_DOORBELL_ADD_DWORDS_MASK (0x00FF0000)
0250 #define MPI2_DOORBELL_ADD_DWORDS_SHIFT (16)
0251
0252
0253
0254
0255 #define MPI2_WRITE_SEQUENCE_OFFSET (0x00000004)
0256 #define MPI2_WRSEQ_KEY_VALUE_MASK (0x0000000F)
0257 #define MPI2_WRSEQ_FLUSH_KEY_VALUE (0x0)
0258 #define MPI2_WRSEQ_1ST_KEY_VALUE (0xF)
0259 #define MPI2_WRSEQ_2ND_KEY_VALUE (0x4)
0260 #define MPI2_WRSEQ_3RD_KEY_VALUE (0xB)
0261 #define MPI2_WRSEQ_4TH_KEY_VALUE (0x2)
0262 #define MPI2_WRSEQ_5TH_KEY_VALUE (0x7)
0263 #define MPI2_WRSEQ_6TH_KEY_VALUE (0xD)
0264
0265
0266
0267
0268 #define MPI2_HOST_DIAGNOSTIC_OFFSET (0x00000008)
0269
0270 #define MPI26_DIAG_SECURE_BOOT (0x80000000)
0271
0272 #define MPI2_DIAG_SBR_RELOAD (0x00002000)
0273
0274 #define MPI2_DIAG_BOOT_DEVICE_SELECT_MASK (0x00001800)
0275 #define MPI2_DIAG_BOOT_DEVICE_SELECT_DEFAULT (0x00000000)
0276 #define MPI2_DIAG_BOOT_DEVICE_SELECT_HCDW (0x00000800)
0277
0278
0279 #define MPI26_DIAG_BOOT_DEVICE_SEL_64FLASH (0x00000000)
0280 #define MPI26_DIAG_BOOT_DEVICE_SEL_64HCDW (0x00000800)
0281 #define MPI26_DIAG_BOOT_DEVICE_SEL_32FLASH (0x00001000)
0282 #define MPI26_DIAG_BOOT_DEVICE_SEL_32HCDW (0x00001800)
0283
0284 #define MPI2_DIAG_CLEAR_FLASH_BAD_SIG (0x00000400)
0285 #define MPI2_DIAG_FORCE_HCB_ON_RESET (0x00000200)
0286 #define MPI2_DIAG_HCB_MODE (0x00000100)
0287 #define MPI2_DIAG_DIAG_WRITE_ENABLE (0x00000080)
0288 #define MPI2_DIAG_FLASH_BAD_SIG (0x00000040)
0289 #define MPI2_DIAG_RESET_HISTORY (0x00000020)
0290 #define MPI2_DIAG_DIAG_RW_ENABLE (0x00000010)
0291 #define MPI2_DIAG_RESET_ADAPTER (0x00000004)
0292 #define MPI2_DIAG_HOLD_IOC_RESET (0x00000002)
0293
0294
0295
0296
0297 #define MPI2_DIAG_RW_DATA_OFFSET (0x00000010)
0298 #define MPI2_DIAG_RW_ADDRESS_LOW_OFFSET (0x00000014)
0299 #define MPI2_DIAG_RW_ADDRESS_HIGH_OFFSET (0x00000018)
0300
0301
0302
0303
0304 #define MPI2_HOST_INTERRUPT_STATUS_OFFSET (0x00000030)
0305 #define MPI2_HIS_SYS2IOC_DB_STATUS (0x80000000)
0306 #define MPI2_HIS_IOP_DOORBELL_STATUS MPI2_HIS_SYS2IOC_DB_STATUS
0307 #define MPI2_HIS_RESET_IRQ_STATUS (0x40000000)
0308 #define MPI2_HIS_REPLY_DESCRIPTOR_INTERRUPT (0x00000008)
0309 #define MPI2_HIS_IOC2SYS_DB_STATUS (0x00000001)
0310 #define MPI2_HIS_DOORBELL_INTERRUPT MPI2_HIS_IOC2SYS_DB_STATUS
0311
0312
0313
0314
0315 #define MPI2_HOST_INTERRUPT_MASK_OFFSET (0x00000034)
0316 #define MPI2_HIM_RESET_IRQ_MASK (0x40000000)
0317 #define MPI2_HIM_REPLY_INT_MASK (0x00000008)
0318 #define MPI2_HIM_RIM MPI2_HIM_REPLY_INT_MASK
0319 #define MPI2_HIM_IOC2SYS_DB_MASK (0x00000001)
0320 #define MPI2_HIM_DIM MPI2_HIM_IOC2SYS_DB_MASK
0321
0322
0323
0324
0325 #define MPI2_DCR_DATA_OFFSET (0x00000038)
0326 #define MPI2_DCR_ADDRESS_OFFSET (0x0000003C)
0327
0328
0329
0330
0331 #define MPI2_REPLY_FREE_HOST_INDEX_OFFSET (0x00000048)
0332
0333
0334
0335
0336 #define MPI2_REPLY_POST_HOST_INDEX_OFFSET (0x0000006C)
0337 #define MPI2_REPLY_POST_HOST_INDEX_MASK (0x00FFFFFF)
0338 #define MPI2_RPHI_MSIX_INDEX_MASK (0xFF000000)
0339 #define MPI2_RPHI_MSIX_INDEX_SHIFT (24)
0340 #define MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET (0x0000030C)
0341
0342
0343
0344
0345
0346 #define MPI2_HCB_SIZE_OFFSET (0x00000074)
0347 #define MPI2_HCB_SIZE_SIZE_MASK (0xFFFFF000)
0348 #define MPI2_HCB_SIZE_HCB_ENABLE (0x00000001)
0349
0350 #define MPI2_HCB_ADDRESS_LOW_OFFSET (0x00000078)
0351 #define MPI2_HCB_ADDRESS_HIGH_OFFSET (0x0000007C)
0352
0353
0354
0355
0356 #define MPI26_SCRATCHPAD0_OFFSET (0x000000B0)
0357 #define MPI26_SCRATCHPAD1_OFFSET (0x000000B4)
0358 #define MPI26_SCRATCHPAD2_OFFSET (0x000000B8)
0359 #define MPI26_SCRATCHPAD3_OFFSET (0x000000BC)
0360
0361
0362
0363
0364 #define MPI2_REQUEST_DESCRIPTOR_POST_LOW_OFFSET (0x000000C0)
0365 #define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET (0x000000C4)
0366 #define MPI26_ATOMIC_REQUEST_DESCRIPTOR_POST_OFFSET (0x000000C8)
0367
0368
0369 #define MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC (50000)
0370 #define MPI2_HARD_RESET_PCIE_RESET_READ_WINDOW_MICRO_SEC (255000)
0371 #define MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC (256000)
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382 typedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR {
0383 U8 RequestFlags;
0384 U8 MSIxIndex;
0385 U16 SMID;
0386 U16 LMID;
0387 U16 DescriptorTypeDependent;
0388 } MPI2_DEFAULT_REQUEST_DESCRIPTOR,
0389 *PTR_MPI2_DEFAULT_REQUEST_DESCRIPTOR,
0390 Mpi2DefaultRequestDescriptor_t,
0391 *pMpi2DefaultRequestDescriptor_t;
0392
0393
0394 #define MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK (0x1E)
0395 #define MPI2_REQ_DESCRIPT_FLAGS_TYPE_RSHIFT (1)
0396 #define MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO (0x00)
0397 #define MPI2_REQ_DESCRIPT_FLAGS_SCSI_TARGET (0x02)
0398 #define MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY (0x06)
0399 #define MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE (0x08)
0400 #define MPI2_REQ_DESCRIPT_FLAGS_RAID_ACCELERATOR (0x0A)
0401 #define MPI25_REQ_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO (0x0C)
0402 #define MPI26_REQ_DESCRIPT_FLAGS_PCIE_ENCAPSULATED (0x10)
0403
0404 #define MPI2_REQ_DESCRIPT_FLAGS_IOC_FIFO_MARKER (0x01)
0405
0406
0407 typedef struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR {
0408 U8 RequestFlags;
0409 U8 MSIxIndex;
0410 U16 SMID;
0411 U16 LMID;
0412 U16 Reserved1;
0413 } MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR,
0414 *PTR_MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR,
0415 Mpi2HighPriorityRequestDescriptor_t,
0416 *pMpi2HighPriorityRequestDescriptor_t;
0417
0418
0419 typedef struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR {
0420 U8 RequestFlags;
0421 U8 MSIxIndex;
0422 U16 SMID;
0423 U16 LMID;
0424 U16 DevHandle;
0425 } MPI2_SCSI_IO_REQUEST_DESCRIPTOR,
0426 *PTR_MPI2_SCSI_IO_REQUEST_DESCRIPTOR,
0427 Mpi2SCSIIORequestDescriptor_t,
0428 *pMpi2SCSIIORequestDescriptor_t;
0429
0430
0431 typedef struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR {
0432 U8 RequestFlags;
0433 U8 MSIxIndex;
0434 U16 SMID;
0435 U16 LMID;
0436 U16 IoIndex;
0437 } MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR,
0438 *PTR_MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR,
0439 Mpi2SCSITargetRequestDescriptor_t,
0440 *pMpi2SCSITargetRequestDescriptor_t;
0441
0442
0443 typedef struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR {
0444 U8 RequestFlags;
0445 U8 MSIxIndex;
0446 U16 SMID;
0447 U16 LMID;
0448 U16 Reserved;
0449 } MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR,
0450 *PTR_MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR,
0451 Mpi2RAIDAcceleratorRequestDescriptor_t,
0452 *pMpi2RAIDAcceleratorRequestDescriptor_t;
0453
0454
0455 typedef MPI2_SCSI_IO_REQUEST_DESCRIPTOR
0456 MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR,
0457 *PTR_MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR,
0458 Mpi25FastPathSCSIIORequestDescriptor_t,
0459 *pMpi25FastPathSCSIIORequestDescriptor_t;
0460
0461
0462 typedef MPI2_SCSI_IO_REQUEST_DESCRIPTOR
0463 MPI26_PCIE_ENCAPSULATED_REQUEST_DESCRIPTOR,
0464 *PTR_MPI26_PCIE_ENCAPSULATED_REQUEST_DESCRIPTOR,
0465 Mpi26PCIeEncapsulatedRequestDescriptor_t,
0466 *pMpi26PCIeEncapsulatedRequestDescriptor_t;
0467
0468
0469 typedef union _MPI2_REQUEST_DESCRIPTOR_UNION {
0470 MPI2_DEFAULT_REQUEST_DESCRIPTOR Default;
0471 MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR HighPriority;
0472 MPI2_SCSI_IO_REQUEST_DESCRIPTOR SCSIIO;
0473 MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR SCSITarget;
0474 MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR RAIDAccelerator;
0475 MPI25_FP_SCSI_IO_REQUEST_DESCRIPTOR FastPathSCSIIO;
0476 MPI26_PCIE_ENCAPSULATED_REQUEST_DESCRIPTOR PCIeEncapsulated;
0477 U64 Words;
0478 } MPI2_REQUEST_DESCRIPTOR_UNION,
0479 *PTR_MPI2_REQUEST_DESCRIPTOR_UNION,
0480 Mpi2RequestDescriptorUnion_t,
0481 *pMpi2RequestDescriptorUnion_t;
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498 typedef struct _MPI26_ATOMIC_REQUEST_DESCRIPTOR {
0499 U8 RequestFlags;
0500 U8 MSIxIndex;
0501 U16 SMID;
0502 } MPI26_ATOMIC_REQUEST_DESCRIPTOR,
0503 *PTR_MPI26_ATOMIC_REQUEST_DESCRIPTOR,
0504 Mpi26AtomicRequestDescriptor_t,
0505 *pMpi26AtomicRequestDescriptor_t;
0506
0507
0508
0509
0510
0511
0512
0513
0514 typedef struct _MPI2_DEFAULT_REPLY_DESCRIPTOR {
0515 U8 ReplyFlags;
0516 U8 MSIxIndex;
0517 U16 DescriptorTypeDependent1;
0518 U32 DescriptorTypeDependent2;
0519 } MPI2_DEFAULT_REPLY_DESCRIPTOR,
0520 *PTR_MPI2_DEFAULT_REPLY_DESCRIPTOR,
0521 Mpi2DefaultReplyDescriptor_t,
0522 *pMpi2DefaultReplyDescriptor_t;
0523
0524
0525 #define MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK (0x0F)
0526 #define MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS (0x00)
0527 #define MPI2_RPY_DESCRIPT_FLAGS_ADDRESS_REPLY (0x01)
0528 #define MPI2_RPY_DESCRIPT_FLAGS_TARGETASSIST_SUCCESS (0x02)
0529 #define MPI2_RPY_DESCRIPT_FLAGS_TARGET_COMMAND_BUFFER (0x03)
0530 #define MPI2_RPY_DESCRIPT_FLAGS_RAID_ACCELERATOR_SUCCESS (0x05)
0531 #define MPI25_RPY_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO_SUCCESS (0x06)
0532 #define MPI26_RPY_DESCRIPT_FLAGS_PCIE_ENCAPSULATED_SUCCESS (0x08)
0533 #define MPI2_RPY_DESCRIPT_FLAGS_UNUSED (0x0F)
0534
0535
0536 #define MPI2_RPY_DESCRIPT_UNUSED_WORD0_MARK (0xFFFFFFFF)
0537 #define MPI2_RPY_DESCRIPT_UNUSED_WORD1_MARK (0xFFFFFFFF)
0538
0539
0540 typedef struct _MPI2_ADDRESS_REPLY_DESCRIPTOR {
0541 U8 ReplyFlags;
0542 U8 MSIxIndex;
0543 U16 SMID;
0544 U32 ReplyFrameAddress;
0545 } MPI2_ADDRESS_REPLY_DESCRIPTOR,
0546 *PTR_MPI2_ADDRESS_REPLY_DESCRIPTOR,
0547 Mpi2AddressReplyDescriptor_t,
0548 *pMpi2AddressReplyDescriptor_t;
0549
0550 #define MPI2_ADDRESS_REPLY_SMID_INVALID (0x00)
0551
0552
0553 typedef struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR {
0554 U8 ReplyFlags;
0555 U8 MSIxIndex;
0556 U16 SMID;
0557 U16 TaskTag;
0558 U16 Reserved1;
0559 } MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR,
0560 *PTR_MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR,
0561 Mpi2SCSIIOSuccessReplyDescriptor_t,
0562 *pMpi2SCSIIOSuccessReplyDescriptor_t;
0563
0564
0565 typedef struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR {
0566 U8 ReplyFlags;
0567 U8 MSIxIndex;
0568 U16 SMID;
0569 U8 SequenceNumber;
0570 U8 Reserved1;
0571 U16 IoIndex;
0572 } MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR,
0573 *PTR_MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR,
0574 Mpi2TargetAssistSuccessReplyDescriptor_t,
0575 *pMpi2TargetAssistSuccessReplyDescriptor_t;
0576
0577
0578 typedef struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR {
0579 U8 ReplyFlags;
0580 U8 MSIxIndex;
0581 U8 VP_ID;
0582 U8 Flags;
0583 U16 InitiatorDevHandle;
0584 U16 IoIndex;
0585 } MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR,
0586 *PTR_MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR,
0587 Mpi2TargetCommandBufferReplyDescriptor_t,
0588 *pMpi2TargetCommandBufferReplyDescriptor_t;
0589
0590
0591 #define MPI2_RPY_DESCRIPT_TCB_FLAGS_PHYNUM_MASK (0x3F)
0592
0593
0594 typedef struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR {
0595 U8 ReplyFlags;
0596 U8 MSIxIndex;
0597 U16 SMID;
0598 U32 Reserved;
0599 } MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR,
0600 *PTR_MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR,
0601 Mpi2RAIDAcceleratorSuccessReplyDescriptor_t,
0602 *pMpi2RAIDAcceleratorSuccessReplyDescriptor_t;
0603
0604
0605 typedef MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR
0606 MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR,
0607 *PTR_MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR,
0608 Mpi25FastPathSCSIIOSuccessReplyDescriptor_t,
0609 *pMpi25FastPathSCSIIOSuccessReplyDescriptor_t;
0610
0611
0612 typedef MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR
0613 MPI26_PCIE_ENCAPSULATED_SUCCESS_REPLY_DESCRIPTOR,
0614 *PTR_MPI26_PCIE_ENCAPSULATED_SUCCESS_REPLY_DESCRIPTOR,
0615 Mpi26PCIeEncapsulatedSuccessReplyDescriptor_t,
0616 *pMpi26PCIeEncapsulatedSuccessReplyDescriptor_t;
0617
0618
0619 typedef union _MPI2_REPLY_DESCRIPTORS_UNION {
0620 MPI2_DEFAULT_REPLY_DESCRIPTOR Default;
0621 MPI2_ADDRESS_REPLY_DESCRIPTOR AddressReply;
0622 MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR SCSIIOSuccess;
0623 MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR TargetAssistSuccess;
0624 MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR TargetCommandBuffer;
0625 MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR RAIDAcceleratorSuccess;
0626 MPI25_FP_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR FastPathSCSIIOSuccess;
0627 MPI26_PCIE_ENCAPSULATED_SUCCESS_REPLY_DESCRIPTOR
0628 PCIeEncapsulatedSuccess;
0629 U64 Words;
0630 } MPI2_REPLY_DESCRIPTORS_UNION,
0631 *PTR_MPI2_REPLY_DESCRIPTORS_UNION,
0632 Mpi2ReplyDescriptorsUnion_t,
0633 *pMpi2ReplyDescriptorsUnion_t;
0634
0635
0636
0637
0638
0639
0640
0641 #define MPI2_FUNCTION_SCSI_IO_REQUEST (0x00)
0642 #define MPI2_FUNCTION_SCSI_TASK_MGMT (0x01)
0643 #define MPI2_FUNCTION_IOC_INIT (0x02)
0644 #define MPI2_FUNCTION_IOC_FACTS (0x03)
0645 #define MPI2_FUNCTION_CONFIG (0x04)
0646 #define MPI2_FUNCTION_PORT_FACTS (0x05)
0647 #define MPI2_FUNCTION_PORT_ENABLE (0x06)
0648 #define MPI2_FUNCTION_EVENT_NOTIFICATION (0x07)
0649 #define MPI2_FUNCTION_EVENT_ACK (0x08)
0650 #define MPI2_FUNCTION_FW_DOWNLOAD (0x09)
0651 #define MPI2_FUNCTION_TARGET_ASSIST (0x0B)
0652 #define MPI2_FUNCTION_TARGET_STATUS_SEND (0x0C)
0653 #define MPI2_FUNCTION_TARGET_MODE_ABORT (0x0D)
0654 #define MPI2_FUNCTION_FW_UPLOAD (0x12)
0655 #define MPI2_FUNCTION_RAID_ACTION (0x15)
0656 #define MPI2_FUNCTION_RAID_SCSI_IO_PASSTHROUGH (0x16)
0657 #define MPI2_FUNCTION_TOOLBOX (0x17)
0658 #define MPI2_FUNCTION_SCSI_ENCLOSURE_PROCESSOR (0x18)
0659 #define MPI2_FUNCTION_SMP_PASSTHROUGH (0x1A)
0660 #define MPI2_FUNCTION_SAS_IO_UNIT_CONTROL (0x1B)
0661 #define MPI2_FUNCTION_IO_UNIT_CONTROL (0x1B)
0662 #define MPI2_FUNCTION_SATA_PASSTHROUGH (0x1C)
0663 #define MPI2_FUNCTION_DIAG_BUFFER_POST (0x1D)
0664 #define MPI2_FUNCTION_DIAG_RELEASE (0x1E)
0665 #define MPI2_FUNCTION_TARGET_CMD_BUF_BASE_POST (0x24)
0666 #define MPI2_FUNCTION_TARGET_CMD_BUF_LIST_POST (0x25)
0667 #define MPI2_FUNCTION_RAID_ACCELERATOR (0x2C)
0668 #define MPI2_FUNCTION_HOST_BASED_DISCOVERY_ACTION (0x2F)
0669 #define MPI2_FUNCTION_PWR_MGMT_CONTROL (0x30)
0670 #define MPI2_FUNCTION_SEND_HOST_MESSAGE (0x31)
0671 #define MPI2_FUNCTION_NVME_ENCAPSULATED (0x33)
0672 #define MPI2_FUNCTION_MIN_PRODUCT_SPECIFIC (0xF0)
0673 #define MPI2_FUNCTION_MAX_PRODUCT_SPECIFIC (0xFF)
0674
0675
0676 #define MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET (0x40)
0677 #define MPI2_FUNCTION_HANDSHAKE (0x42)
0678
0679
0680
0681
0682
0683
0684
0685
0686 #define MPI2_IOCSTATUS_MASK (0x7FFF)
0687
0688
0689
0690
0691
0692 #define MPI2_IOCSTATUS_SUCCESS (0x0000)
0693 #define MPI2_IOCSTATUS_INVALID_FUNCTION (0x0001)
0694 #define MPI2_IOCSTATUS_BUSY (0x0002)
0695 #define MPI2_IOCSTATUS_INVALID_SGL (0x0003)
0696 #define MPI2_IOCSTATUS_INTERNAL_ERROR (0x0004)
0697 #define MPI2_IOCSTATUS_INVALID_VPID (0x0005)
0698 #define MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES (0x0006)
0699 #define MPI2_IOCSTATUS_INVALID_FIELD (0x0007)
0700 #define MPI2_IOCSTATUS_INVALID_STATE (0x0008)
0701 #define MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED (0x0009)
0702
0703 #define MPI2_IOCSTATUS_INSUFFICIENT_POWER (0x000A)
0704 #define MPI2_IOCSTATUS_FAILURE (0x000F)
0705
0706
0707
0708
0709
0710 #define MPI2_IOCSTATUS_CONFIG_INVALID_ACTION (0x0020)
0711 #define MPI2_IOCSTATUS_CONFIG_INVALID_TYPE (0x0021)
0712 #define MPI2_IOCSTATUS_CONFIG_INVALID_PAGE (0x0022)
0713 #define MPI2_IOCSTATUS_CONFIG_INVALID_DATA (0x0023)
0714 #define MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS (0x0024)
0715 #define MPI2_IOCSTATUS_CONFIG_CANT_COMMIT (0x0025)
0716
0717
0718
0719
0720
0721 #define MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR (0x0040)
0722 #define MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE (0x0042)
0723 #define MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE (0x0043)
0724 #define MPI2_IOCSTATUS_SCSI_DATA_OVERRUN (0x0044)
0725 #define MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN (0x0045)
0726 #define MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR (0x0046)
0727 #define MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR (0x0047)
0728 #define MPI2_IOCSTATUS_SCSI_TASK_TERMINATED (0x0048)
0729 #define MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH (0x0049)
0730 #define MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED (0x004A)
0731 #define MPI2_IOCSTATUS_SCSI_IOC_TERMINATED (0x004B)
0732 #define MPI2_IOCSTATUS_SCSI_EXT_TERMINATED (0x004C)
0733
0734
0735
0736
0737
0738 #define MPI2_IOCSTATUS_EEDP_GUARD_ERROR (0x004D)
0739 #define MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR (0x004E)
0740 #define MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR (0x004F)
0741
0742
0743
0744
0745
0746 #define MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX (0x0062)
0747 #define MPI2_IOCSTATUS_TARGET_ABORTED (0x0063)
0748 #define MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE (0x0064)
0749 #define MPI2_IOCSTATUS_TARGET_NO_CONNECTION (0x0065)
0750 #define MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH (0x006A)
0751 #define MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR (0x006D)
0752 #define MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA (0x006E)
0753 #define MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT (0x006F)
0754 #define MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT (0x0070)
0755 #define MPI2_IOCSTATUS_TARGET_NAK_RECEIVED (0x0071)
0756
0757
0758
0759
0760
0761 #define MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED (0x0090)
0762 #define MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN (0x0091)
0763
0764
0765
0766
0767
0768 #define MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED (0x00A0)
0769
0770
0771
0772
0773
0774 #define MPI2_IOCSTATUS_RAID_ACCEL_ERROR (0x00B0)
0775
0776
0777
0778
0779
0780 #define MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE (0x8000)
0781
0782
0783
0784
0785
0786 #define MPI2_IOCLOGINFO_TYPE_MASK (0xF0000000)
0787 #define MPI2_IOCLOGINFO_TYPE_SHIFT (28)
0788 #define MPI2_IOCLOGINFO_TYPE_NONE (0x0)
0789 #define MPI2_IOCLOGINFO_TYPE_SCSI (0x1)
0790 #define MPI2_IOCLOGINFO_TYPE_FC (0x2)
0791 #define MPI2_IOCLOGINFO_TYPE_SAS (0x3)
0792 #define MPI2_IOCLOGINFO_TYPE_ISCSI (0x4)
0793 #define MPI2_IOCLOGINFO_LOG_DATA_MASK (0x0FFFFFFF)
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803
0804
0805 typedef struct _MPI2_REQUEST_HEADER {
0806 U16 FunctionDependent1;
0807 U8 ChainOffset;
0808 U8 Function;
0809 U16 FunctionDependent2;
0810 U8 FunctionDependent3;
0811 U8 MsgFlags;
0812 U8 VP_ID;
0813 U8 VF_ID;
0814 U16 Reserved1;
0815 } MPI2_REQUEST_HEADER, *PTR_MPI2_REQUEST_HEADER,
0816 MPI2RequestHeader_t, *pMPI2RequestHeader_t;
0817
0818
0819
0820
0821
0822 typedef struct _MPI2_DEFAULT_REPLY {
0823 U16 FunctionDependent1;
0824 U8 MsgLength;
0825 U8 Function;
0826 U16 FunctionDependent2;
0827 U8 FunctionDependent3;
0828 U8 MsgFlags;
0829 U8 VP_ID;
0830 U8 VF_ID;
0831 U16 Reserved1;
0832 U16 FunctionDependent5;
0833 U16 IOCStatus;
0834 U32 IOCLogInfo;
0835 } MPI2_DEFAULT_REPLY, *PTR_MPI2_DEFAULT_REPLY,
0836 MPI2DefaultReply_t, *pMPI2DefaultReply_t;
0837
0838
0839
0840 typedef struct _MPI2_VERSION_STRUCT {
0841 U8 Dev;
0842 U8 Unit;
0843 U8 Minor;
0844 U8 Major;
0845 } MPI2_VERSION_STRUCT;
0846
0847 typedef union _MPI2_VERSION_UNION {
0848 MPI2_VERSION_STRUCT Struct;
0849 U32 Word;
0850 } MPI2_VERSION_UNION;
0851
0852
0853 #define MPI2_LUN_FIRST_LEVEL_ADDRESSING (0x0000FFFF)
0854 #define MPI2_LUN_SECOND_LEVEL_ADDRESSING (0xFFFF0000)
0855 #define MPI2_LUN_THIRD_LEVEL_ADDRESSING (0x0000FFFF)
0856 #define MPI2_LUN_FOURTH_LEVEL_ADDRESSING (0xFFFF0000)
0857 #define MPI2_LUN_LEVEL_1_WORD (0xFF00)
0858 #define MPI2_LUN_LEVEL_1_DWORD (0x0000FF00)
0859
0860
0861
0862
0863
0864
0865
0866
0867
0868
0869
0870 typedef struct _MPI2_SGE_SIMPLE32 {
0871 U32 FlagsLength;
0872 U32 Address;
0873 } MPI2_SGE_SIMPLE32, *PTR_MPI2_SGE_SIMPLE32,
0874 Mpi2SGESimple32_t, *pMpi2SGESimple32_t;
0875
0876 typedef struct _MPI2_SGE_SIMPLE64 {
0877 U32 FlagsLength;
0878 U64 Address;
0879 } MPI2_SGE_SIMPLE64, *PTR_MPI2_SGE_SIMPLE64,
0880 Mpi2SGESimple64_t, *pMpi2SGESimple64_t;
0881
0882 typedef struct _MPI2_SGE_SIMPLE_UNION {
0883 U32 FlagsLength;
0884 union {
0885 U32 Address32;
0886 U64 Address64;
0887 } u;
0888 } MPI2_SGE_SIMPLE_UNION,
0889 *PTR_MPI2_SGE_SIMPLE_UNION,
0890 Mpi2SGESimpleUnion_t,
0891 *pMpi2SGESimpleUnion_t;
0892
0893
0894
0895
0896
0897 typedef struct _MPI2_SGE_CHAIN32 {
0898 U16 Length;
0899 U8 NextChainOffset;
0900 U8 Flags;
0901 U32 Address;
0902 } MPI2_SGE_CHAIN32, *PTR_MPI2_SGE_CHAIN32,
0903 Mpi2SGEChain32_t, *pMpi2SGEChain32_t;
0904
0905 typedef struct _MPI2_SGE_CHAIN64 {
0906 U16 Length;
0907 U8 NextChainOffset;
0908 U8 Flags;
0909 U64 Address;
0910 } MPI2_SGE_CHAIN64, *PTR_MPI2_SGE_CHAIN64,
0911 Mpi2SGEChain64_t, *pMpi2SGEChain64_t;
0912
0913 typedef struct _MPI2_SGE_CHAIN_UNION {
0914 U16 Length;
0915 U8 NextChainOffset;
0916 U8 Flags;
0917 union {
0918 U32 Address32;
0919 U64 Address64;
0920 } u;
0921 } MPI2_SGE_CHAIN_UNION,
0922 *PTR_MPI2_SGE_CHAIN_UNION,
0923 Mpi2SGEChainUnion_t,
0924 *pMpi2SGEChainUnion_t;
0925
0926
0927
0928
0929
0930 typedef struct _MPI2_SGE_TRANSACTION32 {
0931 U8 Reserved;
0932 U8 ContextSize;
0933 U8 DetailsLength;
0934 U8 Flags;
0935 U32 TransactionContext[1];
0936 U32 TransactionDetails[1];
0937 } MPI2_SGE_TRANSACTION32,
0938 *PTR_MPI2_SGE_TRANSACTION32,
0939 Mpi2SGETransaction32_t,
0940 *pMpi2SGETransaction32_t;
0941
0942 typedef struct _MPI2_SGE_TRANSACTION64 {
0943 U8 Reserved;
0944 U8 ContextSize;
0945 U8 DetailsLength;
0946 U8 Flags;
0947 U32 TransactionContext[2];
0948 U32 TransactionDetails[1];
0949 } MPI2_SGE_TRANSACTION64,
0950 *PTR_MPI2_SGE_TRANSACTION64,
0951 Mpi2SGETransaction64_t,
0952 *pMpi2SGETransaction64_t;
0953
0954 typedef struct _MPI2_SGE_TRANSACTION96 {
0955 U8 Reserved;
0956 U8 ContextSize;
0957 U8 DetailsLength;
0958 U8 Flags;
0959 U32 TransactionContext[3];
0960 U32 TransactionDetails[1];
0961 } MPI2_SGE_TRANSACTION96, *PTR_MPI2_SGE_TRANSACTION96,
0962 Mpi2SGETransaction96_t, *pMpi2SGETransaction96_t;
0963
0964 typedef struct _MPI2_SGE_TRANSACTION128 {
0965 U8 Reserved;
0966 U8 ContextSize;
0967 U8 DetailsLength;
0968 U8 Flags;
0969 U32 TransactionContext[4];
0970 U32 TransactionDetails[1];
0971 } MPI2_SGE_TRANSACTION128, *PTR_MPI2_SGE_TRANSACTION128,
0972 Mpi2SGETransaction_t128, *pMpi2SGETransaction_t128;
0973
0974 typedef struct _MPI2_SGE_TRANSACTION_UNION {
0975 U8 Reserved;
0976 U8 ContextSize;
0977 U8 DetailsLength;
0978 U8 Flags;
0979 union {
0980 U32 TransactionContext32[1];
0981 U32 TransactionContext64[2];
0982 U32 TransactionContext96[3];
0983 U32 TransactionContext128[4];
0984 } u;
0985 U32 TransactionDetails[1];
0986 } MPI2_SGE_TRANSACTION_UNION,
0987 *PTR_MPI2_SGE_TRANSACTION_UNION,
0988 Mpi2SGETransactionUnion_t,
0989 *pMpi2SGETransactionUnion_t;
0990
0991
0992
0993
0994
0995 typedef struct _MPI2_MPI_SGE_IO_UNION {
0996 union {
0997 MPI2_SGE_SIMPLE_UNION Simple;
0998 MPI2_SGE_CHAIN_UNION Chain;
0999 } u;
1000 } MPI2_MPI_SGE_IO_UNION, *PTR_MPI2_MPI_SGE_IO_UNION,
1001 Mpi2MpiSGEIOUnion_t, *pMpi2MpiSGEIOUnion_t;
1002
1003
1004
1005
1006
1007 typedef struct _MPI2_SGE_TRANS_SIMPLE_UNION {
1008 union {
1009 MPI2_SGE_SIMPLE_UNION Simple;
1010 MPI2_SGE_TRANSACTION_UNION Transaction;
1011 } u;
1012 } MPI2_SGE_TRANS_SIMPLE_UNION,
1013 *PTR_MPI2_SGE_TRANS_SIMPLE_UNION,
1014 Mpi2SGETransSimpleUnion_t,
1015 *pMpi2SGETransSimpleUnion_t;
1016
1017
1018
1019
1020
1021 typedef struct _MPI2_MPI_SGE_UNION {
1022 union {
1023 MPI2_SGE_SIMPLE_UNION Simple;
1024 MPI2_SGE_CHAIN_UNION Chain;
1025 MPI2_SGE_TRANSACTION_UNION Transaction;
1026 } u;
1027 } MPI2_MPI_SGE_UNION, *PTR_MPI2_MPI_SGE_UNION,
1028 Mpi2MpiSgeUnion_t, *pMpi2MpiSgeUnion_t;
1029
1030
1031
1032
1033
1034
1035
1036 #define MPI2_SGE_FLAGS_LAST_ELEMENT (0x80)
1037 #define MPI2_SGE_FLAGS_END_OF_BUFFER (0x40)
1038 #define MPI2_SGE_FLAGS_ELEMENT_TYPE_MASK (0x30)
1039 #define MPI2_SGE_FLAGS_LOCAL_ADDRESS (0x08)
1040 #define MPI2_SGE_FLAGS_DIRECTION (0x04)
1041 #define MPI2_SGE_FLAGS_ADDRESS_SIZE (0x02)
1042 #define MPI2_SGE_FLAGS_END_OF_LIST (0x01)
1043
1044 #define MPI2_SGE_FLAGS_SHIFT (24)
1045
1046 #define MPI2_SGE_LENGTH_MASK (0x00FFFFFF)
1047 #define MPI2_SGE_CHAIN_LENGTH_MASK (0x0000FFFF)
1048
1049
1050
1051 #define MPI2_SGE_FLAGS_TRANSACTION_ELEMENT (0x00)
1052 #define MPI2_SGE_FLAGS_SIMPLE_ELEMENT (0x10)
1053 #define MPI2_SGE_FLAGS_CHAIN_ELEMENT (0x30)
1054 #define MPI2_SGE_FLAGS_ELEMENT_MASK (0x30)
1055
1056
1057
1058 #define MPI2_SGE_FLAGS_SYSTEM_ADDRESS (0x00)
1059
1060
1061
1062 #define MPI2_SGE_FLAGS_IOC_TO_HOST (0x00)
1063 #define MPI2_SGE_FLAGS_HOST_TO_IOC (0x04)
1064
1065 #define MPI2_SGE_FLAGS_DEST (MPI2_SGE_FLAGS_IOC_TO_HOST)
1066 #define MPI2_SGE_FLAGS_SOURCE (MPI2_SGE_FLAGS_HOST_TO_IOC)
1067
1068
1069
1070 #define MPI2_SGE_FLAGS_32_BIT_ADDRESSING (0x00)
1071 #define MPI2_SGE_FLAGS_64_BIT_ADDRESSING (0x02)
1072
1073
1074
1075 #define MPI2_SGE_FLAGS_32_BIT_CONTEXT (0x00)
1076 #define MPI2_SGE_FLAGS_64_BIT_CONTEXT (0x02)
1077 #define MPI2_SGE_FLAGS_96_BIT_CONTEXT (0x04)
1078 #define MPI2_SGE_FLAGS_128_BIT_CONTEXT (0x06)
1079
1080 #define MPI2_SGE_CHAIN_OFFSET_MASK (0x00FF0000)
1081 #define MPI2_SGE_CHAIN_OFFSET_SHIFT (16)
1082
1083
1084
1085
1086
1087
1088 #define MPI2_SGE_SET_FLAGS(f) ((U32)(f) << MPI2_SGE_FLAGS_SHIFT)
1089 #define MPI2_SGE_GET_FLAGS(f) (((f) & ~MPI2_SGE_LENGTH_MASK) >> \
1090 MPI2_SGE_FLAGS_SHIFT)
1091 #define MPI2_SGE_LENGTH(f) ((f) & MPI2_SGE_LENGTH_MASK)
1092 #define MPI2_SGE_CHAIN_LENGTH(f) ((f) & MPI2_SGE_CHAIN_LENGTH_MASK)
1093
1094 #define MPI2_SGE_SET_FLAGS_LENGTH(f, l) (MPI2_SGE_SET_FLAGS(f) | \
1095 MPI2_SGE_LENGTH(l))
1096
1097 #define MPI2_pSGE_GET_FLAGS(psg) MPI2_SGE_GET_FLAGS((psg)->FlagsLength)
1098 #define MPI2_pSGE_GET_LENGTH(psg) MPI2_SGE_LENGTH((psg)->FlagsLength)
1099 #define MPI2_pSGE_SET_FLAGS_LENGTH(psg, f, l) ((psg)->FlagsLength = \
1100 MPI2_SGE_SET_FLAGS_LENGTH(f, l))
1101
1102
1103 #define MPI2_pSGE_SET_FLAGS(psg, f) ((psg)->FlagsLength |= \
1104 MPI2_SGE_SET_FLAGS(f))
1105 #define MPI2_pSGE_SET_LENGTH(psg, l) ((psg)->FlagsLength |= \
1106 MPI2_SGE_LENGTH(l))
1107
1108 #define MPI2_GET_CHAIN_OFFSET(x) ((x & MPI2_SGE_CHAIN_OFFSET_MASK) >> \
1109 MPI2_SGE_CHAIN_OFFSET_SHIFT)
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122 typedef struct _MPI2_IEEE_SGE_SIMPLE32 {
1123 U32 Address;
1124 U32 FlagsLength;
1125 } MPI2_IEEE_SGE_SIMPLE32, *PTR_MPI2_IEEE_SGE_SIMPLE32,
1126 Mpi2IeeeSgeSimple32_t, *pMpi2IeeeSgeSimple32_t;
1127
1128 typedef struct _MPI2_IEEE_SGE_SIMPLE64 {
1129 U64 Address;
1130 U32 Length;
1131 U16 Reserved1;
1132 U8 Reserved2;
1133 U8 Flags;
1134 } MPI2_IEEE_SGE_SIMPLE64, *PTR_MPI2_IEEE_SGE_SIMPLE64,
1135 Mpi2IeeeSgeSimple64_t, *pMpi2IeeeSgeSimple64_t;
1136
1137 typedef union _MPI2_IEEE_SGE_SIMPLE_UNION {
1138 MPI2_IEEE_SGE_SIMPLE32 Simple32;
1139 MPI2_IEEE_SGE_SIMPLE64 Simple64;
1140 } MPI2_IEEE_SGE_SIMPLE_UNION,
1141 *PTR_MPI2_IEEE_SGE_SIMPLE_UNION,
1142 Mpi2IeeeSgeSimpleUnion_t,
1143 *pMpi2IeeeSgeSimpleUnion_t;
1144
1145
1146
1147
1148
1149
1150 typedef MPI2_IEEE_SGE_SIMPLE32 MPI2_IEEE_SGE_CHAIN32;
1151
1152
1153 typedef MPI2_IEEE_SGE_SIMPLE64 MPI2_IEEE_SGE_CHAIN64;
1154
1155 typedef union _MPI2_IEEE_SGE_CHAIN_UNION {
1156 MPI2_IEEE_SGE_CHAIN32 Chain32;
1157 MPI2_IEEE_SGE_CHAIN64 Chain64;
1158 } MPI2_IEEE_SGE_CHAIN_UNION,
1159 *PTR_MPI2_IEEE_SGE_CHAIN_UNION,
1160 Mpi2IeeeSgeChainUnion_t,
1161 *pMpi2IeeeSgeChainUnion_t;
1162
1163
1164 typedef struct _MPI25_IEEE_SGE_CHAIN64 {
1165 U64 Address;
1166 U32 Length;
1167 U16 Reserved1;
1168 U8 NextChainOffset;
1169 U8 Flags;
1170 } MPI25_IEEE_SGE_CHAIN64,
1171 *PTR_MPI25_IEEE_SGE_CHAIN64,
1172 Mpi25IeeeSgeChain64_t,
1173 *pMpi25IeeeSgeChain64_t;
1174
1175
1176
1177
1178
1179
1180 typedef struct _MPI2_IEEE_SGE_UNION {
1181 union {
1182 MPI2_IEEE_SGE_SIMPLE_UNION Simple;
1183 MPI2_IEEE_SGE_CHAIN_UNION Chain;
1184 } u;
1185 } MPI2_IEEE_SGE_UNION, *PTR_MPI2_IEEE_SGE_UNION,
1186 Mpi2IeeeSgeUnion_t, *pMpi2IeeeSgeUnion_t;
1187
1188
1189
1190
1191
1192 typedef union _MPI25_SGE_IO_UNION {
1193 MPI2_IEEE_SGE_SIMPLE64 IeeeSimple;
1194 MPI25_IEEE_SGE_CHAIN64 IeeeChain;
1195 } MPI25_SGE_IO_UNION, *PTR_MPI25_SGE_IO_UNION,
1196 Mpi25SGEIOUnion_t, *pMpi25SGEIOUnion_t;
1197
1198
1199
1200
1201
1202
1203
1204 #define MPI2_IEEE_SGE_FLAGS_ELEMENT_TYPE_MASK (0x80)
1205 #define MPI25_IEEE_SGE_FLAGS_END_OF_LIST (0x40)
1206
1207 #define MPI2_IEEE32_SGE_FLAGS_SHIFT (24)
1208
1209 #define MPI2_IEEE32_SGE_LENGTH_MASK (0x00FFFFFF)
1210
1211
1212
1213 #define MPI2_IEEE_SGE_FLAGS_SIMPLE_ELEMENT (0x00)
1214 #define MPI2_IEEE_SGE_FLAGS_CHAIN_ELEMENT (0x80)
1215
1216
1217
1218 #define MPI26_IEEE_SGE_FLAGS_NSF_MASK (0x1C)
1219 #define MPI26_IEEE_SGE_FLAGS_NSF_MPI_IEEE (0x00)
1220 #define MPI26_IEEE_SGE_FLAGS_NSF_NVME_PRP (0x08)
1221 #define MPI26_IEEE_SGE_FLAGS_NSF_NVME_SGL (0x10)
1222
1223
1224
1225 #define MPI2_IEEE_SGE_FLAGS_ADDR_MASK (0x03)
1226 #define MPI2_IEEE_SGE_FLAGS_SYSTEM_ADDR (0x00)
1227 #define MPI2_IEEE_SGE_FLAGS_IOCDDR_ADDR (0x01)
1228 #define MPI2_IEEE_SGE_FLAGS_IOCPLB_ADDR (0x02)
1229 #define MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR (0x03)
1230 #define MPI2_IEEE_SGE_FLAGS_SYSTEMPLBPCI_ADDR (0x03)
1231 #define MPI2_IEEE_SGE_FLAGS_SYSTEMPLBCPI_ADDR \
1232 (MPI2_IEEE_SGE_FLAGS_SYSTEMPLBPCI_ADDR)
1233 #define MPI26_IEEE_SGE_FLAGS_IOCCTL_ADDR (0x02)
1234
1235
1236
1237
1238
1239
1240 #define MPI2_IEEE32_SGE_SET_FLAGS(f) ((U32)(f) << MPI2_IEEE32_SGE_FLAGS_SHIFT)
1241 #define MPI2_IEEE32_SGE_GET_FLAGS(f) (((f) & ~MPI2_IEEE32_SGE_LENGTH_MASK) \
1242 >> MPI2_IEEE32_SGE_FLAGS_SHIFT)
1243 #define MPI2_IEEE32_SGE_LENGTH(f) ((f) & MPI2_IEEE32_SGE_LENGTH_MASK)
1244
1245 #define MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f, l) (MPI2_IEEE32_SGE_SET_FLAGS(f) |\
1246 MPI2_IEEE32_SGE_LENGTH(l))
1247
1248 #define MPI2_IEEE32_pSGE_GET_FLAGS(psg) \
1249 MPI2_IEEE32_SGE_GET_FLAGS((psg)->FlagsLength)
1250 #define MPI2_IEEE32_pSGE_GET_LENGTH(psg) \
1251 MPI2_IEEE32_SGE_LENGTH((psg)->FlagsLength)
1252 #define MPI2_IEEE32_pSGE_SET_FLAGS_LENGTH(psg, f, l) ((psg)->FlagsLength = \
1253 MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f, l))
1254
1255
1256 #define MPI2_IEEE32_pSGE_SET_FLAGS(psg, f) ((psg)->FlagsLength |= \
1257 MPI2_IEEE32_SGE_SET_FLAGS(f))
1258 #define MPI2_IEEE32_pSGE_SET_LENGTH(psg, l) ((psg)->FlagsLength |= \
1259 MPI2_IEEE32_SGE_LENGTH(l))
1260
1261
1262
1263
1264
1265
1266
1267 typedef union _MPI2_SIMPLE_SGE_UNION {
1268 MPI2_SGE_SIMPLE_UNION MpiSimple;
1269 MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple;
1270 } MPI2_SIMPLE_SGE_UNION, *PTR_MPI2_SIMPLE_SGE_UNION,
1271 Mpi2SimpleSgeUntion_t, *pMpi2SimpleSgeUntion_t;
1272
1273 typedef union _MPI2_SGE_IO_UNION {
1274 MPI2_SGE_SIMPLE_UNION MpiSimple;
1275 MPI2_SGE_CHAIN_UNION MpiChain;
1276 MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple;
1277 MPI2_IEEE_SGE_CHAIN_UNION IeeeChain;
1278 } MPI2_SGE_IO_UNION, *PTR_MPI2_SGE_IO_UNION,
1279 Mpi2SGEIOUnion_t, *pMpi2SGEIOUnion_t;
1280
1281
1282
1283
1284
1285
1286
1287
1288 #define MPI2_SGLFLAGS_ADDRESS_SPACE_MASK (0x0C)
1289 #define MPI2_SGLFLAGS_SYSTEM_ADDRESS_SPACE (0x00)
1290 #define MPI2_SGLFLAGS_IOCDDR_ADDRESS_SPACE (0x04)
1291 #define MPI2_SGLFLAGS_IOCPLB_ADDRESS_SPACE (0x08)
1292 #define MPI26_SGLFLAGS_IOCPLB_ADDRESS_SPACE (0x08)
1293 #define MPI2_SGLFLAGS_IOCPLBNTA_ADDRESS_SPACE (0x0C)
1294
1295 #define MPI2_SGLFLAGS_SGL_TYPE_MASK (0x03)
1296 #define MPI2_SGLFLAGS_SGL_TYPE_MPI (0x00)
1297 #define MPI2_SGLFLAGS_SGL_TYPE_IEEE32 (0x01)
1298 #define MPI2_SGLFLAGS_SGL_TYPE_IEEE64 (0x02)
1299
1300 #endif