]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/ata/pata_legacy.c
pata_legacy: fix access to control register for QDI6580
[net-next-2.6.git] / drivers / ata / pata_legacy.c
CommitLineData
669a5db4
JG
1/*
2 * pata-legacy.c - Legacy port PATA/SATA controller driver.
ab771630 3 * Copyright 2005/2006 Red Hat, all rights reserved.
669a5db4
JG
4 *
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.
9 *
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.
14 *
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.
18 *
19 * An ATA driver for the legacy ATA ports.
20 *
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
28 *
29 * Unsupported but docs exist:
30 * Appian/Adaptec AIC25VL01/Cirrus Logic PD7220
669a5db4
JG
31 *
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".
36 *
37 * Specific support is included for the ht6560a/ht6560b/opti82c611a/
b8325487 38 * opti82c465mv/promise 20230c/20630/winbond83759A
669a5db4
JG
39 *
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
45 *
46 * For now use autospeed and pio_mask as above with the W83759A. This may
47 * change.
48 *
669a5db4
JG
49 */
50
45bc955b 51#include <linux/async.h>
669a5db4
JG
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>
62
63#define DRV_NAME "pata_legacy"
b8325487 64#define DRV_VERSION "0.6.5"
669a5db4
JG
65
66#define NR_HOST 6
67
defc9cd8
AC
68static int all;
69module_param(all, int, 0444);
70MODULE_PARM_DESC(all, "Grab all legacy port devices, even if PCI(0=off, 1=on)");
669a5db4
JG
71
72struct legacy_data {
73 unsigned long timing;
74 u8 clock[2];
75 u8 last;
76 int fast;
77 struct platform_device *platform_dev;
78
79};
80
defc9cd8
AC
81enum 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 */
b8325487 92 W83759A = 10,
defc9cd8
AC
93
94 UNKNOWN = -1
95};
96
97
98struct 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;
105};
106
107struct legacy_controller {
108 const char *name;
109 struct ata_port_operations *ops;
110 unsigned int pio_mask;
111 unsigned int flags;
e3cf95dd 112 unsigned int pflags;
b8325487
AC
113 int (*setup)(struct platform_device *, struct legacy_probe *probe,
114 struct legacy_data *data);
defc9cd8
AC
115};
116
117static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
118
119static struct legacy_probe probe_list[NR_HOST];
669a5db4
JG
120static struct legacy_data legacy_data[NR_HOST];
121static struct ata_host *legacy_host[NR_HOST];
122static int nr_legacy_host;
123
124
defc9cd8
AC
125static int probe_all; /* Set to check all ISA port ranges */
126static int ht6560a; /* HT 6560A on primary 1, second 2, both 3 */
127static int ht6560b; /* HT 6560A on primary 1, second 2, both 3 */
128static int opti82c611a; /* Opti82c611A on primary 1, sec 2, both 3 */
129static int opti82c46x; /* Opti 82c465MV present(pri/sec autodetect) */
130static int qdi; /* Set to probe QDI controllers */
b8325487 131static int winbond; /* Set to probe Winbond controllers,
8397248d 132 give I/O port if non standard */
defc9cd8 133static int autospeed; /* Chip present which snoops speed changes */
14bdef98 134static int pio_mask = ATA_PIO4; /* PIO range for autospeed devices */
f834e49f 135static int iordy_mask = 0xFFFFFFFF; /* Use iordy if available */
669a5db4 136
defc9cd8
AC
137/**
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
143 *
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
147 *
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
150 */
151
152static int legacy_probe_add(unsigned long port, unsigned int irq,
153 enum controller type, unsigned long private)
154{
155 struct legacy_probe *lp = &probe_list[0];
156 int i;
157 struct legacy_probe *free = NULL;
158
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;
166 }
167 lp++;
168 }
169 if (free == NULL) {
170 printk(KERN_ERR "pata_legacy: Too many interfaces.\n");
171 return -1;
172 }
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;
179}
180
181
669a5db4
JG
182/**
183 * legacy_set_mode - mode setting
0260731f 184 * @link: IDE link
b229a7b0 185 * @unused: Device that failed when error is returned
669a5db4
JG
186 *
187 * Use a non standard set_mode function. We don't want to be tuned.
188 *
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.
193 */
194
0260731f 195static int legacy_set_mode(struct ata_link *link, struct ata_device **unused)
669a5db4 196{
f58229f8 197 struct ata_device *dev;
669a5db4 198
1eca4365
TH
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;
669a5db4 205 }
b229a7b0 206 return 0;
669a5db4
JG
207}
208
209static struct scsi_host_template legacy_sht = {
68d1d07b 210 ATA_PIO_SHT(DRV_NAME),
669a5db4
JG
211};
212
029cfd6b
TH
213static const struct ata_port_operations legacy_base_port_ops = {
214 .inherits = &ata_sff_port_ops,
215 .cable_detect = ata_cable_40wire,
216};
217
669a5db4
JG
218/*
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.
224 */
225
226static struct ata_port_operations simple_port_ops = {
029cfd6b 227 .inherits = &legacy_base_port_ops,
5682ed33 228 .sff_data_xfer = ata_sff_data_xfer_noirq,
669a5db4
JG
229};
230
231static struct ata_port_operations legacy_port_ops = {
029cfd6b 232 .inherits = &legacy_base_port_ops,
5682ed33 233 .sff_data_xfer = ata_sff_data_xfer_noirq,
029cfd6b 234 .set_mode = legacy_set_mode,
669a5db4
JG
235};
236
237/*
238 * Promise 20230C and 20620 support
239 *
defc9cd8
AC
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.
669a5db4
JG
244 */
245
246static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev)
247{
248 int tries = 5;
249 int pio = adev->pio_mode - XFER_PIO_0;
250 u8 rt;
251 unsigned long flags;
85cd7251 252
669a5db4 253 /* Safe as UP only. Force I/Os to occur together */
85cd7251 254
669a5db4 255 local_irq_save(flags);
85cd7251 256
669a5db4 257 /* Unlock the control interface */
defc9cd8 258 do {
669a5db4
JG
259 inb(0x1F5);
260 outb(inb(0x1F2) | 0x80, 0x1F2);
261 inb(0x1F2);
262 inb(0x3F6);
263 inb(0x3F6);
264 inb(0x1F2);
265 inb(0x1F2);
266 }
defc9cd8 267 while ((inb(0x1F2) & 0x80) && --tries);
669a5db4
JG
268
269 local_irq_restore(flags);
85cd7251 270
669a5db4
JG
271 outb(inb(0x1F4) & 0x07, 0x1F4);
272
273 rt = inb(0x1F3);
274 rt &= 0x07 << (3 * adev->devno);
275 if (pio)
276 rt |= (1 + 3 * pio) << (3 * adev->devno);
277
278 udelay(100);
279 outb(inb(0x1F2) | 0x01, 0x1F2);
280 udelay(100);
281 inb(0x1F5);
282
283}
284
55dba312 285static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
defc9cd8 286 unsigned char *buf, unsigned int buflen, int rw)
669a5db4 287{
c55af1f5 288 int slop = buflen & 3;
16e6aeca
ZX
289 struct ata_port *ap = dev->link->ap;
290
c55af1f5 291 /* 32bit I/O capable *and* we need to write a whole number of dwords */
e3cf95dd
AC
292 if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3)
293 && (ap->pflags & ATA_PFLAG_PIO32)) {
55dba312
TH
294 unsigned long flags;
295
669a5db4
JG
296 local_irq_save(flags);
297
298 /* Perform the 32bit I/O synchronization sequence */
0d5ff566
TH
299 ioread8(ap->ioaddr.nsect_addr);
300 ioread8(ap->ioaddr.nsect_addr);
301 ioread8(ap->ioaddr.nsect_addr);
669a5db4
JG
302
303 /* Now the data */
55dba312 304 if (rw == READ)
0d5ff566 305 ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
55dba312
TH
306 else
307 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
669a5db4
JG
308
309 if (unlikely(slop)) {
6ad67403 310 __le32 pad;
55dba312 311 if (rw == READ) {
b50e56d8 312 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
669a5db4 313 memcpy(buf + buflen - slop, &pad, slop);
55dba312
TH
314 } else {
315 memcpy(&pad, buf + buflen - slop, slop);
316 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
669a5db4 317 }
55dba312 318 buflen += 4 - slop;
669a5db4
JG
319 }
320 local_irq_restore(flags);
55dba312 321 } else
9363c382 322 buflen = ata_sff_data_xfer_noirq(dev, buf, buflen, rw);
55dba312
TH
323
324 return buflen;
669a5db4
JG
325}
326
327static struct ata_port_operations pdc20230_port_ops = {
029cfd6b 328 .inherits = &legacy_base_port_ops,
669a5db4 329 .set_piomode = pdc20230_set_piomode,
5682ed33 330 .sff_data_xfer = pdc_data_xfer_vlb,
669a5db4
JG
331};
332
333/*
334 * Holtek 6560A support
335 *
defc9cd8
AC
336 * This controller supports PIO0 to PIO2 (no IORDY even though higher
337 * timings can be loaded).
669a5db4
JG
338 */
339
340static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
341{
342 u8 active, recover;
343 struct ata_timing t;
344
345 /* Get the timing data in cycles. For now play safe at 50Mhz */
346 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
347
07633b5d
HH
348 active = clamp_val(t.active, 2, 15);
349 recover = clamp_val(t.recover, 4, 15);
669a5db4
JG
350
351 inb(0x3E6);
352 inb(0x3E6);
353 inb(0x3E6);
354 inb(0x3E6);
355
0d5ff566
TH
356 iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
357 ioread8(ap->ioaddr.status_addr);
669a5db4
JG
358}
359
360static struct ata_port_operations ht6560a_port_ops = {
029cfd6b 361 .inherits = &legacy_base_port_ops,
669a5db4 362 .set_piomode = ht6560a_set_piomode,
669a5db4
JG
363};
364
365/*
366 * Holtek 6560B support
367 *
defc9cd8
AC
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.
669a5db4
JG
370 *
371 * FIXME: need to implement 2nd channel support.
372 */
373
374static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
375{
376 u8 active, recover;
377 struct ata_timing t;
378
379 /* Get the timing data in cycles. For now play safe at 50Mhz */
380 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
381
07633b5d
HH
382 active = clamp_val(t.active, 2, 15);
383 recover = clamp_val(t.recover, 2, 16);
669a5db4
JG
384 recover &= 0x15;
385
386 inb(0x3E6);
387 inb(0x3E6);
388 inb(0x3E6);
389 inb(0x3E6);
390
0d5ff566 391 iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
669a5db4
JG
392
393 if (adev->class != ATA_DEV_ATA) {
394 u8 rconf = inb(0x3E6);
395 if (rconf & 0x24) {
defc9cd8 396 rconf &= ~0x24;
669a5db4
JG
397 outb(rconf, 0x3E6);
398 }
399 }
0d5ff566 400 ioread8(ap->ioaddr.status_addr);
669a5db4
JG
401}
402
403static struct ata_port_operations ht6560b_port_ops = {
029cfd6b 404 .inherits = &legacy_base_port_ops,
669a5db4 405 .set_piomode = ht6560b_set_piomode,
669a5db4
JG
406};
407
408/*
409 * Opti core chipset helpers
410 */
85cd7251 411
669a5db4
JG
412/**
413 * opti_syscfg - read OPTI chipset configuration
414 * @reg: Configuration register to read
415 *
416 * Returns the value of an OPTI system board configuration register.
417 */
418
419static u8 opti_syscfg(u8 reg)
420{
421 unsigned long flags;
422 u8 r;
85cd7251 423
669a5db4
JG
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;
430}
431
432/*
433 * Opti 82C611A
434 *
435 * This controller supports PIO0 to PIO3.
436 */
437
defc9cd8
AC
438static void opti82c611a_set_piomode(struct ata_port *ap,
439 struct ata_device *adev)
669a5db4
JG
440{
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;
447
448 /* Enter configuration mode */
0d5ff566
TH
449 ioread16(ap->ioaddr.error_addr);
450 ioread16(ap->ioaddr.error_addr);
451 iowrite8(3, ap->ioaddr.nsect_addr);
669a5db4
JG
452
453 /* Read VLB clock strapping */
0d5ff566 454 clock = 1000000000 / khz[ioread8(ap->ioaddr.lbah_addr) & 0x03];
669a5db4
JG
455
456 /* Get the timing data in cycles */
457 ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
458
459 /* Setup timing is shared */
460 if (pair) {
461 struct ata_timing tp;
462 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
463
464 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
465 }
466
07633b5d
HH
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;
669a5db4
JG
470
471 /* Select the right timing bank for write timing */
0d5ff566 472 rc = ioread8(ap->ioaddr.lbal_addr);
669a5db4
JG
473 rc &= 0x7F;
474 rc |= (adev->devno << 7);
0d5ff566 475 iowrite8(rc, ap->ioaddr.lbal_addr);
669a5db4
JG
476
477 /* Write the timings */
0d5ff566 478 iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
669a5db4
JG
479
480 /* Select the right bank for read timings, also
481 load the shared timings for address */
0d5ff566 482 rc = ioread8(ap->ioaddr.device_addr);
669a5db4
JG
483 rc &= 0xC0;
484 rc |= adev->devno; /* Index select */
485 rc |= (setup << 4) | 0x04;
0d5ff566 486 iowrite8(rc, ap->ioaddr.device_addr);
669a5db4
JG
487
488 /* Load the read timings */
0d5ff566 489 iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
669a5db4
JG
490
491 /* Ensure the timing register mode is right */
0d5ff566 492 rc = ioread8(ap->ioaddr.lbal_addr);
669a5db4
JG
493 rc &= 0x73;
494 rc |= 0x84;
0d5ff566 495 iowrite8(rc, ap->ioaddr.lbal_addr);
669a5db4
JG
496
497 /* Exit command mode */
0d5ff566 498 iowrite8(0x83, ap->ioaddr.nsect_addr);
669a5db4
JG
499}
500
501
502static struct ata_port_operations opti82c611a_port_ops = {
029cfd6b 503 .inherits = &legacy_base_port_ops,
669a5db4 504 .set_piomode = opti82c611a_set_piomode,
669a5db4
JG
505};
506
507/*
508 * Opti 82C465MV
509 *
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.
512 */
513
514static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
515{
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;
523
524 /* Get the clock */
525 sysclk = opti_syscfg(0xAC) & 0xC0; /* BIOS set */
526
527 /* Enter configuration mode */
0d5ff566
TH
528 ioread16(ap->ioaddr.error_addr);
529 ioread16(ap->ioaddr.error_addr);
530 iowrite8(3, ap->ioaddr.nsect_addr);
669a5db4
JG
531
532 /* Read VLB clock strapping */
533 clock = 1000000000 / khz[sysclk];
534
535 /* Get the timing data in cycles */
536 ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
537
538 /* Setup timing is shared */
539 if (pair) {
540 struct ata_timing tp;
541 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
542
543 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
544 }
545
07633b5d
HH
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;
669a5db4
JG
549
550 /* Select the right timing bank for write timing */
0d5ff566 551 rc = ioread8(ap->ioaddr.lbal_addr);
669a5db4
JG
552 rc &= 0x7F;
553 rc |= (adev->devno << 7);
0d5ff566 554 iowrite8(rc, ap->ioaddr.lbal_addr);
669a5db4
JG
555
556 /* Write the timings */
0d5ff566 557 iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
669a5db4
JG
558
559 /* Select the right bank for read timings, also
560 load the shared timings for address */
0d5ff566 561 rc = ioread8(ap->ioaddr.device_addr);
669a5db4
JG
562 rc &= 0xC0;
563 rc |= adev->devno; /* Index select */
564 rc |= (setup << 4) | 0x04;
0d5ff566 565 iowrite8(rc, ap->ioaddr.device_addr);
669a5db4
JG
566
567 /* Load the read timings */
0d5ff566 568 iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
669a5db4
JG
569
570 /* Ensure the timing register mode is right */
0d5ff566 571 rc = ioread8(ap->ioaddr.lbal_addr);
669a5db4
JG
572 rc &= 0x73;
573 rc |= 0x84;
0d5ff566 574 iowrite8(rc, ap->ioaddr.lbal_addr);
669a5db4
JG
575
576 /* Exit command mode */
0d5ff566 577 iowrite8(0x83, ap->ioaddr.nsect_addr);
669a5db4
JG
578
579 /* We need to know this for quad device on the MVB */
580 ap->host->private_data = ap;
581}
582
583/**
9363c382 584 * opt82c465mv_qc_issue - command issue
669a5db4
JG
585 * @qc: command pending
586 *
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.
594 *
595 * FIXME: dual channel needs ->serialize support
596 */
597
9363c382 598static unsigned int opti82c46x_qc_issue(struct ata_queued_cmd *qc)
669a5db4
JG
599{
600 struct ata_port *ap = qc->ap;
601 struct ata_device *adev = qc->dev;
602
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);
608
9363c382 609 return ata_sff_qc_issue(qc);
669a5db4
JG
610}
611
612static struct ata_port_operations opti82c46x_port_ops = {
029cfd6b 613 .inherits = &legacy_base_port_ops,
669a5db4 614 .set_piomode = opti82c46x_set_piomode,
9363c382 615 .qc_issue = opti82c46x_qc_issue,
669a5db4
JG
616};
617
defc9cd8
AC
618static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
619{
620 struct ata_timing t;
cb616dd5 621 struct legacy_data *ld_qdi = ap->host->private_data;
defc9cd8
AC
622 int active, recovery;
623 u8 timing;
624
625 /* Get the timing data in cycles */
626 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
627
cb616dd5 628 if (ld_qdi->fast) {
07633b5d
HH
629 active = 8 - clamp_val(t.active, 1, 8);
630 recovery = 18 - clamp_val(t.recover, 3, 18);
defc9cd8 631 } else {
07633b5d
HH
632 active = 9 - clamp_val(t.active, 2, 9);
633 recovery = 15 - clamp_val(t.recover, 0, 15);
defc9cd8
AC
634 }
635 timing = (recovery << 4) | active | 0x08;
636
cb616dd5 637 ld_qdi->clock[adev->devno] = timing;
defc9cd8 638
cb616dd5 639 outb(timing, ld_qdi->timing);
defc9cd8 640}
669a5db4
JG
641
642/**
defc9cd8
AC
643 * qdi6580dp_set_piomode - PIO setup for dual channel
644 * @ap: Port
645 * @adev: Device
669a5db4 646 *
defc9cd8 647 * In dual channel mode the 6580 has one clock per channel and we have
9363c382 648 * to software clockswitch in qc_issue.
669a5db4
JG
649 */
650
defc9cd8 651static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
669a5db4 652{
defc9cd8 653 struct ata_timing t;
cb616dd5 654 struct legacy_data *ld_qdi = ap->host->private_data;
defc9cd8
AC
655 int active, recovery;
656 u8 timing;
669a5db4 657
defc9cd8
AC
658 /* Get the timing data in cycles */
659 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
660
cb616dd5 661 if (ld_qdi->fast) {
07633b5d
HH
662 active = 8 - clamp_val(t.active, 1, 8);
663 recovery = 18 - clamp_val(t.recover, 3, 18);
defc9cd8 664 } else {
07633b5d
HH
665 active = 9 - clamp_val(t.active, 2, 9);
666 recovery = 15 - clamp_val(t.recover, 0, 15);
defc9cd8
AC
667 }
668 timing = (recovery << 4) | active | 0x08;
24dc5f33 669
cb616dd5 670 ld_qdi->clock[adev->devno] = timing;
669a5db4 671
cb616dd5 672 outb(timing, ld_qdi->timing + 2 * ap->port_no);
defc9cd8
AC
673 /* Clear the FIFO */
674 if (adev->class != ATA_DEV_ATA)
6809e730 675 outb(0x5F, (ld_qdi->timing & 0xFFF0) + 3);
defc9cd8 676}
0d5ff566 677
defc9cd8
AC
678/**
679 * qdi6580_set_piomode - PIO setup for single channel
680 * @ap: Port
681 * @adev: Device
682 *
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.
686 */
687
688static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
689{
690 struct ata_timing t;
cb616dd5 691 struct legacy_data *ld_qdi = ap->host->private_data;
defc9cd8
AC
692 int active, recovery;
693 u8 timing;
694
695 /* Get the timing data in cycles */
696 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
697
cb616dd5 698 if (ld_qdi->fast) {
07633b5d
HH
699 active = 8 - clamp_val(t.active, 1, 8);
700 recovery = 18 - clamp_val(t.recover, 3, 18);
defc9cd8 701 } else {
07633b5d
HH
702 active = 9 - clamp_val(t.active, 2, 9);
703 recovery = 15 - clamp_val(t.recover, 0, 15);
669a5db4 704 }
defc9cd8 705 timing = (recovery << 4) | active | 0x08;
cb616dd5
HH
706 ld_qdi->clock[adev->devno] = timing;
707 outb(timing, ld_qdi->timing + 2 * adev->devno);
defc9cd8
AC
708 /* Clear the FIFO */
709 if (adev->class != ATA_DEV_ATA)
6809e730 710 outb(0x5F, (ld_qdi->timing & 0xFFF0) + 3);
defc9cd8
AC
711}
712
713/**
9363c382 714 * qdi_qc_issue - command issue
defc9cd8
AC
715 * @qc: command pending
716 *
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.
719 */
720
9363c382 721static unsigned int qdi_qc_issue(struct ata_queued_cmd *qc)
defc9cd8
AC
722{
723 struct ata_port *ap = qc->ap;
724 struct ata_device *adev = qc->dev;
cb616dd5 725 struct legacy_data *ld_qdi = ap->host->private_data;
defc9cd8 726
cb616dd5 727 if (ld_qdi->clock[adev->devno] != ld_qdi->last) {
defc9cd8 728 if (adev->pio_mode) {
cb616dd5
HH
729 ld_qdi->last = ld_qdi->clock[adev->devno];
730 outb(ld_qdi->clock[adev->devno], ld_qdi->timing +
defc9cd8
AC
731 2 * ap->port_no);
732 }
669a5db4 733 }
9363c382 734 return ata_sff_qc_issue(qc);
defc9cd8 735}
669a5db4 736
b8325487 737static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
defc9cd8
AC
738 unsigned int buflen, int rw)
739{
740 struct ata_port *ap = adev->link->ap;
741 int slop = buflen & 3;
669a5db4 742
e3cf95dd
AC
743 if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)
744 && (ap->pflags & ATA_PFLAG_PIO32)) {
defc9cd8
AC
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);
669a5db4 749
defc9cd8 750 if (unlikely(slop)) {
6ad67403 751 __le32 pad;
defc9cd8
AC
752 if (rw == WRITE) {
753 memcpy(&pad, buf + buflen - slop, slop);
6ad67403 754 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
defc9cd8 755 } else {
6ad67403 756 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
defc9cd8
AC
757 memcpy(buf + buflen - slop, &pad, slop);
758 }
759 }
760 return (buflen + 3) & ~3;
761 } else
9363c382 762 return ata_sff_data_xfer(adev, buf, buflen, rw);
defc9cd8
AC
763}
764
b8325487
AC
765static int qdi_port(struct platform_device *dev,
766 struct legacy_probe *lp, struct legacy_data *ld)
767{
768 if (devm_request_region(&dev->dev, lp->private, 4, "qdi") == NULL)
769 return -EBUSY;
770 ld->timing = lp->private;
771 return 0;
772}
773
defc9cd8 774static struct ata_port_operations qdi6500_port_ops = {
029cfd6b 775 .inherits = &legacy_base_port_ops,
defc9cd8 776 .set_piomode = qdi6500_set_piomode,
9363c382 777 .qc_issue = qdi_qc_issue,
5682ed33 778 .sff_data_xfer = vlb32_data_xfer,
defc9cd8
AC
779};
780
781static struct ata_port_operations qdi6580_port_ops = {
029cfd6b 782 .inherits = &legacy_base_port_ops,
defc9cd8 783 .set_piomode = qdi6580_set_piomode,
5682ed33 784 .sff_data_xfer = vlb32_data_xfer,
defc9cd8
AC
785};
786
787static struct ata_port_operations qdi6580dp_port_ops = {
029cfd6b 788 .inherits = &legacy_base_port_ops,
defc9cd8 789 .set_piomode = qdi6580dp_set_piomode,
43c7d17e 790 .qc_issue = qdi_qc_issue,
5682ed33 791 .sff_data_xfer = vlb32_data_xfer,
defc9cd8
AC
792};
793
b8325487
AC
794static DEFINE_SPINLOCK(winbond_lock);
795
796static void winbond_writecfg(unsigned long port, u8 reg, u8 val)
797{
798 unsigned long flags;
799 spin_lock_irqsave(&winbond_lock, flags);
800 outb(reg, port + 0x01);
801 outb(val, port + 0x02);
802 spin_unlock_irqrestore(&winbond_lock, flags);
803}
804
805static u8 winbond_readcfg(unsigned long port, u8 reg)
806{
807 u8 val;
808
809 unsigned long flags;
810 spin_lock_irqsave(&winbond_lock, flags);
811 outb(reg, port + 0x01);
812 val = inb(port + 0x02);
813 spin_unlock_irqrestore(&winbond_lock, flags);
814
815 return val;
816}
817
818static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
819{
820 struct ata_timing t;
cb616dd5 821 struct legacy_data *ld_winbond = ap->host->private_data;
b8325487
AC
822 int active, recovery;
823 u8 reg;
824 int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
825
cb616dd5 826 reg = winbond_readcfg(ld_winbond->timing, 0x81);
b8325487
AC
827
828 /* Get the timing data in cycles */
829 if (reg & 0x40) /* Fast VLB bus, assume 50MHz */
830 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
831 else
832 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
833
07633b5d
HH
834 active = (clamp_val(t.active, 3, 17) - 1) & 0x0F;
835 recovery = (clamp_val(t.recover, 1, 15) + 1) & 0x0F;
b8325487 836 timing = (active << 4) | recovery;
cb616dd5 837 winbond_writecfg(ld_winbond->timing, timing, reg);
b8325487
AC
838
839 /* Load the setup timing */
840
841 reg = 0x35;
842 if (adev->class != ATA_DEV_ATA)
843 reg |= 0x08; /* FIFO off */
844 if (!ata_pio_need_iordy(adev))
845 reg |= 0x02; /* IORDY off */
07633b5d 846 reg |= (clamp_val(t.setup, 0, 3) << 6);
cb616dd5 847 winbond_writecfg(ld_winbond->timing, timing + 1, reg);
b8325487
AC
848}
849
850static int winbond_port(struct platform_device *dev,
851 struct legacy_probe *lp, struct legacy_data *ld)
852{
853 if (devm_request_region(&dev->dev, lp->private, 4, "winbond") == NULL)
854 return -EBUSY;
855 ld->timing = lp->private;
856 return 0;
857}
858
859static struct ata_port_operations winbond_port_ops = {
029cfd6b 860 .inherits = &legacy_base_port_ops,
b8325487 861 .set_piomode = winbond_set_piomode,
5682ed33 862 .sff_data_xfer = vlb32_data_xfer,
b8325487
AC
863};
864
defc9cd8
AC
865static struct legacy_controller controllers[] = {
866 {"BIOS", &legacy_port_ops, 0x1F,
e3cf95dd 867 ATA_FLAG_NO_IORDY, 0, NULL },
defc9cd8 868 {"Snooping", &simple_port_ops, 0x1F,
e3cf95dd 869 0, 0, NULL },
defc9cd8 870 {"PDC20230", &pdc20230_port_ops, 0x7,
e3cf95dd 871 ATA_FLAG_NO_IORDY,
16e6aeca 872 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, NULL },
defc9cd8 873 {"HT6560A", &ht6560a_port_ops, 0x07,
e3cf95dd 874 ATA_FLAG_NO_IORDY, 0, NULL },
defc9cd8 875 {"HT6560B", &ht6560b_port_ops, 0x1F,
e3cf95dd 876 ATA_FLAG_NO_IORDY, 0, NULL },
defc9cd8 877 {"OPTI82C611A", &opti82c611a_port_ops, 0x0F,
e3cf95dd 878 0, 0, NULL },
defc9cd8 879 {"OPTI82C46X", &opti82c46x_port_ops, 0x0F,
e3cf95dd 880 0, 0, NULL },
defc9cd8 881 {"QDI6500", &qdi6500_port_ops, 0x07,
e3cf95dd 882 ATA_FLAG_NO_IORDY,
16e6aeca 883 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
defc9cd8 884 {"QDI6580", &qdi6580_port_ops, 0x1F,
16e6aeca 885 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
defc9cd8 886 {"QDI6580DP", &qdi6580dp_port_ops, 0x1F,
16e6aeca 887 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
b8325487 888 {"W83759A", &winbond_port_ops, 0x1F,
16e6aeca 889 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE,
e3cf95dd 890 winbond_port }
defc9cd8
AC
891};
892
893/**
894 * probe_chip_type - Discover controller
895 * @probe: Probe entry to check
896 *
897 * Probe an ATA port and identify the type of controller. We don't
898 * check if the controller appears to be driveless at this point.
899 */
900
b8325487 901static __init int probe_chip_type(struct legacy_probe *probe)
defc9cd8
AC
902{
903 int mask = 1 << probe->slot;
904
b8325487
AC
905 if (winbond && (probe->port == 0x1F0 || probe->port == 0x170)) {
906 u8 reg = winbond_readcfg(winbond, 0x81);
907 reg |= 0x80; /* jumpered mode off */
908 winbond_writecfg(winbond, 0x81, reg);
909 reg = winbond_readcfg(winbond, 0x83);
910 reg |= 0xF0; /* local control */
911 winbond_writecfg(winbond, 0x83, reg);
912 reg = winbond_readcfg(winbond, 0x85);
913 reg |= 0xF0; /* programmable timing */
914 winbond_writecfg(winbond, 0x85, reg);
915
916 reg = winbond_readcfg(winbond, 0x81);
917
918 if (reg & mask)
919 return W83759A;
920 }
defc9cd8
AC
921 if (probe->port == 0x1F0) {
922 unsigned long flags;
923 local_irq_save(flags);
669a5db4 924 /* Probes */
669a5db4 925 outb(inb(0x1F2) | 0x80, 0x1F2);
defc9cd8 926 inb(0x1F5);
669a5db4
JG
927 inb(0x1F2);
928 inb(0x3F6);
929 inb(0x3F6);
930 inb(0x1F2);
931 inb(0x1F2);
932
933 if ((inb(0x1F2) & 0x80) == 0) {
934 /* PDC20230c or 20630 ? */
defc9cd8
AC
935 printk(KERN_INFO "PDC20230-C/20630 VLB ATA controller"
936 " detected.\n");
669a5db4
JG
937 udelay(100);
938 inb(0x1F5);
defc9cd8
AC
939 local_irq_restore(flags);
940 return PDC20230;
669a5db4
JG
941 } else {
942 outb(0x55, 0x1F2);
943 inb(0x1F2);
944 inb(0x1F2);
defc9cd8
AC
945 if (inb(0x1F2) == 0x00)
946 printk(KERN_INFO "PDC20230-B VLB ATA "
947 "controller detected.\n");
948 local_irq_restore(flags);
949 return BIOS;
669a5db4
JG
950 }
951 local_irq_restore(flags);
952 }
953
defc9cd8
AC
954 if (ht6560a & mask)
955 return HT6560A;
956 if (ht6560b & mask)
957 return HT6560B;
958 if (opti82c611a & mask)
959 return OPTI611A;
960 if (opti82c46x & mask)
961 return OPTI46X;
962 if (autospeed & mask)
963 return SNOOP;
964 return BIOS;
965}
966
967
968/**
969 * legacy_init_one - attach a legacy interface
970 * @pl: probe record
971 *
972 * Register an ISA bus IDE interface. Such interfaces are PIO and we
973 * assume do not support IRQ sharing.
974 */
975
976static __init int legacy_init_one(struct legacy_probe *probe)
977{
978 struct legacy_controller *controller = &controllers[probe->type];
979 int pio_modes = controller->pio_mask;
980 unsigned long io = probe->port;
981 u32 mask = (1 << probe->slot);
982 struct ata_port_operations *ops = controller->ops;
983 struct legacy_data *ld = &legacy_data[probe->slot];
984 struct ata_host *host = NULL;
985 struct ata_port *ap;
986 struct platform_device *pdev;
987 struct ata_device *dev;
988 void __iomem *io_addr, *ctrl_addr;
989 u32 iordy = (iordy_mask & mask) ? 0: ATA_FLAG_NO_IORDY;
990 int ret;
991
992 iordy |= controller->flags;
993
994 pdev = platform_device_register_simple(DRV_NAME, probe->slot, NULL, 0);
995 if (IS_ERR(pdev))
996 return PTR_ERR(pdev);
669a5db4 997
defc9cd8
AC
998 ret = -EBUSY;
999 if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
1000 devm_request_region(&pdev->dev, io + 0x0206, 1,
1001 "pata_legacy") == NULL)
1002 goto fail;
f834e49f 1003
5d728824 1004 ret = -ENOMEM;
defc9cd8
AC
1005 io_addr = devm_ioport_map(&pdev->dev, io, 8);
1006 ctrl_addr = devm_ioport_map(&pdev->dev, io + 0x0206, 1);
1007 if (!io_addr || !ctrl_addr)
1008 goto fail;
1009 if (controller->setup)
b8325487 1010 if (controller->setup(pdev, probe, ld) < 0)
defc9cd8 1011 goto fail;
5d728824
TH
1012 host = ata_host_alloc(&pdev->dev, 1);
1013 if (!host)
1014 goto fail;
1015 ap = host->ports[0];
1016
1017 ap->ops = ops;
1018 ap->pio_mask = pio_modes;
1019 ap->flags |= ATA_FLAG_SLAVE_POSS | iordy;
e3cf95dd 1020 ap->pflags |= controller->pflags;
5d728824
TH
1021 ap->ioaddr.cmd_addr = io_addr;
1022 ap->ioaddr.altstatus_addr = ctrl_addr;
1023 ap->ioaddr.ctl_addr = ctrl_addr;
9363c382 1024 ata_sff_std_ports(&ap->ioaddr);
b8325487 1025 ap->host->private_data = ld;
5d728824 1026
defc9cd8 1027 ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", io, io + 0x0206);
cbcdd875 1028
9363c382
TH
1029 ret = ata_host_activate(host, probe->irq, ata_sff_interrupt, 0,
1030 &legacy_sht);
5d728824 1031 if (ret)
669a5db4 1032 goto fail;
45bc955b 1033 async_synchronize_full();
669a5db4 1034 ld->platform_dev = pdev;
669a5db4 1035
defc9cd8
AC
1036 /* Nothing found means we drop the port as its probably not there */
1037
1038 ret = -ENODEV;
1eca4365 1039 ata_for_each_dev(dev, &ap->link, ALL) {
defc9cd8
AC
1040 if (!ata_dev_absent(dev)) {
1041 legacy_host[probe->slot] = host;
1042 ld->platform_dev = pdev;
1043 return 0;
1044 }
1045 }
20cbf5f8 1046 ata_host_detach(host);
669a5db4
JG
1047fail:
1048 platform_device_unregister(pdev);
669a5db4
JG
1049 return ret;
1050}
1051
1052/**
1053 * legacy_check_special_cases - ATA special cases
1054 * @p: PCI device to check
1055 * @master: set this if we find an ATA master
1056 * @master: set this if we find an ATA secondary
1057 *
defc9cd8
AC
1058 * A small number of vendors implemented early PCI ATA interfaces
1059 * on bridge logic without the ATA interface being PCI visible.
1060 * Where we have a matching PCI driver we must skip the relevant
1061 * device here. If we don't know about it then the legacy driver
1062 * is the right driver anyway.
669a5db4
JG
1063 */
1064
b8325487 1065static void __init legacy_check_special_cases(struct pci_dev *p, int *primary,
defc9cd8 1066 int *secondary)
669a5db4
JG
1067{
1068 /* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
1069 if (p->vendor == 0x1078 && p->device == 0x0000) {
1070 *primary = *secondary = 1;
1071 return;
1072 }
1073 /* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
1074 if (p->vendor == 0x1078 && p->device == 0x0002) {
1075 *primary = *secondary = 1;
1076 return;
1077 }
1078 /* Intel MPIIX - PIO ATA on non PCI side of bridge */
1079 if (p->vendor == 0x8086 && p->device == 0x1234) {
1080 u16 r;
1081 pci_read_config_word(p, 0x6C, &r);
defc9cd8
AC
1082 if (r & 0x8000) {
1083 /* ATA port enabled */
669a5db4
JG
1084 if (r & 0x4000)
1085 *secondary = 1;
1086 else
1087 *primary = 1;
1088 }
1089 return;
1090 }
1091}
1092
defc9cd8
AC
1093static __init void probe_opti_vlb(void)
1094{
1095 /* If an OPTI 82C46X is present find out where the channels are */
1096 static const char *optis[4] = {
1097 "3/463MV", "5MV",
1098 "5MVA", "5MVB"
1099 };
1100 u8 chans = 1;
1101 u8 ctrl = (opti_syscfg(0x30) & 0xC0) >> 6;
1102
1103 opti82c46x = 3; /* Assume master and slave first */
1104 printk(KERN_INFO DRV_NAME ": Opti 82C46%s chipset support.\n",
1105 optis[ctrl]);
1106 if (ctrl == 3)
1107 chans = (opti_syscfg(0x3F) & 0x20) ? 2 : 1;
1108 ctrl = opti_syscfg(0xAC);
1109 /* Check enabled and this port is the 465MV port. On the
1110 MVB we may have two channels */
1111 if (ctrl & 8) {
1112 if (chans == 2) {
1113 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1114 legacy_probe_add(0x170, 15, OPTI46X, 0);
1115 }
1116 if (ctrl & 4)
1117 legacy_probe_add(0x170, 15, OPTI46X, 0);
1118 else
1119 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1120 } else
1121 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1122}
1123
1124static __init void qdi65_identify_port(u8 r, u8 res, unsigned long port)
1125{
1126 static const unsigned long ide_port[2] = { 0x170, 0x1F0 };
1127 /* Check card type */
1128 if ((r & 0xF0) == 0xC0) {
1129 /* QD6500: single channel */
b8325487 1130 if (r & 8)
defc9cd8 1131 /* Disabled ? */
defc9cd8 1132 return;
defc9cd8
AC
1133 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1134 QDI6500, port);
1135 }
1136 if (((r & 0xF0) == 0xA0) || (r & 0xF0) == 0x50) {
1137 /* QD6580: dual channel */
1138 if (!request_region(port + 2 , 2, "pata_qdi")) {
1139 release_region(port, 2);
1140 return;
1141 }
1142 res = inb(port + 3);
1143 /* Single channel mode ? */
1144 if (res & 1)
1145 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1146 QDI6580, port);
1147 else { /* Dual channel mode */
1148 legacy_probe_add(0x1F0, 14, QDI6580DP, port);
1149 /* port + 0x02, r & 0x04 */
1150 legacy_probe_add(0x170, 15, QDI6580DP, port + 2);
1151 }
b8325487 1152 release_region(port + 2, 2);
defc9cd8
AC
1153 }
1154}
1155
1156static __init void probe_qdi_vlb(void)
1157{
1158 unsigned long flags;
1159 static const unsigned long qd_port[2] = { 0x30, 0xB0 };
1160 int i;
1161
1162 /*
1163 * Check each possible QD65xx base address
1164 */
1165
1166 for (i = 0; i < 2; i++) {
1167 unsigned long port = qd_port[i];
1168 u8 r, res;
1169
1170
1171 if (request_region(port, 2, "pata_qdi")) {
1172 /* Check for a card */
1173 local_irq_save(flags);
1174 /* I have no h/w that needs this delay but it
1175 is present in the historic code */
1176 r = inb(port);
1177 udelay(1);
1178 outb(0x19, port);
1179 udelay(1);
1180 res = inb(port);
1181 udelay(1);
1182 outb(r, port);
1183 udelay(1);
1184 local_irq_restore(flags);
1185
1186 /* Fail */
1187 if (res == 0x19) {
1188 release_region(port, 2);
1189 continue;
1190 }
1191 /* Passes the presence test */
1192 r = inb(port + 1);
1193 udelay(1);
1194 /* Check port agrees with port set */
b8325487
AC
1195 if ((r & 2) >> 1 == i)
1196 qdi65_identify_port(r, res, port);
1197 release_region(port, 2);
defc9cd8
AC
1198 }
1199 }
1200}
669a5db4
JG
1201
1202/**
1203 * legacy_init - attach legacy interfaces
1204 *
1205 * Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
1206 * Right now we do not scan the ide0 and ide1 address but should do so
1207 * for non PCI systems or systems with no PCI IDE legacy mode devices.
1208 * If you fix that note there are special cases to consider like VLB
1209 * drivers and CS5510/20.
1210 */
1211
1212static __init int legacy_init(void)
1213{
1214 int i;
1215 int ct = 0;
1216 int primary = 0;
1217 int secondary = 0;
defc9cd8
AC
1218 int pci_present = 0;
1219 struct legacy_probe *pl = &probe_list[0];
1220 int slot = 0;
669a5db4
JG
1221
1222 struct pci_dev *p = NULL;
1223
1224 for_each_pci_dev(p) {
1225 int r;
defc9cd8
AC
1226 /* Check for any overlap of the system ATA mappings. Native
1227 mode controllers stuck on these addresses or some devices
1228 in 'raid' mode won't be found by the storage class test */
669a5db4
JG
1229 for (r = 0; r < 6; r++) {
1230 if (pci_resource_start(p, r) == 0x1f0)
1231 primary = 1;
1232 if (pci_resource_start(p, r) == 0x170)
1233 secondary = 1;
1234 }
1235 /* Check for special cases */
1236 legacy_check_special_cases(p, &primary, &secondary);
1237
defc9cd8
AC
1238 /* If PCI bus is present then don't probe for tertiary
1239 legacy ports */
1240 pci_present = 1;
669a5db4
JG
1241 }
1242
b8325487
AC
1243 if (winbond == 1)
1244 winbond = 0x130; /* Default port, alt is 1B0 */
1245
defc9cd8
AC
1246 if (primary == 0 || all)
1247 legacy_probe_add(0x1F0, 14, UNKNOWN, 0);
1248 if (secondary == 0 || all)
1249 legacy_probe_add(0x170, 15, UNKNOWN, 0);
1250
1251 if (probe_all || !pci_present) {
1252 /* ISA/VLB extra ports */
1253 legacy_probe_add(0x1E8, 11, UNKNOWN, 0);
1254 legacy_probe_add(0x168, 10, UNKNOWN, 0);
1255 legacy_probe_add(0x1E0, 8, UNKNOWN, 0);
1256 legacy_probe_add(0x160, 12, UNKNOWN, 0);
669a5db4
JG
1257 }
1258
defc9cd8
AC
1259 if (opti82c46x)
1260 probe_opti_vlb();
1261 if (qdi)
1262 probe_qdi_vlb();
1263
defc9cd8
AC
1264 for (i = 0; i < NR_HOST; i++, pl++) {
1265 if (pl->port == 0)
669a5db4 1266 continue;
defc9cd8
AC
1267 if (pl->type == UNKNOWN)
1268 pl->type = probe_chip_type(pl);
1269 pl->slot = slot++;
1270 if (legacy_init_one(pl) == 0)
669a5db4
JG
1271 ct++;
1272 }
1273 if (ct != 0)
1274 return 0;
1275 return -ENODEV;
1276}
1277
1278static __exit void legacy_exit(void)
1279{
1280 int i;
1281
1282 for (i = 0; i < nr_legacy_host; i++) {
1283 struct legacy_data *ld = &legacy_data[i];
24dc5f33 1284 ata_host_detach(legacy_host[i]);
669a5db4 1285 platform_device_unregister(ld->platform_dev);
669a5db4
JG
1286 }
1287}
1288
1289MODULE_AUTHOR("Alan Cox");
1290MODULE_DESCRIPTION("low-level driver for legacy ATA");
1291MODULE_LICENSE("GPL");
1292MODULE_VERSION(DRV_VERSION);
1293
1294module_param(probe_all, int, 0);
1295module_param(autospeed, int, 0);
1296module_param(ht6560a, int, 0);
1297module_param(ht6560b, int, 0);
1298module_param(opti82c611a, int, 0);
1299module_param(opti82c46x, int, 0);
defc9cd8 1300module_param(qdi, int, 0);
669a5db4 1301module_param(pio_mask, int, 0);
f834e49f 1302module_param(iordy_mask, int, 0);
669a5db4
JG
1303
1304module_init(legacy_init);
1305module_exit(legacy_exit);