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