|
@@ -50,6 +50,10 @@
|
|
|
#define SECTORS_PER_FRAME (CD_FRAMESIZE >> SECTOR_BITS)
|
|
|
#define SECTOR_BUFFER_SIZE (CD_FRAMESIZE * 32)
|
|
|
|
|
|
+/* Capabilities Page size including 8 bytes of Mode Page Header */
|
|
|
+#define ATAPI_CAPABILITIES_PAGE_SIZE (8 + 20)
|
|
|
+#define ATAPI_CAPABILITIES_PAGE_PAD_SIZE 4
|
|
|
+
|
|
|
/* Configuration flags. These describe the capabilities of the drive.
|
|
|
They generally do not change after initialization, unless we learn
|
|
|
more about the drive from stuff failing. */
|
|
@@ -124,225 +128,6 @@ struct atapi_toc {
|
|
|
/* One extra for the leadout. */
|
|
|
};
|
|
|
|
|
|
-/* This should probably go into cdrom.h along with the other
|
|
|
- * generic stuff now in the Mt. Fuji spec.
|
|
|
- */
|
|
|
-struct atapi_capabilities_page {
|
|
|
- struct mode_page_header header;
|
|
|
-#if defined(__BIG_ENDIAN_BITFIELD)
|
|
|
- __u8 parameters_saveable : 1;
|
|
|
- __u8 reserved1 : 1;
|
|
|
- __u8 page_code : 6;
|
|
|
-#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
|
|
- __u8 page_code : 6;
|
|
|
- __u8 reserved1 : 1;
|
|
|
- __u8 parameters_saveable : 1;
|
|
|
-#else
|
|
|
-#error "Please fix <asm/byteorder.h>"
|
|
|
-#endif
|
|
|
-
|
|
|
- byte page_length;
|
|
|
-
|
|
|
-#if defined(__BIG_ENDIAN_BITFIELD)
|
|
|
- __u8 reserved2 : 2;
|
|
|
- /* Drive supports reading of DVD-RAM discs */
|
|
|
- __u8 dvd_ram_read : 1;
|
|
|
- /* Drive supports reading of DVD-R discs */
|
|
|
- __u8 dvd_r_read : 1;
|
|
|
- /* Drive supports reading of DVD-ROM discs */
|
|
|
- __u8 dvd_rom : 1;
|
|
|
- /* Drive supports reading CD-R discs with addressing method 2 */
|
|
|
- __u8 method2 : 1; /* reserved in 1.2 */
|
|
|
- /* Drive can read from CD-R/W (CD-E) discs (orange book, part III) */
|
|
|
- __u8 cd_rw_read : 1; /* reserved in 1.2 */
|
|
|
- /* Drive supports read from CD-R discs (orange book, part II) */
|
|
|
- __u8 cd_r_read : 1; /* reserved in 1.2 */
|
|
|
-#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
|
|
- /* Drive supports read from CD-R discs (orange book, part II) */
|
|
|
- __u8 cd_r_read : 1; /* reserved in 1.2 */
|
|
|
- /* Drive can read from CD-R/W (CD-E) discs (orange book, part III) */
|
|
|
- __u8 cd_rw_read : 1; /* reserved in 1.2 */
|
|
|
- /* Drive supports reading CD-R discs with addressing method 2 */
|
|
|
- __u8 method2 : 1;
|
|
|
- /* Drive supports reading of DVD-ROM discs */
|
|
|
- __u8 dvd_rom : 1;
|
|
|
- /* Drive supports reading of DVD-R discs */
|
|
|
- __u8 dvd_r_read : 1;
|
|
|
- /* Drive supports reading of DVD-RAM discs */
|
|
|
- __u8 dvd_ram_read : 1;
|
|
|
- __u8 reserved2 : 2;
|
|
|
-#else
|
|
|
-#error "Please fix <asm/byteorder.h>"
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(__BIG_ENDIAN_BITFIELD)
|
|
|
- __u8 reserved3 : 2;
|
|
|
- /* Drive can write DVD-RAM discs */
|
|
|
- __u8 dvd_ram_write : 1;
|
|
|
- /* Drive can write DVD-R discs */
|
|
|
- __u8 dvd_r_write : 1;
|
|
|
- __u8 reserved3a : 1;
|
|
|
- /* Drive can fake writes */
|
|
|
- __u8 test_write : 1;
|
|
|
- /* Drive can write to CD-R/W (CD-E) discs (orange book, part III) */
|
|
|
- __u8 cd_rw_write : 1; /* reserved in 1.2 */
|
|
|
- /* Drive supports write to CD-R discs (orange book, part II) */
|
|
|
- __u8 cd_r_write : 1; /* reserved in 1.2 */
|
|
|
-#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
|
|
- /* Drive can write to CD-R discs (orange book, part II) */
|
|
|
- __u8 cd_r_write : 1; /* reserved in 1.2 */
|
|
|
- /* Drive can write to CD-R/W (CD-E) discs (orange book, part III) */
|
|
|
- __u8 cd_rw_write : 1; /* reserved in 1.2 */
|
|
|
- /* Drive can fake writes */
|
|
|
- __u8 test_write : 1;
|
|
|
- __u8 reserved3a : 1;
|
|
|
- /* Drive can write DVD-R discs */
|
|
|
- __u8 dvd_r_write : 1;
|
|
|
- /* Drive can write DVD-RAM discs */
|
|
|
- __u8 dvd_ram_write : 1;
|
|
|
- __u8 reserved3 : 2;
|
|
|
-#else
|
|
|
-#error "Please fix <asm/byteorder.h>"
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(__BIG_ENDIAN_BITFIELD)
|
|
|
- __u8 reserved4 : 1;
|
|
|
- /* Drive can read multisession discs. */
|
|
|
- __u8 multisession : 1;
|
|
|
- /* Drive can read mode 2, form 2 data. */
|
|
|
- __u8 mode2_form2 : 1;
|
|
|
- /* Drive can read mode 2, form 1 (XA) data. */
|
|
|
- __u8 mode2_form1 : 1;
|
|
|
- /* Drive supports digital output on port 2. */
|
|
|
- __u8 digport2 : 1;
|
|
|
- /* Drive supports digital output on port 1. */
|
|
|
- __u8 digport1 : 1;
|
|
|
- /* Drive can deliver a composite audio/video data stream. */
|
|
|
- __u8 composite : 1;
|
|
|
- /* Drive supports audio play operations. */
|
|
|
- __u8 audio_play : 1;
|
|
|
-#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
|
|
- /* Drive supports audio play operations. */
|
|
|
- __u8 audio_play : 1;
|
|
|
- /* Drive can deliver a composite audio/video data stream. */
|
|
|
- __u8 composite : 1;
|
|
|
- /* Drive supports digital output on port 1. */
|
|
|
- __u8 digport1 : 1;
|
|
|
- /* Drive supports digital output on port 2. */
|
|
|
- __u8 digport2 : 1;
|
|
|
- /* Drive can read mode 2, form 1 (XA) data. */
|
|
|
- __u8 mode2_form1 : 1;
|
|
|
- /* Drive can read mode 2, form 2 data. */
|
|
|
- __u8 mode2_form2 : 1;
|
|
|
- /* Drive can read multisession discs. */
|
|
|
- __u8 multisession : 1;
|
|
|
- __u8 reserved4 : 1;
|
|
|
-#else
|
|
|
-#error "Please fix <asm/byteorder.h>"
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(__BIG_ENDIAN_BITFIELD)
|
|
|
- __u8 reserved5 : 1;
|
|
|
- /* Drive can return Media Catalog Number (UPC) info. */
|
|
|
- __u8 upc : 1;
|
|
|
- /* Drive can return International Standard Recording Code info. */
|
|
|
- __u8 isrc : 1;
|
|
|
- /* Drive supports C2 error pointers. */
|
|
|
- __u8 c2_pointers : 1;
|
|
|
- /* R-W data will be returned deinterleaved and error corrected. */
|
|
|
- __u8 rw_corr : 1;
|
|
|
- /* Subchannel reads can return combined R-W information. */
|
|
|
- __u8 rw_supported : 1;
|
|
|
- /* Drive can continue a read cdda operation from a loss of streaming.*/
|
|
|
- __u8 cdda_accurate : 1;
|
|
|
- /* Drive can read Red Book audio data. */
|
|
|
- __u8 cdda : 1;
|
|
|
-#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
|
|
- /* Drive can read Red Book audio data. */
|
|
|
- __u8 cdda : 1;
|
|
|
- /* Drive can continue a read cdda operation from a loss of streaming.*/
|
|
|
- __u8 cdda_accurate : 1;
|
|
|
- /* Subchannel reads can return combined R-W information. */
|
|
|
- __u8 rw_supported : 1;
|
|
|
- /* R-W data will be returned deinterleaved and error corrected. */
|
|
|
- __u8 rw_corr : 1;
|
|
|
- /* Drive supports C2 error pointers. */
|
|
|
- __u8 c2_pointers : 1;
|
|
|
- /* Drive can return International Standard Recording Code info. */
|
|
|
- __u8 isrc : 1;
|
|
|
- /* Drive can return Media Catalog Number (UPC) info. */
|
|
|
- __u8 upc : 1;
|
|
|
- __u8 reserved5 : 1;
|
|
|
-#else
|
|
|
-#error "Please fix <asm/byteorder.h>"
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(__BIG_ENDIAN_BITFIELD)
|
|
|
- /* Drive mechanism types. */
|
|
|
- mechtype_t mechtype : 3;
|
|
|
- __u8 reserved6 : 1;
|
|
|
- /* Drive can eject a disc or changer cartridge. */
|
|
|
- __u8 eject : 1;
|
|
|
- /* State of prevent/allow jumper. */
|
|
|
- __u8 prevent_jumper : 1;
|
|
|
- /* Present state of door lock. */
|
|
|
- __u8 lock_state : 1;
|
|
|
- /* Drive can lock the door. */
|
|
|
- __u8 lock : 1;
|
|
|
-#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
|
|
-
|
|
|
- /* Drive can lock the door. */
|
|
|
- __u8 lock : 1;
|
|
|
- /* Present state of door lock. */
|
|
|
- __u8 lock_state : 1;
|
|
|
- /* State of prevent/allow jumper. */
|
|
|
- __u8 prevent_jumper : 1;
|
|
|
- /* Drive can eject a disc or changer cartridge. */
|
|
|
- __u8 eject : 1;
|
|
|
- __u8 reserved6 : 1;
|
|
|
- /* Drive mechanism types. */
|
|
|
- mechtype_t mechtype : 3;
|
|
|
-#else
|
|
|
-#error "Please fix <asm/byteorder.h>"
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(__BIG_ENDIAN_BITFIELD)
|
|
|
- __u8 reserved7 : 4;
|
|
|
- /* Drive supports software slot selection. */
|
|
|
- __u8 sss : 1; /* reserved in 1.2 */
|
|
|
- /* Changer can report exact contents of slots. */
|
|
|
- __u8 disc_present : 1; /* reserved in 1.2 */
|
|
|
- /* Audio for each channel can be muted independently. */
|
|
|
- __u8 separate_mute : 1;
|
|
|
- /* Audio level for each channel can be controlled independently. */
|
|
|
- __u8 separate_volume : 1;
|
|
|
-#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
|
|
-
|
|
|
- /* Audio level for each channel can be controlled independently. */
|
|
|
- __u8 separate_volume : 1;
|
|
|
- /* Audio for each channel can be muted independently. */
|
|
|
- __u8 separate_mute : 1;
|
|
|
- /* Changer can report exact contents of slots. */
|
|
|
- __u8 disc_present : 1; /* reserved in 1.2 */
|
|
|
- /* Drive supports software slot selection. */
|
|
|
- __u8 sss : 1; /* reserved in 1.2 */
|
|
|
- __u8 reserved7 : 4;
|
|
|
-#else
|
|
|
-#error "Please fix <asm/byteorder.h>"
|
|
|
-#endif
|
|
|
-
|
|
|
- /* Note: the following four fields are returned in big-endian form. */
|
|
|
- /* Maximum speed (in kB/s). */
|
|
|
- unsigned short maxspeed;
|
|
|
- /* Number of discrete volume levels. */
|
|
|
- unsigned short n_vol_levels;
|
|
|
- /* Size of cache in drive, in kB. */
|
|
|
- unsigned short buffer_size;
|
|
|
- /* Current speed (in kB/s). */
|
|
|
- unsigned short curspeed;
|
|
|
- char pad[4];
|
|
|
-};
|
|
|
-
|
|
|
/* Extra per-device info for cdrom drives. */
|
|
|
struct cdrom_info {
|
|
|
ide_drive_t *drive;
|