1*e351b826SPaolo Bonzini /*- 2*e351b826SPaolo Bonzini * Based on FreeBSD sys/dev/mpt/mpilib headers. 3*e351b826SPaolo Bonzini * 4*e351b826SPaolo Bonzini * Copyright (c) 2000-2010, LSI Logic Corporation and its contributors. 5*e351b826SPaolo Bonzini * All rights reserved. 6*e351b826SPaolo Bonzini * 7*e351b826SPaolo Bonzini * Redistribution and use in source and binary forms, with or without 8*e351b826SPaolo Bonzini * modification, are permitted provided that the following conditions are 9*e351b826SPaolo Bonzini * met: 10*e351b826SPaolo Bonzini * 1. Redistributions of source code must retain the above copyright 11*e351b826SPaolo Bonzini * notice, this list of conditions and the following disclaimer. 12*e351b826SPaolo Bonzini * 2. Redistributions in binary form must reproduce at minimum a disclaimer 13*e351b826SPaolo Bonzini * substantially similar to the "NO WARRANTY" disclaimer below 14*e351b826SPaolo Bonzini * ("Disclaimer") and any redistribution must be conditioned upon including 15*e351b826SPaolo Bonzini * a substantially similar Disclaimer requirement for further binary 16*e351b826SPaolo Bonzini * redistribution. 17*e351b826SPaolo Bonzini * 3. Neither the name of the LSI Logic Corporation nor the names of its 18*e351b826SPaolo Bonzini * contributors may be used to endorse or promote products derived from 19*e351b826SPaolo Bonzini * this software without specific prior written permission. 20*e351b826SPaolo Bonzini * 21*e351b826SPaolo Bonzini * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22*e351b826SPaolo Bonzini * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23*e351b826SPaolo Bonzini * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24*e351b826SPaolo Bonzini * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25*e351b826SPaolo Bonzini * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26*e351b826SPaolo Bonzini * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27*e351b826SPaolo Bonzini * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28*e351b826SPaolo Bonzini * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29*e351b826SPaolo Bonzini * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30*e351b826SPaolo Bonzini * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE COPYRIGHT 31*e351b826SPaolo Bonzini * OWNER OR CONTRIBUTOR IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32*e351b826SPaolo Bonzini */ 33*e351b826SPaolo Bonzini #ifndef MPI_H 34*e351b826SPaolo Bonzini #define MPI_H 35*e351b826SPaolo Bonzini 36*e351b826SPaolo Bonzini enum { 37*e351b826SPaolo Bonzini MPI_FUNCTION_SCSI_IO_REQUEST = 0x00, 38*e351b826SPaolo Bonzini MPI_FUNCTION_SCSI_TASK_MGMT = 0x01, 39*e351b826SPaolo Bonzini MPI_FUNCTION_IOC_INIT = 0x02, 40*e351b826SPaolo Bonzini MPI_FUNCTION_IOC_FACTS = 0x03, 41*e351b826SPaolo Bonzini MPI_FUNCTION_CONFIG = 0x04, 42*e351b826SPaolo Bonzini MPI_FUNCTION_PORT_FACTS = 0x05, 43*e351b826SPaolo Bonzini MPI_FUNCTION_PORT_ENABLE = 0x06, 44*e351b826SPaolo Bonzini MPI_FUNCTION_EVENT_NOTIFICATION = 0x07, 45*e351b826SPaolo Bonzini MPI_FUNCTION_EVENT_ACK = 0x08, 46*e351b826SPaolo Bonzini MPI_FUNCTION_FW_DOWNLOAD = 0x09, 47*e351b826SPaolo Bonzini MPI_FUNCTION_TARGET_CMD_BUFFER_POST = 0x0A, 48*e351b826SPaolo Bonzini MPI_FUNCTION_TARGET_ASSIST = 0x0B, 49*e351b826SPaolo Bonzini MPI_FUNCTION_TARGET_STATUS_SEND = 0x0C, 50*e351b826SPaolo Bonzini MPI_FUNCTION_TARGET_MODE_ABORT = 0x0D, 51*e351b826SPaolo Bonzini MPI_FUNCTION_FC_LINK_SRVC_BUF_POST = 0x0E, 52*e351b826SPaolo Bonzini MPI_FUNCTION_FC_LINK_SRVC_RSP = 0x0F, 53*e351b826SPaolo Bonzini MPI_FUNCTION_FC_EX_LINK_SRVC_SEND = 0x10, 54*e351b826SPaolo Bonzini MPI_FUNCTION_FC_ABORT = 0x11, 55*e351b826SPaolo Bonzini MPI_FUNCTION_FW_UPLOAD = 0x12, 56*e351b826SPaolo Bonzini MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND = 0x13, 57*e351b826SPaolo Bonzini MPI_FUNCTION_FC_PRIMITIVE_SEND = 0x14, 58*e351b826SPaolo Bonzini 59*e351b826SPaolo Bonzini MPI_FUNCTION_RAID_ACTION = 0x15, 60*e351b826SPaolo Bonzini MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH = 0x16, 61*e351b826SPaolo Bonzini 62*e351b826SPaolo Bonzini MPI_FUNCTION_TOOLBOX = 0x17, 63*e351b826SPaolo Bonzini 64*e351b826SPaolo Bonzini MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR = 0x18, 65*e351b826SPaolo Bonzini 66*e351b826SPaolo Bonzini MPI_FUNCTION_MAILBOX = 0x19, 67*e351b826SPaolo Bonzini 68*e351b826SPaolo Bonzini MPI_FUNCTION_SMP_PASSTHROUGH = 0x1A, 69*e351b826SPaolo Bonzini MPI_FUNCTION_SAS_IO_UNIT_CONTROL = 0x1B, 70*e351b826SPaolo Bonzini MPI_FUNCTION_SATA_PASSTHROUGH = 0x1C, 71*e351b826SPaolo Bonzini 72*e351b826SPaolo Bonzini MPI_FUNCTION_DIAG_BUFFER_POST = 0x1D, 73*e351b826SPaolo Bonzini MPI_FUNCTION_DIAG_RELEASE = 0x1E, 74*e351b826SPaolo Bonzini 75*e351b826SPaolo Bonzini MPI_FUNCTION_SCSI_IO_32 = 0x1F, 76*e351b826SPaolo Bonzini 77*e351b826SPaolo Bonzini MPI_FUNCTION_LAN_SEND = 0x20, 78*e351b826SPaolo Bonzini MPI_FUNCTION_LAN_RECEIVE = 0x21, 79*e351b826SPaolo Bonzini MPI_FUNCTION_LAN_RESET = 0x22, 80*e351b826SPaolo Bonzini 81*e351b826SPaolo Bonzini MPI_FUNCTION_TARGET_ASSIST_EXTENDED = 0x23, 82*e351b826SPaolo Bonzini MPI_FUNCTION_TARGET_CMD_BUF_BASE_POST = 0x24, 83*e351b826SPaolo Bonzini MPI_FUNCTION_TARGET_CMD_BUF_LIST_POST = 0x25, 84*e351b826SPaolo Bonzini 85*e351b826SPaolo Bonzini MPI_FUNCTION_INBAND_BUFFER_POST = 0x28, 86*e351b826SPaolo Bonzini MPI_FUNCTION_INBAND_SEND = 0x29, 87*e351b826SPaolo Bonzini MPI_FUNCTION_INBAND_RSP = 0x2A, 88*e351b826SPaolo Bonzini MPI_FUNCTION_INBAND_ABORT = 0x2B, 89*e351b826SPaolo Bonzini 90*e351b826SPaolo Bonzini MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET = 0x40, 91*e351b826SPaolo Bonzini MPI_FUNCTION_IO_UNIT_RESET = 0x41, 92*e351b826SPaolo Bonzini MPI_FUNCTION_HANDSHAKE = 0x42, 93*e351b826SPaolo Bonzini MPI_FUNCTION_REPLY_FRAME_REMOVAL = 0x43, 94*e351b826SPaolo Bonzini MPI_FUNCTION_HOST_PAGEBUF_ACCESS_CONTROL = 0x44, 95*e351b826SPaolo Bonzini }; 96*e351b826SPaolo Bonzini 97*e351b826SPaolo Bonzini /****************************************************************************/ 98*e351b826SPaolo Bonzini /* Registers */ 99*e351b826SPaolo Bonzini /****************************************************************************/ 100*e351b826SPaolo Bonzini 101*e351b826SPaolo Bonzini enum { 102*e351b826SPaolo Bonzini MPI_IOC_STATE_RESET = 0x00000000, 103*e351b826SPaolo Bonzini MPI_IOC_STATE_READY = 0x10000000, 104*e351b826SPaolo Bonzini MPI_IOC_STATE_OPERATIONAL = 0x20000000, 105*e351b826SPaolo Bonzini MPI_IOC_STATE_FAULT = 0x40000000, 106*e351b826SPaolo Bonzini 107*e351b826SPaolo Bonzini MPI_DOORBELL_OFFSET = 0x00000000, 108*e351b826SPaolo Bonzini MPI_DOORBELL_ACTIVE = 0x08000000, /* DoorbellUsed */ 109*e351b826SPaolo Bonzini MPI_DOORBELL_WHO_INIT_MASK = 0x07000000, 110*e351b826SPaolo Bonzini MPI_DOORBELL_WHO_INIT_SHIFT = 24, 111*e351b826SPaolo Bonzini MPI_DOORBELL_FUNCTION_MASK = 0xFF000000, 112*e351b826SPaolo Bonzini MPI_DOORBELL_FUNCTION_SHIFT = 24, 113*e351b826SPaolo Bonzini MPI_DOORBELL_ADD_DWORDS_MASK = 0x00FF0000, 114*e351b826SPaolo Bonzini MPI_DOORBELL_ADD_DWORDS_SHIFT = 16, 115*e351b826SPaolo Bonzini MPI_DOORBELL_DATA_MASK = 0x0000FFFF, 116*e351b826SPaolo Bonzini MPI_DOORBELL_FUNCTION_SPECIFIC_MASK = 0x0000FFFF, 117*e351b826SPaolo Bonzini 118*e351b826SPaolo Bonzini MPI_DB_HPBAC_VALUE_MASK = 0x0000F000, 119*e351b826SPaolo Bonzini MPI_DB_HPBAC_ENABLE_ACCESS = 0x01, 120*e351b826SPaolo Bonzini MPI_DB_HPBAC_DISABLE_ACCESS = 0x02, 121*e351b826SPaolo Bonzini MPI_DB_HPBAC_FREE_BUFFER = 0x03, 122*e351b826SPaolo Bonzini 123*e351b826SPaolo Bonzini MPI_WRITE_SEQUENCE_OFFSET = 0x00000004, 124*e351b826SPaolo Bonzini MPI_WRSEQ_KEY_VALUE_MASK = 0x0000000F, 125*e351b826SPaolo Bonzini MPI_WRSEQ_1ST_KEY_VALUE = 0x04, 126*e351b826SPaolo Bonzini MPI_WRSEQ_2ND_KEY_VALUE = 0x0B, 127*e351b826SPaolo Bonzini MPI_WRSEQ_3RD_KEY_VALUE = 0x02, 128*e351b826SPaolo Bonzini MPI_WRSEQ_4TH_KEY_VALUE = 0x07, 129*e351b826SPaolo Bonzini MPI_WRSEQ_5TH_KEY_VALUE = 0x0D, 130*e351b826SPaolo Bonzini 131*e351b826SPaolo Bonzini MPI_DIAGNOSTIC_OFFSET = 0x00000008, 132*e351b826SPaolo Bonzini MPI_DIAG_CLEAR_FLASH_BAD_SIG = 0x00000400, 133*e351b826SPaolo Bonzini MPI_DIAG_PREVENT_IOC_BOOT = 0x00000200, 134*e351b826SPaolo Bonzini MPI_DIAG_DRWE = 0x00000080, 135*e351b826SPaolo Bonzini MPI_DIAG_FLASH_BAD_SIG = 0x00000040, 136*e351b826SPaolo Bonzini MPI_DIAG_RESET_HISTORY = 0x00000020, 137*e351b826SPaolo Bonzini MPI_DIAG_RW_ENABLE = 0x00000010, 138*e351b826SPaolo Bonzini MPI_DIAG_RESET_ADAPTER = 0x00000004, 139*e351b826SPaolo Bonzini MPI_DIAG_DISABLE_ARM = 0x00000002, 140*e351b826SPaolo Bonzini MPI_DIAG_MEM_ENABLE = 0x00000001, 141*e351b826SPaolo Bonzini 142*e351b826SPaolo Bonzini MPI_TEST_BASE_ADDRESS_OFFSET = 0x0000000C, 143*e351b826SPaolo Bonzini 144*e351b826SPaolo Bonzini MPI_DIAG_RW_DATA_OFFSET = 0x00000010, 145*e351b826SPaolo Bonzini 146*e351b826SPaolo Bonzini MPI_DIAG_RW_ADDRESS_OFFSET = 0x00000014, 147*e351b826SPaolo Bonzini 148*e351b826SPaolo Bonzini MPI_HOST_INTERRUPT_STATUS_OFFSET = 0x00000030, 149*e351b826SPaolo Bonzini MPI_HIS_IOP_DOORBELL_STATUS = 0x80000000, 150*e351b826SPaolo Bonzini MPI_HIS_REPLY_MESSAGE_INTERRUPT = 0x00000008, 151*e351b826SPaolo Bonzini MPI_HIS_DOORBELL_INTERRUPT = 0x00000001, 152*e351b826SPaolo Bonzini 153*e351b826SPaolo Bonzini MPI_HOST_INTERRUPT_MASK_OFFSET = 0x00000034, 154*e351b826SPaolo Bonzini MPI_HIM_RIM = 0x00000008, 155*e351b826SPaolo Bonzini MPI_HIM_DIM = 0x00000001, 156*e351b826SPaolo Bonzini 157*e351b826SPaolo Bonzini MPI_REQUEST_QUEUE_OFFSET = 0x00000040, 158*e351b826SPaolo Bonzini MPI_REQUEST_POST_FIFO_OFFSET = 0x00000040, 159*e351b826SPaolo Bonzini 160*e351b826SPaolo Bonzini MPI_REPLY_QUEUE_OFFSET = 0x00000044, 161*e351b826SPaolo Bonzini MPI_REPLY_POST_FIFO_OFFSET = 0x00000044, 162*e351b826SPaolo Bonzini MPI_REPLY_FREE_FIFO_OFFSET = 0x00000044, 163*e351b826SPaolo Bonzini 164*e351b826SPaolo Bonzini MPI_HI_PRI_REQUEST_QUEUE_OFFSET = 0x00000048, 165*e351b826SPaolo Bonzini }; 166*e351b826SPaolo Bonzini 167*e351b826SPaolo Bonzini #define MPI_ADDRESS_REPLY_A_BIT 0x80000000 168*e351b826SPaolo Bonzini 169*e351b826SPaolo Bonzini /****************************************************************************/ 170*e351b826SPaolo Bonzini /* Scatter/gather elements */ 171*e351b826SPaolo Bonzini /****************************************************************************/ 172*e351b826SPaolo Bonzini 173*e351b826SPaolo Bonzini typedef struct MPISGEntry { 174*e351b826SPaolo Bonzini uint32_t FlagsLength; 175*e351b826SPaolo Bonzini union 176*e351b826SPaolo Bonzini { 177*e351b826SPaolo Bonzini uint32_t Address32; 178*e351b826SPaolo Bonzini uint64_t Address64; 179*e351b826SPaolo Bonzini } u; 180*e351b826SPaolo Bonzini } QEMU_PACKED MPISGEntry; 181*e351b826SPaolo Bonzini 182*e351b826SPaolo Bonzini /* Flags field bit definitions */ 183*e351b826SPaolo Bonzini 184*e351b826SPaolo Bonzini enum { 185*e351b826SPaolo Bonzini MPI_SGE_FLAGS_LAST_ELEMENT = 0x80000000, 186*e351b826SPaolo Bonzini MPI_SGE_FLAGS_END_OF_BUFFER = 0x40000000, 187*e351b826SPaolo Bonzini MPI_SGE_FLAGS_ELEMENT_TYPE_MASK = 0x30000000, 188*e351b826SPaolo Bonzini MPI_SGE_FLAGS_LOCAL_ADDRESS = 0x08000000, 189*e351b826SPaolo Bonzini MPI_SGE_FLAGS_DIRECTION = 0x04000000, 190*e351b826SPaolo Bonzini MPI_SGE_FLAGS_64_BIT_ADDRESSING = 0x02000000, 191*e351b826SPaolo Bonzini MPI_SGE_FLAGS_END_OF_LIST = 0x01000000, 192*e351b826SPaolo Bonzini 193*e351b826SPaolo Bonzini MPI_SGE_LENGTH_MASK = 0x00FFFFFF, 194*e351b826SPaolo Bonzini MPI_SGE_CHAIN_LENGTH_MASK = 0x0000FFFF, 195*e351b826SPaolo Bonzini 196*e351b826SPaolo Bonzini MPI_SGE_FLAGS_TRANSACTION_ELEMENT = 0x00000000, 197*e351b826SPaolo Bonzini MPI_SGE_FLAGS_SIMPLE_ELEMENT = 0x10000000, 198*e351b826SPaolo Bonzini MPI_SGE_FLAGS_CHAIN_ELEMENT = 0x30000000, 199*e351b826SPaolo Bonzini 200*e351b826SPaolo Bonzini /* Direction */ 201*e351b826SPaolo Bonzini 202*e351b826SPaolo Bonzini MPI_SGE_FLAGS_IOC_TO_HOST = 0x00000000, 203*e351b826SPaolo Bonzini MPI_SGE_FLAGS_HOST_TO_IOC = 0x04000000, 204*e351b826SPaolo Bonzini 205*e351b826SPaolo Bonzini MPI_SGE_CHAIN_OFFSET_MASK = 0x00FF0000, 206*e351b826SPaolo Bonzini }; 207*e351b826SPaolo Bonzini 208*e351b826SPaolo Bonzini #define MPI_SGE_CHAIN_OFFSET_SHIFT 16 209*e351b826SPaolo Bonzini 210*e351b826SPaolo Bonzini /****************************************************************************/ 211*e351b826SPaolo Bonzini /* Standard message request header for all request messages */ 212*e351b826SPaolo Bonzini /****************************************************************************/ 213*e351b826SPaolo Bonzini 214*e351b826SPaolo Bonzini typedef struct MPIRequestHeader { 215*e351b826SPaolo Bonzini uint8_t Reserved[2]; /* function specific */ 216*e351b826SPaolo Bonzini uint8_t ChainOffset; 217*e351b826SPaolo Bonzini uint8_t Function; 218*e351b826SPaolo Bonzini uint8_t Reserved1[3]; /* function specific */ 219*e351b826SPaolo Bonzini uint8_t MsgFlags; 220*e351b826SPaolo Bonzini uint32_t MsgContext; 221*e351b826SPaolo Bonzini } QEMU_PACKED MPIRequestHeader; 222*e351b826SPaolo Bonzini 223*e351b826SPaolo Bonzini 224*e351b826SPaolo Bonzini typedef struct MPIDefaultReply { 225*e351b826SPaolo Bonzini uint8_t Reserved[2]; /* function specific */ 226*e351b826SPaolo Bonzini uint8_t MsgLength; 227*e351b826SPaolo Bonzini uint8_t Function; 228*e351b826SPaolo Bonzini uint8_t Reserved1[3]; /* function specific */ 229*e351b826SPaolo Bonzini uint8_t MsgFlags; 230*e351b826SPaolo Bonzini uint32_t MsgContext; 231*e351b826SPaolo Bonzini uint8_t Reserved2[2]; /* function specific */ 232*e351b826SPaolo Bonzini uint16_t IOCStatus; 233*e351b826SPaolo Bonzini uint32_t IOCLogInfo; 234*e351b826SPaolo Bonzini } QEMU_PACKED MPIDefaultReply; 235*e351b826SPaolo Bonzini 236*e351b826SPaolo Bonzini /* MsgFlags definition for all replies */ 237*e351b826SPaolo Bonzini 238*e351b826SPaolo Bonzini #define MPI_MSGFLAGS_CONTINUATION_REPLY (0x80) 239*e351b826SPaolo Bonzini 240*e351b826SPaolo Bonzini enum { 241*e351b826SPaolo Bonzini 242*e351b826SPaolo Bonzini /************************************************************************/ 243*e351b826SPaolo Bonzini /* Common IOCStatus values for all replies */ 244*e351b826SPaolo Bonzini /************************************************************************/ 245*e351b826SPaolo Bonzini 246*e351b826SPaolo Bonzini MPI_IOCSTATUS_SUCCESS = 0x0000, 247*e351b826SPaolo Bonzini MPI_IOCSTATUS_INVALID_FUNCTION = 0x0001, 248*e351b826SPaolo Bonzini MPI_IOCSTATUS_BUSY = 0x0002, 249*e351b826SPaolo Bonzini MPI_IOCSTATUS_INVALID_SGL = 0x0003, 250*e351b826SPaolo Bonzini MPI_IOCSTATUS_INTERNAL_ERROR = 0x0004, 251*e351b826SPaolo Bonzini MPI_IOCSTATUS_RESERVED = 0x0005, 252*e351b826SPaolo Bonzini MPI_IOCSTATUS_INSUFFICIENT_RESOURCES = 0x0006, 253*e351b826SPaolo Bonzini MPI_IOCSTATUS_INVALID_FIELD = 0x0007, 254*e351b826SPaolo Bonzini MPI_IOCSTATUS_INVALID_STATE = 0x0008, 255*e351b826SPaolo Bonzini MPI_IOCSTATUS_OP_STATE_NOT_SUPPORTED = 0x0009, 256*e351b826SPaolo Bonzini 257*e351b826SPaolo Bonzini /************************************************************************/ 258*e351b826SPaolo Bonzini /* Config IOCStatus values */ 259*e351b826SPaolo Bonzini /************************************************************************/ 260*e351b826SPaolo Bonzini 261*e351b826SPaolo Bonzini MPI_IOCSTATUS_CONFIG_INVALID_ACTION = 0x0020, 262*e351b826SPaolo Bonzini MPI_IOCSTATUS_CONFIG_INVALID_TYPE = 0x0021, 263*e351b826SPaolo Bonzini MPI_IOCSTATUS_CONFIG_INVALID_PAGE = 0x0022, 264*e351b826SPaolo Bonzini MPI_IOCSTATUS_CONFIG_INVALID_DATA = 0x0023, 265*e351b826SPaolo Bonzini MPI_IOCSTATUS_CONFIG_NO_DEFAULTS = 0x0024, 266*e351b826SPaolo Bonzini MPI_IOCSTATUS_CONFIG_CANT_COMMIT = 0x0025, 267*e351b826SPaolo Bonzini 268*e351b826SPaolo Bonzini /************************************************************************/ 269*e351b826SPaolo Bonzini /* SCSIIO Reply = SPI & FCP, initiator values */ 270*e351b826SPaolo Bonzini /************************************************************************/ 271*e351b826SPaolo Bonzini 272*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_RECOVERED_ERROR = 0x0040, 273*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_INVALID_BUS = 0x0041, 274*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_INVALID_TARGETID = 0x0042, 275*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE = 0x0043, 276*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_DATA_OVERRUN = 0x0044, 277*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_DATA_UNDERRUN = 0x0045, 278*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_IO_DATA_ERROR = 0x0046, 279*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR = 0x0047, 280*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_TASK_TERMINATED = 0x0048, 281*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH = 0x0049, 282*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED = 0x004A, 283*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_IOC_TERMINATED = 0x004B, 284*e351b826SPaolo Bonzini MPI_IOCSTATUS_SCSI_EXT_TERMINATED = 0x004C, 285*e351b826SPaolo Bonzini 286*e351b826SPaolo Bonzini /************************************************************************/ 287*e351b826SPaolo Bonzini /* For use by SCSI Initiator and SCSI Target end-to-end data protection*/ 288*e351b826SPaolo Bonzini /************************************************************************/ 289*e351b826SPaolo Bonzini 290*e351b826SPaolo Bonzini MPI_IOCSTATUS_EEDP_GUARD_ERROR = 0x004D, 291*e351b826SPaolo Bonzini MPI_IOCSTATUS_EEDP_REF_TAG_ERROR = 0x004E, 292*e351b826SPaolo Bonzini MPI_IOCSTATUS_EEDP_APP_TAG_ERROR = 0x004F, 293*e351b826SPaolo Bonzini 294*e351b826SPaolo Bonzini /************************************************************************/ 295*e351b826SPaolo Bonzini /* SCSI Target values */ 296*e351b826SPaolo Bonzini /************************************************************************/ 297*e351b826SPaolo Bonzini 298*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_PRIORITY_IO = 0x0060, 299*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_INVALID_PORT = 0x0061, 300*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_INVALID_IO_INDEX = 0x0062, 301*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_ABORTED = 0x0063, 302*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_NO_CONN_RETRYABLE = 0x0064, 303*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_NO_CONNECTION = 0x0065, 304*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH = 0x006A, 305*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT = 0x006B, 306*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_DATA_OFFSET_ERROR = 0x006D, 307*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA = 0x006E, 308*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_IU_TOO_SHORT = 0x006F, 309*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT = 0x0070, 310*e351b826SPaolo Bonzini MPI_IOCSTATUS_TARGET_NAK_RECEIVED = 0x0071, 311*e351b826SPaolo Bonzini 312*e351b826SPaolo Bonzini /************************************************************************/ 313*e351b826SPaolo Bonzini /* Fibre Channel Direct Access values */ 314*e351b826SPaolo Bonzini /************************************************************************/ 315*e351b826SPaolo Bonzini 316*e351b826SPaolo Bonzini MPI_IOCSTATUS_FC_ABORTED = 0x0066, 317*e351b826SPaolo Bonzini MPI_IOCSTATUS_FC_RX_ID_INVALID = 0x0067, 318*e351b826SPaolo Bonzini MPI_IOCSTATUS_FC_DID_INVALID = 0x0068, 319*e351b826SPaolo Bonzini MPI_IOCSTATUS_FC_NODE_LOGGED_OUT = 0x0069, 320*e351b826SPaolo Bonzini MPI_IOCSTATUS_FC_EXCHANGE_CANCELED = 0x006C, 321*e351b826SPaolo Bonzini 322*e351b826SPaolo Bonzini /************************************************************************/ 323*e351b826SPaolo Bonzini /* LAN values */ 324*e351b826SPaolo Bonzini /************************************************************************/ 325*e351b826SPaolo Bonzini 326*e351b826SPaolo Bonzini MPI_IOCSTATUS_LAN_DEVICE_NOT_FOUND = 0x0080, 327*e351b826SPaolo Bonzini MPI_IOCSTATUS_LAN_DEVICE_FAILURE = 0x0081, 328*e351b826SPaolo Bonzini MPI_IOCSTATUS_LAN_TRANSMIT_ERROR = 0x0082, 329*e351b826SPaolo Bonzini MPI_IOCSTATUS_LAN_TRANSMIT_ABORTED = 0x0083, 330*e351b826SPaolo Bonzini MPI_IOCSTATUS_LAN_RECEIVE_ERROR = 0x0084, 331*e351b826SPaolo Bonzini MPI_IOCSTATUS_LAN_RECEIVE_ABORTED = 0x0085, 332*e351b826SPaolo Bonzini MPI_IOCSTATUS_LAN_PARTIAL_PACKET = 0x0086, 333*e351b826SPaolo Bonzini MPI_IOCSTATUS_LAN_CANCELED = 0x0087, 334*e351b826SPaolo Bonzini 335*e351b826SPaolo Bonzini /************************************************************************/ 336*e351b826SPaolo Bonzini /* Serial Attached SCSI values */ 337*e351b826SPaolo Bonzini /************************************************************************/ 338*e351b826SPaolo Bonzini 339*e351b826SPaolo Bonzini MPI_IOCSTATUS_SAS_SMP_REQUEST_FAILED = 0x0090, 340*e351b826SPaolo Bonzini MPI_IOCSTATUS_SAS_SMP_DATA_OVERRUN = 0x0091, 341*e351b826SPaolo Bonzini 342*e351b826SPaolo Bonzini /************************************************************************/ 343*e351b826SPaolo Bonzini /* Inband values */ 344*e351b826SPaolo Bonzini /************************************************************************/ 345*e351b826SPaolo Bonzini 346*e351b826SPaolo Bonzini MPI_IOCSTATUS_INBAND_ABORTED = 0x0098, 347*e351b826SPaolo Bonzini MPI_IOCSTATUS_INBAND_NO_CONNECTION = 0x0099, 348*e351b826SPaolo Bonzini 349*e351b826SPaolo Bonzini /************************************************************************/ 350*e351b826SPaolo Bonzini /* Diagnostic Tools values */ 351*e351b826SPaolo Bonzini /************************************************************************/ 352*e351b826SPaolo Bonzini 353*e351b826SPaolo Bonzini MPI_IOCSTATUS_DIAGNOSTIC_RELEASED = 0x00A0, 354*e351b826SPaolo Bonzini 355*e351b826SPaolo Bonzini /************************************************************************/ 356*e351b826SPaolo Bonzini /* IOCStatus flag to indicate that log info is available */ 357*e351b826SPaolo Bonzini /************************************************************************/ 358*e351b826SPaolo Bonzini 359*e351b826SPaolo Bonzini MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE = 0x8000, 360*e351b826SPaolo Bonzini MPI_IOCSTATUS_MASK = 0x7FFF, 361*e351b826SPaolo Bonzini 362*e351b826SPaolo Bonzini /************************************************************************/ 363*e351b826SPaolo Bonzini /* LogInfo Types */ 364*e351b826SPaolo Bonzini /************************************************************************/ 365*e351b826SPaolo Bonzini 366*e351b826SPaolo Bonzini MPI_IOCLOGINFO_TYPE_MASK = 0xF0000000, 367*e351b826SPaolo Bonzini MPI_IOCLOGINFO_TYPE_SHIFT = 28, 368*e351b826SPaolo Bonzini MPI_IOCLOGINFO_TYPE_NONE = 0x0, 369*e351b826SPaolo Bonzini MPI_IOCLOGINFO_TYPE_SCSI = 0x1, 370*e351b826SPaolo Bonzini MPI_IOCLOGINFO_TYPE_FC = 0x2, 371*e351b826SPaolo Bonzini MPI_IOCLOGINFO_TYPE_SAS = 0x3, 372*e351b826SPaolo Bonzini MPI_IOCLOGINFO_TYPE_ISCSI = 0x4, 373*e351b826SPaolo Bonzini MPI_IOCLOGINFO_LOG_DATA_MASK = 0x0FFFFFFF, 374*e351b826SPaolo Bonzini }; 375*e351b826SPaolo Bonzini 376*e351b826SPaolo Bonzini /****************************************************************************/ 377*e351b826SPaolo Bonzini /* SCSI IO messages and associated structures */ 378*e351b826SPaolo Bonzini /****************************************************************************/ 379*e351b826SPaolo Bonzini 380*e351b826SPaolo Bonzini typedef struct MPIMsgSCSIIORequest { 381*e351b826SPaolo Bonzini uint8_t TargetID; /* 00h */ 382*e351b826SPaolo Bonzini uint8_t Bus; /* 01h */ 383*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 02h */ 384*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 385*e351b826SPaolo Bonzini uint8_t CDBLength; /* 04h */ 386*e351b826SPaolo Bonzini uint8_t SenseBufferLength; /* 05h */ 387*e351b826SPaolo Bonzini uint8_t Reserved; /* 06h */ 388*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 389*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 390*e351b826SPaolo Bonzini uint8_t LUN[8]; /* 0Ch */ 391*e351b826SPaolo Bonzini uint32_t Control; /* 14h */ 392*e351b826SPaolo Bonzini uint8_t CDB[16]; /* 18h */ 393*e351b826SPaolo Bonzini uint32_t DataLength; /* 28h */ 394*e351b826SPaolo Bonzini uint32_t SenseBufferLowAddr; /* 2Ch */ 395*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgSCSIIORequest; 396*e351b826SPaolo Bonzini 397*e351b826SPaolo Bonzini /* SCSI IO MsgFlags bits */ 398*e351b826SPaolo Bonzini 399*e351b826SPaolo Bonzini #define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH (0x01) 400*e351b826SPaolo Bonzini #define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_32 (0x00) 401*e351b826SPaolo Bonzini #define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_64 (0x01) 402*e351b826SPaolo Bonzini 403*e351b826SPaolo Bonzini #define MPI_SCSIIO_MSGFLGS_SENSE_LOCATION (0x02) 404*e351b826SPaolo Bonzini #define MPI_SCSIIO_MSGFLGS_SENSE_LOC_HOST (0x00) 405*e351b826SPaolo Bonzini #define MPI_SCSIIO_MSGFLGS_SENSE_LOC_IOC (0x02) 406*e351b826SPaolo Bonzini 407*e351b826SPaolo Bonzini #define MPI_SCSIIO_MSGFLGS_CMD_DETERMINES_DATA_DIR (0x04) 408*e351b826SPaolo Bonzini 409*e351b826SPaolo Bonzini /* SCSI IO LUN fields */ 410*e351b826SPaolo Bonzini 411*e351b826SPaolo Bonzini #define MPI_SCSIIO_LUN_FIRST_LEVEL_ADDRESSING (0x0000FFFF) 412*e351b826SPaolo Bonzini #define MPI_SCSIIO_LUN_SECOND_LEVEL_ADDRESSING (0xFFFF0000) 413*e351b826SPaolo Bonzini #define MPI_SCSIIO_LUN_THIRD_LEVEL_ADDRESSING (0x0000FFFF) 414*e351b826SPaolo Bonzini #define MPI_SCSIIO_LUN_FOURTH_LEVEL_ADDRESSING (0xFFFF0000) 415*e351b826SPaolo Bonzini #define MPI_SCSIIO_LUN_LEVEL_1_WORD (0xFF00) 416*e351b826SPaolo Bonzini #define MPI_SCSIIO_LUN_LEVEL_1_DWORD (0x0000FF00) 417*e351b826SPaolo Bonzini 418*e351b826SPaolo Bonzini /* SCSI IO Control bits */ 419*e351b826SPaolo Bonzini 420*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_DATADIRECTION_MASK (0x03000000) 421*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_NODATATRANSFER (0x00000000) 422*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_WRITE (0x01000000) 423*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_READ (0x02000000) 424*e351b826SPaolo Bonzini 425*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_ADDCDBLEN_MASK (0x3C000000) 426*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_ADDCDBLEN_SHIFT (26) 427*e351b826SPaolo Bonzini 428*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_TASKATTRIBUTE_MASK (0x00000700) 429*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_SIMPLEQ (0x00000000) 430*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_HEADOFQ (0x00000100) 431*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_ORDEREDQ (0x00000200) 432*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_ACAQ (0x00000400) 433*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_UNTAGGED (0x00000500) 434*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_NO_DISCONNECT (0x00000700) 435*e351b826SPaolo Bonzini 436*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_TASKMANAGE_MASK (0x00FF0000) 437*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_OBSOLETE (0x00800000) 438*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_CLEAR_ACA_RSV (0x00400000) 439*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_TARGET_RESET (0x00200000) 440*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_LUN_RESET_RSV (0x00100000) 441*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_RESERVED (0x00080000) 442*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_CLR_TASK_SET_RSV (0x00040000) 443*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_ABORT_TASK_SET (0x00020000) 444*e351b826SPaolo Bonzini #define MPI_SCSIIO_CONTROL_RESERVED2 (0x00010000) 445*e351b826SPaolo Bonzini 446*e351b826SPaolo Bonzini /* SCSI IO reply structure */ 447*e351b826SPaolo Bonzini typedef struct MPIMsgSCSIIOReply 448*e351b826SPaolo Bonzini { 449*e351b826SPaolo Bonzini uint8_t TargetID; /* 00h */ 450*e351b826SPaolo Bonzini uint8_t Bus; /* 01h */ 451*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 452*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 453*e351b826SPaolo Bonzini uint8_t CDBLength; /* 04h */ 454*e351b826SPaolo Bonzini uint8_t SenseBufferLength; /* 05h */ 455*e351b826SPaolo Bonzini uint8_t Reserved; /* 06h */ 456*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 457*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 458*e351b826SPaolo Bonzini uint8_t SCSIStatus; /* 0Ch */ 459*e351b826SPaolo Bonzini uint8_t SCSIState; /* 0Dh */ 460*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 461*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 462*e351b826SPaolo Bonzini uint32_t TransferCount; /* 14h */ 463*e351b826SPaolo Bonzini uint32_t SenseCount; /* 18h */ 464*e351b826SPaolo Bonzini uint32_t ResponseInfo; /* 1Ch */ 465*e351b826SPaolo Bonzini uint16_t TaskTag; /* 20h */ 466*e351b826SPaolo Bonzini uint16_t Reserved1; /* 22h */ 467*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgSCSIIOReply; 468*e351b826SPaolo Bonzini 469*e351b826SPaolo Bonzini /* SCSI IO Reply SCSIStatus values (SAM-2 status codes) */ 470*e351b826SPaolo Bonzini 471*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_SUCCESS (0x00) 472*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_CHECK_CONDITION (0x02) 473*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_CONDITION_MET (0x04) 474*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_BUSY (0x08) 475*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_INTERMEDIATE (0x10) 476*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_INTERMEDIATE_CONDMET (0x14) 477*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_RESERVATION_CONFLICT (0x18) 478*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_COMMAND_TERMINATED (0x22) 479*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_TASK_SET_FULL (0x28) 480*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_ACA_ACTIVE (0x30) 481*e351b826SPaolo Bonzini 482*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_FCPEXT_DEVICE_LOGGED_OUT (0x80) 483*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_FCPEXT_NO_LINK (0x81) 484*e351b826SPaolo Bonzini #define MPI_SCSI_STATUS_FCPEXT_UNASSIGNED (0x82) 485*e351b826SPaolo Bonzini 486*e351b826SPaolo Bonzini 487*e351b826SPaolo Bonzini /* SCSI IO Reply SCSIState values */ 488*e351b826SPaolo Bonzini 489*e351b826SPaolo Bonzini #define MPI_SCSI_STATE_AUTOSENSE_VALID (0x01) 490*e351b826SPaolo Bonzini #define MPI_SCSI_STATE_AUTOSENSE_FAILED (0x02) 491*e351b826SPaolo Bonzini #define MPI_SCSI_STATE_NO_SCSI_STATUS (0x04) 492*e351b826SPaolo Bonzini #define MPI_SCSI_STATE_TERMINATED (0x08) 493*e351b826SPaolo Bonzini #define MPI_SCSI_STATE_RESPONSE_INFO_VALID (0x10) 494*e351b826SPaolo Bonzini #define MPI_SCSI_STATE_QUEUE_TAG_REJECTED (0x20) 495*e351b826SPaolo Bonzini 496*e351b826SPaolo Bonzini /* SCSI IO Reply ResponseInfo values */ 497*e351b826SPaolo Bonzini /* (FCP-1 RSP_CODE values and SPI-3 Packetized Failure codes) */ 498*e351b826SPaolo Bonzini 499*e351b826SPaolo Bonzini #define MPI_SCSI_RSP_INFO_FUNCTION_COMPLETE (0x00000000) 500*e351b826SPaolo Bonzini #define MPI_SCSI_RSP_INFO_FCP_BURST_LEN_ERROR (0x01000000) 501*e351b826SPaolo Bonzini #define MPI_SCSI_RSP_INFO_CMND_FIELDS_INVALID (0x02000000) 502*e351b826SPaolo Bonzini #define MPI_SCSI_RSP_INFO_FCP_DATA_RO_ERROR (0x03000000) 503*e351b826SPaolo Bonzini #define MPI_SCSI_RSP_INFO_TASK_MGMT_UNSUPPORTED (0x04000000) 504*e351b826SPaolo Bonzini #define MPI_SCSI_RSP_INFO_TASK_MGMT_FAILED (0x05000000) 505*e351b826SPaolo Bonzini #define MPI_SCSI_RSP_INFO_SPI_LQ_INVALID_TYPE (0x06000000) 506*e351b826SPaolo Bonzini 507*e351b826SPaolo Bonzini #define MPI_SCSI_TASKTAG_UNKNOWN (0xFFFF) 508*e351b826SPaolo Bonzini 509*e351b826SPaolo Bonzini 510*e351b826SPaolo Bonzini /****************************************************************************/ 511*e351b826SPaolo Bonzini /* SCSI Task Management messages */ 512*e351b826SPaolo Bonzini /****************************************************************************/ 513*e351b826SPaolo Bonzini 514*e351b826SPaolo Bonzini typedef struct MPIMsgSCSITaskMgmt { 515*e351b826SPaolo Bonzini uint8_t TargetID; /* 00h */ 516*e351b826SPaolo Bonzini uint8_t Bus; /* 01h */ 517*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 02h */ 518*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 519*e351b826SPaolo Bonzini uint8_t Reserved; /* 04h */ 520*e351b826SPaolo Bonzini uint8_t TaskType; /* 05h */ 521*e351b826SPaolo Bonzini uint8_t Reserved1; /* 06h */ 522*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 523*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 524*e351b826SPaolo Bonzini uint8_t LUN[8]; /* 0Ch */ 525*e351b826SPaolo Bonzini uint32_t Reserved2[7]; /* 14h */ 526*e351b826SPaolo Bonzini uint32_t TaskMsgContext; /* 30h */ 527*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgSCSITaskMgmt; 528*e351b826SPaolo Bonzini 529*e351b826SPaolo Bonzini enum { 530*e351b826SPaolo Bonzini /* TaskType values */ 531*e351b826SPaolo Bonzini 532*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK = 0x01, 533*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET = 0x02, 534*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET = 0x03, 535*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS = 0x04, 536*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET = 0x05, 537*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET = 0x06, 538*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_TASKTYPE_QUERY_TASK = 0x07, 539*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_TASKTYPE_CLR_ACA = 0x08, 540*e351b826SPaolo Bonzini 541*e351b826SPaolo Bonzini /* MsgFlags bits */ 542*e351b826SPaolo Bonzini 543*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU = 0x01, 544*e351b826SPaolo Bonzini 545*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_MSGFLAGS_TARGET_RESET_OPTION = 0x00, 546*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_MSGFLAGS_LIP_RESET_OPTION = 0x02, 547*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_MSGFLAGS_LIPRESET_RESET_OPTION = 0x04, 548*e351b826SPaolo Bonzini 549*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_MSGFLAGS_SOFT_RESET_OPTION = 0x08, 550*e351b826SPaolo Bonzini }; 551*e351b826SPaolo Bonzini 552*e351b826SPaolo Bonzini /* SCSI Task Management Reply */ 553*e351b826SPaolo Bonzini typedef struct MPIMsgSCSITaskMgmtReply { 554*e351b826SPaolo Bonzini uint8_t TargetID; /* 00h */ 555*e351b826SPaolo Bonzini uint8_t Bus; /* 01h */ 556*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 557*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 558*e351b826SPaolo Bonzini uint8_t ResponseCode; /* 04h */ 559*e351b826SPaolo Bonzini uint8_t TaskType; /* 05h */ 560*e351b826SPaolo Bonzini uint8_t Reserved1; /* 06h */ 561*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 562*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 563*e351b826SPaolo Bonzini uint8_t Reserved2[2]; /* 0Ch */ 564*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 565*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 566*e351b826SPaolo Bonzini uint32_t TerminationCount; /* 14h */ 567*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgSCSITaskMgmtReply; 568*e351b826SPaolo Bonzini 569*e351b826SPaolo Bonzini /* ResponseCode values */ 570*e351b826SPaolo Bonzini enum { 571*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_RSP_TM_COMPLETE = 0x00, 572*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_RSP_INVALID_FRAME = 0x02, 573*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED = 0x04, 574*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_RSP_TM_FAILED = 0x05, 575*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_RSP_TM_SUCCEEDED = 0x08, 576*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_RSP_TM_INVALID_LUN = 0x09, 577*e351b826SPaolo Bonzini MPI_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC = 0x80, 578*e351b826SPaolo Bonzini }; 579*e351b826SPaolo Bonzini 580*e351b826SPaolo Bonzini /****************************************************************************/ 581*e351b826SPaolo Bonzini /* IOCInit message */ 582*e351b826SPaolo Bonzini /****************************************************************************/ 583*e351b826SPaolo Bonzini 584*e351b826SPaolo Bonzini typedef struct MPIMsgIOCInit { 585*e351b826SPaolo Bonzini uint8_t WhoInit; /* 00h */ 586*e351b826SPaolo Bonzini uint8_t Reserved; /* 01h */ 587*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 02h */ 588*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 589*e351b826SPaolo Bonzini uint8_t Flags; /* 04h */ 590*e351b826SPaolo Bonzini uint8_t MaxDevices; /* 05h */ 591*e351b826SPaolo Bonzini uint8_t MaxBuses; /* 06h */ 592*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 593*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 594*e351b826SPaolo Bonzini uint16_t ReplyFrameSize; /* 0Ch */ 595*e351b826SPaolo Bonzini uint8_t Reserved1[2]; /* 0Eh */ 596*e351b826SPaolo Bonzini uint32_t HostMfaHighAddr; /* 10h */ 597*e351b826SPaolo Bonzini uint32_t SenseBufferHighAddr; /* 14h */ 598*e351b826SPaolo Bonzini uint32_t ReplyFifoHostSignalingAddr; /* 18h */ 599*e351b826SPaolo Bonzini MPISGEntry HostPageBufferSGE; /* 1Ch */ 600*e351b826SPaolo Bonzini uint16_t MsgVersion; /* 28h */ 601*e351b826SPaolo Bonzini uint16_t HeaderVersion; /* 2Ah */ 602*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgIOCInit; 603*e351b826SPaolo Bonzini 604*e351b826SPaolo Bonzini enum { 605*e351b826SPaolo Bonzini /* WhoInit values */ 606*e351b826SPaolo Bonzini 607*e351b826SPaolo Bonzini MPI_WHOINIT_NO_ONE = 0x00, 608*e351b826SPaolo Bonzini MPI_WHOINIT_SYSTEM_BIOS = 0x01, 609*e351b826SPaolo Bonzini MPI_WHOINIT_ROM_BIOS = 0x02, 610*e351b826SPaolo Bonzini MPI_WHOINIT_PCI_PEER = 0x03, 611*e351b826SPaolo Bonzini MPI_WHOINIT_HOST_DRIVER = 0x04, 612*e351b826SPaolo Bonzini MPI_WHOINIT_MANUFACTURER = 0x05, 613*e351b826SPaolo Bonzini 614*e351b826SPaolo Bonzini /* Flags values */ 615*e351b826SPaolo Bonzini 616*e351b826SPaolo Bonzini MPI_IOCINIT_FLAGS_HOST_PAGE_BUFFER_PERSISTENT = 0x04, 617*e351b826SPaolo Bonzini MPI_IOCINIT_FLAGS_REPLY_FIFO_HOST_SIGNAL = 0x02, 618*e351b826SPaolo Bonzini MPI_IOCINIT_FLAGS_DISCARD_FW_IMAGE = 0x01, 619*e351b826SPaolo Bonzini 620*e351b826SPaolo Bonzini /* MsgVersion */ 621*e351b826SPaolo Bonzini 622*e351b826SPaolo Bonzini MPI_IOCINIT_MSGVERSION_MAJOR_MASK = 0xFF00, 623*e351b826SPaolo Bonzini MPI_IOCINIT_MSGVERSION_MAJOR_SHIFT = 8, 624*e351b826SPaolo Bonzini MPI_IOCINIT_MSGVERSION_MINOR_MASK = 0x00FF, 625*e351b826SPaolo Bonzini MPI_IOCINIT_MSGVERSION_MINOR_SHIFT = 0, 626*e351b826SPaolo Bonzini 627*e351b826SPaolo Bonzini /* HeaderVersion */ 628*e351b826SPaolo Bonzini 629*e351b826SPaolo Bonzini MPI_IOCINIT_HEADERVERSION_UNIT_MASK = 0xFF00, 630*e351b826SPaolo Bonzini MPI_IOCINIT_HEADERVERSION_UNIT_SHIFT = 8, 631*e351b826SPaolo Bonzini MPI_IOCINIT_HEADERVERSION_DEV_MASK = 0x00FF, 632*e351b826SPaolo Bonzini MPI_IOCINIT_HEADERVERSION_DEV_SHIFT = 0, 633*e351b826SPaolo Bonzini }; 634*e351b826SPaolo Bonzini 635*e351b826SPaolo Bonzini typedef struct MPIMsgIOCInitReply { 636*e351b826SPaolo Bonzini uint8_t WhoInit; /* 00h */ 637*e351b826SPaolo Bonzini uint8_t Reserved; /* 01h */ 638*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 639*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 640*e351b826SPaolo Bonzini uint8_t Flags; /* 04h */ 641*e351b826SPaolo Bonzini uint8_t MaxDevices; /* 05h */ 642*e351b826SPaolo Bonzini uint8_t MaxBuses; /* 06h */ 643*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 644*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 645*e351b826SPaolo Bonzini uint16_t Reserved2; /* 0Ch */ 646*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 647*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 648*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgIOCInitReply; 649*e351b826SPaolo Bonzini 650*e351b826SPaolo Bonzini 651*e351b826SPaolo Bonzini 652*e351b826SPaolo Bonzini /****************************************************************************/ 653*e351b826SPaolo Bonzini /* IOC Facts message */ 654*e351b826SPaolo Bonzini /****************************************************************************/ 655*e351b826SPaolo Bonzini 656*e351b826SPaolo Bonzini typedef struct MPIMsgIOCFacts { 657*e351b826SPaolo Bonzini uint8_t Reserved[2]; /* 00h */ 658*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 01h */ 659*e351b826SPaolo Bonzini uint8_t Function; /* 02h */ 660*e351b826SPaolo Bonzini uint8_t Reserved1[3]; /* 03h */ 661*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 04h */ 662*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 663*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgIOCFacts; 664*e351b826SPaolo Bonzini 665*e351b826SPaolo Bonzini /* IOC Facts Reply */ 666*e351b826SPaolo Bonzini typedef struct MPIMsgIOCFactsReply { 667*e351b826SPaolo Bonzini uint16_t MsgVersion; /* 00h */ 668*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 669*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 670*e351b826SPaolo Bonzini uint16_t HeaderVersion; /* 04h */ 671*e351b826SPaolo Bonzini uint8_t IOCNumber; /* 06h */ 672*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 673*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 674*e351b826SPaolo Bonzini uint16_t IOCExceptions; /* 0Ch */ 675*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 676*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 677*e351b826SPaolo Bonzini uint8_t MaxChainDepth; /* 14h */ 678*e351b826SPaolo Bonzini uint8_t WhoInit; /* 15h */ 679*e351b826SPaolo Bonzini uint8_t BlockSize; /* 16h */ 680*e351b826SPaolo Bonzini uint8_t Flags; /* 17h */ 681*e351b826SPaolo Bonzini uint16_t ReplyQueueDepth; /* 18h */ 682*e351b826SPaolo Bonzini uint16_t RequestFrameSize; /* 1Ah */ 683*e351b826SPaolo Bonzini uint16_t Reserved_0101_FWVersion; /* 1Ch */ /* obsolete 16-bit FWVersion */ 684*e351b826SPaolo Bonzini uint16_t ProductID; /* 1Eh */ 685*e351b826SPaolo Bonzini uint32_t CurrentHostMfaHighAddr; /* 20h */ 686*e351b826SPaolo Bonzini uint16_t GlobalCredits; /* 24h */ 687*e351b826SPaolo Bonzini uint8_t NumberOfPorts; /* 26h */ 688*e351b826SPaolo Bonzini uint8_t EventState; /* 27h */ 689*e351b826SPaolo Bonzini uint32_t CurrentSenseBufferHighAddr; /* 28h */ 690*e351b826SPaolo Bonzini uint16_t CurReplyFrameSize; /* 2Ch */ 691*e351b826SPaolo Bonzini uint8_t MaxDevices; /* 2Eh */ 692*e351b826SPaolo Bonzini uint8_t MaxBuses; /* 2Fh */ 693*e351b826SPaolo Bonzini uint32_t FWImageSize; /* 30h */ 694*e351b826SPaolo Bonzini uint32_t IOCCapabilities; /* 34h */ 695*e351b826SPaolo Bonzini uint8_t FWVersionDev; /* 38h */ 696*e351b826SPaolo Bonzini uint8_t FWVersionUnit; /* 39h */ 697*e351b826SPaolo Bonzini uint8_t FWVersionMinor; /* 3ah */ 698*e351b826SPaolo Bonzini uint8_t FWVersionMajor; /* 3bh */ 699*e351b826SPaolo Bonzini uint16_t HighPriorityQueueDepth; /* 3Ch */ 700*e351b826SPaolo Bonzini uint16_t Reserved2; /* 3Eh */ 701*e351b826SPaolo Bonzini MPISGEntry HostPageBufferSGE; /* 40h */ 702*e351b826SPaolo Bonzini uint32_t ReplyFifoHostSignalingAddr; /* 4Ch */ 703*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgIOCFactsReply; 704*e351b826SPaolo Bonzini 705*e351b826SPaolo Bonzini enum { 706*e351b826SPaolo Bonzini MPI_IOCFACTS_MSGVERSION_MAJOR_MASK = 0xFF00, 707*e351b826SPaolo Bonzini MPI_IOCFACTS_MSGVERSION_MAJOR_SHIFT = 8, 708*e351b826SPaolo Bonzini MPI_IOCFACTS_MSGVERSION_MINOR_MASK = 0x00FF, 709*e351b826SPaolo Bonzini MPI_IOCFACTS_MSGVERSION_MINOR_SHIFT = 0, 710*e351b826SPaolo Bonzini 711*e351b826SPaolo Bonzini MPI_IOCFACTS_HDRVERSION_UNIT_MASK = 0xFF00, 712*e351b826SPaolo Bonzini MPI_IOCFACTS_HDRVERSION_UNIT_SHIFT = 8, 713*e351b826SPaolo Bonzini MPI_IOCFACTS_HDRVERSION_DEV_MASK = 0x00FF, 714*e351b826SPaolo Bonzini MPI_IOCFACTS_HDRVERSION_DEV_SHIFT = 0, 715*e351b826SPaolo Bonzini 716*e351b826SPaolo Bonzini MPI_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL = 0x0001, 717*e351b826SPaolo Bonzini MPI_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID = 0x0002, 718*e351b826SPaolo Bonzini MPI_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL = 0x0004, 719*e351b826SPaolo Bonzini MPI_IOCFACTS_EXCEPT_PERSISTENT_TABLE_FULL = 0x0008, 720*e351b826SPaolo Bonzini MPI_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED = 0x0010, 721*e351b826SPaolo Bonzini 722*e351b826SPaolo Bonzini MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT = 0x01, 723*e351b826SPaolo Bonzini MPI_IOCFACTS_FLAGS_REPLY_FIFO_HOST_SIGNAL = 0x02, 724*e351b826SPaolo Bonzini MPI_IOCFACTS_FLAGS_HOST_PAGE_BUFFER_PERSISTENT = 0x04, 725*e351b826SPaolo Bonzini 726*e351b826SPaolo Bonzini MPI_IOCFACTS_EVENTSTATE_DISABLED = 0x00, 727*e351b826SPaolo Bonzini MPI_IOCFACTS_EVENTSTATE_ENABLED = 0x01, 728*e351b826SPaolo Bonzini 729*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q = 0x00000001, 730*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_REPLY_HOST_SIGNAL = 0x00000002, 731*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_QUEUE_FULL_HANDLING = 0x00000004, 732*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER = 0x00000008, 733*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER = 0x00000010, 734*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_EXTENDED_BUFFER = 0x00000020, 735*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_EEDP = 0x00000040, 736*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_BIDIRECTIONAL = 0x00000080, 737*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_MULTICAST = 0x00000100, 738*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_SCSIIO32 = 0x00000200, 739*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_NO_SCSIIO16 = 0x00000400, 740*e351b826SPaolo Bonzini MPI_IOCFACTS_CAPABILITY_TLR = 0x00000800, 741*e351b826SPaolo Bonzini }; 742*e351b826SPaolo Bonzini 743*e351b826SPaolo Bonzini /****************************************************************************/ 744*e351b826SPaolo Bonzini /* Port Facts message and Reply */ 745*e351b826SPaolo Bonzini /****************************************************************************/ 746*e351b826SPaolo Bonzini 747*e351b826SPaolo Bonzini typedef struct MPIMsgPortFacts { 748*e351b826SPaolo Bonzini uint8_t Reserved[2]; /* 00h */ 749*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 02h */ 750*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 751*e351b826SPaolo Bonzini uint8_t Reserved1[2]; /* 04h */ 752*e351b826SPaolo Bonzini uint8_t PortNumber; /* 06h */ 753*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 754*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 755*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgPortFacts; 756*e351b826SPaolo Bonzini 757*e351b826SPaolo Bonzini typedef struct MPIMsgPortFactsReply { 758*e351b826SPaolo Bonzini uint16_t Reserved; /* 00h */ 759*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 760*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 761*e351b826SPaolo Bonzini uint16_t Reserved1; /* 04h */ 762*e351b826SPaolo Bonzini uint8_t PortNumber; /* 06h */ 763*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 764*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 765*e351b826SPaolo Bonzini uint16_t Reserved2; /* 0Ch */ 766*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 767*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 768*e351b826SPaolo Bonzini uint8_t Reserved3; /* 14h */ 769*e351b826SPaolo Bonzini uint8_t PortType; /* 15h */ 770*e351b826SPaolo Bonzini uint16_t MaxDevices; /* 16h */ 771*e351b826SPaolo Bonzini uint16_t PortSCSIID; /* 18h */ 772*e351b826SPaolo Bonzini uint16_t ProtocolFlags; /* 1Ah */ 773*e351b826SPaolo Bonzini uint16_t MaxPostedCmdBuffers; /* 1Ch */ 774*e351b826SPaolo Bonzini uint16_t MaxPersistentIDs; /* 1Eh */ 775*e351b826SPaolo Bonzini uint16_t MaxLanBuckets; /* 20h */ 776*e351b826SPaolo Bonzini uint8_t MaxInitiators; /* 22h */ 777*e351b826SPaolo Bonzini uint8_t Reserved4; /* 23h */ 778*e351b826SPaolo Bonzini uint32_t Reserved5; /* 24h */ 779*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgPortFactsReply; 780*e351b826SPaolo Bonzini 781*e351b826SPaolo Bonzini 782*e351b826SPaolo Bonzini enum { 783*e351b826SPaolo Bonzini /* PortTypes values */ 784*e351b826SPaolo Bonzini MPI_PORTFACTS_PORTTYPE_INACTIVE = 0x00, 785*e351b826SPaolo Bonzini MPI_PORTFACTS_PORTTYPE_SCSI = 0x01, 786*e351b826SPaolo Bonzini MPI_PORTFACTS_PORTTYPE_FC = 0x10, 787*e351b826SPaolo Bonzini MPI_PORTFACTS_PORTTYPE_ISCSI = 0x20, 788*e351b826SPaolo Bonzini MPI_PORTFACTS_PORTTYPE_SAS = 0x30, 789*e351b826SPaolo Bonzini 790*e351b826SPaolo Bonzini /* ProtocolFlags values */ 791*e351b826SPaolo Bonzini MPI_PORTFACTS_PROTOCOL_LOGBUSADDR = 0x01, 792*e351b826SPaolo Bonzini MPI_PORTFACTS_PROTOCOL_LAN = 0x02, 793*e351b826SPaolo Bonzini MPI_PORTFACTS_PROTOCOL_TARGET = 0x04, 794*e351b826SPaolo Bonzini MPI_PORTFACTS_PROTOCOL_INITIATOR = 0x08, 795*e351b826SPaolo Bonzini }; 796*e351b826SPaolo Bonzini 797*e351b826SPaolo Bonzini 798*e351b826SPaolo Bonzini /****************************************************************************/ 799*e351b826SPaolo Bonzini /* Port Enable Message */ 800*e351b826SPaolo Bonzini /****************************************************************************/ 801*e351b826SPaolo Bonzini 802*e351b826SPaolo Bonzini typedef struct MPIMsgPortEnable { 803*e351b826SPaolo Bonzini uint8_t Reserved[2]; /* 00h */ 804*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 02h */ 805*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 806*e351b826SPaolo Bonzini uint8_t Reserved1[2]; /* 04h */ 807*e351b826SPaolo Bonzini uint8_t PortNumber; /* 06h */ 808*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 809*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 810*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgPortEnable; 811*e351b826SPaolo Bonzini 812*e351b826SPaolo Bonzini typedef struct MPIMsgPortEnableReply { 813*e351b826SPaolo Bonzini uint8_t Reserved[2]; /* 00h */ 814*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 815*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 816*e351b826SPaolo Bonzini uint8_t Reserved1[2]; /* 04h */ 817*e351b826SPaolo Bonzini uint8_t PortNumber; /* 05h */ 818*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 819*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 820*e351b826SPaolo Bonzini uint16_t Reserved2; /* 0Ch */ 821*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 822*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 823*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgPortEnableReply; 824*e351b826SPaolo Bonzini 825*e351b826SPaolo Bonzini /****************************************************************************/ 826*e351b826SPaolo Bonzini /* Event Notification messages */ 827*e351b826SPaolo Bonzini /****************************************************************************/ 828*e351b826SPaolo Bonzini 829*e351b826SPaolo Bonzini typedef struct MPIMsgEventNotify { 830*e351b826SPaolo Bonzini uint8_t Switch; /* 00h */ 831*e351b826SPaolo Bonzini uint8_t Reserved; /* 01h */ 832*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 02h */ 833*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 834*e351b826SPaolo Bonzini uint8_t Reserved1[3]; /* 04h */ 835*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 836*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 837*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgEventNotify; 838*e351b826SPaolo Bonzini 839*e351b826SPaolo Bonzini /* Event Notification Reply */ 840*e351b826SPaolo Bonzini 841*e351b826SPaolo Bonzini typedef struct MPIMsgEventNotifyReply { 842*e351b826SPaolo Bonzini uint16_t EventDataLength; /* 00h */ 843*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 844*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 845*e351b826SPaolo Bonzini uint8_t Reserved1[2]; /* 04h */ 846*e351b826SPaolo Bonzini uint8_t AckRequired; /* 06h */ 847*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 848*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 849*e351b826SPaolo Bonzini uint8_t Reserved2[2]; /* 0Ch */ 850*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 851*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 852*e351b826SPaolo Bonzini uint32_t Event; /* 14h */ 853*e351b826SPaolo Bonzini uint32_t EventContext; /* 18h */ 854*e351b826SPaolo Bonzini uint32_t Data[1]; /* 1Ch */ 855*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgEventNotifyReply; 856*e351b826SPaolo Bonzini 857*e351b826SPaolo Bonzini /* Event Acknowledge */ 858*e351b826SPaolo Bonzini 859*e351b826SPaolo Bonzini typedef struct MPIMsgEventAck { 860*e351b826SPaolo Bonzini uint8_t Reserved[2]; /* 00h */ 861*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 02h */ 862*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 863*e351b826SPaolo Bonzini uint8_t Reserved1[3]; /* 04h */ 864*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 865*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 866*e351b826SPaolo Bonzini uint32_t Event; /* 0Ch */ 867*e351b826SPaolo Bonzini uint32_t EventContext; /* 10h */ 868*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgEventAck; 869*e351b826SPaolo Bonzini 870*e351b826SPaolo Bonzini typedef struct MPIMsgEventAckReply { 871*e351b826SPaolo Bonzini uint8_t Reserved[2]; /* 00h */ 872*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 873*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 874*e351b826SPaolo Bonzini uint8_t Reserved1[3]; /* 04h */ 875*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 876*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 877*e351b826SPaolo Bonzini uint16_t Reserved2; /* 0Ch */ 878*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 879*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 880*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgEventAckReply; 881*e351b826SPaolo Bonzini 882*e351b826SPaolo Bonzini enum { 883*e351b826SPaolo Bonzini /* Switch */ 884*e351b826SPaolo Bonzini 885*e351b826SPaolo Bonzini MPI_EVENT_NOTIFICATION_SWITCH_OFF = 0x00, 886*e351b826SPaolo Bonzini MPI_EVENT_NOTIFICATION_SWITCH_ON = 0x01, 887*e351b826SPaolo Bonzini 888*e351b826SPaolo Bonzini /* Event */ 889*e351b826SPaolo Bonzini 890*e351b826SPaolo Bonzini MPI_EVENT_NONE = 0x00000000, 891*e351b826SPaolo Bonzini MPI_EVENT_LOG_DATA = 0x00000001, 892*e351b826SPaolo Bonzini MPI_EVENT_STATE_CHANGE = 0x00000002, 893*e351b826SPaolo Bonzini MPI_EVENT_UNIT_ATTENTION = 0x00000003, 894*e351b826SPaolo Bonzini MPI_EVENT_IOC_BUS_RESET = 0x00000004, 895*e351b826SPaolo Bonzini MPI_EVENT_EXT_BUS_RESET = 0x00000005, 896*e351b826SPaolo Bonzini MPI_EVENT_RESCAN = 0x00000006, 897*e351b826SPaolo Bonzini MPI_EVENT_LINK_STATUS_CHANGE = 0x00000007, 898*e351b826SPaolo Bonzini MPI_EVENT_LOOP_STATE_CHANGE = 0x00000008, 899*e351b826SPaolo Bonzini MPI_EVENT_LOGOUT = 0x00000009, 900*e351b826SPaolo Bonzini MPI_EVENT_EVENT_CHANGE = 0x0000000A, 901*e351b826SPaolo Bonzini MPI_EVENT_INTEGRATED_RAID = 0x0000000B, 902*e351b826SPaolo Bonzini MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE = 0x0000000C, 903*e351b826SPaolo Bonzini MPI_EVENT_ON_BUS_TIMER_EXPIRED = 0x0000000D, 904*e351b826SPaolo Bonzini MPI_EVENT_QUEUE_FULL = 0x0000000E, 905*e351b826SPaolo Bonzini MPI_EVENT_SAS_DEVICE_STATUS_CHANGE = 0x0000000F, 906*e351b826SPaolo Bonzini MPI_EVENT_SAS_SES = 0x00000010, 907*e351b826SPaolo Bonzini MPI_EVENT_PERSISTENT_TABLE_FULL = 0x00000011, 908*e351b826SPaolo Bonzini MPI_EVENT_SAS_PHY_LINK_STATUS = 0x00000012, 909*e351b826SPaolo Bonzini MPI_EVENT_SAS_DISCOVERY_ERROR = 0x00000013, 910*e351b826SPaolo Bonzini MPI_EVENT_IR_RESYNC_UPDATE = 0x00000014, 911*e351b826SPaolo Bonzini MPI_EVENT_IR2 = 0x00000015, 912*e351b826SPaolo Bonzini MPI_EVENT_SAS_DISCOVERY = 0x00000016, 913*e351b826SPaolo Bonzini MPI_EVENT_SAS_BROADCAST_PRIMITIVE = 0x00000017, 914*e351b826SPaolo Bonzini MPI_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE = 0x00000018, 915*e351b826SPaolo Bonzini MPI_EVENT_SAS_INIT_TABLE_OVERFLOW = 0x00000019, 916*e351b826SPaolo Bonzini MPI_EVENT_SAS_SMP_ERROR = 0x0000001A, 917*e351b826SPaolo Bonzini MPI_EVENT_SAS_EXPANDER_STATUS_CHANGE = 0x0000001B, 918*e351b826SPaolo Bonzini MPI_EVENT_LOG_ENTRY_ADDED = 0x00000021, 919*e351b826SPaolo Bonzini 920*e351b826SPaolo Bonzini /* AckRequired field values */ 921*e351b826SPaolo Bonzini 922*e351b826SPaolo Bonzini MPI_EVENT_NOTIFICATION_ACK_NOT_REQUIRED = 0x00, 923*e351b826SPaolo Bonzini MPI_EVENT_NOTIFICATION_ACK_REQUIRED = 0x01, 924*e351b826SPaolo Bonzini }; 925*e351b826SPaolo Bonzini 926*e351b826SPaolo Bonzini /**************************************************************************** 927*e351b826SPaolo Bonzini * Config Request Message 928*e351b826SPaolo Bonzini ****************************************************************************/ 929*e351b826SPaolo Bonzini 930*e351b826SPaolo Bonzini typedef struct MPIMsgConfig { 931*e351b826SPaolo Bonzini uint8_t Action; /* 00h */ 932*e351b826SPaolo Bonzini uint8_t Reserved; /* 01h */ 933*e351b826SPaolo Bonzini uint8_t ChainOffset; /* 02h */ 934*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 935*e351b826SPaolo Bonzini uint16_t ExtPageLength; /* 04h */ 936*e351b826SPaolo Bonzini uint8_t ExtPageType; /* 06h */ 937*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 938*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 939*e351b826SPaolo Bonzini uint8_t Reserved2[8]; /* 0Ch */ 940*e351b826SPaolo Bonzini uint8_t PageVersion; /* 14h */ 941*e351b826SPaolo Bonzini uint8_t PageLength; /* 15h */ 942*e351b826SPaolo Bonzini uint8_t PageNumber; /* 16h */ 943*e351b826SPaolo Bonzini uint8_t PageType; /* 17h */ 944*e351b826SPaolo Bonzini uint32_t PageAddress; /* 18h */ 945*e351b826SPaolo Bonzini MPISGEntry PageBufferSGE; /* 1Ch */ 946*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgConfig; 947*e351b826SPaolo Bonzini 948*e351b826SPaolo Bonzini /* Action field values */ 949*e351b826SPaolo Bonzini 950*e351b826SPaolo Bonzini enum { 951*e351b826SPaolo Bonzini MPI_CONFIG_ACTION_PAGE_HEADER = 0x00, 952*e351b826SPaolo Bonzini MPI_CONFIG_ACTION_PAGE_READ_CURRENT = 0x01, 953*e351b826SPaolo Bonzini MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT = 0x02, 954*e351b826SPaolo Bonzini MPI_CONFIG_ACTION_PAGE_DEFAULT = 0x03, 955*e351b826SPaolo Bonzini MPI_CONFIG_ACTION_PAGE_WRITE_NVRAM = 0x04, 956*e351b826SPaolo Bonzini MPI_CONFIG_ACTION_PAGE_READ_DEFAULT = 0x05, 957*e351b826SPaolo Bonzini MPI_CONFIG_ACTION_PAGE_READ_NVRAM = 0x06, 958*e351b826SPaolo Bonzini }; 959*e351b826SPaolo Bonzini 960*e351b826SPaolo Bonzini 961*e351b826SPaolo Bonzini /* Config Reply Message */ 962*e351b826SPaolo Bonzini typedef struct MPIMsgConfigReply { 963*e351b826SPaolo Bonzini uint8_t Action; /* 00h */ 964*e351b826SPaolo Bonzini uint8_t Reserved; /* 01h */ 965*e351b826SPaolo Bonzini uint8_t MsgLength; /* 02h */ 966*e351b826SPaolo Bonzini uint8_t Function; /* 03h */ 967*e351b826SPaolo Bonzini uint16_t ExtPageLength; /* 04h */ 968*e351b826SPaolo Bonzini uint8_t ExtPageType; /* 06h */ 969*e351b826SPaolo Bonzini uint8_t MsgFlags; /* 07h */ 970*e351b826SPaolo Bonzini uint32_t MsgContext; /* 08h */ 971*e351b826SPaolo Bonzini uint8_t Reserved2[2]; /* 0Ch */ 972*e351b826SPaolo Bonzini uint16_t IOCStatus; /* 0Eh */ 973*e351b826SPaolo Bonzini uint32_t IOCLogInfo; /* 10h */ 974*e351b826SPaolo Bonzini uint8_t PageVersion; /* 14h */ 975*e351b826SPaolo Bonzini uint8_t PageLength; /* 15h */ 976*e351b826SPaolo Bonzini uint8_t PageNumber; /* 16h */ 977*e351b826SPaolo Bonzini uint8_t PageType; /* 17h */ 978*e351b826SPaolo Bonzini } QEMU_PACKED MPIMsgConfigReply; 979*e351b826SPaolo Bonzini 980*e351b826SPaolo Bonzini enum { 981*e351b826SPaolo Bonzini /* PageAddress field values */ 982*e351b826SPaolo Bonzini MPI_CONFIG_PAGEATTR_READ_ONLY = 0x00, 983*e351b826SPaolo Bonzini MPI_CONFIG_PAGEATTR_CHANGEABLE = 0x10, 984*e351b826SPaolo Bonzini MPI_CONFIG_PAGEATTR_PERSISTENT = 0x20, 985*e351b826SPaolo Bonzini MPI_CONFIG_PAGEATTR_RO_PERSISTENT = 0x30, 986*e351b826SPaolo Bonzini MPI_CONFIG_PAGEATTR_MASK = 0xF0, 987*e351b826SPaolo Bonzini 988*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_IO_UNIT = 0x00, 989*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_IOC = 0x01, 990*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_BIOS = 0x02, 991*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_SCSI_PORT = 0x03, 992*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_SCSI_DEVICE = 0x04, 993*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_FC_PORT = 0x05, 994*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_FC_DEVICE = 0x06, 995*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_LAN = 0x07, 996*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_RAID_VOLUME = 0x08, 997*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_MANUFACTURING = 0x09, 998*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_RAID_PHYSDISK = 0x0A, 999*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_INBAND = 0x0B, 1000*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_EXTENDED = 0x0F, 1001*e351b826SPaolo Bonzini MPI_CONFIG_PAGETYPE_MASK = 0x0F, 1002*e351b826SPaolo Bonzini 1003*e351b826SPaolo Bonzini MPI_CONFIG_EXTPAGETYPE_SAS_IO_UNIT = 0x10, 1004*e351b826SPaolo Bonzini MPI_CONFIG_EXTPAGETYPE_SAS_EXPANDER = 0x11, 1005*e351b826SPaolo Bonzini MPI_CONFIG_EXTPAGETYPE_SAS_DEVICE = 0x12, 1006*e351b826SPaolo Bonzini MPI_CONFIG_EXTPAGETYPE_SAS_PHY = 0x13, 1007*e351b826SPaolo Bonzini MPI_CONFIG_EXTPAGETYPE_LOG = 0x14, 1008*e351b826SPaolo Bonzini MPI_CONFIG_EXTPAGETYPE_ENCLOSURE = 0x15, 1009*e351b826SPaolo Bonzini 1010*e351b826SPaolo Bonzini MPI_SCSI_PORT_PGAD_PORT_MASK = 0x000000FF, 1011*e351b826SPaolo Bonzini 1012*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_FORM_MASK = 0xF0000000, 1013*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_FORM_BUS_TID = 0x00000000, 1014*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_TARGET_ID_MASK = 0x000000FF, 1015*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_TARGET_ID_SHIFT = 0, 1016*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_BUS_MASK = 0x0000FF00, 1017*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_BUS_SHIFT = 8, 1018*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_FORM_TARGET_MODE = 0x10000000, 1019*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_TM_RESPOND_ID_MASK = 0x000000FF, 1020*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_TM_RESPOND_ID_SHIFT = 0, 1021*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_TM_BUS_MASK = 0x0000FF00, 1022*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_TM_BUS_SHIFT = 8, 1023*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_TM_INIT_ID_MASK = 0x00FF0000, 1024*e351b826SPaolo Bonzini MPI_SCSI_DEVICE_TM_INIT_ID_SHIFT = 16, 1025*e351b826SPaolo Bonzini 1026*e351b826SPaolo Bonzini MPI_FC_PORT_PGAD_PORT_MASK = 0xF0000000, 1027*e351b826SPaolo Bonzini MPI_FC_PORT_PGAD_PORT_SHIFT = 28, 1028*e351b826SPaolo Bonzini MPI_FC_PORT_PGAD_FORM_MASK = 0x0F000000, 1029*e351b826SPaolo Bonzini MPI_FC_PORT_PGAD_FORM_INDEX = 0x01000000, 1030*e351b826SPaolo Bonzini MPI_FC_PORT_PGAD_INDEX_MASK = 0x0000FFFF, 1031*e351b826SPaolo Bonzini MPI_FC_PORT_PGAD_INDEX_SHIFT = 0, 1032*e351b826SPaolo Bonzini 1033*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_PORT_MASK = 0xF0000000, 1034*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_PORT_SHIFT = 28, 1035*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_FORM_MASK = 0x0F000000, 1036*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_FORM_NEXT_DID = 0x00000000, 1037*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_ND_PORT_MASK = 0xF0000000, 1038*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_ND_PORT_SHIFT = 28, 1039*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_ND_DID_MASK = 0x00FFFFFF, 1040*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_ND_DID_SHIFT = 0, 1041*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_FORM_BUS_TID = 0x01000000, 1042*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_BT_BUS_MASK = 0x0000FF00, 1043*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_BT_BUS_SHIFT = 8, 1044*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_BT_TID_MASK = 0x000000FF, 1045*e351b826SPaolo Bonzini MPI_FC_DEVICE_PGAD_BT_TID_SHIFT = 0, 1046*e351b826SPaolo Bonzini 1047*e351b826SPaolo Bonzini MPI_PHYSDISK_PGAD_PHYSDISKNUM_MASK = 0x000000FF, 1048*e351b826SPaolo Bonzini MPI_PHYSDISK_PGAD_PHYSDISKNUM_SHIFT = 0, 1049*e351b826SPaolo Bonzini 1050*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_FORM_MASK = 0xF0000000, 1051*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_FORM_SHIFT = 28, 1052*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_FORM_GET_NEXT_HANDLE = 0x00000000, 1053*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_FORM_HANDLE_PHY_NUM = 0x00000001, 1054*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_FORM_HANDLE = 0x00000002, 1055*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_GNH_MASK_HANDLE = 0x0000FFFF, 1056*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_GNH_SHIFT_HANDLE = 0, 1057*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_HPN_MASK_PHY = 0x00FF0000, 1058*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_HPN_SHIFT_PHY = 16, 1059*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_HPN_MASK_HANDLE = 0x0000FFFF, 1060*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_HPN_SHIFT_HANDLE = 0, 1061*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_H_MASK_HANDLE = 0x0000FFFF, 1062*e351b826SPaolo Bonzini MPI_SAS_EXPAND_PGAD_H_SHIFT_HANDLE = 0, 1063*e351b826SPaolo Bonzini 1064*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_FORM_MASK = 0xF0000000, 1065*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_FORM_SHIFT = 28, 1066*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE = 0x00000000, 1067*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_FORM_BUS_TARGET_ID = 0x00000001, 1068*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_FORM_HANDLE = 0x00000002, 1069*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_GNH_HANDLE_MASK = 0x0000FFFF, 1070*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_GNH_HANDLE_SHIFT = 0, 1071*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_BT_BUS_MASK = 0x0000FF00, 1072*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_BT_BUS_SHIFT = 8, 1073*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_BT_TID_MASK = 0x000000FF, 1074*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_BT_TID_SHIFT = 0, 1075*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_H_HANDLE_MASK = 0x0000FFFF, 1076*e351b826SPaolo Bonzini MPI_SAS_DEVICE_PGAD_H_HANDLE_SHIFT = 0, 1077*e351b826SPaolo Bonzini 1078*e351b826SPaolo Bonzini MPI_SAS_PHY_PGAD_FORM_MASK = 0xF0000000, 1079*e351b826SPaolo Bonzini MPI_SAS_PHY_PGAD_FORM_SHIFT = 28, 1080*e351b826SPaolo Bonzini MPI_SAS_PHY_PGAD_FORM_PHY_NUMBER = 0x0, 1081*e351b826SPaolo Bonzini MPI_SAS_PHY_PGAD_FORM_PHY_TBL_INDEX = 0x1, 1082*e351b826SPaolo Bonzini MPI_SAS_PHY_PGAD_PHY_NUMBER_MASK = 0x000000FF, 1083*e351b826SPaolo Bonzini MPI_SAS_PHY_PGAD_PHY_NUMBER_SHIFT = 0, 1084*e351b826SPaolo Bonzini MPI_SAS_PHY_PGAD_PHY_TBL_INDEX_MASK = 0x0000FFFF, 1085*e351b826SPaolo Bonzini MPI_SAS_PHY_PGAD_PHY_TBL_INDEX_SHIFT = 0, 1086*e351b826SPaolo Bonzini 1087*e351b826SPaolo Bonzini MPI_SAS_ENCLOS_PGAD_FORM_MASK = 0xF0000000, 1088*e351b826SPaolo Bonzini MPI_SAS_ENCLOS_PGAD_FORM_SHIFT = 28, 1089*e351b826SPaolo Bonzini MPI_SAS_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE = 0x00000000, 1090*e351b826SPaolo Bonzini MPI_SAS_ENCLOS_PGAD_FORM_HANDLE = 0x00000001, 1091*e351b826SPaolo Bonzini MPI_SAS_ENCLOS_PGAD_GNH_HANDLE_MASK = 0x0000FFFF, 1092*e351b826SPaolo Bonzini MPI_SAS_ENCLOS_PGAD_GNH_HANDLE_SHIFT = 0, 1093*e351b826SPaolo Bonzini MPI_SAS_ENCLOS_PGAD_H_HANDLE_MASK = 0x0000FFFF, 1094*e351b826SPaolo Bonzini MPI_SAS_ENCLOS_PGAD_H_HANDLE_SHIFT = 0, 1095*e351b826SPaolo Bonzini }; 1096*e351b826SPaolo Bonzini 1097*e351b826SPaolo Bonzini /* Too many structs and definitions... see mptconfig.c for the few 1098*e351b826SPaolo Bonzini * that are used. 1099*e351b826SPaolo Bonzini */ 1100*e351b826SPaolo Bonzini 1101*e351b826SPaolo Bonzini /****************************************************************************/ 1102*e351b826SPaolo Bonzini /* Firmware Upload message and associated structures */ 1103*e351b826SPaolo Bonzini /****************************************************************************/ 1104*e351b826SPaolo Bonzini 1105*e351b826SPaolo Bonzini enum { 1106*e351b826SPaolo Bonzini /* defines for using the ProductId field */ 1107*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_TYPE_MASK = 0xF000, 1108*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_TYPE_SCSI = 0x0000, 1109*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_TYPE_FC = 0x1000, 1110*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_TYPE_SAS = 0x2000, 1111*e351b826SPaolo Bonzini 1112*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_PROD_MASK = 0x0F00, 1113*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_PROD_INITIATOR_SCSI = 0x0100, 1114*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI = 0x0200, 1115*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_PROD_TARGET_SCSI = 0x0300, 1116*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_PROD_IM_SCSI = 0x0400, 1117*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_PROD_IS_SCSI = 0x0500, 1118*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_PROD_CTX_SCSI = 0x0600, 1119*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_PROD_IR_SCSI = 0x0700, 1120*e351b826SPaolo Bonzini 1121*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_MASK = 0x00FF, 1122*e351b826SPaolo Bonzini 1123*e351b826SPaolo Bonzini /* SCSI */ 1124*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1030A0_SCSI = 0x0001, 1125*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1030B0_SCSI = 0x0002, 1126*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1030B1_SCSI = 0x0003, 1127*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1030C0_SCSI = 0x0004, 1128*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1020A0_SCSI = 0x0005, 1129*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1020B0_SCSI = 0x0006, 1130*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1020B1_SCSI = 0x0007, 1131*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1020C0_SCSI = 0x0008, 1132*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1035A0_SCSI = 0x0009, 1133*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1035B0_SCSI = 0x000A, 1134*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1030TA0_SCSI = 0x000B, 1135*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1020TA0_SCSI = 0x000C, 1136*e351b826SPaolo Bonzini 1137*e351b826SPaolo Bonzini /* Fibre Channel */ 1138*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_909_FC = 0x0000, 1139*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_919_FC = 0x0001, /* 919 and 929 */ 1140*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_919X_FC = 0x0002, /* 919X and 929X */ 1141*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_919XL_FC = 0x0003, /* 919XL and 929XL */ 1142*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_939X_FC = 0x0004, /* 939X and 949X */ 1143*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_959_FC = 0x0005, 1144*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_949E_FC = 0x0006, 1145*e351b826SPaolo Bonzini 1146*e351b826SPaolo Bonzini /* SAS */ 1147*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1064_SAS = 0x0001, 1148*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1068_SAS = 0x0002, 1149*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_1078_SAS = 0x0003, 1150*e351b826SPaolo Bonzini MPI_FW_HEADER_PID_FAMILY_106xE_SAS = 0x0004, /* 1068E, 1066E, and 1064E */ 1151*e351b826SPaolo Bonzini }; 1152*e351b826SPaolo Bonzini 1153*e351b826SPaolo Bonzini #endif 1154