Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 | /**************************************************************************************** * * * general (not only SCSI) header library for linux CDROM drivers * * (C) 1992 David Giller rafetmad@oxy.edu * * 1994 Eberhard Moenkeberg emoenke@gwdg.de ("read audio" and some other stuff) * * * * <linux/cdrom.h> -- CD-ROM IOCTLs and structs * * * ****************************************************************************************/ #ifndef _LINUX_CDROM_H #define _LINUX_CDROM_H /* * some fix numbers */ #define CD_MINS 74 /* max. minutes per CD */ #define CD_SECS 60 /* seconds per minute */ #define CD_FRAMES 75 /* frames per second */ #define CD_CHUNK_SIZE 24 /* lowest-level "data bytes piece" */ #define CD_NUM_OF_CHUNKS 98 /* chunks per frame */ #define CD_FRAMESIZE 2048 /* bytes per frame, cooked mode */ #define CD_FRAMESIZE_RAW0 2336 /* bytes per frame, "raw" mode */ #define CD_FRAMESIZE_XA 2340 /* bytes per frame, "xa" mode */ #define CD_FRAMESIZE_RAW 2352 /* bytes per frame, "raw" mode */ #define CD_FRAMESIZE_SUB 96 /* subchannel data size */ #define CD_BLOCK_OFFSET 150 /* offset of first logical frame */ #define CD_XA_HEAD 12 /* header size of XA frame */ #define CD_XA_TAIL 280 /* tail size of XA frame */ /* * * For IOCTL calls, we will commandeer byte 0x53, or 'S'. * */ /* * CD-ROM-specific SCSI command opcodes */ /* * Group 2 (10-byte). All of these are called 'optional' by SCSI-II. */ #define SCMD_READ_TOC 0x43 /* read table of contents */ #define SCMD_PLAYAUDIO_MSF 0x47 /* play data at time offset */ #define SCMD_PLAYAUDIO_TI 0x48 /* play data at track/index */ #define SCMD_PAUSE_RESUME 0x4B /* pause/resume audio */ #define SCMD_READ_SUBCHANNEL 0x42 /* read SC info on playing disc */ #define SCMD_PLAYAUDIO10 0x45 /* play data at logical block */ #define SCMD_READ_HEADER 0x44 /* read TOC header */ /* * Group 5 */ #define SCMD_PLAYAUDIO12 0xA5 /* play data at logical block */ #define SCMD_PLAYTRACK_REL12 0xA9 /* play track at relative offset*/ /* * Group 6 Commands */ #define SCMD_CD_PLAYBACK_CONTROL 0xC9 /* Sony vendor-specific audio */ #define SCMD_CD_PLAYBACK_STATUS 0xC4 /* control opcodes. info please!*/ /* * CD-ROM capacity structure. */ struct scsi_capacity { u_long capacity; u_long lbasize; }; /* * CD-ROM MODE_SENSE/MODE_SELECT parameters */ #define ERR_RECOVERY_PARMS 0x01 #define DISCO_RECO_PARMS 0x02 #define FORMAT_PARMS 0x03 #define GEOMETRY_PARMS 0x04 #define CERTIFICATION_PARMS 0x06 #define CACHE_PARMS 0x38 /* * standard mode-select header prepended to all mode-select commands */ struct ccs_modesel_head { u_char _r1; /* reserved */ u_char medium; /* device-specific medium type */ u_char _r2; /* reserved */ u_char block_desc_length; /* block descriptor length */ u_char density; /* device-specific density code */ u_char number_blocks_hi; /* number of blocks in this block desc */ u_char number_blocks_med; u_char number_blocks_lo; u_char _r3; u_char block_length_hi; /* block length for blocks in this desc */ u_short block_length; }; /* * error recovery parameters */ struct ccs_err_recovery { u_char _r1 : 2; /* reserved */ u_char page_code : 6; /* page code */ u_char page_length; /* page length */ u_char awre : 1; /* auto write realloc enabled */ u_char arre : 1; /* auto read realloc enabled */ u_char tb : 1; /* transfer block */ u_char rc : 1; /* read continuous */ u_char eec : 1; /* enable early correction */ u_char per : 1; /* post error */ u_char dte : 1; /* disable transfer on error */ u_char dcr : 1; /* disable correction */ u_char retry_count; /* error retry count */ u_char correction_span; /* largest recov. to be attempted, bits */ u_char head_offset_count; /* head offset (2's C) for each retry */ u_char strobe_offset_count; /* data strobe " */ u_char recovery_time_limit; /* time limit on recovery attempts */ }; /* * disco/reco parameters */ struct ccs_disco_reco { u_char _r1 : 2; /* reserved */ u_char page_code : 6; /* page code */ u_char page_length; /* page length */ u_char buffer_full_ratio; /* write buffer reconnect threshold */ u_char buffer_empty_ratio; /* read " */ u_short bus_inactivity_limit; /* limit on bus inactivity time */ u_short disconnect_time_limit; /* minimum disconnect time */ u_short connect_time_limit; /* minimum connect time */ u_short _r2; /* reserved */ }; /* * drive geometry parameters */ struct ccs_geometry { u_char _r1 : 2; /* reserved */ u_char page_code : 6; /* page code */ u_char page_length; /* page length */ u_char cyl_ub; /* #cyls */ u_char cyl_mb; u_char cyl_lb; u_char heads; /* #heads */ u_char precomp_cyl_ub; /* precomp start */ u_char precomp_cyl_mb; u_char precomp_cyl_lb; u_char current_cyl_ub; /* reduced current start */ u_char current_cyl_mb; u_char current_cyl_lb; u_short step_rate; /* stepping motor rate */ u_char landing_cyl_ub; /* landing zone */ u_char landing_cyl_mb; u_char landing_cyl_lb; u_char _r2; u_char _r3; u_char _r4; }; /* * cache parameters */ struct ccs_cache { u_char _r1 : 2; /* reserved */ u_char page_code : 6; /* page code */ u_char page_length; /* page length */ u_char mode; /* cache control byte */ u_char threshold; /* prefetch threshold */ u_char max_prefetch; /* maximum prefetch size */ u_char max_multiplier; /* maximum prefetch multiplier */ u_char min_prefetch; /* minimum prefetch size */ u_char min_multiplier; /* minimum prefetch multiplier */ u_char _r2[8]; }; /* * CDROM IOCTL structures */ struct cdrom_msf { u_char cdmsf_min0; /* start minute */ u_char cdmsf_sec0; /* start second */ u_char cdmsf_frame0; /* start frame */ u_char cdmsf_min1; /* end minute */ u_char cdmsf_sec1; /* end second */ u_char cdmsf_frame1; /* end frame */ }; struct cdrom_ti { u_char cdti_trk0; /* start track */ u_char cdti_ind0; /* start index */ u_char cdti_trk1; /* end track */ u_char cdti_ind1; /* end index */ }; struct cdrom_tochdr { u_char cdth_trk0; /* start track */ u_char cdth_trk1; /* end track */ }; struct cdrom_tocentry { u_char cdte_track; u_char cdte_adr :4; u_char cdte_ctrl :4; u_char cdte_format; union { struct { u_char minute; u_char second; u_char frame; } msf; int lba; } cdte_addr; u_char cdte_datamode; }; /* * CD-ROM address types (cdrom_tocentry.cdte_format) */ #define CDROM_LBA 0x01 /* "logical block": first frame is #0 */ #define CDROM_MSF 0x02 /* "minute-second-frame": binary, not bcd here! */ /* * bit to tell whether track is data or audio */ #define CDROM_DATA_TRACK 0x04 /* * The leadout track is always 0xAA, regardless of # of tracks on disc */ #define CDROM_LEADOUT 0xAA struct cdrom_subchnl { u_char cdsc_format; u_char cdsc_audiostatus; u_char cdsc_adr: 4; u_char cdsc_ctrl: 4; u_char cdsc_trk; u_char cdsc_ind; union { struct { u_char minute; u_char second; u_char frame; } msf; int lba; } cdsc_absaddr; union { struct { u_char minute; u_char second; u_char frame; } msf; int lba; } cdsc_reladdr; }; /* * return value from READ SUBCHANNEL DATA */ #define CDROM_AUDIO_INVALID 0x00 /* audio status not supported */ #define CDROM_AUDIO_PLAY 0x11 /* audio play operation in progress */ #define CDROM_AUDIO_PAUSED 0x12 /* audio play operation paused */ #define CDROM_AUDIO_COMPLETED 0x13 /* audio play successfully completed */ #define CDROM_AUDIO_ERROR 0x14 /* audio play stopped due to error */ #define CDROM_AUDIO_NO_STATUS 0x15 /* no current audio status to return */ struct cdrom_volctrl { u_char channel0; u_char channel1; u_char channel2; u_char channel3; }; struct cdrom_read { int cdread_lba; caddr_t cdread_bufaddr; int cdread_buflen; }; /* * preliminary extensions for transfering audio frames * currently used by sbpcd.c * (still may change if other drivers will use it, too): */ struct cdrom_read_audio { union { struct { u_char minute; u_char second; u_char frame; } msf; int lba; } addr; /* frame address */ u_char addr_format; /* CDROM_LBA or CDROM_MSF */ int nframes; /* number of 2352-byte-frames to read at once, limited by the drivers */ u_char *buf; /* frame buffer (size: nframes*2352 bytes) */ }; #ifdef FIVETWELVE #define CDROM_MODE1_SIZE 512 #else #define CDROM_MODE1_SIZE 2048 #endif FIVETWELVE #define CDROM_MODE2_SIZE 2336 /* * CD-ROM IOCTL commands */ #define CDROMPAUSE 0x5301 /* pause */ #define CDROMRESUME 0x5302 /* resume */ #define CDROMPLAYMSF 0x5303 /* (struct cdrom_msf) */ /* SCMD_PLAY_AUDIO_MSF */ #define CDROMPLAYTRKIND 0x5304 /* (struct cdrom_ti) */ /* SCMD_PLAY_AUDIO_TI */ #define CDROMREADTOCHDR 0x5305 /* (struct cdrom_tochdr) */ /* read the TOC header */ #define CDROMREADTOCENTRY 0x5306 /* (struct cdrom_tocentry) */ /* read a TOC entry */ #define CDROMSTOP 0x5307 /* stop the drive motor */ #define CDROMSTART 0x5308 /* turn the motor on */ #define CDROMEJECT 0x5309 /* eject CD-ROM media */ #define CDROMVOLCTRL 0x530a /* (struct cdrom_volctrl) */ /* vlume control */ #define CDROMSUBCHNL 0x530b /* (struct cdrom_subchnl) */ /* read Q sub-channel data */ #define CDROMREADMODE2 0x530c /* (struct cdrom_read) */ /* read type-2 data (not suppt) */ #define CDROMREADMODE1 0x530d /* (struct cdrom_read) */ /* read type-1 data */ /* * preliminary extension for transfering audio frames * currently used by sbpcd.c * (still may change if other drivers will use it, too): */ #define CDROMREADAUDIO 0x530e /* (struct cdrom_read_audio) */ #endif _LINUX_CDROM_H |