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