xref: /dflybsd-src/sys/dev/disk/nata/atapi-cd.h (revision 2458a87a718a37261418254ad47f5f9adc3366d4)
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