192f251f3SWarner Losh inline string scsi_op[int k] = 292f251f3SWarner Losh k == 0x00 ? "TEST UNIT READY" : 392f251f3SWarner Losh k == 0x01 ? "REZERO UNIT" : 492f251f3SWarner Losh k == 0x03 ? "REQUEST SENSE" : 592f251f3SWarner Losh k == 0x04 ? "FORMAT UNIT" : 692f251f3SWarner Losh k == 0x05 ? "READ BLOCK LIMITS" : 792f251f3SWarner Losh k == 0x07 ? "REASSIGN BLOCKS" : 892f251f3SWarner Losh k == 0x08 ? "READ(6)" : 992f251f3SWarner Losh k == 0x0a ? "WRITE(6)" : 1092f251f3SWarner Losh k == 0x0b ? "SEEK(6)" : 1192f251f3SWarner Losh k == 0x0f ? "READ REVERSE(6)" : 1292f251f3SWarner Losh k == 0x10 ? "WRITE FILEMARKS(6)" : 1392f251f3SWarner Losh k == 0x11 ? "SPACE(6)" : 1492f251f3SWarner Losh k == 0x12 ? "INQUIRY" : 1592f251f3SWarner Losh k == 0x14 ? "RECOVER BUFFERED DATA" : 1692f251f3SWarner Losh k == 0x15 ? "MODE SELECT(6)" : 1792f251f3SWarner Losh k == 0x16 ? "RESERVE(6)" : 1892f251f3SWarner Losh k == 0x17 ? "RELEASE(6)" : 1992f251f3SWarner Losh k == 0x18 ? "COPY" : 2092f251f3SWarner Losh k == 0x19 ? "ERASE(6)" : 2192f251f3SWarner Losh k == 0x1a ? "MODE SENSE(6)" : 2292f251f3SWarner Losh k == 0x1b ? "START STOP UNIT" : 2392f251f3SWarner Losh k == 0x1c ? "RECEIVE DIAGNOSTIC RESULTS" : 2492f251f3SWarner Losh k == 0x1d ? "SEND DIAGNOSTIC" : 2592f251f3SWarner Losh k == 0x1e ? "PREVENT ALLOW MEDIUM REMOVAL" : 2692f251f3SWarner Losh k == 0x24 ? "SET WINDOW" : 2792f251f3SWarner Losh k == 0x25 ? "READ CAPACITY(10)" : 2892f251f3SWarner Losh k == 0x28 ? "READ(10)" : 2992f251f3SWarner Losh k == 0x29 ? "READ GENERATION" : 3092f251f3SWarner Losh k == 0x2a ? "WRITE(10)" : 3192f251f3SWarner Losh k == 0x2b ? "SEEK(10)" : 3292f251f3SWarner Losh k == 0x2c ? "ERASE(10)" : 3392f251f3SWarner Losh k == 0x2e ? "WRITE AND VERIFY(10)" : 3492f251f3SWarner Losh k == 0x2f ? "VERIFY(10)" : 3592f251f3SWarner Losh k == 0x30 ? "SEARCH DATA HIGH(10)" : 3692f251f3SWarner Losh k == 0x31 ? "SEARCH DATA EQUAL(10)" : 3792f251f3SWarner Losh k == 0x32 ? "SEARCH DATA LOW(10)" : 3892f251f3SWarner Losh k == 0x33 ? "SET LIMITS(10)" : 3992f251f3SWarner Losh k == 0x35 ? "SYNCHRONIZE CACHE(10)" : 4092f251f3SWarner Losh k == 0x36 ? "LOCK UNLOCK CACHE(10)" : 4192f251f3SWarner Losh k == 0x37 ? "READ DEFECT DATA(10)" : 4292f251f3SWarner Losh k == 0x39 ? "COMPARE" : 4392f251f3SWarner Losh k == 0x3a ? "COPY AND VERIFY" : 4492f251f3SWarner Losh k == 0x3b ? "WRITE BUFFER" : 4592f251f3SWarner Losh k == 0x3c ? "READ BUFFER(10)" : 4692f251f3SWarner Losh k == 0x3e ? "READ LONG(10)" : 4792f251f3SWarner Losh k == 0x3f ? "WRITE LONG(10)" : 4892f251f3SWarner Losh k == 0x40 ? "CHANGE DEFINITION" : 4992f251f3SWarner Losh k == 0x41 ? "WRITE SAME(10)" : 5092f251f3SWarner Losh k == 0x42 ? "UNMAP" : 5192f251f3SWarner Losh k == 0x48 ? "SANITIZE" : 5292f251f3SWarner Losh k == 0x4c ? "LOG SELECT" : 5392f251f3SWarner Losh k == 0x4d ? "LOG SENSE" : 5492f251f3SWarner Losh k == 0x50 ? "XDWRITE(10)" : 5592f251f3SWarner Losh k == 0x51 ? "XPWRITE(10)" : 5692f251f3SWarner Losh k == 0x52 ? "XDREAD(10)" : 5792f251f3SWarner Losh k == 0x53 ? "XDWRITEREAD(10)" : 5892f251f3SWarner Losh k == 0x55 ? "MODE SELECT(10)" : 5992f251f3SWarner Losh k == 0x56 ? "RESERVE(10)" : 6092f251f3SWarner Losh k == 0x57 ? "RELEASE(10)" : 6192f251f3SWarner Losh k == 0x5a ? "MODE SENSE(10)" : 6292f251f3SWarner Losh k == 0x5e ? "PERSISTENT RESERVE IN" : 6392f251f3SWarner Losh k == 0x5f ? "PERSISTENT RESERVE OUT" : 6492f251f3SWarner Losh k == 0x7e ? "extended CDB" : 6592f251f3SWarner Losh k == 0x7f ? "variable length CDB (more than 16 bytes)" : 6692f251f3SWarner Losh k == 0x80 ? "XDWRITE EXTENDED(16)" : 6792f251f3SWarner Losh k == 0x81 ? "REBUILD(16)" : 6892f251f3SWarner Losh k == 0x82 ? "REGENERATE(16)" : 6992f251f3SWarner Losh k == 0x83 ? "Third-party Copy OUT" : 7092f251f3SWarner Losh k == 0x84 ? "Third-party Copy IN" : 7192f251f3SWarner Losh k == 0x85 ? "ATA PASS-THROUGH(16)" : 7292f251f3SWarner Losh k == 0x86 ? "ACCESS CONTROL IN" : 7392f251f3SWarner Losh k == 0x87 ? "ACCESS CONTROL OUT" : 7492f251f3SWarner Losh k == 0x88 ? "READ(16)" : 7592f251f3SWarner Losh k == 0x89 ? "COMPARE AND WRITE" : 7692f251f3SWarner Losh k == 0x8a ? "WRITE(16)" : 7792f251f3SWarner Losh k == 0x8b ? "ORWRITE" : 7892f251f3SWarner Losh k == 0x8c ? "READ ATTRIBUTE" : 7992f251f3SWarner Losh k == 0x8d ? "WRITE ATTRIBUTE" : 8092f251f3SWarner Losh k == 0x8e ? "WRITE AND VERIFY(16)" : 8192f251f3SWarner Losh k == 0x8f ? "VERIFY(16)" : 8292f251f3SWarner Losh k == 0x90 ? "PRE-FETCH(16)" : 8392f251f3SWarner Losh k == 0x91 ? "SYNCHRONIZE CACHE(16)" : 8492f251f3SWarner Losh k == 0x92 ? "LOCK UNLOCK CACHE(16)" : 8592f251f3SWarner Losh k == 0x93 ? "WRITE SAME(16)" : 8692f251f3SWarner Losh k == 0x94 ? "ZBC OUT" : 8792f251f3SWarner Losh k == 0x95 ? "ZBC IN" : 8892f251f3SWarner Losh k == 0x9a ? "WRITE STREAM(16)" : 8992f251f3SWarner Losh k == 0x9b ? "READ BUFFER(16)" : 9092f251f3SWarner Losh k == 0x9c ? "WRITE ATOMIC(16)" : 9192f251f3SWarner Losh k == 0x9e ? "SERVICE ACTION IN(16)" : 9292f251f3SWarner Losh k == 0xa0 ? "REPORT LUNS" : 9392f251f3SWarner Losh k == 0xa1 ? "ATA PASS-THROUGH(12)" : 9492f251f3SWarner Losh k == 0xa2 ? "SECURITY PROTOCOL IN" : 9592f251f3SWarner Losh k == 0xa3 ? "MAINTENANCE IN" : 9692f251f3SWarner Losh k == 0xa4 ? "MAINTENANCE OUT" : 9792f251f3SWarner Losh k == 0xa7 ? "MOVE MEDIUM ATTACHED" : 9892f251f3SWarner Losh k == 0xa8 ? "READ(12)" : 9992f251f3SWarner Losh k == 0xaa ? "WRITE(12)" : 10092f251f3SWarner Losh k == 0xae ? "WRITE AND VERIFY(12)" : 10192f251f3SWarner Losh k == 0xaf ? "VERIFY(12)" : 10292f251f3SWarner Losh k == 0xb3 ? "SET LIMITS(12)" : 10392f251f3SWarner Losh k == 0xb4 ? "READ ELEMENT STATUS ATTACHED" : 10492f251f3SWarner Losh k == 0xb5 ? "SECURITY PROTOCOL OUT" : 10592f251f3SWarner Losh k == 0xb7 ? "READ DEFECT DATA(12)" : 10692f251f3SWarner Losh k == 0xba ? "REDUNDANCY GROUP (IN)" : 10792f251f3SWarner Losh k == 0xbb ? "REDUNDANCY GROUP (OUT)" : 10892f251f3SWarner Losh k == 0xbc ? "SPARE (IN)" : 10992f251f3SWarner Losh k == 0xbd ? "SPARE (OUT)" : 11092f251f3SWarner Losh k == 0xbe ? "VOLUME SET (IN)" : 11192f251f3SWarner Losh k == 0xbf ? "VOLUME SET (OUT)" : 11292f251f3SWarner Losh "Unknown"; 11392f251f3SWarner Losh 11492f251f3SWarner Losh inline string xpt_action_string[int key] = 11592f251f3SWarner Losh key == 0 ? "XPT_NOOP" : 11692f251f3SWarner Losh key == 1 ? "XPT_SCSI_IO" : 11792f251f3SWarner Losh key == 2 ? "XPT_GDEV_TYPE" : 11892f251f3SWarner Losh key == 3 ? "XPT_GDEVLIST" : 11992f251f3SWarner Losh key == 4 ? "XPT_PATH_INQ" : 12092f251f3SWarner Losh key == 5 ? "XPT_REL_SIMQ" : 12192f251f3SWarner Losh key == 6 ? "XPT_SASYNC_CB" : 12292f251f3SWarner Losh key == 7 ? "XPT_SDEV_TYPE" : 12392f251f3SWarner Losh key == 8 ? "XPT_SCAN_BUS" : 12492f251f3SWarner Losh key == 9 ? "XPT_DEV_MATCH" : 12592f251f3SWarner Losh key == 10 ? "XPT_DEBUG" : 12692f251f3SWarner Losh key == 11 ? "XPT_PATH_STATS" : 12792f251f3SWarner Losh key == 12 ? "XPT_GDEV_STATS" : 12892f251f3SWarner Losh key == 13 ? "XPT_0X0d" : 12992f251f3SWarner Losh key == 14 ? "XPT_DEV_ADVINFO" : 13092f251f3SWarner Losh key == 15 ? "XPT_ASYNC" : 13192f251f3SWarner Losh key == 16 ? "XPT_ABORT" : 13292f251f3SWarner Losh key == 17 ? "XPT_RESET_BUS" : 13392f251f3SWarner Losh key == 18 ? "XPT_RESET_DEV" : 13492f251f3SWarner Losh key == 19 ? "XPT_TERM_IO" : 13592f251f3SWarner Losh key == 20 ? "XPT_SCAN_LUN" : 13692f251f3SWarner Losh key == 21 ? "XPT_GET_TRAN_SETTINGS" : 13792f251f3SWarner Losh key == 22 ? "XPT_SET_TRAN_SETTINGS" : 13892f251f3SWarner Losh key == 23 ? "XPT_CALC_GEOMETRY" : 13992f251f3SWarner Losh key == 24 ? "XPT_ATA_IO" : 14092f251f3SWarner Losh key == 25 ? "XPT_SET_SIM_KNOB" : 14192f251f3SWarner Losh key == 26 ? "XPT_GET_SIM_KNOB" : 14292f251f3SWarner Losh key == 27 ? "XPT_SMP_IO" : 14392f251f3SWarner Losh key == 28 ? "XPT_NVME_IO" : 14492f251f3SWarner Losh key == 29 ? "XPT_MMC_IO" : 14592f251f3SWarner Losh key == 30 ? "XPT_SCAN_TGT" : 14692f251f3SWarner Losh key == 31 ? "XPT_NVME_ADMIN" : 14792f251f3SWarner Losh "Too big" ; 14892f251f3SWarner Losh 14992f251f3SWarner Losh inline int CAM_CDB_POINTER = 1; 15092f251f3SWarner Losh inline int XPT_SCSI_IO = 0x01; 15192f251f3SWarner Losh inline int XPT_ATA_IO = 0x18; 15292f251f3SWarner Losh inline int XPT_NVME_IO = 0x1c; 15392f251f3SWarner Losh inline int XPT_NVME_ADMIN = 0x1f; 15492f251f3SWarner Losh 15592f251f3SWarner Losh /* 15692f251f3SWarner Losh * key >> 5 gives the group: 15792f251f3SWarner Losh * Group 0: six byte commands 15892f251f3SWarner Losh * Group 1: ten byte commands 15992f251f3SWarner Losh * Group 2: ten byte commands 16092f251f3SWarner Losh * Group 3: reserved (7e and 7f are de-facto 32 bytes though) 16192f251f3SWarner Losh * Group 4: sixteen byte commands 16292f251f3SWarner Losh * Group 5: twelve byte commands 16392f251f3SWarner Losh * Group 6: vendor specific 16492f251f3SWarner Losh * Group 7: vendor specific 16592f251f3SWarner Losh */ 16692f251f3SWarner Losh inline int scsi_cdb_len[int key] = 16792f251f3SWarner Losh key == 0 ? 6 : 16892f251f3SWarner Losh key == 1 ? 10 : 16992f251f3SWarner Losh key == 2 ? 10 : 17092f251f3SWarner Losh key == 3 ? 1 : /* reserved */ 17192f251f3SWarner Losh key == 4 ? 16 : 17292f251f3SWarner Losh key == 5 ? 12 : 17392f251f3SWarner Losh key == 6 ? 1 : /* reserved */ 17492f251f3SWarner Losh /* key == 7 */ 1; /* reserved */ 17592f251f3SWarner Losh 17692f251f3SWarner Losh inline int MPI2_IOCSTATUS_MASK =(0x7FFF); 17792f251f3SWarner Losh inline int MPI2_IOCSTATUS_SUCCESS =(0x0000); 17892f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_FUNCTION =(0x0001); 17992f251f3SWarner Losh inline int MPI2_IOCSTATUS_BUSY =(0x0002); 18092f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_SGL =(0x0003); 18192f251f3SWarner Losh inline int MPI2_IOCSTATUS_INTERNAL_ERROR =(0x0004); 18292f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_VPID =(0x0005); 18392f251f3SWarner Losh inline int MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES =(0x0006); 18492f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_FIELD =(0x0007); 18592f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_STATE =(0x0008); 18692f251f3SWarner Losh inline int MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED =(0x0009); 18792f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_INVALID_ACTION =(0x0020); 18892f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_INVALID_TYPE =(0x0021); 18992f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_INVALID_PAGE =(0x0022); 19092f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_INVALID_DATA =(0x0023); 19192f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS =(0x0024); 19292f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_CANT_COMMIT =(0x0025); 19392f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR =(0x0040); 19492f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE =(0x0042); 19592f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE =(0x0043); 19692f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_DATA_OVERRUN =(0x0044); 19792f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN =(0x0045); 19892f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR =(0x0046); 19992f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR =(0x0047); 20092f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_TASK_TERMINATED =(0x0048); 20192f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH =(0x0049); 20292f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED =(0x004A); 20392f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_IOC_TERMINATED =(0x004B); 20492f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_EXT_TERMINATED =(0x004C); 20592f251f3SWarner Losh inline int MPI2_IOCSTATUS_EEDP_GUARD_ERROR =(0x004D); 20692f251f3SWarner Losh inline int MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR =(0x004E); 20792f251f3SWarner Losh inline int MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR =(0x004F); 20892f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX =(0x0062); 20992f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_ABORTED =(0x0063); 21092f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE =(0x0064); 21192f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_NO_CONNECTION =(0x0065); 21292f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH =(0x006A); 21392f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR =(0x006D); 21492f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA =(0x006E); 21592f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT =(0x006F); 21692f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT =(0x0070); 21792f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_NAK_RECEIVED =(0x0071); 21892f251f3SWarner Losh inline int MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED =(0x0090); 21992f251f3SWarner Losh inline int MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN =(0x0091); 22092f251f3SWarner Losh inline int MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED =(0x00A0); 22192f251f3SWarner Losh inline int MPI2_IOCSTATUS_RAID_ACCEL_ERROR =(0x00B0); 22292f251f3SWarner Losh 22392f251f3SWarner Losh inline int MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE =(0x8000); 22492f251f3SWarner Losh 22592f251f3SWarner Losh inline string mpi2_iocstatus_str[int key] = 22692f251f3SWarner Losh key == MPI2_IOCSTATUS_SUCCESS ? "MPI2_IOCSTATUS_SUCCESS" : 22792f251f3SWarner Losh key == MPI2_IOCSTATUS_INVALID_FUNCTION ? "MPI2_IOCSTATUS_INVALID_FUNCTION" : 22892f251f3SWarner Losh key == MPI2_IOCSTATUS_BUSY ? "MPI2_IOCSTATUS_BUSY" : 22992f251f3SWarner Losh key == MPI2_IOCSTATUS_INVALID_SGL ? "MPI2_IOCSTATUS_INVALID_SGL" : 23092f251f3SWarner Losh key == MPI2_IOCSTATUS_INTERNAL_ERROR ? "MPI2_IOCSTATUS_INTERNAL_ERROR" : 23192f251f3SWarner Losh key == MPI2_IOCSTATUS_INVALID_VPID ? "MPI2_IOCSTATUS_INVALID_VPID" : 23292f251f3SWarner Losh key == MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES ? "MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES" : 23392f251f3SWarner Losh key == MPI2_IOCSTATUS_INVALID_FIELD ? "MPI2_IOCSTATUS_INVALID_FIELD" : 23492f251f3SWarner Losh key == MPI2_IOCSTATUS_INVALID_STATE ? "MPI2_IOCSTATUS_INVALID_STATE" : 23592f251f3SWarner Losh key == MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED ? "MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED" : 23692f251f3SWarner Losh key == MPI2_IOCSTATUS_CONFIG_INVALID_ACTION ? "MPI2_IOCSTATUS_CONFIG_INVALID_ACTION" : 23792f251f3SWarner Losh key == MPI2_IOCSTATUS_CONFIG_INVALID_TYPE ? "MPI2_IOCSTATUS_CONFIG_INVALID_TYPE" : 23892f251f3SWarner Losh key == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ? "MPI2_IOCSTATUS_CONFIG_INVALID_PAGE" : 23992f251f3SWarner Losh key == MPI2_IOCSTATUS_CONFIG_INVALID_DATA ? "MPI2_IOCSTATUS_CONFIG_INVALID_DATA" : 24092f251f3SWarner Losh key == MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS ? "MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS" : 24192f251f3SWarner Losh key == MPI2_IOCSTATUS_CONFIG_CANT_COMMIT ? "MPI2_IOCSTATUS_CONFIG_CANT_COMMIT" : 24292f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR ? "MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR" : 24392f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE ? "MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE" : 24492f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE ? "MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE" : 24592f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_DATA_OVERRUN ? "MPI2_IOCSTATUS_SCSI_DATA_OVERRUN" : 24692f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN ? "MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN" : 24792f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR ? "MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR" : 24892f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR ? "MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR" : 24992f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_TASK_TERMINATED ? "MPI2_IOCSTATUS_SCSI_TASK_TERMINATED" : 25092f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH ? "MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH" : 25192f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED ? "MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED" : 25292f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_IOC_TERMINATED ? "MPI2_IOCSTATUS_SCSI_IOC_TERMINATED" : 25392f251f3SWarner Losh key == MPI2_IOCSTATUS_SCSI_EXT_TERMINATED ? "MPI2_IOCSTATUS_SCSI_EXT_TERMINATED" : 25492f251f3SWarner Losh key == MPI2_IOCSTATUS_EEDP_GUARD_ERROR ? "MPI2_IOCSTATUS_EEDP_GUARD_ERROR" : 25592f251f3SWarner Losh key == MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR ? "MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR" : 25692f251f3SWarner Losh key == MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR ? "MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR" : 25792f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX ? "MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX" : 25892f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_ABORTED ? "MPI2_IOCSTATUS_TARGET_ABORTED" : 25992f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE ? "MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE" : 26092f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_NO_CONNECTION ? "MPI2_IOCSTATUS_TARGET_NO_CONNECTION" : 26192f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH ? "MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH" : 26292f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR ? "MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR" : 26392f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA ? "MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA" : 26492f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT ? "MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT" : 26592f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT ? "MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT" : 26692f251f3SWarner Losh key == MPI2_IOCSTATUS_TARGET_NAK_RECEIVED ? "MPI2_IOCSTATUS_TARGET_NAK_RECEIVED" : 26792f251f3SWarner Losh key == MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED ? "MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED" : 26892f251f3SWarner Losh key == MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN ? "MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN" : 26992f251f3SWarner Losh key == MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED ? "MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED" : 27092f251f3SWarner Losh key == MPI2_IOCSTATUS_RAID_ACCEL_ERROR ? "MPI2_IOCSTATUS_RAID_ACCEL_ERROR" : 27192f251f3SWarner Losh "MPI2_unknown value"; 27292f251f3SWarner Losh 27392f251f3SWarner Losh 27492f251f3SWarner Losh 27592f251f3SWarner Losh /* 27692f251f3SWarner Losh * arg0 union *ccb 27792f251f3SWarner Losh * arg1 mpr_command *cm 27892f251f3SWarner Losh * arg2 sassc->flags 27992f251f3SWarner Losh * arg3 device_info 28092f251f3SWarner Losh */ 28192f251f3SWarner Losh cam::mpr:complete 28292f251f3SWarner Losh { 28392f251f3SWarner Losh this->ccb = (union ccb *)arg0; 28492f251f3SWarner Losh this->func = this->ccb->ccb_h.func_code & 0xff; 28592f251f3SWarner Losh this->periph = this->ccb->ccb_h.path->periph; 28692f251f3SWarner Losh this->cm = (struct mpr_command *)arg1; 28792f251f3SWarner Losh this->rep = (MPI2_SCSI_IO_REPLY *)this->cm->cm_reply; 28892f251f3SWarner Losh this->sassc_flags = arg2; 28992f251f3SWarner Losh this->device_info = arg3; 29092f251f3SWarner Losh this->trace = 0; 29192f251f3SWarner Losh this->do_fast = 0; 29292f251f3SWarner Losh } 29392f251f3SWarner Losh 29492f251f3SWarner Losh 29592f251f3SWarner Losh cam::mpr:complete 29692f251f3SWarner Losh /this->periph->unit_number == 1 || this->periph->unit_number == 2/ 29792f251f3SWarner Losh { 29892f251f3SWarner Losh this->trace = 1; 29992f251f3SWarner Losh } 30092f251f3SWarner Losh 30192f251f3SWarner Losh cam::mpr:complete 30292f251f3SWarner Losh /this->trace && this->rep != NULL/ 30392f251f3SWarner Losh { 30492f251f3SWarner Losh this->IOCStatus = /* le16toh */ this->rep->IOCStatus & MPI2_IOCSTATUS_MASK; 30592f251f3SWarner Losh } 30692f251f3SWarner Losh 30792f251f3SWarner Losh cam::mpr:complete 30892f251f3SWarner Losh /this->trace && this->rep == NULL/ 30992f251f3SWarner Losh { 31092f251f3SWarner Losh /* printf("mpr: da%d: FAST", this->periph->unit_number); */ 31192f251f3SWarner Losh this->trace = 0 31292f251f3SWarner Losh } 31392f251f3SWarner Losh 31492f251f3SWarner Losh cam::mpr:complete 31592f251f3SWarner Losh /this->func == XPT_SCSI_IO/ 31692f251f3SWarner Losh { 31792f251f3SWarner Losh this->hdr = &this->ccb->ccb_h; 31892f251f3SWarner Losh this->csio = &this->ccb->csio; 31992f251f3SWarner Losh this->cdb = this->hdr->flags & CAM_CDB_POINTER ? 32092f251f3SWarner Losh this->csio->cdb_io.cdb_ptr : 32192f251f3SWarner Losh &this->csio->cdb_io.cdb_bytes[0]; 32292f251f3SWarner Losh this->cdb_len = this->csio->cdb_len ? this->csio->cdb_len : 32392f251f3SWarner Losh scsi_cdb_len[this->cdb[0] >> 5]; 32492f251f3SWarner Losh } 32592f251f3SWarner Losh 32692f251f3SWarner Losh cam::mpr:complete 32792f251f3SWarner Losh /this->trace && this->rep != NULL && this->func == XPT_SCSI_IO/ 32892f251f3SWarner Losh { 32992f251f3SWarner Losh printf("mpr: da%d: SLOW CDB: %s Status: %s", this->periph->unit_number, scsi_op[this->cdb[0]], 33092f251f3SWarner Losh mpi2_iocstatus_str[this->IOCStatus]); 33192f251f3SWarner Losh } 332