1*c12c399aSSascha Wildner /*- 2*c12c399aSSascha Wildner * Copyright (c) 2011 LSI Corp. 3*c12c399aSSascha Wildner * All rights reserved. 4*c12c399aSSascha Wildner * 5*c12c399aSSascha Wildner * Redistribution and use in source and binary forms, with or without 6*c12c399aSSascha Wildner * modification, are permitted provided that the following conditions 7*c12c399aSSascha Wildner * are met: 8*c12c399aSSascha Wildner * 1. Redistributions of source code must retain the above copyright 9*c12c399aSSascha Wildner * notice, this list of conditions and the following disclaimer. 10*c12c399aSSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 11*c12c399aSSascha Wildner * notice, this list of conditions and the following disclaimer in the 12*c12c399aSSascha Wildner * documentation and/or other materials provided with the distribution. 13*c12c399aSSascha Wildner * 14*c12c399aSSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*c12c399aSSascha Wildner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*c12c399aSSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*c12c399aSSascha Wildner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*c12c399aSSascha Wildner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*c12c399aSSascha Wildner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*c12c399aSSascha Wildner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*c12c399aSSascha Wildner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*c12c399aSSascha Wildner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*c12c399aSSascha Wildner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*c12c399aSSascha Wildner * SUCH DAMAGE. 25*c12c399aSSascha Wildner * 26*c12c399aSSascha Wildner * LSI MPT-Fusion Host Adapter FreeBSD 27*c12c399aSSascha Wildner * 28*c12c399aSSascha Wildner * $FreeBSD: src/sys/dev/mps/mpi/mpi2_init.h,v 1.2 2012/01/26 18:17:21 ken Exp $ 29*c12c399aSSascha Wildner */ 30*c12c399aSSascha Wildner 31*c12c399aSSascha Wildner /* 32*c12c399aSSascha Wildner * Copyright (c) 2000-2011 LSI Corporation. 33*c12c399aSSascha Wildner * 34*c12c399aSSascha Wildner * 35*c12c399aSSascha Wildner * Name: mpi2_init.h 36*c12c399aSSascha Wildner * Title: MPI SCSI initiator mode messages and structures 37*c12c399aSSascha Wildner * Creation Date: June 23, 2006 38*c12c399aSSascha Wildner * 39*c12c399aSSascha Wildner * mpi2_init.h Version: 02.00.11 40*c12c399aSSascha Wildner * 41*c12c399aSSascha Wildner * Version History 42*c12c399aSSascha Wildner * --------------- 43*c12c399aSSascha Wildner * 44*c12c399aSSascha Wildner * Date Version Description 45*c12c399aSSascha Wildner * -------- -------- ------------------------------------------------------ 46*c12c399aSSascha Wildner * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 47*c12c399aSSascha Wildner * 10-31-07 02.00.01 Fixed name for pMpi2SCSITaskManagementRequest_t. 48*c12c399aSSascha Wildner * 12-18-07 02.00.02 Modified Task Management Target Reset Method defines. 49*c12c399aSSascha Wildner * 02-29-08 02.00.03 Added Query Task Set and Query Unit Attention. 50*c12c399aSSascha Wildner * 03-03-08 02.00.04 Fixed name of struct _MPI2_SCSI_TASK_MANAGE_REPLY. 51*c12c399aSSascha Wildner * 05-21-08 02.00.05 Fixed typo in name of Mpi2SepRequest_t. 52*c12c399aSSascha Wildner * 10-02-08 02.00.06 Removed Untagged and No Disconnect values from SCSI IO 53*c12c399aSSascha Wildner * Control field Task Attribute flags. 54*c12c399aSSascha Wildner * Moved LUN field defines to mpi2.h becasue they are 55*c12c399aSSascha Wildner * common to many structures. 56*c12c399aSSascha Wildner * 05-06-09 02.00.07 Changed task management type of Query Unit Attention to 57*c12c399aSSascha Wildner * Query Asynchronous Event. 58*c12c399aSSascha Wildner * Defined two new bits in the SlotStatus field of the SCSI 59*c12c399aSSascha Wildner * Enclosure Processor Request and Reply. 60*c12c399aSSascha Wildner * 10-28-09 02.00.08 Added defines for decoding the ResponseInfo bytes for 61*c12c399aSSascha Wildner * both SCSI IO Error Reply and SCSI Task Management Reply. 62*c12c399aSSascha Wildner * Added ResponseInfo field to MPI2_SCSI_TASK_MANAGE_REPLY. 63*c12c399aSSascha Wildner * Added MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG define. 64*c12c399aSSascha Wildner * 02-10-10 02.00.09 Removed unused structure that had "#if 0" around it. 65*c12c399aSSascha Wildner * 05-12-10 02.00.10 Added optional vendor-unique region to SCSI IO Request. 66*c12c399aSSascha Wildner * 11-10-10 02.00.11 Added MPI2_SCSIIO_NUM_SGLOFFSETS define. 67*c12c399aSSascha Wildner * -------------------------------------------------------------------------- 68*c12c399aSSascha Wildner */ 69*c12c399aSSascha Wildner 70*c12c399aSSascha Wildner #ifndef MPI2_INIT_H 71*c12c399aSSascha Wildner #define MPI2_INIT_H 72*c12c399aSSascha Wildner 73*c12c399aSSascha Wildner /***************************************************************************** 74*c12c399aSSascha Wildner * 75*c12c399aSSascha Wildner * SCSI Initiator Messages 76*c12c399aSSascha Wildner * 77*c12c399aSSascha Wildner *****************************************************************************/ 78*c12c399aSSascha Wildner 79*c12c399aSSascha Wildner /**************************************************************************** 80*c12c399aSSascha Wildner * SCSI IO messages and associated structures 81*c12c399aSSascha Wildner ****************************************************************************/ 82*c12c399aSSascha Wildner 83*c12c399aSSascha Wildner typedef struct 84*c12c399aSSascha Wildner { 85*c12c399aSSascha Wildner U8 CDB[20]; /* 0x00 */ 86*c12c399aSSascha Wildner U32 PrimaryReferenceTag; /* 0x14 */ 87*c12c399aSSascha Wildner U16 PrimaryApplicationTag; /* 0x18 */ 88*c12c399aSSascha Wildner U16 PrimaryApplicationTagMask; /* 0x1A */ 89*c12c399aSSascha Wildner U32 TransferLength; /* 0x1C */ 90*c12c399aSSascha Wildner } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32, 91*c12c399aSSascha Wildner Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t; 92*c12c399aSSascha Wildner 93*c12c399aSSascha Wildner typedef union 94*c12c399aSSascha Wildner { 95*c12c399aSSascha Wildner U8 CDB32[32]; 96*c12c399aSSascha Wildner MPI2_SCSI_IO_CDB_EEDP32 EEDP32; 97*c12c399aSSascha Wildner MPI2_SGE_SIMPLE_UNION SGE; 98*c12c399aSSascha Wildner } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION, 99*c12c399aSSascha Wildner Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t; 100*c12c399aSSascha Wildner 101*c12c399aSSascha Wildner /* SCSI IO Request Message */ 102*c12c399aSSascha Wildner typedef struct _MPI2_SCSI_IO_REQUEST 103*c12c399aSSascha Wildner { 104*c12c399aSSascha Wildner U16 DevHandle; /* 0x00 */ 105*c12c399aSSascha Wildner U8 ChainOffset; /* 0x02 */ 106*c12c399aSSascha Wildner U8 Function; /* 0x03 */ 107*c12c399aSSascha Wildner U16 Reserved1; /* 0x04 */ 108*c12c399aSSascha Wildner U8 Reserved2; /* 0x06 */ 109*c12c399aSSascha Wildner U8 MsgFlags; /* 0x07 */ 110*c12c399aSSascha Wildner U8 VP_ID; /* 0x08 */ 111*c12c399aSSascha Wildner U8 VF_ID; /* 0x09 */ 112*c12c399aSSascha Wildner U16 Reserved3; /* 0x0A */ 113*c12c399aSSascha Wildner U32 SenseBufferLowAddress; /* 0x0C */ 114*c12c399aSSascha Wildner U16 SGLFlags; /* 0x10 */ 115*c12c399aSSascha Wildner U8 SenseBufferLength; /* 0x12 */ 116*c12c399aSSascha Wildner U8 Reserved4; /* 0x13 */ 117*c12c399aSSascha Wildner U8 SGLOffset0; /* 0x14 */ 118*c12c399aSSascha Wildner U8 SGLOffset1; /* 0x15 */ 119*c12c399aSSascha Wildner U8 SGLOffset2; /* 0x16 */ 120*c12c399aSSascha Wildner U8 SGLOffset3; /* 0x17 */ 121*c12c399aSSascha Wildner U32 SkipCount; /* 0x18 */ 122*c12c399aSSascha Wildner U32 DataLength; /* 0x1C */ 123*c12c399aSSascha Wildner U32 BidirectionalDataLength; /* 0x20 */ 124*c12c399aSSascha Wildner U16 IoFlags; /* 0x24 */ 125*c12c399aSSascha Wildner U16 EEDPFlags; /* 0x26 */ 126*c12c399aSSascha Wildner U32 EEDPBlockSize; /* 0x28 */ 127*c12c399aSSascha Wildner U32 SecondaryReferenceTag; /* 0x2C */ 128*c12c399aSSascha Wildner U16 SecondaryApplicationTag; /* 0x30 */ 129*c12c399aSSascha Wildner U16 ApplicationTagTranslationMask; /* 0x32 */ 130*c12c399aSSascha Wildner U8 LUN[8]; /* 0x34 */ 131*c12c399aSSascha Wildner U32 Control; /* 0x3C */ 132*c12c399aSSascha Wildner MPI2_SCSI_IO_CDB_UNION CDB; /* 0x40 */ 133*c12c399aSSascha Wildner 134*c12c399aSSascha Wildner #ifdef MPI2_SCSI_IO_VENDOR_UNIQUE_REGION /* typically this is left undefined */ 135*c12c399aSSascha Wildner MPI2_SCSI_IO_VENDOR_UNIQUE VendorRegion; 136*c12c399aSSascha Wildner #endif 137*c12c399aSSascha Wildner 138*c12c399aSSascha Wildner MPI2_SGE_IO_UNION SGL; /* 0x60 */ 139*c12c399aSSascha Wildner 140*c12c399aSSascha Wildner } MPI2_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI2_SCSI_IO_REQUEST, 141*c12c399aSSascha Wildner Mpi2SCSIIORequest_t, MPI2_POINTER pMpi2SCSIIORequest_t; 142*c12c399aSSascha Wildner 143*c12c399aSSascha Wildner /* SCSI IO MsgFlags bits */ 144*c12c399aSSascha Wildner 145*c12c399aSSascha Wildner /* MsgFlags for SenseBufferAddressSpace */ 146*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_MASK_SENSE_ADDR (0x0C) 147*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_SYSTEM_SENSE_ADDR (0x00) 148*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCDDR_SENSE_ADDR (0x04) 149*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCPLB_SENSE_ADDR (0x08) 150*c12c399aSSascha Wildner #define MPI2_SCSIIO_MSGFLAGS_IOCPLBNTA_SENSE_ADDR (0x0C) 151*c12c399aSSascha Wildner 152*c12c399aSSascha Wildner /* SCSI IO SGLFlags bits */ 153*c12c399aSSascha Wildner 154*c12c399aSSascha Wildner /* base values for Data Location Address Space */ 155*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_ADDR_MASK (0x0C) 156*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SYSTEM_ADDR (0x00) 157*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCDDR_ADDR (0x04) 158*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCPLB_ADDR (0x08) 159*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_IOCPLBNTA_ADDR (0x0C) 160*c12c399aSSascha Wildner 161*c12c399aSSascha Wildner /* base values for Type */ 162*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_MASK (0x03) 163*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_MPI (0x00) 164*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE32 (0x01) 165*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE64 (0x02) 166*c12c399aSSascha Wildner 167*c12c399aSSascha Wildner /* shift values for each sub-field */ 168*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL3_SHIFT (12) 169*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL2_SHIFT (8) 170*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL1_SHIFT (4) 171*c12c399aSSascha Wildner #define MPI2_SCSIIO_SGLFLAGS_SGL0_SHIFT (0) 172*c12c399aSSascha Wildner 173*c12c399aSSascha Wildner /* number of SGLOffset fields */ 174*c12c399aSSascha Wildner #define MPI2_SCSIIO_NUM_SGLOFFSETS (4) 175*c12c399aSSascha Wildner 176*c12c399aSSascha Wildner /* SCSI IO IoFlags bits */ 177*c12c399aSSascha Wildner 178*c12c399aSSascha Wildner /* Large CDB Address Space */ 179*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_MASK (0x6000) 180*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_SYSTEM (0x0000) 181*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCDDR (0x2000) 182*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCPLB (0x4000) 183*c12c399aSSascha Wildner #define MPI2_SCSIIO_CDB_ADDR_IOCPLBNTA (0x6000) 184*c12c399aSSascha Wildner 185*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_LARGE_CDB (0x1000) 186*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_BIDIRECTIONAL (0x0800) 187*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_MULTICAST (0x0400) 188*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR (0x0200) 189*c12c399aSSascha Wildner #define MPI2_SCSIIO_IOFLAGS_CDBLENGTH_MASK (0x01FF) 190*c12c399aSSascha Wildner 191*c12c399aSSascha Wildner /* SCSI IO EEDPFlags bits */ 192*c12c399aSSascha Wildner 193*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG (0x8000) 194*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_REFTAG (0x4000) 195*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_APPTAG (0x2000) 196*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_APPTAG (0x1000) 197*c12c399aSSascha Wildner 198*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG (0x0400) 199*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG (0x0200) 200*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD (0x0100) 201*c12c399aSSascha Wildner 202*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_PASSTHRU_REFTAG (0x0008) 203*c12c399aSSascha Wildner 204*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_MASK_OP (0x0007) 205*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_NOOP_OP (0x0000) 206*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_OP (0x0001) 207*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_STRIP_OP (0x0002) 208*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP (0x0003) 209*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_INSERT_OP (0x0004) 210*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_REPLACE_OP (0x0006) 211*c12c399aSSascha Wildner #define MPI2_SCSIIO_EEDPFLAGS_CHECK_REGEN_OP (0x0007) 212*c12c399aSSascha Wildner 213*c12c399aSSascha Wildner /* SCSI IO LUN fields: use MPI2_LUN_ from mpi2.h */ 214*c12c399aSSascha Wildner 215*c12c399aSSascha Wildner /* SCSI IO Control bits */ 216*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_ADDCDBLEN_MASK (0xFC000000) 217*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_ADDCDBLEN_SHIFT (26) 218*c12c399aSSascha Wildner 219*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_DATADIRECTION_MASK (0x03000000) 220*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_NODATATRANSFER (0x00000000) 221*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_WRITE (0x01000000) 222*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_READ (0x02000000) 223*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_BIDIRECTIONAL (0x03000000) 224*c12c399aSSascha Wildner 225*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKPRI_MASK (0x00007800) 226*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT (11) 227*c12c399aSSascha Wildner 228*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK (0x00000700) 229*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_SIMPLEQ (0x00000000) 230*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_HEADOFQ (0x00000100) 231*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_ORDEREDQ (0x00000200) 232*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_ACAQ (0x00000400) 233*c12c399aSSascha Wildner 234*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_MASK (0x000000C0) 235*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_NO_TLR (0x00000000) 236*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_ON (0x00000040) 237*c12c399aSSascha Wildner #define MPI2_SCSIIO_CONTROL_TLR_OFF (0x00000080) 238*c12c399aSSascha Wildner 239*c12c399aSSascha Wildner 240*c12c399aSSascha Wildner /* SCSI IO Error Reply Message */ 241*c12c399aSSascha Wildner typedef struct _MPI2_SCSI_IO_REPLY 242*c12c399aSSascha Wildner { 243*c12c399aSSascha Wildner U16 DevHandle; /* 0x00 */ 244*c12c399aSSascha Wildner U8 MsgLength; /* 0x02 */ 245*c12c399aSSascha Wildner U8 Function; /* 0x03 */ 246*c12c399aSSascha Wildner U16 Reserved1; /* 0x04 */ 247*c12c399aSSascha Wildner U8 Reserved2; /* 0x06 */ 248*c12c399aSSascha Wildner U8 MsgFlags; /* 0x07 */ 249*c12c399aSSascha Wildner U8 VP_ID; /* 0x08 */ 250*c12c399aSSascha Wildner U8 VF_ID; /* 0x09 */ 251*c12c399aSSascha Wildner U16 Reserved3; /* 0x0A */ 252*c12c399aSSascha Wildner U8 SCSIStatus; /* 0x0C */ 253*c12c399aSSascha Wildner U8 SCSIState; /* 0x0D */ 254*c12c399aSSascha Wildner U16 IOCStatus; /* 0x0E */ 255*c12c399aSSascha Wildner U32 IOCLogInfo; /* 0x10 */ 256*c12c399aSSascha Wildner U32 TransferCount; /* 0x14 */ 257*c12c399aSSascha Wildner U32 SenseCount; /* 0x18 */ 258*c12c399aSSascha Wildner U32 ResponseInfo; /* 0x1C */ 259*c12c399aSSascha Wildner U16 TaskTag; /* 0x20 */ 260*c12c399aSSascha Wildner U16 Reserved4; /* 0x22 */ 261*c12c399aSSascha Wildner U32 BidirectionalTransferCount; /* 0x24 */ 262*c12c399aSSascha Wildner U32 Reserved5; /* 0x28 */ 263*c12c399aSSascha Wildner U32 Reserved6; /* 0x2C */ 264*c12c399aSSascha Wildner } MPI2_SCSI_IO_REPLY, MPI2_POINTER PTR_MPI2_SCSI_IO_REPLY, 265*c12c399aSSascha Wildner Mpi2SCSIIOReply_t, MPI2_POINTER pMpi2SCSIIOReply_t; 266*c12c399aSSascha Wildner 267*c12c399aSSascha Wildner /* SCSI IO Reply SCSIStatus values (SAM-4 status codes) */ 268*c12c399aSSascha Wildner 269*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_GOOD (0x00) 270*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_CHECK_CONDITION (0x02) 271*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_CONDITION_MET (0x04) 272*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_BUSY (0x08) 273*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_INTERMEDIATE (0x10) 274*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET (0x14) 275*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_RESERVATION_CONFLICT (0x18) 276*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_COMMAND_TERMINATED (0x22) /* obsolete */ 277*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_TASK_SET_FULL (0x28) 278*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_ACA_ACTIVE (0x30) 279*c12c399aSSascha Wildner #define MPI2_SCSI_STATUS_TASK_ABORTED (0x40) 280*c12c399aSSascha Wildner 281*c12c399aSSascha Wildner /* SCSI IO Reply SCSIState flags */ 282*c12c399aSSascha Wildner 283*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_RESPONSE_INFO_VALID (0x10) 284*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_TERMINATED (0x08) 285*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_NO_SCSI_STATUS (0x04) 286*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_AUTOSENSE_FAILED (0x02) 287*c12c399aSSascha Wildner #define MPI2_SCSI_STATE_AUTOSENSE_VALID (0x01) 288*c12c399aSSascha Wildner 289*c12c399aSSascha Wildner /* masks and shifts for the ResponseInfo field */ 290*c12c399aSSascha Wildner 291*c12c399aSSascha Wildner #define MPI2_SCSI_RI_MASK_REASONCODE (0x000000FF) 292*c12c399aSSascha Wildner #define MPI2_SCSI_RI_SHIFT_REASONCODE (0) 293*c12c399aSSascha Wildner 294*c12c399aSSascha Wildner #define MPI2_SCSI_TASKTAG_UNKNOWN (0xFFFF) 295*c12c399aSSascha Wildner 296*c12c399aSSascha Wildner 297*c12c399aSSascha Wildner /**************************************************************************** 298*c12c399aSSascha Wildner * SCSI Task Management messages 299*c12c399aSSascha Wildner ****************************************************************************/ 300*c12c399aSSascha Wildner 301*c12c399aSSascha Wildner /* SCSI Task Management Request Message */ 302*c12c399aSSascha Wildner typedef struct _MPI2_SCSI_TASK_MANAGE_REQUEST 303*c12c399aSSascha Wildner { 304*c12c399aSSascha Wildner U16 DevHandle; /* 0x00 */ 305*c12c399aSSascha Wildner U8 ChainOffset; /* 0x02 */ 306*c12c399aSSascha Wildner U8 Function; /* 0x03 */ 307*c12c399aSSascha Wildner U8 Reserved1; /* 0x04 */ 308*c12c399aSSascha Wildner U8 TaskType; /* 0x05 */ 309*c12c399aSSascha Wildner U8 Reserved2; /* 0x06 */ 310*c12c399aSSascha Wildner U8 MsgFlags; /* 0x07 */ 311*c12c399aSSascha Wildner U8 VP_ID; /* 0x08 */ 312*c12c399aSSascha Wildner U8 VF_ID; /* 0x09 */ 313*c12c399aSSascha Wildner U16 Reserved3; /* 0x0A */ 314*c12c399aSSascha Wildner U8 LUN[8]; /* 0x0C */ 315*c12c399aSSascha Wildner U32 Reserved4[7]; /* 0x14 */ 316*c12c399aSSascha Wildner U16 TaskMID; /* 0x30 */ 317*c12c399aSSascha Wildner U16 Reserved5; /* 0x32 */ 318*c12c399aSSascha Wildner } MPI2_SCSI_TASK_MANAGE_REQUEST, 319*c12c399aSSascha Wildner MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REQUEST, 320*c12c399aSSascha Wildner Mpi2SCSITaskManagementRequest_t, 321*c12c399aSSascha Wildner MPI2_POINTER pMpi2SCSITaskManagementRequest_t; 322*c12c399aSSascha Wildner 323*c12c399aSSascha Wildner /* TaskType values */ 324*c12c399aSSascha Wildner 325*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK (0x01) 326*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET (0x02) 327*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET (0x03) 328*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET (0x05) 329*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET (0x06) 330*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK (0x07) 331*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_CLR_ACA (0x08) 332*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_TASK_SET (0x09) 333*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT (0x0A) 334*c12c399aSSascha Wildner 335*c12c399aSSascha Wildner /* obsolete TaskType name */ 336*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_TASKTYPE_QRY_UNIT_ATTENTION (MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT) 337*c12c399aSSascha Wildner 338*c12c399aSSascha Wildner /* MsgFlags bits */ 339*c12c399aSSascha Wildner 340*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_MASK_TARGET_RESET (0x18) 341*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_LINK_RESET (0x00) 342*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_NEXUS_RESET_SRST (0x08) 343*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_SAS_HARD_LINK_RESET (0x10) 344*c12c399aSSascha Wildner 345*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU (0x01) 346*c12c399aSSascha Wildner 347*c12c399aSSascha Wildner 348*c12c399aSSascha Wildner 349*c12c399aSSascha Wildner /* SCSI Task Management Reply Message */ 350*c12c399aSSascha Wildner typedef struct _MPI2_SCSI_TASK_MANAGE_REPLY 351*c12c399aSSascha Wildner { 352*c12c399aSSascha Wildner U16 DevHandle; /* 0x00 */ 353*c12c399aSSascha Wildner U8 MsgLength; /* 0x02 */ 354*c12c399aSSascha Wildner U8 Function; /* 0x03 */ 355*c12c399aSSascha Wildner U8 ResponseCode; /* 0x04 */ 356*c12c399aSSascha Wildner U8 TaskType; /* 0x05 */ 357*c12c399aSSascha Wildner U8 Reserved1; /* 0x06 */ 358*c12c399aSSascha Wildner U8 MsgFlags; /* 0x07 */ 359*c12c399aSSascha Wildner U8 VP_ID; /* 0x08 */ 360*c12c399aSSascha Wildner U8 VF_ID; /* 0x09 */ 361*c12c399aSSascha Wildner U16 Reserved2; /* 0x0A */ 362*c12c399aSSascha Wildner U16 Reserved3; /* 0x0C */ 363*c12c399aSSascha Wildner U16 IOCStatus; /* 0x0E */ 364*c12c399aSSascha Wildner U32 IOCLogInfo; /* 0x10 */ 365*c12c399aSSascha Wildner U32 TerminationCount; /* 0x14 */ 366*c12c399aSSascha Wildner U32 ResponseInfo; /* 0x18 */ 367*c12c399aSSascha Wildner } MPI2_SCSI_TASK_MANAGE_REPLY, 368*c12c399aSSascha Wildner MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REPLY, 369*c12c399aSSascha Wildner Mpi2SCSITaskManagementReply_t, MPI2_POINTER pMpi2SCSIManagementReply_t; 370*c12c399aSSascha Wildner 371*c12c399aSSascha Wildner /* ResponseCode values */ 372*c12c399aSSascha Wildner 373*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_COMPLETE (0x00) 374*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_INVALID_FRAME (0x02) 375*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED (0x04) 376*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_FAILED (0x05) 377*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED (0x08) 378*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN (0x09) 379*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG (0x0A) 380*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC (0x80) 381*c12c399aSSascha Wildner 382*c12c399aSSascha Wildner /* masks and shifts for the ResponseInfo field */ 383*c12c399aSSascha Wildner 384*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_REASONCODE (0x000000FF) 385*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_REASONCODE (0) 386*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI2 (0x0000FF00) 387*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI2 (8) 388*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI1 (0x00FF0000) 389*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI1 (16) 390*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_MASK_ARI0 (0xFF000000) 391*c12c399aSSascha Wildner #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI0 (24) 392*c12c399aSSascha Wildner 393*c12c399aSSascha Wildner 394*c12c399aSSascha Wildner /**************************************************************************** 395*c12c399aSSascha Wildner * SCSI Enclosure Processor messages 396*c12c399aSSascha Wildner ****************************************************************************/ 397*c12c399aSSascha Wildner 398*c12c399aSSascha Wildner /* SCSI Enclosure Processor Request Message */ 399*c12c399aSSascha Wildner typedef struct _MPI2_SEP_REQUEST 400*c12c399aSSascha Wildner { 401*c12c399aSSascha Wildner U16 DevHandle; /* 0x00 */ 402*c12c399aSSascha Wildner U8 ChainOffset; /* 0x02 */ 403*c12c399aSSascha Wildner U8 Function; /* 0x03 */ 404*c12c399aSSascha Wildner U8 Action; /* 0x04 */ 405*c12c399aSSascha Wildner U8 Flags; /* 0x05 */ 406*c12c399aSSascha Wildner U8 Reserved1; /* 0x06 */ 407*c12c399aSSascha Wildner U8 MsgFlags; /* 0x07 */ 408*c12c399aSSascha Wildner U8 VP_ID; /* 0x08 */ 409*c12c399aSSascha Wildner U8 VF_ID; /* 0x09 */ 410*c12c399aSSascha Wildner U16 Reserved2; /* 0x0A */ 411*c12c399aSSascha Wildner U32 SlotStatus; /* 0x0C */ 412*c12c399aSSascha Wildner U32 Reserved3; /* 0x10 */ 413*c12c399aSSascha Wildner U32 Reserved4; /* 0x14 */ 414*c12c399aSSascha Wildner U32 Reserved5; /* 0x18 */ 415*c12c399aSSascha Wildner U16 Slot; /* 0x1C */ 416*c12c399aSSascha Wildner U16 EnclosureHandle; /* 0x1E */ 417*c12c399aSSascha Wildner } MPI2_SEP_REQUEST, MPI2_POINTER PTR_MPI2_SEP_REQUEST, 418*c12c399aSSascha Wildner Mpi2SepRequest_t, MPI2_POINTER pMpi2SepRequest_t; 419*c12c399aSSascha Wildner 420*c12c399aSSascha Wildner /* Action defines */ 421*c12c399aSSascha Wildner #define MPI2_SEP_REQ_ACTION_WRITE_STATUS (0x00) 422*c12c399aSSascha Wildner #define MPI2_SEP_REQ_ACTION_READ_STATUS (0x01) 423*c12c399aSSascha Wildner 424*c12c399aSSascha Wildner /* Flags defines */ 425*c12c399aSSascha Wildner #define MPI2_SEP_REQ_FLAGS_DEVHANDLE_ADDRESS (0x00) 426*c12c399aSSascha Wildner #define MPI2_SEP_REQ_FLAGS_ENCLOSURE_SLOT_ADDRESS (0x01) 427*c12c399aSSascha Wildner 428*c12c399aSSascha Wildner /* SlotStatus defines */ 429*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE (0x00040000) 430*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST (0x00020000) 431*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED (0x00000200) 432*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_HOT_SPARE (0x00000100) 433*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_UNCONFIGURED (0x00000080) 434*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_PREDICTED_FAULT (0x00000040) 435*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IN_CRITICAL_ARRAY (0x00000010) 436*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_IN_FAILED_ARRAY (0x00000008) 437*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_DEV_REBUILDING (0x00000004) 438*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_DEV_FAULTY (0x00000002) 439*c12c399aSSascha Wildner #define MPI2_SEP_REQ_SLOTSTATUS_NO_ERROR (0x00000001) 440*c12c399aSSascha Wildner 441*c12c399aSSascha Wildner 442*c12c399aSSascha Wildner /* SCSI Enclosure Processor Reply Message */ 443*c12c399aSSascha Wildner typedef struct _MPI2_SEP_REPLY 444*c12c399aSSascha Wildner { 445*c12c399aSSascha Wildner U16 DevHandle; /* 0x00 */ 446*c12c399aSSascha Wildner U8 MsgLength; /* 0x02 */ 447*c12c399aSSascha Wildner U8 Function; /* 0x03 */ 448*c12c399aSSascha Wildner U8 Action; /* 0x04 */ 449*c12c399aSSascha Wildner U8 Flags; /* 0x05 */ 450*c12c399aSSascha Wildner U8 Reserved1; /* 0x06 */ 451*c12c399aSSascha Wildner U8 MsgFlags; /* 0x07 */ 452*c12c399aSSascha Wildner U8 VP_ID; /* 0x08 */ 453*c12c399aSSascha Wildner U8 VF_ID; /* 0x09 */ 454*c12c399aSSascha Wildner U16 Reserved2; /* 0x0A */ 455*c12c399aSSascha Wildner U16 Reserved3; /* 0x0C */ 456*c12c399aSSascha Wildner U16 IOCStatus; /* 0x0E */ 457*c12c399aSSascha Wildner U32 IOCLogInfo; /* 0x10 */ 458*c12c399aSSascha Wildner U32 SlotStatus; /* 0x14 */ 459*c12c399aSSascha Wildner U32 Reserved4; /* 0x18 */ 460*c12c399aSSascha Wildner U16 Slot; /* 0x1C */ 461*c12c399aSSascha Wildner U16 EnclosureHandle; /* 0x1E */ 462*c12c399aSSascha Wildner } MPI2_SEP_REPLY, MPI2_POINTER PTR_MPI2_SEP_REPLY, 463*c12c399aSSascha Wildner Mpi2SepReply_t, MPI2_POINTER pMpi2SepReply_t; 464*c12c399aSSascha Wildner 465*c12c399aSSascha Wildner /* SlotStatus defines */ 466*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_REMOVE_READY (0x00040000) 467*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST (0x00020000) 468*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED (0x00000200) 469*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_HOT_SPARE (0x00000100) 470*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_UNCONFIGURED (0x00000080) 471*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_PREDICTED_FAULT (0x00000040) 472*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IN_CRITICAL_ARRAY (0x00000010) 473*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_IN_FAILED_ARRAY (0x00000008) 474*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_REBUILDING (0x00000004) 475*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_DEV_FAULTY (0x00000002) 476*c12c399aSSascha Wildner #define MPI2_SEP_REPLY_SLOTSTATUS_NO_ERROR (0x00000001) 477*c12c399aSSascha Wildner 478*c12c399aSSascha Wildner 479*c12c399aSSascha Wildner #endif 480