Commit b4567ca6 authored by Douglas Gilbert's avatar Douglas Gilbert Committed by James Bottomley

[SCSI] update scsi/constants.c

It has been 3 years since this file was sync-ed with
www.t10.org . Information taken from the last bunch
of drafts released in May 2009. More asc/ascq codes
are coming for thin provisioning; when approved and
allocated another patch could add them prior to this
patch going live.

Changelog:
   - add some new command names and rename two commands
   - sync asc/ascq table with www.t10.org/lists/asc-num.txt
   - correct bug in scsi_extd_sense_format() [second
     for loop]
Signed-off-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 3edf2fb9
...@@ -4,8 +4,7 @@ ...@@ -4,8 +4,7 @@
* Additions for SCSI 2 and Linux 2.2.x by D. Gilbert (990422) * Additions for SCSI 2 and Linux 2.2.x by D. Gilbert (990422)
* Additions for SCSI 3+ (SPC-3 T10/1416-D Rev 07 3 May 2002) * Additions for SCSI 3+ (SPC-3 T10/1416-D Rev 07 3 May 2002)
* by D. Gilbert and aeb (20020609) * by D. Gilbert and aeb (20020609)
* Additions for SPC-3 T10/1416-D Rev 21 22 Sept 2004, D. Gilbert 20041025 * Update to SPC-4 T10/1713-D Rev 20, 22 May 2009, D. Gilbert 20090624
* Update to SPC-4 T10/1713-D Rev 5a, 14 June 2006, D. Gilbert 20060702
*/ */
#include <linux/blkdev.h> #include <linux/blkdev.h>
...@@ -56,9 +55,9 @@ static const char * cdb_byte0_names[] = { ...@@ -56,9 +55,9 @@ static const char * cdb_byte0_names[] = {
"Read Buffer", "Read Buffer",
/* 3d-3f */ "Update Block", "Read Long(10)", "Write Long(10)", /* 3d-3f */ "Update Block", "Read Long(10)", "Write Long(10)",
/* 40-41 */ "Change Definition", "Write Same(10)", /* 40-41 */ "Change Definition", "Write Same(10)",
/* 42-48 */ "Read sub-channel", "Read TOC/PMA/ATIP", "Read density support", /* 42-48 */ "Unmap/Read sub-channel", "Read TOC/PMA/ATIP",
"Play audio(10)", "Get configuration", "Play audio msf", "Read density support", "Play audio(10)", "Get configuration",
"Play audio track/index", "Play audio msf", "Play audio track/index",
/* 49-4f */ "Play track relative(10)", "Get event status notification", /* 49-4f */ "Play track relative(10)", "Get event status notification",
"Pause/resume", "Log Select", "Log Sense", "Stop play/scan", "Pause/resume", "Log Select", "Log Sense", "Stop play/scan",
NULL, NULL,
...@@ -71,12 +70,13 @@ static const char * cdb_byte0_names[] = { ...@@ -71,12 +70,13 @@ static const char * cdb_byte0_names[] = {
/* 60-67 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 60-67 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 68-6f */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 68-6f */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 70-77 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 70-77 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 78-7f */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, "Variable length", /* 78-7f */ NULL, NULL, NULL, NULL, NULL, NULL, "Extended CDB",
"Variable length",
/* 80-84 */ "Xdwrite(16)", "Rebuild(16)", "Regenerate(16)", "Extended copy", /* 80-84 */ "Xdwrite(16)", "Rebuild(16)", "Regenerate(16)", "Extended copy",
"Receive copy results", "Receive copy results",
/* 85-89 */ "ATA command pass through(16)", "Access control in", /* 85-89 */ "ATA command pass through(16)", "Access control in",
"Access control out", "Read(16)", "Memory Export Out(16)", "Access control out", "Read(16)", "Memory Export Out(16)",
/* 8a-8f */ "Write(16)", NULL, "Read attributes", "Write attributes", /* 8a-8f */ "Write(16)", "ORWrite", "Read attributes", "Write attributes",
"Write and verify(16)", "Verify(16)", "Write and verify(16)", "Verify(16)",
/* 90-94 */ "Pre-fetch(16)", "Synchronize cache(16)", /* 90-94 */ "Pre-fetch(16)", "Synchronize cache(16)",
"Lock/unlock cache(16)", "Write same(16)", NULL, "Lock/unlock cache(16)", "Write same(16)", NULL,
...@@ -107,22 +107,24 @@ struct value_name_pair { ...@@ -107,22 +107,24 @@ struct value_name_pair {
}; };
static const struct value_name_pair maint_in_arr[] = { static const struct value_name_pair maint_in_arr[] = {
{0x5, "Report device identifier"}, {0x5, "Report identifying information"},
{0xa, "Report target port groups"}, {0xa, "Report target port groups"},
{0xb, "Report aliases"}, {0xb, "Report aliases"},
{0xc, "Report supported operation codes"}, {0xc, "Report supported operation codes"},
{0xd, "Report supported task management functions"}, {0xd, "Report supported task management functions"},
{0xe, "Report priority"}, {0xe, "Report priority"},
{0xf, "Report timestamp"}, {0xf, "Report timestamp"},
{0x10, "Management protocol in"},
}; };
#define MAINT_IN_SZ ARRAY_SIZE(maint_in_arr) #define MAINT_IN_SZ ARRAY_SIZE(maint_in_arr)
static const struct value_name_pair maint_out_arr[] = { static const struct value_name_pair maint_out_arr[] = {
{0x6, "Set device identifier"}, {0x6, "Set identifying information"},
{0xa, "Set target port groups"}, {0xa, "Set target port groups"},
{0xb, "Change aliases"}, {0xb, "Change aliases"},
{0xe, "Set priority"}, {0xe, "Set priority"},
{0xe, "Set timestamp"}, {0xf, "Set timestamp"},
{0x10, "Management protocol out"},
}; };
#define MAINT_OUT_SZ ARRAY_SIZE(maint_out_arr) #define MAINT_OUT_SZ ARRAY_SIZE(maint_out_arr)
...@@ -412,6 +414,7 @@ static const struct error_info additional[] = ...@@ -412,6 +414,7 @@ static const struct error_info additional[] =
{0x0004, "Beginning-of-partition/medium detected"}, {0x0004, "Beginning-of-partition/medium detected"},
{0x0005, "End-of-data detected"}, {0x0005, "End-of-data detected"},
{0x0006, "I/O process terminated"}, {0x0006, "I/O process terminated"},
{0x0007, "Programmable early warning detected"},
{0x0011, "Audio play operation in progress"}, {0x0011, "Audio play operation in progress"},
{0x0012, "Audio play operation paused"}, {0x0012, "Audio play operation paused"},
{0x0013, "Audio play operation successfully completed"}, {0x0013, "Audio play operation successfully completed"},
...@@ -425,6 +428,7 @@ static const struct error_info additional[] = ...@@ -425,6 +428,7 @@ static const struct error_info additional[] =
{0x001B, "Set capacity operation in progress"}, {0x001B, "Set capacity operation in progress"},
{0x001C, "Verify operation in progress"}, {0x001C, "Verify operation in progress"},
{0x001D, "ATA pass through information available"}, {0x001D, "ATA pass through information available"},
{0x001E, "Conflicting SA creation request"},
{0x0100, "No index/sector signal"}, {0x0100, "No index/sector signal"},
...@@ -449,9 +453,12 @@ static const struct error_info additional[] = ...@@ -449,9 +453,12 @@ static const struct error_info additional[] =
{0x040B, "Logical unit not accessible, target port in standby state"}, {0x040B, "Logical unit not accessible, target port in standby state"},
{0x040C, "Logical unit not accessible, target port in unavailable " {0x040C, "Logical unit not accessible, target port in unavailable "
"state"}, "state"},
{0x040D, "Logical unit not ready, structure check required"},
{0x0410, "Logical unit not ready, auxiliary memory not accessible"}, {0x0410, "Logical unit not ready, auxiliary memory not accessible"},
{0x0411, "Logical unit not ready, notify (enable spinup) required"}, {0x0411, "Logical unit not ready, notify (enable spinup) required"},
{0x0412, "Logical unit not ready, offline"}, {0x0412, "Logical unit not ready, offline"},
{0x0413, "Logical unit not ready, SA creation in progress"},
{0x0414, "Logical unit not ready, space allocation in progress"},
{0x0500, "Logical unit does not respond to selection"}, {0x0500, "Logical unit does not respond to selection"},
...@@ -479,6 +486,9 @@ static const struct error_info additional[] = ...@@ -479,6 +486,9 @@ static const struct error_info additional[] =
{0x0B03, "Warning - background self-test failed"}, {0x0B03, "Warning - background self-test failed"},
{0x0B04, "Warning - background pre-scan detected medium error"}, {0x0B04, "Warning - background pre-scan detected medium error"},
{0x0B05, "Warning - background medium scan detected medium error"}, {0x0B05, "Warning - background medium scan detected medium error"},
{0x0B06, "Warning - non-volatile cache now volatile"},
{0x0B07, "Warning - degraded power to non-volatile cache"},
{0x0B08, "Warning - power loss expected"},
{0x0C00, "Write error"}, {0x0C00, "Write error"},
{0x0C01, "Write error - recovered with auto reallocation"}, {0x0C01, "Write error - recovered with auto reallocation"},
...@@ -593,6 +603,7 @@ static const struct error_info additional[] = ...@@ -593,6 +603,7 @@ static const struct error_info additional[] =
{0x1C02, "Grown defect list not found"}, {0x1C02, "Grown defect list not found"},
{0x1D00, "Miscompare during verify operation"}, {0x1D00, "Miscompare during verify operation"},
{0x1D01, "Miscompare verify of unmapped LBA"},
{0x1E00, "Recovered id with ECC correction"}, {0x1E00, "Recovered id with ECC correction"},
...@@ -626,6 +637,7 @@ static const struct error_info additional[] = ...@@ -626,6 +637,7 @@ static const struct error_info additional[] =
{0x2405, "Security working key frozen"}, {0x2405, "Security working key frozen"},
{0x2406, "Nonce not unique"}, {0x2406, "Nonce not unique"},
{0x2407, "Nonce timestamp out of range"}, {0x2407, "Nonce timestamp out of range"},
{0x2408, "Invalid XCDB"},
{0x2500, "Logical unit not supported"}, {0x2500, "Logical unit not supported"},
...@@ -656,10 +668,12 @@ static const struct error_info additional[] = ...@@ -656,10 +668,12 @@ static const struct error_info additional[] =
{0x2704, "Persistent write protect"}, {0x2704, "Persistent write protect"},
{0x2705, "Permanent write protect"}, {0x2705, "Permanent write protect"},
{0x2706, "Conditional write protect"}, {0x2706, "Conditional write protect"},
{0x2707, "Space allocation failed write protect"},
{0x2800, "Not ready to ready change, medium may have changed"}, {0x2800, "Not ready to ready change, medium may have changed"},
{0x2801, "Import or export element accessed"}, {0x2801, "Import or export element accessed"},
{0x2802, "Format-layer may have changed"}, {0x2802, "Format-layer may have changed"},
{0x2803, "Import/export element accessed, medium changed"},
{0x2900, "Power on, reset, or bus device reset occurred"}, {0x2900, "Power on, reset, or bus device reset occurred"},
{0x2901, "Power on occurred"}, {0x2901, "Power on occurred"},
...@@ -680,11 +694,16 @@ static const struct error_info additional[] = ...@@ -680,11 +694,16 @@ static const struct error_info additional[] =
{0x2A07, "Implicit asymmetric access state transition failed"}, {0x2A07, "Implicit asymmetric access state transition failed"},
{0x2A08, "Priority changed"}, {0x2A08, "Priority changed"},
{0x2A09, "Capacity data has changed"}, {0x2A09, "Capacity data has changed"},
{0x2A0A, "Error history I_T nexus cleared"},
{0x2A0B, "Error history snapshot released"},
{0x2A0C, "Error recovery attributes have changed"},
{0x2A0D, "Data encryption capabilities changed"},
{0x2A10, "Timestamp changed"}, {0x2A10, "Timestamp changed"},
{0x2A11, "Data encryption parameters changed by another i_t nexus"}, {0x2A11, "Data encryption parameters changed by another i_t nexus"},
{0x2A12, "Data encryption parameters changed by vendor specific " {0x2A12, "Data encryption parameters changed by vendor specific "
"event"}, "event"},
{0x2A13, "Data encryption key instance counter has changed"}, {0x2A13, "Data encryption key instance counter has changed"},
{0x2A14, "SA creation capabilities data has changed"},
{0x2B00, "Copy cannot execute since host cannot disconnect"}, {0x2B00, "Copy cannot execute since host cannot disconnect"},
...@@ -723,6 +742,8 @@ static const struct error_info additional[] = ...@@ -723,6 +742,8 @@ static const struct error_info additional[] =
{0x300C, "WORM medium - overwrite attempted"}, {0x300C, "WORM medium - overwrite attempted"},
{0x300D, "WORM medium - integrity check"}, {0x300D, "WORM medium - integrity check"},
{0x3010, "Medium not formatted"}, {0x3010, "Medium not formatted"},
{0x3011, "Incompatible volume type"},
{0x3012, "Incompatible volume qualifier"},
{0x3100, "Medium format corrupted"}, {0x3100, "Medium format corrupted"},
{0x3101, "Format command failed"}, {0x3101, "Format command failed"},
...@@ -782,6 +803,10 @@ static const struct error_info additional[] = ...@@ -782,6 +803,10 @@ static const struct error_info additional[] =
{0x3B15, "Medium magazine unlocked"}, {0x3B15, "Medium magazine unlocked"},
{0x3B16, "Mechanical positioning or changer error"}, {0x3B16, "Mechanical positioning or changer error"},
{0x3B17, "Read past end of user object"}, {0x3B17, "Read past end of user object"},
{0x3B18, "Element disabled"},
{0x3B19, "Element enabled"},
{0x3B1A, "Data transfer device removed"},
{0x3B1B, "Data transfer device inserted"},
{0x3D00, "Invalid bits in identify message"}, {0x3D00, "Invalid bits in identify message"},
...@@ -882,6 +907,8 @@ static const struct error_info additional[] = ...@@ -882,6 +907,8 @@ static const struct error_info additional[] =
{0x5506, "Auxiliary memory out of space"}, {0x5506, "Auxiliary memory out of space"},
{0x5507, "Quota error"}, {0x5507, "Quota error"},
{0x5508, "Maximum number of supplemental decryption keys exceeded"}, {0x5508, "Maximum number of supplemental decryption keys exceeded"},
{0x5509, "Medium auxiliary memory not accessible"},
{0x550A, "Data currently unavailable"},
{0x5700, "Unable to recover table-of-contents"}, {0x5700, "Unable to recover table-of-contents"},
...@@ -993,6 +1020,12 @@ static const struct error_info additional[] = ...@@ -993,6 +1020,12 @@ static const struct error_info additional[] =
{0x5E02, "Standby condition activated by timer"}, {0x5E02, "Standby condition activated by timer"},
{0x5E03, "Idle condition activated by command"}, {0x5E03, "Idle condition activated by command"},
{0x5E04, "Standby condition activated by command"}, {0x5E04, "Standby condition activated by command"},
{0x5E05, "Idle_b condition activated by timer"},
{0x5E06, "Idle_b condition activated by command"},
{0x5E07, "Idle_c condition activated by timer"},
{0x5E08, "Idle_c condition activated by command"},
{0x5E09, "Standby_y condition activated by timer"},
{0x5E0A, "Standby_y condition activated by command"},
{0x5E41, "Power state change to active"}, {0x5E41, "Power state change to active"},
{0x5E42, "Power state change to idle"}, {0x5E42, "Power state change to idle"},
{0x5E43, "Power state change to standby"}, {0x5E43, "Power state change to standby"},
...@@ -1091,7 +1124,28 @@ static const struct error_info additional[] = ...@@ -1091,7 +1124,28 @@ static const struct error_info additional[] =
{0x7403, "Incorrect data encryption key"}, {0x7403, "Incorrect data encryption key"},
{0x7404, "Cryptographic integrity validation failed"}, {0x7404, "Cryptographic integrity validation failed"},
{0x7405, "Error decrypting data"}, {0x7405, "Error decrypting data"},
{0x7406, "Unknown signature verification key"},
{0x7407, "Encryption parameters not useable"},
{0x7408, "Digital signature validation failure"},
{0x7409, "Encryption mode mismatch on read"},
{0x740A, "Encrypted block not raw read enabled"},
{0x740B, "Incorrect Encryption parameters"},
{0x740C, "Unable to decrypt parameter list"},
{0x740D, "Encryption algorithm disabled"},
{0x7410, "SA creation parameter value invalid"},
{0x7411, "SA creation parameter value rejected"},
{0x7412, "Invalid SA usage"},
{0x7421, "Data Encryption configuration prevented"},
{0x7430, "SA creation parameter not supported"},
{0x7440, "Authentication failed"},
{0x7461, "External data encryption key manager access error"},
{0x7462, "External data encryption key manager error"},
{0x7463, "External data encryption key not found"},
{0x7464, "External data encryption request not authorized"},
{0x746E, "External data encryption control timeout"},
{0x746F, "External data encryption control error"},
{0x7471, "Logical unit access not authorized"}, {0x7471, "Logical unit access not authorized"},
{0x7479, "Security conflict in translated device"},
{0, NULL} {0, NULL}
}; };
...@@ -1103,12 +1157,12 @@ struct error_info2 { ...@@ -1103,12 +1157,12 @@ struct error_info2 {
static const struct error_info2 additional2[] = static const struct error_info2 additional2[] =
{ {
{0x40,0x00,0x7f,"Ram failure (%x)"}, {0x40, 0x00, 0x7f, "Ram failure (%x)"},
{0x40,0x80,0xff,"Diagnostic failure on component (%x)"}, {0x40, 0x80, 0xff, "Diagnostic failure on component (%x)"},
{0x41,0x00,0xff,"Data path failure (%x)"}, {0x41, 0x00, 0xff, "Data path failure (%x)"},
{0x42,0x00,0xff,"Power-on or self-test failure (%x)"}, {0x42, 0x00, 0xff, "Power-on or self-test failure (%x)"},
{0x4D,0x00,0xff,"Tagged overlapped commands (queue tag %x)"}, {0x4D, 0x00, 0xff, "Tagged overlapped commands (task tag %x)"},
{0x70,0x00,0xff,"Decompression exception short algorithm id of %x"}, {0x70, 0x00, 0xff, "Decompression exception short algorithm id of %x"},
{0, 0, 0, NULL} {0, 0, 0, NULL}
}; };
...@@ -1157,14 +1211,15 @@ scsi_extd_sense_format(unsigned char asc, unsigned char ascq) { ...@@ -1157,14 +1211,15 @@ scsi_extd_sense_format(unsigned char asc, unsigned char ascq) {
int i; int i;
unsigned short code = ((asc << 8) | ascq); unsigned short code = ((asc << 8) | ascq);
for (i=0; additional[i].text; i++) for (i = 0; additional[i].text; i++)
if (additional[i].code12 == code) if (additional[i].code12 == code)
return additional[i].text; return additional[i].text;
for (i=0; additional2[i].fmt; i++) for (i = 0; additional2[i].fmt; i++) {
if (additional2[i].code1 == asc && if (additional2[i].code1 == asc &&
additional2[i].code2_min >= ascq && ascq >= additional2[i].code2_min &&
additional2[i].code2_max <= ascq) ascq <= additional2[i].code2_max)
return additional2[i].fmt; return additional2[i].fmt;
}
#endif #endif
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment