aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ata/atapi-cd.h
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>1999-09-21 19:50:40 +0000
committerSøren Schmidt <sos@FreeBSD.org>1999-09-21 19:50:40 +0000
commit3427651043774ff9d605336873d697b1721f94d0 (patch)
treebc242236f188422387165dda7b3dd861aaa41d0d /sys/dev/ata/atapi-cd.h
parent3a049969b5cfa291d71c5f62d99603123aa9a074 (diff)
Notes
Diffstat (limited to 'sys/dev/ata/atapi-cd.h')
-rw-r--r--sys/dev/ata/atapi-cd.h214
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)