1 | /* $NetBSD: scsipi_verbose.c,v 1.33 2016/09/17 18:53:13 kardel Exp $ */ |
2 | |
3 | /*- |
4 | * Copyright (c) 1998 The NetBSD Foundation, Inc. |
5 | * All rights reserved. |
6 | * |
7 | * This code is derived from software contributed to The NetBSD Foundation |
8 | * by Charles M. Hannum. |
9 | * |
10 | * Redistribution and use in source and binary forms, with or without |
11 | * modification, are permitted provided that the following conditions |
12 | * are met: |
13 | * 1. Redistributions of source code must retain the above copyright |
14 | * notice, this list of conditions and the following disclaimer. |
15 | * 2. Redistributions in binary form must reproduce the above copyright |
16 | * notice, this list of conditions and the following disclaimer in the |
17 | * documentation and/or other materials provided with the distribution. |
18 | * |
19 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
20 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
21 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
22 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
29 | * POSSIBILITY OF SUCH DAMAGE. |
30 | */ |
31 | |
32 | #include <sys/cdefs.h> |
33 | __KERNEL_RCSID(0, "$NetBSD: scsipi_verbose.c,v 1.33 2016/09/17 18:53:13 kardel Exp $" ); |
34 | |
35 | #include <sys/param.h> |
36 | #include <sys/time.h> |
37 | #include <sys/proc.h> |
38 | #include <sys/device.h> |
39 | |
40 | #ifdef _KERNEL |
41 | #include <sys/systm.h> |
42 | #include <sys/module.h> |
43 | #else |
44 | #include <stdio.h> |
45 | #endif |
46 | #include <dev/scsipi/scsipi_all.h> |
47 | #include <dev/scsipi/scsipiconf.h> |
48 | #include <dev/scsipi/scsiconf.h> |
49 | |
50 | int scsipi_print_sense_real(struct scsipi_xfer *, int); |
51 | void scsipi_print_sense_data_real(struct scsi_sense_data *, int); |
52 | static char *scsipi_decode_sense(void *, int); |
53 | |
54 | static const char *sense_keys[16] = { |
55 | "No Additional Sense" , |
56 | "Recovered Error" , |
57 | "Not Ready" , |
58 | "Media Error" , |
59 | "Hardware Error" , |
60 | "Illegal Request" , |
61 | "Unit Attention" , |
62 | "Write Protected" , |
63 | "Blank Check" , |
64 | "Vendor Unique" , |
65 | "Copy Aborted" , |
66 | "Aborted Command" , |
67 | "Equal Error" , |
68 | "Volume Overflow" , |
69 | "Miscompare Error" , |
70 | "Reserved" |
71 | }; |
72 | |
73 | /* |
74 | * The current version of this list can be obtained from |
75 | * <ftp://ftp.t10.org/t10/drafts/spc3/asc-num.txt> |
76 | */ |
77 | |
78 | static const struct { |
79 | unsigned char asc; |
80 | unsigned char ascq; |
81 | const char *description; |
82 | } adesc[] = { |
83 | { 0x00, 0x00, "No Additional Sense Information" }, |
84 | { 0x00, 0x01, "Filemark Detected" }, |
85 | { 0x00, 0x02, "End-Of-Partition/Medium Detected" }, |
86 | { 0x00, 0x03, "Setmark Detected" }, |
87 | { 0x00, 0x04, "Beginning-Of-Partition/Medium Detected" }, |
88 | { 0x00, 0x05, "End-Of-Data Detected" }, |
89 | { 0x00, 0x06, "I/O Process Terminated" }, |
90 | { 0x00, 0x07, "Programmable Early Warning Detected" }, |
91 | { 0x00, 0x11, "Audio Play Operation In Progress" }, |
92 | { 0x00, 0x12, "Audio Play Operation Paused" }, |
93 | { 0x00, 0x13, "Audio Play Operation Successfully Completed" }, |
94 | { 0x00, 0x14, "Audio Play Operation Stopped Due To Error" }, |
95 | { 0x00, 0x15, "No Current Audio Status To Return" }, |
96 | { 0x00, 0x16, "Operation In Progress" }, |
97 | { 0x00, 0x17, "Cleaning Requested" }, |
98 | { 0x00, 0x18, "Erase Operation In Progress" }, |
99 | { 0x00, 0x19, "Locate Operation In Progress" }, |
100 | { 0x00, 0x1A, "Rewind Operation In Progress" }, |
101 | { 0x00, 0x1B, "Set Capacity Operation In Progress" }, |
102 | { 0x00, 0x1C, "Verify Operation In Progress" }, |
103 | { 0x00, 0x1D, "ATA Pass Through Information Available" }, |
104 | { 0x00, 0x1E, "Conflicting SA Creation Request" }, |
105 | { 0x00, 0x1F, "Logical Unit Transitioning To Another Power Condition" }, |
106 | { 0x00, 0x20, "Extended Copy Information Available" }, |
107 | { 0x00, 0x21, "Atomic Command Aborted Due To ACA" }, |
108 | { 0x01, 0x00, "No Index/Sector Signal" }, |
109 | { 0x02, 0x00, "No Seek Complete" }, |
110 | { 0x03, 0x00, "Peripheral Device Write Fault" }, |
111 | { 0x03, 0x01, "No Write Current" }, |
112 | { 0x03, 0x02, "Excessive Write Errors" }, |
113 | { 0x04, 0x00, "Logical Unit Not Ready, Cause Not Reportable" }, |
114 | { 0x04, 0x01, "Logical Unit Is In Process Of Becoming Ready" }, |
115 | { 0x04, 0x02, "Logical Unit Not Ready, Initializing Command Required" }, |
116 | { 0x04, 0x03, "Logical Unit Not Ready, Manual Intervention Required" }, |
117 | { 0x04, 0x04, "Logical Unit Not Ready, Format In Progress" }, |
118 | { 0x04, 0x05, "Logical Unit Not Ready, Rebuild In Progress" }, |
119 | { 0x04, 0x06, "Logical Unit Not Ready, Recalculation In Progress" }, |
120 | { 0x04, 0x07, "Logical Unit Not Ready, Operation In Progress" }, |
121 | { 0x04, 0x08, "Logical Unit Not Ready, Long Write In Progress" }, |
122 | { 0x04, 0x09, "Logical Unit Not Ready, Self-Test In Progress" }, |
123 | { 0x04, 0x0A, "Logical Unit Not Accessible, Asymmetric Access State " |
124 | "Transition" }, |
125 | { 0x04, 0x0B, "Logical Unit Not Accessible, Target Port In Standby State" }, |
126 | { 0x04, 0x0C, "Logical Unit Not Accessible, Target Port In Unavailable State" }, |
127 | { 0x04, 0x0D, "Logical Unit Not Ready, Structure Check Required" }, |
128 | { 0x04, 0x0E, "Logical Unit Not Ready, Security Session In Progress" }, |
129 | { 0x04, 0x10, "Logical Unit Not Ready, Auxiliary Memory Not Accessible" }, |
130 | { 0x04, 0x11, "Logical Unit Not Ready, Notify (Enable Spinup) Required" }, |
131 | { 0x04, 0x12, "Logical Unit Not Ready, Offline" }, |
132 | { 0x04, 0x13, "Logical Unit Not Ready, SA Creation In Progress" }, |
133 | { 0x04, 0x14, "Logical Unit Not Ready, Space Allocation In Progress" }, |
134 | { 0x04, 0x15, "Logical Unit Not Ready, Robotics Disabled" }, |
135 | { 0x04, 0x16, "Logical Unit Not Ready, Configuration Required" }, |
136 | { 0x04, 0x17, "Logical Unit Not Ready, Calibration Required" }, |
137 | { 0x04, 0x18, "Logical Unit Not Ready, A Door Is Open" }, |
138 | { 0x04, 0x19, "Logical Unit Not Ready, Operating In Sequential Mode" }, |
139 | { 0x04, 0x1A, "Logical Unit Not Ready, Start Stop Unit Command In Progress" }, |
140 | { 0x04, 0x1B, "Logical Unit Not Ready, Sanitize In Progress" }, |
141 | { 0x04, 0x1C, "Logical Unit Not Ready, Additional Power Use Not Yet Granted" }, |
142 | { 0x04, 0x1D, "Logical Unit Not Ready, Configuration In Progress" }, |
143 | { 0x04, 0x1E, "Logical Unit Not Ready, Microcode Activation Required" }, |
144 | { 0x04, 0x1F, "Logical Unit Not Ready, Microcode Download Required" }, |
145 | { 0x04, 0x20, "Logical Unit Not Ready, Logical Unit Reset Required" }, |
146 | { 0x04, 0x21, "Logical Unit Not Ready, Hard Reset Required" }, |
147 | { 0x04, 0x22, "Logical Unit Not Ready, Power Cycle Required" }, |
148 | { 0x04, 0x23, "Logical Unit Not Ready, Affiliation Required" }, |
149 | { 0x05, 0x00, "Logical Unit Does Not Respond To Selection" }, |
150 | { 0x06, 0x00, "No Reference Position Found" }, |
151 | { 0x07, 0x00, "Multiple Peripheral Devices Selected" }, |
152 | { 0x08, 0x00, "Logical Unit Communication Failure" }, |
153 | { 0x08, 0x01, "Logical Unit Communication Timeout" }, |
154 | { 0x08, 0x02, "Logical Unit Communication Parity Error" }, |
155 | { 0x08, 0x03, "Logical Unit Communication CRC Error (Ultra-Dma/32)" }, |
156 | { 0x08, 0x04, "Unreachable Copy Target" }, |
157 | { 0x09, 0x00, "Track Following Error" }, |
158 | { 0x09, 0x01, "Tracking Servo Failure" }, |
159 | { 0x09, 0x02, "Focus Servo Failure" }, |
160 | { 0x09, 0x03, "Spindle Servo Failure" }, |
161 | { 0x09, 0x04, "Head Select Fault" }, |
162 | { 0x09, 0x05, "Vibration Induced Tracking Error" }, |
163 | { 0x0A, 0x00, "Error Log Overflow" }, |
164 | { 0x0B, 0x00, "Warning" }, |
165 | { 0x0B, 0x01, "Warning - Specified Temperature Exceeded" }, |
166 | { 0x0B, 0x02, "Warning - Enclosure Degraded" }, |
167 | { 0x0B, 0x03, "Warning - Background Self-Test Failed" }, |
168 | { 0x0B, 0x04, "Warning - Background Pre-Scan Detected Medium Error" }, |
169 | { 0x0B, 0x05, "Warning - Background Medium Scan Detected Medium Error" }, |
170 | { 0x0B, 0x06, "Warning - Non-Volatile Cache Now Volatile" }, |
171 | { 0x0B, 0x07, "Warning - Degraded Power To Non-Volatile Cache" }, |
172 | { 0x0B, 0x08, "Warning - Power Loss Expected" }, |
173 | { 0x0B, 0x09, "Warning - Device Statistics Notification Active" }, |
174 | { 0x0B, 0x0A, "Warning - High Critical Temperature Limit Exceeded" }, |
175 | { 0x0B, 0x0B, "Warning - Low Critical Temperature Limit Exceeded" }, |
176 | { 0x0B, 0x0C, "Warning - High Operating Temperature Limit Exceeded" }, |
177 | { 0x0B, 0x0D, "Warning - Low Operating Temperature Limit Exceeded" }, |
178 | { 0x0B, 0x0E, "Warning - High Critical Humidity Limit Exceeded" }, |
179 | { 0x0B, 0x0F, "Warning - Low Critical Humidity Limit Exceeded" }, |
180 | { 0x0B, 0x10, "Warning - High Operating Humidity Limit Exceeded" }, |
181 | { 0x0B, 0x11, "Warning - Low Operating Humidity Limit Exceeded" }, |
182 | { 0x0C, 0x00, "Write Error" }, |
183 | { 0x0C, 0x01, "Write Error - Recovered With Auto Reallocation" }, |
184 | { 0x0C, 0x02, "Write Error - Auto Reallocation Failed" }, |
185 | { 0x0C, 0x03, "Write Error - Recommend Reassignment" }, |
186 | { 0x0C, 0x04, "Compression Check Miscompare Error" }, |
187 | { 0x0C, 0x05, "Data Expansion Occurred During Compression" }, |
188 | { 0x0C, 0x06, "Block Not Compressible" }, |
189 | { 0x0C, 0x07, "Write Error - Recovery Needed" }, |
190 | { 0x0C, 0x08, "Write Error - Recovery Failed" }, |
191 | { 0x0C, 0x09, "Write Error - Loss Of Streaming" }, |
192 | { 0x0C, 0x0A, "Write Error - Padding Blocks Added" }, |
193 | { 0x0C, 0x0B, "Auxiliary Memory Write Error" }, |
194 | { 0x0C, 0x0C, "Write Error - Unexpected Unsolicited Data" }, |
195 | { 0x0C, 0x0D, "Write Error - Not Enough Unsolicited Data" }, |
196 | { 0x0C, 0x0E, "Multiple Write Errors" }, |
197 | { 0x0C, 0x0F, "Defects In Error Window" }, |
198 | { 0x0C, 0x10, "Incomplete Multiple Atomic Write Operations" }, |
199 | { 0x0C, 0x11, "Write Error - Recovery Scan Needed" }, |
200 | { 0x0C, 0x12, "Write Error - Insufficient Zone Resources" }, |
201 | { 0x0D, 0x00, "Error Detected By Third Party Temporary Initiator" }, |
202 | { 0x0D, 0x01, "Third Party Device Failure" }, |
203 | { 0x0D, 0x02, "Copy Target Device Not Reachable" }, |
204 | { 0x0D, 0x03, "Incorrect Copy Target Device Type" }, |
205 | { 0x0D, 0x04, "Copy Target Device Data Underrun" }, |
206 | { 0x0D, 0x05, "Copy Target Device Data Overrun" }, |
207 | { 0x0E, 0x00, "Invalid Information Unit" }, |
208 | { 0x0E, 0x01, "Information Unit Too Short" }, |
209 | { 0x0E, 0x02, "Information Unit Too Long" }, |
210 | { 0x0E, 0x03, "Invalid Field In Command Information Unit" }, |
211 | { 0x10, 0x00, "Id CRC Or ECC Error" }, |
212 | { 0x10, 0x01, "Logical Block Guard Check Failed" }, |
213 | { 0x10, 0x02, "Logical Block Application Tag Check Failed" }, |
214 | { 0x10, 0x03, "Logical Block Reference Tag Check Failed" }, |
215 | { 0x10, 0x04, "Logical Block Protection Error On Recover Buffered Data" }, |
216 | { 0x10, 0x05, "Logical Block Protection Method Error" }, |
217 | { 0x11, 0x00, "Unrecovered Read Error" }, |
218 | { 0x11, 0x01, "Read Retries Exhausted" }, |
219 | { 0x11, 0x02, "Error Too Long To Correct" }, |
220 | { 0x11, 0x03, "Multiple Read Errors" }, |
221 | { 0x11, 0x04, "Unrecovered Read Error - Auto Reallocate Failed" }, |
222 | { 0x11, 0x05, "L-EC Uncorrectable Error" }, |
223 | { 0x11, 0x06, "CIRC Unrecovered Error" }, |
224 | { 0x11, 0x07, "Data Re-synchronization Error" }, |
225 | { 0x11, 0x08, "Incomplete Block Read" }, |
226 | { 0x11, 0x09, "No Gap Found" }, |
227 | { 0x11, 0x0A, "Miscorrected Error" }, |
228 | { 0x11, 0x0B, "Unrecovered Read Error - Recommend Reassignment" }, |
229 | { 0x11, 0x0C, "Unrecovered Read Error - Recommend Rewrite The Data" }, |
230 | { 0x11, 0x0D, "De-Compression CRC Error" }, |
231 | { 0x11, 0x0E, "Cannot Decompress Using Declared Algorithm" }, |
232 | { 0x11, 0x0F, "Error Reading UPC/EAN Number" }, |
233 | { 0x11, 0x10, "Error Reading ISRC Number" }, |
234 | { 0x11, 0x11, "Read Error - Loss Of Streaming" }, |
235 | { 0x11, 0x12, "Auxiliary Memory Read Error" }, |
236 | { 0x11, 0x13, "Read Error - Failed Retransmission Request" }, |
237 | { 0x11, 0x14, "Read Error - Lba Marked Bad By Application Client" }, |
238 | { 0x11, 0x15, "Write After Sanitize Required" }, |
239 | { 0x12, 0x00, "Address Mark Not Found For ID Field" }, |
240 | { 0x13, 0x00, "Address Mark Not Found For DATA Field" }, |
241 | { 0x14, 0x00, "Recorded Entity Not Found" }, |
242 | { 0x14, 0x01, "Record Not Found" }, |
243 | { 0x14, 0x02, "Filemark or Setmark Not Found" }, |
244 | { 0x14, 0x03, "End-Of-Data Not Found" }, |
245 | { 0x14, 0x04, "Block Sequence Error" }, |
246 | { 0x14, 0x05, "Record Not Found - Recommend Reassignment" }, |
247 | { 0x14, 0x06, "Record Not Found - Data Auto-Reallocated" }, |
248 | { 0x14, 0x07, "Locate Operation Failure" }, |
249 | { 0x15, 0x00, "Random Positioning Error" }, |
250 | { 0x15, 0x01, "Mechanical Positioning Error" }, |
251 | { 0x15, 0x02, "Positioning Error Detected By Read of Medium" }, |
252 | { 0x16, 0x00, "Data Synchronization Mark Error" }, |
253 | { 0x16, 0x01, "Data Sync Error - Data Rewritten" }, |
254 | { 0x16, 0x02, "Data Sync Error - Recommend Rewrite" }, |
255 | { 0x16, 0x03, "Data Sync Error - Data Auto-Reallocated" }, |
256 | { 0x16, 0x04, "Data Sync Error - Recommend Reassignment" }, |
257 | { 0x17, 0x00, "Recovered Data With No Error Correction Applied" }, |
258 | { 0x17, 0x01, "Recovered Data With Retries" }, |
259 | { 0x17, 0x02, "Recovered Data With Positive Head Offset" }, |
260 | { 0x17, 0x03, "Recovered Data With Negative Head Offset" }, |
261 | { 0x17, 0x04, "Recovered Data With Retries and/or CIRC Applied" }, |
262 | { 0x17, 0x05, "Recovered Data Using Previous Sector ID" }, |
263 | { 0x17, 0x06, "Recovered Data Without ECC - Data Auto-Reallocated" }, |
264 | { 0x17, 0x07, "Recovered Data Without ECC - Recommend Reassignment" }, |
265 | { 0x17, 0x08, "Recovered Data Without ECC - Recommend Rewrite" }, |
266 | { 0x17, 0x09, "Recovered Data Without ECC - Data Rewritten" }, |
267 | { 0x18, 0x00, "Recovered Data With Error Correction Applied" }, |
268 | { 0x18, 0x01, "Recovered Data With Error Corr. & Retries Applied" }, |
269 | { 0x18, 0x02, "Recovered Data - Data Auto-Reallocated" }, |
270 | { 0x18, 0x03, "Recovered Data With CIRC" }, |
271 | { 0x18, 0x04, "Recovered Data With LEC" }, |
272 | { 0x18, 0x05, "Recovered Data - Recommend Reassignment" }, |
273 | { 0x18, 0x06, "Recovered Data - Recommend Rewrite" }, |
274 | { 0x18, 0x07, "Recovered Data With ECC - Data Rewritten" }, |
275 | { 0x18, 0x08, "Recovered Data With Linking" }, |
276 | { 0x19, 0x00, "Defect List Error" }, |
277 | { 0x19, 0x01, "Defect List Not Available" }, |
278 | { 0x19, 0x02, "Defect List Error In Primary List" }, |
279 | { 0x19, 0x03, "Defect List Error In Grown List" }, |
280 | { 0x1A, 0x00, "Parameter List Length Error" }, |
281 | { 0x1B, 0x00, "Synchronous Data Transfer Error" }, |
282 | { 0x1C, 0x00, "Defect List Not Found" }, |
283 | { 0x1C, 0x01, "Primary Defect List Not Found" }, |
284 | { 0x1C, 0x02, "Grown Defect List Not Found" }, |
285 | { 0x1D, 0x00, "Miscompare During Verify Operation" }, |
286 | { 0x1D, 0x01, "Miscompare Verify Of Unmapped Lba" }, |
287 | { 0x1E, 0x00, "Recovered ID With ECC Correction" }, |
288 | { 0x1F, 0x00, "Partial Defect List Transfer" }, |
289 | { 0x20, 0x00, "Invalid Command Operation Code" }, |
290 | { 0x20, 0x01, "Access Denied - Initiator Pending-Enrolled" }, |
291 | { 0x20, 0x02, "Access Denied - No Access Rights" }, |
292 | { 0x20, 0x03, "Access Denied - Invalid Mgmt ID Key" }, |
293 | { 0x20, 0x04, "Illegal Command While In Write Capable State" }, |
294 | { 0x20, 0x05, "Obsolete" }, |
295 | { 0x20, 0x06, "Illegal Command While In Explicit Address Mode" }, |
296 | { 0x20, 0x07, "Illegal Command While In Implicit Address Mode" }, |
297 | { 0x20, 0x08, "Access Denied - Enrollment Conflict" }, |
298 | { 0x20, 0x09, "Access Denied - Invalid LU Identifer" }, |
299 | { 0x20, 0x0A, "Access Denied - Invalid Proxy Token" }, |
300 | { 0x20, 0x0B, "Access Denied - ACL LUN Conflict" }, |
301 | { 0x20, 0x0C, "Illegal Command When Not In Append-Only Mode" }, |
302 | { 0x20, 0x0D, "Not An Administrative Logical Unit" }, |
303 | { 0x20, 0x0E, "Not A Subsidiary Logical Unit" }, |
304 | { 0x20, 0x0F, "Not A Conglomerate Logical Unit" }, |
305 | { 0x21, 0x00, "Logical Block Address Out Of Range" }, |
306 | { 0x21, 0x01, "Invalid Element Address" }, |
307 | { 0x21, 0x02, "Invalid Address For Write" }, |
308 | { 0x21, 0x03, "Invalid Write Crossing Layer Jump" }, |
309 | { 0x21, 0x04, "Unaligned Write Command" }, |
310 | { 0x21, 0x05, "Write Boundary Violation" }, |
311 | { 0x21, 0x06, "Attempt To Read Invalid Data" }, |
312 | { 0x21, 0x07, "Read Boundary Violation" }, |
313 | { 0x21, 0x08, "Misaligned Write Command" }, |
314 | { 0x22, 0x00, "Illegal Function (Use 20 00, 24 00, Or 26 00)" }, |
315 | { 0x23, 0x00, "Invalid Token Operation, Cause Not Reportable" }, |
316 | { 0x23, 0x01, "Invalid Token Operation, Unsupported Token Type" }, |
317 | { 0x23, 0x02, "Invalid Token Operation, Remote Token Usage Not Supported" }, |
318 | { 0x23, 0x03, "Invalid Token Operation, Remote Rod Token Creation Not Supported" }, |
319 | { 0x23, 0x04, "Invalid Token Operation, Token Unknown" }, |
320 | { 0x23, 0x05, "Invalid Token Operation, Token Corrupt" }, |
321 | { 0x23, 0x06, "Invalid Token Operation, Token Revoked" }, |
322 | { 0x23, 0x07, "Invalid Token Operation, Token Expired" }, |
323 | { 0x23, 0x08, "Invalid Token Operation, Token Cancelled" }, |
324 | { 0x23, 0x09, "Invalid Token Operation, Token Deleted" }, |
325 | { 0x23, 0x0A, "Invalid Token Operation, Invalid Token Length" }, |
326 | { 0x24, 0x00, "Invalid Field In CDB" }, |
327 | { 0x24, 0x01, "CDB Decryption Error" }, |
328 | { 0x24, 0x02, "Obsolete" }, |
329 | { 0x24, 0x03, "Obsolete" }, |
330 | { 0x24, 0x04, "Security Audit Value Frozen" }, |
331 | { 0x24, 0x05, "Security Working Key Frozen" }, |
332 | { 0x24, 0x06, "Nonce Not Unique" }, |
333 | { 0x24, 0x07, "Nonce Timestamp Out Of Range" }, |
334 | { 0x24, 0x08, "Invalid XCDB" }, |
335 | { 0x24, 0x09, "Invalid Fast Format" }, |
336 | { 0x25, 0x00, "Logical Unit Not Supported" }, |
337 | { 0x26, 0x00, "Invalid Field In Parameter List" }, |
338 | { 0x26, 0x01, "Parameter Not Supported" }, |
339 | { 0x26, 0x02, "Parameter Value Invalid" }, |
340 | { 0x26, 0x03, "Threshold Parameters Not Supported" }, |
341 | { 0x26, 0x04, "Invalid Release Of Persistent Reservation" }, |
342 | { 0x26, 0x05, "Data Decryption Error" }, |
343 | { 0x26, 0x06, "Too Many Target Descriptors" }, |
344 | { 0x26, 0x07, "Unsupported Target Descriptor Type Code" }, |
345 | { 0x26, 0x08, "Too Many Segment Descriptors" }, |
346 | { 0x26, 0x09, "Unsupported Segment Descriptor Type Code" }, |
347 | { 0x26, 0x0A, "Unexpected Inexact Segment" }, |
348 | { 0x26, 0x0B, "Inline Data Length Exceeded" }, |
349 | { 0x26, 0x0C, "Invalid Operation For Copy Source Or Destination" }, |
350 | { 0x26, 0x0D, "Copy Segment Granularity Violation" }, |
351 | { 0x26, 0x0E, "Invalid Parameter While Port Is Enabled" }, |
352 | { 0x26, 0x0F, "Invalid Data-Out Buffer Integrity Check Value" }, |
353 | { 0x26, 0x10, "Data Decryption Key Fail Limit Reached" }, |
354 | { 0x26, 0x11, "Incomplete Key-Associated Data Set" }, |
355 | { 0x26, 0x12, "Vendor Specific Key Reference Not Found" }, |
356 | { 0x26, 0x13, "Application Tag Mode Page Is Invalid" }, |
357 | { 0x26, 0x14, "Tape Stream Mirroring Prevented" }, |
358 | { 0x26, 0x15, "Copy Source Or Copy Destination Not Authorized" }, |
359 | { 0x27, 0x00, "Write Protected" }, |
360 | { 0x27, 0x01, "Hardware Write Protected" }, |
361 | { 0x27, 0x02, "Logical Unit Software Write Protected" }, |
362 | { 0x27, 0x03, "Associated Write Protect" }, |
363 | { 0x27, 0x04, "Persistent Write Protect" }, |
364 | { 0x27, 0x05, "Permanent Write Protect" }, |
365 | { 0x27, 0x06, "Conditional Write Protect" }, |
366 | { 0x27, 0x07, "Space Allocation Failed Write Protect" }, |
367 | { 0x27, 0x08, "Zone Is Read Only" }, |
368 | { 0x28, 0x00, "Not Ready To Ready Change, Medium May Have Changed" }, |
369 | { 0x28, 0x01, "Import Or Export Element Accessed" }, |
370 | { 0x28, 0x02, "Format-Layer May Have Changed" }, |
371 | { 0x28, 0x03, "Import/Export Element Accessed, Medium Changed" }, |
372 | { 0x29, 0x00, "Power On, Reset, Or Bus Device Reset Occurred" }, |
373 | { 0x29, 0x01, "Power On Occurred" }, |
374 | { 0x29, 0x02, "SCSI Bus Reset Occurred" }, |
375 | { 0x29, 0x03, "Bus Device Reset Function Occurred" }, |
376 | { 0x29, 0x04, "Device Internal Reset" }, |
377 | { 0x29, 0x05, "Transceiver Mode Changed To Single-Ended" }, |
378 | { 0x29, 0x06, "Transceiver Mode Changed To LVD" }, |
379 | { 0x29, 0x07, "I_T Nexus Loss Occurred" }, |
380 | { 0x2A, 0x00, "Parameters Changed" }, |
381 | { 0x2A, 0x01, "Mode Parameters Changed" }, |
382 | { 0x2A, 0x02, "Log Parameters Changed" }, |
383 | { 0x2A, 0x03, "Reservations Preempted" }, |
384 | { 0x2A, 0x04, "Reservations Released" }, |
385 | { 0x2A, 0x05, "Registrations Preempted" }, |
386 | { 0x2A, 0x06, "Asymmetric Access State Changed" }, |
387 | { 0x2A, 0x07, "Implicit Asymmetric Access State Transition Failed" }, |
388 | { 0x2A, 0x08, "Priority Changed" }, |
389 | { 0x2A, 0x09, "Capacity Data Has Changed" }, |
390 | { 0x2A, 0x0A, "Error History I_t Nexus Cleared" }, |
391 | { 0x2A, 0x0B, "Error History Snapshot Released" }, |
392 | { 0x2A, 0x0C, "Error Recovery Attributes Have Changed" }, |
393 | { 0x2A, 0x0D, "Data Encryption Capabilities Changed" }, |
394 | { 0x2A, 0x10, "Timestamp Changed" }, |
395 | { 0x2A, 0x11, "Data Encryption Parameters Changed By Another I_t Nexus" }, |
396 | { 0x2A, 0x12, "Data Encryption Parameters Changed By Vendor Specific Event" }, |
397 | { 0x2A, 0x13, "Data Encryption Key Instance Counter Has Changed" }, |
398 | { 0x2A, 0x14, "SA Creation Capabilities Data Has Changed" }, |
399 | { 0x2A, 0x15, "Medium Removal Prevention Preempted" }, |
400 | { 0x2A, 0x16, "Zone Reset Write Pointer Recommended" }, |
401 | { 0x2B, 0x00, "Copy Cannot Execute Since Host Cannot Disconnect" }, |
402 | { 0x2C, 0x00, "Command Sequence Error" }, |
403 | { 0x2C, 0x01, "Too Many Windows Specified" }, |
404 | { 0x2C, 0x02, "Invalid Combination Of Windows Specified" }, |
405 | { 0x2C, 0x03, "Current Program Area Is Not Empty" }, |
406 | { 0x2C, 0x04, "Current Program Area Is Empty" }, |
407 | { 0x2C, 0x05, "Illegal Power Condition Request" }, |
408 | { 0x2C, 0x06, "Persistent Prevent Conflict" }, |
409 | { 0x2C, 0x07, "Previous Busy Status" }, |
410 | { 0x2C, 0x08, "Previous Task Set Full Status" }, |
411 | { 0x2C, 0x09, "Previous Reservation Conflict Status" }, |
412 | { 0x2C, 0x0A, "Partition Or Collection Contains User Objects" }, |
413 | { 0x2C, 0x0B, "Not Reserved" }, |
414 | { 0x2C, 0x0C, "Orwrite Generation Does Not Match" }, |
415 | { 0x2C, 0x0D, "Reset Write Pointer Not Allowed" }, |
416 | { 0x2C, 0x0E, "Zone Is Offline" }, |
417 | { 0x2C, 0x0F, "Stream Not Open" }, |
418 | { 0x2C, 0x10, "Unwritten Data In Zone" }, |
419 | { 0x2C, 0x11, "Descriptor Format Sense Data Required" }, |
420 | { 0x2D, 0x00, "Overwrite Error On Update In Place" }, |
421 | { 0x2E, 0x00, "Insufficient Time For Operation" }, |
422 | { 0x2E, 0x01, "Command Timeout Before Processing" }, |
423 | { 0x2E, 0x02, "Command Timeout During Processing" }, |
424 | { 0x2E, 0x03, "Command Timeout During Processing Due To Error Recovery" }, |
425 | { 0x2F, 0x00, "Commands Cleared By Another Initiator" }, |
426 | { 0x2F, 0x01, "Commands Cleared By Power Loss Notification" }, |
427 | { 0x2F, 0x02, "Commands Cleared By Device Server" }, |
428 | { 0x2F, 0x03, "Some Commands Cleared By Queuing Layer Event" }, |
429 | { 0x30, 0x00, "Incompatible Medium Installed" }, |
430 | { 0x30, 0x01, "Cannot Read Medium - Unknown Format" }, |
431 | { 0x30, 0x02, "Cannot Read Medium - Incompatible Format" }, |
432 | { 0x30, 0x03, "Cleaning Cartridge Installed" }, |
433 | { 0x30, 0x04, "Cannot Write Medium - Unknown Format" }, |
434 | { 0x30, 0x05, "Cannot Write Medium - Incompatible Format" }, |
435 | { 0x30, 0x06, "Cannot Format Medium - Incompatible Medium" }, |
436 | { 0x30, 0x07, "Cleaning Failure" }, |
437 | { 0x30, 0x08, "Cannot Write - Application Code Mismatch" }, |
438 | { 0x30, 0x09, "Current Session Not Fixated For Append" }, |
439 | { 0x30, 0x0A, "Cleaning Request Rejected" }, |
440 | { 0x30, 0x0C, "Worm Medium - Overwrite Attempted" }, |
441 | { 0x30, 0x0D, "Worm Medium - Integrity Check" }, |
442 | { 0x30, 0x10, "Medium Not Formatted" }, |
443 | { 0x30, 0x11, "Incompatible Volume Type" }, |
444 | { 0x30, 0x12, "Incompatible Volume Qualifier" }, |
445 | { 0x30, 0x13, "Cleaning Volume Expired" }, |
446 | { 0x31, 0x00, "Medium Format Corrupted" }, |
447 | { 0x31, 0x01, "Format Command Failed" }, |
448 | { 0x31, 0x02, "Zoned Formatting Failed Due To Spare Linking" }, |
449 | { 0x31, 0x03, "Sanitize Command Failed" }, |
450 | { 0x32, 0x00, "No Defect Spare Location Available" }, |
451 | { 0x32, 0x01, "Defect List Update Failure" }, |
452 | { 0x33, 0x00, "Tape Length Error" }, |
453 | { 0x34, 0x00, "Enclosure Failure" }, |
454 | { 0x35, 0x00, "Enclosure Services Failure" }, |
455 | { 0x35, 0x01, "Unsupported Enclosure Function" }, |
456 | { 0x35, 0x02, "Enclosure Services Unavailable" }, |
457 | { 0x35, 0x03, "Enclosure Services Transfer Failure" }, |
458 | { 0x35, 0x04, "Enclosure Services Transfer Refused" }, |
459 | { 0x35, 0x05, "Enclosure Services Checksum Error" }, |
460 | { 0x36, 0x00, "Ribbon, Ink, Or Toner Failure" }, |
461 | { 0x37, 0x00, "Rounded Parameter" }, |
462 | { 0x38, 0x00, "Event Status Notification" }, |
463 | { 0x38, 0x02, "ESN - Power Management Class Event" }, |
464 | { 0x38, 0x04, "ESN - Media Class Event" }, |
465 | { 0x38, 0x06, "ESN - Device Busy Class Event" }, |
466 | { 0x38, 0x07, "Thin Provisioning Soft Threshold Reached" }, |
467 | { 0x39, 0x00, "Saving Parameters Not Supported" }, |
468 | { 0x3A, 0x00, "Medium Not Present" }, |
469 | { 0x3A, 0x01, "Medium Not Present - Tray Closed" }, |
470 | { 0x3A, 0x02, "Medium Not Present - Tray Open" }, |
471 | { 0x3A, 0x03, "Medium Not Present - Loadable" }, |
472 | { 0x3A, 0x04, "Medium Not Present - Medium Auxiliary Memory Accessible" }, |
473 | { 0x3B, 0x00, "Sequential Positioning Error" }, |
474 | { 0x3B, 0x01, "Tape Position Error At Beginning-Of-Medium" }, |
475 | { 0x3B, 0x02, "Tape Position Error At End-Of-Medium" }, |
476 | { 0x3B, 0x03, "Tape Or Electronic Vertical Forms Unit Not Ready" }, |
477 | { 0x3B, 0x04, "Slew Failure" }, |
478 | { 0x3B, 0x05, "Paper Jam" }, |
479 | { 0x3B, 0x06, "Failed To Sense Top-Of-Form" }, |
480 | { 0x3B, 0x07, "Failed To Sense Bottom-Of-Form" }, |
481 | { 0x3B, 0x08, "Reposition Error" }, |
482 | { 0x3B, 0x09, "Read Past End Of Medium" }, |
483 | { 0x3B, 0x0A, "Read Past Beginning Of Medium" }, |
484 | { 0x3B, 0x0B, "Position Past End Of Medium" }, |
485 | { 0x3B, 0x0C, "Position Past Beginning Of Medium" }, |
486 | { 0x3B, 0x0D, "Medium Destination Element Full" }, |
487 | { 0x3B, 0x0E, "Medium Source Element Empty" }, |
488 | { 0x3B, 0x0F, "End Of Medium Reached" }, |
489 | { 0x3B, 0x11, "Medium Magazine Not Accessible" }, |
490 | { 0x3B, 0x12, "Medium Magazine Removed" }, |
491 | { 0x3B, 0x13, "Medium Magazine Inserted" }, |
492 | { 0x3B, 0x14, "Medium Magazine Locked" }, |
493 | { 0x3B, 0x15, "Medium Magazine Unlocked" }, |
494 | { 0x3B, 0x16, "Mechanical Positioning Or Changer Error" }, |
495 | { 0x3B, 0x17, "Read Past End Of User Object" }, |
496 | { 0x3B, 0x18, "Element Disabled" }, |
497 | { 0x3B, 0x19, "Element Enabled" }, |
498 | { 0x3B, 0x1A, "Data Transfer Device Removed" }, |
499 | { 0x3B, 0x1B, "Data Transfer Device Inserted" }, |
500 | { 0x3B, 0x1C, "Too Many Logical Objects On Partition To Support Operation" }, |
501 | { 0x3D, 0x00, "Invalid Bits In IDENTIFY Message" }, |
502 | { 0x3E, 0x00, "Logical Unit Has Not Self-Configured Yet" }, |
503 | { 0x3E, 0x01, "Logical Unit Failure" }, |
504 | { 0x3E, 0x02, "Timeout On Logical Unit" }, |
505 | { 0x3E, 0x03, "Logical Unit Failed Self-Test" }, |
506 | { 0x3E, 0x04, "Logical Unit Unable To Update Self-Test Log" }, |
507 | { 0x3F, 0x00, "Target Operating Conditions Have Changed" }, |
508 | { 0x3F, 0x01, "Microcode Has Been Changed" }, |
509 | { 0x3F, 0x02, "Changed Operating Definition" }, |
510 | { 0x3F, 0x03, "INQUIRY Data Has Changed" }, |
511 | { 0x3F, 0x04, "Component Device Attached" }, |
512 | { 0x3F, 0x05, "Device Identifier Changed" }, |
513 | { 0x3F, 0x06, "Redundancy Group Created Or Modified" }, |
514 | { 0x3F, 0x07, "Redundancy Group Deleted" }, |
515 | { 0x3F, 0x08, "Spare Created Or Modified" }, |
516 | { 0x3F, 0x09, "Spare Deleted" }, |
517 | { 0x3F, 0x0A, "Volume Set Created Or Modified" }, |
518 | { 0x3F, 0x0B, "Volume Set Deleted" }, |
519 | { 0x3F, 0x0C, "Volume Set Deassigned" }, |
520 | { 0x3F, 0x0D, "Volume Set Reassigned" }, |
521 | { 0x3F, 0x0E, "Reported LUNs Data Has Changed" }, |
522 | { 0x3F, 0x0F, "Echo Buffer Overwritten" }, |
523 | { 0x3F, 0x10, "Medium Loadable" }, |
524 | { 0x3F, 0x11, "Medium Auxiliary Memory Accessible" }, |
525 | { 0x3F, 0x12, "Iscsi Ip Address Added" }, |
526 | { 0x3F, 0x13, "Iscsi Ip Address Removed" }, |
527 | { 0x3F, 0x14, "Iscsi Ip Address Changed" }, |
528 | { 0x3F, 0x15, "Inspect Referrals Sense Descriptors" }, |
529 | { 0x3F, 0x16, "Microcode Has Been Changed Without Reset" }, |
530 | { 0x3F, 0x17, "Zone Transition To Full" }, |
531 | { 0x3F, 0x18, "Bind Completed" }, |
532 | { 0x3F, 0x19, "Bind Redirected" }, |
533 | { 0x3F, 0x1A, "Subsidiary Binding Changed" }, |
534 | { 0x40, 0x00, "Ram Failure (Should Use 40 NN)" }, |
535 | { 0x40, 0x00, "Diagnostic Failure On Component NN (80h-FFh)" }, |
536 | { 0x41, 0x00, "Data Path Failure (Should Use 40 NN)" }, |
537 | { 0x42, 0x00, "Power-On Or Self-Test Failure (Should Use 40 NN)" }, |
538 | { 0x43, 0x00, "Message Error" }, |
539 | { 0x44, 0x00, "Internal Target Failure" }, |
540 | { 0x44, 0x01, "Persistent Reservation Information Lost" }, |
541 | { 0x44, 0x71, "Ata Device Failed Set Features" }, |
542 | { 0x45, 0x00, "Select Or Reselect Failure" }, |
543 | { 0x46, 0x00, "Unsuccessful Soft Reset" }, |
544 | { 0x47, 0x00, "SCSI Parity Error" }, |
545 | { 0x47, 0x01, "Data Phase CRC Error Detected" }, |
546 | { 0x47, 0x02, "SCSI Parity Error Detected During ST Data Phase" }, |
547 | { 0x47, 0x03, "Information Unit iuCRC Error Detected" }, |
548 | { 0x47, 0x04, "Asynchronous Information Protection Error Detected" }, |
549 | { 0x47, 0x05, "Protocol Service Crc Error" }, |
550 | { 0x47, 0x06, "PHY Test Function In Progress" }, |
551 | { 0x47, 0x7F, "Some Commands Cleared By Iscsi Protocol Event" }, |
552 | { 0x48, 0x00, "Initiator Detected Error Message Received" }, |
553 | { 0x49, 0x00, "Invalid Message Error" }, |
554 | { 0x4A, 0x00, "Command Phase Error" }, |
555 | { 0x4B, 0x00, "Data Phase Error" }, |
556 | { 0x4B, 0x01, "Illegal Target Port Transfer Tag Received" }, |
557 | { 0x4B, 0x02, "Too Much Write Data" }, |
558 | { 0x4B, 0x03, "ACK/NAK Timeout" }, |
559 | { 0x4B, 0x04, "NAK Reveived" }, |
560 | { 0x4B, 0x05, "Data Offset Error" }, |
561 | { 0x4B, 0x06, "Initiator Response Timeout" }, |
562 | { 0x4B, 0x07, "Connection Lost" }, |
563 | { 0x4B, 0x08, "Data-In Buffer Overflow - Data Buffer Size" }, |
564 | { 0x4B, 0x09, "Data-In Buffer Overflow - Data Buffer Descriptor Area" }, |
565 | { 0x4B, 0x0A, "Data-In Buffer Error" }, |
566 | { 0x4B, 0x0B, "Data-Out Buffer Overflow - Data Buffer Size" }, |
567 | { 0x4B, 0x0C, "Data-Out Buffer Overflow - Data Buffer Descriptor Area" }, |
568 | { 0x4B, 0x0D, "Data-Out Buffer Error" }, |
569 | { 0x4B, 0x0E, "PCIe Fabric Error" }, |
570 | { 0x4B, 0x0F, "PCIe Completion Timeout" }, |
571 | { 0x4B, 0x10, "PCIe Completer Abort" }, |
572 | { 0x4B, 0x11, "PCIe Poisoned Tlp Received" }, |
573 | { 0x4B, 0x12, "PCIe Ecrc Check Failed" }, |
574 | { 0x4B, 0x13, "PCIe Unsupported Request" }, |
575 | { 0x4B, 0x14, "PCIe ACS Violation" }, |
576 | { 0x4B, 0x15, "PCIe TLP Prefix Blocked" }, |
577 | { 0x4C, 0x00, "Logical Unit Failed Self-Configuration" }, |
578 | { 0x4D, 0x00, "Tagged Overlapped Commands (NN = Task Tag)" }, |
579 | { 0x4E, 0x00, "Overlapped Commands Attempted" }, |
580 | { 0x50, 0x00, "Write Append Error" }, |
581 | { 0x50, 0x01, "Write Append Position Error" }, |
582 | { 0x50, 0x02, "Position Error Related To Timing" }, |
583 | { 0x51, 0x00, "Erase Failure" }, |
584 | { 0x51, 0x01, "Erase Failure - Incomplete Erase Operation Detected" }, |
585 | { 0x52, 0x00, "Cartridge Fault" }, |
586 | { 0x53, 0x00, "Media Load or Eject Failed" }, |
587 | { 0x53, 0x01, "Unload Tape Failure" }, |
588 | { 0x53, 0x02, "Medium Removal Prevented" }, |
589 | { 0x53, 0x03, "Medium Removal Prevented By Data Transfer Element" }, |
590 | { 0x53, 0x04, "Medium Thread Or Unthread Failure" }, |
591 | { 0x53, 0x05, "Volume Identifier Invalid" }, |
592 | { 0x53, 0x06, "Volume Identifier Missing" }, |
593 | { 0x53, 0x07, "Duplicate Volume Identifier" }, |
594 | { 0x53, 0x08, "Element Status Unknown" }, |
595 | { 0x53, 0x09, "Data Transfer Device Error - Load Failed" }, |
596 | { 0x53, 0x0A, "Data Transfer Device Error - Unload Failed" }, |
597 | { 0x53, 0x0B, "Data Transfer Device Error - Unload Missing" }, |
598 | { 0x53, 0x0C, "Data Transfer Device Error - Eject Failed" }, |
599 | { 0x53, 0x0D, "Data Transfer Device Error - Library Communication Failed" }, |
600 | { 0x54, 0x00, "SCSI To Host System Interface Failure" }, |
601 | { 0x55, 0x00, "System Resource Failure" }, |
602 | { 0x55, 0x01, "System Buffer Full" }, |
603 | { 0x55, 0x02, "Insufficient Reservation Resources" }, |
604 | { 0x55, 0x03, "Insufficient Resources" }, |
605 | { 0x55, 0x04, "Insufficient Registration Resources" }, |
606 | { 0x55, 0x05, "Insufficient Access Control Resources" }, |
607 | { 0x55, 0x06, "Auxiliary Memory Out Of Space" }, |
608 | { 0x55, 0x07, "Quota Error" }, |
609 | { 0x55, 0x08, "Maximum Number Of Supplemental Decryption Keys Exceeded" }, |
610 | { 0x55, 0x09, "Medium Auxiliary Memory Not Accessible" }, |
611 | { 0x55, 0x0A, "Data Currently Unavailable" }, |
612 | { 0x55, 0x0B, "Insufficient Power For Operation" }, |
613 | { 0x55, 0x0C, "Insufficient Resources To Create Rod" }, |
614 | { 0x55, 0x0D, "Insufficient Resources To Create Rod Token" }, |
615 | { 0x55, 0x0E, "Insufficient Zone Resources" }, |
616 | { 0x55, 0x0F, "Insufficient Zone Resources To Complete Write" }, |
617 | { 0x55, 0x10, "Maximum Number Of Streams Open" }, |
618 | { 0x55, 0x11, "Insufficient Resources To Bind" }, |
619 | { 0x57, 0x00, "Unable To Recover Table-Of-Contents" }, |
620 | { 0x58, 0x00, "Generation Does Not Exist" }, |
621 | { 0x59, 0x00, "Updated Block Read" }, |
622 | { 0x5A, 0x00, "Operator Request Or State Change Input" }, |
623 | { 0x5A, 0x01, "Operator Medium Removal Request" }, |
624 | { 0x5A, 0x02, "Operator Selected Write Protect" }, |
625 | { 0x5A, 0x03, "Operator Selected Write Permit" }, |
626 | { 0x5B, 0x00, "Log Exception" }, |
627 | { 0x5B, 0x01, "Threshold Condition Met" }, |
628 | { 0x5B, 0x02, "Log Counter At Maximum" }, |
629 | { 0x5B, 0x03, "Log List Codes Exhausted" }, |
630 | { 0x5C, 0x00, "RPL Status Change" }, |
631 | { 0x5C, 0x01, "Spindles Synchronized" }, |
632 | { 0x5C, 0x02, "Spindles Not Synchronized" }, |
633 | { 0x5D, 0x00, "Failure Prediction Threshold Exceeded" }, |
634 | { 0x5D, 0x01, "Media Failure Prediction Threshold Exceeded" }, |
635 | { 0x5D, 0x02, "Logical Unit Failure Prediction Threshold Exceeded" }, |
636 | { 0x5D, 0x03, "Spare Area Exhaustion Prediction Threshold Exceeded" }, |
637 | { 0x5D, 0x10, "Hardware Impending Failure General Hard Drive Failure" }, |
638 | { 0x5D, 0x11, "Hardware Impending Failure Drive Error Rate Too High" }, |
639 | { 0x5D, 0x12, "Hardware Impending Failure Data Error Rate Too High" }, |
640 | { 0x5D, 0x13, "Hardware Impending Failure Seek Error Rate Too High" }, |
641 | { 0x5D, 0x14, "Hardware Impending Failure Too Many Block Reassigns" }, |
642 | { 0x5D, 0x15, "Hardware Impending Failure Access Times Too High" }, |
643 | { 0x5D, 0x16, "Hardware Impending Failure Start Unit Times Too High" }, |
644 | { 0x5D, 0x17, "Hardware Impending Failure Channel Parametrics" }, |
645 | { 0x5D, 0x18, "Hardware Impending Failure Controller Detected" }, |
646 | { 0x5D, 0x19, "Hardware Impending Failure Throughput Performance" }, |
647 | { 0x5D, 0x1A, "Hardware Impending Failure Seek Time Performance" }, |
648 | { 0x5D, 0x1B, "Hardware Impending Failure Spin-Up Retry Count" }, |
649 | { 0x5D, 0x1C, "Hardware Impending Failure Drive Calibration Retry Count" }, |
650 | { 0x5D, 0x20, "Controller Impending Failure General Hard Drive Failure" }, |
651 | { 0x5D, 0x21, "Controller Impending Failure Drive Error Rate Too High" }, |
652 | { 0x5D, 0x22, "Controller Impending Failure Data Error Rate Too High" }, |
653 | { 0x5D, 0x23, "Controller Impending Failure Seek Error Rate Too High" }, |
654 | { 0x5D, 0x24, "Controller Impending Failure Too Many Block Reassigns" }, |
655 | { 0x5D, 0x25, "Controller Impending Failure Access Times Too High" }, |
656 | { 0x5D, 0x26, "Controller Impending Failure Start Unit Times Too High" }, |
657 | { 0x5D, 0x27, "Controller Impending Failure Channel Parametrics" }, |
658 | { 0x5D, 0x28, "Controller Impending Failure Controller Detected" }, |
659 | { 0x5D, 0x29, "Controller Impending Failure Throughput Performance" }, |
660 | { 0x5D, 0x2A, "Controller Impending Failure Seek Time Performance" }, |
661 | { 0x5D, 0x2B, "Controller Impending Failure Spin-Up Retry Count" }, |
662 | { 0x5D, 0x2C, "Controller Impending Failure Drive Calibration Retry Count" }, |
663 | { 0x5D, 0x30, "Data Channel Impending Failure General Hard Drive Failure" }, |
664 | { 0x5D, 0x31, "Data Channel Impending Failure Drive Error Rate Too High" }, |
665 | { 0x5D, 0x32, "Data Channel Impending Failure Data Error Rate Too High" }, |
666 | { 0x5D, 0x33, "Data Channel Impending Failure Seek Error Rate Too High" }, |
667 | { 0x5D, 0x34, "Data Channel Impending Failure Too Many Block Reassigns" }, |
668 | { 0x5D, 0x35, "Data Channel Impending Failure Access Times Too High" }, |
669 | { 0x5D, 0x36, "Data Channel Impending Failure Start Unit Times Too High" }, |
670 | { 0x5D, 0x37, "Data Channel Impending Failure Channel Parametrics" }, |
671 | { 0x5D, 0x38, "Data Channel Impending Failure Controller Detected" }, |
672 | { 0x5D, 0x39, "Data Channel Impending Failure Throughput Performance" }, |
673 | { 0x5D, 0x3A, "Data Channel Impending Failure Seek Time Performance" }, |
674 | { 0x5D, 0x3B, "Data Channel Impending Failure Spin-Up Retry Count" }, |
675 | { 0x5D, 0x3C, "Data Channel Impending Failure Drive Calibration Retry Count" }, |
676 | { 0x5D, 0x40, "Servo Impending Failure General Hard Drive Failure" }, |
677 | { 0x5D, 0x41, "Servo Impending Failure Drive Error Rate Too High" }, |
678 | { 0x5D, 0x42, "Servo Impending Failure Data Error Rate Too High" }, |
679 | { 0x5D, 0x43, "Servo Impending Failure Seek Error Rate Too High" }, |
680 | { 0x5D, 0x44, "Servo Impending Failure Too Many Block Reassigns" }, |
681 | { 0x5D, 0x45, "Servo Impending Failure Access Times Too High" }, |
682 | { 0x5D, 0x46, "Servo Impending Failure Start Unit Times Too High" }, |
683 | { 0x5D, 0x47, "Servo Impending Failure Channel Parametrics" }, |
684 | { 0x5D, 0x48, "Servo Impending Failure Controller Detected" }, |
685 | { 0x5D, 0x49, "Servo Impending Failure Throughput Performance" }, |
686 | { 0x5D, 0x4A, "Servo Impending Failure Seek Time Performance" }, |
687 | { 0x5D, 0x4B, "Servo Impending Failure Spin-Up Retry Count" }, |
688 | { 0x5D, 0x4C, "Servo Impending Failure Drive Calibration Retry Count" }, |
689 | { 0x5D, 0x50, "Spindle Impending Failure General Hard Drive Failure" }, |
690 | { 0x5D, 0x51, "Spindle Impending Failure Drive Error Rate Too High" }, |
691 | { 0x5D, 0x52, "Spindle Impending Failure Data Error Rate Too High" }, |
692 | { 0x5D, 0x53, "Spindle Impending Failure Seek Error Rate Too High" }, |
693 | { 0x5D, 0x54, "Spindle Impending Failure Too Many Block Reassigns" }, |
694 | { 0x5D, 0x55, "Spindle Impending Failure Access Times Too High" }, |
695 | { 0x5D, 0x56, "Spindle Impending Failure Start Unit Times Too High" }, |
696 | { 0x5D, 0x57, "Spindle Impending Failure Channel Parametrics" }, |
697 | { 0x5D, 0x58, "Spindle Impending Failure Controller Detected" }, |
698 | { 0x5D, 0x59, "Spindle Impending Failure Throughput Performance" }, |
699 | { 0x5D, 0x5A, "Spindle Impending Failure Seek Time Performance" }, |
700 | { 0x5D, 0x5B, "Spindle Impending Failure Spin-Up Retry Count" }, |
701 | { 0x5D, 0x5C, "Spindle Impending Failure Drive Calibration Retry Count" }, |
702 | { 0x5D, 0x60, "Firmware Impending Failure General Hard Drive Failure" }, |
703 | { 0x5D, 0x61, "Firmware Impending Failure Drive Error Rate Too High" }, |
704 | { 0x5D, 0x62, "Firmware Impending Failure Data Error Rate Too High" }, |
705 | { 0x5D, 0x63, "Firmware Impending Failure Seek Error Rate Too High" }, |
706 | { 0x5D, 0x64, "Firmware Impending Failure Too Many Block Reassigns" }, |
707 | { 0x5D, 0x65, "Firmware Impending Failure Access Times Too High" }, |
708 | { 0x5D, 0x66, "Firmware Impending Failure Start Unit Times Too High" }, |
709 | { 0x5D, 0x67, "Firmware Impending Failure Channel Parametrics" }, |
710 | { 0x5D, 0x68, "Firmware Impending Failure Controller Detected" }, |
711 | { 0x5D, 0x69, "Firmware Impending Failure Throughput Performance" }, |
712 | { 0x5D, 0x6A, "Firmware Impending Failure Seek Time Performance" }, |
713 | { 0x5D, 0x6B, "Firmware Impending Failure Spin-Up Retry Count" }, |
714 | { 0x5D, 0x6C, "Firmware Impending Failure Drive Calibration Retry Count" }, |
715 | { 0x5D, 0xFF, "Failure Prediction Threshold Exceeded (False)" }, |
716 | { 0x5E, 0x00, "Low Power Condition On" }, |
717 | { 0x5E, 0x01, "Idle Condition Activated By Timer" }, |
718 | { 0x5E, 0x02, "Standby Condition Activated By Timer" }, |
719 | { 0x5E, 0x03, "Idle Condition Activated By Command" }, |
720 | { 0x5E, 0x04, "Standby Condition Activated By Command" }, |
721 | { 0x5E, 0x05, "IDLE_B Condition Activated By Timer" }, |
722 | { 0x5E, 0x06, "IDLE_B Condition Activated By Command" }, |
723 | { 0x5E, 0x07, "IDLE_C Condition Activated By Timer" }, |
724 | { 0x5E, 0x08, "IDLE_C Condition Activated By Command" }, |
725 | { 0x5E, 0x09, "STANDBY_Y Condition Activated By Timer" }, |
726 | { 0x5E, 0x0A, "STANDBY_Y Condition Activated By Command" }, |
727 | { 0x5E, 0x41, "Power State Change To Active" }, |
728 | { 0x5E, 0x42, "Power State Change To Idle" }, |
729 | { 0x5E, 0x43, "Power State Change To Standby" }, |
730 | { 0x5E, 0x45, "Power State Change To Sleep" }, |
731 | { 0x5E, 0x47, "Power State Change To Device Control" }, |
732 | { 0x60, 0x00, "Lamp Failure" }, |
733 | { 0x61, 0x00, "Video Acquisition Error" }, |
734 | { 0x61, 0x01, "Unable To Acquire Video" }, |
735 | { 0x61, 0x02, "Out Of Focus" }, |
736 | { 0x62, 0x00, "Scan Head Positioning Error" }, |
737 | { 0x63, 0x00, "End Of User Area Encountered On This Track" }, |
738 | { 0x63, 0x01, "Packet Does Not Fit In Available Space" }, |
739 | { 0x64, 0x00, "Illegal Mode For This Track" }, |
740 | { 0x64, 0x01, "Invalid Packet Size" }, |
741 | { 0x65, 0x00, "Voltage Fault" }, |
742 | { 0x66, 0x00, "Automatic Document Feeder Cover Up" }, |
743 | { 0x66, 0x01, "Automatic Document Feeder Lift Up" }, |
744 | { 0x66, 0x02, "Document Jam In Automatic Document Feeder" }, |
745 | { 0x66, 0x03, "Document Miss Feed Automatic In Document Feeder" }, |
746 | { 0x67, 0x00, "Configuration Failure" }, |
747 | { 0x67, 0x01, "Configuration Of Incapable Logical Units Failed" }, |
748 | { 0x67, 0x02, "Add Logical Unit Failed" }, |
749 | { 0x67, 0x03, "Modification Of Logical Unit Failed" }, |
750 | { 0x67, 0x04, "Exchange Of Logical Unit Failed" }, |
751 | { 0x67, 0x05, "Remove Of Logical Unit Failed" }, |
752 | { 0x67, 0x06, "Attachment Of Logical Unit Failed" }, |
753 | { 0x67, 0x07, "Creation of Logical Unit Failed" }, |
754 | { 0x67, 0x08, "Assign Failure Occurred" }, |
755 | { 0x67, 0x09, "Multiply Assigned Logical Unit" }, |
756 | { 0x67, 0x0A, "Set Target Port Groups Command Failed" }, |
757 | { 0x67, 0x0B, "ATA Device Feature Not Enabled" }, |
758 | { 0x67, 0x0C, "Command Rejected" }, |
759 | { 0x67, 0x0D, "Explicit Bind Not Allowed" }, |
760 | { 0x68, 0x00, "Logical Unit Not Configured" }, |
761 | { 0x68, 0x01, "Subsidiary Logical Unit Not Configured" }, |
762 | { 0x69, 0x00, "Data Loss On Logical Unit" }, |
763 | { 0x69, 0x01, "Multiple Logical Unit Failures" }, |
764 | { 0x69, 0x02, "Parity/Data Mismatch" }, |
765 | { 0x6A, 0x00, "Informational, Refer To Log" }, |
766 | { 0x6B, 0x00, "State Change Has Occurred" }, |
767 | { 0x6B, 0x01, "Redundancy Level Got Better" }, |
768 | { 0x6B, 0x02, "Redundancy Level Got Worse" }, |
769 | { 0x6C, 0x00, "Rebuild Failure Occurred" }, |
770 | { 0x6D, 0x00, "Recalculate Failure Occurred" }, |
771 | { 0x6E, 0x00, "Command To Logical Unit Failed" }, |
772 | { 0x6F, 0x00, "Copy Protection Key Exchange Failure - Authentication Failure" }, |
773 | { 0x6F, 0x01, "Copy Protection Key Exchange Failure - Key Not Present" }, |
774 | { 0x6F, 0x02, "Copy Protection Key Exchange Failure - Key Not Established" }, |
775 | { 0x6F, 0x03, "Read Of Scrambled Sector Without Authentication" }, |
776 | { 0x6F, 0x04, "Media Region Code Is Mismatched To Logical Unit Region" }, |
777 | { 0x6F, 0x05, "Drive Region Must Be Permanent/Region Reset Count Error" }, |
778 | { 0x6F, 0x06, "Insufficient Block Count For Binding Nonce Recording" }, |
779 | { 0x6F, 0x07, "Conflict In Binding Nonce Recording" }, |
780 | { 0x6F, 0x08, "Insufficient Permission" }, |
781 | { 0x6F, 0x09, "Invalid Drive-Host Pairing Server" }, |
782 | { 0x6F, 0x0A, "Drive-Host Pairing Suspended" }, |
783 | { 0x70, 0x00, "Decompression Exception Short Algorithm Id Of NN" }, |
784 | { 0x71, 0x00, "Decompression Exception Long Algorithm Id" }, |
785 | { 0x72, 0x00, "Session Fixation Error" }, |
786 | { 0x72, 0x01, "Session Fixation Error Writing Lead-In" }, |
787 | { 0x72, 0x02, "Session Fixation Error Writing Lead-Out" }, |
788 | { 0x72, 0x03, "Session Fixation Error - Incomplete Track In Session" }, |
789 | { 0x72, 0x04, "Empty Or Partially Written Reserved Track" }, |
790 | { 0x72, 0x05, "No More Track Reservations Allowed" }, |
791 | { 0x72, 0x06, "RMZ Extension Is Not Allowed" }, |
792 | { 0x72, 0x07, "No More Test Zone Extensions Are Allowed" }, |
793 | { 0x73, 0x00, "CD Control Error" }, |
794 | { 0x73, 0x01, "Power Calibration Area Almost Full" }, |
795 | { 0x73, 0x02, "Power Calibration Area Is Full" }, |
796 | { 0x73, 0x03, "Power Calibration Area Error" }, |
797 | { 0x73, 0x04, "Program Memory Area Update Failure" }, |
798 | { 0x73, 0x05, "Program Memory Area Is Full" }, |
799 | { 0x73, 0x06, "RMA/PMA Is Almost Full" }, |
800 | { 0x73, 0x10, "Current Power Calibration Area Almost Full" }, |
801 | { 0x73, 0x11, "Current Power Calibration Area Is Full" }, |
802 | { 0x73, 0x17, "RDZ Is Full" }, |
803 | { 0x74, 0x00, "Security Error" }, |
804 | { 0x74, 0x01, "Unable To Decrypt Data" }, |
805 | { 0x74, 0x02, "Unencrypted Data Encountered While Decrypting" }, |
806 | { 0x74, 0x03, "Incorrect Data Encryption Key" }, |
807 | { 0x74, 0x04, "Cryptographic Integrity Validation Failed" }, |
808 | { 0x74, 0x05, "Error Decrypting Data" }, |
809 | { 0x74, 0x06, "Unknown Signature Verification Key" }, |
810 | { 0x74, 0x07, "Encryption Parameters Not Useable" }, |
811 | { 0x74, 0x08, "Digital Signature Validation Failure" }, |
812 | { 0x74, 0x09, "Encryption Mode Mismatch On Read" }, |
813 | { 0x74, 0x0A, "Encrypted Block Not Raw Read Enabled" }, |
814 | { 0x74, 0x0B, "Incorrect Encryption Parameters" }, |
815 | { 0x74, 0x0C, "Unable To Decrypt Parameter List" }, |
816 | { 0x74, 0x0D, "Encryption Algorithm Disabled" }, |
817 | { 0x74, 0x10, "SA Creation Parameter Value Invalid" }, |
818 | { 0x74, 0x11, "SA Creation Parameter Value Rejected" }, |
819 | { 0x74, 0x12, "Invalid Sa Usage" }, |
820 | { 0x74, 0x21, "Data Encryption Configuration Prevented" }, |
821 | { 0x74, 0x30, "SA Creation Parameter Not Supported" }, |
822 | { 0x74, 0x40, "Authentication Failed" }, |
823 | { 0x74, 0x61, "External Data Encryption Key Manager Access Error" }, |
824 | { 0x74, 0x62, "External Data Encryption Key Manager Error" }, |
825 | { 0x74, 0x63, "External Data Encryption Key Not Found" }, |
826 | { 0x74, 0x64, "External Data Encryption Request Not Authorized" }, |
827 | { 0x74, 0x6E, "External Data Encryption Control Timeout" }, |
828 | { 0x74, 0x6F, "External Data Encryption Control Error" }, |
829 | { 0x74, 0x71, "Logical Unit Access Not Authorized" }, |
830 | { 0x74, 0x79, "Security Conflict In Translated Device" }, |
831 | { 0x00, 0x00, NULL } |
832 | }; |
833 | |
834 | #ifdef _KERNEL |
835 | MODULE(MODULE_CLASS_MISC, scsiverbose, NULL); |
836 | |
837 | static int |
838 | scsiverbose_modcmd(modcmd_t cmd, void *arg) |
839 | { |
840 | static int (*saved_print_sense)(struct scsipi_xfer *, int); |
841 | static void (*saved_print_sense_data)(struct scsi_sense_data *, int); |
842 | |
843 | switch (cmd) { |
844 | case MODULE_CMD_INIT: |
845 | saved_print_sense = scsipi_print_sense; |
846 | saved_print_sense_data = scsipi_print_sense_data; |
847 | scsipi_print_sense = scsipi_print_sense_real; |
848 | scsipi_print_sense_data = scsipi_print_sense_data_real; |
849 | scsi_verbose_loaded = 1; |
850 | return 0; |
851 | case MODULE_CMD_FINI: |
852 | scsipi_print_sense = saved_print_sense; |
853 | scsipi_print_sense_data = saved_print_sense_data; |
854 | scsi_verbose_loaded = 0; |
855 | return 0; |
856 | default: |
857 | return ENOTTY; |
858 | } |
859 | } |
860 | #else |
861 | int (*scsipi_print_sense)(struct scsipi_xfer *, int) = |
862 | scsipi_print_sense_real; |
863 | void (*scsipi_print_sense_data)(struct scsi_sense_data *, int) = |
864 | scsipi_print_sense_data_real; |
865 | #endif |
866 | |
867 | static void |
868 | asc2ascii(u_char asc, u_char ascq, char *result, size_t l) |
869 | { |
870 | int i = 0; |
871 | |
872 | while (adesc[i].description != NULL) { |
873 | if (adesc[i].asc == asc && adesc[i].ascq == ascq) |
874 | break; |
875 | i++; |
876 | } |
877 | if (adesc[i].description == NULL) { |
878 | if (asc == 0x40 && ascq != 0) |
879 | (void)snprintf(result, l, |
880 | "Diagnostic Failure on Component 0x%02x" , |
881 | ascq & 0xff); |
882 | else |
883 | (void)snprintf(result, l, "ASC 0x%02x ASCQ 0x%02x" , |
884 | asc & 0xff, ascq & 0xff); |
885 | } else |
886 | (void)strlcpy(result, adesc[i].description, l); |
887 | } |
888 | |
889 | void |
890 | scsipi_print_sense_data_real(struct scsi_sense_data *sense, int verbosity) |
891 | { |
892 | int32_t info; |
893 | int i, j, k; |
894 | char *sbs, *s = (char *) sense; |
895 | |
896 | /* |
897 | * Basics- print out SENSE KEY |
898 | */ |
899 | printf(" SENSE KEY: %s" , scsipi_decode_sense(s, 0)); |
900 | |
901 | /* |
902 | * Print out, unqualified but aligned, FMK, EOM and ILI status. |
903 | */ |
904 | if (s[2] & 0xe0) { |
905 | char pad; |
906 | printf("\n " ); |
907 | pad = ' '; |
908 | if (s[2] & SSD_FILEMARK) { |
909 | printf("%c Filemark Detected" , pad); |
910 | pad = ','; |
911 | } |
912 | if (s[2] & SSD_EOM) { |
913 | printf("%c EOM Detected" , pad); |
914 | pad = ','; |
915 | } |
916 | if (s[2] & SSD_ILI) |
917 | printf("%c Incorrect Length Indicator Set" , pad); |
918 | } |
919 | |
920 | /* |
921 | * Now we should figure out, based upon device type, how |
922 | * to format the information field. Unfortunately, that's |
923 | * not convenient here, so we'll print it as a signed |
924 | * 32 bit integer. |
925 | */ |
926 | info = _4btol(&s[3]); |
927 | if (info) |
928 | printf("\n INFO FIELD: %d" , info); |
929 | |
930 | /* |
931 | * Now we check additional length to see whether there is |
932 | * more information to extract. |
933 | */ |
934 | |
935 | /* enough for command specific information? */ |
936 | if (((unsigned int) s[7]) < 4) { |
937 | printf("\n" ); |
938 | return; |
939 | } |
940 | info = _4btol(&s[8]); |
941 | if (info) |
942 | printf("\n COMMAND INFO: %d (0x%x)" , info, info); |
943 | |
944 | /* |
945 | * Decode ASC && ASCQ info, plus FRU, plus the rest... |
946 | */ |
947 | |
948 | sbs = scsipi_decode_sense(s, 1); |
949 | if (sbs) |
950 | printf("\n ASC/ASCQ: %s" , sbs); |
951 | if (s[14] != 0) |
952 | printf("\n FRU CODE: 0x%x" , s[14] & 0xff); |
953 | sbs = scsipi_decode_sense(s, 3); |
954 | if (sbs) |
955 | printf("\n SKSV: %s" , sbs); |
956 | printf("\n" ); |
957 | if (verbosity == 0) { |
958 | printf("\n" ); |
959 | return; |
960 | } |
961 | |
962 | /* |
963 | * Now figure whether we should print any additional informtion. |
964 | * |
965 | * Where should we start from? If we had SKSV data, |
966 | * start from offset 18, else from offset 15. |
967 | * |
968 | * From that point until the end of the buffer, check for any |
969 | * nonzero data. If we have some, go back and print the lot, |
970 | * otherwise we're done. |
971 | */ |
972 | if (sbs) |
973 | i = 18; |
974 | else |
975 | i = 15; |
976 | for (j = i; j < sizeof (*sense); j++) |
977 | if (s[j]) |
978 | break; |
979 | if (j == sizeof (*sense)) |
980 | return; |
981 | |
982 | printf("\n Additional Sense Information (byte %d out...):\n" , i); |
983 | if (i == 15) { |
984 | printf("\n\t%2d:" , i); |
985 | k = 7; |
986 | } else { |
987 | printf("\n\t%2d:" , i); |
988 | k = 2; |
989 | j -= 2; |
990 | } |
991 | while (j > 0) { |
992 | if (i >= sizeof (*sense)) |
993 | break; |
994 | if (k == 8) { |
995 | k = 0; |
996 | printf("\n\t%2d:" , i); |
997 | } |
998 | printf(" 0x%02x" , s[i] & 0xff); |
999 | k++; |
1000 | j--; |
1001 | i++; |
1002 | } |
1003 | printf("\n\n" ); |
1004 | } |
1005 | |
1006 | static char * |
1007 | scsipi_decode_sense(void *sinfo, int flag) |
1008 | { |
1009 | unsigned char *snsbuf; |
1010 | unsigned char skey; |
1011 | static char rqsbuf[132]; |
1012 | |
1013 | skey = 0; |
1014 | |
1015 | snsbuf = (unsigned char *) sinfo; |
1016 | if (flag == 0 || flag == 2 || flag == 3) |
1017 | skey = snsbuf[2] & 0xf; |
1018 | if (flag == 0) { /* Sense Key Only */ |
1019 | (void) strlcpy(rqsbuf, sense_keys[skey], sizeof(rqsbuf)); |
1020 | return (rqsbuf); |
1021 | } else if (flag == 1) { /* ASC/ASCQ Only */ |
1022 | asc2ascii(snsbuf[12], snsbuf[13], rqsbuf, sizeof(rqsbuf)); |
1023 | return (rqsbuf); |
1024 | } else if (flag == 2) { /* Sense Key && ASC/ASCQ */ |
1025 | auto char localbuf[64]; |
1026 | asc2ascii(snsbuf[12], snsbuf[13], localbuf, sizeof(localbuf)); |
1027 | (void) snprintf(rqsbuf, sizeof(rqsbuf), "%s, %s" , |
1028 | sense_keys[skey], localbuf); |
1029 | return (rqsbuf); |
1030 | } else if (flag == 3 && snsbuf[7] >= 9 && (snsbuf[15] & 0x80)) { |
1031 | /* |
1032 | * SKSV Data |
1033 | */ |
1034 | switch (skey) { |
1035 | case SKEY_ILLEGAL_REQUEST: |
1036 | if (snsbuf[15] & 0x8) |
1037 | (void)snprintf(rqsbuf, sizeof(rqsbuf), |
1038 | "Error in %s, Offset %d, bit %d" , |
1039 | (snsbuf[15] & 0x40)? "CDB" : "Parameters" , |
1040 | (snsbuf[16] & 0xff) << 8 | |
1041 | (snsbuf[17] & 0xff), snsbuf[15] & 0x7); |
1042 | else |
1043 | (void)snprintf(rqsbuf, sizeof(rqsbuf), |
1044 | "Error in %s, Offset %d" , |
1045 | (snsbuf[15] & 0x40)? "CDB" : "Parameters" , |
1046 | (snsbuf[16] & 0xff) << 8 | |
1047 | (snsbuf[17] & 0xff)); |
1048 | return (rqsbuf); |
1049 | case SKEY_RECOVERED_ERROR: |
1050 | case SKEY_MEDIUM_ERROR: |
1051 | case SKEY_HARDWARE_ERROR: |
1052 | (void)snprintf(rqsbuf, sizeof(rqsbuf), |
1053 | "Actual Retry Count: %d" , |
1054 | (snsbuf[16] & 0xff) << 8 | (snsbuf[17] & 0xff)); |
1055 | return (rqsbuf); |
1056 | case SKEY_NOT_READY: |
1057 | (void)snprintf(rqsbuf, sizeof(rqsbuf), |
1058 | "Progress Indicator: %d" , |
1059 | (snsbuf[16] & 0xff) << 8 | (snsbuf[17] & 0xff)); |
1060 | return (rqsbuf); |
1061 | default: |
1062 | break; |
1063 | } |
1064 | } |
1065 | return (NULL); |
1066 | } |
1067 | |
1068 | int |
1069 | scsipi_print_sense_real(struct scsipi_xfer *xs, int verbosity) |
1070 | { |
1071 | scsipi_printaddr(xs->xs_periph); |
1072 | printf(" Check Condition on CDB: " ); |
1073 | scsipi_print_cdb(xs->cmd); |
1074 | printf("\n" ); |
1075 | scsipi_print_sense_data(&xs->sense.scsi_sense, verbosity); |
1076 | return 1; |
1077 | } |
1078 | |