Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[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  *
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/
38  *  opti82c465mv/promise 20230c/20630/winbond83759A
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  *
49  */
50
51 #include <linux/kernel.h>
52 #include <linux/module.h>
53 #include <linux/pci.h>
54 #include <linux/init.h>
55 #include <linux/blkdev.h>
56 #include <linux/delay.h>
57 #include <scsi/scsi_host.h>
58 #include <linux/ata.h>
59 #include <linux/libata.h>
60 #include <linux/platform_device.h>
61
62 #define DRV_NAME "pata_legacy"
63 #define DRV_VERSION "0.6.5"
64
65 #define NR_HOST 6
66
67 static int all;
68 module_param(all, int, 0444);
69 MODULE_PARM_DESC(all, "Grab all legacy port devices, even if PCI(0=off, 1=on)");
70
71 struct legacy_data {
72         unsigned long timing;
73         u8 clock[2];
74         u8 last;
75         int fast;
76         struct platform_device *platform_dev;
77
78 };
79
80 enum controller {
81         BIOS = 0,
82         SNOOP = 1,
83         PDC20230 = 2,
84         HT6560A = 3,
85         HT6560B = 4,
86         OPTI611A = 5,
87         OPTI46X = 6,
88         QDI6500 = 7,
89         QDI6580 = 8,
90         QDI6580DP = 9,          /* Dual channel mode is different */
91         W83759A = 10,
92
93         UNKNOWN = -1
94 };
95
96
97 struct legacy_probe {
98         unsigned char *name;
99         unsigned long port;
100         unsigned int irq;
101         unsigned int slot;
102         enum controller type;
103         unsigned long private;
104 };
105
106 struct legacy_controller {
107         const char *name;
108         struct ata_port_operations *ops;
109         unsigned int pio_mask;
110         unsigned int flags;
111         int (*setup)(struct platform_device *, struct legacy_probe *probe,
112                 struct legacy_data *data);
113 };
114
115 static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
116
117 static struct legacy_probe probe_list[NR_HOST];
118 static struct legacy_data legacy_data[NR_HOST];
119 static struct ata_host *legacy_host[NR_HOST];
120 static int nr_legacy_host;
121
122
123 static int probe_all;           /* Set to check all ISA port ranges */
124 static int ht6560a;             /* HT 6560A on primary 1, second 2, both 3 */
125 static int ht6560b;             /* HT 6560A on primary 1, second 2, both 3 */
126 static int opti82c611a;         /* Opti82c611A on primary 1, sec 2, both 3 */
127 static int opti82c46x;          /* Opti 82c465MV present(pri/sec autodetect) */
128 static int qdi;                 /* Set to probe QDI controllers */
129 static int winbond;             /* Set to probe Winbond controllers,
130                                         give I/O port if non stdanard */
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 static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
895                                         unsigned int buflen, int rw)
896 {
897         struct ata_port *ap = adev->link->ap;
898         int slop = buflen & 3;
899
900         if (ata_id_has_dword_io(adev->id)) {
901                 if (rw == WRITE)
902                         iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
903                 else
904                         ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
905
906                 if (unlikely(slop)) {
907                         u32 pad;
908                         if (rw == WRITE) {
909                                 memcpy(&pad, buf + buflen - slop, slop);
910                                 pad = le32_to_cpu(pad);
911                                 iowrite32(pad, ap->ioaddr.data_addr);
912                         } else {
913                                 pad = ioread32(ap->ioaddr.data_addr);
914                                 pad = cpu_to_le32(pad);
915                                 memcpy(buf + buflen - slop, &pad, slop);
916                         }
917                 }
918                 return (buflen + 3) & ~3;
919         } else
920                 return ata_data_xfer(adev, buf, buflen, rw);
921 }
922
923 static int qdi_port(struct platform_device *dev,
924                         struct legacy_probe *lp, struct legacy_data *ld)
925 {
926         if (devm_request_region(&dev->dev, lp->private, 4, "qdi") == NULL)
927                 return -EBUSY;
928         ld->timing = lp->private;
929         return 0;
930 }
931
932 static struct ata_port_operations qdi6500_port_ops = {
933         .set_piomode    = qdi6500_set_piomode,
934
935         .tf_load        = ata_tf_load,
936         .tf_read        = ata_tf_read,
937         .check_status   = ata_check_status,
938         .exec_command   = ata_exec_command,
939         .dev_select     = ata_std_dev_select,
940
941         .freeze         = ata_bmdma_freeze,
942         .thaw           = ata_bmdma_thaw,
943         .error_handler  = ata_bmdma_error_handler,
944         .post_internal_cmd = ata_bmdma_post_internal_cmd,
945         .cable_detect   = ata_cable_40wire,
946
947         .qc_prep        = ata_qc_prep,
948         .qc_issue       = qdi_qc_issue_prot,
949
950         .data_xfer      = vlb32_data_xfer,
951
952         .irq_handler    = ata_interrupt,
953         .irq_clear      = ata_bmdma_irq_clear,
954         .irq_on         = ata_irq_on,
955
956         .port_start     = ata_sff_port_start,
957 };
958
959 static struct ata_port_operations qdi6580_port_ops = {
960         .set_piomode    = qdi6580_set_piomode,
961
962         .tf_load        = ata_tf_load,
963         .tf_read        = ata_tf_read,
964         .check_status   = ata_check_status,
965         .exec_command   = ata_exec_command,
966         .dev_select     = ata_std_dev_select,
967
968         .freeze         = ata_bmdma_freeze,
969         .thaw           = ata_bmdma_thaw,
970         .error_handler  = ata_bmdma_error_handler,
971         .post_internal_cmd = ata_bmdma_post_internal_cmd,
972         .cable_detect   = ata_cable_40wire,
973
974         .qc_prep        = ata_qc_prep,
975         .qc_issue       = ata_qc_issue_prot,
976
977         .data_xfer      = vlb32_data_xfer,
978
979         .irq_handler    = ata_interrupt,
980         .irq_clear      = ata_bmdma_irq_clear,
981         .irq_on         = ata_irq_on,
982
983         .port_start     = ata_sff_port_start,
984 };
985
986 static struct ata_port_operations qdi6580dp_port_ops = {
987         .set_piomode    = qdi6580dp_set_piomode,
988
989         .tf_load        = ata_tf_load,
990         .tf_read        = ata_tf_read,
991         .check_status   = ata_check_status,
992         .exec_command   = ata_exec_command,
993         .dev_select     = ata_std_dev_select,
994
995         .freeze         = ata_bmdma_freeze,
996         .thaw           = ata_bmdma_thaw,
997         .error_handler  = ata_bmdma_error_handler,
998         .post_internal_cmd = ata_bmdma_post_internal_cmd,
999         .cable_detect   = ata_cable_40wire,
1000
1001         .qc_prep        = ata_qc_prep,
1002         .qc_issue       = qdi_qc_issue_prot,
1003
1004         .data_xfer      = vlb32_data_xfer,
1005
1006         .irq_handler    = ata_interrupt,
1007         .irq_clear      = ata_bmdma_irq_clear,
1008         .irq_on         = ata_irq_on,
1009
1010         .port_start     = ata_sff_port_start,
1011 };
1012
1013 static DEFINE_SPINLOCK(winbond_lock);
1014
1015 static void winbond_writecfg(unsigned long port, u8 reg, u8 val)
1016 {
1017         unsigned long flags;
1018         spin_lock_irqsave(&winbond_lock, flags);
1019         outb(reg, port + 0x01);
1020         outb(val, port + 0x02);
1021         spin_unlock_irqrestore(&winbond_lock, flags);
1022 }
1023
1024 static u8 winbond_readcfg(unsigned long port, u8 reg)
1025 {
1026         u8 val;
1027
1028         unsigned long flags;
1029         spin_lock_irqsave(&winbond_lock, flags);
1030         outb(reg, port + 0x01);
1031         val = inb(port + 0x02);
1032         spin_unlock_irqrestore(&winbond_lock, flags);
1033
1034         return val;
1035 }
1036
1037 static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
1038 {
1039         struct ata_timing t;
1040         struct legacy_data *winbond = ap->host->private_data;
1041         int active, recovery;
1042         u8 reg;
1043         int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
1044
1045         reg = winbond_readcfg(winbond->timing, 0x81);
1046
1047         /* Get the timing data in cycles */
1048         if (reg & 0x40)         /* Fast VLB bus, assume 50MHz */
1049                 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
1050         else
1051                 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
1052
1053         active = (FIT(t.active, 3, 17) - 1) & 0x0F;
1054         recovery = (FIT(t.recover, 1, 15) + 1) & 0x0F;
1055         timing = (active << 4) | recovery;
1056         winbond_writecfg(winbond->timing, timing, reg);
1057
1058         /* Load the setup timing */
1059
1060         reg = 0x35;
1061         if (adev->class != ATA_DEV_ATA)
1062                 reg |= 0x08;    /* FIFO off */
1063         if (!ata_pio_need_iordy(adev))
1064                 reg |= 0x02;    /* IORDY off */
1065         reg |= (FIT(t.setup, 0, 3) << 6);
1066         winbond_writecfg(winbond->timing, timing + 1, reg);
1067 }
1068
1069 static int winbond_port(struct platform_device *dev,
1070                         struct legacy_probe *lp, struct legacy_data *ld)
1071 {
1072         if (devm_request_region(&dev->dev, lp->private, 4, "winbond") == NULL)
1073                 return -EBUSY;
1074         ld->timing = lp->private;
1075         return 0;
1076 }
1077
1078 static struct ata_port_operations winbond_port_ops = {
1079         .set_piomode    = winbond_set_piomode,
1080
1081         .tf_load        = ata_tf_load,
1082         .tf_read        = ata_tf_read,
1083         .check_status   = ata_check_status,
1084         .exec_command   = ata_exec_command,
1085         .dev_select     = ata_std_dev_select,
1086
1087         .freeze         = ata_bmdma_freeze,
1088         .thaw           = ata_bmdma_thaw,
1089         .error_handler  = ata_bmdma_error_handler,
1090         .post_internal_cmd = ata_bmdma_post_internal_cmd,
1091         .cable_detect   = ata_cable_40wire,
1092
1093         .qc_prep        = ata_qc_prep,
1094         .qc_issue       = ata_qc_issue_prot,
1095
1096         .data_xfer      = vlb32_data_xfer,
1097
1098         .irq_clear      = ata_bmdma_irq_clear,
1099         .irq_on         = ata_irq_on,
1100
1101         .port_start     = ata_sff_port_start,
1102 };
1103
1104 static struct legacy_controller controllers[] = {
1105         {"BIOS",        &legacy_port_ops,       0x1F,
1106                                                 ATA_FLAG_NO_IORDY,      NULL },
1107         {"Snooping",    &simple_port_ops,       0x1F,
1108                                                 0              ,        NULL },
1109         {"PDC20230",    &pdc20230_port_ops,     0x7,
1110                                                 ATA_FLAG_NO_IORDY,      NULL },
1111         {"HT6560A",     &ht6560a_port_ops,      0x07,
1112                                                 ATA_FLAG_NO_IORDY,      NULL },
1113         {"HT6560B",     &ht6560b_port_ops,      0x1F,
1114                                                 ATA_FLAG_NO_IORDY,      NULL },
1115         {"OPTI82C611A", &opti82c611a_port_ops,  0x0F,
1116                                                 0              ,        NULL },
1117         {"OPTI82C46X",  &opti82c46x_port_ops,   0x0F,
1118                                                 0              ,        NULL },
1119         {"QDI6500",     &qdi6500_port_ops,      0x07,
1120                                         ATA_FLAG_NO_IORDY,      qdi_port },
1121         {"QDI6580",     &qdi6580_port_ops,      0x1F,
1122                                         0              ,        qdi_port },
1123         {"QDI6580DP",   &qdi6580dp_port_ops,    0x1F,
1124                                         0              ,        qdi_port },
1125         {"W83759A",     &winbond_port_ops,      0x1F,
1126                                         0              ,        winbond_port }
1127 };
1128
1129 /**
1130  *      probe_chip_type         -       Discover controller
1131  *      @probe: Probe entry to check
1132  *
1133  *      Probe an ATA port and identify the type of controller. We don't
1134  *      check if the controller appears to be driveless at this point.
1135  */
1136
1137 static __init int probe_chip_type(struct legacy_probe *probe)
1138 {
1139         int mask = 1 << probe->slot;
1140
1141         if (winbond && (probe->port == 0x1F0 || probe->port == 0x170)) {
1142                 u8 reg = winbond_readcfg(winbond, 0x81);
1143                 reg |= 0x80;    /* jumpered mode off */
1144                 winbond_writecfg(winbond, 0x81, reg);
1145                 reg = winbond_readcfg(winbond, 0x83);
1146                 reg |= 0xF0;    /* local control */
1147                 winbond_writecfg(winbond, 0x83, reg);
1148                 reg = winbond_readcfg(winbond, 0x85);
1149                 reg |= 0xF0;    /* programmable timing */
1150                 winbond_writecfg(winbond, 0x85, reg);
1151
1152                 reg = winbond_readcfg(winbond, 0x81);
1153
1154                 if (reg & mask)
1155                         return W83759A;
1156         }
1157         if (probe->port == 0x1F0) {
1158                 unsigned long flags;
1159                 local_irq_save(flags);
1160                 /* Probes */
1161                 outb(inb(0x1F2) | 0x80, 0x1F2);
1162                 inb(0x1F5);
1163                 inb(0x1F2);
1164                 inb(0x3F6);
1165                 inb(0x3F6);
1166                 inb(0x1F2);
1167                 inb(0x1F2);
1168
1169                 if ((inb(0x1F2) & 0x80) == 0) {
1170                         /* PDC20230c or 20630 ? */
1171                         printk(KERN_INFO  "PDC20230-C/20630 VLB ATA controller"
1172                                                         " detected.\n");
1173                         udelay(100);
1174                         inb(0x1F5);
1175                         local_irq_restore(flags);
1176                         return PDC20230;
1177                 } else {
1178                         outb(0x55, 0x1F2);
1179                         inb(0x1F2);
1180                         inb(0x1F2);
1181                         if (inb(0x1F2) == 0x00)
1182                                 printk(KERN_INFO "PDC20230-B VLB ATA "
1183                                                      "controller detected.\n");
1184                         local_irq_restore(flags);
1185                         return BIOS;
1186                 }
1187                 local_irq_restore(flags);
1188         }
1189
1190         if (ht6560a & mask)
1191                 return HT6560A;
1192         if (ht6560b & mask)
1193                 return HT6560B;
1194         if (opti82c611a & mask)
1195                 return OPTI611A;
1196         if (opti82c46x & mask)
1197                 return OPTI46X;
1198         if (autospeed & mask)
1199                 return SNOOP;
1200         return BIOS;
1201 }
1202
1203
1204 /**
1205  *      legacy_init_one         -       attach a legacy interface
1206  *      @pl: probe record
1207  *
1208  *      Register an ISA bus IDE interface. Such interfaces are PIO and we
1209  *      assume do not support IRQ sharing.
1210  */
1211
1212 static __init int legacy_init_one(struct legacy_probe *probe)
1213 {
1214         struct legacy_controller *controller = &controllers[probe->type];
1215         int pio_modes = controller->pio_mask;
1216         unsigned long io = probe->port;
1217         u32 mask = (1 << probe->slot);
1218         struct ata_port_operations *ops = controller->ops;
1219         struct legacy_data *ld = &legacy_data[probe->slot];
1220         struct ata_host *host = NULL;
1221         struct ata_port *ap;
1222         struct platform_device *pdev;
1223         struct ata_device *dev;
1224         void __iomem *io_addr, *ctrl_addr;
1225         u32 iordy = (iordy_mask & mask) ? 0: ATA_FLAG_NO_IORDY;
1226         int ret;
1227
1228         iordy |= controller->flags;
1229
1230         pdev = platform_device_register_simple(DRV_NAME, probe->slot, NULL, 0);
1231         if (IS_ERR(pdev))
1232                 return PTR_ERR(pdev);
1233
1234         ret = -EBUSY;
1235         if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
1236             devm_request_region(&pdev->dev, io + 0x0206, 1,
1237                                                         "pata_legacy") == NULL)
1238                 goto fail;
1239
1240         ret = -ENOMEM;
1241         io_addr = devm_ioport_map(&pdev->dev, io, 8);
1242         ctrl_addr = devm_ioport_map(&pdev->dev, io + 0x0206, 1);
1243         if (!io_addr || !ctrl_addr)
1244                 goto fail;
1245         if (controller->setup)
1246                 if (controller->setup(pdev, probe, ld) < 0)
1247                         goto fail;
1248         host = ata_host_alloc(&pdev->dev, 1);
1249         if (!host)
1250                 goto fail;
1251         ap = host->ports[0];
1252
1253         ap->ops = ops;
1254         ap->pio_mask = pio_modes;
1255         ap->flags |= ATA_FLAG_SLAVE_POSS | iordy;
1256         ap->ioaddr.cmd_addr = io_addr;
1257         ap->ioaddr.altstatus_addr = ctrl_addr;
1258         ap->ioaddr.ctl_addr = ctrl_addr;
1259         ata_std_ports(&ap->ioaddr);
1260         ap->host->private_data = ld;
1261
1262         ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", io, io + 0x0206);
1263
1264         ret = ata_host_activate(host, probe->irq, ata_interrupt, 0,
1265                                                                 &legacy_sht);
1266         if (ret)
1267                 goto fail;
1268         ld->platform_dev = pdev;
1269
1270         /* Nothing found means we drop the port as its probably not there */
1271
1272         ret = -ENODEV;
1273         ata_link_for_each_dev(dev, &ap->link) {
1274                 if (!ata_dev_absent(dev)) {
1275                         legacy_host[probe->slot] = host;
1276                         ld->platform_dev = pdev;
1277                         return 0;
1278                 }
1279         }
1280 fail:
1281         if (host)
1282                 ata_host_detach(host);
1283         platform_device_unregister(pdev);
1284         return ret;
1285 }
1286
1287 /**
1288  *      legacy_check_special_cases      -       ATA special cases
1289  *      @p: PCI device to check
1290  *      @master: set this if we find an ATA master
1291  *      @master: set this if we find an ATA secondary
1292  *
1293  *      A small number of vendors implemented early PCI ATA interfaces
1294  *      on bridge logic without the ATA interface being PCI visible.
1295  *      Where we have a matching PCI driver we must skip the relevant
1296  *      device here. If we don't know about it then the legacy driver
1297  *      is the right driver anyway.
1298  */
1299
1300 static void __init legacy_check_special_cases(struct pci_dev *p, int *primary,
1301                                                                 int *secondary)
1302 {
1303         /* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
1304         if (p->vendor == 0x1078 && p->device == 0x0000) {
1305                 *primary = *secondary = 1;
1306                 return;
1307         }
1308         /* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
1309         if (p->vendor == 0x1078 && p->device == 0x0002) {
1310                 *primary = *secondary = 1;
1311                 return;
1312         }
1313         /* Intel MPIIX - PIO ATA on non PCI side of bridge */
1314         if (p->vendor == 0x8086 && p->device == 0x1234) {
1315                 u16 r;
1316                 pci_read_config_word(p, 0x6C, &r);
1317                 if (r & 0x8000) {
1318                         /* ATA port enabled */
1319                         if (r & 0x4000)
1320                                 *secondary = 1;
1321                         else
1322                                 *primary = 1;
1323                 }
1324                 return;
1325         }
1326 }
1327
1328 static __init void probe_opti_vlb(void)
1329 {
1330         /* If an OPTI 82C46X is present find out where the channels are */
1331         static const char *optis[4] = {
1332                 "3/463MV", "5MV",
1333                 "5MVA", "5MVB"
1334         };
1335         u8 chans = 1;
1336         u8 ctrl = (opti_syscfg(0x30) & 0xC0) >> 6;
1337
1338         opti82c46x = 3; /* Assume master and slave first */
1339         printk(KERN_INFO DRV_NAME ": Opti 82C46%s chipset support.\n",
1340                                                                 optis[ctrl]);
1341         if (ctrl == 3)
1342                 chans = (opti_syscfg(0x3F) & 0x20) ? 2 : 1;
1343         ctrl = opti_syscfg(0xAC);
1344         /* Check enabled and this port is the 465MV port. On the
1345            MVB we may have two channels */
1346         if (ctrl & 8) {
1347                 if (chans == 2) {
1348                         legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1349                         legacy_probe_add(0x170, 15, OPTI46X, 0);
1350                 }
1351                 if (ctrl & 4)
1352                         legacy_probe_add(0x170, 15, OPTI46X, 0);
1353                 else
1354                         legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1355         } else
1356                 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1357 }
1358
1359 static __init void qdi65_identify_port(u8 r, u8 res, unsigned long port)
1360 {
1361         static const unsigned long ide_port[2] = { 0x170, 0x1F0 };
1362         /* Check card type */
1363         if ((r & 0xF0) == 0xC0) {
1364                 /* QD6500: single channel */
1365                 if (r & 8)
1366                         /* Disabled ? */
1367                         return;
1368                 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1369                                                                 QDI6500, port);
1370         }
1371         if (((r & 0xF0) == 0xA0) || (r & 0xF0) == 0x50) {
1372                 /* QD6580: dual channel */
1373                 if (!request_region(port + 2 , 2, "pata_qdi")) {
1374                         release_region(port, 2);
1375                         return;
1376                 }
1377                 res = inb(port + 3);
1378                 /* Single channel mode ? */
1379                 if (res & 1)
1380                         legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1381                                                                 QDI6580, port);
1382                 else { /* Dual channel mode */
1383                         legacy_probe_add(0x1F0, 14, QDI6580DP, port);
1384                         /* port + 0x02, r & 0x04 */
1385                         legacy_probe_add(0x170, 15, QDI6580DP, port + 2);
1386                 }
1387                 release_region(port + 2, 2);
1388         }
1389 }
1390
1391 static __init void probe_qdi_vlb(void)
1392 {
1393         unsigned long flags;
1394         static const unsigned long qd_port[2] = { 0x30, 0xB0 };
1395         int i;
1396
1397         /*
1398          *      Check each possible QD65xx base address
1399          */
1400
1401         for (i = 0; i < 2; i++) {
1402                 unsigned long port = qd_port[i];
1403                 u8 r, res;
1404
1405
1406                 if (request_region(port, 2, "pata_qdi")) {
1407                         /* Check for a card */
1408                         local_irq_save(flags);
1409                         /* I have no h/w that needs this delay but it
1410                            is present in the historic code */
1411                         r = inb(port);
1412                         udelay(1);
1413                         outb(0x19, port);
1414                         udelay(1);
1415                         res = inb(port);
1416                         udelay(1);
1417                         outb(r, port);
1418                         udelay(1);
1419                         local_irq_restore(flags);
1420
1421                         /* Fail */
1422                         if (res == 0x19) {
1423                                 release_region(port, 2);
1424                                 continue;
1425                         }
1426                         /* Passes the presence test */
1427                         r = inb(port + 1);
1428                         udelay(1);
1429                         /* Check port agrees with port set */
1430                         if ((r & 2) >> 1 == i)
1431                                 qdi65_identify_port(r, res, port);
1432                         release_region(port, 2);
1433                 }
1434         }
1435 }
1436
1437 /**
1438  *      legacy_init             -       attach legacy interfaces
1439  *
1440  *      Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
1441  *      Right now we do not scan the ide0 and ide1 address but should do so
1442  *      for non PCI systems or systems with no PCI IDE legacy mode devices.
1443  *      If you fix that note there are special cases to consider like VLB
1444  *      drivers and CS5510/20.
1445  */
1446
1447 static __init int legacy_init(void)
1448 {
1449         int i;
1450         int ct = 0;
1451         int primary = 0;
1452         int secondary = 0;
1453         int pci_present = 0;
1454         struct legacy_probe *pl = &probe_list[0];
1455         int slot = 0;
1456
1457         struct pci_dev *p = NULL;
1458
1459         for_each_pci_dev(p) {
1460                 int r;
1461                 /* Check for any overlap of the system ATA mappings. Native
1462                    mode controllers stuck on these addresses or some devices
1463                    in 'raid' mode won't be found by the storage class test */
1464                 for (r = 0; r < 6; r++) {
1465                         if (pci_resource_start(p, r) == 0x1f0)
1466                                 primary = 1;
1467                         if (pci_resource_start(p, r) == 0x170)
1468                                 secondary = 1;
1469                 }
1470                 /* Check for special cases */
1471                 legacy_check_special_cases(p, &primary, &secondary);
1472
1473                 /* If PCI bus is present then don't probe for tertiary
1474                    legacy ports */
1475                 pci_present = 1;
1476         }
1477
1478         if (winbond == 1)
1479                 winbond = 0x130;        /* Default port, alt is 1B0 */
1480
1481         if (primary == 0 || all)
1482                 legacy_probe_add(0x1F0, 14, UNKNOWN, 0);
1483         if (secondary == 0 || all)
1484                 legacy_probe_add(0x170, 15, UNKNOWN, 0);
1485
1486         if (probe_all || !pci_present) {
1487                 /* ISA/VLB extra ports */
1488                 legacy_probe_add(0x1E8, 11, UNKNOWN, 0);
1489                 legacy_probe_add(0x168, 10, UNKNOWN, 0);
1490                 legacy_probe_add(0x1E0, 8, UNKNOWN, 0);
1491                 legacy_probe_add(0x160, 12, UNKNOWN, 0);
1492         }
1493
1494         if (opti82c46x)
1495                 probe_opti_vlb();
1496         if (qdi)
1497                 probe_qdi_vlb();
1498
1499         for (i = 0; i < NR_HOST; i++, pl++) {
1500                 if (pl->port == 0)
1501                         continue;
1502                 if (pl->type == UNKNOWN)
1503                         pl->type = probe_chip_type(pl);
1504                 pl->slot = slot++;
1505                 if (legacy_init_one(pl) == 0)
1506                         ct++;
1507         }
1508         if (ct != 0)
1509                 return 0;
1510         return -ENODEV;
1511 }
1512
1513 static __exit void legacy_exit(void)
1514 {
1515         int i;
1516
1517         for (i = 0; i < nr_legacy_host; i++) {
1518                 struct legacy_data *ld = &legacy_data[i];
1519                 ata_host_detach(legacy_host[i]);
1520                 platform_device_unregister(ld->platform_dev);
1521         }
1522 }
1523
1524 MODULE_AUTHOR("Alan Cox");
1525 MODULE_DESCRIPTION("low-level driver for legacy ATA");
1526 MODULE_LICENSE("GPL");
1527 MODULE_VERSION(DRV_VERSION);
1528
1529 module_param(probe_all, int, 0);
1530 module_param(autospeed, int, 0);
1531 module_param(ht6560a, int, 0);
1532 module_param(ht6560b, int, 0);
1533 module_param(opti82c611a, int, 0);
1534 module_param(opti82c46x, int, 0);
1535 module_param(qdi, int, 0);
1536 module_param(pio_mask, int, 0);
1537 module_param(iordy_mask, int, 0);
1538
1539 module_init(legacy_init);
1540 module_exit(legacy_exit);