--- np2/cbus/atapicmd.h 2004/03/19 03:36:52 1.1 +++ np2/cbus/atapicmd.h 2005/03/05 06:02:28 1.2 @@ -1,6 +1,47 @@ #if defined(SUPPORT_IDEIO) +// sense key +enum { + ATAPI_SK_NO_SENSE = 0x00, + ATAPI_SK_RECOVERED_ERROR = 0x01, + ATAPI_SK_NOT_READY = 0x02, + ATAPI_SK_MEDIUM_ERROR = 0x03, + ATAPI_SK_HARDWARE_ERROR = 0x04, + ATAPI_SK_ILLEGAL_REQUEST = 0x05, + ATAPI_SK_UNIT_ATTENTIOn = 0x06, + ATAPI_SK_DATA_PROTECT = 0x07, + ATAPI_SK_ABORTED_COMMAND = 0x0b, + ATAPI_SK_MISCOMPARE = 0x0e, + ATAPI_SK_MAX +}; + +#define ATAPI_SENSE_KEY_SHIFT 4 +#define ATAPI_SENSE_KEY_MASK 0xf0 +#define ATAPI_SET_SENSE_KEY(drv, sensekey) \ +do { \ + (drv)->error &= ~ATAPI_SENSE_KEY_MASK; \ + (drv)->error |= (sensekey) << ATAPI_SENSE_KEY_SHIFT; \ + (drv)->sk = (sensekey); \ +} while (/*CONSTCOND*/ 0) + + +// additional sense code (ASC) & ASC Qualifier (ASCQ) +enum { + ATAPI_ASC_NO_ADDITIONAL_SENSE_INFORMATION = 0x0000, + ATAPI_ASC_PARAMETER_LIST_LENGTH_ERROR = 0x001a, + ATAPI_ASC_INVALID_COMMAND_OPERATION_CODE = 0x0020, + ATAPI_ASC_INVALID_FIELD_IN_CDB = 0x0024, + ATAPI_ASC_NOT_READY_TO_READY_TRANSITION = 0x0028, + ATAPI_ASC_POWER_ON_RESET_OR_BUS_DEVICE_RESET_OCCURRED = 0x0029, + ATAPI_ASC_SAVING_PARAMETERS_NOT_SUPPORTED = 0x0039, + ATAPI_ASC_MEDIUM_NOT_PRESENT = 0x003a, + ATAPI_ASC_MEDIUM_NOT_PRESENT_TRAY_CLOSED = 0x013a, + ATAPI_ASC_MEDIUM_NOT_PRESENT_TRAY_OPEN = 0x023a, + ATAPI_ASC_MAX +}; + + #ifdef __cplusplus extern "C" { #endif @@ -11,5 +52,5 @@ void atapicmd_a0(IDEDRV drv); } #endif -#endif +#endif /* SUPPORT_IDEIO */