diff --git a/include/cdio/mmc.h b/include/cdio/mmc.h index ac8f3964..bb1186fa 100644 --- a/include/cdio/mmc.h +++ b/include/cdio/mmc.h @@ -35,9 +35,17 @@ extern "C" { #endif /* __cplusplus */ -/* On GNU/Linux see */ -#ifndef __BIG_ENDIAN_BITFIELD -#define __MMC_BIG_ENDIAN_BITFIELD +/* On GNU/Linux see and + +*/ +#ifdef WORDS_BIGENDIAN +# if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD) +# define __MMC_BIG_ENDIAN_BITFIELD +# endif +#else +# if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD) +# define __MMC_LITTLE_ENDIAN_BITFIELD +# endif #endif /** @@ -99,11 +107,11 @@ extern "C" { MMC_SENSE_KEY_ILLEGAL_REQUEST = 5, MMC_SENSE_KEY_UNIT_ATTENTION = 6, MMC_SENSE_KEY_DATA_PROTECT = 7, - MMC_SENSE_KEY_FIRMWARE_ERROR = 9, + MMC_SENSE_KEY_BLANK_CHECK = 8, + MMC_SENSE_KEY_VENDOR_SPECIFIC = 9, + MMC_SENSE_KEY_COPY_ABORTED = 10, MMC_SENSE_KEY_ABORTED_COMMAND = 11, - MMC_SENSE_KEY_EQUAL = 12, - MMC_SENSE_KEY_VOLUME_OVERFLOW = 13, - MMC_SENSE_KEY_MISCOMPARE = 14, + MMC_SENSE_KEY_OBSOLTE = 12, } mmc_sense_key_t; /** @@ -1016,7 +1024,7 @@ mmc_audio_read_subchannel (CdIo_t *p_cdio, 0 in case of no sense bytes available, <0 in case of internal error. */ - int mmc_last_cmd_sense ( const CdIo_t *p_cdio, unsigned char **sense); + int mmc_last_cmd_sense ( const CdIo_t *p_cdio, mmc_request_sense_t **pp_sense); /** Set the block size for subsequest read requests, via MMC. diff --git a/lib/driver/mmc.c b/lib/driver/mmc.c index 49416ab8..dee99b33 100644 --- a/lib/driver/mmc.c +++ b/lib/driver/mmc.c @@ -54,14 +54,14 @@ const char mmc_sense_key2str[16][40] = { "Illegal Request", /**< 5 */ "Unit Attention", /**< 6 */ "Data Protect", /**< 7 */ - "Blank/Nonblank", /**< 8 */ - "Firmware Error", /**< 9 - Vendor-specific */ + "Blank Check", /**< 8 */ + "Vendor Specific", /**< 9 */ "Copy aborted", /**< A */ "Aborted Command", /**< B */ - "Equal", /**< C */ - "Volume Overflow", /**< D */ - "Miscompare", /**< E */ - "(reserved error code)", /**< F */ + "Obsolete", /**< C */ + "Unknown - 13", /**< D */ + "Unknown - 14", /**< E */ + "Unknown - 15", /**< F */ }; /** The below variables are trickery to force enum symbol values to be @@ -1085,19 +1085,19 @@ int mmc_get_tray_status(const CdIo_t *p_cdio) <0 in case of internal error. */ int -mmc_last_cmd_sense( const CdIo_t *p_cdio, unsigned char **sense) +mmc_last_cmd_sense( const CdIo_t *p_cdio, mmc_request_sense_t **pp_sense) { generic_img_private_t *gen; if (!p_cdio) return DRIVER_OP_UNINIT; gen = p_cdio->env; - *sense = NULL; + *pp_sense = NULL; if (gen->scsi_mmc_sense_valid <= 0) return 0; - *sense = calloc(1, gen->scsi_mmc_sense_valid); - if (*sense == NULL) + *pp_sense = calloc(1, gen->scsi_mmc_sense_valid); + if (*pp_sense == NULL) return DRIVER_OP_ERROR; - memcpy(*sense, gen->scsi_mmc_sense, gen->scsi_mmc_sense_valid); + memcpy(*pp_sense, gen->scsi_mmc_sense, gen->scsi_mmc_sense_valid); return gen->scsi_mmc_sense_valid; } diff --git a/test/driver/mmc.c b/test/driver/mmc.c index f651c01c..e24e8214 100644 --- a/test/driver/mmc.c +++ b/test/driver/mmc.c @@ -54,7 +54,7 @@ static int tmmc_handle_outcome(CdIo_t *p_cdio, int i_status, unsigned char sense_reply[18], int flag); static void tmmc_print_status_sense(int i_status, int sense_valid, - unsigned char sense_reply[18], int flag); + mmc_request_sense_t *, int flag); static int tmmc_load_eject(CdIo_t *p_cdio, int *sense_avail, unsigned char sense_reply[18], int flag); @@ -97,15 +97,17 @@ tmmc_get_disc_erasable(const CdIo_t *p_cdio, const char *psz_source, */ static void tmmc_print_status_sense(int i_status, int sense_valid, - unsigned char sense[18], int flag) + mmc_request_sense_t *p_sense, int flag) { - if (!(flag & 1)) - return; - fprintf(stderr, "return= %d , sense(%d)", i_status, sense_valid); - if (sense_valid >= 14) - fprintf(stderr, ": KEY= %1.1X , ASC= %2.2X , ASCQ= %2.2X", - sense[2] & 0x0f, sense[12], sense[13]); - if (flag & 1) + if (!(flag & 1)) + return; + fprintf(stderr, "return= %d , sense(%d)", i_status, sense_valid); + if (sense_valid >= 14) + fprintf(stderr, ": KEY=%s (%1.1X), ASC= %2.2X , ASCQ= %2.2X", + mmc_sense_key2str[p_sense->sense_key], + p_sense->sense_key, + p_sense->asc, + p_sense->ascq); fprintf(stderr, "\n"); } @@ -116,16 +118,16 @@ static int tmmc_handle_outcome(CdIo_t *p_cdio, int i_status, int *sense_avail, unsigned char sense_reply[18], int flag) { - unsigned char *sense = NULL; + mmc_request_sense_t *p_sense = NULL; - *sense_avail = mmc_last_cmd_sense(p_cdio, &sense); - tmmc_print_status_sense(i_status, *sense_avail, sense, flag & 1); + *sense_avail = mmc_last_cmd_sense(p_cdio, &p_sense); + tmmc_print_status_sense(i_status, *sense_avail, p_sense, flag & 1); if (*sense_avail >= 18) - memcpy(sense_reply, sense, 18); + memcpy(sense_reply, p_sense, 18); else memset(sense_reply, 0, 18); - if (sense != NULL) - free(sense); + if (p_sense != NULL) + free(p_sense); return i_status; }