1 /* 2 * linux/drivers/block/qd6580.c Version 0.02 Feb 09, 1996 3 * 4 * Copyright (C) 1996 Linus Torvalds & author (see below) 5 */ 6
7 /* 8 * QDI QD6580 EIDE controller fast support by Colten Edwards. 9 * No net access, but (maybe) can be reached at pje120@cs.usask.ca 10 */ 11
12 #undefREALLY_SLOW_IO/* most systems can safely undef this */ 13
14 #include <linux/types.h>
15 #include <linux/kernel.h>
16 #include <linux/delay.h>
17 #include <linux/timer.h>
18 #include <linux/mm.h>
19 #include <linux/ioport.h>
20 #include <linux/blkdev.h>
21 #include <linux/hdreg.h>
22 #include <asm/io.h>
23 #include "ide.h"
24 #include "ide_modes.h"
25
26 /* 27 * Register 0xb3 looks like: 28 * 0x4f is fast mode3 ? 29 * 0x3f is medium mode2 ? 30 * 0x2f is slower mode1 ? 31 * 0x1f is slower yet mode0 ? 32 * 0x0f ??? ??? 33 * 34 * Don't know whether this sets BOTH drives, or just the first drive. 35 * Don't know if there is a separate setting for the second drive. 36 * 37 * Feel free to patch this if you have one of these beasts 38 * and can work out the answers! 39 * 40 * I/O ports are 0xb0 0xb2 and 0xb3 41 * 42 * More research on qd6580 being done by willmore@cig.mot.com (David) 43 * -- this is apparently a *dual* IDE interface 44 */ 45
46 staticvoidtune_qd6580 (ide_drive_t *drive, bytepio)
/* */ 47 { 48 unsignedlongflags;
49
50 if (pio == 255)
51 pio = ide_get_best_pio_mode (drive);
52 if (pio > 3)
53 pio = 3;
54
55 save_flags(flags);
56 cli();
57 outb_p(0x8d,0xb0);
58 outb_p(0x0 ,0xb2);
59 outb_p(((pio+1)<<4)|0x0f,0xb3);
60 inb(0x3f6);
61 restore_flags(flags);
62 } 63
64 voidinit_qd6580 (void)
/* */ 65 { 66 ide_hwifs[0].chipset = ide_qd6580;
67 ide_hwifs[1].chipset = ide_qd6580;
68 ide_hwifs[0].tuneproc = &tune_qd6580;
69 }