libata: convert to iomap
[pandora-kernel.git] / 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.3"
68
69 #define NR_HOST 6
70
71 static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
72 static int legacy_irq[NR_HOST] = { 15, 14, 11, 10, 8, 12 };
73
74 struct legacy_data {
75         unsigned long timing;
76         u8 clock[2];
77         u8 last;
78         int fast;
79         struct platform_device *platform_dev;
80
81 };
82
83 static struct legacy_data legacy_data[NR_HOST];
84 static struct ata_host *legacy_host[NR_HOST];
85 static int nr_legacy_host;
86
87
88 static int probe_all;                   /* Set to check all ISA port ranges */
89 static int ht6560a;                     /* HT 6560A on primary 1, secondary 2, both 3 */
90 static int ht6560b;                     /* HT 6560A on primary 1, secondary 2, both 3 */
91 static int opti82c611a;                 /* Opti82c611A on primary 1, secondary 2, both 3 */
92 static int opti82c46x;          /* Opti 82c465MV present (pri/sec autodetect) */
93 static int autospeed;                   /* Chip present which snoops speed changes */
94 static int pio_mask = 0x1F;             /* PIO range for autospeed devices */
95
96 /**
97  *      legacy_set_mode         -       mode setting
98  *      @ap: IDE interface
99  *      @unused: Device that failed when error is returned
100  *
101  *      Use a non standard set_mode function. We don't want to be tuned.
102  *
103  *      The BIOS configured everything. Our job is not to fiddle. Just use
104  *      whatever PIO the hardware is using and leave it at that. When we
105  *      get some kind of nice user driven API for control then we can
106  *      expand on this as per hdparm in the base kernel.
107  */
108
109 static int legacy_set_mode(struct ata_port *ap, struct ata_device **unused)
110 {
111         int i;
112
113         for (i = 0; i < ATA_MAX_DEVICES; i++) {
114                 struct ata_device *dev = &ap->device[i];
115                 if (ata_dev_enabled(dev)) {
116                         dev->pio_mode = XFER_PIO_0;
117                         dev->xfer_mode = XFER_PIO_0;
118                         dev->xfer_shift = ATA_SHIFT_PIO;
119                         dev->flags |= ATA_DFLAG_PIO;
120                 }
121         }
122         return 0;
123 }
124
125 static struct scsi_host_template legacy_sht = {
126         .module                 = THIS_MODULE,
127         .name                   = DRV_NAME,
128         .ioctl                  = ata_scsi_ioctl,
129         .queuecommand           = ata_scsi_queuecmd,
130         .can_queue              = ATA_DEF_QUEUE,
131         .this_id                = ATA_SHT_THIS_ID,
132         .sg_tablesize           = LIBATA_MAX_PRD,
133         .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
134         .emulated               = ATA_SHT_EMULATED,
135         .use_clustering         = ATA_SHT_USE_CLUSTERING,
136         .proc_name              = DRV_NAME,
137         .dma_boundary           = ATA_DMA_BOUNDARY,
138         .slave_configure        = ata_scsi_slave_config,
139         .slave_destroy          = ata_scsi_slave_destroy,
140         .bios_param             = ata_std_bios_param,
141 };
142
143 /*
144  *      These ops are used if the user indicates the hardware
145  *      snoops the commands to decide on the mode and handles the
146  *      mode selection "magically" itself. Several legacy controllers
147  *      do this. The mode range can be set if it is not 0x1F by setting
148  *      pio_mask as well.
149  */
150
151 static struct ata_port_operations simple_port_ops = {
152         .port_disable   = ata_port_disable,
153         .tf_load        = ata_tf_load,
154         .tf_read        = ata_tf_read,
155         .check_status   = ata_check_status,
156         .exec_command   = ata_exec_command,
157         .dev_select     = ata_std_dev_select,
158
159         .freeze         = ata_bmdma_freeze,
160         .thaw           = ata_bmdma_thaw,
161         .error_handler  = ata_bmdma_error_handler,
162         .post_internal_cmd = ata_bmdma_post_internal_cmd,
163
164         .qc_prep        = ata_qc_prep,
165         .qc_issue       = ata_qc_issue_prot,
166
167         .data_xfer      = ata_data_xfer_noirq,
168
169         .irq_handler    = ata_interrupt,
170         .irq_clear      = ata_bmdma_irq_clear,
171
172         .port_start     = ata_port_start,
173 };
174
175 static struct ata_port_operations legacy_port_ops = {
176         .set_mode       = legacy_set_mode,
177
178         .port_disable   = ata_port_disable,
179         .tf_load        = ata_tf_load,
180         .tf_read        = ata_tf_read,
181         .check_status   = ata_check_status,
182         .exec_command   = ata_exec_command,
183         .dev_select     = ata_std_dev_select,
184
185         .error_handler  = ata_bmdma_error_handler,
186
187         .qc_prep        = ata_qc_prep,
188         .qc_issue       = ata_qc_issue_prot,
189
190         .data_xfer      = ata_data_xfer_noirq,
191
192         .irq_handler    = ata_interrupt,
193         .irq_clear      = ata_bmdma_irq_clear,
194
195         .port_start     = ata_port_start,
196 };
197
198 /*
199  *      Promise 20230C and 20620 support
200  *
201  *      This controller supports PIO0 to PIO2. We set PIO timings conservatively to
202  *      allow for 50MHz Vesa Local Bus. The 20620 DMA support is weird being DMA to
203  *      controller and PIO'd to the host and not supported.
204  */
205
206 static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev)
207 {
208         int tries = 5;
209         int pio = adev->pio_mode - XFER_PIO_0;
210         u8 rt;
211         unsigned long flags;
212
213         /* Safe as UP only. Force I/Os to occur together */
214
215         local_irq_save(flags);
216
217         /* Unlock the control interface */
218         do
219         {
220                 inb(0x1F5);
221                 outb(inb(0x1F2) | 0x80, 0x1F2);
222                 inb(0x1F2);
223                 inb(0x3F6);
224                 inb(0x3F6);
225                 inb(0x1F2);
226                 inb(0x1F2);
227         }
228         while((inb(0x1F2) & 0x80) && --tries);
229
230         local_irq_restore(flags);
231
232         outb(inb(0x1F4) & 0x07, 0x1F4);
233
234         rt = inb(0x1F3);
235         rt &= 0x07 << (3 * adev->devno);
236         if (pio)
237                 rt |= (1 + 3 * pio) << (3 * adev->devno);
238
239         udelay(100);
240         outb(inb(0x1F2) | 0x01, 0x1F2);
241         udelay(100);
242         inb(0x1F5);
243
244 }
245
246 static void pdc_data_xfer_vlb(struct ata_device *adev, unsigned char *buf, unsigned int buflen, int write_data)
247 {
248         struct ata_port *ap = adev->ap;
249         int slop = buflen & 3;
250         unsigned long flags;
251
252         if (ata_id_has_dword_io(adev->id)) {
253                 local_irq_save(flags);
254
255                 /* Perform the 32bit I/O synchronization sequence */
256                 ioread8(ap->ioaddr.nsect_addr);
257                 ioread8(ap->ioaddr.nsect_addr);
258                 ioread8(ap->ioaddr.nsect_addr);
259
260                 /* Now the data */
261
262                 if (write_data)
263                         iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
264                 else
265                         ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
266
267                 if (unlikely(slop)) {
268                         u32 pad;
269                         if (write_data) {
270                                 memcpy(&pad, buf + buflen - slop, slop);
271                                 pad = le32_to_cpu(pad);
272                                 iowrite32(pad, ap->ioaddr.data_addr);
273                         } else {
274                                 pad = ioread32(ap->ioaddr.data_addr);
275                                 pad = cpu_to_le16(pad);
276                                 memcpy(buf + buflen - slop, &pad, slop);
277                         }
278                 }
279                 local_irq_restore(flags);
280         }
281         else
282                 ata_data_xfer_noirq(adev, buf, buflen, write_data);
283 }
284
285 static struct ata_port_operations pdc20230_port_ops = {
286         .set_piomode    = pdc20230_set_piomode,
287
288         .port_disable   = ata_port_disable,
289         .tf_load        = ata_tf_load,
290         .tf_read        = ata_tf_read,
291         .check_status   = ata_check_status,
292         .exec_command   = ata_exec_command,
293         .dev_select     = ata_std_dev_select,
294
295         .error_handler  = ata_bmdma_error_handler,
296
297         .qc_prep        = ata_qc_prep,
298         .qc_issue       = ata_qc_issue_prot,
299
300         .data_xfer      = pdc_data_xfer_vlb,
301
302         .irq_handler    = ata_interrupt,
303         .irq_clear      = ata_bmdma_irq_clear,
304
305         .port_start     = ata_port_start,
306 };
307
308 /*
309  *      Holtek 6560A support
310  *
311  *      This controller supports PIO0 to PIO2 (no IORDY even though higher timings
312  *      can be loaded).
313  */
314
315 static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
316 {
317         u8 active, recover;
318         struct ata_timing t;
319
320         /* Get the timing data in cycles. For now play safe at 50Mhz */
321         ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
322
323         active = FIT(t.active, 2, 15);
324         recover = FIT(t.recover, 4, 15);
325
326         inb(0x3E6);
327         inb(0x3E6);
328         inb(0x3E6);
329         inb(0x3E6);
330
331         iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
332         ioread8(ap->ioaddr.status_addr);
333 }
334
335 static struct ata_port_operations ht6560a_port_ops = {
336         .set_piomode    = ht6560a_set_piomode,
337
338         .port_disable   = ata_port_disable,
339         .tf_load        = ata_tf_load,
340         .tf_read        = ata_tf_read,
341         .check_status   = ata_check_status,
342         .exec_command   = ata_exec_command,
343         .dev_select     = ata_std_dev_select,
344
345         .error_handler  = ata_bmdma_error_handler,
346
347         .qc_prep        = ata_qc_prep,
348         .qc_issue       = ata_qc_issue_prot,
349
350         .data_xfer      = ata_data_xfer,        /* Check vlb/noirq */
351
352         .irq_handler    = ata_interrupt,
353         .irq_clear      = ata_bmdma_irq_clear,
354
355         .port_start     = ata_port_start,
356 };
357
358 /*
359  *      Holtek 6560B support
360  *
361  *      This controller supports PIO0 to PIO4. We honour the BIOS/jumper FIFO setting
362  *      unless we see an ATAPI device in which case we force it off.
363  *
364  *      FIXME: need to implement 2nd channel support.
365  */
366
367 static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
368 {
369         u8 active, recover;
370         struct ata_timing t;
371
372         /* Get the timing data in cycles. For now play safe at 50Mhz */
373         ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
374
375         active = FIT(t.active, 2, 15);
376         recover = FIT(t.recover, 2, 16);
377         recover &= 0x15;
378
379         inb(0x3E6);
380         inb(0x3E6);
381         inb(0x3E6);
382         inb(0x3E6);
383
384         iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
385
386         if (adev->class != ATA_DEV_ATA) {
387                 u8 rconf = inb(0x3E6);
388                 if (rconf & 0x24) {
389                         rconf &= ~ 0x24;
390                         outb(rconf, 0x3E6);
391                 }
392         }
393         ioread8(ap->ioaddr.status_addr);
394 }
395
396 static struct ata_port_operations ht6560b_port_ops = {
397         .set_piomode    = ht6560b_set_piomode,
398
399         .port_disable   = ata_port_disable,
400         .tf_load        = ata_tf_load,
401         .tf_read        = ata_tf_read,
402         .check_status   = ata_check_status,
403         .exec_command   = ata_exec_command,
404         .dev_select     = ata_std_dev_select,
405
406         .error_handler  = ata_bmdma_error_handler,
407
408         .qc_prep        = ata_qc_prep,
409         .qc_issue       = ata_qc_issue_prot,
410
411         .data_xfer      = ata_data_xfer,        /* FIXME: Check 32bit and noirq */
412
413         .irq_handler    = ata_interrupt,
414         .irq_clear      = ata_bmdma_irq_clear,
415
416         .port_start     = ata_port_start,
417 };
418
419 /*
420  *      Opti core chipset helpers
421  */
422
423 /**
424  *      opti_syscfg     -       read OPTI chipset configuration
425  *      @reg: Configuration register to read
426  *
427  *      Returns the value of an OPTI system board configuration register.
428  */
429
430 static u8 opti_syscfg(u8 reg)
431 {
432         unsigned long flags;
433         u8 r;
434
435         /* Uniprocessor chipset and must force cycles adjancent */
436         local_irq_save(flags);
437         outb(reg, 0x22);
438         r = inb(0x24);
439         local_irq_restore(flags);
440         return r;
441 }
442
443 /*
444  *      Opti 82C611A
445  *
446  *      This controller supports PIO0 to PIO3.
447  */
448
449 static void opti82c611a_set_piomode(struct ata_port *ap, struct ata_device *adev)
450 {
451         u8 active, recover, setup;
452         struct ata_timing t;
453         struct ata_device *pair = ata_dev_pair(adev);
454         int clock;
455         int khz[4] = { 50000, 40000, 33000, 25000 };
456         u8 rc;
457
458         /* Enter configuration mode */
459         ioread16(ap->ioaddr.error_addr);
460         ioread16(ap->ioaddr.error_addr);
461         iowrite8(3, ap->ioaddr.nsect_addr);
462
463         /* Read VLB clock strapping */
464         clock = 1000000000 / khz[ioread8(ap->ioaddr.lbah_addr) & 0x03];
465
466         /* Get the timing data in cycles */
467         ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
468
469         /* Setup timing is shared */
470         if (pair) {
471                 struct ata_timing tp;
472                 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
473
474                 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
475         }
476
477         active = FIT(t.active, 2, 17) - 2;
478         recover = FIT(t.recover, 1, 16) - 1;
479         setup = FIT(t.setup, 1, 4) - 1;
480
481         /* Select the right timing bank for write timing */
482         rc = ioread8(ap->ioaddr.lbal_addr);
483         rc &= 0x7F;
484         rc |= (adev->devno << 7);
485         iowrite8(rc, ap->ioaddr.lbal_addr);
486
487         /* Write the timings */
488         iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
489
490         /* Select the right bank for read timings, also
491            load the shared timings for address */
492         rc = ioread8(ap->ioaddr.device_addr);
493         rc &= 0xC0;
494         rc |= adev->devno;      /* Index select */
495         rc |= (setup << 4) | 0x04;
496         iowrite8(rc, ap->ioaddr.device_addr);
497
498         /* Load the read timings */
499         iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
500
501         /* Ensure the timing register mode is right */
502         rc = ioread8(ap->ioaddr.lbal_addr);
503         rc &= 0x73;
504         rc |= 0x84;
505         iowrite8(rc, ap->ioaddr.lbal_addr);
506
507         /* Exit command mode */
508         iowrite8(0x83,  ap->ioaddr.nsect_addr);
509 }
510
511
512 static struct ata_port_operations opti82c611a_port_ops = {
513         .set_piomode    = opti82c611a_set_piomode,
514
515         .port_disable   = ata_port_disable,
516         .tf_load        = ata_tf_load,
517         .tf_read        = ata_tf_read,
518         .check_status   = ata_check_status,
519         .exec_command   = ata_exec_command,
520         .dev_select     = ata_std_dev_select,
521
522         .error_handler  = ata_bmdma_error_handler,
523
524         .qc_prep        = ata_qc_prep,
525         .qc_issue       = ata_qc_issue_prot,
526
527         .data_xfer      = ata_data_xfer,
528
529         .irq_handler    = ata_interrupt,
530         .irq_clear      = ata_bmdma_irq_clear,
531
532         .port_start     = ata_port_start,
533 };
534
535 /*
536  *      Opti 82C465MV
537  *
538  *      This controller supports PIO0 to PIO3. Unlike the 611A the MVB
539  *      version is dual channel but doesn't have a lot of unique registers.
540  */
541
542 static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
543 {
544         u8 active, recover, setup;
545         struct ata_timing t;
546         struct ata_device *pair = ata_dev_pair(adev);
547         int clock;
548         int khz[4] = { 50000, 40000, 33000, 25000 };
549         u8 rc;
550         u8 sysclk;
551
552         /* Get the clock */
553         sysclk = opti_syscfg(0xAC) & 0xC0;      /* BIOS set */
554
555         /* Enter configuration mode */
556         ioread16(ap->ioaddr.error_addr);
557         ioread16(ap->ioaddr.error_addr);
558         iowrite8(3, ap->ioaddr.nsect_addr);
559
560         /* Read VLB clock strapping */
561         clock = 1000000000 / khz[sysclk];
562
563         /* Get the timing data in cycles */
564         ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
565
566         /* Setup timing is shared */
567         if (pair) {
568                 struct ata_timing tp;
569                 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
570
571                 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
572         }
573
574         active = FIT(t.active, 2, 17) - 2;
575         recover = FIT(t.recover, 1, 16) - 1;
576         setup = FIT(t.setup, 1, 4) - 1;
577
578         /* Select the right timing bank for write timing */
579         rc = ioread8(ap->ioaddr.lbal_addr);
580         rc &= 0x7F;
581         rc |= (adev->devno << 7);
582         iowrite8(rc, ap->ioaddr.lbal_addr);
583
584         /* Write the timings */
585         iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
586
587         /* Select the right bank for read timings, also
588            load the shared timings for address */
589         rc = ioread8(ap->ioaddr.device_addr);
590         rc &= 0xC0;
591         rc |= adev->devno;      /* Index select */
592         rc |= (setup << 4) | 0x04;
593         iowrite8(rc, ap->ioaddr.device_addr);
594
595         /* Load the read timings */
596         iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
597
598         /* Ensure the timing register mode is right */
599         rc = ioread8(ap->ioaddr.lbal_addr);
600         rc &= 0x73;
601         rc |= 0x84;
602         iowrite8(rc, ap->ioaddr.lbal_addr);
603
604         /* Exit command mode */
605         iowrite8(0x83,  ap->ioaddr.nsect_addr);
606
607         /* We need to know this for quad device on the MVB */
608         ap->host->private_data = ap;
609 }
610
611 /**
612  *      opt82c465mv_qc_issue_prot       -       command issue
613  *      @qc: command pending
614  *
615  *      Called when the libata layer is about to issue a command. We wrap
616  *      this interface so that we can load the correct ATA timings. The
617  *      MVB has a single set of timing registers and these are shared
618  *      across channels. As there are two registers we really ought to
619  *      track the last two used values as a sort of register window. For
620  *      now we just reload on a channel switch. On the single channel
621  *      setup this condition never fires so we do nothing extra.
622  *
623  *      FIXME: dual channel needs ->serialize support
624  */
625
626 static unsigned int opti82c46x_qc_issue_prot(struct ata_queued_cmd *qc)
627 {
628         struct ata_port *ap = qc->ap;
629         struct ata_device *adev = qc->dev;
630
631         /* If timings are set and for the wrong channel (2nd test is
632            due to a libata shortcoming and will eventually go I hope) */
633         if (ap->host->private_data != ap->host
634             && ap->host->private_data != NULL)
635                 opti82c46x_set_piomode(ap, adev);
636
637         return ata_qc_issue_prot(qc);
638 }
639
640 static struct ata_port_operations opti82c46x_port_ops = {
641         .set_piomode    = opti82c46x_set_piomode,
642
643         .port_disable   = ata_port_disable,
644         .tf_load        = ata_tf_load,
645         .tf_read        = ata_tf_read,
646         .check_status   = ata_check_status,
647         .exec_command   = ata_exec_command,
648         .dev_select     = ata_std_dev_select,
649
650         .error_handler  = ata_bmdma_error_handler,
651
652         .qc_prep        = ata_qc_prep,
653         .qc_issue       = opti82c46x_qc_issue_prot,
654
655         .data_xfer      = ata_data_xfer,
656
657         .irq_handler    = ata_interrupt,
658         .irq_clear      = ata_bmdma_irq_clear,
659
660         .port_start     = ata_port_start,
661 };
662
663
664 /**
665  *      legacy_init_one         -       attach a legacy interface
666  *      @port: port number
667  *      @io: I/O port start
668  *      @ctrl: control port
669  *      @irq: interrupt line
670  *
671  *      Register an ISA bus IDE interface. Such interfaces are PIO and we
672  *      assume do not support IRQ sharing.
673  */
674
675 static __init int legacy_init_one(int port, unsigned long io, unsigned long ctrl, int irq)
676 {
677         struct legacy_data *ld = &legacy_data[nr_legacy_host];
678         struct ata_probe_ent ae;
679         struct platform_device *pdev;
680         struct ata_port_operations *ops = &legacy_port_ops;
681         void __iomem *io_addr, *ctrl_addr;
682         int pio_modes = pio_mask;
683         u32 mask = (1 << port);
684         int ret;
685
686         pdev = platform_device_register_simple(DRV_NAME, nr_legacy_host, NULL, 0);
687         if (IS_ERR(pdev))
688                 return PTR_ERR(pdev);
689
690         ret = -EBUSY;
691         if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
692             devm_request_region(&pdev->dev, ctrl, 1, "pata_legacy") == NULL)
693                 goto fail;
694
695         ret = -ENOMEM;
696         io_addr = devm_ioport_map(&pdev->dev, io, 8);
697         ctrl_addr = devm_ioport_map(&pdev->dev, ctrl, 1);
698         if (!io_addr || !ctrl_addr)
699                 goto fail;
700
701         if (ht6560a & mask) {
702                 ops = &ht6560a_port_ops;
703                 pio_modes = 0x07;
704         }
705         if (ht6560b & mask) {
706                 ops = &ht6560b_port_ops;
707                 pio_modes = 0x1F;
708         }
709         if (opti82c611a & mask) {
710                 ops = &opti82c611a_port_ops;
711                 pio_modes = 0x0F;
712         }
713         if (opti82c46x & mask) {
714                 ops = &opti82c46x_port_ops;
715                 pio_modes = 0x0F;
716         }
717
718         /* Probe for automatically detectable controllers */
719
720         if (io == 0x1F0 && ops == &legacy_port_ops) {
721                 unsigned long flags;
722
723                 local_irq_save(flags);
724
725                 /* Probes */
726                 inb(0x1F5);
727                 outb(inb(0x1F2) | 0x80, 0x1F2);
728                 inb(0x1F2);
729                 inb(0x3F6);
730                 inb(0x3F6);
731                 inb(0x1F2);
732                 inb(0x1F2);
733
734                 if ((inb(0x1F2) & 0x80) == 0) {
735                         /* PDC20230c or 20630 ? */
736                         printk(KERN_INFO "PDC20230-C/20630 VLB ATA controller detected.\n");
737                                 pio_modes = 0x07;
738                         ops = &pdc20230_port_ops;
739                         udelay(100);
740                         inb(0x1F5);
741                 } else {
742                         outb(0x55, 0x1F2);
743                         inb(0x1F2);
744                         inb(0x1F2);
745                         if (inb(0x1F2) == 0x00) {
746                                 printk(KERN_INFO "PDC20230-B VLB ATA controller detected.\n");
747                         }
748                 }
749                 local_irq_restore(flags);
750         }
751
752
753         /* Chip does mode setting by command snooping */
754         if (ops == &legacy_port_ops && (autospeed & mask))
755                 ops = &simple_port_ops;
756         memset(&ae, 0, sizeof(struct ata_probe_ent));
757         INIT_LIST_HEAD(&ae.node);
758         ae.dev = &pdev->dev;
759         ae.port_ops = ops;
760         ae.sht = &legacy_sht;
761         ae.n_ports = 1;
762         ae.pio_mask = pio_modes;
763         ae.irq = irq;
764         ae.irq_flags = 0;
765         ae.port_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST;
766         ae.port[0].cmd_addr = io_addr;
767         ae.port[0].altstatus_addr = ctrl_addr;
768         ae.port[0].ctl_addr = ctrl_addr;
769         ata_std_ports(&ae.port[0]);
770         ae.private_data = ld;
771
772         ret = -ENODEV;
773         if (!ata_device_add(&ae))
774                 goto fail;
775
776         legacy_host[nr_legacy_host++] = dev_get_drvdata(&pdev->dev);
777         ld->platform_dev = pdev;
778         return 0;
779
780 fail:
781         platform_device_unregister(pdev);
782         return ret;
783 }
784
785 /**
786  *      legacy_check_special_cases      -       ATA special cases
787  *      @p: PCI device to check
788  *      @master: set this if we find an ATA master
789  *      @master: set this if we find an ATA secondary
790  *
791  *      A small number of vendors implemented early PCI ATA interfaces on bridge logic
792  *      without the ATA interface being PCI visible. Where we have a matching PCI driver
793  *      we must skip the relevant device here. If we don't know about it then the legacy
794  *      driver is the right driver anyway.
795  */
796
797 static void legacy_check_special_cases(struct pci_dev *p, int *primary, int *secondary)
798 {
799         /* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
800         if (p->vendor == 0x1078 && p->device == 0x0000) {
801                 *primary = *secondary = 1;
802                 return;
803         }
804         /* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
805         if (p->vendor == 0x1078 && p->device == 0x0002) {
806                 *primary = *secondary = 1;
807                 return;
808         }
809         /* Intel MPIIX - PIO ATA on non PCI side of bridge */
810         if (p->vendor == 0x8086 && p->device == 0x1234) {
811                 u16 r;
812                 pci_read_config_word(p, 0x6C, &r);
813                 if (r & 0x8000) {       /* ATA port enabled */
814                         if (r & 0x4000)
815                                 *secondary = 1;
816                         else
817                                 *primary = 1;
818                 }
819                 return;
820         }
821 }
822
823
824 /**
825  *      legacy_init             -       attach legacy interfaces
826  *
827  *      Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
828  *      Right now we do not scan the ide0 and ide1 address but should do so
829  *      for non PCI systems or systems with no PCI IDE legacy mode devices.
830  *      If you fix that note there are special cases to consider like VLB
831  *      drivers and CS5510/20.
832  */
833
834 static __init int legacy_init(void)
835 {
836         int i;
837         int ct = 0;
838         int primary = 0;
839         int secondary = 0;
840         int last_port = NR_HOST;
841
842         struct pci_dev *p = NULL;
843
844         for_each_pci_dev(p) {
845                 int r;
846                 /* Check for any overlap of the system ATA mappings. Native mode controllers
847                    stuck on these addresses or some devices in 'raid' mode won't be found by
848                    the storage class test */
849                 for (r = 0; r < 6; r++) {
850                         if (pci_resource_start(p, r) == 0x1f0)
851                                 primary = 1;
852                         if (pci_resource_start(p, r) == 0x170)
853                                 secondary = 1;
854                 }
855                 /* Check for special cases */
856                 legacy_check_special_cases(p, &primary, &secondary);
857
858                 /* If PCI bus is present then don't probe for tertiary legacy ports */
859                 if (probe_all == 0)
860                         last_port = 2;
861         }
862
863         /* If an OPTI 82C46X is present find out where the channels are */
864         if (opti82c46x) {
865                 static const char *optis[4] = {
866                         "3/463MV", "5MV",
867                         "5MVA", "5MVB"
868                 };
869                 u8 chans = 1;
870                 u8 ctrl = (opti_syscfg(0x30) & 0xC0) >> 6;
871
872                 opti82c46x = 3; /* Assume master and slave first */
873                 printk(KERN_INFO DRV_NAME ": Opti 82C46%s chipset support.\n", optis[ctrl]);
874                 if (ctrl == 3)
875                         chans = (opti_syscfg(0x3F) & 0x20) ? 2 : 1;
876                 ctrl = opti_syscfg(0xAC);
877                 /* Check enabled and this port is the 465MV port. On the
878                    MVB we may have two channels */
879                 if (ctrl & 8) {
880                         if (ctrl & 4)
881                                 opti82c46x = 2; /* Slave */
882                         else
883                                 opti82c46x = 1; /* Master */
884                         if (chans == 2)
885                                 opti82c46x = 3; /* Master and Slave */
886                 }       /* Slave only */
887                 else if (chans == 1)
888                         opti82c46x = 1;
889         }
890
891         for (i = 0; i < last_port; i++) {
892                 /* Skip primary if we have seen a PCI one */
893                 if (i == 0 && primary == 1)
894                         continue;
895                 /* Skip secondary if we have seen a PCI one */
896                 if (i == 1 && secondary == 1)
897                         continue;
898                 if (legacy_init_one(i, legacy_port[i],
899                                    legacy_port[i] + 0x0206,
900                                    legacy_irq[i]) == 0)
901                         ct++;
902         }
903         if (ct != 0)
904                 return 0;
905         return -ENODEV;
906 }
907
908 static __exit void legacy_exit(void)
909 {
910         int i;
911
912         for (i = 0; i < nr_legacy_host; i++) {
913                 struct legacy_data *ld = &legacy_data[i];
914
915                 ata_host_detach(legacy_host[i]);
916                 platform_device_unregister(ld->platform_dev);
917                 if (ld->timing)
918                         release_region(ld->timing, 2);
919         }
920 }
921
922 MODULE_AUTHOR("Alan Cox");
923 MODULE_DESCRIPTION("low-level driver for legacy ATA");
924 MODULE_LICENSE("GPL");
925 MODULE_VERSION(DRV_VERSION);
926
927 module_param(probe_all, int, 0);
928 module_param(autospeed, int, 0);
929 module_param(ht6560a, int, 0);
930 module_param(ht6560b, int, 0);
931 module_param(opti82c611a, int, 0);
932 module_param(opti82c46x, int, 0);
933 module_param(pio_mask, int, 0);
934
935 module_init(legacy_init);
936 module_exit(legacy_exit);
937