Full support for Ginger Console
[linux-ginger.git] / drivers / ata / pata_legacy.c
blob6932e56d179c8200a86905dbb6040916fc71c7b6
1 /*
2 * pata-legacy.c - Legacy port PATA/SATA controller driver.
3 * Copyright 2005/2006 Red Hat, all rights reserved.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
8 * any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; see the file COPYING. If not, write to
17 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19 * An ATA driver for the legacy ATA ports.
21 * Data Sources:
22 * Opti 82C465/82C611 support: Data sheets at opti-inc.com
23 * HT6560 series:
24 * Promise 20230/20620:
25 * http://www.ryston.cz/petr/vlb/pdc20230b.html
26 * http://www.ryston.cz/petr/vlb/pdc20230c.html
27 * http://www.ryston.cz/petr/vlb/pdc20630.html
29 * Unsupported but docs exist:
30 * Appian/Adaptec AIC25VL01/Cirrus Logic PD7220
32 * This driver handles legacy (that is "ISA/VLB side") IDE ports found
33 * on PC class systems. There are three hybrid devices that are exceptions
34 * The Cyrix 5510/5520 where a pre SFF ATA device is on the bridge and
35 * the MPIIX where the tuning is PCI side but the IDE is "ISA side".
37 * Specific support is included for the ht6560a/ht6560b/opti82c611a/
38 * opti82c465mv/promise 20230c/20630/winbond83759A
40 * Use the autospeed and pio_mask options with:
41 * Appian ADI/2 aka CLPD7220 or AIC25VL01.
42 * Use the jumpers, autospeed and set pio_mask to the mode on the jumpers with
43 * Goldstar GM82C711, PIC-1288A-125, UMC 82C871F, Winbond W83759,
44 * Winbond W83759A, Promise PDC20230-B
46 * For now use autospeed and pio_mask as above with the W83759A. This may
47 * change.
51 #include <linux/async.h>
52 #include <linux/kernel.h>
53 #include <linux/module.h>
54 #include <linux/pci.h>
55 #include <linux/init.h>
56 #include <linux/blkdev.h>
57 #include <linux/delay.h>
58 #include <scsi/scsi_host.h>
59 #include <linux/ata.h>
60 #include <linux/libata.h>
61 #include <linux/platform_device.h>
63 #define DRV_NAME "pata_legacy"
64 #define DRV_VERSION "0.6.5"
66 #define NR_HOST 6
68 static int all;
69 module_param(all, int, 0444);
70 MODULE_PARM_DESC(all, "Grab all legacy port devices, even if PCI(0=off, 1=on)");
72 struct legacy_data {
73 unsigned long timing;
74 u8 clock[2];
75 u8 last;
76 int fast;
77 struct platform_device *platform_dev;
81 enum controller {
82 BIOS = 0,
83 SNOOP = 1,
84 PDC20230 = 2,
85 HT6560A = 3,
86 HT6560B = 4,
87 OPTI611A = 5,
88 OPTI46X = 6,
89 QDI6500 = 7,
90 QDI6580 = 8,
91 QDI6580DP = 9, /* Dual channel mode is different */
92 W83759A = 10,
94 UNKNOWN = -1
98 struct legacy_probe {
99 unsigned char *name;
100 unsigned long port;
101 unsigned int irq;
102 unsigned int slot;
103 enum controller type;
104 unsigned long private;
107 struct legacy_controller {
108 const char *name;
109 struct ata_port_operations *ops;
110 unsigned int pio_mask;
111 unsigned int flags;
112 unsigned int pflags;
113 int (*setup)(struct platform_device *, struct legacy_probe *probe,
114 struct legacy_data *data);
117 static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
119 static struct legacy_probe probe_list[NR_HOST];
120 static struct legacy_data legacy_data[NR_HOST];
121 static struct ata_host *legacy_host[NR_HOST];
122 static int nr_legacy_host;
125 static int probe_all; /* Set to check all ISA port ranges */
126 static int ht6560a; /* HT 6560A on primary 1, second 2, both 3 */
127 static int ht6560b; /* HT 6560A on primary 1, second 2, both 3 */
128 static int opti82c611a; /* Opti82c611A on primary 1, sec 2, both 3 */
129 static int opti82c46x; /* Opti 82c465MV present(pri/sec autodetect) */
130 static int qdi; /* Set to probe QDI controllers */
131 static int winbond; /* Set to probe Winbond controllers,
132 give I/O port if non standard */
133 static int autospeed; /* Chip present which snoops speed changes */
134 static int pio_mask = ATA_PIO4; /* PIO range for autospeed devices */
135 static int iordy_mask = 0xFFFFFFFF; /* Use iordy if available */
138 * legacy_probe_add - Add interface to probe list
139 * @port: Controller port
140 * @irq: IRQ number
141 * @type: Controller type
142 * @private: Controller specific info
144 * Add an entry into the probe list for ATA controllers. This is used
145 * to add the default ISA slots and then to build up the table
146 * further according to other ISA/VLB/Weird device scans
148 * An I/O port list is used to keep ordering stable and sane, as we
149 * don't have any good way to talk about ordering otherwise
152 static int legacy_probe_add(unsigned long port, unsigned int irq,
153 enum controller type, unsigned long private)
155 struct legacy_probe *lp = &probe_list[0];
156 int i;
157 struct legacy_probe *free = NULL;
159 for (i = 0; i < NR_HOST; i++) {
160 if (lp->port == 0 && free == NULL)
161 free = lp;
162 /* Matching port, or the correct slot for ordering */
163 if (lp->port == port || legacy_port[i] == port) {
164 free = lp;
165 break;
167 lp++;
169 if (free == NULL) {
170 printk(KERN_ERR "pata_legacy: Too many interfaces.\n");
171 return -1;
173 /* Fill in the entry for later probing */
174 free->port = port;
175 free->irq = irq;
176 free->type = type;
177 free->private = private;
178 return 0;
183 * legacy_set_mode - mode setting
184 * @link: IDE link
185 * @unused: Device that failed when error is returned
187 * Use a non standard set_mode function. We don't want to be tuned.
189 * The BIOS configured everything. Our job is not to fiddle. Just use
190 * whatever PIO the hardware is using and leave it at that. When we
191 * get some kind of nice user driven API for control then we can
192 * expand on this as per hdparm in the base kernel.
195 static int legacy_set_mode(struct ata_link *link, struct ata_device **unused)
197 struct ata_device *dev;
199 ata_for_each_dev(dev, link, ENABLED) {
200 ata_dev_printk(dev, KERN_INFO, "configured for PIO\n");
201 dev->pio_mode = XFER_PIO_0;
202 dev->xfer_mode = XFER_PIO_0;
203 dev->xfer_shift = ATA_SHIFT_PIO;
204 dev->flags |= ATA_DFLAG_PIO;
206 return 0;
209 static struct scsi_host_template legacy_sht = {
210 ATA_PIO_SHT(DRV_NAME),
213 static const struct ata_port_operations legacy_base_port_ops = {
214 .inherits = &ata_sff_port_ops,
215 .cable_detect = ata_cable_40wire,
219 * These ops are used if the user indicates the hardware
220 * snoops the commands to decide on the mode and handles the
221 * mode selection "magically" itself. Several legacy controllers
222 * do this. The mode range can be set if it is not 0x1F by setting
223 * pio_mask as well.
226 static struct ata_port_operations simple_port_ops = {
227 .inherits = &legacy_base_port_ops,
228 .sff_data_xfer = ata_sff_data_xfer_noirq,
231 static struct ata_port_operations legacy_port_ops = {
232 .inherits = &legacy_base_port_ops,
233 .sff_data_xfer = ata_sff_data_xfer_noirq,
234 .set_mode = legacy_set_mode,
238 * Promise 20230C and 20620 support
240 * This controller supports PIO0 to PIO2. We set PIO timings
241 * conservatively to allow for 50MHz Vesa Local Bus. The 20620 DMA
242 * support is weird being DMA to controller and PIO'd to the host
243 * and not supported.
246 static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev)
248 int tries = 5;
249 int pio = adev->pio_mode - XFER_PIO_0;
250 u8 rt;
251 unsigned long flags;
253 /* Safe as UP only. Force I/Os to occur together */
255 local_irq_save(flags);
257 /* Unlock the control interface */
258 do {
259 inb(0x1F5);
260 outb(inb(0x1F2) | 0x80, 0x1F2);
261 inb(0x1F2);
262 inb(0x3F6);
263 inb(0x3F6);
264 inb(0x1F2);
265 inb(0x1F2);
267 while ((inb(0x1F2) & 0x80) && --tries);
269 local_irq_restore(flags);
271 outb(inb(0x1F4) & 0x07, 0x1F4);
273 rt = inb(0x1F3);
274 rt &= 0x07 << (3 * adev->devno);
275 if (pio)
276 rt |= (1 + 3 * pio) << (3 * adev->devno);
278 udelay(100);
279 outb(inb(0x1F2) | 0x01, 0x1F2);
280 udelay(100);
281 inb(0x1F5);
285 static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
286 unsigned char *buf, unsigned int buflen, int rw)
288 int slop = buflen & 3;
289 struct ata_port *ap = dev->link->ap;
291 /* 32bit I/O capable *and* we need to write a whole number of dwords */
292 if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3)
293 && (ap->pflags & ATA_PFLAG_PIO32)) {
294 unsigned long flags;
296 local_irq_save(flags);
298 /* Perform the 32bit I/O synchronization sequence */
299 ioread8(ap->ioaddr.nsect_addr);
300 ioread8(ap->ioaddr.nsect_addr);
301 ioread8(ap->ioaddr.nsect_addr);
303 /* Now the data */
304 if (rw == READ)
305 ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
306 else
307 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
309 if (unlikely(slop)) {
310 __le32 pad;
311 if (rw == READ) {
312 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
313 memcpy(buf + buflen - slop, &pad, slop);
314 } else {
315 memcpy(&pad, buf + buflen - slop, slop);
316 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
318 buflen += 4 - slop;
320 local_irq_restore(flags);
321 } else
322 buflen = ata_sff_data_xfer_noirq(dev, buf, buflen, rw);
324 return buflen;
327 static struct ata_port_operations pdc20230_port_ops = {
328 .inherits = &legacy_base_port_ops,
329 .set_piomode = pdc20230_set_piomode,
330 .sff_data_xfer = pdc_data_xfer_vlb,
334 * Holtek 6560A support
336 * This controller supports PIO0 to PIO2 (no IORDY even though higher
337 * timings can be loaded).
340 static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
342 u8 active, recover;
343 struct ata_timing t;
345 /* Get the timing data in cycles. For now play safe at 50Mhz */
346 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
348 active = clamp_val(t.active, 2, 15);
349 recover = clamp_val(t.recover, 4, 15);
351 inb(0x3E6);
352 inb(0x3E6);
353 inb(0x3E6);
354 inb(0x3E6);
356 iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
357 ioread8(ap->ioaddr.status_addr);
360 static struct ata_port_operations ht6560a_port_ops = {
361 .inherits = &legacy_base_port_ops,
362 .set_piomode = ht6560a_set_piomode,
366 * Holtek 6560B support
368 * This controller supports PIO0 to PIO4. We honour the BIOS/jumper FIFO
369 * setting unless we see an ATAPI device in which case we force it off.
371 * FIXME: need to implement 2nd channel support.
374 static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
376 u8 active, recover;
377 struct ata_timing t;
379 /* Get the timing data in cycles. For now play safe at 50Mhz */
380 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
382 active = clamp_val(t.active, 2, 15);
383 recover = clamp_val(t.recover, 2, 16);
384 recover &= 0x15;
386 inb(0x3E6);
387 inb(0x3E6);
388 inb(0x3E6);
389 inb(0x3E6);
391 iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
393 if (adev->class != ATA_DEV_ATA) {
394 u8 rconf = inb(0x3E6);
395 if (rconf & 0x24) {
396 rconf &= ~0x24;
397 outb(rconf, 0x3E6);
400 ioread8(ap->ioaddr.status_addr);
403 static struct ata_port_operations ht6560b_port_ops = {
404 .inherits = &legacy_base_port_ops,
405 .set_piomode = ht6560b_set_piomode,
409 * Opti core chipset helpers
413 * opti_syscfg - read OPTI chipset configuration
414 * @reg: Configuration register to read
416 * Returns the value of an OPTI system board configuration register.
419 static u8 opti_syscfg(u8 reg)
421 unsigned long flags;
422 u8 r;
424 /* Uniprocessor chipset and must force cycles adjancent */
425 local_irq_save(flags);
426 outb(reg, 0x22);
427 r = inb(0x24);
428 local_irq_restore(flags);
429 return r;
433 * Opti 82C611A
435 * This controller supports PIO0 to PIO3.
438 static void opti82c611a_set_piomode(struct ata_port *ap,
439 struct ata_device *adev)
441 u8 active, recover, setup;
442 struct ata_timing t;
443 struct ata_device *pair = ata_dev_pair(adev);
444 int clock;
445 int khz[4] = { 50000, 40000, 33000, 25000 };
446 u8 rc;
448 /* Enter configuration mode */
449 ioread16(ap->ioaddr.error_addr);
450 ioread16(ap->ioaddr.error_addr);
451 iowrite8(3, ap->ioaddr.nsect_addr);
453 /* Read VLB clock strapping */
454 clock = 1000000000 / khz[ioread8(ap->ioaddr.lbah_addr) & 0x03];
456 /* Get the timing data in cycles */
457 ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
459 /* Setup timing is shared */
460 if (pair) {
461 struct ata_timing tp;
462 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
464 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
467 active = clamp_val(t.active, 2, 17) - 2;
468 recover = clamp_val(t.recover, 1, 16) - 1;
469 setup = clamp_val(t.setup, 1, 4) - 1;
471 /* Select the right timing bank for write timing */
472 rc = ioread8(ap->ioaddr.lbal_addr);
473 rc &= 0x7F;
474 rc |= (adev->devno << 7);
475 iowrite8(rc, ap->ioaddr.lbal_addr);
477 /* Write the timings */
478 iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
480 /* Select the right bank for read timings, also
481 load the shared timings for address */
482 rc = ioread8(ap->ioaddr.device_addr);
483 rc &= 0xC0;
484 rc |= adev->devno; /* Index select */
485 rc |= (setup << 4) | 0x04;
486 iowrite8(rc, ap->ioaddr.device_addr);
488 /* Load the read timings */
489 iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
491 /* Ensure the timing register mode is right */
492 rc = ioread8(ap->ioaddr.lbal_addr);
493 rc &= 0x73;
494 rc |= 0x84;
495 iowrite8(rc, ap->ioaddr.lbal_addr);
497 /* Exit command mode */
498 iowrite8(0x83, ap->ioaddr.nsect_addr);
502 static struct ata_port_operations opti82c611a_port_ops = {
503 .inherits = &legacy_base_port_ops,
504 .set_piomode = opti82c611a_set_piomode,
508 * Opti 82C465MV
510 * This controller supports PIO0 to PIO3. Unlike the 611A the MVB
511 * version is dual channel but doesn't have a lot of unique registers.
514 static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
516 u8 active, recover, setup;
517 struct ata_timing t;
518 struct ata_device *pair = ata_dev_pair(adev);
519 int clock;
520 int khz[4] = { 50000, 40000, 33000, 25000 };
521 u8 rc;
522 u8 sysclk;
524 /* Get the clock */
525 sysclk = opti_syscfg(0xAC) & 0xC0; /* BIOS set */
527 /* Enter configuration mode */
528 ioread16(ap->ioaddr.error_addr);
529 ioread16(ap->ioaddr.error_addr);
530 iowrite8(3, ap->ioaddr.nsect_addr);
532 /* Read VLB clock strapping */
533 clock = 1000000000 / khz[sysclk];
535 /* Get the timing data in cycles */
536 ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
538 /* Setup timing is shared */
539 if (pair) {
540 struct ata_timing tp;
541 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
543 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
546 active = clamp_val(t.active, 2, 17) - 2;
547 recover = clamp_val(t.recover, 1, 16) - 1;
548 setup = clamp_val(t.setup, 1, 4) - 1;
550 /* Select the right timing bank for write timing */
551 rc = ioread8(ap->ioaddr.lbal_addr);
552 rc &= 0x7F;
553 rc |= (adev->devno << 7);
554 iowrite8(rc, ap->ioaddr.lbal_addr);
556 /* Write the timings */
557 iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
559 /* Select the right bank for read timings, also
560 load the shared timings for address */
561 rc = ioread8(ap->ioaddr.device_addr);
562 rc &= 0xC0;
563 rc |= adev->devno; /* Index select */
564 rc |= (setup << 4) | 0x04;
565 iowrite8(rc, ap->ioaddr.device_addr);
567 /* Load the read timings */
568 iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
570 /* Ensure the timing register mode is right */
571 rc = ioread8(ap->ioaddr.lbal_addr);
572 rc &= 0x73;
573 rc |= 0x84;
574 iowrite8(rc, ap->ioaddr.lbal_addr);
576 /* Exit command mode */
577 iowrite8(0x83, ap->ioaddr.nsect_addr);
579 /* We need to know this for quad device on the MVB */
580 ap->host->private_data = ap;
584 * opt82c465mv_qc_issue - command issue
585 * @qc: command pending
587 * Called when the libata layer is about to issue a command. We wrap
588 * this interface so that we can load the correct ATA timings. The
589 * MVB has a single set of timing registers and these are shared
590 * across channels. As there are two registers we really ought to
591 * track the last two used values as a sort of register window. For
592 * now we just reload on a channel switch. On the single channel
593 * setup this condition never fires so we do nothing extra.
595 * FIXME: dual channel needs ->serialize support
598 static unsigned int opti82c46x_qc_issue(struct ata_queued_cmd *qc)
600 struct ata_port *ap = qc->ap;
601 struct ata_device *adev = qc->dev;
603 /* If timings are set and for the wrong channel (2nd test is
604 due to a libata shortcoming and will eventually go I hope) */
605 if (ap->host->private_data != ap->host
606 && ap->host->private_data != NULL)
607 opti82c46x_set_piomode(ap, adev);
609 return ata_sff_qc_issue(qc);
612 static struct ata_port_operations opti82c46x_port_ops = {
613 .inherits = &legacy_base_port_ops,
614 .set_piomode = opti82c46x_set_piomode,
615 .qc_issue = opti82c46x_qc_issue,
618 static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
620 struct ata_timing t;
621 struct legacy_data *ld_qdi = ap->host->private_data;
622 int active, recovery;
623 u8 timing;
625 /* Get the timing data in cycles */
626 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
628 if (ld_qdi->fast) {
629 active = 8 - clamp_val(t.active, 1, 8);
630 recovery = 18 - clamp_val(t.recover, 3, 18);
631 } else {
632 active = 9 - clamp_val(t.active, 2, 9);
633 recovery = 15 - clamp_val(t.recover, 0, 15);
635 timing = (recovery << 4) | active | 0x08;
637 ld_qdi->clock[adev->devno] = timing;
639 outb(timing, ld_qdi->timing);
643 * qdi6580dp_set_piomode - PIO setup for dual channel
644 * @ap: Port
645 * @adev: Device
647 * In dual channel mode the 6580 has one clock per channel and we have
648 * to software clockswitch in qc_issue.
651 static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
653 struct ata_timing t;
654 struct legacy_data *ld_qdi = ap->host->private_data;
655 int active, recovery;
656 u8 timing;
658 /* Get the timing data in cycles */
659 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
661 if (ld_qdi->fast) {
662 active = 8 - clamp_val(t.active, 1, 8);
663 recovery = 18 - clamp_val(t.recover, 3, 18);
664 } else {
665 active = 9 - clamp_val(t.active, 2, 9);
666 recovery = 15 - clamp_val(t.recover, 0, 15);
668 timing = (recovery << 4) | active | 0x08;
670 ld_qdi->clock[adev->devno] = timing;
672 outb(timing, ld_qdi->timing + 2 * ap->port_no);
673 /* Clear the FIFO */
674 if (adev->class != ATA_DEV_ATA)
675 outb(0x5F, ld_qdi->timing + 3);
679 * qdi6580_set_piomode - PIO setup for single channel
680 * @ap: Port
681 * @adev: Device
683 * In single channel mode the 6580 has one clock per device and we can
684 * avoid the requirement to clock switch. We also have to load the timing
685 * into the right clock according to whether we are master or slave.
688 static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
690 struct ata_timing t;
691 struct legacy_data *ld_qdi = ap->host->private_data;
692 int active, recovery;
693 u8 timing;
695 /* Get the timing data in cycles */
696 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
698 if (ld_qdi->fast) {
699 active = 8 - clamp_val(t.active, 1, 8);
700 recovery = 18 - clamp_val(t.recover, 3, 18);
701 } else {
702 active = 9 - clamp_val(t.active, 2, 9);
703 recovery = 15 - clamp_val(t.recover, 0, 15);
705 timing = (recovery << 4) | active | 0x08;
706 ld_qdi->clock[adev->devno] = timing;
707 outb(timing, ld_qdi->timing + 2 * adev->devno);
708 /* Clear the FIFO */
709 if (adev->class != ATA_DEV_ATA)
710 outb(0x5F, ld_qdi->timing + 3);
714 * qdi_qc_issue - command issue
715 * @qc: command pending
717 * Called when the libata layer is about to issue a command. We wrap
718 * this interface so that we can load the correct ATA timings.
721 static unsigned int qdi_qc_issue(struct ata_queued_cmd *qc)
723 struct ata_port *ap = qc->ap;
724 struct ata_device *adev = qc->dev;
725 struct legacy_data *ld_qdi = ap->host->private_data;
727 if (ld_qdi->clock[adev->devno] != ld_qdi->last) {
728 if (adev->pio_mode) {
729 ld_qdi->last = ld_qdi->clock[adev->devno];
730 outb(ld_qdi->clock[adev->devno], ld_qdi->timing +
731 2 * ap->port_no);
734 return ata_sff_qc_issue(qc);
737 static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
738 unsigned int buflen, int rw)
740 struct ata_port *ap = adev->link->ap;
741 int slop = buflen & 3;
743 if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)
744 && (ap->pflags & ATA_PFLAG_PIO32)) {
745 if (rw == WRITE)
746 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
747 else
748 ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
750 if (unlikely(slop)) {
751 __le32 pad;
752 if (rw == WRITE) {
753 memcpy(&pad, buf + buflen - slop, slop);
754 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
755 } else {
756 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
757 memcpy(buf + buflen - slop, &pad, slop);
760 return (buflen + 3) & ~3;
761 } else
762 return ata_sff_data_xfer(adev, buf, buflen, rw);
765 static int qdi_port(struct platform_device *dev,
766 struct legacy_probe *lp, struct legacy_data *ld)
768 if (devm_request_region(&dev->dev, lp->private, 4, "qdi") == NULL)
769 return -EBUSY;
770 ld->timing = lp->private;
771 return 0;
774 static struct ata_port_operations qdi6500_port_ops = {
775 .inherits = &legacy_base_port_ops,
776 .set_piomode = qdi6500_set_piomode,
777 .qc_issue = qdi_qc_issue,
778 .sff_data_xfer = vlb32_data_xfer,
781 static struct ata_port_operations qdi6580_port_ops = {
782 .inherits = &legacy_base_port_ops,
783 .set_piomode = qdi6580_set_piomode,
784 .sff_data_xfer = vlb32_data_xfer,
787 static struct ata_port_operations qdi6580dp_port_ops = {
788 .inherits = &legacy_base_port_ops,
789 .set_piomode = qdi6580dp_set_piomode,
790 .sff_data_xfer = vlb32_data_xfer,
793 static DEFINE_SPINLOCK(winbond_lock);
795 static void winbond_writecfg(unsigned long port, u8 reg, u8 val)
797 unsigned long flags;
798 spin_lock_irqsave(&winbond_lock, flags);
799 outb(reg, port + 0x01);
800 outb(val, port + 0x02);
801 spin_unlock_irqrestore(&winbond_lock, flags);
804 static u8 winbond_readcfg(unsigned long port, u8 reg)
806 u8 val;
808 unsigned long flags;
809 spin_lock_irqsave(&winbond_lock, flags);
810 outb(reg, port + 0x01);
811 val = inb(port + 0x02);
812 spin_unlock_irqrestore(&winbond_lock, flags);
814 return val;
817 static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
819 struct ata_timing t;
820 struct legacy_data *ld_winbond = ap->host->private_data;
821 int active, recovery;
822 u8 reg;
823 int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
825 reg = winbond_readcfg(ld_winbond->timing, 0x81);
827 /* Get the timing data in cycles */
828 if (reg & 0x40) /* Fast VLB bus, assume 50MHz */
829 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
830 else
831 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
833 active = (clamp_val(t.active, 3, 17) - 1) & 0x0F;
834 recovery = (clamp_val(t.recover, 1, 15) + 1) & 0x0F;
835 timing = (active << 4) | recovery;
836 winbond_writecfg(ld_winbond->timing, timing, reg);
838 /* Load the setup timing */
840 reg = 0x35;
841 if (adev->class != ATA_DEV_ATA)
842 reg |= 0x08; /* FIFO off */
843 if (!ata_pio_need_iordy(adev))
844 reg |= 0x02; /* IORDY off */
845 reg |= (clamp_val(t.setup, 0, 3) << 6);
846 winbond_writecfg(ld_winbond->timing, timing + 1, reg);
849 static int winbond_port(struct platform_device *dev,
850 struct legacy_probe *lp, struct legacy_data *ld)
852 if (devm_request_region(&dev->dev, lp->private, 4, "winbond") == NULL)
853 return -EBUSY;
854 ld->timing = lp->private;
855 return 0;
858 static struct ata_port_operations winbond_port_ops = {
859 .inherits = &legacy_base_port_ops,
860 .set_piomode = winbond_set_piomode,
861 .sff_data_xfer = vlb32_data_xfer,
864 static struct legacy_controller controllers[] = {
865 {"BIOS", &legacy_port_ops, 0x1F,
866 ATA_FLAG_NO_IORDY, 0, NULL },
867 {"Snooping", &simple_port_ops, 0x1F,
868 0, 0, NULL },
869 {"PDC20230", &pdc20230_port_ops, 0x7,
870 ATA_FLAG_NO_IORDY,
871 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, NULL },
872 {"HT6560A", &ht6560a_port_ops, 0x07,
873 ATA_FLAG_NO_IORDY, 0, NULL },
874 {"HT6560B", &ht6560b_port_ops, 0x1F,
875 ATA_FLAG_NO_IORDY, 0, NULL },
876 {"OPTI82C611A", &opti82c611a_port_ops, 0x0F,
877 0, 0, NULL },
878 {"OPTI82C46X", &opti82c46x_port_ops, 0x0F,
879 0, 0, NULL },
880 {"QDI6500", &qdi6500_port_ops, 0x07,
881 ATA_FLAG_NO_IORDY,
882 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
883 {"QDI6580", &qdi6580_port_ops, 0x1F,
884 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
885 {"QDI6580DP", &qdi6580dp_port_ops, 0x1F,
886 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
887 {"W83759A", &winbond_port_ops, 0x1F,
888 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE,
889 winbond_port }
893 * probe_chip_type - Discover controller
894 * @probe: Probe entry to check
896 * Probe an ATA port and identify the type of controller. We don't
897 * check if the controller appears to be driveless at this point.
900 static __init int probe_chip_type(struct legacy_probe *probe)
902 int mask = 1 << probe->slot;
904 if (winbond && (probe->port == 0x1F0 || probe->port == 0x170)) {
905 u8 reg = winbond_readcfg(winbond, 0x81);
906 reg |= 0x80; /* jumpered mode off */
907 winbond_writecfg(winbond, 0x81, reg);
908 reg = winbond_readcfg(winbond, 0x83);
909 reg |= 0xF0; /* local control */
910 winbond_writecfg(winbond, 0x83, reg);
911 reg = winbond_readcfg(winbond, 0x85);
912 reg |= 0xF0; /* programmable timing */
913 winbond_writecfg(winbond, 0x85, reg);
915 reg = winbond_readcfg(winbond, 0x81);
917 if (reg & mask)
918 return W83759A;
920 if (probe->port == 0x1F0) {
921 unsigned long flags;
922 local_irq_save(flags);
923 /* Probes */
924 outb(inb(0x1F2) | 0x80, 0x1F2);
925 inb(0x1F5);
926 inb(0x1F2);
927 inb(0x3F6);
928 inb(0x3F6);
929 inb(0x1F2);
930 inb(0x1F2);
932 if ((inb(0x1F2) & 0x80) == 0) {
933 /* PDC20230c or 20630 ? */
934 printk(KERN_INFO "PDC20230-C/20630 VLB ATA controller"
935 " detected.\n");
936 udelay(100);
937 inb(0x1F5);
938 local_irq_restore(flags);
939 return PDC20230;
940 } else {
941 outb(0x55, 0x1F2);
942 inb(0x1F2);
943 inb(0x1F2);
944 if (inb(0x1F2) == 0x00)
945 printk(KERN_INFO "PDC20230-B VLB ATA "
946 "controller detected.\n");
947 local_irq_restore(flags);
948 return BIOS;
950 local_irq_restore(flags);
953 if (ht6560a & mask)
954 return HT6560A;
955 if (ht6560b & mask)
956 return HT6560B;
957 if (opti82c611a & mask)
958 return OPTI611A;
959 if (opti82c46x & mask)
960 return OPTI46X;
961 if (autospeed & mask)
962 return SNOOP;
963 return BIOS;
968 * legacy_init_one - attach a legacy interface
969 * @pl: probe record
971 * Register an ISA bus IDE interface. Such interfaces are PIO and we
972 * assume do not support IRQ sharing.
975 static __init int legacy_init_one(struct legacy_probe *probe)
977 struct legacy_controller *controller = &controllers[probe->type];
978 int pio_modes = controller->pio_mask;
979 unsigned long io = probe->port;
980 u32 mask = (1 << probe->slot);
981 struct ata_port_operations *ops = controller->ops;
982 struct legacy_data *ld = &legacy_data[probe->slot];
983 struct ata_host *host = NULL;
984 struct ata_port *ap;
985 struct platform_device *pdev;
986 struct ata_device *dev;
987 void __iomem *io_addr, *ctrl_addr;
988 u32 iordy = (iordy_mask & mask) ? 0: ATA_FLAG_NO_IORDY;
989 int ret;
991 iordy |= controller->flags;
993 pdev = platform_device_register_simple(DRV_NAME, probe->slot, NULL, 0);
994 if (IS_ERR(pdev))
995 return PTR_ERR(pdev);
997 ret = -EBUSY;
998 if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
999 devm_request_region(&pdev->dev, io + 0x0206, 1,
1000 "pata_legacy") == NULL)
1001 goto fail;
1003 ret = -ENOMEM;
1004 io_addr = devm_ioport_map(&pdev->dev, io, 8);
1005 ctrl_addr = devm_ioport_map(&pdev->dev, io + 0x0206, 1);
1006 if (!io_addr || !ctrl_addr)
1007 goto fail;
1008 if (controller->setup)
1009 if (controller->setup(pdev, probe, ld) < 0)
1010 goto fail;
1011 host = ata_host_alloc(&pdev->dev, 1);
1012 if (!host)
1013 goto fail;
1014 ap = host->ports[0];
1016 ap->ops = ops;
1017 ap->pio_mask = pio_modes;
1018 ap->flags |= ATA_FLAG_SLAVE_POSS | iordy;
1019 ap->pflags |= controller->pflags;
1020 ap->ioaddr.cmd_addr = io_addr;
1021 ap->ioaddr.altstatus_addr = ctrl_addr;
1022 ap->ioaddr.ctl_addr = ctrl_addr;
1023 ata_sff_std_ports(&ap->ioaddr);
1024 ap->host->private_data = ld;
1026 ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", io, io + 0x0206);
1028 ret = ata_host_activate(host, probe->irq, ata_sff_interrupt, 0,
1029 &legacy_sht);
1030 if (ret)
1031 goto fail;
1032 async_synchronize_full();
1033 ld->platform_dev = pdev;
1035 /* Nothing found means we drop the port as its probably not there */
1037 ret = -ENODEV;
1038 ata_for_each_dev(dev, &ap->link, ALL) {
1039 if (!ata_dev_absent(dev)) {
1040 legacy_host[probe->slot] = host;
1041 ld->platform_dev = pdev;
1042 return 0;
1045 ata_host_detach(host);
1046 fail:
1047 platform_device_unregister(pdev);
1048 return ret;
1052 * legacy_check_special_cases - ATA special cases
1053 * @p: PCI device to check
1054 * @master: set this if we find an ATA master
1055 * @master: set this if we find an ATA secondary
1057 * A small number of vendors implemented early PCI ATA interfaces
1058 * on bridge logic without the ATA interface being PCI visible.
1059 * Where we have a matching PCI driver we must skip the relevant
1060 * device here. If we don't know about it then the legacy driver
1061 * is the right driver anyway.
1064 static void __init legacy_check_special_cases(struct pci_dev *p, int *primary,
1065 int *secondary)
1067 /* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
1068 if (p->vendor == 0x1078 && p->device == 0x0000) {
1069 *primary = *secondary = 1;
1070 return;
1072 /* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
1073 if (p->vendor == 0x1078 && p->device == 0x0002) {
1074 *primary = *secondary = 1;
1075 return;
1077 /* Intel MPIIX - PIO ATA on non PCI side of bridge */
1078 if (p->vendor == 0x8086 && p->device == 0x1234) {
1079 u16 r;
1080 pci_read_config_word(p, 0x6C, &r);
1081 if (r & 0x8000) {
1082 /* ATA port enabled */
1083 if (r & 0x4000)
1084 *secondary = 1;
1085 else
1086 *primary = 1;
1088 return;
1092 static __init void probe_opti_vlb(void)
1094 /* If an OPTI 82C46X is present find out where the channels are */
1095 static const char *optis[4] = {
1096 "3/463MV", "5MV",
1097 "5MVA", "5MVB"
1099 u8 chans = 1;
1100 u8 ctrl = (opti_syscfg(0x30) & 0xC0) >> 6;
1102 opti82c46x = 3; /* Assume master and slave first */
1103 printk(KERN_INFO DRV_NAME ": Opti 82C46%s chipset support.\n",
1104 optis[ctrl]);
1105 if (ctrl == 3)
1106 chans = (opti_syscfg(0x3F) & 0x20) ? 2 : 1;
1107 ctrl = opti_syscfg(0xAC);
1108 /* Check enabled and this port is the 465MV port. On the
1109 MVB we may have two channels */
1110 if (ctrl & 8) {
1111 if (chans == 2) {
1112 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1113 legacy_probe_add(0x170, 15, OPTI46X, 0);
1115 if (ctrl & 4)
1116 legacy_probe_add(0x170, 15, OPTI46X, 0);
1117 else
1118 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1119 } else
1120 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1123 static __init void qdi65_identify_port(u8 r, u8 res, unsigned long port)
1125 static const unsigned long ide_port[2] = { 0x170, 0x1F0 };
1126 /* Check card type */
1127 if ((r & 0xF0) == 0xC0) {
1128 /* QD6500: single channel */
1129 if (r & 8)
1130 /* Disabled ? */
1131 return;
1132 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1133 QDI6500, port);
1135 if (((r & 0xF0) == 0xA0) || (r & 0xF0) == 0x50) {
1136 /* QD6580: dual channel */
1137 if (!request_region(port + 2 , 2, "pata_qdi")) {
1138 release_region(port, 2);
1139 return;
1141 res = inb(port + 3);
1142 /* Single channel mode ? */
1143 if (res & 1)
1144 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1145 QDI6580, port);
1146 else { /* Dual channel mode */
1147 legacy_probe_add(0x1F0, 14, QDI6580DP, port);
1148 /* port + 0x02, r & 0x04 */
1149 legacy_probe_add(0x170, 15, QDI6580DP, port + 2);
1151 release_region(port + 2, 2);
1155 static __init void probe_qdi_vlb(void)
1157 unsigned long flags;
1158 static const unsigned long qd_port[2] = { 0x30, 0xB0 };
1159 int i;
1162 * Check each possible QD65xx base address
1165 for (i = 0; i < 2; i++) {
1166 unsigned long port = qd_port[i];
1167 u8 r, res;
1170 if (request_region(port, 2, "pata_qdi")) {
1171 /* Check for a card */
1172 local_irq_save(flags);
1173 /* I have no h/w that needs this delay but it
1174 is present in the historic code */
1175 r = inb(port);
1176 udelay(1);
1177 outb(0x19, port);
1178 udelay(1);
1179 res = inb(port);
1180 udelay(1);
1181 outb(r, port);
1182 udelay(1);
1183 local_irq_restore(flags);
1185 /* Fail */
1186 if (res == 0x19) {
1187 release_region(port, 2);
1188 continue;
1190 /* Passes the presence test */
1191 r = inb(port + 1);
1192 udelay(1);
1193 /* Check port agrees with port set */
1194 if ((r & 2) >> 1 == i)
1195 qdi65_identify_port(r, res, port);
1196 release_region(port, 2);
1202 * legacy_init - attach legacy interfaces
1204 * Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
1205 * Right now we do not scan the ide0 and ide1 address but should do so
1206 * for non PCI systems or systems with no PCI IDE legacy mode devices.
1207 * If you fix that note there are special cases to consider like VLB
1208 * drivers and CS5510/20.
1211 static __init int legacy_init(void)
1213 int i;
1214 int ct = 0;
1215 int primary = 0;
1216 int secondary = 0;
1217 int pci_present = 0;
1218 struct legacy_probe *pl = &probe_list[0];
1219 int slot = 0;
1221 struct pci_dev *p = NULL;
1223 for_each_pci_dev(p) {
1224 int r;
1225 /* Check for any overlap of the system ATA mappings. Native
1226 mode controllers stuck on these addresses or some devices
1227 in 'raid' mode won't be found by the storage class test */
1228 for (r = 0; r < 6; r++) {
1229 if (pci_resource_start(p, r) == 0x1f0)
1230 primary = 1;
1231 if (pci_resource_start(p, r) == 0x170)
1232 secondary = 1;
1234 /* Check for special cases */
1235 legacy_check_special_cases(p, &primary, &secondary);
1237 /* If PCI bus is present then don't probe for tertiary
1238 legacy ports */
1239 pci_present = 1;
1242 if (winbond == 1)
1243 winbond = 0x130; /* Default port, alt is 1B0 */
1245 if (primary == 0 || all)
1246 legacy_probe_add(0x1F0, 14, UNKNOWN, 0);
1247 if (secondary == 0 || all)
1248 legacy_probe_add(0x170, 15, UNKNOWN, 0);
1250 if (probe_all || !pci_present) {
1251 /* ISA/VLB extra ports */
1252 legacy_probe_add(0x1E8, 11, UNKNOWN, 0);
1253 legacy_probe_add(0x168, 10, UNKNOWN, 0);
1254 legacy_probe_add(0x1E0, 8, UNKNOWN, 0);
1255 legacy_probe_add(0x160, 12, UNKNOWN, 0);
1258 if (opti82c46x)
1259 probe_opti_vlb();
1260 if (qdi)
1261 probe_qdi_vlb();
1263 for (i = 0; i < NR_HOST; i++, pl++) {
1264 if (pl->port == 0)
1265 continue;
1266 if (pl->type == UNKNOWN)
1267 pl->type = probe_chip_type(pl);
1268 pl->slot = slot++;
1269 if (legacy_init_one(pl) == 0)
1270 ct++;
1272 if (ct != 0)
1273 return 0;
1274 return -ENODEV;
1277 static __exit void legacy_exit(void)
1279 int i;
1281 for (i = 0; i < nr_legacy_host; i++) {
1282 struct legacy_data *ld = &legacy_data[i];
1283 ata_host_detach(legacy_host[i]);
1284 platform_device_unregister(ld->platform_dev);
1288 MODULE_AUTHOR("Alan Cox");
1289 MODULE_DESCRIPTION("low-level driver for legacy ATA");
1290 MODULE_LICENSE("GPL");
1291 MODULE_VERSION(DRV_VERSION);
1293 module_param(probe_all, int, 0);
1294 module_param(autospeed, int, 0);
1295 module_param(ht6560a, int, 0);
1296 module_param(ht6560b, int, 0);
1297 module_param(opti82c611a, int, 0);
1298 module_param(opti82c46x, int, 0);
1299 module_param(qdi, int, 0);
1300 module_param(pio_mask, int, 0);
1301 module_param(iordy_mask, int, 0);
1303 module_init(legacy_init);
1304 module_exit(legacy_exit);