Deleted Added
full compact
mcd.c (2762) mcd.c (3816)
1/*
2 * Copyright 1993 by Holger Veit (data part)
3 * Copyright 1993 by Brian Moore (audio part)
4 * Changes Copyright 1993 by Gary Clark II
5 *
6 * Rewrote probe routine to work on newer Mitsumi drives.
7 * Additional changes (C) 1994 by Jordan K. Hubbard
8 *

--- 25 unchanged lines hidden (view full) ---

34 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
35 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
36 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
37 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
38 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
39 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
40 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41 *
1/*
2 * Copyright 1993 by Holger Veit (data part)
3 * Copyright 1993 by Brian Moore (audio part)
4 * Changes Copyright 1993 by Gary Clark II
5 *
6 * Rewrote probe routine to work on newer Mitsumi drives.
7 * Additional changes (C) 1994 by Jordan K. Hubbard
8 *

--- 25 unchanged lines hidden (view full) ---

34 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
35 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
36 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
37 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
38 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
39 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
40 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41 *
42 * $Id: mcd.c,v 1.24 1994/09/06 21:56:09 se Exp $
42 * $Id: mcd.c,v 1.25 1994/09/14 20:28:25 ache Exp $
43 */
44static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";
45
46#include "mcd.h"
47#if NMCD > 0
48#include <sys/types.h>
49#include <sys/param.h>
50#include <sys/systm.h>
51#include <sys/conf.h>
52#include <sys/file.h>
53#include <sys/buf.h>
54#include <sys/stat.h>
55#include <sys/uio.h>
56#include <sys/ioctl.h>
57#include <sys/cdio.h>
58#include <sys/errno.h>
59#include <sys/dkbad.h>
60#include <sys/disklabel.h>
43 */
44static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";
45
46#include "mcd.h"
47#if NMCD > 0
48#include <sys/types.h>
49#include <sys/param.h>
50#include <sys/systm.h>
51#include <sys/conf.h>
52#include <sys/file.h>
53#include <sys/buf.h>
54#include <sys/stat.h>
55#include <sys/uio.h>
56#include <sys/ioctl.h>
57#include <sys/cdio.h>
58#include <sys/errno.h>
59#include <sys/dkbad.h>
60#include <sys/disklabel.h>
61#include <sys/devconf.h>
62
61#include <i386/isa/isa.h>
62#include <i386/isa/isa_device.h>
63#include <i386/isa/mcdreg.h>
64
65#define MCD_TRACE(fmt,a,b,c,d) {if (mcd_data[unit].debug) {printf("mcd%d: status=0x%02x: ",unit,mcd_data[unit].status); printf(fmt,a,b,c,d);}}
66
67#define mcd_part(dev) ((minor(dev)) & 7)
68#define mcd_unit(dev) (((minor(dev)) & 0x38) >> 3)

--- 123 unchanged lines hidden (view full) ---

192/* several delays */
193#define RDELAY_WAITSTAT 300
194#define RDELAY_WAITMODE 300
195#define RDELAY_WAITREAD 800
196
197#define MIN_DELAY 15
198#define DELAY_GETREPLY 1300000
199
63#include <i386/isa/isa.h>
64#include <i386/isa/isa_device.h>
65#include <i386/isa/mcdreg.h>
66
67#define MCD_TRACE(fmt,a,b,c,d) {if (mcd_data[unit].debug) {printf("mcd%d: status=0x%02x: ",unit,mcd_data[unit].status); printf(fmt,a,b,c,d);}}
68
69#define mcd_part(dev) ((minor(dev)) & 7)
70#define mcd_unit(dev) (((minor(dev)) & 0x38) >> 3)

--- 123 unchanged lines hidden (view full) ---

194/* several delays */
195#define RDELAY_WAITSTAT 300
196#define RDELAY_WAITMODE 300
197#define RDELAY_WAITREAD 800
198
199#define MIN_DELAY 15
200#define DELAY_GETREPLY 1300000
201
202static struct kern_devconf kdc_mcd[NMCD] = { {
203 0, 0, 0, /* filled in by dev_attach */
204 "mcd", 0, { MDDT_ISA, 0, "bio" },
205 isa_generic_externalize, 0, 0, ISA_EXTERNALLEN,
206 &kdc_isa0, /* parent */
207 0, /* parentdata */
208 DC_IDLE, /* status */
209 "Mitsumi CD-ROM controller"
210} };
211
212static inline void
213mcd_registerdev(struct isa_device *id)
214{
215 if(id->id_unit)
216 kdc_mcd[id->id_unit] = kdc_mcd[0];
217 kdc_mcd[id->id_unit].kdc_unit = id->id_unit;
218 kdc_mcd[id->id_unit].kdc_isa = id;
219 dev_attach(&kdc_mcd[id->id_unit]);
220}
221
222
200int mcd_attach(struct isa_device *dev)
201{
202 struct mcd_data *cd = mcd_data + dev->id_unit;
203 int i;
204
205 cd->iobase = dev->id_iobase;
206 cd->flags |= MCDINIT;
207 mcd_soft_reset(dev->id_unit);
208
209#ifdef NOTYET
210 /* wire controller for interrupts and dma */
211 mcd_configure(cd);
212#endif
223int mcd_attach(struct isa_device *dev)
224{
225 struct mcd_data *cd = mcd_data + dev->id_unit;
226 int i;
227
228 cd->iobase = dev->id_iobase;
229 cd->flags |= MCDINIT;
230 mcd_soft_reset(dev->id_unit);
231
232#ifdef NOTYET
233 /* wire controller for interrupts and dma */
234 mcd_configure(cd);
235#endif
236 mcd_registerdev(dev);
213
214 return 1;
215}
216
217int mcdopen(dev_t dev)
218{
219 int unit,part,phys;
220 struct mcd_data *cd;

--- 40 unchanged lines hidden (view full) ---

261
262 if (part == RAW_PART ||
263 (part < cd->dlabel.d_npartitions &&
264 cd->dlabel.d_partitions[part].p_fstype != FS_UNUSED)) {
265 cd->partflags[part] |= MCDOPEN;
266 cd->openflags |= (1<<part);
267 if (part == RAW_PART && phys != 0)
268 cd->partflags[part] |= MCDREADRAW;
237
238 return 1;
239}
240
241int mcdopen(dev_t dev)
242{
243 int unit,part,phys;
244 struct mcd_data *cd;

--- 40 unchanged lines hidden (view full) ---

285
286 if (part == RAW_PART ||
287 (part < cd->dlabel.d_npartitions &&
288 cd->dlabel.d_partitions[part].p_fstype != FS_UNUSED)) {
289 cd->partflags[part] |= MCDOPEN;
290 cd->openflags |= (1<<part);
291 if (part == RAW_PART && phys != 0)
292 cd->partflags[part] |= MCDREADRAW;
293 kdc_mcd[unit].kdc_state = DC_BUSY;
269 return 0;
270 }
271
272 return ENXIO;
273}
274
275int mcdclose(dev_t dev)
276{

--- 6 unchanged lines hidden (view full) ---

283
284 cd = mcd_data + unit;
285 part = mcd_part(dev);
286 phys = mcd_phys(dev);
287
288 if (!(cd->flags & MCDINIT))
289 return ENXIO;
290
294 return 0;
295 }
296
297 return ENXIO;
298}
299
300int mcdclose(dev_t dev)
301{

--- 6 unchanged lines hidden (view full) ---

308
309 cd = mcd_data + unit;
310 part = mcd_part(dev);
311 phys = mcd_phys(dev);
312
313 if (!(cd->flags & MCDINIT))
314 return ENXIO;
315
316 kdc_mcd[unit].kdc_state = DC_IDLE;
291 if (mcd_getstat(unit,1) == -2)
292 return 0;
293
294 /* close channel */
295 cd->partflags[part] &= ~(MCDOPEN|MCDREADRAW);
296 cd->openflags &= ~(1<<part);
297 MCD_TRACE("close: partition=%d\n",part,0,0,0);
298

--- 1157 unchanged lines hidden ---
317 if (mcd_getstat(unit,1) == -2)
318 return 0;
319
320 /* close channel */
321 cd->partflags[part] &= ~(MCDOPEN|MCDREADRAW);
322 cd->openflags &= ~(1<<part);
323 MCD_TRACE("close: partition=%d\n",part,0,0,0);
324

--- 1157 unchanged lines hidden ---