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 12 extern "C" { 13 #endif 14 15 /* 16 * SCSI Initiator Messages 17 */ 18 19 /* 20 * SCSI IO messages and assocaited structures 21 */ 22 typedef 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 */ 92 typedef 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 */ 152 typedef 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 185 typedef 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 */ 204 typedef 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