1*d3c7b9a0SKenneth D. Merry /* $FreeBSD$ */ 2*d3c7b9a0SKenneth D. Merry /* 3*d3c7b9a0SKenneth D. Merry * Copyright (c) 2000-2009 LSI Corporation. 4*d3c7b9a0SKenneth D. Merry * 5*d3c7b9a0SKenneth D. Merry * 6*d3c7b9a0SKenneth D. Merry * Name: mpi2.h 7*d3c7b9a0SKenneth D. Merry * Title: MPI Message independent structures and definitions 8*d3c7b9a0SKenneth D. Merry * including System Interface Register Set and 9*d3c7b9a0SKenneth D. Merry * scatter/gather formats. 10*d3c7b9a0SKenneth D. Merry * Creation Date: June 21, 2006 11*d3c7b9a0SKenneth D. Merry * 12*d3c7b9a0SKenneth D. Merry * mpi2.h Version: 02.00.14 13*d3c7b9a0SKenneth D. Merry * 14*d3c7b9a0SKenneth D. Merry * Version History 15*d3c7b9a0SKenneth D. Merry * --------------- 16*d3c7b9a0SKenneth D. Merry * 17*d3c7b9a0SKenneth D. Merry * Date Version Description 18*d3c7b9a0SKenneth D. Merry * -------- -------- ------------------------------------------------------ 19*d3c7b9a0SKenneth D. Merry * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 20*d3c7b9a0SKenneth D. Merry * 06-04-07 02.00.01 Bumped MPI2_HEADER_VERSION_UNIT. 21*d3c7b9a0SKenneth D. Merry * 06-26-07 02.00.02 Bumped MPI2_HEADER_VERSION_UNIT. 22*d3c7b9a0SKenneth D. Merry * 08-31-07 02.00.03 Bumped MPI2_HEADER_VERSION_UNIT. 23*d3c7b9a0SKenneth D. Merry * Moved ReplyPostHostIndex register to offset 0x6C of the 24*d3c7b9a0SKenneth D. Merry * MPI2_SYSTEM_INTERFACE_REGS and modified the define for 25*d3c7b9a0SKenneth D. Merry * MPI2_REPLY_POST_HOST_INDEX_OFFSET. 26*d3c7b9a0SKenneth D. Merry * Added union of request descriptors. 27*d3c7b9a0SKenneth D. Merry * Added union of reply descriptors. 28*d3c7b9a0SKenneth D. Merry * 10-31-07 02.00.04 Bumped MPI2_HEADER_VERSION_UNIT. 29*d3c7b9a0SKenneth D. Merry * Added define for MPI2_VERSION_02_00. 30*d3c7b9a0SKenneth D. Merry * Fixed the size of the FunctionDependent5 field in the 31*d3c7b9a0SKenneth D. Merry * MPI2_DEFAULT_REPLY structure. 32*d3c7b9a0SKenneth D. Merry * 12-18-07 02.00.05 Bumped MPI2_HEADER_VERSION_UNIT. 33*d3c7b9a0SKenneth D. Merry * Removed the MPI-defined Fault Codes and extended the 34*d3c7b9a0SKenneth D. Merry * product specific codes up to 0xEFFF. 35*d3c7b9a0SKenneth D. Merry * Added a sixth key value for the WriteSequence register 36*d3c7b9a0SKenneth D. Merry * and changed the flush value to 0x0. 37*d3c7b9a0SKenneth D. Merry * Added message function codes for Diagnostic Buffer Post 38*d3c7b9a0SKenneth D. Merry * and Diagnsotic Release. 39*d3c7b9a0SKenneth D. Merry * New IOCStatus define: MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED 40*d3c7b9a0SKenneth D. Merry * Moved MPI2_VERSION_UNION from mpi2_ioc.h. 41*d3c7b9a0SKenneth D. Merry * 02-29-08 02.00.06 Bumped MPI2_HEADER_VERSION_UNIT. 42*d3c7b9a0SKenneth D. Merry * 03-03-08 02.00.07 Bumped MPI2_HEADER_VERSION_UNIT. 43*d3c7b9a0SKenneth D. Merry * 05-21-08 02.00.08 Bumped MPI2_HEADER_VERSION_UNIT. 44*d3c7b9a0SKenneth D. Merry * Added #defines for marking a reply descriptor as unused. 45*d3c7b9a0SKenneth D. Merry * 06-27-08 02.00.09 Bumped MPI2_HEADER_VERSION_UNIT. 46*d3c7b9a0SKenneth D. Merry * 10-02-08 02.00.10 Bumped MPI2_HEADER_VERSION_UNIT. 47*d3c7b9a0SKenneth D. Merry * Moved LUN field defines from mpi2_init.h. 48*d3c7b9a0SKenneth D. Merry * 01-19-09 02.00.11 Bumped MPI2_HEADER_VERSION_UNIT. 49*d3c7b9a0SKenneth D. Merry * 05-06-09 02.00.12 Bumped MPI2_HEADER_VERSION_UNIT. 50*d3c7b9a0SKenneth D. Merry * In all request and reply descriptors, replaced VF_ID 51*d3c7b9a0SKenneth D. Merry * field with MSIxIndex field. 52*d3c7b9a0SKenneth D. Merry * Removed DevHandle field from 53*d3c7b9a0SKenneth D. Merry * MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR and made those 54*d3c7b9a0SKenneth D. Merry * bytes reserved. 55*d3c7b9a0SKenneth D. Merry * Added RAID Accelerator functionality. 56*d3c7b9a0SKenneth D. Merry * 07-30-09 02.00.13 Bumped MPI2_HEADER_VERSION_UNIT. 57*d3c7b9a0SKenneth D. Merry * 10-28-09 02.00.14 Bumped MPI2_HEADER_VERSION_UNIT. 58*d3c7b9a0SKenneth D. Merry * Added MSI-x index mask and shift for Reply Post Host 59*d3c7b9a0SKenneth D. Merry * Index register. 60*d3c7b9a0SKenneth D. Merry * Added function code for Host Based Discovery Action. 61*d3c7b9a0SKenneth D. Merry * -------------------------------------------------------------------------- 62*d3c7b9a0SKenneth D. Merry */ 63*d3c7b9a0SKenneth D. Merry 64*d3c7b9a0SKenneth D. Merry #ifndef MPI2_H 65*d3c7b9a0SKenneth D. Merry #define MPI2_H 66*d3c7b9a0SKenneth D. Merry 67*d3c7b9a0SKenneth D. Merry 68*d3c7b9a0SKenneth D. Merry /***************************************************************************** 69*d3c7b9a0SKenneth D. Merry * 70*d3c7b9a0SKenneth D. Merry * MPI Version Definitions 71*d3c7b9a0SKenneth D. Merry * 72*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 73*d3c7b9a0SKenneth D. Merry 74*d3c7b9a0SKenneth D. Merry #define MPI2_VERSION_MAJOR (0x02) 75*d3c7b9a0SKenneth D. Merry #define MPI2_VERSION_MINOR (0x00) 76*d3c7b9a0SKenneth D. Merry #define MPI2_VERSION_MAJOR_MASK (0xFF00) 77*d3c7b9a0SKenneth D. Merry #define MPI2_VERSION_MAJOR_SHIFT (8) 78*d3c7b9a0SKenneth D. Merry #define MPI2_VERSION_MINOR_MASK (0x00FF) 79*d3c7b9a0SKenneth D. Merry #define MPI2_VERSION_MINOR_SHIFT (0) 80*d3c7b9a0SKenneth D. Merry #define MPI2_VERSION ((MPI2_VERSION_MAJOR << MPI2_VERSION_MAJOR_SHIFT) | \ 81*d3c7b9a0SKenneth D. Merry MPI2_VERSION_MINOR) 82*d3c7b9a0SKenneth D. Merry 83*d3c7b9a0SKenneth D. Merry #define MPI2_VERSION_02_00 (0x0200) 84*d3c7b9a0SKenneth D. Merry 85*d3c7b9a0SKenneth D. Merry /* versioning for this MPI header set */ 86*d3c7b9a0SKenneth D. Merry #define MPI2_HEADER_VERSION_UNIT (0x0E) 87*d3c7b9a0SKenneth D. Merry #define MPI2_HEADER_VERSION_DEV (0x00) 88*d3c7b9a0SKenneth D. Merry #define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00) 89*d3c7b9a0SKenneth D. Merry #define MPI2_HEADER_VERSION_UNIT_SHIFT (8) 90*d3c7b9a0SKenneth D. Merry #define MPI2_HEADER_VERSION_DEV_MASK (0x00FF) 91*d3c7b9a0SKenneth D. Merry #define MPI2_HEADER_VERSION_DEV_SHIFT (0) 92*d3c7b9a0SKenneth D. Merry #define MPI2_HEADER_VERSION ((MPI2_HEADER_VERSION_UNIT << 8) | MPI2_HEADER_VERSION_DEV) 93*d3c7b9a0SKenneth D. Merry 94*d3c7b9a0SKenneth D. Merry 95*d3c7b9a0SKenneth D. Merry /***************************************************************************** 96*d3c7b9a0SKenneth D. Merry * 97*d3c7b9a0SKenneth D. Merry * IOC State Definitions 98*d3c7b9a0SKenneth D. Merry * 99*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 100*d3c7b9a0SKenneth D. Merry 101*d3c7b9a0SKenneth D. Merry #define MPI2_IOC_STATE_RESET (0x00000000) 102*d3c7b9a0SKenneth D. Merry #define MPI2_IOC_STATE_READY (0x10000000) 103*d3c7b9a0SKenneth D. Merry #define MPI2_IOC_STATE_OPERATIONAL (0x20000000) 104*d3c7b9a0SKenneth D. Merry #define MPI2_IOC_STATE_FAULT (0x40000000) 105*d3c7b9a0SKenneth D. Merry 106*d3c7b9a0SKenneth D. Merry #define MPI2_IOC_STATE_MASK (0xF0000000) 107*d3c7b9a0SKenneth D. Merry #define MPI2_IOC_STATE_SHIFT (28) 108*d3c7b9a0SKenneth D. Merry 109*d3c7b9a0SKenneth D. Merry /* Fault state range for prodcut specific codes */ 110*d3c7b9a0SKenneth D. Merry #define MPI2_FAULT_PRODUCT_SPECIFIC_MIN (0x0000) 111*d3c7b9a0SKenneth D. Merry #define MPI2_FAULT_PRODUCT_SPECIFIC_MAX (0xEFFF) 112*d3c7b9a0SKenneth D. Merry 113*d3c7b9a0SKenneth D. Merry 114*d3c7b9a0SKenneth D. Merry /***************************************************************************** 115*d3c7b9a0SKenneth D. Merry * 116*d3c7b9a0SKenneth D. Merry * System Interface Register Definitions 117*d3c7b9a0SKenneth D. Merry * 118*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 119*d3c7b9a0SKenneth D. Merry 120*d3c7b9a0SKenneth D. Merry typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS 121*d3c7b9a0SKenneth D. Merry { 122*d3c7b9a0SKenneth D. Merry U32 Doorbell; /* 0x00 */ 123*d3c7b9a0SKenneth D. Merry U32 WriteSequence; /* 0x04 */ 124*d3c7b9a0SKenneth D. Merry U32 HostDiagnostic; /* 0x08 */ 125*d3c7b9a0SKenneth D. Merry U32 Reserved1; /* 0x0C */ 126*d3c7b9a0SKenneth D. Merry U32 DiagRWData; /* 0x10 */ 127*d3c7b9a0SKenneth D. Merry U32 DiagRWAddressLow; /* 0x14 */ 128*d3c7b9a0SKenneth D. Merry U32 DiagRWAddressHigh; /* 0x18 */ 129*d3c7b9a0SKenneth D. Merry U32 Reserved2[5]; /* 0x1C */ 130*d3c7b9a0SKenneth D. Merry U32 HostInterruptStatus; /* 0x30 */ 131*d3c7b9a0SKenneth D. Merry U32 HostInterruptMask; /* 0x34 */ 132*d3c7b9a0SKenneth D. Merry U32 DCRData; /* 0x38 */ 133*d3c7b9a0SKenneth D. Merry U32 DCRAddress; /* 0x3C */ 134*d3c7b9a0SKenneth D. Merry U32 Reserved3[2]; /* 0x40 */ 135*d3c7b9a0SKenneth D. Merry U32 ReplyFreeHostIndex; /* 0x48 */ 136*d3c7b9a0SKenneth D. Merry U32 Reserved4[8]; /* 0x4C */ 137*d3c7b9a0SKenneth D. Merry U32 ReplyPostHostIndex; /* 0x6C */ 138*d3c7b9a0SKenneth D. Merry U32 Reserved5; /* 0x70 */ 139*d3c7b9a0SKenneth D. Merry U32 HCBSize; /* 0x74 */ 140*d3c7b9a0SKenneth D. Merry U32 HCBAddressLow; /* 0x78 */ 141*d3c7b9a0SKenneth D. Merry U32 HCBAddressHigh; /* 0x7C */ 142*d3c7b9a0SKenneth D. Merry U32 Reserved6[16]; /* 0x80 */ 143*d3c7b9a0SKenneth D. Merry U32 RequestDescriptorPostLow; /* 0xC0 */ 144*d3c7b9a0SKenneth D. Merry U32 RequestDescriptorPostHigh; /* 0xC4 */ 145*d3c7b9a0SKenneth D. Merry U32 Reserved7[14]; /* 0xC8 */ 146*d3c7b9a0SKenneth D. Merry } MPI2_SYSTEM_INTERFACE_REGS, MPI2_POINTER PTR_MPI2_SYSTEM_INTERFACE_REGS, 147*d3c7b9a0SKenneth D. Merry Mpi2SystemInterfaceRegs_t, MPI2_POINTER pMpi2SystemInterfaceRegs_t; 148*d3c7b9a0SKenneth D. Merry 149*d3c7b9a0SKenneth D. Merry /* 150*d3c7b9a0SKenneth D. Merry * Defines for working with the Doorbell register. 151*d3c7b9a0SKenneth D. Merry */ 152*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_OFFSET (0x00000000) 153*d3c7b9a0SKenneth D. Merry 154*d3c7b9a0SKenneth D. Merry /* IOC --> System values */ 155*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_USED (0x08000000) 156*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_WHO_INIT_MASK (0x07000000) 157*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_WHO_INIT_SHIFT (24) 158*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_FAULT_CODE_MASK (0x0000FFFF) 159*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_DATA_MASK (0x0000FFFF) 160*d3c7b9a0SKenneth D. Merry 161*d3c7b9a0SKenneth D. Merry /* System --> IOC values */ 162*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_FUNCTION_MASK (0xFF000000) 163*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_FUNCTION_SHIFT (24) 164*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_ADD_DWORDS_MASK (0x00FF0000) 165*d3c7b9a0SKenneth D. Merry #define MPI2_DOORBELL_ADD_DWORDS_SHIFT (16) 166*d3c7b9a0SKenneth D. Merry 167*d3c7b9a0SKenneth D. Merry 168*d3c7b9a0SKenneth D. Merry /* 169*d3c7b9a0SKenneth D. Merry * Defines for the WriteSequence register 170*d3c7b9a0SKenneth D. Merry */ 171*d3c7b9a0SKenneth D. Merry #define MPI2_WRITE_SEQUENCE_OFFSET (0x00000004) 172*d3c7b9a0SKenneth D. Merry #define MPI2_WRSEQ_KEY_VALUE_MASK (0x0000000F) 173*d3c7b9a0SKenneth D. Merry #define MPI2_WRSEQ_FLUSH_KEY_VALUE (0x0) 174*d3c7b9a0SKenneth D. Merry #define MPI2_WRSEQ_1ST_KEY_VALUE (0xF) 175*d3c7b9a0SKenneth D. Merry #define MPI2_WRSEQ_2ND_KEY_VALUE (0x4) 176*d3c7b9a0SKenneth D. Merry #define MPI2_WRSEQ_3RD_KEY_VALUE (0xB) 177*d3c7b9a0SKenneth D. Merry #define MPI2_WRSEQ_4TH_KEY_VALUE (0x2) 178*d3c7b9a0SKenneth D. Merry #define MPI2_WRSEQ_5TH_KEY_VALUE (0x7) 179*d3c7b9a0SKenneth D. Merry #define MPI2_WRSEQ_6TH_KEY_VALUE (0xD) 180*d3c7b9a0SKenneth D. Merry 181*d3c7b9a0SKenneth D. Merry /* 182*d3c7b9a0SKenneth D. Merry * Defines for the HostDiagnostic register 183*d3c7b9a0SKenneth D. Merry */ 184*d3c7b9a0SKenneth D. Merry #define MPI2_HOST_DIAGNOSTIC_OFFSET (0x00000008) 185*d3c7b9a0SKenneth D. Merry 186*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_BOOT_DEVICE_SELECT_MASK (0x00001800) 187*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_BOOT_DEVICE_SELECT_DEFAULT (0x00000000) 188*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_BOOT_DEVICE_SELECT_HCDW (0x00000800) 189*d3c7b9a0SKenneth D. Merry 190*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_CLEAR_FLASH_BAD_SIG (0x00000400) 191*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_FORCE_HCB_ON_RESET (0x00000200) 192*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_HCB_MODE (0x00000100) 193*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_DIAG_WRITE_ENABLE (0x00000080) 194*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_FLASH_BAD_SIG (0x00000040) 195*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_RESET_HISTORY (0x00000020) 196*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_DIAG_RW_ENABLE (0x00000010) 197*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_RESET_ADAPTER (0x00000004) 198*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_HOLD_IOC_RESET (0x00000002) 199*d3c7b9a0SKenneth D. Merry 200*d3c7b9a0SKenneth D. Merry /* 201*d3c7b9a0SKenneth D. Merry * Offsets for DiagRWData and address 202*d3c7b9a0SKenneth D. Merry */ 203*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_RW_DATA_OFFSET (0x00000010) 204*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_RW_ADDRESS_LOW_OFFSET (0x00000014) 205*d3c7b9a0SKenneth D. Merry #define MPI2_DIAG_RW_ADDRESS_HIGH_OFFSET (0x00000018) 206*d3c7b9a0SKenneth D. Merry 207*d3c7b9a0SKenneth D. Merry /* 208*d3c7b9a0SKenneth D. Merry * Defines for the HostInterruptStatus register 209*d3c7b9a0SKenneth D. Merry */ 210*d3c7b9a0SKenneth D. Merry #define MPI2_HOST_INTERRUPT_STATUS_OFFSET (0x00000030) 211*d3c7b9a0SKenneth D. Merry #define MPI2_HIS_SYS2IOC_DB_STATUS (0x80000000) 212*d3c7b9a0SKenneth D. Merry #define MPI2_HIS_IOP_DOORBELL_STATUS MPI2_HIS_SYS2IOC_DB_STATUS 213*d3c7b9a0SKenneth D. Merry #define MPI2_HIS_RESET_IRQ_STATUS (0x40000000) 214*d3c7b9a0SKenneth D. Merry #define MPI2_HIS_REPLY_DESCRIPTOR_INTERRUPT (0x00000008) 215*d3c7b9a0SKenneth D. Merry #define MPI2_HIS_IOC2SYS_DB_STATUS (0x00000001) 216*d3c7b9a0SKenneth D. Merry #define MPI2_HIS_DOORBELL_INTERRUPT MPI2_HIS_IOC2SYS_DB_STATUS 217*d3c7b9a0SKenneth D. Merry 218*d3c7b9a0SKenneth D. Merry /* 219*d3c7b9a0SKenneth D. Merry * Defines for the HostInterruptMask register 220*d3c7b9a0SKenneth D. Merry */ 221*d3c7b9a0SKenneth D. Merry #define MPI2_HOST_INTERRUPT_MASK_OFFSET (0x00000034) 222*d3c7b9a0SKenneth D. Merry #define MPI2_HIM_RESET_IRQ_MASK (0x40000000) 223*d3c7b9a0SKenneth D. Merry #define MPI2_HIM_REPLY_INT_MASK (0x00000008) 224*d3c7b9a0SKenneth D. Merry #define MPI2_HIM_RIM MPI2_HIM_REPLY_INT_MASK 225*d3c7b9a0SKenneth D. Merry #define MPI2_HIM_IOC2SYS_DB_MASK (0x00000001) 226*d3c7b9a0SKenneth D. Merry #define MPI2_HIM_DIM MPI2_HIM_IOC2SYS_DB_MASK 227*d3c7b9a0SKenneth D. Merry 228*d3c7b9a0SKenneth D. Merry /* 229*d3c7b9a0SKenneth D. Merry * Offsets for DCRData and address 230*d3c7b9a0SKenneth D. Merry */ 231*d3c7b9a0SKenneth D. Merry #define MPI2_DCR_DATA_OFFSET (0x00000038) 232*d3c7b9a0SKenneth D. Merry #define MPI2_DCR_ADDRESS_OFFSET (0x0000003C) 233*d3c7b9a0SKenneth D. Merry 234*d3c7b9a0SKenneth D. Merry /* 235*d3c7b9a0SKenneth D. Merry * Offset for the Reply Free Queue 236*d3c7b9a0SKenneth D. Merry */ 237*d3c7b9a0SKenneth D. Merry #define MPI2_REPLY_FREE_HOST_INDEX_OFFSET (0x00000048) 238*d3c7b9a0SKenneth D. Merry 239*d3c7b9a0SKenneth D. Merry /* 240*d3c7b9a0SKenneth D. Merry * Defines for the Reply Descriptor Post Queue 241*d3c7b9a0SKenneth D. Merry */ 242*d3c7b9a0SKenneth D. Merry #define MPI2_REPLY_POST_HOST_INDEX_OFFSET (0x0000006C) 243*d3c7b9a0SKenneth D. Merry #define MPI2_REPLY_POST_HOST_INDEX_MASK (0x00FFFFFF) 244*d3c7b9a0SKenneth D. Merry #define MPI2_RPHI_MSIX_INDEX_MASK (0xFF000000) 245*d3c7b9a0SKenneth D. Merry #define MPI2_RPHI_MSIX_INDEX_SHIFT (24) 246*d3c7b9a0SKenneth D. Merry 247*d3c7b9a0SKenneth D. Merry /* 248*d3c7b9a0SKenneth D. Merry * Defines for the HCBSize and address 249*d3c7b9a0SKenneth D. Merry */ 250*d3c7b9a0SKenneth D. Merry #define MPI2_HCB_SIZE_OFFSET (0x00000074) 251*d3c7b9a0SKenneth D. Merry #define MPI2_HCB_SIZE_SIZE_MASK (0xFFFFF000) 252*d3c7b9a0SKenneth D. Merry #define MPI2_HCB_SIZE_HCB_ENABLE (0x00000001) 253*d3c7b9a0SKenneth D. Merry 254*d3c7b9a0SKenneth D. Merry #define MPI2_HCB_ADDRESS_LOW_OFFSET (0x00000078) 255*d3c7b9a0SKenneth D. Merry #define MPI2_HCB_ADDRESS_HIGH_OFFSET (0x0000007C) 256*d3c7b9a0SKenneth D. Merry 257*d3c7b9a0SKenneth D. Merry /* 258*d3c7b9a0SKenneth D. Merry * Offsets for the Request Queue 259*d3c7b9a0SKenneth D. Merry */ 260*d3c7b9a0SKenneth D. Merry #define MPI2_REQUEST_DESCRIPTOR_POST_LOW_OFFSET (0x000000C0) 261*d3c7b9a0SKenneth D. Merry #define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET (0x000000C4) 262*d3c7b9a0SKenneth D. Merry 263*d3c7b9a0SKenneth D. Merry 264*d3c7b9a0SKenneth D. Merry /***************************************************************************** 265*d3c7b9a0SKenneth D. Merry * 266*d3c7b9a0SKenneth D. Merry * Message Descriptors 267*d3c7b9a0SKenneth D. Merry * 268*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 269*d3c7b9a0SKenneth D. Merry 270*d3c7b9a0SKenneth D. Merry /* Request Descriptors */ 271*d3c7b9a0SKenneth D. Merry 272*d3c7b9a0SKenneth D. Merry /* Default Request Descriptor */ 273*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR 274*d3c7b9a0SKenneth D. Merry { 275*d3c7b9a0SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 276*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 277*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 278*d3c7b9a0SKenneth D. Merry U16 LMID; /* 0x04 */ 279*d3c7b9a0SKenneth D. Merry U16 DescriptorTypeDependent; /* 0x06 */ 280*d3c7b9a0SKenneth D. Merry } MPI2_DEFAULT_REQUEST_DESCRIPTOR, 281*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_DEFAULT_REQUEST_DESCRIPTOR, 282*d3c7b9a0SKenneth D. Merry Mpi2DefaultRequestDescriptor_t, MPI2_POINTER pMpi2DefaultRequestDescriptor_t; 283*d3c7b9a0SKenneth D. Merry 284*d3c7b9a0SKenneth D. Merry /* defines for the RequestFlags field */ 285*d3c7b9a0SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_TYPE_MASK (0x0E) 286*d3c7b9a0SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO (0x00) 287*d3c7b9a0SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_SCSI_TARGET (0x02) 288*d3c7b9a0SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY (0x06) 289*d3c7b9a0SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE (0x08) 290*d3c7b9a0SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_RAID_ACCELERATOR (0x0A) 291*d3c7b9a0SKenneth D. Merry 292*d3c7b9a0SKenneth D. Merry #define MPI2_REQ_DESCRIPT_FLAGS_IOC_FIFO_MARKER (0x01) 293*d3c7b9a0SKenneth D. Merry 294*d3c7b9a0SKenneth D. Merry 295*d3c7b9a0SKenneth D. Merry /* High Priority Request Descriptor */ 296*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR 297*d3c7b9a0SKenneth D. Merry { 298*d3c7b9a0SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 299*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 300*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 301*d3c7b9a0SKenneth D. Merry U16 LMID; /* 0x04 */ 302*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x06 */ 303*d3c7b9a0SKenneth D. Merry } MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR, 304*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR, 305*d3c7b9a0SKenneth D. Merry Mpi2HighPriorityRequestDescriptor_t, 306*d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2HighPriorityRequestDescriptor_t; 307*d3c7b9a0SKenneth D. Merry 308*d3c7b9a0SKenneth D. Merry 309*d3c7b9a0SKenneth D. Merry /* SCSI IO Request Descriptor */ 310*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR 311*d3c7b9a0SKenneth D. Merry { 312*d3c7b9a0SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 313*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 314*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 315*d3c7b9a0SKenneth D. Merry U16 LMID; /* 0x04 */ 316*d3c7b9a0SKenneth D. Merry U16 DevHandle; /* 0x06 */ 317*d3c7b9a0SKenneth D. Merry } MPI2_SCSI_IO_REQUEST_DESCRIPTOR, 318*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST_DESCRIPTOR, 319*d3c7b9a0SKenneth D. Merry Mpi2SCSIIORequestDescriptor_t, MPI2_POINTER pMpi2SCSIIORequestDescriptor_t; 320*d3c7b9a0SKenneth D. Merry 321*d3c7b9a0SKenneth D. Merry 322*d3c7b9a0SKenneth D. Merry /* SCSI Target Request Descriptor */ 323*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR 324*d3c7b9a0SKenneth D. Merry { 325*d3c7b9a0SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 326*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 327*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 328*d3c7b9a0SKenneth D. Merry U16 LMID; /* 0x04 */ 329*d3c7b9a0SKenneth D. Merry U16 IoIndex; /* 0x06 */ 330*d3c7b9a0SKenneth D. Merry } MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR, 331*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR, 332*d3c7b9a0SKenneth D. Merry Mpi2SCSITargetRequestDescriptor_t, 333*d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2SCSITargetRequestDescriptor_t; 334*d3c7b9a0SKenneth D. Merry 335*d3c7b9a0SKenneth D. Merry 336*d3c7b9a0SKenneth D. Merry /* RAID Accelerator Request Descriptor */ 337*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR 338*d3c7b9a0SKenneth D. Merry { 339*d3c7b9a0SKenneth D. Merry U8 RequestFlags; /* 0x00 */ 340*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 341*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 342*d3c7b9a0SKenneth D. Merry U16 LMID; /* 0x04 */ 343*d3c7b9a0SKenneth D. Merry U16 Reserved; /* 0x06 */ 344*d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR, 345*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR, 346*d3c7b9a0SKenneth D. Merry Mpi2RAIDAcceleratorRequestDescriptor_t, 347*d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2RAIDAcceleratorRequestDescriptor_t; 348*d3c7b9a0SKenneth D. Merry 349*d3c7b9a0SKenneth D. Merry 350*d3c7b9a0SKenneth D. Merry /* union of Request Descriptors */ 351*d3c7b9a0SKenneth D. Merry typedef union _MPI2_REQUEST_DESCRIPTOR_UNION 352*d3c7b9a0SKenneth D. Merry { 353*d3c7b9a0SKenneth D. Merry MPI2_DEFAULT_REQUEST_DESCRIPTOR Default; 354*d3c7b9a0SKenneth D. Merry MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR HighPriority; 355*d3c7b9a0SKenneth D. Merry MPI2_SCSI_IO_REQUEST_DESCRIPTOR SCSIIO; 356*d3c7b9a0SKenneth D. Merry MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR SCSITarget; 357*d3c7b9a0SKenneth D. Merry MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR RAIDAccelerator; 358*d3c7b9a0SKenneth D. Merry U64 Words; 359*d3c7b9a0SKenneth D. Merry } MPI2_REQUEST_DESCRIPTOR_UNION, MPI2_POINTER PTR_MPI2_REQUEST_DESCRIPTOR_UNION, 360*d3c7b9a0SKenneth D. Merry Mpi2RequestDescriptorUnion_t, MPI2_POINTER pMpi2RequestDescriptorUnion_t; 361*d3c7b9a0SKenneth D. Merry 362*d3c7b9a0SKenneth D. Merry 363*d3c7b9a0SKenneth D. Merry /* Reply Descriptors */ 364*d3c7b9a0SKenneth D. Merry 365*d3c7b9a0SKenneth D. Merry /* Default Reply Descriptor */ 366*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_DEFAULT_REPLY_DESCRIPTOR 367*d3c7b9a0SKenneth D. Merry { 368*d3c7b9a0SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 369*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 370*d3c7b9a0SKenneth D. Merry U16 DescriptorTypeDependent1; /* 0x02 */ 371*d3c7b9a0SKenneth D. Merry U32 DescriptorTypeDependent2; /* 0x04 */ 372*d3c7b9a0SKenneth D. Merry } MPI2_DEFAULT_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_DEFAULT_REPLY_DESCRIPTOR, 373*d3c7b9a0SKenneth D. Merry Mpi2DefaultReplyDescriptor_t, MPI2_POINTER pMpi2DefaultReplyDescriptor_t; 374*d3c7b9a0SKenneth D. Merry 375*d3c7b9a0SKenneth D. Merry /* defines for the ReplyFlags field */ 376*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK (0x0F) 377*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS (0x00) 378*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_ADDRESS_REPLY (0x01) 379*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_TARGETASSIST_SUCCESS (0x02) 380*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_TARGET_COMMAND_BUFFER (0x03) 381*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_RAID_ACCELERATOR_SUCCESS (0x05) 382*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_FLAGS_UNUSED (0x0F) 383*d3c7b9a0SKenneth D. Merry 384*d3c7b9a0SKenneth D. Merry /* values for marking a reply descriptor as unused */ 385*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_UNUSED_WORD0_MARK (0xFFFFFFFF) 386*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_UNUSED_WORD1_MARK (0xFFFFFFFF) 387*d3c7b9a0SKenneth D. Merry 388*d3c7b9a0SKenneth D. Merry /* Address Reply Descriptor */ 389*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_ADDRESS_REPLY_DESCRIPTOR 390*d3c7b9a0SKenneth D. Merry { 391*d3c7b9a0SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 392*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 393*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 394*d3c7b9a0SKenneth D. Merry U32 ReplyFrameAddress; /* 0x04 */ 395*d3c7b9a0SKenneth D. Merry } MPI2_ADDRESS_REPLY_DESCRIPTOR, MPI2_POINTER PTR_MPI2_ADDRESS_REPLY_DESCRIPTOR, 396*d3c7b9a0SKenneth D. Merry Mpi2AddressReplyDescriptor_t, MPI2_POINTER pMpi2AddressReplyDescriptor_t; 397*d3c7b9a0SKenneth D. Merry 398*d3c7b9a0SKenneth D. Merry #define MPI2_ADDRESS_REPLY_SMID_INVALID (0x00) 399*d3c7b9a0SKenneth D. Merry 400*d3c7b9a0SKenneth D. Merry 401*d3c7b9a0SKenneth D. Merry /* SCSI IO Success Reply Descriptor */ 402*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR 403*d3c7b9a0SKenneth D. Merry { 404*d3c7b9a0SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 405*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 406*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 407*d3c7b9a0SKenneth D. Merry U16 TaskTag; /* 0x04 */ 408*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x06 */ 409*d3c7b9a0SKenneth D. Merry } MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 410*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR, 411*d3c7b9a0SKenneth D. Merry Mpi2SCSIIOSuccessReplyDescriptor_t, 412*d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2SCSIIOSuccessReplyDescriptor_t; 413*d3c7b9a0SKenneth D. Merry 414*d3c7b9a0SKenneth D. Merry 415*d3c7b9a0SKenneth D. Merry /* TargetAssist Success Reply Descriptor */ 416*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR 417*d3c7b9a0SKenneth D. Merry { 418*d3c7b9a0SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 419*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 420*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 421*d3c7b9a0SKenneth D. Merry U8 SequenceNumber; /* 0x04 */ 422*d3c7b9a0SKenneth D. Merry U8 Reserved1; /* 0x05 */ 423*d3c7b9a0SKenneth D. Merry U16 IoIndex; /* 0x06 */ 424*d3c7b9a0SKenneth D. Merry } MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR, 425*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR, 426*d3c7b9a0SKenneth D. Merry Mpi2TargetAssistSuccessReplyDescriptor_t, 427*d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2TargetAssistSuccessReplyDescriptor_t; 428*d3c7b9a0SKenneth D. Merry 429*d3c7b9a0SKenneth D. Merry 430*d3c7b9a0SKenneth D. Merry /* Target Command Buffer Reply Descriptor */ 431*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR 432*d3c7b9a0SKenneth D. Merry { 433*d3c7b9a0SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 434*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 435*d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x02 */ 436*d3c7b9a0SKenneth D. Merry U8 Flags; /* 0x03 */ 437*d3c7b9a0SKenneth D. Merry U16 InitiatorDevHandle; /* 0x04 */ 438*d3c7b9a0SKenneth D. Merry U16 IoIndex; /* 0x06 */ 439*d3c7b9a0SKenneth D. Merry } MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR, 440*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR, 441*d3c7b9a0SKenneth D. Merry Mpi2TargetCommandBufferReplyDescriptor_t, 442*d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2TargetCommandBufferReplyDescriptor_t; 443*d3c7b9a0SKenneth D. Merry 444*d3c7b9a0SKenneth D. Merry /* defines for Flags field */ 445*d3c7b9a0SKenneth D. Merry #define MPI2_RPY_DESCRIPT_TCB_FLAGS_PHYNUM_MASK (0x3F) 446*d3c7b9a0SKenneth D. Merry 447*d3c7b9a0SKenneth D. Merry 448*d3c7b9a0SKenneth D. Merry /* RAID Accelerator Success Reply Descriptor */ 449*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR 450*d3c7b9a0SKenneth D. Merry { 451*d3c7b9a0SKenneth D. Merry U8 ReplyFlags; /* 0x00 */ 452*d3c7b9a0SKenneth D. Merry U8 MSIxIndex; /* 0x01 */ 453*d3c7b9a0SKenneth D. Merry U16 SMID; /* 0x02 */ 454*d3c7b9a0SKenneth D. Merry U32 Reserved; /* 0x04 */ 455*d3c7b9a0SKenneth D. Merry } MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR, 456*d3c7b9a0SKenneth D. Merry MPI2_POINTER PTR_MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR, 457*d3c7b9a0SKenneth D. Merry Mpi2RAIDAcceleratorSuccessReplyDescriptor_t, 458*d3c7b9a0SKenneth D. Merry MPI2_POINTER pMpi2RAIDAcceleratorSuccessReplyDescriptor_t; 459*d3c7b9a0SKenneth D. Merry 460*d3c7b9a0SKenneth D. Merry 461*d3c7b9a0SKenneth D. Merry /* union of Reply Descriptors */ 462*d3c7b9a0SKenneth D. Merry typedef union _MPI2_REPLY_DESCRIPTORS_UNION 463*d3c7b9a0SKenneth D. Merry { 464*d3c7b9a0SKenneth D. Merry MPI2_DEFAULT_REPLY_DESCRIPTOR Default; 465*d3c7b9a0SKenneth D. Merry MPI2_ADDRESS_REPLY_DESCRIPTOR AddressReply; 466*d3c7b9a0SKenneth D. Merry MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR SCSIIOSuccess; 467*d3c7b9a0SKenneth D. Merry MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR TargetAssistSuccess; 468*d3c7b9a0SKenneth D. Merry MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR TargetCommandBuffer; 469*d3c7b9a0SKenneth D. Merry MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR RAIDAcceleratorSuccess; 470*d3c7b9a0SKenneth D. Merry U64 Words; 471*d3c7b9a0SKenneth D. Merry } MPI2_REPLY_DESCRIPTORS_UNION, MPI2_POINTER PTR_MPI2_REPLY_DESCRIPTORS_UNION, 472*d3c7b9a0SKenneth D. Merry Mpi2ReplyDescriptorsUnion_t, MPI2_POINTER pMpi2ReplyDescriptorsUnion_t; 473*d3c7b9a0SKenneth D. Merry 474*d3c7b9a0SKenneth D. Merry 475*d3c7b9a0SKenneth D. Merry 476*d3c7b9a0SKenneth D. Merry /***************************************************************************** 477*d3c7b9a0SKenneth D. Merry * 478*d3c7b9a0SKenneth D. Merry * Message Functions 479*d3c7b9a0SKenneth D. Merry * 0x80 -> 0x8F reserved for private message use per product 480*d3c7b9a0SKenneth D. Merry * 481*d3c7b9a0SKenneth D. Merry * 482*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 483*d3c7b9a0SKenneth D. Merry 484*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_SCSI_IO_REQUEST (0x00) /* SCSI IO */ 485*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_SCSI_TASK_MGMT (0x01) /* SCSI Task Management */ 486*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_IOC_INIT (0x02) /* IOC Init */ 487*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_IOC_FACTS (0x03) /* IOC Facts */ 488*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_CONFIG (0x04) /* Configuration */ 489*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_PORT_FACTS (0x05) /* Port Facts */ 490*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_PORT_ENABLE (0x06) /* Port Enable */ 491*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_EVENT_NOTIFICATION (0x07) /* Event Notification */ 492*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_EVENT_ACK (0x08) /* Event Acknowledge */ 493*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_FW_DOWNLOAD (0x09) /* FW Download */ 494*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_TARGET_ASSIST (0x0B) /* Target Assist */ 495*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_TARGET_STATUS_SEND (0x0C) /* Target Status Send */ 496*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_TARGET_MODE_ABORT (0x0D) /* Target Mode Abort */ 497*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_FW_UPLOAD (0x12) /* FW Upload */ 498*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_RAID_ACTION (0x15) /* RAID Action */ 499*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_RAID_SCSI_IO_PASSTHROUGH (0x16) /* SCSI IO RAID Passthrough */ 500*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_TOOLBOX (0x17) /* Toolbox */ 501*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_SCSI_ENCLOSURE_PROCESSOR (0x18) /* SCSI Enclosure Processor */ 502*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_SMP_PASSTHROUGH (0x1A) /* SMP Passthrough */ 503*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_SAS_IO_UNIT_CONTROL (0x1B) /* SAS IO Unit Control */ 504*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_SATA_PASSTHROUGH (0x1C) /* SATA Passthrough */ 505*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_DIAG_BUFFER_POST (0x1D) /* Diagnostic Buffer Post */ 506*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_DIAG_RELEASE (0x1E) /* Diagnostic Release */ 507*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_TARGET_CMD_BUF_BASE_POST (0x24) /* Target Command Buffer Post Base */ 508*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_TARGET_CMD_BUF_LIST_POST (0x25) /* Target Command Buffer Post List */ 509*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_RAID_ACCELERATOR (0x2C) /* RAID Accelerator */ 510*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_HOST_BASED_DISCOVERY_ACTION (0x2F) /* Host Based Discovery Action */ 511*d3c7b9a0SKenneth D. Merry 512*d3c7b9a0SKenneth D. Merry 513*d3c7b9a0SKenneth D. Merry 514*d3c7b9a0SKenneth D. Merry /* Doorbell functions */ 515*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET (0x40) 516*d3c7b9a0SKenneth D. Merry #define MPI2_FUNCTION_HANDSHAKE (0x42) 517*d3c7b9a0SKenneth D. Merry 518*d3c7b9a0SKenneth D. Merry 519*d3c7b9a0SKenneth D. Merry /***************************************************************************** 520*d3c7b9a0SKenneth D. Merry * 521*d3c7b9a0SKenneth D. Merry * IOC Status Values 522*d3c7b9a0SKenneth D. Merry * 523*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 524*d3c7b9a0SKenneth D. Merry 525*d3c7b9a0SKenneth D. Merry /* mask for IOCStatus status value */ 526*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_MASK (0x7FFF) 527*d3c7b9a0SKenneth D. Merry 528*d3c7b9a0SKenneth D. Merry /**************************************************************************** 529*d3c7b9a0SKenneth D. Merry * Common IOCStatus values for all replies 530*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 531*d3c7b9a0SKenneth D. Merry 532*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SUCCESS (0x0000) 533*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_FUNCTION (0x0001) 534*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_BUSY (0x0002) 535*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_SGL (0x0003) 536*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_INTERNAL_ERROR (0x0004) 537*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_VPID (0x0005) 538*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES (0x0006) 539*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_FIELD (0x0007) 540*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_INVALID_STATE (0x0008) 541*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED (0x0009) 542*d3c7b9a0SKenneth D. Merry 543*d3c7b9a0SKenneth D. Merry /**************************************************************************** 544*d3c7b9a0SKenneth D. Merry * Config IOCStatus values 545*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 546*d3c7b9a0SKenneth D. Merry 547*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_INVALID_ACTION (0x0020) 548*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_INVALID_TYPE (0x0021) 549*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_INVALID_PAGE (0x0022) 550*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_INVALID_DATA (0x0023) 551*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS (0x0024) 552*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_CONFIG_CANT_COMMIT (0x0025) 553*d3c7b9a0SKenneth D. Merry 554*d3c7b9a0SKenneth D. Merry /**************************************************************************** 555*d3c7b9a0SKenneth D. Merry * SCSI IO Reply 556*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 557*d3c7b9a0SKenneth D. Merry 558*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR (0x0040) 559*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE (0x0042) 560*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE (0x0043) 561*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_DATA_OVERRUN (0x0044) 562*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN (0x0045) 563*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR (0x0046) 564*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR (0x0047) 565*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_TASK_TERMINATED (0x0048) 566*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH (0x0049) 567*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED (0x004A) 568*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_IOC_TERMINATED (0x004B) 569*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SCSI_EXT_TERMINATED (0x004C) 570*d3c7b9a0SKenneth D. Merry 571*d3c7b9a0SKenneth D. Merry /**************************************************************************** 572*d3c7b9a0SKenneth D. Merry * For use by SCSI Initiator and SCSI Target end-to-end data protection 573*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 574*d3c7b9a0SKenneth D. Merry 575*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_EEDP_GUARD_ERROR (0x004D) 576*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR (0x004E) 577*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR (0x004F) 578*d3c7b9a0SKenneth D. Merry 579*d3c7b9a0SKenneth D. Merry /**************************************************************************** 580*d3c7b9a0SKenneth D. Merry * SCSI Target values 581*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 582*d3c7b9a0SKenneth D. Merry 583*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX (0x0062) 584*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_ABORTED (0x0063) 585*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE (0x0064) 586*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_NO_CONNECTION (0x0065) 587*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH (0x006A) 588*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR (0x006D) 589*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA (0x006E) 590*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT (0x006F) 591*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT (0x0070) 592*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_TARGET_NAK_RECEIVED (0x0071) 593*d3c7b9a0SKenneth D. Merry 594*d3c7b9a0SKenneth D. Merry /**************************************************************************** 595*d3c7b9a0SKenneth D. Merry * Serial Attached SCSI values 596*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 597*d3c7b9a0SKenneth D. Merry 598*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED (0x0090) 599*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN (0x0091) 600*d3c7b9a0SKenneth D. Merry 601*d3c7b9a0SKenneth D. Merry /**************************************************************************** 602*d3c7b9a0SKenneth D. Merry * Diagnostic Buffer Post / Diagnostic Release values 603*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 604*d3c7b9a0SKenneth D. Merry 605*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED (0x00A0) 606*d3c7b9a0SKenneth D. Merry 607*d3c7b9a0SKenneth D. Merry /**************************************************************************** 608*d3c7b9a0SKenneth D. Merry * RAID Accelerator values 609*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 610*d3c7b9a0SKenneth D. Merry 611*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_RAID_ACCEL_ERROR (0x00B0) 612*d3c7b9a0SKenneth D. Merry 613*d3c7b9a0SKenneth D. Merry /**************************************************************************** 614*d3c7b9a0SKenneth D. Merry * IOCStatus flag to indicate that log info is available 615*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 616*d3c7b9a0SKenneth D. Merry 617*d3c7b9a0SKenneth D. Merry #define MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE (0x8000) 618*d3c7b9a0SKenneth D. Merry 619*d3c7b9a0SKenneth D. Merry /**************************************************************************** 620*d3c7b9a0SKenneth D. Merry * IOCLogInfo Types 621*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 622*d3c7b9a0SKenneth D. Merry 623*d3c7b9a0SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_MASK (0xF0000000) 624*d3c7b9a0SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_SHIFT (28) 625*d3c7b9a0SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_NONE (0x0) 626*d3c7b9a0SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_SCSI (0x1) 627*d3c7b9a0SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_FC (0x2) 628*d3c7b9a0SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_SAS (0x3) 629*d3c7b9a0SKenneth D. Merry #define MPI2_IOCLOGINFO_TYPE_ISCSI (0x4) 630*d3c7b9a0SKenneth D. Merry #define MPI2_IOCLOGINFO_LOG_DATA_MASK (0x0FFFFFFF) 631*d3c7b9a0SKenneth D. Merry 632*d3c7b9a0SKenneth D. Merry 633*d3c7b9a0SKenneth D. Merry /***************************************************************************** 634*d3c7b9a0SKenneth D. Merry * 635*d3c7b9a0SKenneth D. Merry * Standard Message Structures 636*d3c7b9a0SKenneth D. Merry * 637*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 638*d3c7b9a0SKenneth D. Merry 639*d3c7b9a0SKenneth D. Merry /**************************************************************************** 640*d3c7b9a0SKenneth D. Merry * Request Message Header for all request messages 641*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 642*d3c7b9a0SKenneth D. Merry 643*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_REQUEST_HEADER 644*d3c7b9a0SKenneth D. Merry { 645*d3c7b9a0SKenneth D. Merry U16 FunctionDependent1; /* 0x00 */ 646*d3c7b9a0SKenneth D. Merry U8 ChainOffset; /* 0x02 */ 647*d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 648*d3c7b9a0SKenneth D. Merry U16 FunctionDependent2; /* 0x04 */ 649*d3c7b9a0SKenneth D. Merry U8 FunctionDependent3; /* 0x06 */ 650*d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 651*d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 652*d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 653*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x0A */ 654*d3c7b9a0SKenneth D. Merry } MPI2_REQUEST_HEADER, MPI2_POINTER PTR_MPI2_REQUEST_HEADER, 655*d3c7b9a0SKenneth D. Merry MPI2RequestHeader_t, MPI2_POINTER pMPI2RequestHeader_t; 656*d3c7b9a0SKenneth D. Merry 657*d3c7b9a0SKenneth D. Merry 658*d3c7b9a0SKenneth D. Merry /**************************************************************************** 659*d3c7b9a0SKenneth D. Merry * Default Reply 660*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 661*d3c7b9a0SKenneth D. Merry 662*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_DEFAULT_REPLY 663*d3c7b9a0SKenneth D. Merry { 664*d3c7b9a0SKenneth D. Merry U16 FunctionDependent1; /* 0x00 */ 665*d3c7b9a0SKenneth D. Merry U8 MsgLength; /* 0x02 */ 666*d3c7b9a0SKenneth D. Merry U8 Function; /* 0x03 */ 667*d3c7b9a0SKenneth D. Merry U16 FunctionDependent2; /* 0x04 */ 668*d3c7b9a0SKenneth D. Merry U8 FunctionDependent3; /* 0x06 */ 669*d3c7b9a0SKenneth D. Merry U8 MsgFlags; /* 0x07 */ 670*d3c7b9a0SKenneth D. Merry U8 VP_ID; /* 0x08 */ 671*d3c7b9a0SKenneth D. Merry U8 VF_ID; /* 0x09 */ 672*d3c7b9a0SKenneth D. Merry U16 Reserved1; /* 0x0A */ 673*d3c7b9a0SKenneth D. Merry U16 FunctionDependent5; /* 0x0C */ 674*d3c7b9a0SKenneth D. Merry U16 IOCStatus; /* 0x0E */ 675*d3c7b9a0SKenneth D. Merry U32 IOCLogInfo; /* 0x10 */ 676*d3c7b9a0SKenneth D. Merry } MPI2_DEFAULT_REPLY, MPI2_POINTER PTR_MPI2_DEFAULT_REPLY, 677*d3c7b9a0SKenneth D. Merry MPI2DefaultReply_t, MPI2_POINTER pMPI2DefaultReply_t; 678*d3c7b9a0SKenneth D. Merry 679*d3c7b9a0SKenneth D. Merry 680*d3c7b9a0SKenneth D. Merry /* common version structure/union used in messages and configuration pages */ 681*d3c7b9a0SKenneth D. Merry 682*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_VERSION_STRUCT 683*d3c7b9a0SKenneth D. Merry { 684*d3c7b9a0SKenneth D. Merry U8 Dev; /* 0x00 */ 685*d3c7b9a0SKenneth D. Merry U8 Unit; /* 0x01 */ 686*d3c7b9a0SKenneth D. Merry U8 Minor; /* 0x02 */ 687*d3c7b9a0SKenneth D. Merry U8 Major; /* 0x03 */ 688*d3c7b9a0SKenneth D. Merry } MPI2_VERSION_STRUCT; 689*d3c7b9a0SKenneth D. Merry 690*d3c7b9a0SKenneth D. Merry typedef union _MPI2_VERSION_UNION 691*d3c7b9a0SKenneth D. Merry { 692*d3c7b9a0SKenneth D. Merry MPI2_VERSION_STRUCT Struct; 693*d3c7b9a0SKenneth D. Merry U32 Word; 694*d3c7b9a0SKenneth D. Merry } MPI2_VERSION_UNION; 695*d3c7b9a0SKenneth D. Merry 696*d3c7b9a0SKenneth D. Merry 697*d3c7b9a0SKenneth D. Merry /* LUN field defines, common to many structures */ 698*d3c7b9a0SKenneth D. Merry #define MPI2_LUN_FIRST_LEVEL_ADDRESSING (0x0000FFFF) 699*d3c7b9a0SKenneth D. Merry #define MPI2_LUN_SECOND_LEVEL_ADDRESSING (0xFFFF0000) 700*d3c7b9a0SKenneth D. Merry #define MPI2_LUN_THIRD_LEVEL_ADDRESSING (0x0000FFFF) 701*d3c7b9a0SKenneth D. Merry #define MPI2_LUN_FOURTH_LEVEL_ADDRESSING (0xFFFF0000) 702*d3c7b9a0SKenneth D. Merry #define MPI2_LUN_LEVEL_1_WORD (0xFF00) 703*d3c7b9a0SKenneth D. Merry #define MPI2_LUN_LEVEL_1_DWORD (0x0000FF00) 704*d3c7b9a0SKenneth D. Merry 705*d3c7b9a0SKenneth D. Merry 706*d3c7b9a0SKenneth D. Merry /***************************************************************************** 707*d3c7b9a0SKenneth D. Merry * 708*d3c7b9a0SKenneth D. Merry * Fusion-MPT MPI Scatter Gather Elements 709*d3c7b9a0SKenneth D. Merry * 710*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 711*d3c7b9a0SKenneth D. Merry 712*d3c7b9a0SKenneth D. Merry /**************************************************************************** 713*d3c7b9a0SKenneth D. Merry * MPI Simple Element structures 714*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 715*d3c7b9a0SKenneth D. Merry 716*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_SIMPLE32 717*d3c7b9a0SKenneth D. Merry { 718*d3c7b9a0SKenneth D. Merry U32 FlagsLength; 719*d3c7b9a0SKenneth D. Merry U32 Address; 720*d3c7b9a0SKenneth D. Merry } MPI2_SGE_SIMPLE32, MPI2_POINTER PTR_MPI2_SGE_SIMPLE32, 721*d3c7b9a0SKenneth D. Merry Mpi2SGESimple32_t, MPI2_POINTER pMpi2SGESimple32_t; 722*d3c7b9a0SKenneth D. Merry 723*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_SIMPLE64 724*d3c7b9a0SKenneth D. Merry { 725*d3c7b9a0SKenneth D. Merry U32 FlagsLength; 726*d3c7b9a0SKenneth D. Merry U64 Address; 727*d3c7b9a0SKenneth D. Merry } MPI2_SGE_SIMPLE64, MPI2_POINTER PTR_MPI2_SGE_SIMPLE64, 728*d3c7b9a0SKenneth D. Merry Mpi2SGESimple64_t, MPI2_POINTER pMpi2SGESimple64_t; 729*d3c7b9a0SKenneth D. Merry 730*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_SIMPLE_UNION 731*d3c7b9a0SKenneth D. Merry { 732*d3c7b9a0SKenneth D. Merry U32 FlagsLength; 733*d3c7b9a0SKenneth D. Merry union 734*d3c7b9a0SKenneth D. Merry { 735*d3c7b9a0SKenneth D. Merry U32 Address32; 736*d3c7b9a0SKenneth D. Merry U64 Address64; 737*d3c7b9a0SKenneth D. Merry } u; 738*d3c7b9a0SKenneth D. Merry } MPI2_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_SGE_SIMPLE_UNION, 739*d3c7b9a0SKenneth D. Merry Mpi2SGESimpleUnion_t, MPI2_POINTER pMpi2SGESimpleUnion_t; 740*d3c7b9a0SKenneth D. Merry 741*d3c7b9a0SKenneth D. Merry 742*d3c7b9a0SKenneth D. Merry /**************************************************************************** 743*d3c7b9a0SKenneth D. Merry * MPI Chain Element structures 744*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 745*d3c7b9a0SKenneth D. Merry 746*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_CHAIN32 747*d3c7b9a0SKenneth D. Merry { 748*d3c7b9a0SKenneth D. Merry U16 Length; 749*d3c7b9a0SKenneth D. Merry U8 NextChainOffset; 750*d3c7b9a0SKenneth D. Merry U8 Flags; 751*d3c7b9a0SKenneth D. Merry U32 Address; 752*d3c7b9a0SKenneth D. Merry } MPI2_SGE_CHAIN32, MPI2_POINTER PTR_MPI2_SGE_CHAIN32, 753*d3c7b9a0SKenneth D. Merry Mpi2SGEChain32_t, MPI2_POINTER pMpi2SGEChain32_t; 754*d3c7b9a0SKenneth D. Merry 755*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_CHAIN64 756*d3c7b9a0SKenneth D. Merry { 757*d3c7b9a0SKenneth D. Merry U16 Length; 758*d3c7b9a0SKenneth D. Merry U8 NextChainOffset; 759*d3c7b9a0SKenneth D. Merry U8 Flags; 760*d3c7b9a0SKenneth D. Merry U64 Address; 761*d3c7b9a0SKenneth D. Merry } MPI2_SGE_CHAIN64, MPI2_POINTER PTR_MPI2_SGE_CHAIN64, 762*d3c7b9a0SKenneth D. Merry Mpi2SGEChain64_t, MPI2_POINTER pMpi2SGEChain64_t; 763*d3c7b9a0SKenneth D. Merry 764*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_CHAIN_UNION 765*d3c7b9a0SKenneth D. Merry { 766*d3c7b9a0SKenneth D. Merry U16 Length; 767*d3c7b9a0SKenneth D. Merry U8 NextChainOffset; 768*d3c7b9a0SKenneth D. Merry U8 Flags; 769*d3c7b9a0SKenneth D. Merry union 770*d3c7b9a0SKenneth D. Merry { 771*d3c7b9a0SKenneth D. Merry U32 Address32; 772*d3c7b9a0SKenneth D. Merry U64 Address64; 773*d3c7b9a0SKenneth D. Merry } u; 774*d3c7b9a0SKenneth D. Merry } MPI2_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_SGE_CHAIN_UNION, 775*d3c7b9a0SKenneth D. Merry Mpi2SGEChainUnion_t, MPI2_POINTER pMpi2SGEChainUnion_t; 776*d3c7b9a0SKenneth D. Merry 777*d3c7b9a0SKenneth D. Merry 778*d3c7b9a0SKenneth D. Merry /**************************************************************************** 779*d3c7b9a0SKenneth D. Merry * MPI Transaction Context Element structures 780*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 781*d3c7b9a0SKenneth D. Merry 782*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION32 783*d3c7b9a0SKenneth D. Merry { 784*d3c7b9a0SKenneth D. Merry U8 Reserved; 785*d3c7b9a0SKenneth D. Merry U8 ContextSize; 786*d3c7b9a0SKenneth D. Merry U8 DetailsLength; 787*d3c7b9a0SKenneth D. Merry U8 Flags; 788*d3c7b9a0SKenneth D. Merry U32 TransactionContext[1]; 789*d3c7b9a0SKenneth D. Merry U32 TransactionDetails[1]; 790*d3c7b9a0SKenneth D. Merry } MPI2_SGE_TRANSACTION32, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION32, 791*d3c7b9a0SKenneth D. Merry Mpi2SGETransaction32_t, MPI2_POINTER pMpi2SGETransaction32_t; 792*d3c7b9a0SKenneth D. Merry 793*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION64 794*d3c7b9a0SKenneth D. Merry { 795*d3c7b9a0SKenneth D. Merry U8 Reserved; 796*d3c7b9a0SKenneth D. Merry U8 ContextSize; 797*d3c7b9a0SKenneth D. Merry U8 DetailsLength; 798*d3c7b9a0SKenneth D. Merry U8 Flags; 799*d3c7b9a0SKenneth D. Merry U32 TransactionContext[2]; 800*d3c7b9a0SKenneth D. Merry U32 TransactionDetails[1]; 801*d3c7b9a0SKenneth D. Merry } MPI2_SGE_TRANSACTION64, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION64, 802*d3c7b9a0SKenneth D. Merry Mpi2SGETransaction64_t, MPI2_POINTER pMpi2SGETransaction64_t; 803*d3c7b9a0SKenneth D. Merry 804*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION96 805*d3c7b9a0SKenneth D. Merry { 806*d3c7b9a0SKenneth D. Merry U8 Reserved; 807*d3c7b9a0SKenneth D. Merry U8 ContextSize; 808*d3c7b9a0SKenneth D. Merry U8 DetailsLength; 809*d3c7b9a0SKenneth D. Merry U8 Flags; 810*d3c7b9a0SKenneth D. Merry U32 TransactionContext[3]; 811*d3c7b9a0SKenneth D. Merry U32 TransactionDetails[1]; 812*d3c7b9a0SKenneth D. Merry } MPI2_SGE_TRANSACTION96, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION96, 813*d3c7b9a0SKenneth D. Merry Mpi2SGETransaction96_t, MPI2_POINTER pMpi2SGETransaction96_t; 814*d3c7b9a0SKenneth D. Merry 815*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION128 816*d3c7b9a0SKenneth D. Merry { 817*d3c7b9a0SKenneth D. Merry U8 Reserved; 818*d3c7b9a0SKenneth D. Merry U8 ContextSize; 819*d3c7b9a0SKenneth D. Merry U8 DetailsLength; 820*d3c7b9a0SKenneth D. Merry U8 Flags; 821*d3c7b9a0SKenneth D. Merry U32 TransactionContext[4]; 822*d3c7b9a0SKenneth D. Merry U32 TransactionDetails[1]; 823*d3c7b9a0SKenneth D. Merry } MPI2_SGE_TRANSACTION128, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION128, 824*d3c7b9a0SKenneth D. Merry Mpi2SGETransaction_t128, MPI2_POINTER pMpi2SGETransaction_t128; 825*d3c7b9a0SKenneth D. Merry 826*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_TRANSACTION_UNION 827*d3c7b9a0SKenneth D. Merry { 828*d3c7b9a0SKenneth D. Merry U8 Reserved; 829*d3c7b9a0SKenneth D. Merry U8 ContextSize; 830*d3c7b9a0SKenneth D. Merry U8 DetailsLength; 831*d3c7b9a0SKenneth D. Merry U8 Flags; 832*d3c7b9a0SKenneth D. Merry union 833*d3c7b9a0SKenneth D. Merry { 834*d3c7b9a0SKenneth D. Merry U32 TransactionContext32[1]; 835*d3c7b9a0SKenneth D. Merry U32 TransactionContext64[2]; 836*d3c7b9a0SKenneth D. Merry U32 TransactionContext96[3]; 837*d3c7b9a0SKenneth D. Merry U32 TransactionContext128[4]; 838*d3c7b9a0SKenneth D. Merry } u; 839*d3c7b9a0SKenneth D. Merry U32 TransactionDetails[1]; 840*d3c7b9a0SKenneth D. Merry } MPI2_SGE_TRANSACTION_UNION, MPI2_POINTER PTR_MPI2_SGE_TRANSACTION_UNION, 841*d3c7b9a0SKenneth D. Merry Mpi2SGETransactionUnion_t, MPI2_POINTER pMpi2SGETransactionUnion_t; 842*d3c7b9a0SKenneth D. Merry 843*d3c7b9a0SKenneth D. Merry 844*d3c7b9a0SKenneth D. Merry /**************************************************************************** 845*d3c7b9a0SKenneth D. Merry * MPI SGE union for IO SGL's 846*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 847*d3c7b9a0SKenneth D. Merry 848*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_MPI_SGE_IO_UNION 849*d3c7b9a0SKenneth D. Merry { 850*d3c7b9a0SKenneth D. Merry union 851*d3c7b9a0SKenneth D. Merry { 852*d3c7b9a0SKenneth D. Merry MPI2_SGE_SIMPLE_UNION Simple; 853*d3c7b9a0SKenneth D. Merry MPI2_SGE_CHAIN_UNION Chain; 854*d3c7b9a0SKenneth D. Merry } u; 855*d3c7b9a0SKenneth D. Merry } MPI2_MPI_SGE_IO_UNION, MPI2_POINTER PTR_MPI2_MPI_SGE_IO_UNION, 856*d3c7b9a0SKenneth D. Merry Mpi2MpiSGEIOUnion_t, MPI2_POINTER pMpi2MpiSGEIOUnion_t; 857*d3c7b9a0SKenneth D. Merry 858*d3c7b9a0SKenneth D. Merry 859*d3c7b9a0SKenneth D. Merry /**************************************************************************** 860*d3c7b9a0SKenneth D. Merry * MPI SGE union for SGL's with Simple and Transaction elements 861*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 862*d3c7b9a0SKenneth D. Merry 863*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SGE_TRANS_SIMPLE_UNION 864*d3c7b9a0SKenneth D. Merry { 865*d3c7b9a0SKenneth D. Merry union 866*d3c7b9a0SKenneth D. Merry { 867*d3c7b9a0SKenneth D. Merry MPI2_SGE_SIMPLE_UNION Simple; 868*d3c7b9a0SKenneth D. Merry MPI2_SGE_TRANSACTION_UNION Transaction; 869*d3c7b9a0SKenneth D. Merry } u; 870*d3c7b9a0SKenneth D. Merry } MPI2_SGE_TRANS_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_SGE_TRANS_SIMPLE_UNION, 871*d3c7b9a0SKenneth D. Merry Mpi2SGETransSimpleUnion_t, MPI2_POINTER pMpi2SGETransSimpleUnion_t; 872*d3c7b9a0SKenneth D. Merry 873*d3c7b9a0SKenneth D. Merry 874*d3c7b9a0SKenneth D. Merry /**************************************************************************** 875*d3c7b9a0SKenneth D. Merry * All MPI SGE types union 876*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 877*d3c7b9a0SKenneth D. Merry 878*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_MPI_SGE_UNION 879*d3c7b9a0SKenneth D. Merry { 880*d3c7b9a0SKenneth D. Merry union 881*d3c7b9a0SKenneth D. Merry { 882*d3c7b9a0SKenneth D. Merry MPI2_SGE_SIMPLE_UNION Simple; 883*d3c7b9a0SKenneth D. Merry MPI2_SGE_CHAIN_UNION Chain; 884*d3c7b9a0SKenneth D. Merry MPI2_SGE_TRANSACTION_UNION Transaction; 885*d3c7b9a0SKenneth D. Merry } u; 886*d3c7b9a0SKenneth D. Merry } MPI2_MPI_SGE_UNION, MPI2_POINTER PTR_MPI2_MPI_SGE_UNION, 887*d3c7b9a0SKenneth D. Merry Mpi2MpiSgeUnion_t, MPI2_POINTER pMpi2MpiSgeUnion_t; 888*d3c7b9a0SKenneth D. Merry 889*d3c7b9a0SKenneth D. Merry 890*d3c7b9a0SKenneth D. Merry /**************************************************************************** 891*d3c7b9a0SKenneth D. Merry * MPI SGE field definition and masks 892*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 893*d3c7b9a0SKenneth D. Merry 894*d3c7b9a0SKenneth D. Merry /* Flags field bit definitions */ 895*d3c7b9a0SKenneth D. Merry 896*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_LAST_ELEMENT (0x80) 897*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_END_OF_BUFFER (0x40) 898*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_ELEMENT_TYPE_MASK (0x30) 899*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_LOCAL_ADDRESS (0x08) 900*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_DIRECTION (0x04) 901*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_ADDRESS_SIZE (0x02) 902*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_END_OF_LIST (0x01) 903*d3c7b9a0SKenneth D. Merry 904*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_SHIFT (24) 905*d3c7b9a0SKenneth D. Merry 906*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_LENGTH_MASK (0x00FFFFFF) 907*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_CHAIN_LENGTH_MASK (0x0000FFFF) 908*d3c7b9a0SKenneth D. Merry 909*d3c7b9a0SKenneth D. Merry /* Element Type */ 910*d3c7b9a0SKenneth D. Merry 911*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_TRANSACTION_ELEMENT (0x00) 912*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_SIMPLE_ELEMENT (0x10) 913*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_CHAIN_ELEMENT (0x30) 914*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_ELEMENT_MASK (0x30) 915*d3c7b9a0SKenneth D. Merry 916*d3c7b9a0SKenneth D. Merry /* Address location */ 917*d3c7b9a0SKenneth D. Merry 918*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_SYSTEM_ADDRESS (0x00) 919*d3c7b9a0SKenneth D. Merry 920*d3c7b9a0SKenneth D. Merry /* Direction */ 921*d3c7b9a0SKenneth D. Merry 922*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_IOC_TO_HOST (0x00) 923*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_HOST_TO_IOC (0x04) 924*d3c7b9a0SKenneth D. Merry 925*d3c7b9a0SKenneth D. Merry /* Address Size */ 926*d3c7b9a0SKenneth D. Merry 927*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_32_BIT_ADDRESSING (0x00) 928*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_64_BIT_ADDRESSING (0x02) 929*d3c7b9a0SKenneth D. Merry 930*d3c7b9a0SKenneth D. Merry /* Context Size */ 931*d3c7b9a0SKenneth D. Merry 932*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_32_BIT_CONTEXT (0x00) 933*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_64_BIT_CONTEXT (0x02) 934*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_96_BIT_CONTEXT (0x04) 935*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_FLAGS_128_BIT_CONTEXT (0x06) 936*d3c7b9a0SKenneth D. Merry 937*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_CHAIN_OFFSET_MASK (0x00FF0000) 938*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_CHAIN_OFFSET_SHIFT (16) 939*d3c7b9a0SKenneth D. Merry 940*d3c7b9a0SKenneth D. Merry /**************************************************************************** 941*d3c7b9a0SKenneth D. Merry * MPI SGE operation Macros 942*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 943*d3c7b9a0SKenneth D. Merry 944*d3c7b9a0SKenneth D. Merry /* SIMPLE FlagsLength manipulations... */ 945*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_SET_FLAGS(f) ((U32)(f) << MPI2_SGE_FLAGS_SHIFT) 946*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_GET_FLAGS(f) (((f) & ~MPI2_SGE_LENGTH_MASK) >> MPI2_SGE_FLAGS_SHIFT) 947*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_LENGTH(f) ((f) & MPI2_SGE_LENGTH_MASK) 948*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_CHAIN_LENGTH(f) ((f) & MPI2_SGE_CHAIN_LENGTH_MASK) 949*d3c7b9a0SKenneth D. Merry 950*d3c7b9a0SKenneth D. Merry #define MPI2_SGE_SET_FLAGS_LENGTH(f,l) (MPI2_SGE_SET_FLAGS(f) | MPI2_SGE_LENGTH(l)) 951*d3c7b9a0SKenneth D. Merry 952*d3c7b9a0SKenneth D. Merry #define MPI2_pSGE_GET_FLAGS(psg) MPI2_SGE_GET_FLAGS((psg)->FlagsLength) 953*d3c7b9a0SKenneth D. Merry #define MPI2_pSGE_GET_LENGTH(psg) MPI2_SGE_LENGTH((psg)->FlagsLength) 954*d3c7b9a0SKenneth D. Merry #define MPI2_pSGE_SET_FLAGS_LENGTH(psg,f,l) (psg)->FlagsLength = MPI2_SGE_SET_FLAGS_LENGTH(f,l) 955*d3c7b9a0SKenneth D. Merry 956*d3c7b9a0SKenneth D. Merry /* CAUTION - The following are READ-MODIFY-WRITE! */ 957*d3c7b9a0SKenneth D. Merry #define MPI2_pSGE_SET_FLAGS(psg,f) (psg)->FlagsLength |= MPI2_SGE_SET_FLAGS(f) 958*d3c7b9a0SKenneth D. Merry #define MPI2_pSGE_SET_LENGTH(psg,l) (psg)->FlagsLength |= MPI2_SGE_LENGTH(l) 959*d3c7b9a0SKenneth D. Merry 960*d3c7b9a0SKenneth D. Merry #define MPI2_GET_CHAIN_OFFSET(x) ((x & MPI2_SGE_CHAIN_OFFSET_MASK) >> MPI2_SGE_CHAIN_OFFSET_SHIFT) 961*d3c7b9a0SKenneth D. Merry 962*d3c7b9a0SKenneth D. Merry 963*d3c7b9a0SKenneth D. Merry /***************************************************************************** 964*d3c7b9a0SKenneth D. Merry * 965*d3c7b9a0SKenneth D. Merry * Fusion-MPT IEEE Scatter Gather Elements 966*d3c7b9a0SKenneth D. Merry * 967*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 968*d3c7b9a0SKenneth D. Merry 969*d3c7b9a0SKenneth D. Merry /**************************************************************************** 970*d3c7b9a0SKenneth D. Merry * IEEE Simple Element structures 971*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 972*d3c7b9a0SKenneth D. Merry 973*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_IEEE_SGE_SIMPLE32 974*d3c7b9a0SKenneth D. Merry { 975*d3c7b9a0SKenneth D. Merry U32 Address; 976*d3c7b9a0SKenneth D. Merry U32 FlagsLength; 977*d3c7b9a0SKenneth D. Merry } MPI2_IEEE_SGE_SIMPLE32, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE32, 978*d3c7b9a0SKenneth D. Merry Mpi2IeeeSgeSimple32_t, MPI2_POINTER pMpi2IeeeSgeSimple32_t; 979*d3c7b9a0SKenneth D. Merry 980*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_IEEE_SGE_SIMPLE64 981*d3c7b9a0SKenneth D. Merry { 982*d3c7b9a0SKenneth D. Merry U64 Address; 983*d3c7b9a0SKenneth D. Merry U32 Length; 984*d3c7b9a0SKenneth D. Merry U16 Reserved1; 985*d3c7b9a0SKenneth D. Merry U8 Reserved2; 986*d3c7b9a0SKenneth D. Merry U8 Flags; 987*d3c7b9a0SKenneth D. Merry } MPI2_IEEE_SGE_SIMPLE64, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE64, 988*d3c7b9a0SKenneth D. Merry Mpi2IeeeSgeSimple64_t, MPI2_POINTER pMpi2IeeeSgeSimple64_t; 989*d3c7b9a0SKenneth D. Merry 990*d3c7b9a0SKenneth D. Merry typedef union _MPI2_IEEE_SGE_SIMPLE_UNION 991*d3c7b9a0SKenneth D. Merry { 992*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE32 Simple32; 993*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE64 Simple64; 994*d3c7b9a0SKenneth D. Merry } MPI2_IEEE_SGE_SIMPLE_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_SIMPLE_UNION, 995*d3c7b9a0SKenneth D. Merry Mpi2IeeeSgeSimpleUnion_t, MPI2_POINTER pMpi2IeeeSgeSimpleUnion_t; 996*d3c7b9a0SKenneth D. Merry 997*d3c7b9a0SKenneth D. Merry 998*d3c7b9a0SKenneth D. Merry /**************************************************************************** 999*d3c7b9a0SKenneth D. Merry * IEEE Chain Element structures 1000*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1001*d3c7b9a0SKenneth D. Merry 1002*d3c7b9a0SKenneth D. Merry typedef MPI2_IEEE_SGE_SIMPLE32 MPI2_IEEE_SGE_CHAIN32; 1003*d3c7b9a0SKenneth D. Merry 1004*d3c7b9a0SKenneth D. Merry typedef MPI2_IEEE_SGE_SIMPLE64 MPI2_IEEE_SGE_CHAIN64; 1005*d3c7b9a0SKenneth D. Merry 1006*d3c7b9a0SKenneth D. Merry typedef union _MPI2_IEEE_SGE_CHAIN_UNION 1007*d3c7b9a0SKenneth D. Merry { 1008*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_CHAIN32 Chain32; 1009*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_CHAIN64 Chain64; 1010*d3c7b9a0SKenneth D. Merry } MPI2_IEEE_SGE_CHAIN_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_CHAIN_UNION, 1011*d3c7b9a0SKenneth D. Merry Mpi2IeeeSgeChainUnion_t, MPI2_POINTER pMpi2IeeeSgeChainUnion_t; 1012*d3c7b9a0SKenneth D. Merry 1013*d3c7b9a0SKenneth D. Merry 1014*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1015*d3c7b9a0SKenneth D. Merry * All IEEE SGE types union 1016*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1017*d3c7b9a0SKenneth D. Merry 1018*d3c7b9a0SKenneth D. Merry typedef struct _MPI2_IEEE_SGE_UNION 1019*d3c7b9a0SKenneth D. Merry { 1020*d3c7b9a0SKenneth D. Merry union 1021*d3c7b9a0SKenneth D. Merry { 1022*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE_UNION Simple; 1023*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_CHAIN_UNION Chain; 1024*d3c7b9a0SKenneth D. Merry } u; 1025*d3c7b9a0SKenneth D. Merry } MPI2_IEEE_SGE_UNION, MPI2_POINTER PTR_MPI2_IEEE_SGE_UNION, 1026*d3c7b9a0SKenneth D. Merry Mpi2IeeeSgeUnion_t, MPI2_POINTER pMpi2IeeeSgeUnion_t; 1027*d3c7b9a0SKenneth D. Merry 1028*d3c7b9a0SKenneth D. Merry 1029*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1030*d3c7b9a0SKenneth D. Merry * IEEE SGE field definitions and masks 1031*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1032*d3c7b9a0SKenneth D. Merry 1033*d3c7b9a0SKenneth D. Merry /* Flags field bit definitions */ 1034*d3c7b9a0SKenneth D. Merry 1035*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_ELEMENT_TYPE_MASK (0x80) 1036*d3c7b9a0SKenneth D. Merry 1037*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_SGE_FLAGS_SHIFT (24) 1038*d3c7b9a0SKenneth D. Merry 1039*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_SGE_LENGTH_MASK (0x00FFFFFF) 1040*d3c7b9a0SKenneth D. Merry 1041*d3c7b9a0SKenneth D. Merry /* Element Type */ 1042*d3c7b9a0SKenneth D. Merry 1043*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_SIMPLE_ELEMENT (0x00) 1044*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_CHAIN_ELEMENT (0x80) 1045*d3c7b9a0SKenneth D. Merry 1046*d3c7b9a0SKenneth D. Merry /* Data Location Address Space */ 1047*d3c7b9a0SKenneth D. Merry 1048*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_ADDR_MASK (0x03) 1049*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_SYSTEM_ADDR (0x00) 1050*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_IOCDDR_ADDR (0x01) 1051*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_IOCPLB_ADDR (0x02) 1052*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR (0x03) 1053*d3c7b9a0SKenneth D. Merry 1054*d3c7b9a0SKenneth D. Merry 1055*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1056*d3c7b9a0SKenneth D. Merry * IEEE SGE operation Macros 1057*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1058*d3c7b9a0SKenneth D. Merry 1059*d3c7b9a0SKenneth D. Merry /* SIMPLE FlagsLength manipulations... */ 1060*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_SGE_SET_FLAGS(f) ((U32)(f) << MPI2_IEEE32_SGE_FLAGS_SHIFT) 1061*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_SGE_GET_FLAGS(f) (((f) & ~MPI2_IEEE32_SGE_LENGTH_MASK) >> MPI2_IEEE32_SGE_FLAGS_SHIFT) 1062*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_SGE_LENGTH(f) ((f) & MPI2_IEEE32_SGE_LENGTH_MASK) 1063*d3c7b9a0SKenneth D. Merry 1064*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f, l) (MPI2_IEEE32_SGE_SET_FLAGS(f) | MPI2_IEEE32_SGE_LENGTH(l)) 1065*d3c7b9a0SKenneth D. Merry 1066*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_pSGE_GET_FLAGS(psg) MPI2_IEEE32_SGE_GET_FLAGS((psg)->FlagsLength) 1067*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_pSGE_GET_LENGTH(psg) MPI2_IEEE32_SGE_LENGTH((psg)->FlagsLength) 1068*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_pSGE_SET_FLAGS_LENGTH(psg,f,l) (psg)->FlagsLength = MPI2_IEEE32_SGE_SET_FLAGS_LENGTH(f,l) 1069*d3c7b9a0SKenneth D. Merry 1070*d3c7b9a0SKenneth D. Merry /* CAUTION - The following are READ-MODIFY-WRITE! */ 1071*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_pSGE_SET_FLAGS(psg,f) (psg)->FlagsLength |= MPI2_IEEE32_SGE_SET_FLAGS(f) 1072*d3c7b9a0SKenneth D. Merry #define MPI2_IEEE32_pSGE_SET_LENGTH(psg,l) (psg)->FlagsLength |= MPI2_IEEE32_SGE_LENGTH(l) 1073*d3c7b9a0SKenneth D. Merry 1074*d3c7b9a0SKenneth D. Merry 1075*d3c7b9a0SKenneth D. Merry 1076*d3c7b9a0SKenneth D. Merry 1077*d3c7b9a0SKenneth D. Merry /***************************************************************************** 1078*d3c7b9a0SKenneth D. Merry * 1079*d3c7b9a0SKenneth D. Merry * Fusion-MPT MPI/IEEE Scatter Gather Unions 1080*d3c7b9a0SKenneth D. Merry * 1081*d3c7b9a0SKenneth D. Merry *****************************************************************************/ 1082*d3c7b9a0SKenneth D. Merry 1083*d3c7b9a0SKenneth D. Merry typedef union _MPI2_SIMPLE_SGE_UNION 1084*d3c7b9a0SKenneth D. Merry { 1085*d3c7b9a0SKenneth D. Merry MPI2_SGE_SIMPLE_UNION MpiSimple; 1086*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; 1087*d3c7b9a0SKenneth D. Merry } MPI2_SIMPLE_SGE_UNION, MPI2_POINTER PTR_MPI2_SIMPLE_SGE_UNION, 1088*d3c7b9a0SKenneth D. Merry Mpi2SimpleSgeUntion_t, MPI2_POINTER pMpi2SimpleSgeUntion_t; 1089*d3c7b9a0SKenneth D. Merry 1090*d3c7b9a0SKenneth D. Merry 1091*d3c7b9a0SKenneth D. Merry typedef union _MPI2_SGE_IO_UNION 1092*d3c7b9a0SKenneth D. Merry { 1093*d3c7b9a0SKenneth D. Merry MPI2_SGE_SIMPLE_UNION MpiSimple; 1094*d3c7b9a0SKenneth D. Merry MPI2_SGE_CHAIN_UNION MpiChain; 1095*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; 1096*d3c7b9a0SKenneth D. Merry MPI2_IEEE_SGE_CHAIN_UNION IeeeChain; 1097*d3c7b9a0SKenneth D. Merry } MPI2_SGE_IO_UNION, MPI2_POINTER PTR_MPI2_SGE_IO_UNION, 1098*d3c7b9a0SKenneth D. Merry Mpi2SGEIOUnion_t, MPI2_POINTER pMpi2SGEIOUnion_t; 1099*d3c7b9a0SKenneth D. Merry 1100*d3c7b9a0SKenneth D. Merry 1101*d3c7b9a0SKenneth D. Merry /**************************************************************************** 1102*d3c7b9a0SKenneth D. Merry * 1103*d3c7b9a0SKenneth D. Merry * Values for SGLFlags field, used in many request messages with an SGL 1104*d3c7b9a0SKenneth D. Merry * 1105*d3c7b9a0SKenneth D. Merry ****************************************************************************/ 1106*d3c7b9a0SKenneth D. Merry 1107*d3c7b9a0SKenneth D. Merry /* values for MPI SGL Data Location Address Space subfield */ 1108*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_ADDRESS_SPACE_MASK (0x0C) 1109*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_SYSTEM_ADDRESS_SPACE (0x00) 1110*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_IOCDDR_ADDRESS_SPACE (0x04) 1111*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_IOCPLB_ADDRESS_SPACE (0x08) 1112*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_IOCPLBNTA_ADDRESS_SPACE (0x0C) 1113*d3c7b9a0SKenneth D. Merry /* values for SGL Type subfield */ 1114*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_SGL_TYPE_MASK (0x03) 1115*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_SGL_TYPE_MPI (0x00) 1116*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_SGL_TYPE_IEEE32 (0x01) 1117*d3c7b9a0SKenneth D. Merry #define MPI2_SGLFLAGS_SGL_TYPE_IEEE64 (0x02) 1118*d3c7b9a0SKenneth D. Merry 1119*d3c7b9a0SKenneth D. Merry 1120*d3c7b9a0SKenneth D. Merry #endif 1121*d3c7b9a0SKenneth D. Merry 1122