1#ifndef SONYCD535_H 2#define SONYCD535_H 3 4/* 5 * define all the commands recognized by the CDU-531/5 6 */ 7#define SONY535_REQUEST_DRIVE_STATUS_1 (0x80) 8#define SONY535_REQUEST_SENSE (0x82) 9#define SONY535_REQUEST_DRIVE_STATUS_2 (0x84) 10#define SONY535_REQUEST_ERROR_STATUS (0x86) 11#define SONY535_REQUEST_AUDIO_STATUS (0x88) 12#define SONY535_INQUIRY (0x8a) 13 14#define SONY535_SET_INACTIVITY_TIME (0x90) 15 16#define SONY535_SEEK_AND_READ_N_BLOCKS_1 (0xa0) 17#define SONY535_SEEK_AND_READ_N_BLOCKS_2 (0xa4) 18#define SONY535_PLAY_AUDIO (0xa6) 19 20#define SONY535_REQUEST_DISC_CAPACITY (0xb0) 21#define SONY535_REQUEST_TOC_DATA (0xb2) 22#define SONY535_REQUEST_SUB_Q_DATA (0xb4) 23#define SONY535_REQUEST_ISRC (0xb6) 24#define SONY535_REQUEST_UPC_EAN (0xb8) 25 26#define SONY535_SET_DRIVE_MODE (0xc0) 27#define SONY535_REQUEST_DRIVE_MODE (0xc2) 28#define SONY535_SET_RETRY_COUNT (0xc4) 29 30#define SONY535_DIAGNOSTIC_1 (0xc6) 31#define SONY535_DIAGNOSTIC_4 (0xcc) 32#define SONY535_DIAGNOSTIC_5 (0xce) 33 34#define SONY535_EJECT_CADDY (0xd0) 35#define SONY535_DISABLE_EJECT_BUTTON (0xd2) 36#define SONY535_ENABLE_EJECT_BUTTON (0xd4) 37 38#define SONY535_HOLD (0xe0) 39#define SONY535_AUDIO_PAUSE_ON_OFF (0xe2) 40#define SONY535_SET_VOLUME (0xe8) 41 42#define SONY535_STOP (0xf0) 43#define SONY535_SPIN_UP (0xf2) 44#define SONY535_SPIN_DOWN (0xf4) 45 46#define SONY535_CLEAR_PARAMETERS (0xf6) 47#define SONY535_CLEAR_ENDING_ADDRESS (0xf8) 48 49/* 50 * define some masks 51 */ 52#define SONY535_DATA_NOT_READY_BIT (0x1) 53#define SONY535_RESULT_NOT_READY_BIT (0x2) 54 55/* 56 * drive status 1 57 */ 58#define SONY535_STATUS1_COMMAND_ERROR (0x1) 59#define SONY535_STATUS1_DATA_ERROR (0x2) 60#define SONY535_STATUS1_SEEK_ERROR (0x4) 61#define SONY535_STATUS1_DISC_TYPE_ERROR (0x8) 62#define SONY535_STATUS1_NOT_SPINNING (0x10) 63#define SONY535_STATUS1_EJECT_BUTTON_PRESSED (0x20) 64#define SONY535_STATUS1_CADDY_NOT_INSERTED (0x40) 65#define SONY535_STATUS1_BYTE_TWO_FOLLOWS (0x80) 66 67/* 68 * drive status 2 69 */ 70#define SONY535_CDD_LOADING_ERROR (0x7) 71#define SONY535_CDD_NO_DISC (0x8) 72#define SONY535_CDD_UNLOADING_ERROR (0x9) 73#define SONY535_CDD_CADDY_NOT_INSERTED (0xd) 74#define SONY535_ATN_RESET_OCCURRED (0x2) 75#define SONY535_ATN_DISC_CHANGED (0x4) 76#define SONY535_ATN_RESET_AND_DISC_CHANGED (0x6) 77#define SONY535_ATN_EJECT_IN_PROGRESS (0xe) 78#define SONY535_ATN_BUSY (0xf) 79 80/* 81 * define some parameters 82 */ 83#define SONY535_AUDIO_DRIVE_MODE (0) 84#define SONY535_CDROM_DRIVE_MODE (0xe0) 85 86#define SONY535_PLAY_OP_PLAYBACK (0) 87#define SONY535_PLAY_OP_ENTER_HOLD (1) 88#define SONY535_PLAY_OP_SET_AUDIO_ENDING_ADDR (2) 89#define SONY535_PLAY_OP_SCAN_FORWARD (3) 90#define SONY535_PLAY_OP_SCAN_BACKWARD (4) 91 92/* 93 * convert from msf format to block number 94 */ 95#define SONY_BLOCK_NUMBER(m,s,f) (((m)*60L+(s))*75L+(f)) 96#define SONY_BLOCK_NUMBER_MSF(x) (((x)[0]*60L+(x)[1])*75L+(x)[2]) 97 98/* 99 * error return values from the doSonyCmd() routines 100 */ 101#define TIME_OUT (-1) 102#define NO_CDROM (-2) 103#define BAD_STATUS (-3) 104#define CD_BUSY (-4) 105#define NOT_DATA_CD (-5) 106#define NO_ROOM (-6) 107 108#define LOG_START_OFFSET 150 /* Offset of first logical sector */ 109 110#define SONY_JIFFIES_TIMEOUT (5*HZ) /* Maximum time 111 the drive will wait/try for an 112 operation */ 113#define SONY_READY_RETRIES (50000) /* How many times to retry a 114 spin waiting for a register 115 to come ready */ 116#define SONY535_FAST_POLLS (10000) /* how many times recheck 117 status waiting for a data 118 to become ready */ 119 120typedef unsigned char Byte; 121 122/* 123 * This is the complete status returned from the drive configuration request 124 * command. 125 */ 126struct s535_sony_drive_config 127{ 128 char vendor_id[8]; 129 char product_id[16]; 130 char product_rev_level[4]; 131}; 132 133/* The following is returned from the request sub-q data command */ 134struct s535_sony_subcode 135{ 136 unsigned char address :4; 137 unsigned char control :4; 138 unsigned char track_num; 139 unsigned char index_num; 140 unsigned char rel_msf[3]; 141 unsigned char abs_msf[3]; 142}; 143 144struct s535_sony_disc_capacity 145{ 146 Byte mFirstTrack, sFirstTrack, fFirstTrack; 147 Byte mLeadOut, sLeadOut, fLeadOut; 148}; 149 150/* 151 * The following is returned from the request TOC (Table Of Contents) command. 152 * (last_track_num-first_track_num+1) values are valid in tracks. 153 */ 154struct s535_sony_toc 155{ 156 unsigned char reserved0 :4; 157 unsigned char control0 :4; 158 unsigned char point0; 159 unsigned char first_track_num; 160 unsigned char reserved0a; 161 unsigned char reserved0b; 162 unsigned char reserved1 :4; 163 unsigned char control1 :4; 164 unsigned char point1; 165 unsigned char last_track_num; 166 unsigned char dummy1; 167 unsigned char dummy2; 168 unsigned char reserved2 :4; 169 unsigned char control2 :4; 170 unsigned char point2; 171 unsigned char lead_out_start_msf[3]; 172 struct 173 { 174 unsigned char reserved :4; 175 unsigned char control :4; 176 unsigned char track; 177 unsigned char track_start_msf[3]; 178 } tracks[100]; 179 180 unsigned int lead_out_start_lba; 181}; 182 183#endif /* SONYCD535_H */ 184