# Key Code Qualifier

Key Code Qualifier is an error-code returned by a SCSI device.
When a SCSI target device returns a check condition in response to a command, the initiator usually then issues a SCSI Request Sense command. This process is part of a SCSI protocol called Contingent Allegiance Condition. The target will respond to the Request Sense command with a set of SCSI sense data which includes three fields giving increasing levels of detail about the error:
* K - sense key - 4 bits, (byte 2 of Fixed sense data format)
* C - additional sense code (ASC) - 8 bits, (byte 12 of Fixed sense data format)
* Q - additional sense code qualifier (ASCQ) - 8 bits, (byte 13 of Fixed sense data format)
The initiator can take action based on just the K field which indicates if the error is minor or major. However all three fields are usually logically combined into a 20 bit field called Key Code Qualifier or KCQ. The specification for the target device will define the list of possible KCQ values. In practice there are many KCQ values which are common between different SCSI device types and different SCSI device vendors. Common values are listed below, you should consult your hardware specific documentation as well.

## List of common SCSI KCQs

| Category | Key | ASC | ASCQ | Error Condition |
| No Sense | 0 | 00 | 00 | No error |
| No Sense | 0 | 5D | 00 | No sense - PFA threshold reached |
| Soft Error | 1 | 01 | 00 | Recovered Write error - no index |
| Soft Error | 1 | 02 | 00 | Recovered no seek completion |
| Soft Error | 1 | 03 | 00 | Recovered Write error - write fault |
| Soft Error | 1 | 09 | 00 | Track following error |
| Soft Error | 1 | 0B | 01 | Temperature warning |
| Soft Error | 1 | 0C | 01 | Recovered Write error with auto-realloc - reallocated |
| Soft Error | 1 | 0C | 03 | Recovered Write error - recommend reassign |
| Soft Error | 1 | 12 | 01 | Recovered data without ECC using prev logical block ID |
| Soft Error | 1 | 12 | 02 | Recovered data with ECC using prev logical block ID |
| Soft Error | 1 | 14 | 01 | Recovered Record Not Found |
| Soft Error | 1 | 16 | 00 | Recovered Write error - Data Sync Mark Error |
| Soft Error | 1 | 16 | 01 | Recovered Write error - Data Sync Error - data rewritten |
| Soft Error | 1 | 16 | 02 | Recovered Write error - Data Sync Error - recommend rewrite |
| Soft Error | 1 | 16 | 03 | Recovered Write error - Data Sync Error - data auto-reallocated |
| Soft Error | 1 | 16 | 04 | Recovered Write error - Data Sync Error - recommend reassignment |
| Soft Error | 1 | 17 | 00 | Recovered data with no error correction applied |
| Soft Error | 1 | 17 | 01 | Recovered Read error - with retries |
| Soft Error | 1 | 17 | 02 | Recovered data using positive offset |
| Soft Error | 1 | 17 | 03 | Recovered data using negative offset |
| Soft Error | 1 | 17 | 05 | Recovered data using previous logical block ID |
| Soft Error | 1 | 17 | 06 | Recovered Read error - without ECC, auto reallocated |
| Soft Error | 1 | 17 | 07 | Recovered Read error - without ECC, recommend reassign |
| Soft Error | 1 | 17 | 08 | Recovered Read error - without ECC, recommend rewrite |
| Soft Error | 1 | 17 | 09 | Recovered Read error - without ECC, data rewritten |
| Soft Error | 1 | 18 | 00 | Recovered Read error - with ECC |
| Soft Error | 1 | 18 | 01 | Recovered data with ECC and retries |
| Soft Error | 1 | 18 | 02 | Recovered Read error - with ECC, auto reallocated |
| Soft Error | 1 | 18 | 05 | Recovered Read error - with ECC, recommend reassign |
| Soft Error | 1 | 18 | 06 | Recovered data using ECC and offsets |
| Soft Error | 1 | 18 | 07 | Recovered Read error - with ECC, data rewritten |
| Soft Error | 1 | 1C | 00 | Defect List not found |
| Soft Error | 1 | 1C | 01 | Primary defect list not found |
| Soft Error | 1 | 1C | 02 | Grown defect list not found |
| Soft Error | 1 | 1F | 00 | Partial defect list transferred |
| Soft Error | 1 | 44 | 00 | Internal target failure |
| Soft Error | 1 | 5D | 00 | PFA threshold reached |
| Not Ready | 2 | 04 | 00 | Not Ready - Cause not reportable. |
| Not Ready | 2 | 04 | 01 | Not Ready - becoming ready |
| Not Ready | 2 | 04 | 02 | Not Ready - need initialise command (start unit) |
| Not Ready | 2 | 04 | 03 | Not Ready - manual intervention required |
| Not Ready | 2 | 04 | 04 | Not Ready - format in progress |
| Not Ready | 2 | 04 | 09 | Not Ready - self-test in progress |
| Not Ready | 2 | 31 | 00 | Not Ready - medium format corrupted |
| Not Ready | 2 | 31 | 01 | Not Ready - format command failed |
| Not Ready | 2 | 35 | 02 | Not Ready - enclosure services unavailable |
| Not Ready | 2 | 3A | 00 | Not Ready - medium not present |
| Not Ready | 2 | 3A | 01 | Not Ready - medium not present - tray closed |
| Not Ready | 2 | 3A | 02 | Not Ready - medium not present - tray open |
| Not Ready | 2 | 3A | 03 | Not Ready - medium not present - loadable |
| Not Ready | 2 | 3A | 04 | Not Ready - medium not present - medium auxiliary memory accessible |
| Not Ready | 2 | 4C | 00 | Diagnostic Failure - config not loaded |
| Medium Error | 3 | 02 | 00 | Medium Error - No Seek Complete |
| Medium Error | 3 | 03 | 00 | Medium Error - write fault |
| Medium Error | 3 | 10 | 00 | Medium Error - ID CRC error |
| Medium Error | 3 | 11 | 00 | Medium Error - unrecovered read error |
| Medium Error | 3 | 11 | 01 | Medium Error - read retries exhausted |
| Medium Error | 3 | 11 | 02 | Medium Error - error too long to correct |
| Medium Error | 3 | 11 | 04 | Medium Error - unrecovered read error - auto re-alloc failed |
| Medium Error | 3 | 11 | 0B | Medium Error - unrecovered read error - recommend reassign |
| Medium Error | 3 | 14 | 01 | Medium Error - record not found |
| Medium Error | 3 | 16 | 00 | Medium Error - Data Sync Mark error |
| Medium Error | 3 | 16 | 04 | Medium Error - Data Sync Error - recommend reassign |
| Medium Error | 3 | 19 | 00 | Medium Error - defect list error |
| Medium Error | 3 | 19 | 01 | Medium Error - defect list not available |
| Medium Error | 3 | 19 | 02 | Medium Error - defect list error in primary list |
| Medium Error | 3 | 19 | 03 | Medium Error - defect list error in grown list |
| Medium Error | 3 | 19 | 0E | Medium Error - fewer than 50% defect list copies |
| Medium Error | 3 | 31 | 00 | Medium Error - medium format corrupted |
| Medium Error | 3 | 31 | 01 | Medium Error - format command failed |
| Hardware Error | 4 | 01 | 00 | Hardware Error - no index or sector |
| Hardware Error | 4 | 02 | 00 | Hardware Error - no seek complete |
| Hardware Error | 4 | 03 | 00 | Hardware Error - write fault |
| Hardware Error | 4 | 09 | 00 | Hardware Error - track following error |
| Hardware Error | 4 | 11 | 00 | Hardware Error - unrecovered read error in reserved area |
| Hardware Error | 4 | 15 | 01 | Hardware Error - Mechanical positioning error |
| Hardware Error | 4 | 16 | 00 | Hardware Error - Data Sync Mark error in reserved area |
| Hardware Error | 4 | 19 | 00 | Hardware Error - defect list error |
| Hardware Error | 4 | 19 | 02 | Hardware Error - defect list error in Primary List |
| Hardware Error | 4 | 19 | 03 | Hardware Error - defect list error in Grown List |
| Hardware Error | 4 | 32 | 00 | Hardware Error - no defect spare available |
| Hardware Error | 4 | 35 | 00 | Hardware Error - enclosure services failure |
| Hardware Error | 4 | 35 | 01 | Hardware Error - unsupported enclosure function |
| Hardware Error | 4 | 35 | 02 | Hardware Error - enclosure services unavailable |
| Hardware Error | 4 | 35 | 03 | Hardware Error - enclosure services transfer failure |
| Hardware Error | 4 | 35 | 04 | Hardware Error - enclosure services refused |
| Hardware Error | 4 | 35 | 05 | Hardware Error - enclosure services checksum error |
| Hardware Error | 4 | 3E | 00 | Hardware Error - logical unit has not self configured yet |
| Hardware Error | 4 | 3E | 01 | Hardware Error - logical unit failed |
| Hardware Error | 4 | 3E | 02 | Hardware Error - timeout on logical unit |
| Hardware Error | 4 | 3E | 03 | Hardware Error - self-test failed |
| Hardware Error | 4 | 3E | 04 | Hardware Error - unable to update self-test log |
| Hardware Error | 4 | 44 | 00 | Hardware Error - internal target failure |
| Illegal Request | 5 | 1A | 00 | Illegal Request - parm list length error |
| Illegal Request | 5 | 20 | 00 | Illegal Request - invalid/unsupported command code |
| Illegal Request | 5 | 21 | 00 | Illegal Request - LBA out of range |
| Illegal Request | 5 | 24 | 00 | Illegal Request - invalid field in CDB (Command Descriptor Block) |
| Illegal Request | 5 | 25 | 00 | Illegal Request - invalid LUN |
| Illegal Request | 5 | 26 | 00 | Illegal Request - invalid fields in parm list |
| Illegal Request | 5 | 26 | 01 | Illegal Request - parameter not supported |
| Illegal Request | 5 | 26 | 02 | Illegal Request - invalid parm value |
| Illegal Request | 5 | 26 | 03 | Illegal Request - invalid field parameter - threshold parameter |
| Illegal Request | 5 | 26 | 04 | Illegal Request - invalid release of persistent reservation |
| Illegal Request | 5 | 2C | 00 | Illegal Request - command sequence error |
| Illegal Request | 5 | 35 | 01 | Illegal Request - unsupported enclosure function |
| Illegal Request | 5 | 49 | 00 | Illegal Request - invalid message |
| Illegal Request | 5 | 53 | 00 | Illegal Request - media load or eject failed |
| Illegal Request | 5 | 53 | 01 | Illegal Request - unload tape failure |
| Illegal Request | 5 | 53 | 02 | Illegal Request - medium removal prevented |
| Illegal Request | 5 | 55 | 00 | Illegal Request - system resource failure |
| Illegal Request | 5 | 55 | 01 | Illegal Request - system buffer full |
| Illegal Request | 5 | 55 | 04 | Illegal Request - Insufficient Registration Resources |
| Unit Attention | 6 | 28 | 00 | Unit Attention - not-ready to ready transition (format complete) |
| Unit Attention | 6 | 29 | 00 | Unit Attention - POR or device reset occurred |
| Unit Attention | 6 | 29 | 01 | Unit Attention - POR occurred |
| Unit Attention | 6 | 29 | 02 | Unit Attention - SCSI bus reset occurred |
| Unit Attention | 6 | 29 | 03 | Unit Attention - TARGET RESET occurred |
| Unit Attention | 6 | 29 | 04 | Unit Attention - self-initiated-reset occurred |
| Unit Attention | 6 | 29 | 05 | Unit Attention - transceiver mode change to SE |
| Unit Attention | 6 | 29 | 06 | Unit Attention - transceiver mode change to LVD |
| Unit Attention | 6 | 2A | 00 | Unit Attention - parameters changed |
| Unit Attention | 6 | 2A | 01 | Unit Attention - mode parameters changed |
| Unit Attention | 6 | 2A | 02 | Unit Attention - log select parms changed |
| Unit Attention | 6 | 2A | 03 | Unit Attention - Reservations pre-empted |
| Unit Attention | 6 | 2A | 04 | Unit Attention - Reservations released |
| Unit Attention | 6 | 2A | 05 | Unit Attention - Registrations pre-empted |
| Unit Attention | 6 | 2F | 00 | Unit Attention - commands cleared by another initiator |
| Unit Attention | 6 | 3F | 00 | Unit Attention - target operating conditions have changed |
| Unit Attention | 6 | 3F | 01 | Unit Attention - microcode changed |
| Unit Attention | 6 | 3F | 02 | Unit Attention - changed operating definition |
| Unit Attention | 6 | 3F | 03 | Unit Attention - inquiry parameters changed |
| Unit Attention | 6 | 3F | 04 | Unit Attention - component device attached |
| Unit Attention | 6 | 3F | 05 | Unit Attention - device identifier changed |
| Unit Attention | 6 | 3F | 06 | Unit Attention - redundancy group created or modified |
| Unit Attention | 6 | 3F | 07 | Unit Attention - redundancy group deleted |
| Unit Attention | 6 | 3F | 08 | Unit Attention - spare created or modified |
| Unit Attention | 6 | 3F | 09 | Unit Attention - spare deleted |
| Unit Attention | 6 | 3F | 0A | Unit Attention - volume set created or modified |
| Unit Attention | 6 | 3F | 0B | Unit Attention - volume set deleted |
| Unit Attention | 6 | 3F | 0C | Unit Attention - volume set deassigned |
| Unit Attention | 6 | 3F | 0D | Unit Attention - volume set reassigned |
| Unit Attention | 6 | 3F | 0E | Unit Attention - reported LUNs data has changed |
| Unit Attention | 6 | 3F | 0F | Unit Attention - echo buffer overwritten |
| Unit Attention | 6 | 3F | 10 | Unit Attention - medium loadable |
| Unit Attention | 6 | 3F | 11 | Unit Attention - medium auxiliary memory accessible |
| Unit Attention | 6 | 3F | 12 | Unit Attention - iSCSI IP address added |
| Unit Attention | 6 | 3F | 13 | Unit Attention - iSCSI IP address removed |
| Unit Attention | 6 | 3F | 14 | Unit Attention - iSCSI IP address changed |
| Unit Attention | 6 | 3F | 15 | Unit Attention - inspect referrals sense descriptors |
| Unit Attention | 6 | 3F | 16 | Unit Attention - microcode has been changed without reset |
| Unit Attention | 6 | 3F | 17 | Unit Attention - zone transition to full |
| Unit Attention | 6 | 3F | 18 | Unit Attention - bind completed |
| Unit Attention | 6 | 3F | 19 | Unit Attention - bind redirected |
| Unit Attention | 6 | 3F | 1A | Unit Attention - subsidiary binding changed |
| Unit Attention | 6 | 5D | 00 | Unit Attention - PFA threshold reached |
| Data Protect | 7 | 20 | 02 | Access Denied - No Access Rights |
| Data Protect | 7 | 27 | 00 | Write Protect - command not allowed |
| Aborted Command | B | 00 | 00 | Aborted Command - no additional sense code |
| Aborted Command | B | 1B | 00 | Aborted Command - sync data transfer error (extra ACK) |
| Aborted Command | B | 25 | 00 | Aborted Command - unsupported LUN |
| Aborted Command | B | 3F | 0F | Aborted Command - echo buffer overwritten |
| Aborted Command | B | 43 | 00 | Aborted Command - message reject error |
| Aborted Command | B | 44 | 00 | Aborted Command - internal target failure |
| Aborted Command | B | 45 | 00 | Aborted Command - Selection/Reselection failure |
| Aborted Command | B | 47 | 00 | Aborted Command - SCSI parity error |
| Aborted Command | B | 48 | 00 | Aborted Command - initiator-detected error message received |
| Aborted Command | B | 49 | 00 | Aborted Command - inappropriate/illegal message |
| Aborted Command | B | 55 | 03 | Aborted Command - insufficient resources |
| Aborted Command | B | 4B | 00 | Aborted Command - data phase error |
| Aborted Command | B | 4E | 00 | Aborted Command - overlapped commands attempted |
| Aborted Command | B | 4F | 00 | Aborted Command - due to loop initialisation |
| Other | E | 1D | 00 | Miscompare - during verify byte check operation |
| Other | x | 05 | 00 | Illegal request |
| Other | x | 06 | 00 | Unit attention |
| Other | x | 07 | 00 | Data protect |
| Other | x | 08 | 00 | LUN communication failure |
| Other | x | 08 | 01 | LUN communication timeout |
| Other | x | 08 | 02 | LUN communication parity error |
| Other | x | 08 | 03 | LUN communication CRC error |
| Other | x | 09 | 00 | vendor specific sense key |
| Other | x | 09 | 01 | servo fault |
| Other | x | 09 | 04 | head select fault |
| Other | x | 0A | 00 | error log overflow |
| Other | x | 0B | 00 | aborted command |
| Other | x | 0C | 00 | write error |
| Other | x | 0C | 02 | write error - auto-realloc failed |
| Other | x | 0E | 00 | data miscompare |
| Other | x | 12 | 00 | address mark not found for ID field |
| Other | x | 14 | 00 | logical block not found |
| Other | x | 15 | 00 | random positioning error |
| Other | x | 15 | 01 | mechanical positioning error |
| Other | x | 15 | 02 | positioning error detected by read of medium |
| Other | x | 27 | 00 | write protected |
| Other | x | 29 | 00 | POR or bus reset occurred |
| Other | x | 31 | 01 | format failed |
| Other | x | 32 | 01 | defect list update error |
| Other | x | 32 | 02 | no spares available |
| Other | x | 35 | 01 | unspecified enclosure services failure |
| Other | x | 37 | 00 | parameter rounded |
| Other | x | 3D | 00 | invalid bits in identify message |
| Other | x | 3E | 00 | LUN not self-configured yet |
| Other | x | 40 | 01 | DRAM parity error |
| Other | x | 40 | 02 | DRAM parity error |
| Other | x | 42 | 00 | power-on or self-test failure |
| Other | x | 4C | 00 | LUN failed self-configuration |
| Other | x | 5C | 00 | RPL status change |
| Other | x | 5C | 01 | spindles synchronised |
| Other | x | 5C | 02 | spindles not synchronised |
| Other | x | 65 | 00 | voltage fault |
| Other | x | ≥80 | x | Vendor specific |
| Other | x | x | ≥80 | Vendor specific |