summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/scdreg.h
blob: d04dc6919e2e0838d1567e70ba2c94e9dafc5bdc (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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*-
 * Copyright (c) 1995 Mikael Hybsch
 * 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
 *    in this position and unchanged.
 * 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. 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.
 *
 * $Id$
 *
 */

#ifndef SCD_H
#define	SCD_H

#ifdef __GNUC__
#if __GNUC__ >= 2
#pragma pack(1)
#endif
#endif

typedef unsigned char	bcd_t;
#define	M_msf(msf)	msf[0]
#define	S_msf(msf)	msf[1]
#define	F_msf(msf)	msf[2]

#define	IS_ATTENTION(port)	((inb(port+IREG_STATUS) & SBIT_ATTENTION) != 0)
#define	IS_BUSY(port)		((inb(port+IREG_STATUS) & SBIT_BUSY) != 0)
#define	IS_DATA_RDY(port)	((inb(port+IREG_STATUS) & SBIT_DATA_READY) != 0)
#define	STATUS_BIT(port, bit)	((inb(port+IREG_STATUS) & (bit)) != 0)
#define	FSTATUS_BIT(port, bit)	((inb(port+IREG_FSTATUS) & (bit)) != 0)

#define OREG_COMMAND	0
#define OREG_WPARAMS	1
#define OREG_CONTROL	3
#define CBIT_ATTENTION_CLEAR		0x01
#define CBIT_RESULT_READY_CLEAR		0x02
#define CBIT_DATA_READY_CLEAR		0x04
#define CBIT_RPARAM_CLEAR		0x40
#define CBIT_RESET_DRIVE		0x80

#define IREG_STATUS  0
#define SBIT_ATTENTION		0x01
#define SBIT_RESULT_READY	0x02
#define SBIT_DATA_READY		0x04
#define SBIT_BUSY		0x80

#define IREG_RESULT		1
#define IREG_DATA		2
#define IREG_FSTATUS		3
#define FBIT_WPARAM_READY	0x01

#define CMD_GET_DRIVE_CONFIG	0x00
#define CMD_SET_DRIVE_PARAM	0x10
#define CMD_GET_SUBCHANNEL_DATA	0x21
#define CMD_GET_TOC		0x24
#define CMD_READ_TOC		0x30
#define CMD_READ		0x34
#define CMD_PLAY_AUDIO		0x40
#define CMD_STOP_AUDIO		0x41
#define CMD_EJECT		0x50
#define CMD_SPIN_UP		0x51
#define CMD_SPIN_DOWN		0x52

#define ERR_CD_NOT_LOADED	0x20
#define ERR_NO_CD_INSIDE	0x21
#define ERR_NOT_SPINNING	0x22
#define ERR_FATAL_READ_ERROR1	0x53
#define ERR_FATAL_READ_ERROR2	0x57

#define ATTEN_DRIVE_LOADED	0x80
#define ATTEN_EJECT_PUSHED	0x81
#define ATTEN_AUDIO_DONE	0x90
#define ATTEN_SPIN_UP_DONE	0x24
#define ATTEN_SPIN_DOWN		0x27
#define ATTEN_EJECT_DONE	0x28


struct sony_drive_configuration {
	char vendor[8];
	char product[16];
	char revision[8];
	u_short config;
};

/* Almost same as cd_sub_channel_position_data */
struct sony_subchannel_position_data {
	u_char	control:4;
	u_char	addr_type:4;
	u_char	track_number;
	u_char	index_number;
	u_char	rel_msf[3];
	u_char	dummy;
	u_char	abs_msf[3];
};

struct sony_tracklist {
	u_char adr :4; /* xcdplayer needs these two values */
	u_char ctl :4;
	u_char track;
	u_char start_msf[3];
};

#define MAX_TRACKS 100

struct sony_toc {
	u_char session_number;

	u_char :8;
	u_char :8;
	u_char first_track;
	u_char :8;
	u_char :8;

	u_char :8;
	u_char :8;
	u_char last_track;
	u_char :8;
	u_char :8;

	u_char :8;
	u_char :8;
	u_char lead_out_start_msf[3];

	struct sony_tracklist tracks[MAX_TRACKS];

	/* The rest is just to take space in case all data is returned */

	u_char dummy[6*9];
};

#endif /* SCD_H */
OpenPOWER on IntegriCloud