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