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 120 typedef unsigned char Byte; 121 122 /* 123 * This is the complete status returned from the drive configuration request 124 * command. 125 */ 126 struct 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 */ 134 struct 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 144 struct 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 */ 154 struct 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