hdd 0.10.3

hdd: instruments for querying ATA and SCSI disks
Documentation
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
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
/// Sense key descriptions, as seen in SPC-4, 4.5.6, table 43
#[derive(Debug)]
pub enum SenseKey {
	/// No Sense: indicates successful command execution, or might occur for a command that received CHECK CONDITION status because one of FILEMARK/EOM/ILI bits was set
	Ok = 0,
	/// Recovered Error: still indicates successfully executed command but with some recovery action performed
	Recovered = 1,
	/// Not Ready: the logical unit is not accessible
	NotReady = 2,
	/// Medium Error: usually indicates unrecoverable errors caused by damaged media
	MediumError = 3,
	/// Hardware Error: unrecoverable non-medium failure (controller/CRC/…)
	HardwareError = 4,
	/// Illegal Request: invalid LUN/task attribute/parameter/…
	///
	/// If invalid parameter is not in the CDB, device might return this *after* altering medium in some way.
	IllegalRequest = 5,
	/// Unit Attention: removable medium change, logical unit reset etc.; see SAM-4
	UnitAttention = 6,
	/// Data Protect: indicates prohibited read/write operations on protected blocks
	DataProtect = 7,
	/// Blank Check: blank medium or format-defined end-of-data was encountered during reading, or non-blank medium was encountered during writing
	BlankCheck = 8,
	/// aka Firmware Error
	VendorSpecific = 9,
	/// Copy Aborted: indicates aborted EXTENDED COPY command
	AbortedCopy = 10,
	/// Aborted Command: indicates any other aborted command; client may be able to recover by trying the command again
	AbortedCommand = 11,
	Reserved = 12,
	/// Volume Overflow: indicates that buffered device reached the end-of-partition; RECOVER BUFFERED DATA might be used to read unwritten data back (see SSC-2)
	VolumeOverflow = 13,
	/// Miscompare: source data did not match the data read from the medium
	Miscompare = 14,
	/// Completed: completion sense data report; also may occur for successful command
	Completed = 15,
}

impl SenseKey {
	/**
	Returns `SenseKey` for a given numeric sense key.

	## Panics

	This function panics if value of `key` cannot be represented using just 4 bits.
	*/
	pub fn from(key: u8) -> SenseKey {
		use self::SenseKey::*;
		match key {
			0 => Ok,
			1 => Recovered,
			2 => NotReady,
			3 => MediumError,
			4 => HardwareError,
			5 => IllegalRequest,
			6 => UnitAttention,
			7 => DataProtect,
			8 => BlankCheck,
			9 => VendorSpecific,
			10 => AbortedCopy,
			11 => AbortedCommand,
			12 => Reserved,
			13 => VolumeOverflow,
			14 => Miscompare,
			15 => Completed,
			_ => panic!("invalid sense key value"),
		}
	}
}

// Enums? *Nested enums*? Who would even want to match against them?
// Sure these pairs could be grouped easily, but for now for commands that really expect some specific ASC/ASCQs it's easier to match them directly against that expected subset of values.
/// Gives textual description for a pair of Additional Sense Code values, as found in SPC-4, 4.5.6, table 44
pub fn decode_asc(asc: u8, ascq: u8) -> Option<&'static str> {
	Some(match (asc, ascq) {
		(0x20, 0x0B) => "ACCESS DENIED - ACL LUN CONFLICT",
		(0x20, 0x08) => "ACCESS DENIED - ENROLLMENT CONFLICT",
		(0x20, 0x01) => "ACCESS DENIED - INITIATOR PENDING-ENROLLED",
		(0x20, 0x09) => "ACCESS DENIED - INVALID LU IDENTIFIER",
		(0x20, 0x03) => "ACCESS DENIED - INVALID MGMT ID KEY",
		(0x20, 0x0A) => "ACCESS DENIED - INVALID PROXY TOKEN",
		(0x20, 0x02) => "ACCESS DENIED - NO ACCESS RIGHTS",
		(0x4B, 0x03) => "ACK/NAK TIMEOUT",
		(0x67, 0x02) => "ADD LOGICAL UNIT FAILED",
		(0x13, 0x00) => "ADDRESS MARK NOT FOUND FOR DATA FIELD",
		(0x12, 0x00) => "ADDRESS MARK NOT FOUND FOR ID FIELD",
		(0x67, 0x08) => "ASSIGN FAILURE OCCURRED",
		(0x27, 0x03) => "ASSOCIATED WRITE PROTECT",
		(0x2A, 0x06) => "ASYMMETRIC ACCESS STATE CHANGED",
		(0x47, 0x04) => "ASYNCHRONOUS INFORMATION PROTECTION ERROR DETECTED",
		(0x44, 0x71) => "ATA DEVICE FAILED SET FEATURES",
		(0x67, 0x0B) => "ATA DEVICE FEATURE NOT ENABLED",
		(0x00, 0x1D) => "ATA PASS THROUGH INFORMATION AVAILABLE",
		(0x67, 0x06) => "ATTACHMENT OF LOGICAL UNIT FAILED",
		(0x00, 0x11) => "AUDIO PLAY OPERATION IN PROGRESS",
		(0x00, 0x12) => "AUDIO PLAY OPERATION PAUSED",
		(0x00, 0x14) => "AUDIO PLAY OPERATION STOPPED DUE TO ERROR",
		(0x00, 0x13) => "AUDIO PLAY OPERATION SUCCESSFULLY COMPLETED",
		(0x74, 0x40) => "AUTHENTICATION FAILED",
		(0x66, 0x00) => "AUTOMATIC DOCUMENT FEEDER COVER UP",
		(0x66, 0x01) => "AUTOMATIC DOCUMENT FEEDER LIFT UP",
		(0x55, 0x06) => "AUXILIARY MEMORY OUT OF SPACE",
		(0x11, 0x12) => "AUXILIARY MEMORY READ ERROR",
		(0x0C, 0x0B) => "AUXILIARY MEMORY WRITE ERROR",
		(0x00, 0x04) => "BEGINNING-OF-PARTITION/MEDIUM DETECTED",
		(0x0C, 0x06) => "BLOCK NOT COMPRESSIBLE",
		(0x14, 0x04) => "BLOCK SEQUENCE ERROR",
		(0x29, 0x03) => "BUS DEVICE RESET FUNCTION OCCURRED",
		(0x11, 0x0E) => "CANNOT DECOMPRESS USING DECLARED ALGORITHM",
		(0x30, 0x06) => "CANNOT FORMAT MEDIUM - INCOMPATIBLE MEDIUM",
		(0x30, 0x02) => "CANNOT READ MEDIUM - INCOMPATIBLE FORMAT",
		(0x30, 0x01) => "CANNOT READ MEDIUM - UNKNOWN FORMAT",
		(0x30, 0x08) => "CANNOT WRITE - APPLICATION CODE MISMATCH",
		(0x30, 0x05) => "CANNOT WRITE MEDIUM - INCOMPATIBLE FORMAT",
		(0x30, 0x04) => "CANNOT WRITE MEDIUM - UNKNOWN FORMAT",
		(0x2A, 0x09) => "CAPACITY DATA HAS CHANGED",
		(0x52, 0x00) => "CARTRIDGE FAULT",
		(0x73, 0x00) => "CD CONTROL ERROR",
		(0x24, 0x01) => "CDB DECRYPTION ERROR",
		(0x3F, 0x02) => "CHANGED OPERATING DEFINITION",
		(0x11, 0x06) => "CIRC UNRECOVERED ERROR",
		(0x30, 0x03) => "CLEANING CARTRIDGE INSTALLED",
		(0x30, 0x07) => "CLEANING FAILURE",
		(0x30, 0x0A) => "CLEANING REQUEST REJECTED",
		(0x00, 0x17) => "CLEANING REQUESTED",
		(0x30, 0x13) => "CLEANING VOLUME EXPIRED",
		(0x4A, 0x00) => "COMMAND PHASE ERROR",
		(0x2C, 0x00) => "COMMAND SEQUENCE ERROR",
		(0x6E, 0x00) => "COMMAND TO LOGICAL UNIT FAILED",
		(0x2F, 0x00) => "COMMANDS CLEARED BY ANOTHER INITIATOR",
		(0x2F, 0x02) => "COMMANDS CLEARED BY DEVICE SERVER",
		(0x2F, 0x01) => "COMMANDS CLEARED BY POWER LOSS NOTIFICATION",
		(0x3F, 0x04) => "COMPONENT DEVICE ATTACHED",
		(0x0C, 0x04) => "COMPRESSION CHECK MISCOMPARE ERROR",
		(0x27, 0x06) => "CONDITIONAL WRITE PROTECT",
		(0x67, 0x00) => "CONFIGURATION FAILURE",
		(0x67, 0x01) => "CONFIGURATION OF INCAPABLE LOGICAL UNITS FAILED",
		(0x6F, 0x07) => "CONFLICT IN BINDING NONCE RECORDING",
		(0x00, 0x1E) => "CONFLICTING SA CREATION REQUEST",
		(0x4B, 0x07) => "CONNECTION LOST",
		(0x5D, 0x25) => "CONTROLLER IMPENDING FAILURE ACCESS TIMES TOO HIGH",
		(0x5D, 0x27) => "CONTROLLER IMPENDING FAILURE CHANNEL PARAMETRICS",
		(0x5D, 0x28) => "CONTROLLER IMPENDING FAILURE CONTROLLER DETECTED",
		(0x5D, 0x22) => "CONTROLLER IMPENDING FAILURE DATA ERROR RATE TOO HIGH",
		(0x5D, 0x2C) => "CONTROLLER IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT",
		(0x5D, 0x21) => "CONTROLLER IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH",
		(0x5D, 0x20) => "CONTROLLER IMPENDING FAILURE GENERAL HARD DRIVE FAILURE",
		(0x5D, 0x23) => "CONTROLLER IMPENDING FAILURE SEEK ERROR RATE TOO HIGH",
		(0x5D, 0x2A) => "CONTROLLER IMPENDING FAILURE SEEK TIME PERFORMANCE",
		(0x5D, 0x2B) => "CONTROLLER IMPENDING FAILURE SPIN-UP RETRY COUNT",
		(0x5D, 0x26) => "CONTROLLER IMPENDING FAILURE START UNIT TIMES TOO HIGH",
		(0x5D, 0x29) => "CONTROLLER IMPENDING FAILURE THROUGHPUT PERFORMANCE",
		(0x5D, 0x24) => "CONTROLLER IMPENDING FAILURE TOO MANY BLOCK REASSIGNS",
		(0x2B, 0x00) => "COPY CANNOT EXECUTE SINCE HOST CANNOT DISCONNECT",
		(0x6F, 0x00) => "COPY PROTECTION KEY EXCHANGE FAILURE - AUTHENTICATION FAILURE",
		(0x6F, 0x02) => "COPY PROTECTION KEY EXCHANGE FAILURE - KEY NOT ESTABLISHED",
		(0x6F, 0x01) => "COPY PROTECTION KEY EXCHANGE FAILURE - KEY NOT PRESENT",
		(0x26, 0x0D) => "COPY SEGMENT GRANULARITY VIOLATION",
		(0x0D, 0x05) => "COPY TARGET DEVICE DATA OVERRUN",
		(0x0D, 0x04) => "COPY TARGET DEVICE DATA UNDERRUN",
		(0x0D, 0x02) => "COPY TARGET DEVICE NOT REACHABLE",
		(0x67, 0x07) => "CREATION OF LOGICAL UNIT FAILED",
		(0x74, 0x04) => "CRYPTOGRAPHIC INTEGRITY VALIDATION FAILED",
		(0x73, 0x10) => "CURRENT POWER CALIBRATION AREA ALMOST FULL",
		(0x73, 0x11) => "CURRENT POWER CALIBRATION AREA IS FULL",
		(0x2C, 0x04) => "CURRENT PROGRAM AREA IS EMPTY",
		(0x2C, 0x03) => "CURRENT PROGRAM AREA IS NOT EMPTY",
		(0x30, 0x09) => "CURRENT SESSION NOT FIXATED FOR APPEND",
		(0x5D, 0x35) => "DATA CHANNEL IMPENDING FAILURE ACCESS TIMES TOO HIGH",
		(0x5D, 0x37) => "DATA CHANNEL IMPENDING FAILURE CHANNEL PARAMETRICS",
		(0x5D, 0x38) => "DATA CHANNEL IMPENDING FAILURE CONTROLLER DETECTED",
		(0x5D, 0x32) => "DATA CHANNEL IMPENDING FAILURE DATA ERROR RATE TOO HIGH",
		(0x5D, 0x3C) => "DATA CHANNEL IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT",
		(0x5D, 0x31) => "DATA CHANNEL IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH",
		(0x5D, 0x30) => "DATA CHANNEL IMPENDING FAILURE GENERAL HARD DRIVE FAILURE",
		(0x5D, 0x33) => "DATA CHANNEL IMPENDING FAILURE SEEK ERROR RATE TOO HIGH",
		(0x5D, 0x3A) => "DATA CHANNEL IMPENDING FAILURE SEEK TIME PERFORMANCE",
		(0x5D, 0x3B) => "DATA CHANNEL IMPENDING FAILURE SPIN-UP RETRY COUNT",
		(0x5D, 0x36) => "DATA CHANNEL IMPENDING FAILURE START UNIT TIMES TOO HIGH",
		(0x5D, 0x39) => "DATA CHANNEL IMPENDING FAILURE THROUGHPUT PERFORMANCE",
		(0x5D, 0x34) => "DATA CHANNEL IMPENDING FAILURE TOO MANY BLOCK REASSIGNS",
		(0x55, 0x0A) => "DATA CURRENTLY UNAVAILABLE",
		(0x26, 0x05) => "DATA DECRYPTION ERROR",
		(0x26, 0x10) => "DATA DECRYPTION KEY FAIL LIMIT REACHED",
		(0x2A, 0x0D) => "DATA ENCRYPTION CAPABILITIES CHANGED",
		(0x74, 0x21) => "DATA ENCRYPTION CONFIGURATION PREVENTED",
		(0x2A, 0x13) => "DATA ENCRYPTION KEY INSTANCE COUNTER HAS CHANGED",
		(0x2A, 0x11) => "DATA ENCRYPTION PARAMETERS CHANGED BY ANOTHER I_T NEXUS",
		(0x2A, 0x12) => "DATA ENCRYPTION PARAMETERS CHANGED BY VENDOR SPECIFIC EVENT",
		(0x0C, 0x05) => "DATA EXPANSION OCCURRED DURING COMPRESSION",
		(0x69, 0x00) => "DATA LOSS ON LOGICAL UNIT",
		(0x4B, 0x05) => "DATA OFFSET ERROR",
		(0x41, 0x00) => "DATA PATH FAILURE (SHOULD USE 40 NN)",
		(0x47, 0x01) => "DATA PHASE CRC ERROR DETECTED",
		(0x4B, 0x00) => "DATA PHASE ERROR",
		(0x11, 0x07) => "DATA RE-SYNCHRONIZATION ERROR",
		(0x16, 0x03) => "DATA SYNC ERROR - DATA AUTO-REALLOCATED",
		(0x16, 0x01) => "DATA SYNC ERROR - DATA REWRITTEN",
		(0x16, 0x04) => "DATA SYNC ERROR - RECOMMEND REASSIGNMENT",
		(0x16, 0x02) => "DATA SYNC ERROR - RECOMMEND REWRITE",
		(0x16, 0x00) => "DATA SYNCHRONIZATION MARK ERROR",
		(0x3B, 0x1B) => "DATA TRANSFER DEVICE INSERTED",
		(0x3B, 0x1A) => "DATA TRANSFER DEVICE REMOVED",
		(0x11, 0x0D) => "DE-COMPRESSION CRC ERROR",
		(0x71, 0x00) => "DECOMPRESSION EXCEPTION LONG ALGORITHM ID",
		(0x70, _) => "DECOMPRESSION EXCEPTION SHORT ALGORITHM ID", // XXX id of $_
		(0x19, 0x00) => "DEFECT LIST ERROR",
		(0x19, 0x03) => "DEFECT LIST ERROR IN GROWN LIST",
		(0x19, 0x02) => "DEFECT LIST ERROR IN PRIMARY LIST",
		(0x19, 0x01) => "DEFECT LIST NOT AVAILABLE",
		(0x1C, 0x00) => "DEFECT LIST NOT FOUND",
		(0x32, 0x01) => "DEFECT LIST UPDATE FAILURE",
		(0x0C, 0x0F) => "DEFECTS IN ERROR WINDOW",
		(0x3F, 0x05) => "DEVICE IDENTIFIER CHANGED",
		(0x29, 0x04) => "DEVICE INTERNAL RESET",
		(0x40, x) if x >= 0x80 => "DIAGNOSTIC FAILURE ON COMPONENT", // XXX component $x
		(0x74, 0x08) => "DIGITAL SIGNATURE VALIDATION FAILURE",
		(0x66, 0x02) => "DOCUMENT JAM IN AUTOMATIC DOCUMENT FEEDER",
		(0x66, 0x03) => "DOCUMENT MISS FEED AUTOMATIC IN DOCUMENT FEEDER",
		(0x6F, 0x05) => "DRIVE REGION MUST BE PERMANENT/REGION RESET COUNT ERROR",
		(0x53, 0x07) => "DUPLICATE VOLUME IDENTIFIER",
		(0x3F, 0x0F) => "ECHO BUFFER OVERWRITTEN",
		(0x3B, 0x18) => "ELEMENT DISABLED",
		(0x3B, 0x19) => "ELEMENT ENABLED",
		(0x53, 0x08) => "ELEMENT STATUS UNKNOWN",
		(0x72, 0x04) => "EMPTY OR PARTIALLY WRITTEN RESERVED TRACK",
		(0x34, 0x00) => "ENCLOSURE FAILURE",
		(0x35, 0x05) => "ENCLOSURE SERVICES CHECKSUM ERROR",
		(0x35, 0x00) => "ENCLOSURE SERVICES FAILURE",
		(0x35, 0x03) => "ENCLOSURE SERVICES TRANSFER FAILURE",
		(0x35, 0x04) => "ENCLOSURE SERVICES TRANSFER REFUSED",
		(0x35, 0x02) => "ENCLOSURE SERVICES UNAVAILABLE",
		(0x74, 0x0A) => "ENCRYPTED BLOCK NOT RAW READ ENABLED",
		(0x74, 0x0D) => "ENCRYPTION ALGORITHM DISABLED",
		(0x74, 0x09) => "ENCRYPTION MODE MISMATCH ON READ",
		(0x74, 0x07) => "ENCRYPTION PARAMETERS NOT USEABLE",
		(0x3B, 0x0F) => "END OF MEDIUM REACHED",
		(0x63, 0x00) => "END OF USER AREA ENCOUNTERED ON THIS TRACK",
		(0x00, 0x05) => "END-OF-DATA DETECTED",
		(0x14, 0x03) => "END-OF-DATA NOT FOUND",
		(0x00, 0x02) => "END-OF-PARTITION/MEDIUM DETECTED",
		(0x51, 0x00) => "ERASE FAILURE",
		(0x51, 0x01) => "ERASE FAILURE - INCOMPLETE ERASE OPERATION DETECTED",
		(0x00, 0x18) => "ERASE OPERATION IN PROGRESS",
		(0x74, 0x05) => "ERROR DECRYPTING DATA",
		(0x0D, 0x00) => "ERROR DETECTED BY THIRD PARTY TEMPORARY INITIATOR",
		(0x2A, 0x0A) => "ERROR HISTORY I_T NEXUS CLEARED",
		(0x2A, 0x0B) => "ERROR HISTORY SNAPSHOT RELEASED",
		(0x0A, 0x00) => "ERROR LOG OVERFLOW",
		(0x11, 0x10) => "ERROR READING ISRC NUMBER",
		(0x11, 0x0F) => "ERROR READING UPC/EAN NUMBER",
		(0x2A, 0x0C) => "ERROR RECOVERY ATTRIBUTES HAVE CHANGED",
		(0x11, 0x02) => "ERROR TOO LONG TO CORRECT",
		(0x38, 0x06) => "ESN - DEVICE BUSY CLASS EVENT",
		(0x38, 0x04) => "ESN - MEDIA CLASS EVENT",
		(0x38, 0x02) => "ESN - POWER MANAGEMENT CLASS EVENT",
		(0x38, 0x00) => "EVENT STATUS NOTIFICATION",
		(0x03, 0x02) => "EXCESSIVE WRITE ERRORS",
		(0x67, 0x04) => "EXCHANGE OF LOGICAL UNIT FAILED",
		(0x74, 0x6F) => "EXTERNAL DATA ENCRYPTION CONTROL ERROR",
		(0x74, 0x6E) => "EXTERNAL DATA ENCRYPTION CONTROL TIMEOUT",
		(0x74, 0x61) => "EXTERNAL DATA ENCRYPTION KEY MANAGER ACCESS ERROR",
		(0x74, 0x62) => "EXTERNAL DATA ENCRYPTION KEY MANAGER ERROR",
		(0x74, 0x63) => "EXTERNAL DATA ENCRYPTION KEY NOT FOUND",
		(0x74, 0x64) => "EXTERNAL DATA ENCRYPTION REQUEST NOT AUTHORIZED",
		(0x3B, 0x07) => "FAILED TO SENSE BOTTOM-OF-FORM",
		(0x3B, 0x06) => "FAILED TO SENSE TOP-OF-FORM",
		(0x5D, 0x00) => "FAILURE PREDICTION THRESHOLD EXCEEDED",
		(0x5D, 0xFF) => "FAILURE PREDICTION THRESHOLD EXCEEDED (FALSE)",
		(0x00, 0x01) => "FILEMARK DETECTED",
		(0x14, 0x02) => "FILEMARK OR SETMARK NOT FOUND",
		(0x5D, 0x65) => "FIRMWARE IMPENDING FAILURE ACCESS TIMES TOO HIGH",
		(0x5D, 0x67) => "FIRMWARE IMPENDING FAILURE CHANNEL PARAMETRICS",
		(0x5D, 0x68) => "FIRMWARE IMPENDING FAILURE CONTROLLER DETECTED",
		(0x5D, 0x62) => "FIRMWARE IMPENDING FAILURE DATA ERROR RATE TOO HIGH",
		(0x5D, 0x6C) => "FIRMWARE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT",
		(0x5D, 0x61) => "FIRMWARE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH",
		(0x5D, 0x60) => "FIRMWARE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE",
		(0x5D, 0x63) => "FIRMWARE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH",
		(0x5D, 0x6A) => "FIRMWARE IMPENDING FAILURE SEEK TIME PERFORMANCE",
		(0x5D, 0x6B) => "FIRMWARE IMPENDING FAILURE SPIN-UP RETRY COUNT",
		(0x5D, 0x66) => "FIRMWARE IMPENDING FAILURE START UNIT TIMES TOO HIGH",
		(0x5D, 0x69) => "FIRMWARE IMPENDING FAILURE THROUGHPUT PERFORMANCE",
		(0x5D, 0x64) => "FIRMWARE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS",
		(0x09, 0x02) => "FOCUS SERVO FAILURE",
		(0x31, 0x01) => "FORMAT COMMAND FAILED",
		(0x28, 0x02) => "FORMAT-LAYER MAY HAVE CHANGED",
		(0x58, 0x00) => "GENERATION DOES NOT EXIST",
		(0x1C, 0x02) => "GROWN DEFECT LIST NOT FOUND",
		(0x5D, 0x15) => "HARDWARE IMPENDING FAILURE ACCESS TIMES TOO HIGH",
		(0x5D, 0x17) => "HARDWARE IMPENDING FAILURE CHANNEL PARAMETRICS",
		(0x5D, 0x18) => "HARDWARE IMPENDING FAILURE CONTROLLER DETECTED",
		(0x5D, 0x12) => "HARDWARE IMPENDING FAILURE DATA ERROR RATE TOO HIGH",
		(0x5D, 0x1C) => "HARDWARE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT",
		(0x5D, 0x11) => "HARDWARE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH",
		(0x5D, 0x10) => "HARDWARE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE",
		(0x5D, 0x13) => "HARDWARE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH",
		(0x5D, 0x1A) => "HARDWARE IMPENDING FAILURE SEEK TIME PERFORMANCE",
		(0x5D, 0x1B) => "HARDWARE IMPENDING FAILURE SPIN-UP RETRY COUNT",
		(0x5D, 0x16) => "HARDWARE IMPENDING FAILURE START UNIT TIMES TOO HIGH",
		(0x5D, 0x19) => "HARDWARE IMPENDING FAILURE THROUGHPUT PERFORMANCE",
		(0x5D, 0x14) => "HARDWARE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS",
		(0x27, 0x01) => "HARDWARE WRITE PROTECTED",
		(0x09, 0x04) => "HEAD SELECT FAULT",
		(0x00, 0x06) => "I/O PROCESS TERMINATED",
		(0x10, 0x00) => "ID CRC OR ECC ERROR",
		(0x5E, 0x03) => "IDLE CONDITION ACTIVATED BY COMMAND",
		(0x5E, 0x01) => "IDLE CONDITION ACTIVATED BY TIMER",
		(0x5E, 0x06) => "IDLE_B CONDITION ACTIVATED BY COMMAND",
		(0x5E, 0x05) => "IDLE_B CONDITION ACTIVATED BY TIMER",
		(0x5E, 0x08) => "IDLE_C CONDITION ACTIVATED BY COMMAND",
		(0x5E, 0x07) => "IDLE_C CONDITION ACTIVATED BY TIMER",
		(0x20, 0x0C) => "ILLEGAL COMMAND WHEN NOT IN APPEND-ONLY MODE",
		(0x20, 0x06) => "ILLEGAL COMMAND WHILE IN EXPLICIT ADDRESS MODE",
		(0x20, 0x07) => "ILLEGAL COMMAND WHILE IN IMPLICIT ADDRESS MODE",
		(0x20, 0x04) => "ILLEGAL COMMAND WHILE IN WRITE CAPABLE STATE",
		(0x22, 0x00) => "ILLEGAL FUNCTION (USE 20 00, 24 00, OR 26 00)",
		(0x64, 0x00) => "ILLEGAL MODE FOR THIS TRACK",
		(0x2C, 0x05) => "ILLEGAL POWER CONDITION REQUEST",
		(0x2A, 0x07) => "IMPLICIT ASYMMETRIC ACCESS STATE TRANSITION FAILED",
		(0x28, 0x01) => "IMPORT OR EXPORT ELEMENT ACCESSED",
		(0x28, 0x03) => "IMPORT/EXPORT ELEMENT ACCESSED, MEDIUM CHANGED",
		(0x30, 0x00) => "INCOMPATIBLE MEDIUM INSTALLED",
		(0x30, 0x12) => "INCOMPATIBLE VOLUME QUALIFIER",
		(0x30, 0x11) => "INCOMPATIBLE VOLUME TYPE",
		(0x11, 0x08) => "INCOMPLETE BLOCK READ",
		(0x26, 0x11) => "INCOMPLETE KEY-ASSOCIATED DATA SET",
		(0x0D, 0x03) => "INCORRECT COPY TARGET DEVICE TYPE",
		(0x74, 0x03) => "INCORRECT DATA ENCRYPTION KEY",
		(0x74, 0x0B) => "INCORRECT ENCRYPTION PARAMETERS",
		(0x0E, 0x02) => "INFORMATION UNIT TOO LONG",
		(0x0E, 0x01) => "INFORMATION UNIT TOO SHORT",
		(0x47, 0x03) => "INFORMATION UNIT iuCRC ERROR DETECTED",
		(0x6A, 0x00) => "INFORMATIONAL, REFER TO LOG",
		(0x48, 0x00) => "INITIATOR DETECTED ERROR MESSAGE RECEIVED",
		(0x4B, 0x06) => "INITIATOR RESPONSE TIMEOUT",
		(0x26, 0x0B) => "INLINE DATA LENGTH EXCEEDED",
		(0x3F, 0x03) => "INQUIRY DATA HAS CHANGED",
		(0x55, 0x05) => "INSUFFICIENT ACCESS CONTROL RESOURCES",
		(0x6F, 0x06) => "INSUFFICIENT BLOCK COUNT FOR BINDING NONCE RECORDING",
		(0x55, 0x0B) => "INSUFFICIENT POWER FOR OPERATION",
		(0x55, 0x04) => "INSUFFICIENT REGISTRATION RESOURCES",
		(0x55, 0x02) => "INSUFFICIENT RESERVATION RESOURCES",
		(0x55, 0x03) => "INSUFFICIENT RESOURCES",
		(0x2E, 0x00) => "INSUFFICIENT TIME FOR OPERATION",
		(0x44, 0x00) => "INTERNAL TARGET FAILURE",
		(0x21, 0x02) => "INVALID ADDRESS FOR WRITE",
		(0x3D, 0x00) => "INVALID BITS IN IDENTIFY MESSAGE",
		(0x2C, 0x02) => "INVALID COMBINATION OF WINDOWS SPECIFIED",
		(0x20, 0x00) => "INVALID COMMAND OPERATION CODE",
		(0x26, 0x0F) => "INVALID DATA-OUT BUFFER INTEGRITY CHECK VALUE",
		(0x21, 0x01) => "INVALID ELEMENT ADDRESS",
		(0x24, 0x00) => "INVALID FIELD IN CDB",
		(0x0E, 0x03) => "INVALID FIELD IN COMMAND INFORMATION UNIT",
		(0x26, 0x00) => "INVALID FIELD IN PARAMETER LIST",
		(0x0E, 0x00) => "INVALID INFORMATION UNIT",
		(0x49, 0x00) => "INVALID MESSAGE ERROR",
		(0x26, 0x0C) => "INVALID OPERATION FOR COPY SOURCE OR DESTINATION",
		(0x64, 0x01) => "INVALID PACKET SIZE",
		(0x26, 0x0E) => "INVALID PARAMETER WHILE PORT IS ENABLED",
		(0x26, 0x04) => "INVALID RELEASE OF PERSISTENT RESERVATION",
		(0x74, 0x12) => "INVALID SA USAGE",
		(0x4B, 0x01) => "INVALID TARGET PORT TRANSFER TAG RECEIVED",
		(0x23, 0x00) => "INVALID TOKEN OPERATION, CAUSE NOT REPORTABLE",
		(0x21, 0x03) => "INVALID WRITE CROSSING LAYER JUMP",
		(0x24, 0x08) => "INVALID XCDB",
		(0x3F, 0x12) => "iSCSI IP ADDRESS ADDED",
		(0x3F, 0x14) => "iSCSI IP ADDRESS CHANGED",
		(0x3F, 0x13) => "iSCSI IP ADDRESS REMOVED",
		(0x29, 0x07) => "I_T NEXUS LOSS OCCURRED",
		(0x11, 0x05) => "L-EC UNCORRECTABLE ERROR",
		(0x60, 0x00) => "LAMP FAILURE",
		(0x14, 0x07) => "LOCATE OPERATION FAILURE",
		(0x00, 0x19) => "LOCATE OPERATION IN PROGRESS",
		(0x5B, 0x02) => "LOG COUNTER AT MAXIMUM",
		(0x5B, 0x00) => "LOG EXCEPTION",
		(0x5B, 0x03) => "LOG LIST CODES EXHAUSTED",
		(0x2A, 0x02) => "LOG PARAMETERS CHANGED",
		(0x21, 0x00) => "LOGICAL BLOCK ADDRESS OUT OF RANGE",
		(0x10, 0x02) => "LOGICAL BLOCK APPLICATION TAG CHECK FAILED",
		(0x10, 0x01) => "LOGICAL BLOCK GUARD CHECK FAILED",
		(0x10, 0x04) => "LOGICAL BLOCK PROTECTION ERROR ON RECOVER BUFFERED DATA",
		(0x10, 0x05) => "LOGICAL BLOCK PROTECTION METHOD ERROR",
		(0x10, 0x03) => "LOGICAL BLOCK REFERENCE TAG CHECK FAILED",
		(0x74, 0x71) => "LOGICAL UNIT ACCESS NOT AUTHORIZED",
		(0x08, 0x03) => "LOGICAL UNIT COMMUNICATION CRC ERROR (ULTRA-DMA/32)",
		(0x08, 0x00) => "LOGICAL UNIT COMMUNICATION FAILURE",
		(0x08, 0x02) => "LOGICAL UNIT COMMUNICATION PARITY ERROR",
		(0x08, 0x01) => "LOGICAL UNIT COMMUNICATION TIME-OUT",
		(0x05, 0x00) => "LOGICAL UNIT DOES NOT RESPOND TO SELECTION",
		(0x4C, 0x00) => "LOGICAL UNIT FAILED SELF-CONFIGURATION",
		(0x3E, 0x03) => "LOGICAL UNIT FAILED SELF-TEST",
		(0x3E, 0x01) => "LOGICAL UNIT FAILURE",
		(0x5D, 0x02) => "LOGICAL UNIT FAILURE PREDICTION THRESHOLD EXCEEDED",
		(0x3E, 0x00) => "LOGICAL UNIT HAS NOT SELF-CONFIGURED YET",
		(0x04, 0x01) => "LOGICAL UNIT IS IN PROCESS OF BECOMING READY",
		(0x04, 0x0A) => "LOGICAL UNIT NOT ACCESSIBLE, ASYMMETRIC ACCESS STATE TRANSITION",
		(0x04, 0x0B) => "LOGICAL UNIT NOT ACCESSIBLE, TARGET PORT IN STANDBY STATE",
		(0x04, 0x0C) => "LOGICAL UNIT NOT ACCESSIBLE, TARGET PORT IN UNAVAILABLE STATE",
		(0x68, 0x00) => "LOGICAL UNIT NOT CONFIGURED",
		(0x04, 0x18) => "LOGICAL UNIT NOT READY, A DOOR IS OPEN",
		(0x04, 0x1C) => "LOGICAL UNIT NOT READY, ADDITIONAL POWER USE NOT YET GRANTED",
		(0x04, 0x10) => "LOGICAL UNIT NOT READY, AUXILIARY MEMORY NOT ACCESSIBLE",
		(0x04, 0x17) => "LOGICAL UNIT NOT READY, CALIBRATION REQUIRED",
		(0x04, 0x00) => "LOGICAL UNIT NOT READY, CAUSE NOT REPORTABLE",
		(0x04, 0x16) => "LOGICAL UNIT NOT READY, CONFIGURATION REQUIRED",
		(0x04, 0x04) => "LOGICAL UNIT NOT READY, FORMAT IN PROGRESS",
		(0x04, 0x02) => "LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED",
		(0x04, 0x08) => "LOGICAL UNIT NOT READY, LONG WRITE IN PROGRESS",
		(0x04, 0x03) => "LOGICAL UNIT NOT READY, MANUAL INTERVENTION REQUIRED",
		(0x04, 0x11) => "LOGICAL UNIT NOT READY, NOTIFY (ENABLE SPINUP) REQUIRED",
		(0x04, 0x12) => "LOGICAL UNIT NOT READY, OFFLINE",
		(0x04, 0x19) => "LOGICAL UNIT NOT READY, OPERATING IN SEQUENTIAL MODE",
		(0x04, 0x07) => "LOGICAL UNIT NOT READY, OPERATION IN PROGRESS",
		(0x04, 0x05) => "LOGICAL UNIT NOT READY, REBUILD IN PROGRESS",
		(0x04, 0x06) => "LOGICAL UNIT NOT READY, RECALCULATION IN PROGRESS",
		(0x04, 0x15) => "LOGICAL UNIT NOT READY, ROBOTICS DISABLED",
		(0x04, 0x13) => "LOGICAL UNIT NOT READY, SA CREATION IN PROGRESS",
		(0x04, 0x1B) => "LOGICAL UNIT NOT READY, SANITIZE IN PROGRESS",
		(0x04, 0x09) => "LOGICAL UNIT NOT READY, SELF-TEST IN PROGRESS",
		(0x04, 0x14) => "LOGICAL UNIT NOT READY, SPACE ALLOCATION IN PROGRESS",
		(0x04, 0x1A) => "LOGICAL UNIT NOT READY, START STOP UNIT COMMAND IN PROGRESS",
		(0x04, 0x0D) => "LOGICAL UNIT NOT READY, STRUCTURE CHECK REQUIRED",
		(0x25, 0x00) => "LOGICAL UNIT NOT SUPPORTED",
		(0x27, 0x02) => "LOGICAL UNIT SOFTWARE WRITE PROTECTED",
		(0x00, 0x1F) => "LOGICAL UNIT TRANSITIONING TO ANOTHER POWER CONDITION",
		(0x3E, 0x04) => "LOGICAL UNIT UNABLE TO UPDATE SELF-TEST LOG",
		(0x5E, 0x00) => "LOW POWER CONDITION ON",
		(0x55, 0x08) => "MAXIMUM NUMBER OF SUPPLEMENTAL DECRYPTION KEYS EXCEEDED",
		(0x15, 0x01) => "MECHANICAL POSITIONING ERROR",
		(0x3B, 0x16) => "MECHANICAL POSITIONING OR CHANGER ERROR",
		(0x5D, 0x01) => "MEDIA FAILURE PREDICTION THRESHOLD EXCEEDED",
		(0x53, 0x00) => "MEDIA LOAD OR EJECT FAILED",
		(0x6F, 0x04) => "MEDIA REGION CODE IS MISMATCHED TO LOGICAL UNIT REGION",
		(0x3F, 0x11) => "MEDIUM AUXILIARY MEMORY ACCESSIBLE",
		(0x55, 0x09) => "MEDIUM AUXILIARY MEMORY NOT ACCESSIBLE",
		(0x3B, 0x0D) => "MEDIUM DESTINATION ELEMENT FULL",
		(0x31, 0x00) => "MEDIUM FORMAT CORRUPTED",
		(0x3F, 0x10) => "MEDIUM LOADABLE",
		(0x3B, 0x13) => "MEDIUM MAGAZINE INSERTED",
		(0x3B, 0x14) => "MEDIUM MAGAZINE LOCKED",
		(0x3B, 0x11) => "MEDIUM MAGAZINE NOT ACCESSIBLE",
		(0x3B, 0x12) => "MEDIUM MAGAZINE REMOVED",
		(0x3B, 0x15) => "MEDIUM MAGAZINE UNLOCKED",
		(0x30, 0x10) => "MEDIUM NOT FORMATTED",
		(0x3A, 0x00) => "MEDIUM NOT PRESENT",
		(0x3A, 0x03) => "MEDIUM NOT PRESENT - LOADABLE",
		(0x3A, 0x04) => "MEDIUM NOT PRESENT - MEDIUM AUXILIARY MEMORY ACCESSIBLE",
		(0x3A, 0x01) => "MEDIUM NOT PRESENT - TRAY CLOSED",
		(0x3A, 0x02) => "MEDIUM NOT PRESENT - TRAY OPEN",
		(0x53, 0x02) => "MEDIUM REMOVAL PREVENTED",
		(0x53, 0x03) => "MEDIUM REMOVAL PREVENTED BY DATA TRANSFER ELEMENT",
		(0x3B, 0x0E) => "MEDIUM SOURCE ELEMENT EMPTY",
		(0x53, 0x04) => "MEDIUM THREAD OR UNTHREAD FAILURE",
		(0x43, 0x00) => "MESSAGE ERROR",
		(0x3F, 0x01) => "MICROCODE HAS BEEN CHANGED",
		(0x1D, 0x00) => "MISCOMPARE DURING VERIFY OPERATION",
		(0x1D, 0x01) => "MISCOMPARE VERIFY OF UNMAPPED LBA",
		(0x11, 0x0A) => "MISCORRECTED ERROR",
		(0x2A, 0x01) => "MODE PARAMETERS CHANGED",
		(0x67, 0x03) => "MODIFICATION OF LOGICAL UNIT FAILED",
		(0x69, 0x01) => "MULTIPLE LOGICAL UNIT FAILURES",
		(0x07, 0x00) => "MULTIPLE PERIPHERAL DEVICES SELECTED",
		(0x11, 0x03) => "MULTIPLE READ ERRORS",
		(0x67, 0x09) => "MULTIPLY ASSIGNED LOGICAL UNIT",
		(0x4B, 0x04) => "NAK RECEIVED",
		(0x00, 0x00) => "NO ADDITIONAL SENSE INFORMATION",
		(0x00, 0x15) => "NO CURRENT AUDIO STATUS TO RETURN",
		(0x32, 0x00) => "NO DEFECT SPARE LOCATION AVAILABLE",
		(0x11, 0x09) => "NO GAP FOUND",
		(0x01, 0x00) => "NO INDEX/SECTOR SIGNAL",
		(0x72, 0x07) => "NO MORE TEST ZONE EXTENSIONS ARE ALLOWED",
		(0x72, 0x05) => "NO MORE TRACK RESERVATIONS ALLOWED",
		(0x06, 0x00) => "NO REFERENCE POSITION FOUND",
		(0x02, 0x00) => "NO SEEK COMPLETE",
		(0x03, 0x01) => "NO WRITE CURRENT",
		(0x24, 0x06) => "NONCE NOT UNIQUE",
		(0x24, 0x07) => "NONCE TIMESTAMP OUT OF RANGE",
		(0x28, 0x00) => "NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED",
		(0x2C, 0x0B) => "NOT RESERVED",
		(0x00, 0x16) => "OPERATION IN PROGRESS",
		(0x5A, 0x01) => "OPERATOR MEDIUM REMOVAL REQUEST",
		(0x5A, 0x00) => "OPERATOR REQUEST OR STATE CHANGE INPUT",
		(0x5A, 0x03) => "OPERATOR SELECTED WRITE PERMIT",
		(0x5A, 0x02) => "OPERATOR SELECTED WRITE PROTECT",
		(0x2C, 0x0C) => "ORWRITE GENERATION DOES NOT MATCH",
		(0x61, 0x02) => "OUT OF FOCUS",
		(0x4E, 0x00) => "OVERLAPPED COMMANDS ATTEMPTED",
		(0x2D, 0x00) => "OVERWRITE ERROR ON UPDATE IN PLACE",
		(0x20, 0x05) => "(obsolete)", // XXX
		(0x24, 0x02) => "(obsolete)", // XXX
		(0x24, 0x03) => "(obsolete)", // XXX
		(0x63, 0x01) => "PACKET DOES NOT FIT IN AVAILABLE SPACE",
		(0x3B, 0x05) => "PAPER JAM",
		(0x1A, 0x00) => "PARAMETER LIST LENGTH ERROR",
		(0x26, 0x01) => "PARAMETER NOT SUPPORTED",
		(0x26, 0x02) => "PARAMETER VALUE INVALID",
		(0x2A, 0x00) => "PARAMETERS CHANGED",
		(0x69, 0x02) => "PARITY/DATA MISMATCH",
		(0x1F, 0x00) => "PARTIAL DEFECT LIST TRANSFER",
		(0x2C, 0x0A) => "PARTITION OR COLLECTION CONTAINS USER OBJECTS",
		(0x03, 0x00) => "PERIPHERAL DEVICE WRITE FAULT",
		(0x27, 0x05) => "PERMANENT WRITE PROTECT",
		(0x2C, 0x06) => "PERSISTENT PREVENT CONFLICT",
		(0x27, 0x04) => "PERSISTENT WRITE PROTECT",
		(0x47, 0x06) => "PHY TEST FUNCTION IN PROGRESS",
		(0x50, 0x02) => "POSITION ERROR RELATED TO TIMING",
		(0x3B, 0x0C) => "POSITION PAST BEGINNING OF MEDIUM",
		(0x3B, 0x0B) => "POSITION PAST END OF MEDIUM",
		(0x15, 0x02) => "POSITIONING ERROR DETECTED BY READ OF MEDIUM",
		(0x73, 0x01) => "POWER CALIBRATION AREA ALMOST FULL",
		(0x73, 0x03) => "POWER CALIBRATION AREA ERROR",
		(0x73, 0x02) => "POWER CALIBRATION AREA IS FULL",
		(0x29, 0x01) => "POWER ON OCCURRED",
		(0x29, 0x00) => "POWER ON, RESET, OR BUS DEVICE RESET OCCURRED",
		(0x5E, 0x41) => "POWER STATE CHANGE TO ACTIVE",
		(0x5E, 0x47) => "POWER STATE CHANGE TO DEVICE CONTROL",
		(0x5E, 0x42) => "POWER STATE CHANGE TO IDLE",
		(0x5E, 0x45) => "POWER STATE CHANGE TO SLEEP",
		(0x5E, 0x43) => "POWER STATE CHANGE TO STANDBY",
		(0x42, 0x00) => "POWER-ON OR SELF-TEST FAILURE (SHOULD USE 40 NN)",
		(0x2C, 0x07) => "PREVIOUS BUSY STATUS",
		(0x2C, 0x09) => "PREVIOUS RESERVATION CONFLICT STATUS",
		(0x2C, 0x08) => "PREVIOUS TASK SET FULL STATUS",
		(0x1C, 0x01) => "PRIMARY DEFECT LIST NOT FOUND",
		(0x2A, 0x08) => "PRIORITY CHANGED",
		(0x73, 0x05) => "PROGRAM MEMORY AREA IS FULL",
		(0x73, 0x04) => "PROGRAM MEMORY AREA UPDATE FAILURE",
		(0x00, 0x07) => "PROGRAMMABLE EARLY WARNING DETECTED",
		(0x47, 0x05) => "PROTOCOL SERVICE CRC ERROR",
		(0x55, 0x07) => "QUOTA ERROR",
		(0x40, 0x00) => "RAM FAILURE (SHOULD USE 40 NN)",
		(0x15, 0x00) => "RANDOM POSITIONING ERROR",
		(0x73, 0x17) => "RDZ IS FULL",
		(0x11, 0x13) => "READ ERROR - FAILED RETRANSMISSION REQUEST",
		(0x11, 0x14) => "READ ERROR - LBA MARKED BAD BY APPLICATION CLIENT",
		(0x11, 0x11) => "READ ERROR - LOSS OF STREAMING",
		(0x6F, 0x03) => "READ OF SCRAMBLED SECTOR WITHOUT AUTHENTICATION",
		(0x3B, 0x0A) => "READ PAST BEGINNING OF MEDIUM",
		(0x3B, 0x09) => "READ PAST END OF MEDIUM",
		(0x3B, 0x17) => "READ PAST END OF USER OBJECT",
		(0x11, 0x01) => "READ RETRIES EXHAUSTED",
		(0x6C, 0x00) => "REBUILD FAILURE OCCURRED",
		(0x6D, 0x00) => "RECALCULATE FAILURE OCCURRED",
		(0x14, 0x01) => "RECORD NOT FOUND",
		(0x14, 0x06) => "RECORD NOT FOUND - DATA AUTO-REALLOCATED",
		(0x14, 0x05) => "RECORD NOT FOUND - RECOMMEND REASSIGNMENT",
		(0x14, 0x00) => "RECORDED ENTITY NOT FOUND",
		(0x18, 0x02) => "RECOVERED DATA - DATA AUTO-REALLOCATED",
		(0x18, 0x05) => "RECOVERED DATA - RECOMMEND REASSIGNMENT",
		(0x18, 0x06) => "RECOVERED DATA - RECOMMEND REWRITE",
		(0x17, 0x05) => "RECOVERED DATA USING PREVIOUS SECTOR ID",
		(0x18, 0x03) => "RECOVERED DATA WITH CIRC",
		(0x18, 0x07) => "RECOVERED DATA WITH ECC - DATA REWRITTEN",
		(0x18, 0x01) => "RECOVERED DATA WITH ERROR CORR. & RETRIES APPLIED",
		(0x18, 0x00) => "RECOVERED DATA WITH ERROR CORRECTION APPLIED",
		(0x18, 0x04) => "RECOVERED DATA WITH L-EC",
		(0x18, 0x08) => "RECOVERED DATA WITH LINKING",
		(0x17, 0x03) => "RECOVERED DATA WITH NEGATIVE HEAD OFFSET",
		(0x17, 0x00) => "RECOVERED DATA WITH NO ERROR CORRECTION APPLIED",
		(0x17, 0x02) => "RECOVERED DATA WITH POSITIVE HEAD OFFSET",
		(0x17, 0x01) => "RECOVERED DATA WITH RETRIES",
		(0x17, 0x04) => "RECOVERED DATA WITH RETRIES AND/OR CIRC APPLIED",
		(0x17, 0x06) => "RECOVERED DATA WITHOUT ECC - DATA AUTO-REALLOCATED",
		(0x17, 0x09) => "RECOVERED DATA WITHOUT ECC - DATA REWRITTEN",
		(0x17, 0x07) => "RECOVERED DATA WITHOUT ECC - RECOMMEND REASSIGNMENT",
		(0x17, 0x08) => "RECOVERED DATA WITHOUT ECC - RECOMMEND REWRITE",
		(0x1E, 0x00) => "RECOVERED ID WITH ECC CORRECTION",
		(0x3F, 0x06) => "REDUNDANCY GROUP CREATED OR MODIFIED",
		(0x3F, 0x07) => "REDUNDANCY GROUP DELETED",
		(0x6B, 0x01) => "REDUNDANCY LEVEL GOT BETTER",
		(0x6B, 0x02) => "REDUNDANCY LEVEL GOT WORSE",
		(0x2A, 0x05) => "REGISTRATIONS PREEMPTED",
		(0x67, 0x05) => "REMOVE OF LOGICAL UNIT FAILED",
		(0x3F, 0x0E) => "REPORTED LUNS DATA HAS CHANGED",
		(0x3B, 0x08) => "REPOSITION ERROR",
		(0x2A, 0x03) => "RESERVATIONS PREEMPTED",
		(0x2A, 0x04) => "RESERVATIONS RELEASED",
		(0x00, 0x1A) => "REWIND OPERATION IN PROGRESS",
		(0x36, 0x00) => "RIBBON, INK, OR TONER FAILURE",
		(0x73, 0x06) => "RMA/PMA IS ALMOST FULL",
		(0x72, 0x06) => "RMZ EXTENSION IS NOT ALLOWED",
		(0x37, 0x00) => "ROUNDED PARAMETER",
		(0x5C, 0x00) => "RPL STATUS CHANGE",
		(0x2A, 0x14) => "SA CREATION CAPABILITIES DATA HAS CHANGED",
		(0x74, 0x30) => "SA CREATION PARAMETER NOT SUPPORTED",
		(0x74, 0x10) => "SA CREATION PARAMETER VALUE INVALID",
		(0x74, 0x11) => "SA CREATION PARAMETER VALUE REJECTED",
		(0x31, 0x03) => "SANITIZE COMMAND FAILED",
		(0x39, 0x00) => "SAVING PARAMETERS NOT SUPPORTED",
		(0x62, 0x00) => "SCAN HEAD POSITIONING ERROR",
		(0x29, 0x02) => "SCSI BUS RESET OCCURRED",
		(0x47, 0x00) => "SCSI PARITY ERROR",
		(0x47, 0x02) => "SCSI PARITY ERROR DETECTED DURING ST DATA PHASE",
		(0x54, 0x00) => "SCSI TO HOST SYSTEM INTERFACE FAILURE",
		(0x24, 0x04) => "SECURITY AUDIT VALUE FROZEN",
		(0x74, 0x79) => "SECURITY CONFLICT IN TRANSLATED DEVICE",
		(0x74, 0x00) => "SECURITY ERROR",
		(0x24, 0x05) => "SECURITY WORKING KEY FROZEN",
		(0x45, 0x00) => "SELECT OR RESELECT FAILURE",
		(0x3B, 0x00) => "SEQUENTIAL POSITIONING ERROR",
		(0x5D, 0x45) => "SERVO IMPENDING FAILURE ACCESS TIMES TOO HIGH",
		(0x5D, 0x47) => "SERVO IMPENDING FAILURE CHANNEL PARAMETRICS",
		(0x5D, 0x48) => "SERVO IMPENDING FAILURE CONTROLLER DETECTED",
		(0x5D, 0x42) => "SERVO IMPENDING FAILURE DATA ERROR RATE TOO HIGH",
		(0x5D, 0x4C) => "SERVO IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT",
		(0x5D, 0x41) => "SERVO IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH",
		(0x5D, 0x40) => "SERVO IMPENDING FAILURE GENERAL HARD DRIVE FAILURE",
		(0x5D, 0x43) => "SERVO IMPENDING FAILURE SEEK ERROR RATE TOO HIGH",
		(0x5D, 0x4A) => "SERVO IMPENDING FAILURE SEEK TIME PERFORMANCE",
		(0x5D, 0x4B) => "SERVO IMPENDING FAILURE SPIN-UP RETRY COUNT",
		(0x5D, 0x46) => "SERVO IMPENDING FAILURE START UNIT TIMES TOO HIGH",
		(0x5D, 0x49) => "SERVO IMPENDING FAILURE THROUGHPUT PERFORMANCE",
		(0x5D, 0x44) => "SERVO IMPENDING FAILURE TOO MANY BLOCK REASSIGNS",
		(0x72, 0x00) => "SESSION FIXATION ERROR",
		(0x72, 0x03) => "SESSION FIXATION ERROR - INCOMPLETE TRACK IN SESSION",
		(0x72, 0x01) => "SESSION FIXATION ERROR WRITING LEAD-IN",
		(0x72, 0x02) => "SESSION FIXATION ERROR WRITING LEAD-OUT",
		(0x00, 0x1B) => "SET CAPACITY OPERATION IN PROGRESS",
		(0x67, 0x0A) => "SET TARGET PORT GROUPS COMMAND FAILED",
		(0x00, 0x03) => "SETMARK DETECTED",
		(0x3B, 0x04) => "SLEW FAILURE",
		(0x47, 0x7F) => "SOME COMMANDS CLEARED BY ISCSI PROTOCOL EVENT",
		(0x27, 0x07) => "SPACE ALLOCATION FAILED WRITE PROTECT",
		(0x5D, 0x03) => "SPARE AREA EXHAUSTION PREDICTION THRESHOLD EXCEEDED",
		(0x3F, 0x08) => "SPARE CREATED OR MODIFIED",
		(0x3F, 0x09) => "SPARE DELETED",
		(0x5D, 0x55) => "SPINDLE IMPENDING FAILURE ACCESS TIMES TOO HIGH",
		(0x5D, 0x57) => "SPINDLE IMPENDING FAILURE CHANNEL PARAMETRICS",
		(0x5D, 0x58) => "SPINDLE IMPENDING FAILURE CONTROLLER DETECTED",
		(0x5D, 0x52) => "SPINDLE IMPENDING FAILURE DATA ERROR RATE TOO HIGH",
		(0x5D, 0x5C) => "SPINDLE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT",
		(0x5D, 0x51) => "SPINDLE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH",
		(0x5D, 0x50) => "SPINDLE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE",
		(0x5D, 0x53) => "SPINDLE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH",
		(0x5D, 0x5A) => "SPINDLE IMPENDING FAILURE SEEK TIME PERFORMANCE",
		(0x5D, 0x5B) => "SPINDLE IMPENDING FAILURE SPIN-UP RETRY COUNT",
		(0x5D, 0x56) => "SPINDLE IMPENDING FAILURE START UNIT TIMES TOO HIGH",
		(0x5D, 0x59) => "SPINDLE IMPENDING FAILURE THROUGHPUT PERFORMANCE",
		(0x5D, 0x54) => "SPINDLE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS",
		(0x09, 0x03) => "SPINDLE SERVO FAILURE",
		(0x5C, 0x02) => "SPINDLES NOT SYNCHRONIZED",
		(0x5C, 0x01) => "SPINDLES SYNCHRONIZED",
		(0x5E, 0x04) => "STANDBY CONDITION ACTIVATED BY COMMAND",
		(0x5E, 0x02) => "STANDBY CONDITION ACTIVATED BY TIMER",
		(0x5E, 0x0A) => "STANDBY_Y CONDITION ACTIVATED BY COMMAND",
		(0x5E, 0x09) => "STANDBY_Y CONDITION ACTIVATED BY TIMER",
		(0x6B, 0x00) => "STATE CHANGE HAS OCCURRED",
		(0x1B, 0x00) => "SYNCHRONOUS DATA TRANSFER ERROR",
		(0x55, 0x01) => "SYSTEM BUFFER FULL",
		(0x55, 0x00) => "SYSTEM RESOURCE FAILURE",
		(0x4D, _) => "TAGGED OVERLAPPED COMMANDS", // XXX task tag $_
		(0x33, 0x00) => "TAPE LENGTH ERROR",
		(0x3B, 0x03) => "TAPE OR ELECTRONIC VERTICAL FORMS UNIT NOT READY",
		(0x3B, 0x01) => "TAPE POSITION ERROR AT BEGINNING-OF-MEDIUM",
		(0x3B, 0x02) => "TAPE POSITION ERROR AT END-OF-MEDIUM",
		(0x3F, 0x00) => "TARGET OPERATING CONDITIONS HAVE CHANGED",
		(0x38, 0x07) => "THIN PROVISIONING SOFT THRESHOLD REACHED",
		(0x0D, 0x01) => "THIRD PARTY DEVICE FAILURE",
		(0x5B, 0x01) => "THRESHOLD CONDITION MET",
		(0x26, 0x03) => "THRESHOLD PARAMETERS NOT SUPPORTED",
		(0x3E, 0x02) => "TIMEOUT ON LOGICAL UNIT",
		(0x2A, 0x10) => "TIMESTAMP CHANGED",
		(0x26, 0x08) => "TOO MANY SEGMENT DESCRIPTORS",
		(0x26, 0x06) => "TOO MANY TARGET DESCRIPTORS",
		(0x2C, 0x01) => "TOO MANY WINDOWS SPECIFIED",
		(0x4B, 0x02) => "TOO MUCH WRITE DATA",
		(0x09, 0x00) => "TRACK FOLLOWING ERROR",
		(0x09, 0x01) => "TRACKING SERVO FAILURE",
		(0x29, 0x06) => "TRANSCEIVER MODE CHANGED TO LVD",
		(0x29, 0x05) => "TRANSCEIVER MODE CHANGED TO SINGLE-ENDED",
		(0x61, 0x01) => "UNABLE TO ACQUIRE VIDEO",
		(0x74, 0x01) => "UNABLE TO DECRYPT DATA",
		(0x74, 0x0C) => "UNABLE TO DECRYPT PARAMETER LIST",
		(0x57, 0x00) => "UNABLE TO RECOVER TABLE-OF-CONTENTS",
		(0x74, 0x02) => "UNENCRYPTED DATA ENCOUNTERED WHILE DECRYPTING",
		(0x26, 0x0A) => "UNEXPECTED INEXACT SEGMENT",
		(0x74, 0x06) => "UNKNOWN SIGNATURE VERIFICATION KEY",
		(0x53, 0x01) => "UNLOAD TAPE FAILURE",
		(0x08, 0x04) => "UNREACHABLE COPY TARGET",
		(0x11, 0x00) => "UNRECOVERED READ ERROR",
		(0x11, 0x04) => "UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED",
		(0x11, 0x0B) => "UNRECOVERED READ ERROR - RECOMMEND REASSIGNMENT",
		(0x11, 0x0C) => "UNRECOVERED READ ERROR - RECOMMEND REWRITE THE DATA",
		(0x46, 0x00) => "UNSUCCESSFUL SOFT RESET",
		(0x35, 0x01) => "UNSUPPORTED ENCLOSURE FUNCTION",
		(0x26, 0x09) => "UNSUPPORTED SEGMENT DESCRIPTOR TYPE CODE",
		(0x26, 0x07) => "UNSUPPORTED TARGET DESCRIPTOR TYPE CODE",
		(0x59, 0x00) => "UPDATED BLOCK READ",
		(0x26, 0x12) => "VENDOR SPECIFIC KEY REFERENCE NOT FOUND",
		(0x00, 0x1C) => "VERIFY OPERATION IN PROGRESS",
		(0x61, 0x00) => "VIDEO ACQUISITION ERROR",
		(0x65, 0x00) => "VOLTAGE FAULT",
		(0x53, 0x05) => "VOLUME IDENTIFIER INVALID",
		(0x53, 0x06) => "VOLUME IDENTIFIER MISSING",
		(0x3F, 0x0A) => "VOLUME SET CREATED OR MODIFIED",
		(0x3F, 0x0C) => "VOLUME SET DEASSIGNED",
		(0x3F, 0x0B) => "VOLUME SET DELETED",
		(0x3F, 0x0D) => "VOLUME SET REASSIGNED",
		(0x0B, 0x00) => "WARNING",
		(0x0B, 0x05) => "WARNING - BACKGROUND MEDIUM SCAN DETECTED MEDIUM ERROR",
		(0x0B, 0x04) => "WARNING - BACKGROUND PRE-SCAN DETECTED MEDIUM ERROR",
		(0x0B, 0x03) => "WARNING - BACKGROUND SELF-TEST FAILED",
		(0x0B, 0x07) => "WARNING - DEGRADED POWER TO NON-VOLATILE CACHE",
		(0x0B, 0x02) => "WARNING - ENCLOSURE DEGRADED",
		(0x0B, 0x06) => "WARNING - NON-VOLATILE CACHE NOW VOLATILE",
		(0x0B, 0x08) => "WARNING - POWER LOSS EXPECTED",
		(0x0B, 0x01) => "WARNING - SPECIFIED TEMPERATURE EXCEEDED",
		(0x30, 0x0D) => "WORM MEDIUM - INTEGRITY CHECK",
		(0x30, 0x0C) => "WORM MEDIUM - OVERWRITE ATTEMPTED",
		(0x50, 0x00) => "WRITE APPEND ERROR",
		(0x50, 0x01) => "WRITE APPEND POSITION ERROR",
		(0x0C, 0x00) => "WRITE ERROR",
		(0x0C, 0x02) => "WRITE ERROR - AUTO REALLOCATION FAILED",
		(0x0C, 0x09) => "WRITE ERROR - LOSS OF STREAMING",
		(0x0C, 0x0D) => "WRITE ERROR - NOT ENOUGH UNSOLICITED DATA",
		(0x0C, 0x0A) => "WRITE ERROR - PADDING BLOCKS ADDED",
		(0x0C, 0x03) => "WRITE ERROR - RECOMMEND REASSIGNMENT",
		(0x0C, 0x01) => "WRITE ERROR - RECOVERED WITH AUTO REALLOCATION",
		(0x0C, 0x08) => "WRITE ERROR - RECOVERY FAILED",
		(0x0C, 0x07) => "WRITE ERROR - RECOVERY NEEDED",
		(0x0C, 0x0C) => "WRITE ERROR - UNEXPECTED UNSOLICITED DATA",
		(0x27, 0x00) => "WRITE PROTECTED",
		(0x31, 0x02) => "ZONED FORMATTING FAILED DUE TO SPARE LINKING",

		(x, _) if x >= 0x80 => "(vendor-specific)",
		(_, x) if x >= 0x80 => "(vendor-specific)",

		_ => { return None; }
	})
}