diff options
| author | Søren Schmidt <sos@FreeBSD.org> | 1999-09-21 19:50:40 +0000 |
|---|---|---|
| committer | Søren Schmidt <sos@FreeBSD.org> | 1999-09-21 19:50:40 +0000 |
| commit | 3427651043774ff9d605336873d697b1721f94d0 (patch) | |
| tree | bc242236f188422387165dda7b3dd861aaa41d0d /sys/dev/ata/atapi-cd.h | |
| parent | 3a049969b5cfa291d71c5f62d99603123aa9a074 (diff) | |
Notes
Diffstat (limited to 'sys/dev/ata/atapi-cd.h')
| -rw-r--r-- | sys/dev/ata/atapi-cd.h | 214 |
1 files changed, 114 insertions, 100 deletions
diff --git a/sys/dev/ata/atapi-cd.h b/sys/dev/ata/atapi-cd.h index 6afa00d10ac8b..8ec06f82ba4ad 100644 --- a/sys/dev/ata/atapi-cd.h +++ b/sys/dev/ata/atapi-cd.h @@ -37,80 +37,86 @@ struct toc { /* CDROM Audio Control Parameters Page */ struct audiopage { - /* Mode Page data header */ + /* mode page data header */ u_int16_t data_length; u_int8_t medium_type; u_int8_t dev_spec; u_int8_t unused[2]; u_int16_t blk_desc_len; - /* Audio control page */ + /* audio control page */ u_int8_t page_code; -#define ATAPI_CDROM_AUDIO_PAGE 0x0e +#define ATAPI_CDROM_AUDIO_PAGE 0x0e #define ATAPI_CDROM_AUDIO_PAGE_MASK 0x4e u_int8_t param_len; u_int8_t flags; -#define CD_PA_SOTC 0x02 -#define CD_PA_IMMED 0x04 +#define CD_PA_SOTC 0x02 +#define CD_PA_IMMED 0x04 u_int8_t reserved3; u_int8_t reserved4; u_int8_t reserved5; u_int16_t lb_per_sec; struct port_control { - u_int8_t channels:4; -#define CHANNEL_0 1 -#define CHANNEL_1 2 -#define CHANNEL_2 4 -#define CHANNEL_3 8 + u_int8_t channels:4; +#define CHANNEL_0 1 +#define CHANNEL_1 2 +#define CHANNEL_2 4 +#define CHANNEL_3 8 - u_int8_t volume; + u_int8_t volume; } port[4]; }; /* CDROM Capabilities and Mechanical Status Page */ struct cappage { - /* Mode data header */ + /* mode page data header */ u_int16_t data_length; u_int8_t medium_type; #define MST_TYPE_MASK_LOW 0x0f #define MST_FMT_NONE 0x00 -#define MST_DATA_120 0x01 -#define MST_AUDIO_120 0x02 -#define MST_COMB_120 0x03 -#define MST_PHOTO_120 0x04 -#define MST_DATA_80 0x05 -#define MST_AUDIO_80 0x06 -#define MST_COMB_80 0x07 -#define MST_PHOTO_80 0x08 +#define MST_DATA_120 0x01 +#define MST_AUDIO_120 0x02 +#define MST_COMB_120 0x03 +#define MST_PHOTO_120 0x04 +#define MST_DATA_80 0x05 +#define MST_AUDIO_80 0x06 +#define MST_COMB_80 0x07 +#define MST_PHOTO_80 0x08 #define MST_TYPE_MASK_HIGH 0x70 #define MST_CDROM 0x00 -#define MST_CDR 0x10 +#define MST_CDR 0x10 #define MST_CDRW 0x20 -#define MST_NO_DISC 0x70 -#define MST_DOOR_OPEN 0x71 -#define MST_FMT_ERROR 0x72 +#define MST_NO_DISC 0x70 +#define MST_DOOR_OPEN 0x71 +#define MST_FMT_ERROR 0x72 u_int8_t dev_spec; u_int8_t unused[2]; u_int16_t blk_desc_len; - /* Capabilities page */ + /* capabilities page */ u_int8_t page_code; #define ATAPI_CDROM_CAP_PAGE 0x2a u_int8_t param_len; u_int8_t read_cdr :1; /* supports CD-R read */ u_int8_t read_cdrw :1; /* supports CD-RW read */ - u_int8_t method2 :1; /* supports reading packet tracks */ - u_int8_t reserved2_37 :5; + u_int8_t read_packet :1; /* supports reading packet tracks */ + u_int8_t read_dvdrom :1; /* supports DVD-ROM read */ + u_int8_t read_dvdr :1; /* supports DVD-R read */ + u_int8_t read_dvdram :1; /* supports DVD-RAM read */ + u_int8_t reserved2_67 :2; u_int8_t write_cdr :1; /* supports CD-R write */ u_int8_t write_cdrw :1; /* supports CD-RW write */ u_int8_t test_write :1; /* supports test writing */ - u_int8_t reserved3_37 :5; + u_int8_t reserved3_3 :1; + u_int8_t write_dvdr :1; /* supports DVD-R write */ + u_int8_t write_dvdram :1; /* supports DVD-RAM write */ + u_int8_t reserved3_67 :2; u_int8_t audio_play :1; /* audio play supported */ u_int8_t composite :1; /* composite audio/video supported */ u_int8_t dport1 :1; /* digital audio on port 1 */ @@ -133,33 +139,34 @@ struct cappage { u_int8_t eject :1; /* can eject */ u_int8_t :1; u_int8_t mech :3; /* loading mechanism type */ -#define MST_MECH_CADDY 0 -#define MST_MECH_TRAY 1 -#define MST_MECH_POPUP 2 -#define MST_MECH_CHANGER 4 -#define MST_MECH_CARTRIDGE 5 +#define MST_MECH_CADDY 0 +#define MST_MECH_TRAY 1 +#define MST_MECH_POPUP 2 +#define MST_MECH_CHANGER 4 +#define MST_MECH_CARTRIDGE 5 u_int8_t sep_vol :1; /* independent volume of channels */ u_int8_t sep_mute :1; /* independent mute of channels */ u_int8_t:6; - u_int16_t max_speed; /* max raw data rate in bytes/1000 */ + u_int16_t max_read_speed; /* max raw data rate in bytes/1000 */ u_int16_t max_vol_levels; /* number of discrete volume levels */ u_int16_t buf_size; /* internal buffer size in bytes/1024 */ - u_int16_t cur_speed; /* current data rate in bytes/1000 */ + u_int16_t cur_read_speed; /* current data rate in bytes/1000 */ u_int8_t reserved3; u_int8_t bckf :1; /* data valid on failing edge of BCK */ u_int8_t rch :1; /* high LRCK indicates left channel */ u_int8_t lsbf :1; /* set if LSB first */ u_int8_t dlen :2; -#define MST_DLEN_32 0 -#define MST_DLEN_16 1 -#define MST_DLEN_24 2 -#define MST_DLEN_24_I2S 3 +#define MST_DLEN_32 0 +#define MST_DLEN_16 1 +#define MST_DLEN_24 2 +#define MST_DLEN_24_I2S 3 u_int8_t :3; - u_int8_t reserved4[2]; + u_int16_t max_write_speed; /* max raw data rate in bytes/1000 */ + u_int16_t cur_write_speed; /* current data rate in bytes/1000 */ }; /* CDROM Changer mechanism status structure */ @@ -184,34 +191,34 @@ struct changer { u_int8_t slots; /* number of available slots */ u_int16_t table_length; /* slot table length */ struct { - u_int8_t changed :1; /* media has changed in this slot */ - u_int8_t unused :6; - u_int8_t present :1; /* slot has a CD present */ - u_int8_t reserved0; - u_int8_t reserved1; - u_int8_t reserved2; + u_int8_t changed :1; /* media has changed in this slot */ + u_int8_t unused :6; + u_int8_t present :1; /* slot has a CD present */ + u_int8_t reserved0; + u_int8_t reserved1; + u_int8_t reserved2; } slot[32]; }; /* CDROM Write Parameters Mode Page (Burners ONLY) */ struct write_param { - /* Mode Page data header */ + /* mode page data header */ u_int16_t data_length; u_int8_t medium_type; u_int8_t dev_spec; u_int8_t unused[2]; u_int16_t blk_desc_len; - /* Write Parameters mode page */ + /* write parameters page */ u_int8_t page_code; #define ATAPI_CDROM_WRITE_PARAMETERS_PAGE 0x05 u_int8_t page_length; /* 0x32 */ u_int8_t write_type :4; /* write stream type */ -#define CDR_WTYPE_PACKET 0x00 -#define CDR_WTYPE_TRACK 0x01 -#define CDR_WTYPE_SESSION 0x02 -#define CDR_WTYPE_RAW 0x03 +#define CDR_WTYPE_PACKET 0x00 +#define CDR_WTYPE_TRACK 0x01 +#define CDR_WTYPE_SESSION 0x02 +#define CDR_WTYPE_RAW 0x03 u_int8_t test_write :1; /* test write enable */ u_int8_t reserved2_567 :3; @@ -225,28 +232,28 @@ struct write_param { u_int8_t copy :1; /* generation stamp */ u_int8_t fp :1; /* fixed packet type */ u_int8_t multi_session :2; /* multi-session type */ -#define CDR_MSES_NONE 0x00 -#define CDR_MSES_FINAL 0x01 -#define CDR_MSES_RESERVED 0x02 -#define CDR_MSES_NULTI 0x03 +#define CDR_MSES_NONE 0x00 +#define CDR_MSES_FINAL 0x01 +#define CDR_MSES_RESERVED 0x02 +#define CDR_MSES_MULTI 0x03 - u_int8_t data_block_type :4; /* data block type code */ + u_int8_t data_block_type :4; /* data block type code */ #define CDR_DB_RAW 0x0 /* 2352 bytes of raw data */ -#define CDR_DB_RAW_PQ 0x1 /* 2368 bytes raw data + P/Q subchan */ -#define CDR_DB_RAW_PW 0x2 /* 2448 bytes raw data + P-W subchan */ -#define CDR_DB_RAW_PW_R 0x3 /* 2448 bytes raw data + P-W raw sub */ -#define CDR_DB_RES_4 0x4 /* reserved */ -#define CDR_DB_RES_5 0x5 /* reserved */ -#define CDR_DB_RES_6 0x6 /* reserved */ -#define CDR_DB_VS_7 0x7 /* vendor specific */ -#define CDR_DB_ROM_MODE1 0x8 /* 2048 bytes Mode 1 (ISO/IEC 10149) */ -#define CDR_DB_ROM_MODE2 0x9 /* 2336 bytes Mode 2 (ISO/IEC 10149) */ -#define CDR_DB_XA_MODE1 0x10 /* 2048 bytes Mode 1 (CD-ROM XA 1) */ -#define CDR_DB_XA_MODE2_F1 0x11 /* 2056 bytes Mode 2 (CD-ROM XA 1) */ -#define CDR_DB_XA_MODE2_F2 0x12 /* 2324 bytes Mode 2 (CD-ROM XA 2) */ -#define CDR_DB_XA_MODE2_MIX 0x13 /* 2332 bytes Mode 2 (CD-ROM XA 1/2) */ -#define CDR_DB_RES_14 0x14 /* reserved */ -#define CDR_DB_VS_15 0x15 /* vendor specific */ +#define CDR_DB_RAW_PQ 0x1 /* 2368 bytes raw data + P/Q subchan */ +#define CDR_DB_RAW_PW 0x2 /* 2448 bytes raw data + P-W subchan */ +#define CDR_DB_RAW_PW_R 0x3 /* 2448 bytes raw data + P-W raw sub */ +#define CDR_DB_RES_4 0x4 /* reserved */ +#define CDR_DB_RES_5 0x5 /* reserved */ +#define CDR_DB_RES_6 0x6 /* reserved */ +#define CDR_DB_VS_7 0x7 /* vendor specific */ +#define CDR_DB_ROM_MODE1 0x8 /* 2048 bytes Mode 1 (ISO/IEC 10149) */ +#define CDR_DB_ROM_MODE2 0x9 /* 2336 bytes Mode 2 (ISO/IEC 10149) */ +#define CDR_DB_XA_MODE1 0x10 /* 2048 bytes Mode 1 (CD-ROM XA 1) */ +#define CDR_DB_XA_MODE2_F1 0x11 /* 2056 bytes Mode 2 (CD-ROM XA 1) */ +#define CDR_DB_XA_MODE2_F2 0x12 /* 2324 bytes Mode 2 (CD-ROM XA 2) */ +#define CDR_DB_XA_MODE2_MIX 0x13 /* 2332 bytes Mode 2 (CD-ROM XA 1/2) */ +#define CDR_DB_RES_14 0x14 /* reserved */ +#define CDR_DB_VS_15 0x15 /* vendor specific */ u_int8_t reserved4_4567 :4; u_int8_t reserved5; @@ -268,12 +275,11 @@ struct write_param { u_int8_t sub_hdr_byte2; u_int8_t sub_hdr_byte3; /* - u_int8_t vendor_specific_byte0; - u_int8_t vendor_specific_byte1; - u_int8_t vendor_specific_byte2; - u_int8_t vendor_specific_byte3; + u_int8_t vendor_specific_byte0; + u_int8_t vendor_specific_byte1; + u_int8_t vendor_specific_byte2; + u_int8_t vendor_specific_byte3; */ - } __attribute__((packed)); /* CDROM Read Track Information structure */ @@ -302,39 +308,47 @@ struct acd_track_info { /* Structure describing an ATAPI CDROM device */ struct acd_softc { - struct atapi_softc *atp; /* controller structure */ + struct atapi_softc *atp; /* controller structure */ int32_t lun; /* logical device unit */ int32_t flags; /* device state flags */ +#define F_BOPEN 0x0001 /* the block device is opened */ +#define F_LOCKED 0x0002 /* this unit is locked */ +#define F_WRITING 0x0004 /* this unit is writing */ +#define F_TRACK_PREP 0x0010 /* track should be prep'ed */ +#define F_TRACK_PREPED 0x0020 /* track has been prep'ed */ +#define F_DISK_PREPED 0x0040 /* disk has been prep'ed */ +#define F_WRITTEN 0x0080 /* medium has been written to */ + int32_t refcnt; /* the number of raw opens */ struct buf_queue_head buf_queue; /* Queue of i/o requests */ - struct toc toc; /* table of disc contents */ + struct toc toc; /* table of disc contents */ struct { - u_int32_t volsize; /* volume size in blocks */ - u_int32_t blksize; /* block size in bytes */ + u_int32_t volsize; /* volume size in blocks */ + u_int32_t blksize; /* block size in bytes */ } info; - struct audiopage au; /* audio page info */ - struct cappage cap; /* capabilities page info */ - struct audiopage aumask; /* audio page mask */ + struct audiopage au; /* audio page info */ + struct cappage cap; /* capabilities page info */ + struct audiopage aumask; /* audio page mask */ struct { /* subchannel info */ - u_int8_t void0; - u_int8_t audio_status; - u_int16_t data_length; - u_int8_t data_format; - u_int8_t control; - u_int8_t track; - u_int8_t indx; - u_int32_t abslba; - u_int32_t rellba; + u_int8_t void0; + u_int8_t audio_status; + u_int16_t data_length; + u_int8_t data_format; + u_int8_t control; + u_int8_t track; + u_int8_t indx; + u_int32_t abslba; + u_int32_t rellba; } subchan; - struct changer *changer_info; /* changer info */ - int32_t slot; /* this lun's slot number */ + struct changer *changer_info; /* changer info */ + int32_t slot; /* this lun's slot number */ u_int32_t block_size; /* blocksize currently used */ u_int8_t dummy; /* use dummy writes */ u_int8_t speed; /* select drive speed */ - u_int32_t next_writeable_lba; /* next writable position */ - struct wormio_prepare_track preptrack; /* scratch region */ - struct devstat *stats; /* devstat entry */ + u_int32_t next_writeable_addr; /* next writable address */ + struct wormio_prepare_track preptrack; /* scratch region */ + struct devstat *stats; /* devstat entry */ }; -#define CDRIOCBLANK _IO('c',100) /* blank a CDRW disc */ -#define CDRIOCNEXTWRITEABLEADDR _IOR('c',101,int) +#define CDRIOCBLANK _IO('c',100) /* blank a CDRW disc */ +#define CDRIOCNEXTWRITEABLEADDR _IOR('c',101,int) |
