summaryrefslogtreecommitdiff
path: root/sys/dev/scsipi/atapi_cd.h
blob: b70a44ac81ebb21dd5c8060c490b960dd7596268 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*	$NetBSD: atapi_cd.h,v 1.10 2001/05/14 20:35:27 bouyer Exp $	*/

/*
 * Copyright (c) 1996 Manuel Bouyer.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by Manuel Bouyer.
 * 4. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#define	ATAPI_LOAD_UNLOAD	0xa6
struct atapi_load_unload {
	u_int8_t opcode;
	u_int8_t unused1[3];
	u_int8_t options;
	u_int8_t unused2[3];
	u_int8_t slot;
	u_int8_t unused3[3];
};

struct atapi_cdrom_page {
	u_int8_t page;
	u_int8_t length;
	u_int8_t reserved;
	u_int8_t inact_mult;
	u_int8_t spm[2];
	u_int8_t fps[2];
};

struct atapi_cap_page {
	/* Capabilities page */
	u_int8_t page_code;
	u_int8_t param_len;  
	u_int8_t reserved1[2];

	u_int8_t cap1;
#define AUDIO_PLAY 0x01		/* audio play supported */
#define AV_COMPOSITE		/* composite audio/video supported */
#define DA_PORT1		/* digital audio on port 1 */
#define DA_PORT2		/* digital audio on port 2 */
#define M2F1			/* mode 2 form 1 (XA) read */
#define M2F2			/* mode 2 form 2 format */
#define CD_MULTISESSION		/* multi-session photo-CD */
	u_int8_t cap2;
#define CD_DA		0x01	/* audio-CD read supported */
#define CD_DA_STREAM	0x02	/* CD-DA streaming */
#define RW_SUB		0x04	/* combined R-W subchannels */
#define RW_SUB_CORR	0x08	/* R-W subchannel data corrected */
#define C2_ERRP		0x10	/* C2 error pointers supported */
#define ISRC		0x20	/* can return the ISRC */
#define UPC		0x40	/* can return the catalog number UPC */
	u_int8_t m_status;
#define CANLOCK		0x01	/* could be locked */
#define LOCK_STATE	0x02	/* current lock state */
#define PREVENT_JUMP	0x04	/* prevent jumper installed */
#define CANEJECT	0x08	/* can eject */
#define MECH_MASK	0xe0	/* loading mechanism type */
#define MECH_CADDY		0x00
#define MECH_TRAY		0x20
#define MECH_POPUP		0x40
#define MECH_CHANGER_INDIV	0x80
#define MECH_CHANGER_CARTRIDGE	0xa0
	u_int8_t cap3;
#define SEPARATE_VOL	0x01	/* independent volume of channels */
#define SEPARATE_MUTE	0x02	/* independent mute of channels */
#define SUPP_DISK_PRESENT 0x04	/* changer can report contents of slots */
#define SSS		0x08	/* software slot selection */
	u_int8_t max_speed[2];	/* max raw data rate in bytes/1000 */
	u_int8_t max_vol_levels[2]; /* number of discrete volume levels */
	u_int8_t buf_size[2];	/* internal buffer size in bytes/1024 */
	u_int8_t cur_speed[2];	/* current data rate in bytes/1000  */
	/* Digital drive output format description (optional?) */
	u_int8_t reserved2;
	u_int8_t dig_output; /* Digital drive output format description */
	u_int8_t reserved3[2];
};

#define ATAPI_CDROM_PAGE	0x0d
#define ATAPI_AUDIO_PAGE	0x0e
#define ATAPI_AUDIO_PAGE_MASK	0x4e
#define ATAPI_CAP_PAGE		0x2a

union atapi_cd_pages {
	u_int8_t page_code;
	struct atapi_cdrom_page cdrom;
	struct atapi_cap_page cap;
	struct cd_audio_page audio;
};

struct atapi_cd_mode_data {
	struct scsipi_mode_header_big header;
	union atapi_cd_pages pages;
};

/* medium type in scsipi_mode_header_big */
#define MDT_UNKNOWN	0x00
#define MDT_DATA_120	0x01
#define MDT_AUDIO_120	0x02
#define MDT_COMB_120	0x03
#define MDT_PHOTO_120	0x04
#define MDT_DATA_80	0x05
#define MDT_AUDIO_80	0x06
#define MDT_COMB_80	0x07
#define MDT_PHOTO_80	0x08
#define MDT_NO_DISC	0x70
#define MDT_DOOR_OPEN	0x71
#define MDT_FMT_ERROR	0x72


#define AUDIOPAGESIZE \
	(sizeof(struct scsipi_mode_header_big) + sizeof(struct cd_audio_page))
#define CDROMPAGESIZE \
	(sizeof(struct scsipi_mode_header_big) + sizeof(struct atapi_cdrom_page))
#define CAPPAGESIZE \
	(sizeof(struct scsipi_mode_header_big) + sizeof(struct atapi_cap_page))