summaryrefslogtreecommitdiff
path: root/sys/dev/ata/atapi-cd.h
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>2005-03-30 12:03:40 +0000
committerSøren Schmidt <sos@FreeBSD.org>2005-03-30 12:03:40 +0000
commit8ca4df3299628bad609cb74ee2f76671e07b4788 (patch)
treed973712ac291429795c126539153aec43f4cd2c1 /sys/dev/ata/atapi-cd.h
parent4cb39345c04e97c604c2ed923eea4db5fa7e2632 (diff)
Notes
Diffstat (limited to 'sys/dev/ata/atapi-cd.h')
-rw-r--r--sys/dev/ata/atapi-cd.h466
1 files changed, 231 insertions, 235 deletions
diff --git a/sys/dev/ata/atapi-cd.h b/sys/dev/ata/atapi-cd.h
index 1618df513fbcb..ba16837e35177 100644
--- a/sys/dev/ata/atapi-cd.h
+++ b/sys/dev/ata/atapi-cd.h
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 1998 - 2004 Søren Schmidt <sos@FreeBSD.org>
+ * Copyright (c) 1998 - 2005 Søren Schmidt <sos@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -31,48 +31,48 @@
/* CDROM Table Of Contents */
#define MAXTRK 99
struct toc {
- struct ioc_toc_header hdr;
- struct cd_toc_entry tab[MAXTRK + 1];
+ struct ioc_toc_header hdr;
+ struct cd_toc_entry tab[MAXTRK + 1];
};
/* DVD CSS authentication */
struct dvd_miscauth {
- u_int16_t length;
- u_int16_t reserved;
- u_int8_t data[2048];
+ u_int16_t length;
+ u_int16_t reserved;
+ u_int8_t data[2048];
};
/* CDROM Audio Control Parameters Page */
struct audiopage {
/* 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;
+ 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 */
- u_int8_t page_code;
-#define ATAPI_CDROM_AUDIO_PAGE 0x0e
+ u_int8_t page_code;
+#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
+ u_int8_t param_len;
+ u_int8_t flags;
+#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;
+ 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];
};
@@ -80,241 +80,237 @@ struct audiopage {
/* CDROM Capabilities and Mechanical Status Page */
struct cappage {
/* 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_TYPE_MASK_HIGH 0x70
-#define MST_CDROM 0x00
-#define MST_CDR 0x10
-#define MST_CDRW 0x20
-
-#define MST_NO_DISC 0x70
-#define MST_DOOR_OPEN 0x71
-#define MST_FMT_ERROR 0x72
-
- u_int8_t dev_spec;
- u_int16_t unused;
- u_int16_t blk_desc_len;
+ 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_TYPE_MASK_HIGH 0x70
+#define MST_CDROM 0x00
+#define MST_CDR 0x10
+#define MST_CDRW 0x20
+
+#define MST_NO_DISC 0x70
+#define MST_DOOR_OPEN 0x71
+#define MST_FMT_ERROR 0x72
+
+ u_int8_t dev_spec;
+ u_int16_t unused;
+ u_int16_t blk_desc_len;
/* capabilities page */
- u_int8_t page_code;
-#define ATAPI_CDROM_CAP_PAGE 0x2a
-
- u_int8_t param_len;
-
- u_int16_t media;
-#define MST_READ_CDR 0x0001
-#define MST_READ_CDRW 0x0002
-#define MST_READ_PACKET 0x0004
-#define MST_READ_DVDROM 0x0008
-#define MST_READ_DVDR 0x0010
-#define MST_READ_DVDRAM 0x0020
-#define MST_WRITE_CDR 0x0100
-#define MST_WRITE_CDRW 0x0200
-#define MST_WRITE_TEST 0x0400
-#define MST_WRITE_DVDR 0x1000
-#define MST_WRITE_DVDRAM 0x2000
-
- u_int16_t capabilities;
-#define MST_AUDIO_PLAY 0x0001
-#define MST_COMPOSITE 0x0002
-#define MST_AUDIO_P1 0x0004
-#define MST_AUDIO_P2 0x0008
-#define MST_MODE2_f1 0x0010
-#define MST_MODE2_f2 0x0020
-#define MST_MULTISESSION 0x0040
-#define MST_BURNPROOF 0x0080
-#define MST_READ_CDDA 0x0100
-#define MST_CDDA_STREAM 0x0200
-#define MST_COMBINED_RW 0x0400
-#define MST_CORRECTED_RW 0x0800
-#define MST_SUPPORT_C2 0x1000
-#define MST_ISRC 0x2000
-#define MST_UPC 0x4000
-
- u_int8_t mechanism;
-#define MST_LOCKABLE 0x01
-#define MST_LOCKED 0x02
-#define MST_PREVENT 0x04
-#define MST_EJECT 0x08
-#define MST_MECH_MASK 0xe0
-#define MST_MECH_CADDY 0x00
-#define MST_MECH_TRAY 0x20
-#define MST_MECH_POPUP 0x40
-#define MST_MECH_CHANGER 0x80
-#define MST_MECH_CARTRIDGE 0xa0
-
- uint8_t audio;
-#define MST_SEP_VOL 0x01
-#define MST_SEP_MUTE 0x02
-
- 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_read_speed; /* current data rate in bytes/1000 */
-
- u_int8_t reserved3;
- u_int8_t misc;
-
- 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 */
- u_int16_t copy_protect_rev;
- u_int16_t reserved4;
+ u_int8_t page_code;
+#define ATAPI_CDROM_CAP_PAGE 0x2a
+
+ u_int8_t param_len;
+
+ u_int16_t media;
+#define MST_READ_CDR 0x0001
+#define MST_READ_CDRW 0x0002
+#define MST_READ_PACKET 0x0004
+#define MST_READ_DVDROM 0x0008
+#define MST_READ_DVDR 0x0010
+#define MST_READ_DVDRAM 0x0020
+#define MST_WRITE_CDR 0x0100
+#define MST_WRITE_CDRW 0x0200
+#define MST_WRITE_TEST 0x0400
+#define MST_WRITE_DVDR 0x1000
+#define MST_WRITE_DVDRAM 0x2000
+
+ u_int16_t capabilities;
+#define MST_AUDIO_PLAY 0x0001
+#define MST_COMPOSITE 0x0002
+#define MST_AUDIO_P1 0x0004
+#define MST_AUDIO_P2 0x0008
+#define MST_MODE2_f1 0x0010
+#define MST_MODE2_f2 0x0020
+#define MST_MULTISESSION 0x0040
+#define MST_BURNPROOF 0x0080
+#define MST_READ_CDDA 0x0100
+#define MST_CDDA_STREAM 0x0200
+#define MST_COMBINED_RW 0x0400
+#define MST_CORRECTED_RW 0x0800
+#define MST_SUPPORT_C2 0x1000
+#define MST_ISRC 0x2000
+#define MST_UPC 0x4000
+
+ u_int8_t mechanism;
+#define MST_LOCKABLE 0x01
+#define MST_LOCKED 0x02
+#define MST_PREVENT 0x04
+#define MST_EJECT 0x08
+#define MST_MECH_MASK 0xe0
+#define MST_MECH_CADDY 0x00
+#define MST_MECH_TRAY 0x20
+#define MST_MECH_POPUP 0x40
+#define MST_MECH_CHANGER 0x80
+#define MST_MECH_CARTRIDGE 0xa0
+
+ uint8_t audio;
+#define MST_SEP_VOL 0x01
+#define MST_SEP_MUTE 0x02
+
+ 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_read_speed; /* current data rate in bytes/1000 */
+
+ u_int8_t reserved3;
+ u_int8_t misc;
+
+ 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 */
+ u_int16_t copy_protect_rev;
+ u_int16_t reserved4;
};
-#define CH_READY 0
-#define CH_LOADING 1
-#define CH_UNLOADING 2
-#define CH_INITIALIZING 3
+#define CH_READY 0
+#define CH_LOADING 1
+#define CH_UNLOADING 2
+#define CH_INITIALIZING 3
-#define CD_IDLE 0
-#define CD_AUDIO_ACTIVE 1
-#define CD_AUDIO_SCAN 2
-#define CD_HOST_ACTIVE 3
-#define CD_NO_STATE 7
+#define CD_IDLE 0
+#define CD_AUDIO_ACTIVE 1
+#define CD_AUDIO_SCAN 2
+#define CD_HOST_ACTIVE 3
+#define CD_NO_STATE 7
/* CDROM Changer mechanism status structure */
struct changer {
- u_int8_t current_slot :5; /* active changer slot */
- u_int8_t mech_state :2; /* current changer state */
+ u_int8_t current_slot :5; /* active changer slot */
+ u_int8_t mech_state :2; /* current changer state */
- u_int8_t fault :1; /* fault in last operation */
- u_int8_t reserved0 :5;
- u_int8_t cd_state :3; /* current mechanism state */
+ u_int8_t fault :1; /* fault in last operation */
+ u_int8_t reserved0 :5;
+ u_int8_t cd_state :3; /* current mechanism state */
- u_int8_t current_lba[3]; /* current LBA */
- u_int8_t slots; /* number of available slots */
- u_int16_t table_length; /* slot table length */
+ u_int8_t current_lba[3]; /* current LBA */
+ 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 */
- 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;
+ 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 page */
- u_int8_t page_code;
+ 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
-
- u_int8_t test_write :1; /* test write enable */
- u_int8_t link_size_valid :1;
- u_int8_t burnproof :1; /* BurnProof enable */
- u_int8_t reserved2_7 :1;
- u_int8_t track_mode :4; /* track mode */
-#define CDR_TMODE_AUDIO 0x00
-#define CDR_TMODE_AUDIO_PREEMP 0x01
-#define CDR_TMODE_ALLOW_COPY 0x02
-#define CDR_TMODE_DATA 0x04
-#define CDR_TMODE_QUAD_AUDIO 0x08
-
- u_int8_t copy :1; /* generation stamp */
- u_int8_t fp :1; /* fixed packet type */
- u_int8_t session_type :2; /* session type */
-#define CDR_SESS_NONE 0x00
-#define CDR_SESS_FINAL 0x01
-#define CDR_SESS_RESERVED 0x02
-#define CDR_SESS_MULTI 0x03
-
- u_int8_t datablock_type :4; /* data type code (see cdrio.h) */
- u_int8_t reserved4_4567 :4;
- u_int8_t link_size;
- u_int8_t reserved6;
- u_int8_t host_app_code :6; /* host application code */
- u_int8_t reserved7_67 :2;
- u_int8_t session_format; /* session format */
-#define CDR_SESS_CDROM 0x00
-#define CDR_SESS_CDI 0x10
-#define CDR_SESS_CDROM_XA 0x20
-
- u_int8_t reserved9;
- u_int32_t packet_size; /* packet size in bytes */
- u_int16_t audio_pause_length; /* audio pause length in secs */
- u_int8_t media_catalog_number[16];
- u_int8_t isr_code[16];
- u_int8_t sub_hdr_byte0;
- u_int8_t sub_hdr_byte1;
- 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 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
+
+ u_int8_t test_write :1; /* test write enable */
+ u_int8_t link_size_valid :1;
+ u_int8_t burnproof :1; /* BurnProof enable */
+ u_int8_t reserved2_7 :1;
+ u_int8_t track_mode :4; /* track mode */
+#define CDR_TMODE_AUDIO 0x00
+#define CDR_TMODE_AUDIO_PREEMP 0x01
+#define CDR_TMODE_ALLOW_COPY 0x02
+#define CDR_TMODE_DATA 0x04
+#define CDR_TMODE_QUAD_AUDIO 0x08
+
+ u_int8_t copy :1; /* generation stamp */
+ u_int8_t fp :1; /* fixed packet type */
+ u_int8_t session_type :2; /* session type */
+#define CDR_SESS_NONE 0x00
+#define CDR_SESS_FINAL 0x01
+#define CDR_SESS_RESERVED 0x02
+#define CDR_SESS_MULTI 0x03
+
+ u_int8_t datablock_type :4; /* data type code (see cdrio.h) */
+ u_int8_t reserved4_4567 :4;
+ u_int8_t link_size;
+ u_int8_t reserved6;
+ u_int8_t host_app_code :6; /* host application code */
+ u_int8_t reserved7_67 :2;
+ u_int8_t session_format; /* session format */
+#define CDR_SESS_CDROM 0x00
+#define CDR_SESS_CDI 0x10
+#define CDR_SESS_CDROM_XA 0x20
+
+ u_int8_t reserved9;
+ u_int32_t packet_size; /* packet size in bytes */
+ u_int16_t audio_pause_length; /* audio pause length in secs */
+ u_int8_t media_catalog_number[16];
+ u_int8_t isr_code[16];
+ u_int8_t sub_hdr_byte0;
+ u_int8_t sub_hdr_byte1;
+ 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;
} __packed;
/* CDROM Read Track Information structure */
struct acd_track_info {
- u_int16_t data_length;
- u_int8_t track_number; /* current track number */
- u_int8_t session_number; /* current session number */
- u_int8_t reserved4;
- u_int8_t track_mode :4; /* mode of this track */
- u_int8_t copy :1; /* generation stamp */
- u_int8_t damage :1; /* damaged track */
- u_int8_t reserved5_67 :2;
- u_int8_t data_mode :4; /* data mode of this disc */
- u_int8_t fp :1; /* fixed packet */
- u_int8_t packet :1; /* packet track */
- u_int8_t blank :1; /* blank (empty) track */
- u_int8_t rt :1; /* reserved track */
- u_int8_t nwa_valid :1; /* next_writeable_addr field valid */
- u_int8_t reserved7_17 :7;
- u_int track_start_addr; /* start of this track */
- u_int next_writeable_addr; /* next writeable addr on this disc */
- u_int free_blocks; /* free block on this disc */
- u_int fixed_packet_size; /* size of packets on this track */
- u_int track_length; /* length of this track */
+ u_int16_t data_length;
+ u_int8_t track_number; /* current track number */
+ u_int8_t session_number; /* current session number */
+ u_int8_t reserved4;
+ u_int8_t track_mode :4; /* mode of this track */
+ u_int8_t copy :1; /* generation stamp */
+ u_int8_t damage :1; /* damaged track */
+ u_int8_t reserved5_67 :2;
+ u_int8_t data_mode :4; /* data mode of this disc */
+ u_int8_t fp :1; /* fixed packet */
+ u_int8_t packet :1; /* packet track */
+ u_int8_t blank :1; /* blank (empty) track */
+ u_int8_t rt :1; /* reserved track */
+ u_int8_t nwa_valid :1; /* next_writeable_addr field valid */
+ u_int8_t reserved7_17 :7;
+ u_int track_start_addr; /* start of this track */
+ u_int next_writeable_addr; /* next writeable addr on this disc */
+ u_int free_blocks; /* free block on this disc */
+ u_int fixed_packet_size; /* size of packets on this track */
+ u_int track_length; /* length of this track */
};
/* Structure describing an ATAPI CDROM device */
struct acd_softc {
- struct ata_device *device; /* device softc */
- int lun; /* logical device unit */
- int flags; /* device state flags */
-#define F_LOCKED 0x0001 /* this unit is locked */
-
- struct mtx queue_mtx; /* bio queue lock */
- struct bio_queue_head queue; /* queue of i/o requests */
- struct toc toc; /* table of disc contents */
- struct audiopage au; /* audio page info */
- struct audiopage aumask; /* audio page mask */
- struct cappage cap; /* capabilities page info */
- struct cd_sub_channel_info subchan; /* subchannel info */
- struct changer *changer_info; /* changer info */
- struct acd_softc **driver; /* softc's of changer slots */
- int slot; /* this instance slot number */
- time_t timestamp; /* this instance timestamp */
- u_int32_t disk_size; /* size of current media */
- u_int32_t block_size; /* blocksize currently used */
- u_int32_t iomax; /* Max I/O request (bytes) */
- struct g_geom *gp; /* geom instance */
- struct g_provider *pp[MAXTRK+1]; /* providers */
+ int flags; /* device state flags */
+#define F_LOCKED 0x0001 /* this unit is locked */
+
+ struct toc toc; /* table of disc contents */
+ struct audiopage au; /* audio page info */
+ struct audiopage aumask; /* audio page mask */
+ struct cappage cap; /* capabilities page info */
+ struct cd_sub_channel_info subchan; /* subchannel info */
+ struct changer *changer_info; /* changer info */
+ struct acd_softc **driver; /* softc's of changer slots */
+ int slot; /* this instance slot number */
+ time_t timestamp; /* this instance timestamp */
+ u_int32_t disk_size; /* size of current media */
+ u_int32_t block_size; /* blocksize currently used */
+ u_int32_t iomax; /* Max I/O request (bytes) */
+ struct g_geom *gp; /* geom instance */
+ struct g_provider *pp[MAXTRK+1]; /* providers */
};