summaryrefslogtreecommitdiff
path: root/tools/cam/mps.d
blob: aa7a8f0c70af1ec9595c06bc3e31bbad972ec742 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
inline string scsi_op[int k] =
	k == 0x00 ? "TEST UNIT READY" :
	k == 0x01 ? "REZERO UNIT" :
	k == 0x03 ? "REQUEST SENSE" :
	k == 0x04 ? "FORMAT UNIT" :
	k == 0x05 ? "READ BLOCK LIMITS" :
	k == 0x07 ? "REASSIGN BLOCKS" :
	k == 0x08 ? "READ(6)" :
	k == 0x0a ? "WRITE(6)" :
	k == 0x0b ? "SEEK(6)" :
	k == 0x0f ? "READ REVERSE(6)" :
	k == 0x10 ? "WRITE FILEMARKS(6)" :
	k == 0x11 ? "SPACE(6)" :
	k == 0x12 ? "INQUIRY" :
	k == 0x14 ? "RECOVER BUFFERED DATA" :
	k == 0x15 ? "MODE SELECT(6)" :
	k == 0x16 ? "RESERVE(6)" :
	k == 0x17 ? "RELEASE(6)" :
	k == 0x18 ? "COPY" :
	k == 0x19 ? "ERASE(6)" :
	k == 0x1a ? "MODE SENSE(6)" :
	k == 0x1b ? "START STOP UNIT" :
	k == 0x1c ? "RECEIVE DIAGNOSTIC RESULTS" :
	k == 0x1d ? "SEND DIAGNOSTIC" :
	k == 0x1e ? "PREVENT ALLOW MEDIUM REMOVAL" :
	k == 0x24 ? "SET WINDOW" :
	k == 0x25 ? "READ CAPACITY(10)" :
	k == 0x28 ? "READ(10)" :
	k == 0x29 ? "READ GENERATION" :
	k == 0x2a ? "WRITE(10)" :
	k == 0x2b ? "SEEK(10)" :
	k == 0x2c ? "ERASE(10)" :
	k == 0x2e ? "WRITE AND VERIFY(10)" :
	k == 0x2f ? "VERIFY(10)" :
	k == 0x30 ? "SEARCH DATA HIGH(10)" :
	k == 0x31 ? "SEARCH DATA EQUAL(10)" :
	k == 0x32 ? "SEARCH DATA LOW(10)" :
	k == 0x33 ? "SET LIMITS(10)" :
	k == 0x35 ? "SYNCHRONIZE CACHE(10)" :
	k == 0x36 ? "LOCK UNLOCK CACHE(10)" :
	k == 0x37 ? "READ DEFECT DATA(10)" :
	k == 0x39 ? "COMPARE" :
	k == 0x3a ? "COPY AND VERIFY" :
	k == 0x3b ? "WRITE BUFFER" :
	k == 0x3c ? "READ BUFFER(10)" :
	k == 0x3e ? "READ LONG(10)" :
	k == 0x3f ? "WRITE LONG(10)" :
	k == 0x40 ? "CHANGE DEFINITION" :
	k == 0x41 ? "WRITE SAME(10)" :
	k == 0x42 ? "UNMAP" :
	k == 0x48 ? "SANITIZE" :
	k == 0x4c ? "LOG SELECT" :
	k == 0x4d ? "LOG SENSE" :
	k == 0x50 ? "XDWRITE(10)" :
	k == 0x51 ? "XPWRITE(10)" :
	k == 0x52 ? "XDREAD(10)" :
	k == 0x53 ? "XDWRITEREAD(10)" :
	k == 0x55 ? "MODE SELECT(10)" :
	k == 0x56 ? "RESERVE(10)" :
	k == 0x57 ? "RELEASE(10)" :
	k == 0x5a ? "MODE SENSE(10)" :
	k == 0x5e ? "PERSISTENT RESERVE IN" :
	k == 0x5f ? "PERSISTENT RESERVE OUT" :
	k == 0x7e ? "extended CDB" :
	k == 0x7f ? "variable length CDB (more than 16 bytes)" :
	k == 0x80 ? "XDWRITE EXTENDED(16)" :
	k == 0x81 ? "REBUILD(16)" :
	k == 0x82 ? "REGENERATE(16)" :
	k == 0x83 ? "Third-party Copy OUT" :
	k == 0x84 ? "Third-party Copy IN" :
	k == 0x85 ? "ATA PASS-THROUGH(16)" :
	k == 0x86 ? "ACCESS CONTROL IN" :
	k == 0x87 ? "ACCESS CONTROL OUT" :
	k == 0x88 ? "READ(16)" :
	k == 0x89 ? "COMPARE AND WRITE" :
	k == 0x8a ? "WRITE(16)" :
	k == 0x8b ? "ORWRITE" :
	k == 0x8c ? "READ ATTRIBUTE" :
	k == 0x8d ? "WRITE ATTRIBUTE" :
	k == 0x8e ? "WRITE AND VERIFY(16)" :
	k == 0x8f ? "VERIFY(16)" :
	k == 0x90 ? "PRE-FETCH(16)" :
	k == 0x91 ? "SYNCHRONIZE CACHE(16)" :
	k == 0x92 ? "LOCK UNLOCK CACHE(16)" :
	k == 0x93 ? "WRITE SAME(16)" :
	k == 0x94 ? "ZBC OUT" :
	k == 0x95 ? "ZBC IN" :
	k == 0x9a ? "WRITE STREAM(16)" :
	k == 0x9b ? "READ BUFFER(16)" :
	k == 0x9c ? "WRITE ATOMIC(16)" :
	k == 0x9e ? "SERVICE ACTION IN(16)" :
	k == 0xa0 ? "REPORT LUNS" :
	k == 0xa1 ? "ATA PASS-THROUGH(12)" :
	k == 0xa2 ? "SECURITY PROTOCOL IN" :
	k == 0xa3 ? "MAINTENANCE IN" :
	k == 0xa4 ? "MAINTENANCE OUT" :
	k == 0xa7 ? "MOVE MEDIUM ATTACHED" :
	k == 0xa8 ? "READ(12)" :
	k == 0xaa ? "WRITE(12)" :
	k == 0xae ? "WRITE AND VERIFY(12)" :
	k == 0xaf ? "VERIFY(12)" :
	k == 0xb3 ? "SET LIMITS(12)" :
	k == 0xb4 ? "READ ELEMENT STATUS ATTACHED" :
	k == 0xb5 ? "SECURITY PROTOCOL OUT" :
	k == 0xb7 ? "READ DEFECT DATA(12)" :
	k == 0xba ? "REDUNDANCY GROUP (IN)" :
	k == 0xbb ? "REDUNDANCY GROUP (OUT)" :
	k == 0xbc ? "SPARE (IN)" :
	k == 0xbd ? "SPARE (OUT)" :
	k == 0xbe ? "VOLUME SET (IN)" :
	k == 0xbf ? "VOLUME SET (OUT)" :
	"Unknown";

inline string xpt_action_string[int key] =
	key ==  0 ? "XPT_NOOP" :
	key ==  1 ? "XPT_SCSI_IO" :
	key ==  2 ? "XPT_GDEV_TYPE" :
	key ==  3 ? "XPT_GDEVLIST" :
	key ==  4 ? "XPT_PATH_INQ" :
	key ==  5 ? "XPT_REL_SIMQ" :
	key ==  6 ? "XPT_SASYNC_CB" :
	key ==  7 ? "XPT_SDEV_TYPE" :
	key ==  8 ? "XPT_SCAN_BUS" :
	key ==  9 ? "XPT_DEV_MATCH" :
	key == 10 ? "XPT_DEBUG" :
	key == 11 ? "XPT_PATH_STATS" :
	key == 12 ? "XPT_GDEV_STATS" :
	key == 13 ? "XPT_0X0d" :
	key == 14 ? "XPT_DEV_ADVINFO" :
	key == 15 ? "XPT_ASYNC" :
	key == 16 ? "XPT_ABORT" :
	key == 17 ? "XPT_RESET_BUS" :
	key == 18 ? "XPT_RESET_DEV" :
	key == 19 ? "XPT_TERM_IO" :
	key == 20 ? "XPT_SCAN_LUN" :
	key == 21 ? "XPT_GET_TRAN_SETTINGS" :
	key == 22 ? "XPT_SET_TRAN_SETTINGS" :
	key == 23 ? "XPT_CALC_GEOMETRY" :
	key == 24 ? "XPT_ATA_IO" :
	key == 25 ? "XPT_SET_SIM_KNOB" :
	key == 26 ? "XPT_GET_SIM_KNOB" :
	key == 27 ? "XPT_SMP_IO" :
	key == 28 ? "XPT_NVME_IO" :
	key == 29 ? "XPT_MMC_IO" :
	key == 30 ? "XPT_SCAN_TGT" :
	key == 31 ? "XPT_NVME_ADMIN" :
	"Too big" ;

inline int CAM_CDB_POINTER = 1;
inline int XPT_SCSI_IO = 0x01;
inline int XPT_ATA_IO = 0x18;
inline int XPT_NVME_IO = 0x1c;
inline int XPT_NVME_ADMIN = 0x1f;

/*
 * key >> 5 gives the group:
 * Group 0:  six byte commands
 * Group 1:  ten byte commands
 * Group 2:  ten byte commands
 * Group 3:  reserved (7e and 7f are de-facto 32 bytes though)
 * Group 4:  sixteen byte commands
 * Group 5:  twelve byte commands
 * Group 6:  vendor specific
 * Group 7:  vendor specific
 */
inline int scsi_cdb_len[int key] =
        key == 0 ? 6 :
        key == 1 ? 10 :
        key == 2 ? 10 :
        key == 3 ? 1 :          /* reserved */
        key == 4 ? 16 :
        key == 5 ? 12 :
        key == 6 ? 1 :          /* reserved */
        /* key == 7 */ 1;       /* reserved */

inline int MPI2_IOCSTATUS_MASK                        =(0x7FFF);
inline int MPI2_IOCSTATUS_SUCCESS                     =(0x0000);
inline int MPI2_IOCSTATUS_INVALID_FUNCTION            =(0x0001);
inline int MPI2_IOCSTATUS_BUSY                        =(0x0002);
inline int MPI2_IOCSTATUS_INVALID_SGL                 =(0x0003);
inline int MPI2_IOCSTATUS_INTERNAL_ERROR              =(0x0004);
inline int MPI2_IOCSTATUS_INVALID_VPID                =(0x0005);
inline int MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES      =(0x0006);
inline int MPI2_IOCSTATUS_INVALID_FIELD               =(0x0007);
inline int MPI2_IOCSTATUS_INVALID_STATE               =(0x0008);
inline int MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED      =(0x0009);
inline int MPI2_IOCSTATUS_CONFIG_INVALID_ACTION       =(0x0020);
inline int MPI2_IOCSTATUS_CONFIG_INVALID_TYPE         =(0x0021);
inline int MPI2_IOCSTATUS_CONFIG_INVALID_PAGE         =(0x0022);
inline int MPI2_IOCSTATUS_CONFIG_INVALID_DATA         =(0x0023);
inline int MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS          =(0x0024);
inline int MPI2_IOCSTATUS_CONFIG_CANT_COMMIT          =(0x0025);
inline int MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR        =(0x0040);
inline int MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE      =(0x0042);
inline int MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE       =(0x0043);
inline int MPI2_IOCSTATUS_SCSI_DATA_OVERRUN           =(0x0044);
inline int MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN          =(0x0045);
inline int MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR          =(0x0046);
inline int MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR         =(0x0047);
inline int MPI2_IOCSTATUS_SCSI_TASK_TERMINATED        =(0x0048);
inline int MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH      =(0x0049);
inline int MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED       =(0x004A);
inline int MPI2_IOCSTATUS_SCSI_IOC_TERMINATED         =(0x004B);
inline int MPI2_IOCSTATUS_SCSI_EXT_TERMINATED         =(0x004C);
inline int MPI2_IOCSTATUS_EEDP_GUARD_ERROR            =(0x004D);
inline int MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR          =(0x004E);
inline int MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR          =(0x004F);
inline int MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX     =(0x0062);
inline int MPI2_IOCSTATUS_TARGET_ABORTED              =(0x0063);
inline int MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE    =(0x0064);
inline int MPI2_IOCSTATUS_TARGET_NO_CONNECTION        =(0x0065);
inline int MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH  =(0x006A);
inline int MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR    =(0x006D);
inline int MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA  =(0x006E);
inline int MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT         =(0x006F);
inline int MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT      =(0x0070);
inline int MPI2_IOCSTATUS_TARGET_NAK_RECEIVED         =(0x0071);
inline int MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED      =(0x0090);
inline int MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN        =(0x0091);
inline int MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED         =(0x00A0);
inline int MPI2_IOCSTATUS_RAID_ACCEL_ERROR            =(0x00B0);

inline int MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE     =(0x8000);

inline string mpi2_iocstatus_str[int key] = 
	key == MPI2_IOCSTATUS_SUCCESS ? "MPI2_IOCSTATUS_SUCCESS" :
	key == MPI2_IOCSTATUS_INVALID_FUNCTION ? "MPI2_IOCSTATUS_INVALID_FUNCTION" :
	key == MPI2_IOCSTATUS_BUSY ? "MPI2_IOCSTATUS_BUSY" :
	key == MPI2_IOCSTATUS_INVALID_SGL ? "MPI2_IOCSTATUS_INVALID_SGL" :
	key == MPI2_IOCSTATUS_INTERNAL_ERROR ? "MPI2_IOCSTATUS_INTERNAL_ERROR" :
	key == MPI2_IOCSTATUS_INVALID_VPID ? "MPI2_IOCSTATUS_INVALID_VPID" :
	key == MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES ? "MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES" :
	key == MPI2_IOCSTATUS_INVALID_FIELD ? "MPI2_IOCSTATUS_INVALID_FIELD" :
	key == MPI2_IOCSTATUS_INVALID_STATE ? "MPI2_IOCSTATUS_INVALID_STATE" :
	key == MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED ? "MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED" :
	key == MPI2_IOCSTATUS_CONFIG_INVALID_ACTION ? "MPI2_IOCSTATUS_CONFIG_INVALID_ACTION" :
	key == MPI2_IOCSTATUS_CONFIG_INVALID_TYPE ? "MPI2_IOCSTATUS_CONFIG_INVALID_TYPE" :
	key == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ? "MPI2_IOCSTATUS_CONFIG_INVALID_PAGE" :
	key == MPI2_IOCSTATUS_CONFIG_INVALID_DATA ? "MPI2_IOCSTATUS_CONFIG_INVALID_DATA" :
	key == MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS ? "MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS" :
	key == MPI2_IOCSTATUS_CONFIG_CANT_COMMIT ? "MPI2_IOCSTATUS_CONFIG_CANT_COMMIT" :
	key == MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR ? "MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR" :
	key == MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE ? "MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE" :
	key == MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE ? "MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE" :
	key == MPI2_IOCSTATUS_SCSI_DATA_OVERRUN ? "MPI2_IOCSTATUS_SCSI_DATA_OVERRUN" :
	key == MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN ? "MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN" :
	key == MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR ? "MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR" :
	key == MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR ? "MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR" :
	key == MPI2_IOCSTATUS_SCSI_TASK_TERMINATED ? "MPI2_IOCSTATUS_SCSI_TASK_TERMINATED" :
	key == MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH ? "MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH" :
	key == MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED ? "MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED" :
	key == MPI2_IOCSTATUS_SCSI_IOC_TERMINATED ? "MPI2_IOCSTATUS_SCSI_IOC_TERMINATED" :
	key == MPI2_IOCSTATUS_SCSI_EXT_TERMINATED ? "MPI2_IOCSTATUS_SCSI_EXT_TERMINATED" :
	key == MPI2_IOCSTATUS_EEDP_GUARD_ERROR ? "MPI2_IOCSTATUS_EEDP_GUARD_ERROR" :
	key == MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR ? "MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR" :
	key == MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR ? "MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR" :
	key == MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX ? "MPI2_IOCSTATUS_TARGET_INVALID_IO_INDEX" :
	key == MPI2_IOCSTATUS_TARGET_ABORTED ? "MPI2_IOCSTATUS_TARGET_ABORTED" :
	key == MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE ? "MPI2_IOCSTATUS_TARGET_NO_CONN_RETRYABLE" :
	key == MPI2_IOCSTATUS_TARGET_NO_CONNECTION ? "MPI2_IOCSTATUS_TARGET_NO_CONNECTION" :
	key == MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH ? "MPI2_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH" :
	key == MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR ? "MPI2_IOCSTATUS_TARGET_DATA_OFFSET_ERROR" :
	key == MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA ? "MPI2_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA" :
	key == MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT ? "MPI2_IOCSTATUS_TARGET_IU_TOO_SHORT" :
	key == MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT ? "MPI2_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT" :
	key == MPI2_IOCSTATUS_TARGET_NAK_RECEIVED ? "MPI2_IOCSTATUS_TARGET_NAK_RECEIVED" :
	key == MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED ? "MPI2_IOCSTATUS_SAS_SMP_REQUEST_FAILED" :
	key == MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN ? "MPI2_IOCSTATUS_SAS_SMP_DATA_OVERRUN" :
	key == MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED ? "MPI2_IOCSTATUS_DIAGNOSTIC_RELEASED" :
	key == MPI2_IOCSTATUS_RAID_ACCEL_ERROR ? "MPI2_IOCSTATUS_RAID_ACCEL_ERROR" :
	"MPI2_unknown value";



/*
 * arg0 union *ccb
 * arg1 mps_command *cm
 * arg2 sassc->flags
 * arg3 device_info
 */
cam::mps:complete
{
	this->ccb = (union ccb *)arg0;
        this->func = this->ccb->ccb_h.func_code & 0xff;
        this->periph = this->ccb->ccb_h.path->periph;
	this->cm = (struct mps_command *)arg1;
	this->rep = (MPI2_SCSI_IO_REPLY *)this->cm->cm_reply;
	this->sassc_flags = arg2;
	this->device_info = arg3;
        this->trace = 0;
	this->do_fast = 0;
}


cam::mps:complete
/this->periph->unit_number == 1 || this->periph->unit_number == 2/
{
	this->trace = 1;
}

cam::mps:complete
/this->trace && this->rep != NULL/
{
	this->IOCStatus = /* le16toh */ this->rep->IOCStatus & MPI2_IOCSTATUS_MASK;
}

cam::mps:complete
/this->trace && this->rep == NULL/
{
/*	printf("mps: da%d: FAST", this->periph->unit_number); */
	this->trace = 0
}

cam::mps:complete
/this->func == XPT_SCSI_IO/
{
        this->hdr = &this->ccb->ccb_h;
        this->csio = &this->ccb->csio;
        this->cdb = this->hdr->flags & CAM_CDB_POINTER ?
                this->csio->cdb_io.cdb_ptr :
                &this->csio->cdb_io.cdb_bytes[0];
        this->cdb_len = this->csio->cdb_len ? this->csio->cdb_len :
                scsi_cdb_len[this->cdb[0] >> 5];
}

cam::mps:complete
/this->trace && this->rep != NULL && this->func == XPT_SCSI_IO/
{
	printf("mps: da%d: SLOW CDB: %s Status: %s", this->periph->unit_number, scsi_op[this->cdb[0]],
	    mpi2_iocstatus_str[this->IOCStatus]);
}