1/* 2 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6#ifndef _SYS_MPI_INIT_H 7#define _SYS_MPI_INIT_H 8 9#pragma ident "%Z%%M% %I% %E% SMI" 10 11#ifdef __cplusplus 12extern "C" { 13#endif 14 15/* 16 * SCSI Initiator Messages 17 */ 18 19/* 20 * SCSI IO messages and assocaited structures 21 */ 22typedef struct msg_scsi_io_request { 23 uint8_t TargetID; 24 uint8_t Bus; 25 uint8_t ChainOffset; 26 uint8_t Function; 27 uint8_t CDBLength; 28 uint8_t SenseBufferLength; 29 uint8_t Reserved; 30 uint8_t MsgFlags; 31 uint32_t MsgContext; 32 uint8_t LUN[8]; 33 uint32_t Control; 34 uint8_t CDB[16]; 35 uint32_t DataLength; 36 uint32_t SenseBufferLowAddr; 37 sge_io_union_t SGL; 38} msg_scsi_io_request_t; 39 40/* SCSIO MsgFlags bits */ 41 42#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH 0x01 43#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_32 0x00 44#define MPI_SCSIIO_MSGFLGS_SENSE_WIDTH_64 0x01 45#define MPI_SCSIIO_MSGFLGS_SENSE_LOCATION 0x02 46#define MPI_SCSIIO_MSGFLGS_SENSE_LOC_HOST 0x00 47#define MPI_SCSIIO_MSGFLGS_SENSE_LOC_IOC 0x02 48 49/* 50 * SCSIIO LUN fields 51 */ 52#define MPI_SCSIIO_LUN_FIRST_LEVEL_ADDRESSING 0x0000FFFF 53#define MPI_SCSIIO_LUN_SECOND_LEVEL_ADDRESSING 0xFFFF0000 54#define MPI_SCSIIO_LUN_THIRD_LEVEL_ADDRESSING 0x0000FFFF 55#define MPI_SCSIIO_LUN_FOURTH_LEVEL_ADDRESSING 0xFFFF0000 56#define MPI_SCSIIO_LUN_LEVEL_1_WORD 0xFF00 57#define MPI_SCSIIO_LUN_LEVEL_1_DWORD 0x0000FF00 58 59/* 60 * SCSIO Control bits 61 */ 62#define MPI_SCSIIO_CONTROL_DATADIRECTION_MASK 0x03000000 63#define MPI_SCSIIO_CONTROL_NODATATRANSFER 0x00000000 64#define MPI_SCSIIO_CONTROL_WRITE 0x01000000 65#define MPI_SCSIIO_CONTROL_READ 0x02000000 66 67#define MPI_SCSIIO_CONTROL_ADDCDBLEN_MASK 0x3C000000 68#define MPI_SCSIIO_CONTROL_ADDCDBLEN_SHIFT 26 69 70#define MPI_SCSIIO_CONTROL_TASKATTRIBUTE_MASK 0x00000700 71#define MPI_SCSIIO_CONTROL_SIMPLEQ 0x00000000 72#define MPI_SCSIIO_CONTROL_HEADOFQ 0x00000100 73#define MPI_SCSIIO_CONTROL_ORDEREDQ 0x00000200 74#define MPI_SCSIIO_CONTROL_ACAQ 0x00000400 75#define MPI_SCSIIO_CONTROL_UNTAGGED 0x00000500 76#define MPI_SCSIIO_CONTROL_NO_DISCONNECT 0x00000700 77 78#define MPI_SCSIIO_CONTROL_TASKMANAGE_MASK 0x00FF0000 79#define MPI_SCSIIO_CONTROL_OBSOLETE 0x00800000 80#define MPI_SCSIIO_CONTROL_CLEAR_ACA_RSV 0x00400000 81#define MPI_SCSIIO_CONTROL_TARGET_RESET 0x00200000 82#define MPI_SCSIIO_CONTROL_LUN_RESET_RSV 0x00100000 83#define MPI_SCSIIO_CONTROL_RESERVED 0x00080000 84#define MPI_SCSIIO_CONTROL_CLR_TASK_SET_RSV 0x00040000 85#define MPI_SCSIIO_CONTROL_ABORT_TASK_SET 0x00020000 86#define MPI_SCSIIO_CONTROL_RESERVED2 0x00010000 87 88 89/* 90 * SCSIIO reply structure 91 */ 92typedef struct msg_scsi_io_reply { 93 uint8_t TargetID; 94 uint8_t Bus; 95 uint8_t MsgLength; 96 uint8_t Function; 97 uint8_t CDBLength; 98 uint8_t SenseBufferLength; 99 uint8_t Reserved; 100 uint8_t MsgFlags; 101 uint32_t MsgContext; 102 uint8_t SCSIStatus; 103 uint8_t SCSIState; 104 uint16_t IOCStatus; 105 uint32_t IOCLogInfo; 106 uint32_t TransferCount; 107 uint32_t SenseCount; 108 uint32_t ResponseInfo; 109 uint16_t TaskTag; 110 uint16_t Reserved1; 111} msg_scsi_io_reply_t; 112 113/* 114 * SCSIIO Reply SCSIStatus values (SAM-2 status codes) 115 */ 116#define MPI_SCSI_STATUS_SUCCESS 0x00 117#define MPI_SCSI_STATUS_CHECK_CONDITION 0x02 118#define MPI_SCSI_STATUS_CONDITION_MET 0x04 119#define MPI_SCSI_STATUS_BUSY 0x08 120#define MPI_SCSI_STATUS_INTERMEDIATE 0x10 121#define MPI_SCSI_STATUS_INTERMEDIATE_CONDMET 0x14 122#define MPI_SCSI_STATUS_RESERVATION_CONFLICT 0x18 123#define MPI_SCSI_STATUS_COMMAND_TERMINATED 0x22 124#define MPI_SCSI_STATUS_TASK_SET_FULL 0x28 125#define MPI_SCSI_STATUS_ACA_ACTIVE 0x30 126 127/* 128 * SCSIIO Reply SCSIState values 129 */ 130#define MPI_SCSI_STATE_AUTOSENSE_VALID 0x01 131#define MPI_SCSI_STATE_AUTOSENSE_FAILED 0x02 132#define MPI_SCSI_STATE_NO_SCSI_STATUS 0x04 133#define MPI_SCSI_STATE_TERMINATED 0x08 134#define MPI_SCSI_STATE_RESPONSE_INFO_VALID 0x10 135#define MPI_SCSI_STATE_QUEUE_TAG_REJECTED 0x20 136 137/* 138 * SCSIIO Reply ResponseInfo values 139 * (FCP-1 RSP_CODE values and SPI-3 Packetized Failure codes) 140 */ 141#define MPI_SCSI_RSP_INFO_FUNCTION_COMPLETE 0x00000000 142#define MPI_SCSI_RSP_INFO_FCP_BURST_LEN_ERROR 0x01000000 143#define MPI_SCSI_RSP_INFO_CMND_FIELDS_INVALID 0x02000000 144#define MPI_SCSI_RSP_INFO_FCP_DATA_RO_ERROR 0x03000000 145#define MPI_SCSI_RSP_INFO_TASK_MGMT_UNSUPPORTED 0x04000000 146#define MPI_SCSI_RSP_INFO_TASK_MGMT_FAILED 0x05000000 147#define MPI_SCSI_RSP_INFO_SPI_LQ_INVALID_TYPE 0x06000000 148 149/* 150 * SCSI Task Management messages 151 */ 152typedef struct msg_scsi_task_mgmt { 153 uint8_t TargetID; 154 uint8_t Bus; 155 uint8_t ChainOffset; 156 uint8_t Function; 157 uint8_t Reserved; 158 uint8_t TaskType; 159 uint8_t Reserved1; 160 uint8_t MsgFlags; 161 uint32_t MsgContext; 162 uint8_t LUN[8]; 163 uint32_t Reserved2[7]; 164 uint32_t TaskMsgContext; 165} msg_scsi_task_mgmt_t; 166 167/* 168 * TaskType values 169 */ 170#define MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK 0x00000001 171#define MPI_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET 0x00000002 172#define MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET 0x00000003 173#define MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS 0x00000004 174#define MPI_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET 0x00000005 175 176/* 177 * MsgFlags bits 178 */ 179#define MPI_SCSITASKMGMT_MSGFLAGS_TARGET_RESET_OPTION 0x00000000 180#define MPI_SCSITASKMGMT_MSGFLAGS_LIP_RESET_OPTION 0x00000002 181#define MPI_SCSITASKMGMT_MSGFLAGS_LIPRESET_RESET_OPTION 0x00000004 182 183/* SCSI Task Management Reply */ 184 185typedef struct msg_scsi_task_mgmt_reply { 186 uint8_t TargetID; 187 uint8_t Bus; 188 uint8_t MsgLength; 189 uint8_t Function; 190 uint8_t Reserved; 191 uint8_t TaskType; 192 uint8_t Reserved1; 193 uint8_t MsgFlags; 194 uint32_t MsgContext; 195 uint8_t Reserved2[2]; 196 uint16_t IOCStatus; 197 uint32_t IOCLogInfo; 198 uint32_t TerminationCount; 199} msg_scsi_task_mgmt_reply_t; 200 201/* 202 * SCSI enclosure processor messages 203 */ 204typedef struct msg_sep_request { 205 uint8_t TargetID; 206 uint8_t Bus; 207 uint8_t ChainOffset; 208 uint8_t Function; 209 uint8_t Action; 210 uint8_t Reserved1; 211 uint8_t Reserved2; 212 uint8_t MsgFlags; 213 uint32_t MsgContext; 214 uint32_t SlotStatus; 215} msg_sep_request_t; 216 217#define MPI_SEP_REQ_ACTION_WRITE_STATUS 0x00 218#define MPI_SEP_REQ_ACTION_READ_STATUS 0x01 219 220#define MPI_SEP_REQ_SLOTSTATUS_NO_ERROR 0x00000001 221#define MPI_SEP_REQ_SLOTSTATUS_DEV_FAULTY 0x00000002 222#define MPI_SEP_REQ_SLOTSTATUS_DEV_REBUILDING 0x00000004 223 224#ifdef __cplusplus 225} 226#endif 227 228#endif /* _SYS_MPI_INIT_H */ 229