xref: /freebsd/tools/cam/mps.d (revision 92f251f36b31519ed336ac67b768d39b62ebf896)
1*92f251f3SWarner Losh inline string scsi_op[int k] =
2*92f251f3SWarner Losh 	k == 0x00 ? "TEST UNIT READY" :
3*92f251f3SWarner Losh 	k == 0x01 ? "REZERO UNIT" :
4*92f251f3SWarner Losh 	k == 0x03 ? "REQUEST SENSE" :
5*92f251f3SWarner Losh 	k == 0x04 ? "FORMAT UNIT" :
6*92f251f3SWarner Losh 	k == 0x05 ? "READ BLOCK LIMITS" :
7*92f251f3SWarner Losh 	k == 0x07 ? "REASSIGN BLOCKS" :
8*92f251f3SWarner Losh 	k == 0x08 ? "READ(6)" :
9*92f251f3SWarner Losh 	k == 0x0a ? "WRITE(6)" :
10*92f251f3SWarner Losh 	k == 0x0b ? "SEEK(6)" :
11*92f251f3SWarner Losh 	k == 0x0f ? "READ REVERSE(6)" :
12*92f251f3SWarner Losh 	k == 0x10 ? "WRITE FILEMARKS(6)" :
13*92f251f3SWarner Losh 	k == 0x11 ? "SPACE(6)" :
14*92f251f3SWarner Losh 	k == 0x12 ? "INQUIRY" :
15*92f251f3SWarner Losh 	k == 0x14 ? "RECOVER BUFFERED DATA" :
16*92f251f3SWarner Losh 	k == 0x15 ? "MODE SELECT(6)" :
17*92f251f3SWarner Losh 	k == 0x16 ? "RESERVE(6)" :
18*92f251f3SWarner Losh 	k == 0x17 ? "RELEASE(6)" :
19*92f251f3SWarner Losh 	k == 0x18 ? "COPY" :
20*92f251f3SWarner Losh 	k == 0x19 ? "ERASE(6)" :
21*92f251f3SWarner Losh 	k == 0x1a ? "MODE SENSE(6)" :
22*92f251f3SWarner Losh 	k == 0x1b ? "START STOP UNIT" :
23*92f251f3SWarner Losh 	k == 0x1c ? "RECEIVE DIAGNOSTIC RESULTS" :
24*92f251f3SWarner Losh 	k == 0x1d ? "SEND DIAGNOSTIC" :
25*92f251f3SWarner Losh 	k == 0x1e ? "PREVENT ALLOW MEDIUM REMOVAL" :
26*92f251f3SWarner Losh 	k == 0x24 ? "SET WINDOW" :
27*92f251f3SWarner Losh 	k == 0x25 ? "READ CAPACITY(10)" :
28*92f251f3SWarner Losh 	k == 0x28 ? "READ(10)" :
29*92f251f3SWarner Losh 	k == 0x29 ? "READ GENERATION" :
30*92f251f3SWarner Losh 	k == 0x2a ? "WRITE(10)" :
31*92f251f3SWarner Losh 	k == 0x2b ? "SEEK(10)" :
32*92f251f3SWarner Losh 	k == 0x2c ? "ERASE(10)" :
33*92f251f3SWarner Losh 	k == 0x2e ? "WRITE AND VERIFY(10)" :
34*92f251f3SWarner Losh 	k == 0x2f ? "VERIFY(10)" :
35*92f251f3SWarner Losh 	k == 0x30 ? "SEARCH DATA HIGH(10)" :
36*92f251f3SWarner Losh 	k == 0x31 ? "SEARCH DATA EQUAL(10)" :
37*92f251f3SWarner Losh 	k == 0x32 ? "SEARCH DATA LOW(10)" :
38*92f251f3SWarner Losh 	k == 0x33 ? "SET LIMITS(10)" :
39*92f251f3SWarner Losh 	k == 0x35 ? "SYNCHRONIZE CACHE(10)" :
40*92f251f3SWarner Losh 	k == 0x36 ? "LOCK UNLOCK CACHE(10)" :
41*92f251f3SWarner Losh 	k == 0x37 ? "READ DEFECT DATA(10)" :
42*92f251f3SWarner Losh 	k == 0x39 ? "COMPARE" :
43*92f251f3SWarner Losh 	k == 0x3a ? "COPY AND VERIFY" :
44*92f251f3SWarner Losh 	k == 0x3b ? "WRITE BUFFER" :
45*92f251f3SWarner Losh 	k == 0x3c ? "READ BUFFER(10)" :
46*92f251f3SWarner Losh 	k == 0x3e ? "READ LONG(10)" :
47*92f251f3SWarner Losh 	k == 0x3f ? "WRITE LONG(10)" :
48*92f251f3SWarner Losh 	k == 0x40 ? "CHANGE DEFINITION" :
49*92f251f3SWarner Losh 	k == 0x41 ? "WRITE SAME(10)" :
50*92f251f3SWarner Losh 	k == 0x42 ? "UNMAP" :
51*92f251f3SWarner Losh 	k == 0x48 ? "SANITIZE" :
52*92f251f3SWarner Losh 	k == 0x4c ? "LOG SELECT" :
53*92f251f3SWarner Losh 	k == 0x4d ? "LOG SENSE" :
54*92f251f3SWarner Losh 	k == 0x50 ? "XDWRITE(10)" :
55*92f251f3SWarner Losh 	k == 0x51 ? "XPWRITE(10)" :
56*92f251f3SWarner Losh 	k == 0x52 ? "XDREAD(10)" :
57*92f251f3SWarner Losh 	k == 0x53 ? "XDWRITEREAD(10)" :
58*92f251f3SWarner Losh 	k == 0x55 ? "MODE SELECT(10)" :
59*92f251f3SWarner Losh 	k == 0x56 ? "RESERVE(10)" :
60*92f251f3SWarner Losh 	k == 0x57 ? "RELEASE(10)" :
61*92f251f3SWarner Losh 	k == 0x5a ? "MODE SENSE(10)" :
62*92f251f3SWarner Losh 	k == 0x5e ? "PERSISTENT RESERVE IN" :
63*92f251f3SWarner Losh 	k == 0x5f ? "PERSISTENT RESERVE OUT" :
64*92f251f3SWarner Losh 	k == 0x7e ? "extended CDB" :
65*92f251f3SWarner Losh 	k == 0x7f ? "variable length CDB (more than 16 bytes)" :
66*92f251f3SWarner Losh 	k == 0x80 ? "XDWRITE EXTENDED(16)" :
67*92f251f3SWarner Losh 	k == 0x81 ? "REBUILD(16)" :
68*92f251f3SWarner Losh 	k == 0x82 ? "REGENERATE(16)" :
69*92f251f3SWarner Losh 	k == 0x83 ? "Third-party Copy OUT" :
70*92f251f3SWarner Losh 	k == 0x84 ? "Third-party Copy IN" :
71*92f251f3SWarner Losh 	k == 0x85 ? "ATA PASS-THROUGH(16)" :
72*92f251f3SWarner Losh 	k == 0x86 ? "ACCESS CONTROL IN" :
73*92f251f3SWarner Losh 	k == 0x87 ? "ACCESS CONTROL OUT" :
74*92f251f3SWarner Losh 	k == 0x88 ? "READ(16)" :
75*92f251f3SWarner Losh 	k == 0x89 ? "COMPARE AND WRITE" :
76*92f251f3SWarner Losh 	k == 0x8a ? "WRITE(16)" :
77*92f251f3SWarner Losh 	k == 0x8b ? "ORWRITE" :
78*92f251f3SWarner Losh 	k == 0x8c ? "READ ATTRIBUTE" :
79*92f251f3SWarner Losh 	k == 0x8d ? "WRITE ATTRIBUTE" :
80*92f251f3SWarner Losh 	k == 0x8e ? "WRITE AND VERIFY(16)" :
81*92f251f3SWarner Losh 	k == 0x8f ? "VERIFY(16)" :
82*92f251f3SWarner Losh 	k == 0x90 ? "PRE-FETCH(16)" :
83*92f251f3SWarner Losh 	k == 0x91 ? "SYNCHRONIZE CACHE(16)" :
84*92f251f3SWarner Losh 	k == 0x92 ? "LOCK UNLOCK CACHE(16)" :
85*92f251f3SWarner Losh 	k == 0x93 ? "WRITE SAME(16)" :
86*92f251f3SWarner Losh 	k == 0x94 ? "ZBC OUT" :
87*92f251f3SWarner Losh 	k == 0x95 ? "ZBC IN" :
88*92f251f3SWarner Losh 	k == 0x9a ? "WRITE STREAM(16)" :
89*92f251f3SWarner Losh 	k == 0x9b ? "READ BUFFER(16)" :
90*92f251f3SWarner Losh 	k == 0x9c ? "WRITE ATOMIC(16)" :
91*92f251f3SWarner Losh 	k == 0x9e ? "SERVICE ACTION IN(16)" :
92*92f251f3SWarner Losh 	k == 0xa0 ? "REPORT LUNS" :
93*92f251f3SWarner Losh 	k == 0xa1 ? "ATA PASS-THROUGH(12)" :
94*92f251f3SWarner Losh 	k == 0xa2 ? "SECURITY PROTOCOL IN" :
95*92f251f3SWarner Losh 	k == 0xa3 ? "MAINTENANCE IN" :
96*92f251f3SWarner Losh 	k == 0xa4 ? "MAINTENANCE OUT" :
97*92f251f3SWarner Losh 	k == 0xa7 ? "MOVE MEDIUM ATTACHED" :
98*92f251f3SWarner Losh 	k == 0xa8 ? "READ(12)" :
99*92f251f3SWarner Losh 	k == 0xaa ? "WRITE(12)" :
100*92f251f3SWarner Losh 	k == 0xae ? "WRITE AND VERIFY(12)" :
101*92f251f3SWarner Losh 	k == 0xaf ? "VERIFY(12)" :
102*92f251f3SWarner Losh 	k == 0xb3 ? "SET LIMITS(12)" :
103*92f251f3SWarner Losh 	k == 0xb4 ? "READ ELEMENT STATUS ATTACHED" :
104*92f251f3SWarner Losh 	k == 0xb5 ? "SECURITY PROTOCOL OUT" :
105*92f251f3SWarner Losh 	k == 0xb7 ? "READ DEFECT DATA(12)" :
106*92f251f3SWarner Losh 	k == 0xba ? "REDUNDANCY GROUP (IN)" :
107*92f251f3SWarner Losh 	k == 0xbb ? "REDUNDANCY GROUP (OUT)" :
108*92f251f3SWarner Losh 	k == 0xbc ? "SPARE (IN)" :
109*92f251f3SWarner Losh 	k == 0xbd ? "SPARE (OUT)" :
110*92f251f3SWarner Losh 	k == 0xbe ? "VOLUME SET (IN)" :
111*92f251f3SWarner Losh 	k == 0xbf ? "VOLUME SET (OUT)" :
112*92f251f3SWarner Losh 	"Unknown";
113*92f251f3SWarner Losh 
114*92f251f3SWarner Losh inline string xpt_action_string[int key] =
115*92f251f3SWarner Losh 	key ==  0 ? "XPT_NOOP" :
116*92f251f3SWarner Losh 	key ==  1 ? "XPT_SCSI_IO" :
117*92f251f3SWarner Losh 	key ==  2 ? "XPT_GDEV_TYPE" :
118*92f251f3SWarner Losh 	key ==  3 ? "XPT_GDEVLIST" :
119*92f251f3SWarner Losh 	key ==  4 ? "XPT_PATH_INQ" :
120*92f251f3SWarner Losh 	key ==  5 ? "XPT_REL_SIMQ" :
121*92f251f3SWarner Losh 	key ==  6 ? "XPT_SASYNC_CB" :
122*92f251f3SWarner Losh 	key ==  7 ? "XPT_SDEV_TYPE" :
123*92f251f3SWarner Losh 	key ==  8 ? "XPT_SCAN_BUS" :
124*92f251f3SWarner Losh 	key ==  9 ? "XPT_DEV_MATCH" :
125*92f251f3SWarner Losh 	key == 10 ? "XPT_DEBUG" :
126*92f251f3SWarner Losh 	key == 11 ? "XPT_PATH_STATS" :
127*92f251f3SWarner Losh 	key == 12 ? "XPT_GDEV_STATS" :
128*92f251f3SWarner Losh 	key == 13 ? "XPT_0X0d" :
129*92f251f3SWarner Losh 	key == 14 ? "XPT_DEV_ADVINFO" :
130*92f251f3SWarner Losh 	key == 15 ? "XPT_ASYNC" :
131*92f251f3SWarner Losh 	key == 16 ? "XPT_ABORT" :
132*92f251f3SWarner Losh 	key == 17 ? "XPT_RESET_BUS" :
133*92f251f3SWarner Losh 	key == 18 ? "XPT_RESET_DEV" :
134*92f251f3SWarner Losh 	key == 19 ? "XPT_TERM_IO" :
135*92f251f3SWarner Losh 	key == 20 ? "XPT_SCAN_LUN" :
136*92f251f3SWarner Losh 	key == 21 ? "XPT_GET_TRAN_SETTINGS" :
137*92f251f3SWarner Losh 	key == 22 ? "XPT_SET_TRAN_SETTINGS" :
138*92f251f3SWarner Losh 	key == 23 ? "XPT_CALC_GEOMETRY" :
139*92f251f3SWarner Losh 	key == 24 ? "XPT_ATA_IO" :
140*92f251f3SWarner Losh 	key == 25 ? "XPT_SET_SIM_KNOB" :
141*92f251f3SWarner Losh 	key == 26 ? "XPT_GET_SIM_KNOB" :
142*92f251f3SWarner Losh 	key == 27 ? "XPT_SMP_IO" :
143*92f251f3SWarner Losh 	key == 28 ? "XPT_NVME_IO" :
144*92f251f3SWarner Losh 	key == 29 ? "XPT_MMC_IO" :
145*92f251f3SWarner Losh 	key == 30 ? "XPT_SCAN_TGT" :
146*92f251f3SWarner Losh 	key == 31 ? "XPT_NVME_ADMIN" :
147*92f251f3SWarner Losh 	"Too big" ;
148*92f251f3SWarner Losh 
149*92f251f3SWarner Losh inline int CAM_CDB_POINTER = 1;
150*92f251f3SWarner Losh inline int XPT_SCSI_IO = 0x01;
151*92f251f3SWarner Losh inline int XPT_ATA_IO = 0x18;
152*92f251f3SWarner Losh inline int XPT_NVME_IO = 0x1c;
153*92f251f3SWarner Losh inline int XPT_NVME_ADMIN = 0x1f;
154*92f251f3SWarner Losh 
155*92f251f3SWarner Losh /*
156*92f251f3SWarner Losh  * key >> 5 gives the group:
157*92f251f3SWarner Losh  * Group 0:  six byte commands
158*92f251f3SWarner Losh  * Group 1:  ten byte commands
159*92f251f3SWarner Losh  * Group 2:  ten byte commands
160*92f251f3SWarner Losh  * Group 3:  reserved (7e and 7f are de-facto 32 bytes though)
161*92f251f3SWarner Losh  * Group 4:  sixteen byte commands
162*92f251f3SWarner Losh  * Group 5:  twelve byte commands
163*92f251f3SWarner Losh  * Group 6:  vendor specific
164*92f251f3SWarner Losh  * Group 7:  vendor specific
165*92f251f3SWarner Losh  */
166*92f251f3SWarner Losh inline int scsi_cdb_len[int key] =
167*92f251f3SWarner Losh         key == 0 ? 6 :
168*92f251f3SWarner Losh         key == 1 ? 10 :
169*92f251f3SWarner Losh         key == 2 ? 10 :
170*92f251f3SWarner Losh         key == 3 ? 1 :          /* reserved */
171*92f251f3SWarner Losh         key == 4 ? 16 :
172*92f251f3SWarner Losh         key == 5 ? 12 :
173*92f251f3SWarner Losh         key == 6 ? 1 :          /* reserved */
174*92f251f3SWarner Losh         /* key == 7 */ 1;       /* reserved */
175*92f251f3SWarner Losh 
176*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_MASK                        =(0x7FFF);
177*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SUCCESS                     =(0x0000);
178*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_FUNCTION            =(0x0001);
179*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_BUSY                        =(0x0002);
180*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_SGL                 =(0x0003);
181*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_INTERNAL_ERROR              =(0x0004);
182*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_VPID                =(0x0005);
183*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES      =(0x0006);
184*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_FIELD               =(0x0007);
185*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_INVALID_STATE               =(0x0008);
186*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED      =(0x0009);
187*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_INVALID_ACTION       =(0x0020);
188*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_INVALID_TYPE         =(0x0021);
189*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_INVALID_PAGE         =(0x0022);
190*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_INVALID_DATA         =(0x0023);
191*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS          =(0x0024);
192*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_CONFIG_CANT_COMMIT          =(0x0025);
193*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR        =(0x0040);
194*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE      =(0x0042);
195*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE       =(0x0043);
196*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_DATA_OVERRUN           =(0x0044);
197*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN          =(0x0045);
198*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR          =(0x0046);
199*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR         =(0x0047);
200*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_TASK_TERMINATED        =(0x0048);
201*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH      =(0x0049);
202*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED       =(0x004A);
203*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_IOC_TERMINATED         =(0x004B);
204*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SCSI_EXT_TERMINATED         =(0x004C);
205*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_EEDP_GUARD_ERROR            =(0x004D);
206*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR          =(0x004E);
207*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR          =(0x004F);
208*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX     =(0x0062);
209*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_ABORTED              =(0x0063);
210*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE    =(0x0064);
211*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_NO_CONNECTION        =(0x0065);
212*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH  =(0x006A);
213*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR    =(0x006D);
214*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA  =(0x006E);
215*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT         =(0x006F);
216*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT      =(0x0070);
217*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_TARGET_NAK_RECEIVED         =(0x0071);
218*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED      =(0x0090);
219*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN        =(0x0091);
220*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED         =(0x00A0);
221*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_RAID_ACCEL_ERROR            =(0x00B0);
222*92f251f3SWarner Losh 
223*92f251f3SWarner Losh inline int MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE     =(0x8000);
224*92f251f3SWarner Losh 
225*92f251f3SWarner Losh inline string mpi2_iocstatus_str[int key] =
226*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SUCCESS ? "MPI2_IOCSTATUS_SUCCESS" :
227*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_INVALID_FUNCTION ? "MPI2_IOCSTATUS_INVALID_FUNCTION" :
228*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_BUSY ? "MPI2_IOCSTATUS_BUSY" :
229*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_INVALID_SGL ? "MPI2_IOCSTATUS_INVALID_SGL" :
230*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_INTERNAL_ERROR ? "MPI2_IOCSTATUS_INTERNAL_ERROR" :
231*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_INVALID_VPID ? "MPI2_IOCSTATUS_INVALID_VPID" :
232*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES ? "MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES" :
233*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_INVALID_FIELD ? "MPI2_IOCSTATUS_INVALID_FIELD" :
234*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_INVALID_STATE ? "MPI2_IOCSTATUS_INVALID_STATE" :
235*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED ? "MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED" :
236*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_CONFIG_INVALID_ACTION ? "MPI2_IOCSTATUS_CONFIG_INVALID_ACTION" :
237*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_CONFIG_INVALID_TYPE ? "MPI2_IOCSTATUS_CONFIG_INVALID_TYPE" :
238*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ? "MPI2_IOCSTATUS_CONFIG_INVALID_PAGE" :
239*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_CONFIG_INVALID_DATA ? "MPI2_IOCSTATUS_CONFIG_INVALID_DATA" :
240*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS ? "MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS" :
241*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_CONFIG_CANT_COMMIT ? "MPI2_IOCSTATUS_CONFIG_CANT_COMMIT" :
242*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR ? "MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR" :
243*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE ? "MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE" :
244*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE ? "MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE" :
245*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_DATA_OVERRUN ? "MPI2_IOCSTATUS_SCSI_DATA_OVERRUN" :
246*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN ? "MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN" :
247*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR ? "MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR" :
248*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR ? "MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR" :
249*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_TASK_TERMINATED ? "MPI2_IOCSTATUS_SCSI_TASK_TERMINATED" :
250*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH ? "MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH" :
251*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED ? "MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED" :
252*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_IOC_TERMINATED ? "MPI2_IOCSTATUS_SCSI_IOC_TERMINATED" :
253*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SCSI_EXT_TERMINATED ? "MPI2_IOCSTATUS_SCSI_EXT_TERMINATED" :
254*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_EEDP_GUARD_ERROR ? "MPI2_IOCSTATUS_EEDP_GUARD_ERROR" :
255*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR ? "MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR" :
256*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR ? "MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR" :
257*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX ? "MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX" :
258*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_ABORTED ? "MPI2_IOCSTATUS_TARGET_ABORTED" :
259*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE ? "MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE" :
260*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_NO_CONNECTION ? "MPI2_IOCSTATUS_TARGET_NO_CONNECTION" :
261*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH ? "MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH" :
262*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR ? "MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR" :
263*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA ? "MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA" :
264*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT ? "MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT" :
265*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT ? "MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT" :
266*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_TARGET_NAK_RECEIVED ? "MPI2_IOCSTATUS_TARGET_NAK_RECEIVED" :
267*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED ? "MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED" :
268*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN ? "MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN" :
269*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED ? "MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED" :
270*92f251f3SWarner Losh 	key == MPI2_IOCSTATUS_RAID_ACCEL_ERROR ? "MPI2_IOCSTATUS_RAID_ACCEL_ERROR" :
271*92f251f3SWarner Losh 	"MPI2_unknown value";
272*92f251f3SWarner Losh 
273*92f251f3SWarner Losh 
274*92f251f3SWarner Losh 
275*92f251f3SWarner Losh /*
276*92f251f3SWarner Losh  * arg0 union *ccb
277*92f251f3SWarner Losh  * arg1 mps_command *cm
278*92f251f3SWarner Losh  * arg2 sassc->flags
279*92f251f3SWarner Losh  * arg3 device_info
280*92f251f3SWarner Losh  */
281*92f251f3SWarner Losh cam::mps:complete
282*92f251f3SWarner Losh {
283*92f251f3SWarner Losh 	this->ccb = (union ccb *)arg0;
284*92f251f3SWarner Losh         this->func = this->ccb->ccb_h.func_code & 0xff;
285*92f251f3SWarner Losh         this->periph = this->ccb->ccb_h.path->periph;
286*92f251f3SWarner Losh 	this->cm = (struct mps_command *)arg1;
287*92f251f3SWarner Losh 	this->rep = (MPI2_SCSI_IO_REPLY *)this->cm->cm_reply;
288*92f251f3SWarner Losh 	this->sassc_flags = arg2;
289*92f251f3SWarner Losh 	this->device_info = arg3;
290*92f251f3SWarner Losh         this->trace = 0;
291*92f251f3SWarner Losh 	this->do_fast = 0;
292*92f251f3SWarner Losh }
293*92f251f3SWarner Losh 
294*92f251f3SWarner Losh 
295*92f251f3SWarner Losh cam::mps:complete
296*92f251f3SWarner Losh /this->periph->unit_number == 1 || this->periph->unit_number == 2/
297*92f251f3SWarner Losh {
298*92f251f3SWarner Losh 	this->trace = 1;
299*92f251f3SWarner Losh }
300*92f251f3SWarner Losh 
301*92f251f3SWarner Losh cam::mps:complete
302*92f251f3SWarner Losh /this->trace && this->rep != NULL/
303*92f251f3SWarner Losh {
304*92f251f3SWarner Losh 	this->IOCStatus = /* le16toh */ this->rep->IOCStatus & MPI2_IOCSTATUS_MASK;
305*92f251f3SWarner Losh }
306*92f251f3SWarner Losh 
307*92f251f3SWarner Losh cam::mps:complete
308*92f251f3SWarner Losh /this->trace && this->rep == NULL/
309*92f251f3SWarner Losh {
310*92f251f3SWarner Losh /*	printf("mps: da%d: FAST", this->periph->unit_number); */
311*92f251f3SWarner Losh 	this->trace = 0
312*92f251f3SWarner Losh }
313*92f251f3SWarner Losh 
314*92f251f3SWarner Losh cam::mps:complete
315*92f251f3SWarner Losh /this->func == XPT_SCSI_IO/
316*92f251f3SWarner Losh {
317*92f251f3SWarner Losh         this->hdr = &this->ccb->ccb_h;
318*92f251f3SWarner Losh         this->csio = &this->ccb->csio;
319*92f251f3SWarner Losh         this->cdb = this->hdr->flags & CAM_CDB_POINTER ?
320*92f251f3SWarner Losh                 this->csio->cdb_io.cdb_ptr :
321*92f251f3SWarner Losh                 &this->csio->cdb_io.cdb_bytes[0];
322*92f251f3SWarner Losh         this->cdb_len = this->csio->cdb_len ? this->csio->cdb_len :
323*92f251f3SWarner Losh                 scsi_cdb_len[this->cdb[0] >> 5];
324*92f251f3SWarner Losh }
325*92f251f3SWarner Losh 
326*92f251f3SWarner Losh cam::mps:complete
327*92f251f3SWarner Losh /this->trace && this->rep != NULL && this->func == XPT_SCSI_IO/
328*92f251f3SWarner Losh {
329*92f251f3SWarner Losh 	printf("mps: da%d: SLOW CDB: %s Status: %s", this->periph->unit_number, scsi_op[this->cdb[0]],
330*92f251f3SWarner Losh 	    mpi2_iocstatus_str[this->IOCStatus]);
331*92f251f3SWarner Losh }
332