1c1b3d7c5SThomas E. Spanjaard /*- 2*2458a87aSzrj * Copyright (c) 1998 - 2008 Søren Schmidt <sos@FreeBSD.org> 3c1b3d7c5SThomas E. Spanjaard * All rights reserved. 4c1b3d7c5SThomas E. Spanjaard * 5c1b3d7c5SThomas E. Spanjaard * Redistribution and use in source and binary forms, with or without 6c1b3d7c5SThomas E. Spanjaard * modification, are permitted provided that the following conditions 7c1b3d7c5SThomas E. Spanjaard * are met: 8c1b3d7c5SThomas E. Spanjaard * 1. Redistributions of source code must retain the above copyright 9c1b3d7c5SThomas E. Spanjaard * notice, this list of conditions and the following disclaimer, 10c1b3d7c5SThomas E. Spanjaard * without modification, immediately at the beginning of the file. 11c1b3d7c5SThomas E. Spanjaard * 2. Redistributions in binary form must reproduce the above copyright 12c1b3d7c5SThomas E. Spanjaard * notice, this list of conditions and the following disclaimer in the 13c1b3d7c5SThomas E. Spanjaard * documentation and/or other materials provided with the distribution. 14c1b3d7c5SThomas E. Spanjaard * 15c1b3d7c5SThomas E. Spanjaard * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16c1b3d7c5SThomas E. Spanjaard * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17c1b3d7c5SThomas E. Spanjaard * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18c1b3d7c5SThomas E. Spanjaard * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19c1b3d7c5SThomas E. Spanjaard * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20c1b3d7c5SThomas E. Spanjaard * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21c1b3d7c5SThomas E. Spanjaard * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22c1b3d7c5SThomas E. Spanjaard * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23c1b3d7c5SThomas E. Spanjaard * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24c1b3d7c5SThomas E. Spanjaard * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25c1b3d7c5SThomas E. Spanjaard * 26c1b3d7c5SThomas E. Spanjaard * $FreeBSD: src/sys/dev/ata/atapi-cd.h,v 1.45 2006/01/05 21:27:19 sos Exp $ 27c1b3d7c5SThomas E. Spanjaard */ 28c1b3d7c5SThomas E. Spanjaard 29c1b3d7c5SThomas E. Spanjaard #include <sys/param.h> 30c1b3d7c5SThomas E. Spanjaard #include <sys/cdio.h> 31c1b3d7c5SThomas E. Spanjaard #include <sys/devicestat.h> 32c1b3d7c5SThomas E. Spanjaard 33c1b3d7c5SThomas E. Spanjaard /* CDROM Table Of Contents */ 34c1b3d7c5SThomas E. Spanjaard #define MAXTRK 99 35c1b3d7c5SThomas E. Spanjaard struct toc { 36c1b3d7c5SThomas E. Spanjaard struct ioc_toc_header hdr; 37c1b3d7c5SThomas E. Spanjaard struct cd_toc_entry tab[MAXTRK + 1]; 38c1b3d7c5SThomas E. Spanjaard }; 39c1b3d7c5SThomas E. Spanjaard 40c1b3d7c5SThomas E. Spanjaard /* DVD CSS authentication */ 41c1b3d7c5SThomas E. Spanjaard struct dvd_miscauth { 42c1b3d7c5SThomas E. Spanjaard u_int16_t length; 43c1b3d7c5SThomas E. Spanjaard u_int16_t reserved; 44c1b3d7c5SThomas E. Spanjaard u_int8_t data[2048]; 45c1b3d7c5SThomas E. Spanjaard }; 46c1b3d7c5SThomas E. Spanjaard 47c1b3d7c5SThomas E. Spanjaard /* CDROM Audio Control Parameters Page */ 48c1b3d7c5SThomas E. Spanjaard struct audiopage { 49c1b3d7c5SThomas E. Spanjaard /* mode page data header */ 50c1b3d7c5SThomas E. Spanjaard u_int16_t data_length; 51c1b3d7c5SThomas E. Spanjaard u_int8_t medium_type; 52c1b3d7c5SThomas E. Spanjaard u_int8_t dev_spec; 53c1b3d7c5SThomas E. Spanjaard u_int8_t unused[2]; 54c1b3d7c5SThomas E. Spanjaard u_int16_t blk_desc_len; 55c1b3d7c5SThomas E. Spanjaard 56c1b3d7c5SThomas E. Spanjaard /* audio control page */ 57c1b3d7c5SThomas E. Spanjaard u_int8_t page_code; 58c1b3d7c5SThomas E. Spanjaard #define ATAPI_CDROM_AUDIO_PAGE 0x0e 59c1b3d7c5SThomas E. Spanjaard #define ATAPI_CDROM_AUDIO_PAGE_MASK 0x4e 60c1b3d7c5SThomas E. Spanjaard 61c1b3d7c5SThomas E. Spanjaard u_int8_t param_len; 62c1b3d7c5SThomas E. Spanjaard u_int8_t flags; 63c1b3d7c5SThomas E. Spanjaard #define CD_PA_SOTC 0x02 64c1b3d7c5SThomas E. Spanjaard #define CD_PA_IMMED 0x04 65c1b3d7c5SThomas E. Spanjaard 66c1b3d7c5SThomas E. Spanjaard u_int8_t reserved3; 67c1b3d7c5SThomas E. Spanjaard u_int8_t reserved4; 68c1b3d7c5SThomas E. Spanjaard u_int8_t reserved5; 69c1b3d7c5SThomas E. Spanjaard u_int16_t lb_per_sec; 70c1b3d7c5SThomas E. Spanjaard struct port_control { 71c1b3d7c5SThomas E. Spanjaard u_int8_t channels:4; 72c1b3d7c5SThomas E. Spanjaard #define CHANNEL_0 1 73c1b3d7c5SThomas E. Spanjaard #define CHANNEL_1 2 74c1b3d7c5SThomas E. Spanjaard #define CHANNEL_2 4 75c1b3d7c5SThomas E. Spanjaard #define CHANNEL_3 8 76c1b3d7c5SThomas E. Spanjaard 77c1b3d7c5SThomas E. Spanjaard u_int8_t volume; 78c1b3d7c5SThomas E. Spanjaard } port[4]; 79c1b3d7c5SThomas E. Spanjaard }; 80c1b3d7c5SThomas E. Spanjaard 81c1b3d7c5SThomas E. Spanjaard 82c1b3d7c5SThomas E. Spanjaard /* CDROM Capabilities and Mechanical Status Page */ 83c1b3d7c5SThomas E. Spanjaard struct cappage { 84c1b3d7c5SThomas E. Spanjaard /* mode page data header */ 85c1b3d7c5SThomas E. Spanjaard u_int16_t data_length; 86c1b3d7c5SThomas E. Spanjaard u_int8_t medium_type; 87c1b3d7c5SThomas E. Spanjaard #define MST_TYPE_MASK_LOW 0x0f 88c1b3d7c5SThomas E. Spanjaard #define MST_FMT_NONE 0x00 89c1b3d7c5SThomas E. Spanjaard #define MST_DATA_120 0x01 90c1b3d7c5SThomas E. Spanjaard #define MST_AUDIO_120 0x02 91c1b3d7c5SThomas E. Spanjaard #define MST_COMB_120 0x03 92c1b3d7c5SThomas E. Spanjaard #define MST_PHOTO_120 0x04 93c1b3d7c5SThomas E. Spanjaard #define MST_DATA_80 0x05 94c1b3d7c5SThomas E. Spanjaard #define MST_AUDIO_80 0x06 95c1b3d7c5SThomas E. Spanjaard #define MST_COMB_80 0x07 96c1b3d7c5SThomas E. Spanjaard #define MST_PHOTO_80 0x08 97c1b3d7c5SThomas E. Spanjaard 98c1b3d7c5SThomas E. Spanjaard #define MST_TYPE_MASK_HIGH 0x70 99c1b3d7c5SThomas E. Spanjaard #define MST_CDROM 0x00 100c1b3d7c5SThomas E. Spanjaard #define MST_CDR 0x10 101c1b3d7c5SThomas E. Spanjaard #define MST_CDRW 0x20 102803cecd9SHasso Tepper #define MST_DVD 0x40 103c1b3d7c5SThomas E. Spanjaard 104c1b3d7c5SThomas E. Spanjaard #define MST_NO_DISC 0x70 105c1b3d7c5SThomas E. Spanjaard #define MST_DOOR_OPEN 0x71 106c1b3d7c5SThomas E. Spanjaard #define MST_FMT_ERROR 0x72 107c1b3d7c5SThomas E. Spanjaard 108c1b3d7c5SThomas E. Spanjaard u_int8_t dev_spec; 109c1b3d7c5SThomas E. Spanjaard u_int16_t unused; 110c1b3d7c5SThomas E. Spanjaard u_int16_t blk_desc_len; 111c1b3d7c5SThomas E. Spanjaard 112c1b3d7c5SThomas E. Spanjaard /* capabilities page */ 113c1b3d7c5SThomas E. Spanjaard u_int8_t page_code; 114c1b3d7c5SThomas E. Spanjaard #define ATAPI_CDROM_CAP_PAGE 0x2a 115c1b3d7c5SThomas E. Spanjaard 116c1b3d7c5SThomas E. Spanjaard u_int8_t param_len; 117c1b3d7c5SThomas E. Spanjaard 118c1b3d7c5SThomas E. Spanjaard u_int16_t media; 119c1b3d7c5SThomas E. Spanjaard #define MST_READ_CDR 0x0001 120c1b3d7c5SThomas E. Spanjaard #define MST_READ_CDRW 0x0002 121c1b3d7c5SThomas E. Spanjaard #define MST_READ_PACKET 0x0004 122c1b3d7c5SThomas E. Spanjaard #define MST_READ_DVDROM 0x0008 123c1b3d7c5SThomas E. Spanjaard #define MST_READ_DVDR 0x0010 124c1b3d7c5SThomas E. Spanjaard #define MST_READ_DVDRAM 0x0020 125c1b3d7c5SThomas E. Spanjaard #define MST_WRITE_CDR 0x0100 126c1b3d7c5SThomas E. Spanjaard #define MST_WRITE_CDRW 0x0200 127c1b3d7c5SThomas E. Spanjaard #define MST_WRITE_TEST 0x0400 128c1b3d7c5SThomas E. Spanjaard #define MST_WRITE_DVDR 0x1000 129c1b3d7c5SThomas E. Spanjaard #define MST_WRITE_DVDRAM 0x2000 130c1b3d7c5SThomas E. Spanjaard 131c1b3d7c5SThomas E. Spanjaard u_int16_t capabilities; 132c1b3d7c5SThomas E. Spanjaard #define MST_AUDIO_PLAY 0x0001 133c1b3d7c5SThomas E. Spanjaard #define MST_COMPOSITE 0x0002 134c1b3d7c5SThomas E. Spanjaard #define MST_AUDIO_P1 0x0004 135c1b3d7c5SThomas E. Spanjaard #define MST_AUDIO_P2 0x0008 136c1b3d7c5SThomas E. Spanjaard #define MST_MODE2_f1 0x0010 137c1b3d7c5SThomas E. Spanjaard #define MST_MODE2_f2 0x0020 138c1b3d7c5SThomas E. Spanjaard #define MST_MULTISESSION 0x0040 139c1b3d7c5SThomas E. Spanjaard #define MST_BURNPROOF 0x0080 140c1b3d7c5SThomas E. Spanjaard #define MST_READ_CDDA 0x0100 141c1b3d7c5SThomas E. Spanjaard #define MST_CDDA_STREAM 0x0200 142c1b3d7c5SThomas E. Spanjaard #define MST_COMBINED_RW 0x0400 143c1b3d7c5SThomas E. Spanjaard #define MST_CORRECTED_RW 0x0800 144c1b3d7c5SThomas E. Spanjaard #define MST_SUPPORT_C2 0x1000 145c1b3d7c5SThomas E. Spanjaard #define MST_ISRC 0x2000 146c1b3d7c5SThomas E. Spanjaard #define MST_UPC 0x4000 147c1b3d7c5SThomas E. Spanjaard 148c1b3d7c5SThomas E. Spanjaard u_int8_t mechanism; 149c1b3d7c5SThomas E. Spanjaard #define MST_LOCKABLE 0x01 150c1b3d7c5SThomas E. Spanjaard #define MST_LOCKED 0x02 151c1b3d7c5SThomas E. Spanjaard #define MST_PREVENT 0x04 152c1b3d7c5SThomas E. Spanjaard #define MST_EJECT 0x08 153c1b3d7c5SThomas E. Spanjaard #define MST_MECH_MASK 0xe0 154c1b3d7c5SThomas E. Spanjaard #define MST_MECH_CADDY 0x00 155c1b3d7c5SThomas E. Spanjaard #define MST_MECH_TRAY 0x20 156c1b3d7c5SThomas E. Spanjaard #define MST_MECH_POPUP 0x40 157c1b3d7c5SThomas E. Spanjaard #define MST_MECH_CHANGER 0x80 158c1b3d7c5SThomas E. Spanjaard #define MST_MECH_CARTRIDGE 0xa0 159c1b3d7c5SThomas E. Spanjaard 160c1b3d7c5SThomas E. Spanjaard uint8_t audio; 161c1b3d7c5SThomas E. Spanjaard #define MST_SEP_VOL 0x01 162c1b3d7c5SThomas E. Spanjaard #define MST_SEP_MUTE 0x02 163c1b3d7c5SThomas E. Spanjaard 164c1b3d7c5SThomas E. Spanjaard u_int16_t max_read_speed; /* max raw data rate in bytes/1000 */ 165c1b3d7c5SThomas E. Spanjaard u_int16_t max_vol_levels; /* number of discrete volume levels */ 166c1b3d7c5SThomas E. Spanjaard u_int16_t buf_size; /* internal buffer size in bytes/1024 */ 167c1b3d7c5SThomas E. Spanjaard u_int16_t cur_read_speed; /* current data rate in bytes/1000 */ 168c1b3d7c5SThomas E. Spanjaard 169c1b3d7c5SThomas E. Spanjaard u_int8_t reserved3; 170c1b3d7c5SThomas E. Spanjaard u_int8_t misc; 171c1b3d7c5SThomas E. Spanjaard 172c1b3d7c5SThomas E. Spanjaard u_int16_t max_write_speed; /* max raw data rate in bytes/1000 */ 173c1b3d7c5SThomas E. Spanjaard u_int16_t cur_write_speed; /* current data rate in bytes/1000 */ 174c1b3d7c5SThomas E. Spanjaard u_int16_t copy_protect_rev; 175c1b3d7c5SThomas E. Spanjaard u_int16_t reserved4; 176c1b3d7c5SThomas E. Spanjaard }; 177c1b3d7c5SThomas E. Spanjaard 178c1b3d7c5SThomas E. Spanjaard /* CDROM Write Parameters Mode Page (Burners ONLY) */ 179c1b3d7c5SThomas E. Spanjaard struct write_param { 180c1b3d7c5SThomas E. Spanjaard /* mode page data header */ 181c1b3d7c5SThomas E. Spanjaard u_int16_t data_length; 182c1b3d7c5SThomas E. Spanjaard u_int8_t medium_type; 183c1b3d7c5SThomas E. Spanjaard u_int8_t dev_spec; 184c1b3d7c5SThomas E. Spanjaard u_int8_t unused[2]; 185c1b3d7c5SThomas E. Spanjaard u_int16_t blk_desc_len; 186c1b3d7c5SThomas E. Spanjaard 187c1b3d7c5SThomas E. Spanjaard /* write parameters page */ 188c1b3d7c5SThomas E. Spanjaard u_int8_t page_code; 189c1b3d7c5SThomas E. Spanjaard #define ATAPI_CDROM_WRITE_PARAMETERS_PAGE 0x05 190c1b3d7c5SThomas E. Spanjaard 191c1b3d7c5SThomas E. Spanjaard u_int8_t page_length; /* 0x32 */ 192c1b3d7c5SThomas E. Spanjaard u_int8_t write_type :4; /* write stream type */ 193c1b3d7c5SThomas E. Spanjaard #define CDR_WTYPE_PACKET 0x00 194c1b3d7c5SThomas E. Spanjaard #define CDR_WTYPE_TRACK 0x01 195c1b3d7c5SThomas E. Spanjaard #define CDR_WTYPE_SESSION 0x02 196c1b3d7c5SThomas E. Spanjaard #define CDR_WTYPE_RAW 0x03 197c1b3d7c5SThomas E. Spanjaard 198c1b3d7c5SThomas E. Spanjaard u_int8_t test_write :1; /* test write enable */ 199c1b3d7c5SThomas E. Spanjaard u_int8_t link_size_valid :1; 200c1b3d7c5SThomas E. Spanjaard u_int8_t burnproof :1; /* BurnProof enable */ 201c1b3d7c5SThomas E. Spanjaard u_int8_t reserved2_7 :1; 202c1b3d7c5SThomas E. Spanjaard u_int8_t track_mode :4; /* track mode */ 203c1b3d7c5SThomas E. Spanjaard #define CDR_TMODE_AUDIO 0x00 204c1b3d7c5SThomas E. Spanjaard #define CDR_TMODE_AUDIO_PREEMP 0x01 205c1b3d7c5SThomas E. Spanjaard #define CDR_TMODE_ALLOW_COPY 0x02 206c1b3d7c5SThomas E. Spanjaard #define CDR_TMODE_DATA 0x04 207c1b3d7c5SThomas E. Spanjaard #define CDR_TMODE_QUAD_AUDIO 0x08 208c1b3d7c5SThomas E. Spanjaard 209c1b3d7c5SThomas E. Spanjaard u_int8_t copy :1; /* generation stamp */ 210c1b3d7c5SThomas E. Spanjaard u_int8_t fp :1; /* fixed packet type */ 211c1b3d7c5SThomas E. Spanjaard u_int8_t session_type :2; /* session type */ 212c1b3d7c5SThomas E. Spanjaard #define CDR_SESS_NONE 0x00 213c1b3d7c5SThomas E. Spanjaard #define CDR_SESS_FINAL 0x01 214c1b3d7c5SThomas E. Spanjaard #define CDR_SESS_RESERVED 0x02 215c1b3d7c5SThomas E. Spanjaard #define CDR_SESS_MULTI 0x03 216c1b3d7c5SThomas E. Spanjaard 217c1b3d7c5SThomas E. Spanjaard u_int8_t datablock_type :4; /* data type code (see cdrio.h) */ 218c1b3d7c5SThomas E. Spanjaard u_int8_t reserved4_4567 :4; 219c1b3d7c5SThomas E. Spanjaard u_int8_t link_size; 220c1b3d7c5SThomas E. Spanjaard u_int8_t reserved6; 221c1b3d7c5SThomas E. Spanjaard u_int8_t host_app_code :6; /* host application code */ 222c1b3d7c5SThomas E. Spanjaard u_int8_t reserved7_67 :2; 223c1b3d7c5SThomas E. Spanjaard u_int8_t session_format; /* session format */ 224c1b3d7c5SThomas E. Spanjaard #define CDR_SESS_CDROM 0x00 225c1b3d7c5SThomas E. Spanjaard #define CDR_SESS_CDI 0x10 226c1b3d7c5SThomas E. Spanjaard #define CDR_SESS_CDROM_XA 0x20 227c1b3d7c5SThomas E. Spanjaard 228c1b3d7c5SThomas E. Spanjaard u_int8_t reserved9; 229c1b3d7c5SThomas E. Spanjaard u_int32_t packet_size; /* packet size in bytes */ 230c1b3d7c5SThomas E. Spanjaard u_int16_t audio_pause_length; /* audio pause length in secs */ 231c1b3d7c5SThomas E. Spanjaard u_int8_t media_catalog_number[16]; 232c1b3d7c5SThomas E. Spanjaard u_int8_t isr_code[16]; 233c1b3d7c5SThomas E. Spanjaard u_int8_t sub_hdr_byte0; 234c1b3d7c5SThomas E. Spanjaard u_int8_t sub_hdr_byte1; 235c1b3d7c5SThomas E. Spanjaard u_int8_t sub_hdr_byte2; 236c1b3d7c5SThomas E. Spanjaard u_int8_t sub_hdr_byte3; 237c1b3d7c5SThomas E. Spanjaard u_int8_t vendor_specific_byte0; 238c1b3d7c5SThomas E. Spanjaard u_int8_t vendor_specific_byte1; 239c1b3d7c5SThomas E. Spanjaard u_int8_t vendor_specific_byte2; 240c1b3d7c5SThomas E. Spanjaard u_int8_t vendor_specific_byte3; 241c1b3d7c5SThomas E. Spanjaard } __packed; 242c1b3d7c5SThomas E. Spanjaard 243c1b3d7c5SThomas E. Spanjaard /* CDROM Read Track Information structure */ 244c1b3d7c5SThomas E. Spanjaard struct acd_track_info { 245c1b3d7c5SThomas E. Spanjaard u_int16_t data_length; 246c1b3d7c5SThomas E. Spanjaard u_int8_t track_number; /* current track number */ 247c1b3d7c5SThomas E. Spanjaard u_int8_t session_number; /* current session number */ 248c1b3d7c5SThomas E. Spanjaard u_int8_t reserved4; 249c1b3d7c5SThomas E. Spanjaard u_int8_t track_mode :4; /* mode of this track */ 250c1b3d7c5SThomas E. Spanjaard u_int8_t copy :1; /* generation stamp */ 251c1b3d7c5SThomas E. Spanjaard u_int8_t damage :1; /* damaged track */ 252c1b3d7c5SThomas E. Spanjaard u_int8_t reserved5_67 :2; 253c1b3d7c5SThomas E. Spanjaard u_int8_t data_mode :4; /* data mode of this disc */ 254c1b3d7c5SThomas E. Spanjaard u_int8_t fp :1; /* fixed packet */ 255c1b3d7c5SThomas E. Spanjaard u_int8_t packet :1; /* packet track */ 256c1b3d7c5SThomas E. Spanjaard u_int8_t blank :1; /* blank (empty) track */ 257c1b3d7c5SThomas E. Spanjaard u_int8_t rt :1; /* reserved track */ 258c1b3d7c5SThomas E. Spanjaard u_int8_t nwa_valid :1; /* next_writeable_addr field valid */ 259c1b3d7c5SThomas E. Spanjaard u_int8_t reserved7_17 :7; 260c1b3d7c5SThomas E. Spanjaard u_int track_start_addr; /* start of this track */ 261c1b3d7c5SThomas E. Spanjaard u_int next_writeable_addr; /* next writeable addr on this disc */ 262c1b3d7c5SThomas E. Spanjaard u_int free_blocks; /* free block on this disc */ 263c1b3d7c5SThomas E. Spanjaard u_int fixed_packet_size; /* size of packets on this track */ 264c1b3d7c5SThomas E. Spanjaard u_int track_length; /* length of this track */ 265c1b3d7c5SThomas E. Spanjaard }; 266c1b3d7c5SThomas E. Spanjaard 267c1b3d7c5SThomas E. Spanjaard /* Structure holding tracknode data for track devices */ 268c1b3d7c5SThomas E. Spanjaard struct acd_tracknode { 269c1b3d7c5SThomas E. Spanjaard cdev_t cdev; /* track device node */ 270c1b3d7c5SThomas E. Spanjaard }; 271c1b3d7c5SThomas E. Spanjaard 272c1b3d7c5SThomas E. Spanjaard /* Structure describing an ATAPI CDROM device */ 273c1b3d7c5SThomas E. Spanjaard struct acd_softc { 274c1b3d7c5SThomas E. Spanjaard int flags; /* device state flags */ 275c1b3d7c5SThomas E. Spanjaard #define F_LOCKED 0x0001 /* this unit is locked */ 276c1b3d7c5SThomas E. Spanjaard 277c1b3d7c5SThomas E. Spanjaard struct toc toc; /* table of disc contents */ 278c1b3d7c5SThomas E. Spanjaard struct audiopage au; /* audio page info */ 279c1b3d7c5SThomas E. Spanjaard struct audiopage aumask; /* audio page mask */ 280c1b3d7c5SThomas E. Spanjaard struct cappage cap; /* capabilities page info */ 281c1b3d7c5SThomas E. Spanjaard struct cd_sub_channel_info subchan; /* subchannel info */ 282c1b3d7c5SThomas E. Spanjaard int slot; /* this instance slot number */ 283c1b3d7c5SThomas E. Spanjaard time_t timestamp; /* this instance timestamp */ 284c1b3d7c5SThomas E. Spanjaard u_int32_t disk_size; /* size of current media */ 285c1b3d7c5SThomas E. Spanjaard u_int32_t block_size; /* blocksize currently used */ 286c1b3d7c5SThomas E. Spanjaard u_int32_t iomax; /* Max I/O request (bytes) */ 2870df519f2SMatthew Dillon struct disk disk; /* disk management */ 288c1b3d7c5SThomas E. Spanjaard struct devstat stats; /* devstat entry */ 289c1b3d7c5SThomas E. Spanjaard cdev_t cdev; /* device placeholder */ 290c1b3d7c5SThomas E. Spanjaard struct acd_tracknode *track[MAXTRK+1]; /* tracks */ 291c1b3d7c5SThomas E. Spanjaard }; 292