pata_legacy: resychronize with upstream changes and resubmit
[linux-2.6] / drivers / ata / pata_legacy.c
1 /*
2  *   pata-legacy.c - Legacy port PATA/SATA controller driver.
3  *   Copyright 2005/2006 Red Hat <alan@redhat.com>, all rights reserved.
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
31  *      Winbond W83759A
32  *
33  *  This driver handles legacy (that is "ISA/VLB side") IDE ports found
34  *  on PC class systems. There are three hybrid devices that are exceptions
35  *  The Cyrix 5510/5520 where a pre SFF ATA device is on the bridge and
36  *  the MPIIX where the tuning is PCI side but the IDE is "ISA side".
37  *
38  *  Specific support is included for the ht6560a/ht6560b/opti82c611a/
39  *  opti82c465mv/promise 20230c/20630
40  *
41  *  Use the autospeed and pio_mask options with:
42  *      Appian ADI/2 aka CLPD7220 or AIC25VL01.
43  *  Use the jumpers, autospeed and set pio_mask to the mode on the jumpers with
44  *      Goldstar GM82C711, PIC-1288A-125, UMC 82C871F, Winbond W83759,
45  *      Winbond W83759A, Promise PDC20230-B
46  *
47  *  For now use autospeed and pio_mask as above with the W83759A. This may
48  *  change.
49  *
50  *  TODO
51  *      Merge existing pata_qdi driver
52  *
53  */
54
55 #include <linux/kernel.h>
56 #include <linux/module.h>
57 #include <linux/pci.h>
58 #include <linux/init.h>
59 #include <linux/blkdev.h>
60 #include <linux/delay.h>
61 #include <scsi/scsi_host.h>
62 #include <linux/ata.h>
63 #include <linux/libata.h>
64 #include <linux/platform_device.h>
65
66 #define DRV_NAME "pata_legacy"
67 #define DRV_VERSION "0.5.5"
68
69 #define NR_HOST 6
70
71 static int all;
72 module_param(all, int, 0444);
73 MODULE_PARM_DESC(all, "Grab all legacy port devices, even if PCI(0=off, 1=on)");
74
75 struct legacy_data {
76         unsigned long timing;
77         u8 clock[2];
78         u8 last;
79         int fast;
80         struct platform_device *platform_dev;
81
82 };
83
84 enum controller {
85         BIOS = 0,
86         SNOOP = 1,
87         PDC20230 = 2,
88         HT6560A = 3,
89         HT6560B = 4,
90         OPTI611A = 5,
91         OPTI46X = 6,
92         QDI6500 = 7,
93         QDI6580 = 8,
94         QDI6580DP = 9,          /* Dual channel mode is different */
95
96         UNKNOWN = -1
97 };
98
99
100 struct legacy_probe {
101         unsigned char *name;
102         unsigned long port;
103         unsigned int irq;
104         unsigned int slot;
105         enum controller type;
106         unsigned long private;
107 };
108
109 struct legacy_controller {
110         const char *name;
111         struct ata_port_operations *ops;
112         unsigned int pio_mask;
113         unsigned int flags;
114         int (*setup)(struct legacy_probe *probe, struct legacy_data *data);
115 };
116
117 static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
118
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;
123
124
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 autospeed;           /* Chip present which snoops speed changes */
132 static int pio_mask = 0x1F;     /* PIO range for autospeed devices */
133 static int iordy_mask = 0xFFFFFFFF;     /* Use iordy if available */
134
135 /**
136  *      legacy_probe_add        -       Add interface to probe list
137  *      @port: Controller port
138  *      @irq: IRQ number
139  *      @type: Controller type
140  *      @private: Controller specific info
141  *
142  *      Add an entry into the probe list for ATA controllers. This is used
143  *      to add the default ISA slots and then to build up the table
144  *      further according to other ISA/VLB/Weird device scans
145  *
146  *      An I/O port list is used to keep ordering stable and sane, as we
147  *      don't have any good way to talk about ordering otherwise
148  */
149
150 static int legacy_probe_add(unsigned long port, unsigned int irq,
151                                 enum controller type, unsigned long private)
152 {
153         struct legacy_probe *lp = &probe_list[0];
154         int i;
155         struct legacy_probe *free = NULL;
156
157         for (i = 0; i < NR_HOST; i++) {
158                 if (lp->port == 0 && free == NULL)
159                         free = lp;
160                 /* Matching port, or the correct slot for ordering */
161                 if (lp->port == port || legacy_port[i] == port) {
162                         free = lp;
163                         break;
164                 }
165                 lp++;
166         }
167         if (free == NULL) {
168                 printk(KERN_ERR "pata_legacy: Too many interfaces.\n");
169                 return -1;
170         }
171         /* Fill in the entry for later probing */
172         free->port = port;
173         free->irq = irq;
174         free->type = type;
175         free->private = private;
176         return 0;
177 }
178
179
180 /**
181  *      legacy_set_mode         -       mode setting
182  *      @link: IDE link
183  *      @unused: Device that failed when error is returned
184  *
185  *      Use a non standard set_mode function. We don't want to be tuned.
186  *
187  *      The BIOS configured everything. Our job is not to fiddle. Just use
188  *      whatever PIO the hardware is using and leave it at that. When we
189  *      get some kind of nice user driven API for control then we can
190  *      expand on this as per hdparm in the base kernel.
191  */
192
193 static int legacy_set_mode(struct ata_link *link, struct ata_device **unused)
194 {
195         struct ata_device *dev;
196
197         ata_link_for_each_dev(dev, link) {
198                 if (ata_dev_enabled(dev)) {
199                         ata_dev_printk(dev, KERN_INFO,
200                                                 "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;
205                 }
206         }
207         return 0;
208 }
209
210 static struct scsi_host_template legacy_sht = {
211         .module                 = THIS_MODULE,
212         .name                   = DRV_NAME,
213         .ioctl                  = ata_scsi_ioctl,
214         .queuecommand           = ata_scsi_queuecmd,
215         .can_queue              = ATA_DEF_QUEUE,
216         .this_id                = ATA_SHT_THIS_ID,
217         .sg_tablesize           = LIBATA_MAX_PRD,
218         .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
219         .emulated               = ATA_SHT_EMULATED,
220         .use_clustering         = ATA_SHT_USE_CLUSTERING,
221         .proc_name              = DRV_NAME,
222         .dma_boundary           = ATA_DMA_BOUNDARY,
223         .slave_configure        = ata_scsi_slave_config,
224         .slave_destroy          = ata_scsi_slave_destroy,
225         .bios_param             = ata_std_bios_param,
226 };
227
228 /*
229  *      These ops are used if the user indicates the hardware
230  *      snoops the commands to decide on the mode and handles the
231  *      mode selection "magically" itself. Several legacy controllers
232  *      do this. The mode range can be set if it is not 0x1F by setting
233  *      pio_mask as well.
234  */
235
236 static struct ata_port_operations simple_port_ops = {
237         .tf_load        = ata_tf_load,
238         .tf_read        = ata_tf_read,
239         .check_status   = ata_check_status,
240         .exec_command   = ata_exec_command,
241         .dev_select     = ata_std_dev_select,
242
243         .freeze         = ata_bmdma_freeze,
244         .thaw           = ata_bmdma_thaw,
245         .error_handler  = ata_bmdma_error_handler,
246         .post_internal_cmd = ata_bmdma_post_internal_cmd,
247         .cable_detect   = ata_cable_40wire,
248
249         .qc_prep        = ata_qc_prep,
250         .qc_issue       = ata_qc_issue_prot,
251
252         .data_xfer      = ata_data_xfer_noirq,
253
254         .irq_handler    = ata_interrupt,
255         .irq_clear      = ata_bmdma_irq_clear,
256         .irq_on         = ata_irq_on,
257
258         .port_start     = ata_sff_port_start,
259 };
260
261 static struct ata_port_operations legacy_port_ops = {
262         .set_mode       = legacy_set_mode,
263
264         .tf_load        = ata_tf_load,
265         .tf_read        = ata_tf_read,
266         .check_status   = ata_check_status,
267         .exec_command   = ata_exec_command,
268         .dev_select     = ata_std_dev_select,
269         .cable_detect   = ata_cable_40wire,
270
271         .freeze         = ata_bmdma_freeze,
272         .thaw           = ata_bmdma_thaw,
273         .error_handler  = ata_bmdma_error_handler,
274         .post_internal_cmd = ata_bmdma_post_internal_cmd,
275
276         .qc_prep        = ata_qc_prep,
277         .qc_issue       = ata_qc_issue_prot,
278
279         .data_xfer      = ata_data_xfer_noirq,
280
281         .irq_handler    = ata_interrupt,
282         .irq_clear      = ata_bmdma_irq_clear,
283         .irq_on         = ata_irq_on,
284
285         .port_start     = ata_sff_port_start,
286 };
287
288 /*
289  *      Promise 20230C and 20620 support
290  *
291  *      This controller supports PIO0 to PIO2. We set PIO timings
292  *      conservatively to allow for 50MHz Vesa Local Bus. The 20620 DMA
293  *      support is weird being DMA to controller and PIO'd to the host
294  *      and not supported.
295  */
296
297 static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev)
298 {
299         int tries = 5;
300         int pio = adev->pio_mode - XFER_PIO_0;
301         u8 rt;
302         unsigned long flags;
303
304         /* Safe as UP only. Force I/Os to occur together */
305
306         local_irq_save(flags);
307
308         /* Unlock the control interface */
309         do {
310                 inb(0x1F5);
311                 outb(inb(0x1F2) | 0x80, 0x1F2);
312                 inb(0x1F2);
313                 inb(0x3F6);
314                 inb(0x3F6);
315                 inb(0x1F2);
316                 inb(0x1F2);
317         }
318         while ((inb(0x1F2) & 0x80) && --tries);
319
320         local_irq_restore(flags);
321
322         outb(inb(0x1F4) & 0x07, 0x1F4);
323
324         rt = inb(0x1F3);
325         rt &= 0x07 << (3 * adev->devno);
326         if (pio)
327                 rt |= (1 + 3 * pio) << (3 * adev->devno);
328
329         udelay(100);
330         outb(inb(0x1F2) | 0x01, 0x1F2);
331         udelay(100);
332         inb(0x1F5);
333
334 }
335
336 static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
337                         unsigned char *buf, unsigned int buflen, int rw)
338 {
339         if (ata_id_has_dword_io(dev->id)) {
340                 struct ata_port *ap = dev->link->ap;
341                 int slop = buflen & 3;
342                 unsigned long flags;
343
344                 local_irq_save(flags);
345
346                 /* Perform the 32bit I/O synchronization sequence */
347                 ioread8(ap->ioaddr.nsect_addr);
348                 ioread8(ap->ioaddr.nsect_addr);
349                 ioread8(ap->ioaddr.nsect_addr);
350
351                 /* Now the data */
352                 if (rw == READ)
353                         ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
354                 else
355                         iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
356
357                 if (unlikely(slop)) {
358                         u32 pad;
359                         if (rw == READ) {
360                                 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
361                                 memcpy(buf + buflen - slop, &pad, slop);
362                         } else {
363                                 memcpy(&pad, buf + buflen - slop, slop);
364                                 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
365                         }
366                         buflen += 4 - slop;
367                 }
368                 local_irq_restore(flags);
369         } else
370                 buflen = ata_data_xfer_noirq(dev, buf, buflen, rw);
371
372         return buflen;
373 }
374
375 static struct ata_port_operations pdc20230_port_ops = {
376         .set_piomode    = pdc20230_set_piomode,
377
378         .tf_load        = ata_tf_load,
379         .tf_read        = ata_tf_read,
380         .check_status   = ata_check_status,
381         .exec_command   = ata_exec_command,
382         .dev_select     = ata_std_dev_select,
383
384         .freeze         = ata_bmdma_freeze,
385         .thaw           = ata_bmdma_thaw,
386         .error_handler  = ata_bmdma_error_handler,
387         .post_internal_cmd = ata_bmdma_post_internal_cmd,
388         .cable_detect   = ata_cable_40wire,
389
390         .qc_prep        = ata_qc_prep,
391         .qc_issue       = ata_qc_issue_prot,
392
393         .data_xfer      = pdc_data_xfer_vlb,
394
395         .irq_handler    = ata_interrupt,
396         .irq_clear      = ata_bmdma_irq_clear,
397         .irq_on         = ata_irq_on,
398
399         .port_start     = ata_sff_port_start,
400 };
401
402 /*
403  *      Holtek 6560A support
404  *
405  *      This controller supports PIO0 to PIO2 (no IORDY even though higher
406  *      timings can be loaded).
407  */
408
409 static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
410 {
411         u8 active, recover;
412         struct ata_timing t;
413
414         /* Get the timing data in cycles. For now play safe at 50Mhz */
415         ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
416
417         active = FIT(t.active, 2, 15);
418         recover = FIT(t.recover, 4, 15);
419
420         inb(0x3E6);
421         inb(0x3E6);
422         inb(0x3E6);
423         inb(0x3E6);
424
425         iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
426         ioread8(ap->ioaddr.status_addr);
427 }
428
429 static struct ata_port_operations ht6560a_port_ops = {
430         .set_piomode    = ht6560a_set_piomode,
431
432         .tf_load        = ata_tf_load,
433         .tf_read        = ata_tf_read,
434         .check_status   = ata_check_status,
435         .exec_command   = ata_exec_command,
436         .dev_select     = ata_std_dev_select,
437
438         .freeze         = ata_bmdma_freeze,
439         .thaw           = ata_bmdma_thaw,
440         .error_handler  = ata_bmdma_error_handler,
441         .post_internal_cmd = ata_bmdma_post_internal_cmd,
442         .cable_detect   = ata_cable_40wire,
443
444         .qc_prep        = ata_qc_prep,
445         .qc_issue       = ata_qc_issue_prot,
446
447         .data_xfer      = ata_data_xfer,        /* Check vlb/noirq */
448
449         .irq_handler    = ata_interrupt,
450         .irq_clear      = ata_bmdma_irq_clear,
451         .irq_on         = ata_irq_on,
452
453         .port_start     = ata_sff_port_start,
454 };
455
456 /*
457  *      Holtek 6560B support
458  *
459  *      This controller supports PIO0 to PIO4. We honour the BIOS/jumper FIFO
460  *      setting unless we see an ATAPI device in which case we force it off.
461  *
462  *      FIXME: need to implement 2nd channel support.
463  */
464
465 static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
466 {
467         u8 active, recover;
468         struct ata_timing t;
469
470         /* Get the timing data in cycles. For now play safe at 50Mhz */
471         ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
472
473         active = FIT(t.active, 2, 15);
474         recover = FIT(t.recover, 2, 16);
475         recover &= 0x15;
476
477         inb(0x3E6);
478         inb(0x3E6);
479         inb(0x3E6);
480         inb(0x3E6);
481
482         iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
483
484         if (adev->class != ATA_DEV_ATA) {
485                 u8 rconf = inb(0x3E6);
486                 if (rconf & 0x24) {
487                         rconf &= ~0x24;
488                         outb(rconf, 0x3E6);
489                 }
490         }
491         ioread8(ap->ioaddr.status_addr);
492 }
493
494 static struct ata_port_operations ht6560b_port_ops = {
495         .set_piomode    = ht6560b_set_piomode,
496
497         .tf_load        = ata_tf_load,
498         .tf_read        = ata_tf_read,
499         .check_status   = ata_check_status,
500         .exec_command   = ata_exec_command,
501         .dev_select     = ata_std_dev_select,
502
503         .freeze         = ata_bmdma_freeze,
504         .thaw           = ata_bmdma_thaw,
505         .error_handler  = ata_bmdma_error_handler,
506         .post_internal_cmd = ata_bmdma_post_internal_cmd,
507         .cable_detect   = ata_cable_40wire,
508
509         .qc_prep        = ata_qc_prep,
510         .qc_issue       = ata_qc_issue_prot,
511
512         .data_xfer      = ata_data_xfer,    /* FIXME: Check 32bit and noirq */
513
514         .irq_handler    = ata_interrupt,
515         .irq_clear      = ata_bmdma_irq_clear,
516         .irq_on         = ata_irq_on,
517
518         .port_start     = ata_sff_port_start,
519 };
520
521 /*
522  *      Opti core chipset helpers
523  */
524
525 /**
526  *      opti_syscfg     -       read OPTI chipset configuration
527  *      @reg: Configuration register to read
528  *
529  *      Returns the value of an OPTI system board configuration register.
530  */
531
532 static u8 opti_syscfg(u8 reg)
533 {
534         unsigned long flags;
535         u8 r;
536
537         /* Uniprocessor chipset and must force cycles adjancent */
538         local_irq_save(flags);
539         outb(reg, 0x22);
540         r = inb(0x24);
541         local_irq_restore(flags);
542         return r;
543 }
544
545 /*
546  *      Opti 82C611A
547  *
548  *      This controller supports PIO0 to PIO3.
549  */
550
551 static void opti82c611a_set_piomode(struct ata_port *ap,
552                                                 struct ata_device *adev)
553 {
554         u8 active, recover, setup;
555         struct ata_timing t;
556         struct ata_device *pair = ata_dev_pair(adev);
557         int clock;
558         int khz[4] = { 50000, 40000, 33000, 25000 };
559         u8 rc;
560
561         /* Enter configuration mode */
562         ioread16(ap->ioaddr.error_addr);
563         ioread16(ap->ioaddr.error_addr);
564         iowrite8(3, ap->ioaddr.nsect_addr);
565
566         /* Read VLB clock strapping */
567         clock = 1000000000 / khz[ioread8(ap->ioaddr.lbah_addr) & 0x03];
568
569         /* Get the timing data in cycles */
570         ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
571
572         /* Setup timing is shared */
573         if (pair) {
574                 struct ata_timing tp;
575                 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
576
577                 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
578         }
579
580         active = FIT(t.active, 2, 17) - 2;
581         recover = FIT(t.recover, 1, 16) - 1;
582         setup = FIT(t.setup, 1, 4) - 1;
583
584         /* Select the right timing bank for write timing */
585         rc = ioread8(ap->ioaddr.lbal_addr);
586         rc &= 0x7F;
587         rc |= (adev->devno << 7);
588         iowrite8(rc, ap->ioaddr.lbal_addr);
589
590         /* Write the timings */
591         iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
592
593         /* Select the right bank for read timings, also
594            load the shared timings for address */
595         rc = ioread8(ap->ioaddr.device_addr);
596         rc &= 0xC0;
597         rc |= adev->devno;      /* Index select */
598         rc |= (setup << 4) | 0x04;
599         iowrite8(rc, ap->ioaddr.device_addr);
600
601         /* Load the read timings */
602         iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
603
604         /* Ensure the timing register mode is right */
605         rc = ioread8(ap->ioaddr.lbal_addr);
606         rc &= 0x73;
607         rc |= 0x84;
608         iowrite8(rc, ap->ioaddr.lbal_addr);
609
610         /* Exit command mode */
611         iowrite8(0x83,  ap->ioaddr.nsect_addr);
612 }
613
614
615 static struct ata_port_operations opti82c611a_port_ops = {
616         .set_piomode    = opti82c611a_set_piomode,
617
618         .tf_load        = ata_tf_load,
619         .tf_read        = ata_tf_read,
620         .check_status   = ata_check_status,
621         .exec_command   = ata_exec_command,
622         .dev_select     = ata_std_dev_select,
623
624         .freeze         = ata_bmdma_freeze,
625         .thaw           = ata_bmdma_thaw,
626         .error_handler  = ata_bmdma_error_handler,
627         .post_internal_cmd = ata_bmdma_post_internal_cmd,
628         .cable_detect   = ata_cable_40wire,
629
630         .qc_prep        = ata_qc_prep,
631         .qc_issue       = ata_qc_issue_prot,
632
633         .data_xfer      = ata_data_xfer,
634
635         .irq_handler    = ata_interrupt,
636         .irq_clear      = ata_bmdma_irq_clear,
637         .irq_on         = ata_irq_on,
638
639         .port_start     = ata_sff_port_start,
640 };
641
642 /*
643  *      Opti 82C465MV
644  *
645  *      This controller supports PIO0 to PIO3. Unlike the 611A the MVB
646  *      version is dual channel but doesn't have a lot of unique registers.
647  */
648
649 static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
650 {
651         u8 active, recover, setup;
652         struct ata_timing t;
653         struct ata_device *pair = ata_dev_pair(adev);
654         int clock;
655         int khz[4] = { 50000, 40000, 33000, 25000 };
656         u8 rc;
657         u8 sysclk;
658
659         /* Get the clock */
660         sysclk = opti_syscfg(0xAC) & 0xC0;      /* BIOS set */
661
662         /* Enter configuration mode */
663         ioread16(ap->ioaddr.error_addr);
664         ioread16(ap->ioaddr.error_addr);
665         iowrite8(3, ap->ioaddr.nsect_addr);
666
667         /* Read VLB clock strapping */
668         clock = 1000000000 / khz[sysclk];
669
670         /* Get the timing data in cycles */
671         ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
672
673         /* Setup timing is shared */
674         if (pair) {
675                 struct ata_timing tp;
676                 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
677
678                 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
679         }
680
681         active = FIT(t.active, 2, 17) - 2;
682         recover = FIT(t.recover, 1, 16) - 1;
683         setup = FIT(t.setup, 1, 4) - 1;
684
685         /* Select the right timing bank for write timing */
686         rc = ioread8(ap->ioaddr.lbal_addr);
687         rc &= 0x7F;
688         rc |= (adev->devno << 7);
689         iowrite8(rc, ap->ioaddr.lbal_addr);
690
691         /* Write the timings */
692         iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
693
694         /* Select the right bank for read timings, also
695            load the shared timings for address */
696         rc = ioread8(ap->ioaddr.device_addr);
697         rc &= 0xC0;
698         rc |= adev->devno;      /* Index select */
699         rc |= (setup << 4) | 0x04;
700         iowrite8(rc, ap->ioaddr.device_addr);
701
702         /* Load the read timings */
703         iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
704
705         /* Ensure the timing register mode is right */
706         rc = ioread8(ap->ioaddr.lbal_addr);
707         rc &= 0x73;
708         rc |= 0x84;
709         iowrite8(rc, ap->ioaddr.lbal_addr);
710
711         /* Exit command mode */
712         iowrite8(0x83,  ap->ioaddr.nsect_addr);
713
714         /* We need to know this for quad device on the MVB */
715         ap->host->private_data = ap;
716 }
717
718 /**
719  *      opt82c465mv_qc_issue_prot       -       command issue
720  *      @qc: command pending
721  *
722  *      Called when the libata layer is about to issue a command. We wrap
723  *      this interface so that we can load the correct ATA timings. The
724  *      MVB has a single set of timing registers and these are shared
725  *      across channels. As there are two registers we really ought to
726  *      track the last two used values as a sort of register window. For
727  *      now we just reload on a channel switch. On the single channel
728  *      setup this condition never fires so we do nothing extra.
729  *
730  *      FIXME: dual channel needs ->serialize support
731  */
732
733 static unsigned int opti82c46x_qc_issue_prot(struct ata_queued_cmd *qc)
734 {
735         struct ata_port *ap = qc->ap;
736         struct ata_device *adev = qc->dev;
737
738         /* If timings are set and for the wrong channel (2nd test is
739            due to a libata shortcoming and will eventually go I hope) */
740         if (ap->host->private_data != ap->host
741             && ap->host->private_data != NULL)
742                 opti82c46x_set_piomode(ap, adev);
743
744         return ata_qc_issue_prot(qc);
745 }
746
747 static struct ata_port_operations opti82c46x_port_ops = {
748         .set_piomode    = opti82c46x_set_piomode,
749
750         .tf_load        = ata_tf_load,
751         .tf_read        = ata_tf_read,
752         .check_status   = ata_check_status,
753         .exec_command   = ata_exec_command,
754         .dev_select     = ata_std_dev_select,
755
756         .freeze         = ata_bmdma_freeze,
757         .thaw           = ata_bmdma_thaw,
758         .error_handler  = ata_bmdma_error_handler,
759         .post_internal_cmd = ata_bmdma_post_internal_cmd,
760         .cable_detect   = ata_cable_40wire,
761
762         .qc_prep        = ata_qc_prep,
763         .qc_issue       = opti82c46x_qc_issue_prot,
764
765         .data_xfer      = ata_data_xfer,
766
767         .irq_handler    = ata_interrupt,
768         .irq_clear      = ata_bmdma_irq_clear,
769         .irq_on         = ata_irq_on,
770
771         .port_start     = ata_sff_port_start,
772 };
773
774 static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
775 {
776         struct ata_timing t;
777         struct legacy_data *qdi = ap->host->private_data;
778         int active, recovery;
779         u8 timing;
780
781         /* Get the timing data in cycles */
782         ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
783
784         if (qdi->fast) {
785                 active = 8 - FIT(t.active, 1, 8);
786                 recovery = 18 - FIT(t.recover, 3, 18);
787         } else {
788                 active = 9 - FIT(t.active, 2, 9);
789                 recovery = 15 - FIT(t.recover, 0, 15);
790         }
791         timing = (recovery << 4) | active | 0x08;
792
793         qdi->clock[adev->devno] = timing;
794
795         outb(timing, qdi->timing);
796 }
797
798 /**
799  *      qdi6580dp_set_piomode           -       PIO setup for dual channel
800  *      @ap: Port
801  *      @adev: Device
802  *      @irq: interrupt line
803  *
804  *      In dual channel mode the 6580 has one clock per channel and we have
805  *      to software clockswitch in qc_issue_prot.
806  */
807
808 static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
809 {
810         struct ata_timing t;
811         struct legacy_data *qdi = ap->host->private_data;
812         int active, recovery;
813         u8 timing;
814
815         /* Get the timing data in cycles */
816         ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
817
818         if (qdi->fast) {
819                 active = 8 - FIT(t.active, 1, 8);
820                 recovery = 18 - FIT(t.recover, 3, 18);
821         } else {
822                 active = 9 - FIT(t.active, 2, 9);
823                 recovery = 15 - FIT(t.recover, 0, 15);
824         }
825         timing = (recovery << 4) | active | 0x08;
826
827         qdi->clock[adev->devno] = timing;
828
829         outb(timing, qdi->timing + 2 * ap->port_no);
830         /* Clear the FIFO */
831         if (adev->class != ATA_DEV_ATA)
832                 outb(0x5F, qdi->timing + 3);
833 }
834
835 /**
836  *      qdi6580_set_piomode             -       PIO setup for single channel
837  *      @ap: Port
838  *      @adev: Device
839  *
840  *      In single channel mode the 6580 has one clock per device and we can
841  *      avoid the requirement to clock switch. We also have to load the timing
842  *      into the right clock according to whether we are master or slave.
843  */
844
845 static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
846 {
847         struct ata_timing t;
848         struct legacy_data *qdi = ap->host->private_data;
849         int active, recovery;
850         u8 timing;
851
852         /* Get the timing data in cycles */
853         ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
854
855         if (qdi->fast) {
856                 active = 8 - FIT(t.active, 1, 8);
857                 recovery = 18 - FIT(t.recover, 3, 18);
858         } else {
859                 active = 9 - FIT(t.active, 2, 9);
860                 recovery = 15 - FIT(t.recover, 0, 15);
861         }
862         timing = (recovery << 4) | active | 0x08;
863         qdi->clock[adev->devno] = timing;
864         outb(timing, qdi->timing + 2 * adev->devno);
865         /* Clear the FIFO */
866         if (adev->class != ATA_DEV_ATA)
867                 outb(0x5F, qdi->timing + 3);
868 }
869
870 /**
871  *      qdi_qc_issue_prot       -       command issue
872  *      @qc: command pending
873  *
874  *      Called when the libata layer is about to issue a command. We wrap
875  *      this interface so that we can load the correct ATA timings.
876  */
877
878 static unsigned int qdi_qc_issue_prot(struct ata_queued_cmd *qc)
879 {
880         struct ata_port *ap = qc->ap;
881         struct ata_device *adev = qc->dev;
882         struct legacy_data *qdi = ap->host->private_data;
883
884         if (qdi->clock[adev->devno] != qdi->last) {
885                 if (adev->pio_mode) {
886                         qdi->last = qdi->clock[adev->devno];
887                         outb(qdi->clock[adev->devno], qdi->timing +
888                                                         2 * ap->port_no);
889                 }
890         }
891         return ata_qc_issue_prot(qc);
892 }
893
894 /* For the 6580 can we flip the FIFO on/off at this point ? */
895
896 static unsigned int qdi_data_xfer(struct ata_device *adev, unsigned char *buf,
897                                         unsigned int buflen, int rw)
898 {
899         struct ata_port *ap = adev->link->ap;
900         int slop = buflen & 3;
901
902         if (ata_id_has_dword_io(adev->id)) {
903                 if (rw == WRITE)
904                         iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
905                 else
906                         ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
907
908                 if (unlikely(slop)) {
909                         u32 pad;
910                         if (rw == WRITE) {
911                                 memcpy(&pad, buf + buflen - slop, slop);
912                                 pad = le32_to_cpu(pad);
913                                 iowrite32(pad, ap->ioaddr.data_addr);
914                         } else {
915                                 pad = ioread32(ap->ioaddr.data_addr);
916                                 pad = cpu_to_le32(pad);
917                                 memcpy(buf + buflen - slop, &pad, slop);
918                         }
919                 }
920                 return (buflen + 3) & ~3;
921         } else
922                 return ata_data_xfer(adev, buf, buflen, rw);
923 }
924
925 static struct ata_port_operations qdi6500_port_ops = {
926         .set_piomode    = qdi6500_set_piomode,
927
928         .tf_load        = ata_tf_load,
929         .tf_read        = ata_tf_read,
930         .check_status   = ata_check_status,
931         .exec_command   = ata_exec_command,
932         .dev_select     = ata_std_dev_select,
933
934         .freeze         = ata_bmdma_freeze,
935         .thaw           = ata_bmdma_thaw,
936         .error_handler  = ata_bmdma_error_handler,
937         .post_internal_cmd = ata_bmdma_post_internal_cmd,
938         .cable_detect   = ata_cable_40wire,
939
940         .qc_prep        = ata_qc_prep,
941         .qc_issue       = qdi_qc_issue_prot,
942
943         .data_xfer      = qdi_data_xfer,
944
945         .irq_handler    = ata_interrupt,
946         .irq_clear      = ata_bmdma_irq_clear,
947         .irq_on         = ata_irq_on,
948
949         .port_start     = ata_sff_port_start,
950 };
951
952 static struct ata_port_operations qdi6580_port_ops = {
953         .set_piomode    = qdi6580_set_piomode,
954
955         .tf_load        = ata_tf_load,
956         .tf_read        = ata_tf_read,
957         .check_status   = ata_check_status,
958         .exec_command   = ata_exec_command,
959         .dev_select     = ata_std_dev_select,
960
961         .freeze         = ata_bmdma_freeze,
962         .thaw           = ata_bmdma_thaw,
963         .error_handler  = ata_bmdma_error_handler,
964         .post_internal_cmd = ata_bmdma_post_internal_cmd,
965         .cable_detect   = ata_cable_40wire,
966
967         .qc_prep        = ata_qc_prep,
968         .qc_issue       = ata_qc_issue_prot,
969
970         .data_xfer      = qdi_data_xfer,
971
972         .irq_handler    = ata_interrupt,
973         .irq_clear      = ata_bmdma_irq_clear,
974         .irq_on         = ata_irq_on,
975
976         .port_start     = ata_sff_port_start,
977 };
978
979 static struct ata_port_operations qdi6580dp_port_ops = {
980         .set_piomode    = qdi6580dp_set_piomode,
981
982         .tf_load        = ata_tf_load,
983         .tf_read        = ata_tf_read,
984         .check_status   = ata_check_status,
985         .exec_command   = ata_exec_command,
986         .dev_select     = ata_std_dev_select,
987
988         .freeze         = ata_bmdma_freeze,
989         .thaw           = ata_bmdma_thaw,
990         .error_handler  = ata_bmdma_error_handler,
991         .post_internal_cmd = ata_bmdma_post_internal_cmd,
992         .cable_detect   = ata_cable_40wire,
993
994         .qc_prep        = ata_qc_prep,
995         .qc_issue       = qdi_qc_issue_prot,
996
997         .data_xfer      = qdi_data_xfer,
998
999         .irq_handler    = ata_interrupt,
1000         .irq_clear      = ata_bmdma_irq_clear,
1001         .irq_on         = ata_irq_on,
1002
1003         .port_start     = ata_sff_port_start,
1004 };
1005
1006 static struct legacy_controller controllers[] = {
1007         {"BIOS",        &legacy_port_ops,       0x1F,
1008                                                 ATA_FLAG_NO_IORDY,      NULL },
1009         {"Snooping",    &simple_port_ops,       0x1F,
1010                                                 0              ,        NULL },
1011         {"PDC20230",    &pdc20230_port_ops,     0x7,
1012                                                 ATA_FLAG_NO_IORDY,      NULL },
1013         {"HT6560A",     &ht6560a_port_ops,      0x07,
1014                                                 ATA_FLAG_NO_IORDY,      NULL },
1015         {"HT6560B",     &ht6560b_port_ops,      0x1F,
1016                                                 ATA_FLAG_NO_IORDY,      NULL },
1017         {"OPTI82C611A", &opti82c611a_port_ops,  0x0F,
1018                                                 0              ,        NULL },
1019         {"OPTI82C46X",  &opti82c46x_port_ops,   0x0F,
1020                                                 0              ,        NULL },
1021         {"QDI6500",     &qdi6500_port_ops,      0x07,
1022                                                 ATA_FLAG_NO_IORDY,      NULL },
1023         {"QDI6580",     &qdi6580_port_ops,      0x1F,
1024                                                 0              ,        NULL },
1025         {"QDI6580DP",   &qdi6580dp_port_ops,    0x1F,
1026                                                 0              ,        NULL }
1027 };
1028
1029 /**
1030  *      probe_chip_type         -       Discover controller
1031  *      @probe: Probe entry to check
1032  *
1033  *      Probe an ATA port and identify the type of controller. We don't
1034  *      check if the controller appears to be driveless at this point.
1035  */
1036
1037 static int probe_chip_type(struct legacy_probe *probe)
1038 {
1039         int mask = 1 << probe->slot;
1040
1041         if (probe->port == 0x1F0) {
1042                 unsigned long flags;
1043                 local_irq_save(flags);
1044                 /* Probes */
1045                 outb(inb(0x1F2) | 0x80, 0x1F2);
1046                 inb(0x1F5);
1047                 inb(0x1F2);
1048                 inb(0x3F6);
1049                 inb(0x3F6);
1050                 inb(0x1F2);
1051                 inb(0x1F2);
1052
1053                 if ((inb(0x1F2) & 0x80) == 0) {
1054                         /* PDC20230c or 20630 ? */
1055                         printk(KERN_INFO  "PDC20230-C/20630 VLB ATA controller"
1056                                                         " detected.\n");
1057                         udelay(100);
1058                         inb(0x1F5);
1059                         local_irq_restore(flags);
1060                         return PDC20230;
1061                 } else {
1062                         outb(0x55, 0x1F2);
1063                         inb(0x1F2);
1064                         inb(0x1F2);
1065                         if (inb(0x1F2) == 0x00)
1066                                 printk(KERN_INFO "PDC20230-B VLB ATA "
1067                                                      "controller detected.\n");
1068                         local_irq_restore(flags);
1069                         return BIOS;
1070                 }
1071                 local_irq_restore(flags);
1072         }
1073
1074         if (ht6560a & mask)
1075                 return HT6560A;
1076         if (ht6560b & mask)
1077                 return HT6560B;
1078         if (opti82c611a & mask)
1079                 return OPTI611A;
1080         if (opti82c46x & mask)
1081                 return OPTI46X;
1082         if (autospeed & mask)
1083                 return SNOOP;
1084         return BIOS;
1085 }
1086
1087
1088 /**
1089  *      legacy_init_one         -       attach a legacy interface
1090  *      @pl: probe record
1091  *
1092  *      Register an ISA bus IDE interface. Such interfaces are PIO and we
1093  *      assume do not support IRQ sharing.
1094  */
1095
1096 static __init int legacy_init_one(struct legacy_probe *probe)
1097 {
1098         struct legacy_controller *controller = &controllers[probe->type];
1099         int pio_modes = controller->pio_mask;
1100         unsigned long io = probe->port;
1101         u32 mask = (1 << probe->slot);
1102         struct ata_port_operations *ops = controller->ops;
1103         struct legacy_data *ld = &legacy_data[probe->slot];
1104         struct ata_host *host = NULL;
1105         struct ata_port *ap;
1106         struct platform_device *pdev;
1107         struct ata_device *dev;
1108         void __iomem *io_addr, *ctrl_addr;
1109         u32 iordy = (iordy_mask & mask) ? 0: ATA_FLAG_NO_IORDY;
1110         int ret;
1111
1112         iordy |= controller->flags;
1113
1114         pdev = platform_device_register_simple(DRV_NAME, probe->slot, NULL, 0);
1115         if (IS_ERR(pdev))
1116                 return PTR_ERR(pdev);
1117
1118         ret = -EBUSY;
1119         if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
1120             devm_request_region(&pdev->dev, io + 0x0206, 1,
1121                                                         "pata_legacy") == NULL)
1122                 goto fail;
1123
1124         ret = -ENOMEM;
1125         io_addr = devm_ioport_map(&pdev->dev, io, 8);
1126         ctrl_addr = devm_ioport_map(&pdev->dev, io + 0x0206, 1);
1127         if (!io_addr || !ctrl_addr)
1128                 goto fail;
1129         if (controller->setup)
1130                 if (controller->setup(probe, ld) < 0)
1131                         goto fail;
1132         host = ata_host_alloc(&pdev->dev, 1);
1133         if (!host)
1134                 goto fail;
1135         ap = host->ports[0];
1136
1137         ap->ops = ops;
1138         ap->pio_mask = pio_modes;
1139         ap->flags |= ATA_FLAG_SLAVE_POSS | iordy;
1140         ap->ioaddr.cmd_addr = io_addr;
1141         ap->ioaddr.altstatus_addr = ctrl_addr;
1142         ap->ioaddr.ctl_addr = ctrl_addr;
1143         ata_std_ports(&ap->ioaddr);
1144         ap->private_data = ld;
1145
1146         ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", io, io + 0x0206);
1147
1148         ret = ata_host_activate(host, probe->irq, ata_interrupt, 0,
1149                                                                 &legacy_sht);
1150         if (ret)
1151                 goto fail;
1152         ld->platform_dev = pdev;
1153
1154         /* Nothing found means we drop the port as its probably not there */
1155
1156         ret = -ENODEV;
1157         ata_link_for_each_dev(dev, &ap->link) {
1158                 if (!ata_dev_absent(dev)) {
1159                         legacy_host[probe->slot] = host;
1160                         ld->platform_dev = pdev;
1161                         return 0;
1162                 }
1163         }
1164 fail:
1165         if (host)
1166                 ata_host_detach(host);
1167         /* FIXME: use devm for this */
1168         if (ld->timing)
1169                 release_region(ld->timing, 2);
1170         platform_device_unregister(pdev);
1171         return ret;
1172 }
1173
1174 /**
1175  *      legacy_check_special_cases      -       ATA special cases
1176  *      @p: PCI device to check
1177  *      @master: set this if we find an ATA master
1178  *      @master: set this if we find an ATA secondary
1179  *
1180  *      A small number of vendors implemented early PCI ATA interfaces
1181  *      on bridge logic without the ATA interface being PCI visible.
1182  *      Where we have a matching PCI driver we must skip the relevant
1183  *      device here. If we don't know about it then the legacy driver
1184  *      is the right driver anyway.
1185  */
1186
1187 static void legacy_check_special_cases(struct pci_dev *p, int *primary,
1188                                                                 int *secondary)
1189 {
1190         /* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
1191         if (p->vendor == 0x1078 && p->device == 0x0000) {
1192                 *primary = *secondary = 1;
1193                 return;
1194         }
1195         /* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
1196         if (p->vendor == 0x1078 && p->device == 0x0002) {
1197                 *primary = *secondary = 1;
1198                 return;
1199         }
1200         /* Intel MPIIX - PIO ATA on non PCI side of bridge */
1201         if (p->vendor == 0x8086 && p->device == 0x1234) {
1202                 u16 r;
1203                 pci_read_config_word(p, 0x6C, &r);
1204                 if (r & 0x8000) {
1205                         /* ATA port enabled */
1206                         if (r & 0x4000)
1207                                 *secondary = 1;
1208                         else
1209                                 *primary = 1;
1210                 }
1211                 return;
1212         }
1213 }
1214
1215 static __init void probe_opti_vlb(void)
1216 {
1217         /* If an OPTI 82C46X is present find out where the channels are */
1218         static const char *optis[4] = {
1219                 "3/463MV", "5MV",
1220                 "5MVA", "5MVB"
1221         };
1222         u8 chans = 1;
1223         u8 ctrl = (opti_syscfg(0x30) & 0xC0) >> 6;
1224
1225         opti82c46x = 3; /* Assume master and slave first */
1226         printk(KERN_INFO DRV_NAME ": Opti 82C46%s chipset support.\n",
1227                                                                 optis[ctrl]);
1228         if (ctrl == 3)
1229                 chans = (opti_syscfg(0x3F) & 0x20) ? 2 : 1;
1230         ctrl = opti_syscfg(0xAC);
1231         /* Check enabled and this port is the 465MV port. On the
1232            MVB we may have two channels */
1233         if (ctrl & 8) {
1234                 if (chans == 2) {
1235                         legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1236                         legacy_probe_add(0x170, 15, OPTI46X, 0);
1237                 }
1238                 if (ctrl & 4)
1239                         legacy_probe_add(0x170, 15, OPTI46X, 0);
1240                 else
1241                         legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1242         } else
1243                 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1244 }
1245
1246 static __init void qdi65_identify_port(u8 r, u8 res, unsigned long port)
1247 {
1248         static const unsigned long ide_port[2] = { 0x170, 0x1F0 };
1249         /* Check card type */
1250         if ((r & 0xF0) == 0xC0) {
1251                 /* QD6500: single channel */
1252                 if (r & 8) {
1253                         /* Disabled ? */
1254                         release_region(port, 2);
1255                         return;
1256                 }
1257                 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1258                                                                 QDI6500, port);
1259         }
1260         if (((r & 0xF0) == 0xA0) || (r & 0xF0) == 0x50) {
1261                 /* QD6580: dual channel */
1262                 if (!request_region(port + 2 , 2, "pata_qdi")) {
1263                         release_region(port, 2);
1264                         return;
1265                 }
1266                 res = inb(port + 3);
1267                 /* Single channel mode ? */
1268                 if (res & 1)
1269                         legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1270                                                                 QDI6580, port);
1271                 else { /* Dual channel mode */
1272                         legacy_probe_add(0x1F0, 14, QDI6580DP, port);
1273                         /* port + 0x02, r & 0x04 */
1274                         legacy_probe_add(0x170, 15, QDI6580DP, port + 2);
1275                 }
1276         }
1277 }
1278
1279 static __init void probe_qdi_vlb(void)
1280 {
1281         unsigned long flags;
1282         static const unsigned long qd_port[2] = { 0x30, 0xB0 };
1283         int i;
1284
1285         /*
1286          *      Check each possible QD65xx base address
1287          */
1288
1289         for (i = 0; i < 2; i++) {
1290                 unsigned long port = qd_port[i];
1291                 u8 r, res;
1292
1293
1294                 if (request_region(port, 2, "pata_qdi")) {
1295                         /* Check for a card */
1296                         local_irq_save(flags);
1297                         /* I have no h/w that needs this delay but it
1298                            is present in the historic code */
1299                         r = inb(port);
1300                         udelay(1);
1301                         outb(0x19, port);
1302                         udelay(1);
1303                         res = inb(port);
1304                         udelay(1);
1305                         outb(r, port);
1306                         udelay(1);
1307                         local_irq_restore(flags);
1308
1309                         /* Fail */
1310                         if (res == 0x19) {
1311                                 release_region(port, 2);
1312                                 continue;
1313                         }
1314                         /* Passes the presence test */
1315                         r = inb(port + 1);
1316                         udelay(1);
1317                         /* Check port agrees with port set */
1318                         if ((r & 2) >> 1 != i) {
1319                                 release_region(port, 2);
1320                                 continue;
1321                         }
1322                         qdi65_identify_port(r, res, port);
1323                 }
1324         }
1325 }
1326
1327 /**
1328  *      legacy_init             -       attach legacy interfaces
1329  *
1330  *      Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
1331  *      Right now we do not scan the ide0 and ide1 address but should do so
1332  *      for non PCI systems or systems with no PCI IDE legacy mode devices.
1333  *      If you fix that note there are special cases to consider like VLB
1334  *      drivers and CS5510/20.
1335  */
1336
1337 static __init int legacy_init(void)
1338 {
1339         int i;
1340         int ct = 0;
1341         int primary = 0;
1342         int secondary = 0;
1343         int pci_present = 0;
1344         struct legacy_probe *pl = &probe_list[0];
1345         int slot = 0;
1346
1347         struct pci_dev *p = NULL;
1348
1349         for_each_pci_dev(p) {
1350                 int r;
1351                 /* Check for any overlap of the system ATA mappings. Native
1352                    mode controllers stuck on these addresses or some devices
1353                    in 'raid' mode won't be found by the storage class test */
1354                 for (r = 0; r < 6; r++) {
1355                         if (pci_resource_start(p, r) == 0x1f0)
1356                                 primary = 1;
1357                         if (pci_resource_start(p, r) == 0x170)
1358                                 secondary = 1;
1359                 }
1360                 /* Check for special cases */
1361                 legacy_check_special_cases(p, &primary, &secondary);
1362
1363                 /* If PCI bus is present then don't probe for tertiary
1364                    legacy ports */
1365                 pci_present = 1;
1366         }
1367
1368         if (primary == 0 || all)
1369                 legacy_probe_add(0x1F0, 14, UNKNOWN, 0);
1370         if (secondary == 0 || all)
1371                 legacy_probe_add(0x170, 15, UNKNOWN, 0);
1372
1373         if (probe_all || !pci_present) {
1374                 /* ISA/VLB extra ports */
1375                 legacy_probe_add(0x1E8, 11, UNKNOWN, 0);
1376                 legacy_probe_add(0x168, 10, UNKNOWN, 0);
1377                 legacy_probe_add(0x1E0, 8, UNKNOWN, 0);
1378                 legacy_probe_add(0x160, 12, UNKNOWN, 0);
1379         }
1380
1381         if (opti82c46x)
1382                 probe_opti_vlb();
1383         if (qdi)
1384                 probe_qdi_vlb();
1385
1386
1387         for (i = 0; i < NR_HOST; i++, pl++) {
1388                 if (pl->port == 0)
1389                         continue;
1390                 if (pl->type == UNKNOWN)
1391                         pl->type = probe_chip_type(pl);
1392                 pl->slot = slot++;
1393                 if (legacy_init_one(pl) == 0)
1394                         ct++;
1395         }
1396         if (ct != 0)
1397                 return 0;
1398         return -ENODEV;
1399 }
1400
1401 static __exit void legacy_exit(void)
1402 {
1403         int i;
1404
1405         for (i = 0; i < nr_legacy_host; i++) {
1406                 struct legacy_data *ld = &legacy_data[i];
1407                 ata_host_detach(legacy_host[i]);
1408                 platform_device_unregister(ld->platform_dev);
1409                 if (ld->timing)
1410                         release_region(ld->timing, 2);
1411         }
1412 }
1413
1414 MODULE_AUTHOR("Alan Cox");
1415 MODULE_DESCRIPTION("low-level driver for legacy ATA");
1416 MODULE_LICENSE("GPL");
1417 MODULE_VERSION(DRV_VERSION);
1418
1419 module_param(probe_all, int, 0);
1420 module_param(autospeed, int, 0);
1421 module_param(ht6560a, int, 0);
1422 module_param(ht6560b, int, 0);
1423 module_param(opti82c611a, int, 0);
1424 module_param(opti82c46x, int, 0);
1425 module_param(qdi, int, 0);
1426 module_param(pio_mask, int, 0);
1427 module_param(iordy_mask, int, 0);
1428
1429 module_init(legacy_init);
1430 module_exit(legacy_exit);