xref: /src/tools/cam/mpr.d (revision 92f251f36b31519ed336ac67b768d39b62ebf896)
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