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