1/*
2 * Definitions for a Mitsumi CD-ROM interface
3 *
4 *	Copyright (C) 1992  Martin Harriss
5 *
6 *	martin@bdsi.com
7 *
8 *  This program is free software; you can redistribute it and/or modify
9 *  it under the terms of the GNU General Public License as published by
10 *  the Free Software Foundation; either version 2 of the License, or
11 *  (at your option) any later version.
12 *
13 *  This program is distributed in the hope that it will be useful,
14 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *  GNU General Public License for more details.
17 *
18 *  You should have received a copy of the GNU General Public License
19 *  along with this program; if not, write to the Free Software
20 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *
22 */
23
24/* Increase this if you get lots of timeouts */
25#define MCD_STATUS_DELAY	1000
26
27/* number of times to retry a command before giving up */
28#define MCD_RETRY_ATTEMPTS      10
29
30/* port access macro */
31#define MCDPORT(x)		(mcd_port + (x))
32
33/* How many sectors to read at 1x when an error at 2x speed occurs. */
34/* You can change this to anything from 2 to 32767, but 30 seems to */
35/* work best for me.  I have found that when the drive has problems */
36/* reading one sector, it will have troubles reading the next few.  */
37#define SINGLE_HOLD_SECTORS 30
38
39#define MCMD_2X_READ 0xC1	/* Double Speed Read DON'T TOUCH! */
40
41/* status bits */
42
43#define MST_CMD_CHECK		0x01		/* command error */
44#define MST_BUSY		0x02		/* now playing */
45#define MST_READ_ERR		0x04		/* read error */
46#define MST_DSK_TYPE		0x08
47#define MST_SERVO_CHECK		0x10
48#define MST_DSK_CHG		0x20		/* disk removed or changed */
49#define MST_READY		0x40		/* disk in the drive */
50#define MST_DOOR_OPEN		0x80		/* door is open */
51
52/* flag bits */
53
54#define MFL_DATA		0x02		/* data available */
55#define MFL_STATUS		0x04		/* status available */
56
57/* commands */
58
59#define MCMD_GET_DISK_INFO	0x10		/* read info from disk */
60#define MCMD_GET_Q_CHANNEL	0x20		/* read info from q channel */
61#define MCMD_GET_STATUS		0x40
62#define MCMD_SET_MODE		0x50
63#define MCMD_SOFT_RESET		0x60
64#define MCMD_STOP		0x70		/* stop play */
65#define MCMD_CONFIG_DRIVE	0x90
66#define MCMD_SET_VOLUME		0xAE		/* set audio level */
67#define MCMD_PLAY_READ		0xC0		/* play or read data */
68#define MCMD_GET_VERSION  	0xDC
69#define MCMD_EJECT		0xF6            /* eject (FX drive) */
70
71/* borrowed from hd.c */
72
73#define MAX_TRACKS		104
74
75struct msf {
76	unsigned char	min;
77	unsigned char	sec;
78	unsigned char	frame;
79};
80
81struct mcd_Play_msf {
82	struct msf	start;
83	struct msf	end;
84};
85
86struct mcd_DiskInfo {
87	unsigned char	first;
88	unsigned char	last;
89	struct msf	diskLength;
90	struct msf	firstTrack;
91};
92
93struct mcd_Toc {
94	unsigned char	ctrl_addr;
95	unsigned char	track;
96	unsigned char	pointIndex;
97	struct msf	trackTime;
98	struct msf	diskTime;
99};
100
101#define test1(x)
102#define test2(x)
103#define test3(x)
104#define test4(x)
105#define test5(x)
106
107