Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Definitions for the Mitsumi CDROM interface | |
3 | * Copyright (C) 1995 1996 Heiko Schlittermann <heiko@lotte.sax.de> | |
4 | * VERSION: @VERSION@ | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2, or (at your option) | |
9 | * any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | * GNU General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License | |
17 | * along with this program; see the file COPYING. If not, write to | |
18 | * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
19 | * | |
20 | * Thanks to | |
21 | * The Linux Community at all and ... | |
22 | * Martin Harris (he wrote the first Mitsumi Driver) | |
23 | * Eberhard Moenkeberg (he gave me much support and the initial kick) | |
24 | * Bernd Huebner, Ruediger Helsch (Unifix-Software Gmbh, they | |
25 | * improved the original driver) | |
26 | * Jon Tombs, Bjorn Ekwall (module support) | |
27 | * Daniel v. Mosnenck (he sent me the Technical and Programming Reference) | |
28 | * Gerd Knorr (he lent me his PhotoCD) | |
29 | * Nils Faerber and Roger E. Wolff (extensively tested the LU portion) | |
30 | * Andreas Kies (testing the mysterious hang up's) | |
31 | * ... somebody forgotten? | |
32 | * Marcin Dalecki | |
33 | * | |
34 | */ | |
35 | ||
36 | /* | |
37 | * The following lines are for user configuration | |
38 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
39 | * | |
40 | * {0|1} -- 1 if you want the driver detect your drive, may crash and | |
41 | * needs a long time to seek. The higher the address the longer the | |
42 | * seek. | |
43 | * | |
44 | * WARNING: AUTOPROBE doesn't work. | |
45 | */ | |
46 | #define MCDX_AUTOPROBE 0 | |
47 | ||
48 | /* | |
49 | * Drive specific settings according to the jumpers on the controller | |
50 | * board(s). | |
51 | * o MCDX_NDRIVES : number of used entries of the following table | |
52 | * o MCDX_DRIVEMAP : table of {i/o base, irq} per controller | |
53 | * | |
54 | * NOTE: I didn't get a drive at irq 9(2) working. Not even alone. | |
55 | */ | |
56 | #if MCDX_AUTOPROBE == 0 | |
57 | #define MCDX_NDRIVES 1 | |
58 | #define MCDX_DRIVEMAP { \ | |
59 | {0x300, 11}, \ | |
60 | {0x304, 05}, \ | |
61 | {0x000, 00}, \ | |
62 | {0x000, 00}, \ | |
63 | {0x000, 00}, \ | |
64 | } | |
65 | #else | |
66 | #error Autoprobing is not implemented yet. | |
67 | #endif | |
68 | ||
69 | #ifndef MCDX_QUIET | |
70 | #define MCDX_QUIET 1 | |
71 | #endif | |
72 | ||
73 | #ifndef MCDX_DEBUG | |
74 | #define MCDX_DEBUG 0 | |
75 | #endif | |
76 | ||
77 | /* *** make the following line uncommented, if you're sure, | |
78 | * *** all configuration is done */ | |
79 | /* #define I_WAS_HERE */ | |
80 | ||
81 | /* The name of the device */ | |
82 | #define MCDX "mcdx" | |
83 | ||
84 | /* Flags for DEBUGGING */ | |
85 | #define INIT 0 | |
86 | #define MALLOC 0 | |
87 | #define IOCTL 0 | |
88 | #define PLAYTRK 0 | |
89 | #define SUBCHNL 0 | |
90 | #define TOCHDR 0 | |
91 | #define MS 0 | |
92 | #define PLAYMSF 0 | |
93 | #define READTOC 0 | |
94 | #define OPENCLOSE 0 | |
95 | #define HW 0 | |
96 | #define TALK 0 | |
97 | #define IRQ 0 | |
98 | #define XFER 0 | |
99 | #define REQUEST 0 | |
100 | #define SLEEP 0 | |
101 | ||
102 | /* The following addresses are taken from the Mitsumi Reference | |
103 | * and describe the possible i/o range for the controller. | |
104 | */ | |
105 | #define MCDX_IO_BEGIN ((char*) 0x300) /* first base of i/o addr */ | |
106 | #define MCDX_IO_END ((char*) 0x3fc) /* last base of i/o addr */ | |
107 | ||
108 | /* Per controller 4 bytes i/o are needed. */ | |
109 | #define MCDX_IO_SIZE 4 | |
110 | ||
111 | /* | |
112 | * Bits | |
113 | */ | |
114 | ||
115 | /* The status byte, returned from every command, set if | |
116 | * the description is true */ | |
117 | #define MCDX_RBIT_OPEN 0x80 /* door is open */ | |
118 | #define MCDX_RBIT_DISKSET 0x40 /* disk set (recognised) */ | |
119 | #define MCDX_RBIT_CHANGED 0x20 /* disk was changed */ | |
120 | #define MCDX_RBIT_CHECK 0x10 /* disk rotates, servo is on */ | |
121 | #define MCDX_RBIT_AUDIOTR 0x08 /* current track is audio */ | |
122 | #define MCDX_RBIT_RDERR 0x04 /* read error, refer SENSE KEY */ | |
123 | #define MCDX_RBIT_AUDIOBS 0x02 /* currently playing audio */ | |
124 | #define MCDX_RBIT_CMDERR 0x01 /* command, param or format error */ | |
125 | ||
126 | /* The I/O Register holding the h/w status of the drive, | |
127 | * can be read at i/o base + 1 */ | |
128 | #define MCDX_RBIT_DOOR 0x10 /* door is open */ | |
129 | #define MCDX_RBIT_STEN 0x04 /* if 0, i/o base contains drive status */ | |
130 | #define MCDX_RBIT_DTEN 0x02 /* if 0, i/o base contains data */ | |
131 | ||
132 | /* | |
133 | * The commands. | |
134 | */ | |
135 | ||
136 | #define OPCODE 1 /* offset of opcode */ | |
137 | #define MCDX_CMD_REQUEST_TOC 1, 0x10 | |
138 | #define MCDX_CMD_REQUEST_STATUS 1, 0x40 | |
139 | #define MCDX_CMD_RESET 1, 0x60 | |
140 | #define MCDX_CMD_REQUEST_DRIVE_MODE 1, 0xc2 | |
141 | #define MCDX_CMD_SET_INTERLEAVE 2, 0xc8, 0 | |
142 | #define MCDX_CMD_DATAMODE_SET 2, 0xa0, 0 | |
143 | #define MCDX_DATAMODE1 0x01 | |
144 | #define MCDX_DATAMODE2 0x02 | |
145 | #define MCDX_CMD_LOCK_DOOR 2, 0xfe, 0 | |
146 | ||
147 | #define READ_AHEAD 4 /* 8 Sectors (4K) */ | |
148 | ||
149 | /* Useful macros */ | |
150 | #define e_door(x) ((x) & MCDX_RBIT_OPEN) | |
151 | #define e_check(x) (~(x) & MCDX_RBIT_CHECK) | |
152 | #define e_notset(x) (~(x) & MCDX_RBIT_DISKSET) | |
153 | #define e_changed(x) ((x) & MCDX_RBIT_CHANGED) | |
154 | #define e_audio(x) ((x) & MCDX_RBIT_AUDIOTR) | |
155 | #define e_audiobusy(x) ((x) & MCDX_RBIT_AUDIOBS) | |
156 | #define e_cmderr(x) ((x) & MCDX_RBIT_CMDERR) | |
157 | #define e_readerr(x) ((x) & MCDX_RBIT_RDERR) | |
158 | ||
159 | /** no drive specific */ | |
160 | #define MCDX_CDBLK 2048 /* 2048 cooked data each blk */ | |
161 | ||
162 | #define MCDX_DATA_TIMEOUT (HZ/10) /* 0.1 second */ | |
163 | ||
164 | /* | |
165 | * Access to the msf array | |
166 | */ | |
167 | #define MSF_MIN 0 /* minute */ | |
168 | #define MSF_SEC 1 /* second */ | |
169 | #define MSF_FRM 2 /* frame */ | |
170 | ||
171 | /* | |
172 | * Errors | |
173 | */ | |
174 | #define MCDX_E 1 /* unspec error */ | |
175 | #define MCDX_ST_EOM 0x0100 /* end of media */ | |
176 | #define MCDX_ST_DRV 0x00ff /* mask to query the drive status */ | |
177 | ||
178 | #ifndef I_WAS_HERE | |
179 | #ifndef MODULE | |
180 | #warning You have not edited mcdx.h | |
181 | #warning Perhaps irq and i/o settings are wrong. | |
182 | #endif | |
183 | #endif | |
184 | ||
185 | /* ex:set ts=4 sw=4: */ |