1 /* 2 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 #ifndef _SYS_MPI_H 7 #define _SYS_MPI_H 8 9 #pragma ident "%Z%%M% %I% %E% SMI" 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 /* 16 * This header file is based on Version 1.2 of the MPT 17 * Specification by LSI Logic, Inc. 18 */ 19 20 /* 21 * MPI Version Definitions 22 */ 23 #define MPI_VERSION_MAJOR (0x01) 24 #define MPI_VERSION_MINOR (0x05) 25 #define MPI_VERSION_MAJOR_MASK (0xFF00) 26 #define MPI_VERSION_MAJOR_SHIFT (8) 27 #define MPI_VERSION_MINOR_MASK (0x00FF) 28 #define MPI_VERSION_MINOR_SHIFT (0) 29 #define MPI_VERSION ((MPI_VERSION_MAJOR << MPI_VERSION_MAJOR_SHIFT) | \ 30 MPI_VERSION_MINOR) 31 32 #define MPI_HEADER_VERSION_UNIT (0x00) 33 #define MPI_HEADER_VERSION_DEV (0x00) 34 #define MPI_HEADER_VERSION_UNIT_MASK (0xFF00) 35 #define MPI_HEADER_VERSION_UNIT_SHIFT (8) 36 #define MPI_HEADER_VERSION_DEV_MASK (0x00FF) 37 #define MPI_HEADER_VERSION_DEV_SHIFT (0) 38 #define MPI_HEADER_VERSION ((MPI_HEADER_VERSION_UNIT << 8) | \ 39 MPI_HEADER_VERSION_DEV) 40 /* Note: The major versions of 0xe0 through 0xff are reserved */ 41 42 /* 43 * IOC State Definitions 44 */ 45 #define MPI_IOC_STATE_RESET 0x00000000 46 #define MPI_IOC_STATE_READY 0x10000000 47 #define MPI_IOC_STATE_OPERATIONAL 0x20000000 48 #define MPI_IOC_STATE_FAULT 0x40000000 49 50 #define MPI_IOC_STATE_MASK 0xF0000000 51 #define MPI_IOC_STATE_SHIFT 28 52 53 /* 54 * Fault state codes (product independent range 0x8000-0xFFFF) 55 */ 56 #define MPI_FAULT_REQUEST_MESSAGE_PCI_PARITY_ERROR 0x8111 57 #define MPI_FAULT_REQUEST_MESSAGE_PCI_BUS_FAULT 0x8112 58 #define MPI_FAULT_REPLY_MESSAGE_PCI_PARITY_ERROR 0x8113 59 #define MPI_FAULT_REPLY_MESSAGE_PCI_BUS_FAULT 0x8114 60 #define MPI_FAULT_DATA_SEND_PCI_PARITY_ERROR 0x8115 61 #define MPI_FAULT_DATA_SEND_PCI_BUS_FAULT 0x8116 62 #define MPI_FAULT_DATA_RECEIVE_PCI_PARITY_ERROR 0x8117 63 #define MPI_FAULT_DATA_RECEIVE_PCI_BUS_FAULT 0x8118 64 65 66 /* 67 * System Doorbell 68 */ 69 #define MPI_DOORBELL_OFFSET 0x00000000 70 #define MPI_DOORBELL_ACTIVE 0x08000000 71 #define MPI_DOORBELL_USED MPI_DOORBELL_ACTIVE 72 #define MPI_DOORBELL_ACTIVE_SHIFT 27 73 #define MPI_DOORBELL_WHO_INIT_MASK 0x07000000 74 #define MPI_DOORBELL_WHO_INIT_SHIFT 24 75 #define MPI_DOORBELL_FUNCTION_MASK 0xFF000000 76 #define MPI_DOORBELL_FUNCTION_SHIFT 24 77 #define MPI_DOORBELL_ADD_DWORDS_MASK 0x00FF0000 78 #define MPI_DOORBELL_ADD_DWORDS_SHIFT 16 79 #define MPI_DOORBELL_DATA_MASK 0x0000FFFF 80 81 82 /* 83 * PCI System Interface Registers 84 */ 85 #define MPI_WRITE_SEQUENCE_OFFSET 0x00000004 86 #define MPI_WRSEQ_KEY_VALUE_MASK 0x0000000F 87 #define MPI_WRSEQ_1ST_KEY_VALUE 0x04 88 #define MPI_WRSEQ_2ND_KEY_VALUE 0x0B 89 #define MPI_WRSEQ_3RD_KEY_VALUE 0x02 90 #define MPI_WRSEQ_4TH_KEY_VALUE 0x07 91 #define MPI_WRSEQ_5TH_KEY_VALUE 0x0D 92 93 #define MPI_DIAGNOSTIC_OFFSET 0x00000008 94 #define MPI_DIAG_CLEAR_FLASH_BAD_SIG 0x00000400 95 #define MPI_DIAG_PREVENT_IOC_BOOT 0x00000200 96 #define MPI_DIAG_DRWE 0x00000080 97 #define MPI_DIAG_FLASH_BAD_SIG 0x00000040 98 #define MPI_DIAG_RESET_HISTORY 0x00000020 99 #define MPI_DIAG_RW_ENABLE 0x00000010 100 #define MPI_DIAG_RESET_ADAPTER 0x00000004 101 #define MPI_DIAG_DISABLE_ARM 0x00000002 102 #define MPI_DIAG_MEM_ENABLE 0x00000001 103 104 #define MPI_TEST_BASE_ADDRESS_OFFSET 0x0000000C 105 106 #define MPI_DIAG_RW_DATA_OFFSET 0x00000010 107 108 #define MPI_DIAG_RW_ADDRESS_OFFSET 0x00000014 109 110 #define MPI_HOST_INTERRUPT_STATUS_OFFSET 0x00000030 111 #define MPI_HIS_IOP_DOORBELL_STATUS 0x80000000 112 #define MPI_HIS_REPLY_MESSAGE_INTERRUPT 0x00000008 113 #define MPI_HIS_DOORBELL_INTERRUPT 0x00000001 114 115 #define MPI_HOST_INTERRUPT_MASK_OFFSET 0x00000034 116 #define MPI_HIM_RIM 0x00000008 117 #define MPI_HIM_DIM 0x00000001 118 119 #define MPI_REQUEST_QUEUE_OFFSET 0x00000040 120 #define MPI_REQUEST_POST_FIFO_OFFSET 0x00000040 121 122 #define MPI_REPLY_QUEUE_OFFSET 0x00000044 123 #define MPI_REPLY_POST_FIFO_OFFSET 0x00000044 124 #define MPI_REPLY_FREE_FIFO_OFFSET 0x00000044 125 126 #define MPI_HI_PRI_REQUEST_QUEUE_OFFSET 0x00000048 127 128 /* 129 * Message Frame Descriptors 130 */ 131 #define MPI_REQ_MF_DESCRIPTOR_NB_MASK 0x00000003 132 #define MPI_REQ_MF_DESCRIPTOR_F_BIT 0x00000004 133 #define MPI_REQ_MF_DESCRIPTOR_ADDRESS_MASK 0xFFFFFFF8 134 135 #define MPI_ADDRESS_REPLY_A_BIT 0x80000000 136 #define MPI_ADDRESS_REPLY_ADDRESS_MASK 0x7FFFFFFF 137 138 #define MPI_CONTEXT_REPLY_A_BIT 0x80000000 139 #define MPI_CONTEXT_REPLY_TYPE_MASK 0x60000000 140 #define MPI_CONTEXT_REPLY_TYPE_SCSI_INIT 0x00 141 #define MPI_CONTEXT_REPLY_TYPE_SCSI_TARGET 0x01 142 #define MPI_CONTEXT_REPLY_TYPE_LAN 0x02 143 #define MPI_CONTEXT_REPLY_TYPE_SHIFT 29 144 #define MPI_CONTEXT_REPLY_CONTEXT_MASK 0x1FFFFFFF 145 146 147 /* 148 * Context Reply macros 149 */ 150 #define MPI_GET_CONTEXT_REPLY_TYPE(x) \ 151 (((x) & MPI_CONTEXT_REPLY_TYPE_MASK) \ 152 >> MPI_CONTEXT_REPLY_TYPE_SHIFT) 153 154 #define MPI_SET_CONTEXT_REPLY_TYPE(x, typ) \ 155 ((x) = ((x) & ~MPI_CONTEXT_REPLY_TYPE_MASK) | \ 156 (((typ) << MPI_CONTEXT_REPLY_TYPE_SHIFT) & \ 157 MPI_CONTEXT_REPLY_TYPE_MASK)) 158 159 160 /* 161 * Message Functions 162 * 0x80 -> 0x8F reserved for private message use per product 163 */ 164 #define MPI_FUNCTION_SCSI_IO_REQUEST 0x00 165 #define MPI_FUNCTION_SCSI_TASK_MGMT 0x01 166 #define MPI_FUNCTION_IOC_INIT 0x02 167 #define MPI_FUNCTION_IOC_FACTS 0x03 168 #define MPI_FUNCTION_CONFIG 0x04 169 #define MPI_FUNCTION_PORT_FACTS 0x05 170 #define MPI_FUNCTION_PORT_ENABLE 0x06 171 #define MPI_FUNCTION_EVENT_NOTIFICATION 0x07 172 #define MPI_FUNCTION_EVENT_ACK 0x08 173 #define MPI_FUNCTION_FW_DOWNLOAD 0x09 174 #define MPI_FUNCTION_TARGET_CMD_BUFFER_POST 0x0A 175 #define MPI_FUNCTION_TARGET_ASSIST 0x0B 176 #define MPI_FUNCTION_TARGET_STATUS_SEND 0x0C 177 #define MPI_FUNCTION_TARGET_MODE_ABORT 0x0D 178 #define MPI_FUNCTION_FC_LINK_SRVC_BUF_POST 0x0E 179 #define MPI_FUNCTION_FC_LINK_SRVC_RSP 0x0F 180 #define MPI_FUNCTION_FC_EX_LINK_SRVC_SEND 0x10 181 #define MPI_FUNCTION_FC_ABORT 0x11 182 #define MPI_FUNCTION_FW_UPLOAD 0x12 183 #define MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND 0x13 184 #define MPI_FUNCTION_FC_PRIMITIVE_SEND 0x14 185 186 #define MPI_FUNCTION_RAID_ACTION 0x15 187 #define MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH 0x16 188 189 #define MPI_FUNCTION_TOOLBOX 0x17 190 191 #define MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR 0x18 192 193 #define MPI_FUNCTION_MAILBOX 0x19 194 195 #define MPI_FUNCTION_SMP_PASSTHROUGH 0x1A 196 #define MPI_FUNCTION_SAS_IO_UNIT_CONTROL 0x1B 197 198 #define MPI_DIAG_BUFFER_POST 0x1D 199 #define MPI_DIAG_RELEASE 0x1E 200 201 #define MPI_FUNCTION_SCSI_IO_32 0x1F 202 203 #define MPI_FUNCTION_LAN_SEND 0x20 204 #define MPI_FUNCTION_LAN_RECEIVE 0x21 205 #define MPI_FUNCTION_LAN_RESET 0x22 206 207 #define MPI_FUNCTION_INBAND_BUFFER_POST 0x28 208 #define MPI_FUNCTION_INBAND_SEND 0x29 209 #define MPI_FUNCTION_INBAND_RSP 0x2A 210 #define MPI_FUNCTION_INBAND_ABORT 0x2B 211 212 #define MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET 0x40 213 #define MPI_FUNCTION_IO_UNIT_RESET 0x41 214 #define MPI_FUNCTION_HANDSHAKE 0x42 215 #define MPI_FUNCTION_REPLY_FRAME_REMOVAL 0x43 216 #define MPI_FUNCTION_HOST_PAGEBUF_ACCESS_CONTROL 0x44 217 218 /* 219 * Version format 220 */ 221 typedef struct mpi_version_struct { 222 uint8_t Dev; 223 uint8_t Unit; 224 uint8_t Minor; 225 uint8_t Major; 226 } mpi_version_struct_t; 227 228 typedef union mpi_version_format { 229 mpi_version_struct_t Struct; 230 uint32_t Word; 231 } mpi_version_format_t; 232 233 /* 234 * Scatter Gather Elements 235 */ 236 237 /* 238 * Simple element structures 239 */ 240 typedef struct sge_simple32 { 241 uint32_t FlagsLength; 242 uint32_t Address; 243 } sge_simple32_t; 244 245 typedef struct sge_simple64 { 246 uint32_t FlagsLength; 247 uint32_t Address_Low; 248 uint32_t Address_High; 249 } sge_simple64_t; 250 251 typedef struct sge_simple_union { 252 uint32_t FlagsLength; 253 union { 254 uint32_t Address32; 255 uint32_t Address64_Low; 256 uint32_t Address64_High; 257 } u1; 258 } sge_simple_union_t; 259 260 /* 261 * Chain element structures 262 */ 263 typedef struct sge_chain32 { 264 uint16_t Length; 265 uint8_t NextChainOffset; 266 uint8_t Flags; 267 uint32_t Address; 268 } sge_chain32_t; 269 270 typedef struct sge_chain64 { 271 uint16_t Length; 272 uint8_t NextChainOffset; 273 uint8_t Flags; 274 uint32_t Address64_Low; 275 uint32_t Address64_High; 276 } sge_chain64_t; 277 278 typedef struct sge_chain_union { 279 uint16_t Length; 280 uint8_t NextChainOffset; 281 uint8_t Flags; 282 union { 283 uint32_t Address32; 284 uint32_t Address64_Low; 285 uint32_t Address64_High; 286 } u1; 287 } sge_chain_union_t; 288 289 /* 290 * Transaction Context element 291 */ 292 typedef struct sge_transaction32 { 293 uint8_t Reserved; 294 uint8_t ContextSize; 295 uint8_t DetailsLength; 296 uint8_t Flags; 297 uint32_t TransactionContext[1]; 298 uint32_t TransactionDetails[1]; 299 } sge_transaction32_t; 300 301 typedef struct sge_transaction64 { 302 uint8_t Reserved; 303 uint8_t ContextSize; 304 uint8_t DetailsLength; 305 uint8_t Flags; 306 uint32_t TransactionContext[2]; 307 uint32_t TransactionDetails[1]; 308 } sge_transaction64_t; 309 310 typedef struct sge_transaction96 { 311 uint8_t Reserved; 312 uint8_t ContextSize; 313 uint8_t DetailsLength; 314 uint8_t Flags; 315 uint32_t TransactionContext[3]; 316 uint32_t TransactionDetails[1]; 317 } sge_transaction96_t; 318 319 typedef struct sge_transaction128 { 320 uint8_t Reserved; 321 uint8_t ContextSize; 322 uint8_t DetailsLength; 323 uint8_t Flags; 324 uint32_t TransactionContext[4]; 325 uint32_t TransactionDetails[1]; 326 } sge_transaction128_t; 327 328 typedef struct sge_transaction_union { 329 uint8_t Reserved; 330 uint8_t ContextSize; 331 uint8_t DetailsLength; 332 uint8_t Flags; 333 union { 334 uint32_t TransactionContext32[1]; 335 uint32_t TransactionContext64[2]; 336 uint32_t TransactionContext96[3]; 337 uint32_t TransactionContext128[4]; 338 } u1; 339 uint32_t TransactionDetails[1]; 340 } sge_transaction_union_t; 341 342 343 /* 344 * SGE IO types union for IO SGL's 345 */ 346 typedef struct sge_io_union { 347 union { 348 sge_simple_union_t Simple; 349 sge_chain_union_t Chain; 350 } u1; 351 } sge_io_union_t; 352 353 /* 354 * SGE union for SGL's with Simple and Transaction elements 355 */ 356 typedef struct sge_trans_simple_union { 357 union { 358 sge_simple_union_t Simple; 359 sge_transaction_union_t Transaction; 360 } u1; 361 } sge_trans_simple_union_t; 362 363 /* 364 * All SGE types union 365 */ 366 typedef struct sge_mpi_union { 367 union { 368 sge_simple_union_t Simple; 369 sge_chain_union_t Chain; 370 sge_transaction_union_t Transaction; 371 } u1; 372 } sge_mpi_union_t; 373 374 375 /* 376 * SGE field definition and masks 377 */ 378 379 /* 380 * Flags field bit definitions 381 */ 382 #define MPI_SGE_FLAGS_LAST_ELEMENT 0x80 383 #define MPI_SGE_FLAGS_END_OF_BUFFER 0x40 384 #define MPI_SGE_FLAGS_ELEMENT_TYPE_MASK 0x30 385 #define MPI_SGE_FLAGS_LOCAL_ADDRESS 0x08 386 #define MPI_SGE_FLAGS_DIRECTION 0x04 387 #define MPI_SGE_FLAGS_ADDRESS_SIZE 0x02 388 #define MPI_SGE_FLAGS_END_OF_LIST 0x01 389 390 #define MPI_SGE_FLAGS_SHIFT 24 391 392 #define MPI_SGE_LENGTH_MASK 0x00FFFFFF 393 #define MPI_SGE_CHAIN_LENGTH_MASK 0x0000FFFF 394 395 /* 396 * Element Type 397 */ 398 #define MPI_SGE_FLAGS_TRANSACTION_ELEMENT 0x00 399 #define MPI_SGE_FLAGS_SIMPLE_ELEMENT 0x10 400 #define MPI_SGE_FLAGS_CHAIN_ELEMENT 0x30 401 #define MPI_SGE_FLAGS_ELEMENT_MASK 0x30 402 403 /* 404 * Address location 405 */ 406 #define MPI_SGE_FLAGS_SYSTEM_ADDRESS 0x00 407 408 /* 409 * Direction 410 */ 411 #define MPI_SGE_FLAGS_IOC_TO_HOST 0x00 412 #define MPI_SGE_FLAGS_HOST_TO_IOC 0x04 413 414 /* 415 * Address Size 416 */ 417 #define MPI_SGE_FLAGS_32_BIT_ADDRESSING 0x00 418 #define MPI_SGE_FLAGS_64_BIT_ADDRESSING 0x02 419 420 /* 421 * Context Size 422 */ 423 #define MPI_SGE_FLAGS_32_BIT_CONTEXT 0x00 424 #define MPI_SGE_FLAGS_64_BIT_CONTEXT 0x02 425 #define MPI_SGE_FLAGS_96_BIT_CONTEXT 0x04 426 #define MPI_SGE_FLAGS_128_BIT_CONTEXT 0x06 427 428 #define MPI_SGE_CHAIN_OFFSET_MASK 0x00FF0000 429 #define MPI_SGE_CHAIN_OFFSET_SHIFT 16 430 431 432 /* 433 * SGE operation Macros 434 */ 435 436 /* 437 * SIMPLE FlagsLength manipulations... 438 */ 439 #define MPI_SGE_SET_FLAGS(f) ((uint32_t)(f) << MPI_SGE_FLAGS_SHIFT) 440 #define MPI_SGE_GET_FLAGS(fl) \ 441 (((fl) & ~MPI_SGE_LENGTH_MASK) >> MPI_SGE_FLAGS_SHIFT) 442 #define MPI_SGE_LENGTH(fl) ((fl) & MPI_SGE_LENGTH_MASK) 443 #define MPI_SGE_CHAIN_LENGTH(fl) ((fl) & MPI_SGE_CHAIN_LENGTH_MASK) 444 445 #define MPI_SGE_SET_FLAGS_LENGTH(f, l) \ 446 (MPI_SGE_SET_FLAGS(f) | MPI_SGE_LENGTH(l)) 447 448 #define MPI_pSGE_GET_FLAGS(psg) MPI_SGE_GET_FLAGS((psg)->FlagsLength) 449 #define MPI_pSGE_GET_LENGTH(psg) MPI_SGE_LENGTH((psg)->FlagsLength) 450 #define MPI_pSGE_SET_FLAGS_LENGTH(psg, f, l) \ 451 (psg)->FlagsLength = MPI_SGE_SET_FLAGS_LENGTH(f, l) 452 453 /* 454 * CAUTION - The following are READ-MODIFY-WRITE! 455 */ 456 #define MPI_pSGE_SET_FLAGS(psg, f) \ 457 (psg)->FlagsLength |= MPI_SGE_SET_FLAGS(f) 458 #define MPI_pSGE_SET_LENGTH(psg, l) \ 459 (psg)->FlagsLength |= MPI_SGE_LENGTH(l) 460 461 #define MPI_GET_CHAIN_OFFSET(x) \ 462 ((x&MPI_SGE_CHAIN_OFFSET_MASK)>>MPI_SGE_CHAIN_OFFSET_SHIFT) 463 464 465 /* 466 * Standard Message Structures 467 */ 468 469 /* 470 * Standard message request header for all request messages 471 */ 472 typedef struct msg_request_header { 473 uint8_t Reserved[2]; /* function specific */ 474 uint8_t ChainOffset; 475 uint8_t Function; 476 uint8_t Reserved1[3]; /* function specific */ 477 uint8_t MsgFlags; 478 uint32_t MsgContext; 479 } msg_request_header_t; 480 481 482 /* 483 * Default Reply 484 */ 485 typedef struct msg_default_reply { 486 uint8_t Reserved[2]; /* function specific */ 487 uint8_t MsgLength; 488 uint8_t Function; 489 uint8_t Reserved1[3]; /* function specific */ 490 uint8_t MsgFlags; 491 uint32_t MsgContext; 492 uint8_t Reserved2[2]; /* function specific */ 493 uint16_t IOCStatus; 494 uint32_t IOCLogInfo; 495 } msg_default_reply_t; 496 497 /* 498 * MsgFlags definition for all replies 499 */ 500 #define MPI_MSGFLAGS_CONTINUATION_REPLY 0x80 501 502 503 /* 504 * IOC Status Values 505 */ 506 507 /* 508 * Common IOCStatus values for all replies 509 */ 510 #define MPI_IOCSTATUS_SUCCESS 0x0000 511 #define MPI_IOCSTATUS_INVALID_FUNCTION 0x0001 512 #define MPI_IOCSTATUS_BUSY 0x0002 513 #define MPI_IOCSTATUS_INVALID_SGL 0x0003 514 #define MPI_IOCSTATUS_INTERNAL_ERROR 0x0004 515 #define MPI_IOCSTATUS_RESERVED 0x0005 516 #define MPI_IOCSTATUS_INSUFFICIENT_RESOURCES 0x0006 517 #define MPI_IOCSTATUS_INVALID_FIELD 0x0007 518 #define MPI_IOCSTATUS_INVALID_STATE 0x0008 519 #define MPI_IOCSTATUS_OP_STATE_NOT_SUPPORTED 0x0009 520 521 /* 522 * Config IOCStatus values 523 */ 524 #define MPI_IOCSTATUS_CONFIG_INVALID_ACTION 0x0020 525 #define MPI_IOCSTATUS_CONFIG_INVALID_TYPE 0x0021 526 #define MPI_IOCSTATUS_CONFIG_INVALID_PAGE 0x0022 527 #define MPI_IOCSTATUS_CONFIG_INVALID_DATA 0x0023 528 #define MPI_IOCSTATUS_CONFIG_NO_DEFAULTS 0x0024 529 #define MPI_IOCSTATUS_CONFIG_CANT_COMMIT 0x0025 530 531 /* 532 * SCSIIO Reply (SPI & FCP) initiator values 533 */ 534 #define MPI_IOCSTATUS_SCSI_RECOVERED_ERROR 0x0040 535 #define MPI_IOCSTATUS_SCSI_INVALID_BUS 0x0041 536 #define MPI_IOCSTATUS_SCSI_INVALID_TARGETID 0x0042 537 #define MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE 0x0043 538 #define MPI_IOCSTATUS_SCSI_DATA_OVERRUN 0x0044 539 #define MPI_IOCSTATUS_SCSI_DATA_UNDERRUN 0x0045 540 #define MPI_IOCSTATUS_SCSI_IO_DATA_ERROR 0x0046 541 #define MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR 0x0047 542 #define MPI_IOCSTATUS_SCSI_TASK_TERMINATED 0x0048 543 #define MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH 0x0049 544 #define MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED 0x004A 545 #define MPI_IOCSTATUS_SCSI_IOC_TERMINATED 0x004B 546 #define MPI_IOCSTATUS_SCSI_EXT_TERMINATED 0x004C 547 548 /* 549 * SCSI Initiator/Target end-to-end data protection 550 */ 551 #define MPI_IOCSTATUS_EEDP_CRC_ERROR 0x004D 552 #define MPI_IOCSTATUS_EEDP_LBA_TAG_ERROR 0x004E 553 #define MPI_IOCSTATUS_EEDP_APP_TAG_ERROR 0x004F 554 /* 555 * SCSI (SPI & FCP) target values 556 */ 557 #define MPI_IOCSTATUS_TARGET_PRIORITY_IO 0x0060 558 #define MPI_IOCSTATUS_TARGET_INVALID_PORT 0x0061 559 #define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX 0x0062 560 #define MPI_IOCSTATUS_TARGET_ABORTED 0x0063 561 #define MPI_IOCSTATUS_TARGET_NO_CONN_RETRYABLE 0x0064 562 #define MPI_IOCSTATUS_TARGET_NO_CONNECTION 0x0065 563 #define MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH 0x006A 564 #define MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT 0x006B 565 566 /* 567 * Additional FCP target values 568 */ 569 #define MPI_IOCSTATUS_TARGET_FC_ABORTED 0x0066 /* obsolete */ 570 #define MPI_IOCSTATUS_TARGET_FC_RX_ID_INVALID 0x0067 /* obsolete */ 571 #define MPI_IOCSTATUS_TARGET_FC_DID_INVALID 0x0068 /* obsolete */ 572 #define MPI_IOCSTATUS_TARGET_FC_NODE_LOGGED_OUT 0x0069 /* obsolete */ 573 574 /* 575 * Fibre Channel Direct Access values 576 */ 577 #define MPI_IOCSTATUS_FC_ABORTED 0x0066 578 #define MPI_IOCSTATUS_FC_RX_ID_INVALID 0x0067 579 #define MPI_IOCSTATUS_FC_DID_INVALID 0x0068 580 #define MPI_IOCSTATUS_FC_NODE_LOGGED_OUT 0x0069 581 #define MPI_IOCSTATUS_FC_EXCHANGE_CANCELED 0x006C 582 583 /* 584 * LAN values 585 */ 586 #define MPI_IOCSTATUS_LAN_DEVICE_NOT_FOUND 0x0080 587 #define MPI_IOCSTATUS_LAN_DEVICE_FAILURE 0x0081 588 #define MPI_IOCSTATUS_LAN_TRANSMIT_ERROR 0x0082 589 #define MPI_IOCSTATUS_LAN_TRANSMIT_ABORTED 0x0083 590 #define MPI_IOCSTATUS_LAN_RECEIVE_ERROR 0x0084 591 #define MPI_IOCSTATUS_LAN_RECEIVE_ABORTED 0x0085 592 #define MPI_IOCSTATUS_LAN_PARTIAL_PACKET 0x0086 593 #define MPI_IOCSTATUS_LAN_CANCELED 0x0087 594 595 /* 596 * SAS values 597 */ 598 #define MPI_IOCSTATUS_SAS_SMP_REQUEST_FAILED 0x0090 599 #define MPI_IOCSTATUS_SAS_SMP_DATA_OVERRUN 0x0091 600 601 /* 602 * Inband values 603 */ 604 #define MPI_IOCSTATUS_INBAND_ABORTED 0x0098 605 #define MPI_IOCSTATUS_INBAND_NO_CONNECTION 0x0099 606 607 /* 608 * Diagnostic Tools values 609 */ 610 #define MPI_IOCSTATUS_DIAGNOSTIC_RELEASED 0x00A0 611 612 /* 613 * IOCStatus flag to indicate that log info is available 614 */ 615 #define MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE 0x8000 616 #define MPI_IOCSTATUS_MASK 0x7FFF 617 618 /* 619 * LogInfo Types 620 */ 621 #define MPI_IOCLOGINFO_TYPE_MASK 0xF0000000 622 #define MPI_IOCLOGINFO_TYPE_NONE 0x0 623 #define MPI_IOCLOGINFO_TYPE_SCSI 0x1 624 #define MPI_IOCLOGINFO_TYPE_FC 0x2 625 #define MPI_IOCLOGINFO_TYPE_SAS 0x3 626 #define MPI_IOCLOGINFO_TYPE_ISCSI 0x4 627 #define MPI_IOCLOGINFO_LOG_DATA_MASK 0x0FFFFFFF 628 629 /* 630 * SMP passthrough messages 631 */ 632 typedef struct msg_smp_passthrough { 633 uint8_t Flags; 634 uint8_t PhysicalPort; 635 uint8_t ChainOffset; 636 uint8_t Function; 637 uint16_t RequestDataLength; 638 uint8_t ConnectionRate; 639 uint8_t MsgFlags; 640 uint32_t MsgContext; 641 uint8_t Reserved[4]; 642 uint64_t SASAddress; 643 uint8_t Reserved1[8]; 644 } msg_smp_passthrough_t; 645 646 647 /* SMP passthrough Reply */ 648 649 typedef struct msg_smp_passthrough_reply { 650 uint8_t Flags; 651 uint8_t PhysicalPort; 652 uint8_t MsgLength; 653 uint8_t Function; 654 uint16_t ResponseDataLength; 655 uint8_t Reserved; 656 uint8_t MsgFlags; 657 uint32_t MsgContext; 658 uint8_t Reserved1; 659 uint8_t SASStatus; 660 uint16_t IOCStatus; 661 uint32_t IOCLogInfo; 662 uint8_t Reserved2[4]; 663 } msg_smp_passthrough_reply_t; 664 665 #define MPI_SMP_PT_REQ_CONNECT_RATE_NEGOTIATED (0x00) 666 #define MPI_SMP_PT_REQ_CONNECT_RATE_1_5 (0x08) 667 #define MPI_SMP_PT_REQ_CONNECT_RATE_3_0 (0x09) 668 #define MPI_SASSTATUS_SUCCESS 0 669 670 #ifdef __cplusplus 671 } 672 #endif 673 674 #endif /* _SYS_MPI_H */ 675