cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pata_legacy.c (33833B)


      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);