#ifndef SONYCD535_H #define SONYCD535_H /* * define all the commands recognized by the CDU-531/5 */ #define SONY535_REQUEST_DRIVE_STATUS_1 (0x80) #define SONY535_REQUEST_SENSE (0x82) #define SONY535_REQUEST_DRIVE_STATUS_2 (0x84) #define SONY535_REQUEST_ERROR_STATUS (0x86) #define SONY535_REQUEST_AUDIO_STATUS (0x88) #define SONY535_INQUIRY (0x8a) #define SONY535_SET_INACTIVITY_TIME (0x90) #define SONY535_SEEK_AND_READ_N_BLOCKS_1 (0xa0) #define SONY535_SEEK_AND_READ_N_BLOCKS_2 (0xa4) #define SONY535_PLAY_AUDIO (0xa6) #define SONY535_REQUEST_DISC_CAPACITY (0xb0) #define SONY535_REQUEST_TOC_DATA (0xb2) #define SONY535_REQUEST_SUB_Q_DATA (0xb4) #define SONY535_REQUEST_ISRC (0xb6) #define SONY535_REQUEST_UPC_EAN (0xb8) #define SONY535_SET_DRIVE_MODE (0xc0) #define SONY535_REQUEST_DRIVE_MODE (0xc2) #define SONY535_SET_RETRY_COUNT (0xc4) #define SONY535_DIAGNOSTIC_1 (0xc6) #define SONY535_DIAGNOSTIC_4 (0xcc) #define SONY535_DIAGNOSTIC_5 (0xce) #define SONY535_EJECT_CADDY (0xd0) #define SONY535_DISABLE_EJECT_BUTTON (0xd2) #define SONY535_ENABLE_EJECT_BUTTON (0xd4) #define SONY535_HOLD (0xe0) #define SONY535_AUDIO_PAUSE_ON_OFF (0xe2) #define SONY535_SET_VOLUME (0xe8) #define SONY535_STOP (0xf0) #define SONY535_SPIN_UP (0xf2) #define SONY535_SPIN_DOWN (0xf4) #define SONY535_CLEAR_PARAMETERS (0xf6) #define SONY535_CLEAR_ENDING_ADDRESS (0xf8) /* * define some masks */ #define SONY535_DATA_NOT_READY_BIT (0x1) #define SONY535_RESULT_NOT_READY_BIT (0x2) /* * drive status 1 */ #define SONY535_STATUS1_COMMAND_ERROR (0x1) #define SONY535_STATUS1_DATA_ERROR (0x2) #define SONY535_STATUS1_SEEK_ERROR (0x4) #define SONY535_STATUS1_DISC_TYPE_ERROR (0x8) #define SONY535_STATUS1_NOT_SPINNING (0x10) #define SONY535_STATUS1_EJECT_BUTTON_PRESSED (0x20) #define SONY535_STATUS1_CADDY_NOT_INSERTED (0x40) #define SONY535_STATUS1_BYTE_TWO_FOLLOWS (0x80) /* * drive status 2 */ #define SONY535_CDD_LOADING_ERROR (0x7) #define SONY535_CDD_NO_DISC (0x8) #define SONY535_CDD_UNLOADING_ERROR (0x9) #define SONY535_CDD_CADDY_NOT_INSERTED (0xd) #define SONY535_ATN_RESET_OCCURRED (0x2) #define SONY535_ATN_DISC_CHANGED (0x4) #define SONY535_ATN_RESET_AND_DISC_CHANGED (0x6) #define SONY535_ATN_EJECT_IN_PROGRESS (0xe) #define SONY535_ATN_BUSY (0xf) /* * define some parameters */ #define SONY535_AUDIO_DRIVE_MODE (0) #define SONY535_CDROM_DRIVE_MODE (0xe0) #define SONY535_PLAY_OP_PLAYBACK (0) #define SONY535_PLAY_OP_ENTER_HOLD (1) #define SONY535_PLAY_OP_SET_AUDIO_ENDING_ADDR (2) #define SONY535_PLAY_OP_SCAN_FORWARD (3) #define SONY535_PLAY_OP_SCAN_BACKWARD (4) /* * convert from msf format to block number */ #define SONY_BLOCK_NUMBER(m,s,f) (((m)*60L+(s))*75L+(f)) #define SONY_BLOCK_NUMBER_MSF(x) (((x)[0]*60L+(x)[1])*75L+(x)[2]) /* * error return values from the doSonyCmd() routines */ #define TIME_OUT (-1) #define NO_CDROM (-2) #define BAD_STATUS (-3) #define CD_BUSY (-4) #define NOT_DATA_CD (-5) #define NO_ROOM (-6) #define LOG_START_OFFSET 150 /* Offset of first logical sector */ #define SONY_JIFFIES_TIMEOUT (5*HZ) /* Maximum time the drive will wait/try for an operation */ #define SONY_READY_RETRIES (50000) /* How many times to retry a spin waiting for a register to come ready */ #define SONY535_FAST_POLLS (10000) /* how many times recheck status waiting for a data to become ready */ typedef unsigned char Byte; /* * This is the complete status returned from the drive configuration request * command. */ struct s535_sony_drive_config { char vendor_id[8]; char product_id[16]; char product_rev_level[4]; }; /* The following is returned from the request sub-q data command */ struct s535_sony_subcode { unsigned char address :4; unsigned char control :4; unsigned char track_num; unsigned char index_num; unsigned char rel_msf[3]; unsigned char abs_msf[3]; }; struct s535_sony_disc_capacity { Byte mFirstTrack, sFirstTrack, fFirstTrack; Byte mLeadOut, sLeadOut, fLeadOut; }; /* * The following is returned from the request TOC (Table Of Contents) command. * (last_track_num-first_track_num+1) values are valid in tracks. */ struct s535_sony_toc { unsigned char reserved0 :4; unsigned char control0 :4; unsigned char point0; unsigned char first_track_num; unsigned char reserved0a; unsigned char reserved0b; unsigned char reserved1 :4; unsigned char control1 :4; unsigned char point1; unsigned char last_track_num; unsigned char dummy1; unsigned char dummy2; unsigned char reserved2 :4; unsigned char control2 :4; unsigned char point2; unsigned char lead_out_start_msf[3]; struct { unsigned char reserved :4; unsigned char control :4; unsigned char track; unsigned char track_start_msf[3]; } tracks[100]; unsigned int lead_out_start_lba; }; #endif /* SONYCD535_H */