xref: /openbmc/linux/drivers/ata/pata_legacy.c (revision babbdf5b)
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 
64 static int all;
65 module_param(all, int, 0444);
66 MODULE_PARM_DESC(all,
67 		 "Set to probe unclaimed pri/sec ISA port ranges even if PCI");
68 
69 static int probe_all;
70 module_param(probe_all, int, 0);
71 MODULE_PARM_DESC(probe_all,
72 		 "Set to probe tertiary+ ISA port ranges even if PCI");
73 
74 static int probe_mask = ~0;
75 module_param(probe_mask, int, 0);
76 MODULE_PARM_DESC(probe_mask, "Probe mask for legacy ISA PATA ports");
77 
78 static int autospeed;
79 module_param(autospeed, int, 0);
80 MODULE_PARM_DESC(autospeed, "Chip present that snoops speed changes");
81 
82 static int pio_mask = ATA_PIO4;
83 module_param(pio_mask, int, 0);
84 MODULE_PARM_DESC(pio_mask, "PIO range for autospeed devices");
85 
86 static int iordy_mask = 0xFFFFFFFF;
87 module_param(iordy_mask, int, 0);
88 MODULE_PARM_DESC(iordy_mask, "Use IORDY if available");
89 
90 static int ht6560a;
91 module_param(ht6560a, int, 0);
92 MODULE_PARM_DESC(ht6560a, "HT 6560A on primary 1, second 2, both 3");
93 
94 static int ht6560b;
95 module_param(ht6560b, int, 0);
96 MODULE_PARM_DESC(ht6560b, "HT 6560B on primary 1, secondary 2, both 3");
97 
98 static int opti82c611a;
99 module_param(opti82c611a, int, 0);
100 MODULE_PARM_DESC(opti82c611a,
101 		 "Opti 82c611A on primary 1, secondary 2, both 3");
102 
103 static int opti82c46x;
104 module_param(opti82c46x, int, 0);
105 MODULE_PARM_DESC(opti82c46x,
106 		 "Opti 82c465MV on primary 1, secondary 2, both 3");
107 
108 #ifdef CONFIG_PATA_QDI_MODULE
109 static int qdi = 1;
110 #else
111 static int qdi;
112 #endif
113 module_param(qdi, int, 0);
114 MODULE_PARM_DESC(qdi, "Set to probe QDI controllers");
115 
116 #ifdef CONFIG_PATA_WINBOND_VLB_MODULE
117 static int winbond = 1;
118 #else
119 static int winbond;
120 #endif
121 module_param(winbond, int, 0);
122 MODULE_PARM_DESC(winbond,
123 		 "Set to probe Winbond controllers, "
124 		 "give I/O port if non standard");
125 
126 
127 enum 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 
143 struct 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 
152 struct 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 
161 struct 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 
171 static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
172 
173 static struct legacy_probe probe_list[NR_HOST];
174 static struct legacy_data legacy_data[NR_HOST];
175 static struct ata_host *legacy_host[NR_HOST];
176 static 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 
194 static 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 
239 static 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 
253 static struct scsi_host_template legacy_sht = {
254 	ATA_PIO_SHT(DRV_NAME),
255 };
256 
257 static 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 
270 static struct ata_port_operations simple_port_ops = {
271 	.inherits	= &legacy_base_port_ops,
272 	.sff_data_xfer	= ata_sff_data_xfer32,
273 };
274 
275 static 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 
290 static 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 
329 static 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;
356 			if (rw == READ) {
357 				pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
358 				memcpy(buf + buflen - slop, &pad, slop);
359 			} else {
360 				memcpy(&pad, buf + buflen - slop, slop);
361 				iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
362 			}
363 			buflen += 4 - slop;
364 		}
365 		local_irq_restore(flags);
366 	} else
367 		buflen = ata_sff_data_xfer32(qc, buf, buflen, rw);
368 
369 	return buflen;
370 }
371 
372 static struct ata_port_operations pdc20230_port_ops = {
373 	.inherits	= &legacy_base_port_ops,
374 	.set_piomode	= pdc20230_set_piomode,
375 	.sff_data_xfer	= pdc_data_xfer_vlb,
376 };
377 
378 /*
379  *	Holtek 6560A support
380  *
381  *	This controller supports PIO0 to PIO2 (no IORDY even though higher
382  *	timings can be loaded).
383  */
384 
385 static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
386 {
387 	u8 active, recover;
388 	struct ata_timing t;
389 
390 	/* Get the timing data in cycles. For now play safe at 50Mhz */
391 	ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
392 
393 	active = clamp_val(t.active, 2, 15);
394 	recover = clamp_val(t.recover, 4, 15);
395 
396 	inb(0x3E6);
397 	inb(0x3E6);
398 	inb(0x3E6);
399 	inb(0x3E6);
400 
401 	iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
402 	ioread8(ap->ioaddr.status_addr);
403 }
404 
405 static struct ata_port_operations ht6560a_port_ops = {
406 	.inherits	= &legacy_base_port_ops,
407 	.set_piomode	= ht6560a_set_piomode,
408 };
409 
410 /*
411  *	Holtek 6560B support
412  *
413  *	This controller supports PIO0 to PIO4. We honour the BIOS/jumper FIFO
414  *	setting unless we see an ATAPI device in which case we force it off.
415  *
416  *	FIXME: need to implement 2nd channel support.
417  */
418 
419 static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
420 {
421 	u8 active, recover;
422 	struct ata_timing t;
423 
424 	/* Get the timing data in cycles. For now play safe at 50Mhz */
425 	ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
426 
427 	active = clamp_val(t.active, 2, 15);
428 	recover = clamp_val(t.recover, 2, 16) & 0x0F;
429 
430 	inb(0x3E6);
431 	inb(0x3E6);
432 	inb(0x3E6);
433 	inb(0x3E6);
434 
435 	iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
436 
437 	if (adev->class != ATA_DEV_ATA) {
438 		u8 rconf = inb(0x3E6);
439 		if (rconf & 0x24) {
440 			rconf &= ~0x24;
441 			outb(rconf, 0x3E6);
442 		}
443 	}
444 	ioread8(ap->ioaddr.status_addr);
445 }
446 
447 static struct ata_port_operations ht6560b_port_ops = {
448 	.inherits	= &legacy_base_port_ops,
449 	.set_piomode	= ht6560b_set_piomode,
450 };
451 
452 /*
453  *	Opti core chipset helpers
454  */
455 
456 /**
457  *	opti_syscfg	-	read OPTI chipset configuration
458  *	@reg: Configuration register to read
459  *
460  *	Returns the value of an OPTI system board configuration register.
461  */
462 
463 static u8 opti_syscfg(u8 reg)
464 {
465 	unsigned long flags;
466 	u8 r;
467 
468 	/* Uniprocessor chipset and must force cycles adjancent */
469 	local_irq_save(flags);
470 	outb(reg, 0x22);
471 	r = inb(0x24);
472 	local_irq_restore(flags);
473 	return r;
474 }
475 
476 /*
477  *	Opti 82C611A
478  *
479  *	This controller supports PIO0 to PIO3.
480  */
481 
482 static void opti82c611a_set_piomode(struct ata_port *ap,
483 						struct ata_device *adev)
484 {
485 	u8 active, recover, setup;
486 	struct ata_timing t;
487 	struct ata_device *pair = ata_dev_pair(adev);
488 	int clock;
489 	int khz[4] = { 50000, 40000, 33000, 25000 };
490 	u8 rc;
491 
492 	/* Enter configuration mode */
493 	ioread16(ap->ioaddr.error_addr);
494 	ioread16(ap->ioaddr.error_addr);
495 	iowrite8(3, ap->ioaddr.nsect_addr);
496 
497 	/* Read VLB clock strapping */
498 	clock = 1000000000 / khz[ioread8(ap->ioaddr.lbah_addr) & 0x03];
499 
500 	/* Get the timing data in cycles */
501 	ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
502 
503 	/* Setup timing is shared */
504 	if (pair) {
505 		struct ata_timing tp;
506 		ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
507 
508 		ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
509 	}
510 
511 	active = clamp_val(t.active, 2, 17) - 2;
512 	recover = clamp_val(t.recover, 1, 16) - 1;
513 	setup = clamp_val(t.setup, 1, 4) - 1;
514 
515 	/* Select the right timing bank for write timing */
516 	rc = ioread8(ap->ioaddr.lbal_addr);
517 	rc &= 0x7F;
518 	rc |= (adev->devno << 7);
519 	iowrite8(rc, ap->ioaddr.lbal_addr);
520 
521 	/* Write the timings */
522 	iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
523 
524 	/* Select the right bank for read timings, also
525 	   load the shared timings for address */
526 	rc = ioread8(ap->ioaddr.device_addr);
527 	rc &= 0xC0;
528 	rc |= adev->devno;	/* Index select */
529 	rc |= (setup << 4) | 0x04;
530 	iowrite8(rc, ap->ioaddr.device_addr);
531 
532 	/* Load the read timings */
533 	iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
534 
535 	/* Ensure the timing register mode is right */
536 	rc = ioread8(ap->ioaddr.lbal_addr);
537 	rc &= 0x73;
538 	rc |= 0x84;
539 	iowrite8(rc, ap->ioaddr.lbal_addr);
540 
541 	/* Exit command mode */
542 	iowrite8(0x83,  ap->ioaddr.nsect_addr);
543 }
544 
545 
546 static struct ata_port_operations opti82c611a_port_ops = {
547 	.inherits	= &legacy_base_port_ops,
548 	.set_piomode	= opti82c611a_set_piomode,
549 };
550 
551 /*
552  *	Opti 82C465MV
553  *
554  *	This controller supports PIO0 to PIO3. Unlike the 611A the MVB
555  *	version is dual channel but doesn't have a lot of unique registers.
556  */
557 
558 static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
559 {
560 	u8 active, recover, setup;
561 	struct ata_timing t;
562 	struct ata_device *pair = ata_dev_pair(adev);
563 	int clock;
564 	int khz[4] = { 50000, 40000, 33000, 25000 };
565 	u8 rc;
566 	u8 sysclk;
567 
568 	/* Get the clock */
569 	sysclk = (opti_syscfg(0xAC) & 0xC0) >> 6;	/* BIOS set */
570 
571 	/* Enter configuration mode */
572 	ioread16(ap->ioaddr.error_addr);
573 	ioread16(ap->ioaddr.error_addr);
574 	iowrite8(3, ap->ioaddr.nsect_addr);
575 
576 	/* Read VLB clock strapping */
577 	clock = 1000000000 / khz[sysclk];
578 
579 	/* Get the timing data in cycles */
580 	ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
581 
582 	/* Setup timing is shared */
583 	if (pair) {
584 		struct ata_timing tp;
585 		ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
586 
587 		ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
588 	}
589 
590 	active = clamp_val(t.active, 2, 17) - 2;
591 	recover = clamp_val(t.recover, 1, 16) - 1;
592 	setup = clamp_val(t.setup, 1, 4) - 1;
593 
594 	/* Select the right timing bank for write timing */
595 	rc = ioread8(ap->ioaddr.lbal_addr);
596 	rc &= 0x7F;
597 	rc |= (adev->devno << 7);
598 	iowrite8(rc, ap->ioaddr.lbal_addr);
599 
600 	/* Write the timings */
601 	iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
602 
603 	/* Select the right bank for read timings, also
604 	   load the shared timings for address */
605 	rc = ioread8(ap->ioaddr.device_addr);
606 	rc &= 0xC0;
607 	rc |= adev->devno;	/* Index select */
608 	rc |= (setup << 4) | 0x04;
609 	iowrite8(rc, ap->ioaddr.device_addr);
610 
611 	/* Load the read timings */
612 	iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
613 
614 	/* Ensure the timing register mode is right */
615 	rc = ioread8(ap->ioaddr.lbal_addr);
616 	rc &= 0x73;
617 	rc |= 0x84;
618 	iowrite8(rc, ap->ioaddr.lbal_addr);
619 
620 	/* Exit command mode */
621 	iowrite8(0x83,  ap->ioaddr.nsect_addr);
622 
623 	/* We need to know this for quad device on the MVB */
624 	ap->host->private_data = ap;
625 }
626 
627 /**
628  *	opti82c46x_qc_issue		-	command issue
629  *	@qc: command pending
630  *
631  *	Called when the libata layer is about to issue a command. We wrap
632  *	this interface so that we can load the correct ATA timings. The
633  *	MVB has a single set of timing registers and these are shared
634  *	across channels. As there are two registers we really ought to
635  *	track the last two used values as a sort of register window. For
636  *	now we just reload on a channel switch. On the single channel
637  *	setup this condition never fires so we do nothing extra.
638  *
639  *	FIXME: dual channel needs ->serialize support
640  */
641 
642 static unsigned int opti82c46x_qc_issue(struct ata_queued_cmd *qc)
643 {
644 	struct ata_port *ap = qc->ap;
645 	struct ata_device *adev = qc->dev;
646 
647 	/* If timings are set and for the wrong channel (2nd test is
648 	   due to a libata shortcoming and will eventually go I hope) */
649 	if (ap->host->private_data != ap->host
650 	    && ap->host->private_data != NULL)
651 		opti82c46x_set_piomode(ap, adev);
652 
653 	return ata_sff_qc_issue(qc);
654 }
655 
656 static struct ata_port_operations opti82c46x_port_ops = {
657 	.inherits	= &legacy_base_port_ops,
658 	.set_piomode	= opti82c46x_set_piomode,
659 	.qc_issue	= opti82c46x_qc_issue,
660 };
661 
662 /**
663  *	qdi65x0_set_piomode		-	PIO setup for QDI65x0
664  *	@ap: Port
665  *	@adev: Device
666  *
667  *	In single channel mode the 6580 has one clock per device and we can
668  *	avoid the requirement to clock switch. We also have to load the timing
669  *	into the right clock according to whether we are master or slave.
670  *
671  *	In dual channel mode the 6580 has one clock per channel and we have
672  *	to software clockswitch in qc_issue.
673  */
674 
675 static void qdi65x0_set_piomode(struct ata_port *ap, struct ata_device *adev)
676 {
677 	struct ata_timing t;
678 	struct legacy_data *ld_qdi = ap->host->private_data;
679 	int active, recovery;
680 	u8 timing;
681 
682 	/* Get the timing data in cycles */
683 	ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
684 
685 	if (ld_qdi->fast) {
686 		active = 8 - clamp_val(t.active, 1, 8);
687 		recovery = 18 - clamp_val(t.recover, 3, 18);
688 	} else {
689 		active = 9 - clamp_val(t.active, 2, 9);
690 		recovery = 15 - clamp_val(t.recover, 0, 15);
691 	}
692 	timing = (recovery << 4) | active | 0x08;
693 	ld_qdi->clock[adev->devno] = timing;
694 
695 	if (ld_qdi->type == QDI6580)
696 		outb(timing, ld_qdi->timing + 2 * adev->devno);
697 	else
698 		outb(timing, ld_qdi->timing + 2 * ap->port_no);
699 
700 	/* Clear the FIFO */
701 	if (ld_qdi->type != QDI6500 && adev->class != ATA_DEV_ATA)
702 		outb(0x5F, (ld_qdi->timing & 0xFFF0) + 3);
703 }
704 
705 /**
706  *	qdi_qc_issue		-	command issue
707  *	@qc: command pending
708  *
709  *	Called when the libata layer is about to issue a command. We wrap
710  *	this interface so that we can load the correct ATA timings.
711  */
712 
713 static unsigned int qdi_qc_issue(struct ata_queued_cmd *qc)
714 {
715 	struct ata_port *ap = qc->ap;
716 	struct ata_device *adev = qc->dev;
717 	struct legacy_data *ld_qdi = ap->host->private_data;
718 
719 	if (ld_qdi->clock[adev->devno] != ld_qdi->last) {
720 		if (adev->pio_mode) {
721 			ld_qdi->last = ld_qdi->clock[adev->devno];
722 			outb(ld_qdi->clock[adev->devno], ld_qdi->timing +
723 							2 * ap->port_no);
724 		}
725 	}
726 	return ata_sff_qc_issue(qc);
727 }
728 
729 static unsigned int vlb32_data_xfer(struct ata_queued_cmd *qc,
730 				    unsigned char *buf,
731 				    unsigned int buflen, int rw)
732 {
733 	struct ata_device *adev = qc->dev;
734 	struct ata_port *ap = adev->link->ap;
735 	int slop = buflen & 3;
736 
737 	if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)
738 					&& (ap->pflags & ATA_PFLAG_PIO32)) {
739 		if (rw == WRITE)
740 			iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
741 		else
742 			ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
743 
744 		if (unlikely(slop)) {
745 			__le32 pad;
746 			if (rw == WRITE) {
747 				memcpy(&pad, buf + buflen - slop, slop);
748 				iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
749 			} else {
750 				pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
751 				memcpy(buf + buflen - slop, &pad, slop);
752 			}
753 		}
754 		return (buflen + 3) & ~3;
755 	} else
756 		return ata_sff_data_xfer(qc, buf, buflen, rw);
757 }
758 
759 static int qdi_port(struct platform_device *dev,
760 			struct legacy_probe *lp, struct legacy_data *ld)
761 {
762 	if (devm_request_region(&dev->dev, lp->private, 4, "qdi") == NULL)
763 		return -EBUSY;
764 	ld->timing = lp->private;
765 	return 0;
766 }
767 
768 static struct ata_port_operations qdi6500_port_ops = {
769 	.inherits	= &legacy_base_port_ops,
770 	.set_piomode	= qdi65x0_set_piomode,
771 	.qc_issue	= qdi_qc_issue,
772 	.sff_data_xfer	= vlb32_data_xfer,
773 };
774 
775 static struct ata_port_operations qdi6580_port_ops = {
776 	.inherits	= &legacy_base_port_ops,
777 	.set_piomode	= qdi65x0_set_piomode,
778 	.sff_data_xfer	= vlb32_data_xfer,
779 };
780 
781 static struct ata_port_operations qdi6580dp_port_ops = {
782 	.inherits	= &legacy_base_port_ops,
783 	.set_piomode	= qdi65x0_set_piomode,
784 	.qc_issue	= qdi_qc_issue,
785 	.sff_data_xfer	= vlb32_data_xfer,
786 };
787 
788 static DEFINE_SPINLOCK(winbond_lock);
789 
790 static void winbond_writecfg(unsigned long port, u8 reg, u8 val)
791 {
792 	unsigned long flags;
793 	spin_lock_irqsave(&winbond_lock, flags);
794 	outb(reg, port + 0x01);
795 	outb(val, port + 0x02);
796 	spin_unlock_irqrestore(&winbond_lock, flags);
797 }
798 
799 static u8 winbond_readcfg(unsigned long port, u8 reg)
800 {
801 	u8 val;
802 
803 	unsigned long flags;
804 	spin_lock_irqsave(&winbond_lock, flags);
805 	outb(reg, port + 0x01);
806 	val = inb(port + 0x02);
807 	spin_unlock_irqrestore(&winbond_lock, flags);
808 
809 	return val;
810 }
811 
812 static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
813 {
814 	struct ata_timing t;
815 	struct legacy_data *ld_winbond = ap->host->private_data;
816 	int active, recovery;
817 	u8 reg;
818 	int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
819 
820 	reg = winbond_readcfg(ld_winbond->timing, 0x81);
821 
822 	/* Get the timing data in cycles */
823 	if (reg & 0x40)		/* Fast VLB bus, assume 50MHz */
824 		ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
825 	else
826 		ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
827 
828 	active = (clamp_val(t.active, 3, 17) - 1) & 0x0F;
829 	recovery = (clamp_val(t.recover, 1, 15) + 1) & 0x0F;
830 	timing = (active << 4) | recovery;
831 	winbond_writecfg(ld_winbond->timing, timing, reg);
832 
833 	/* Load the setup timing */
834 
835 	reg = 0x35;
836 	if (adev->class != ATA_DEV_ATA)
837 		reg |= 0x08;	/* FIFO off */
838 	if (!ata_pio_need_iordy(adev))
839 		reg |= 0x02;	/* IORDY off */
840 	reg |= (clamp_val(t.setup, 0, 3) << 6);
841 	winbond_writecfg(ld_winbond->timing, timing + 1, reg);
842 }
843 
844 static int winbond_port(struct platform_device *dev,
845 			struct legacy_probe *lp, struct legacy_data *ld)
846 {
847 	if (devm_request_region(&dev->dev, lp->private, 4, "winbond") == NULL)
848 		return -EBUSY;
849 	ld->timing = lp->private;
850 	return 0;
851 }
852 
853 static struct ata_port_operations winbond_port_ops = {
854 	.inherits	= &legacy_base_port_ops,
855 	.set_piomode	= winbond_set_piomode,
856 	.sff_data_xfer	= vlb32_data_xfer,
857 };
858 
859 static struct legacy_controller controllers[] = {
860 	{"BIOS",	&legacy_port_ops, 	ATA_PIO4,
861 			ATA_FLAG_NO_IORDY,	0,			NULL },
862 	{"Snooping", 	&simple_port_ops, 	ATA_PIO4,
863 			0,			0,			NULL },
864 	{"PDC20230",	&pdc20230_port_ops,	ATA_PIO2,
865 			ATA_FLAG_NO_IORDY,
866 			ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE,	NULL },
867 	{"HT6560A",	&ht6560a_port_ops,	ATA_PIO2,
868 			ATA_FLAG_NO_IORDY,	0,			NULL },
869 	{"HT6560B",	&ht6560b_port_ops,	ATA_PIO4,
870 			ATA_FLAG_NO_IORDY,	0,			NULL },
871 	{"OPTI82C611A",	&opti82c611a_port_ops,	ATA_PIO3,
872 			0,			0,			NULL },
873 	{"OPTI82C46X",	&opti82c46x_port_ops,	ATA_PIO3,
874 			0,			0,			NULL },
875 	{"QDI6500",	&qdi6500_port_ops,	ATA_PIO2,
876 			ATA_FLAG_NO_IORDY,
877 			ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE,    qdi_port },
878 	{"QDI6580",	&qdi6580_port_ops,	ATA_PIO4,
879 			0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
880 	{"QDI6580DP",	&qdi6580dp_port_ops,	ATA_PIO4,
881 			0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
882 	{"W83759A",	&winbond_port_ops,	ATA_PIO4,
883 			0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE,
884 								winbond_port }
885 };
886 
887 /**
888  *	probe_chip_type		-	Discover controller
889  *	@probe: Probe entry to check
890  *
891  *	Probe an ATA port and identify the type of controller. We don't
892  *	check if the controller appears to be driveless at this point.
893  */
894 
895 static __init int probe_chip_type(struct legacy_probe *probe)
896 {
897 	int mask = 1 << probe->slot;
898 
899 	if (winbond && (probe->port == 0x1F0 || probe->port == 0x170)) {
900 		u8 reg = winbond_readcfg(winbond, 0x81);
901 		reg |= 0x80;	/* jumpered mode off */
902 		winbond_writecfg(winbond, 0x81, reg);
903 		reg = winbond_readcfg(winbond, 0x83);
904 		reg |= 0xF0;	/* local control */
905 		winbond_writecfg(winbond, 0x83, reg);
906 		reg = winbond_readcfg(winbond, 0x85);
907 		reg |= 0xF0;	/* programmable timing */
908 		winbond_writecfg(winbond, 0x85, reg);
909 
910 		reg = winbond_readcfg(winbond, 0x81);
911 
912 		if (reg & mask)
913 			return W83759A;
914 	}
915 	if (probe->port == 0x1F0) {
916 		unsigned long flags;
917 		local_irq_save(flags);
918 		/* Probes */
919 		outb(inb(0x1F2) | 0x80, 0x1F2);
920 		inb(0x1F5);
921 		inb(0x1F2);
922 		inb(0x3F6);
923 		inb(0x3F6);
924 		inb(0x1F2);
925 		inb(0x1F2);
926 
927 		if ((inb(0x1F2) & 0x80) == 0) {
928 			/* PDC20230c or 20630 ? */
929 			printk(KERN_INFO  "PDC20230-C/20630 VLB ATA controller"
930 							" detected.\n");
931 			udelay(100);
932 			inb(0x1F5);
933 			local_irq_restore(flags);
934 			return PDC20230;
935 		} else {
936 			outb(0x55, 0x1F2);
937 			inb(0x1F2);
938 			inb(0x1F2);
939 			if (inb(0x1F2) == 0x00)
940 				printk(KERN_INFO "PDC20230-B VLB ATA "
941 						     "controller detected.\n");
942 			local_irq_restore(flags);
943 			return BIOS;
944 		}
945 	}
946 
947 	if (ht6560a & mask)
948 		return HT6560A;
949 	if (ht6560b & mask)
950 		return HT6560B;
951 	if (opti82c611a & mask)
952 		return OPTI611A;
953 	if (opti82c46x & mask)
954 		return OPTI46X;
955 	if (autospeed & mask)
956 		return SNOOP;
957 	return BIOS;
958 }
959 
960 
961 /**
962  *	legacy_init_one		-	attach a legacy interface
963  *	@probe: probe record
964  *
965  *	Register an ISA bus IDE interface. Such interfaces are PIO and we
966  *	assume do not support IRQ sharing.
967  */
968 
969 static __init int legacy_init_one(struct legacy_probe *probe)
970 {
971 	struct legacy_controller *controller = &controllers[probe->type];
972 	int pio_modes = controller->pio_mask;
973 	unsigned long io = probe->port;
974 	u32 mask = (1 << probe->slot);
975 	struct ata_port_operations *ops = controller->ops;
976 	struct legacy_data *ld = &legacy_data[probe->slot];
977 	struct ata_host *host = NULL;
978 	struct ata_port *ap;
979 	struct platform_device *pdev;
980 	struct ata_device *dev;
981 	void __iomem *io_addr, *ctrl_addr;
982 	u32 iordy = (iordy_mask & mask) ? 0: ATA_FLAG_NO_IORDY;
983 	int ret;
984 
985 	iordy |= controller->flags;
986 
987 	pdev = platform_device_register_simple(DRV_NAME, probe->slot, NULL, 0);
988 	if (IS_ERR(pdev))
989 		return PTR_ERR(pdev);
990 
991 	ret = -EBUSY;
992 	if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
993 	    devm_request_region(&pdev->dev, io + 0x0206, 1,
994 							"pata_legacy") == NULL)
995 		goto fail;
996 
997 	ret = -ENOMEM;
998 	io_addr = devm_ioport_map(&pdev->dev, io, 8);
999 	ctrl_addr = devm_ioport_map(&pdev->dev, io + 0x0206, 1);
1000 	if (!io_addr || !ctrl_addr)
1001 		goto fail;
1002 	ld->type = probe->type;
1003 	if (controller->setup)
1004 		if (controller->setup(pdev, probe, ld) < 0)
1005 			goto fail;
1006 	host = ata_host_alloc(&pdev->dev, 1);
1007 	if (!host)
1008 		goto fail;
1009 	ap = host->ports[0];
1010 
1011 	ap->ops = ops;
1012 	ap->pio_mask = pio_modes;
1013 	ap->flags |= ATA_FLAG_SLAVE_POSS | iordy;
1014 	ap->pflags |= controller->pflags;
1015 	ap->ioaddr.cmd_addr = io_addr;
1016 	ap->ioaddr.altstatus_addr = ctrl_addr;
1017 	ap->ioaddr.ctl_addr = ctrl_addr;
1018 	ata_sff_std_ports(&ap->ioaddr);
1019 	ap->host->private_data = ld;
1020 
1021 	ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", io, io + 0x0206);
1022 
1023 	ret = ata_host_activate(host, probe->irq, ata_sff_interrupt, 0,
1024 				&legacy_sht);
1025 	if (ret)
1026 		goto fail;
1027 	async_synchronize_full();
1028 	ld->platform_dev = pdev;
1029 
1030 	/* Nothing found means we drop the port as its probably not there */
1031 
1032 	ret = -ENODEV;
1033 	ata_for_each_dev(dev, &ap->link, ALL) {
1034 		if (!ata_dev_absent(dev)) {
1035 			legacy_host[probe->slot] = host;
1036 			ld->platform_dev = pdev;
1037 			return 0;
1038 		}
1039 	}
1040 	ata_host_detach(host);
1041 fail:
1042 	platform_device_unregister(pdev);
1043 	return ret;
1044 }
1045 
1046 /**
1047  *	legacy_check_special_cases	-	ATA special cases
1048  *	@p: PCI device to check
1049  *	@primary: set this if we find an ATA master
1050  *	@secondary: set this if we find an ATA secondary
1051  *
1052  *	A small number of vendors implemented early PCI ATA interfaces
1053  *	on bridge logic without the ATA interface being PCI visible.
1054  *	Where we have a matching PCI driver we must skip the relevant
1055  *	device here. If we don't know about it then the legacy driver
1056  *	is the right driver anyway.
1057  */
1058 
1059 static void __init legacy_check_special_cases(struct pci_dev *p, int *primary,
1060 								int *secondary)
1061 {
1062 	/* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
1063 	if (p->vendor == 0x1078 && p->device == 0x0000) {
1064 		*primary = *secondary = 1;
1065 		return;
1066 	}
1067 	/* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
1068 	if (p->vendor == 0x1078 && p->device == 0x0002) {
1069 		*primary = *secondary = 1;
1070 		return;
1071 	}
1072 	/* Intel MPIIX - PIO ATA on non PCI side of bridge */
1073 	if (p->vendor == 0x8086 && p->device == 0x1234) {
1074 		u16 r;
1075 		pci_read_config_word(p, 0x6C, &r);
1076 		if (r & 0x8000) {
1077 			/* ATA port enabled */
1078 			if (r & 0x4000)
1079 				*secondary = 1;
1080 			else
1081 				*primary = 1;
1082 		}
1083 		return;
1084 	}
1085 }
1086 
1087 static __init void probe_opti_vlb(void)
1088 {
1089 	/* If an OPTI 82C46X is present find out where the channels are */
1090 	static const char *optis[4] = {
1091 		"3/463MV", "5MV",
1092 		"5MVA", "5MVB"
1093 	};
1094 	u8 chans = 1;
1095 	u8 ctrl = (opti_syscfg(0x30) & 0xC0) >> 6;
1096 
1097 	opti82c46x = 3;	/* Assume master and slave first */
1098 	printk(KERN_INFO DRV_NAME ": Opti 82C46%s chipset support.\n",
1099 								optis[ctrl]);
1100 	if (ctrl == 3)
1101 		chans = (opti_syscfg(0x3F) & 0x20) ? 2 : 1;
1102 	ctrl = opti_syscfg(0xAC);
1103 	/* Check enabled and this port is the 465MV port. On the
1104 	   MVB we may have two channels */
1105 	if (ctrl & 8) {
1106 		if (chans == 2) {
1107 			legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1108 			legacy_probe_add(0x170, 15, OPTI46X, 0);
1109 		}
1110 		if (ctrl & 4)
1111 			legacy_probe_add(0x170, 15, OPTI46X, 0);
1112 		else
1113 			legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1114 	} else
1115 		legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1116 }
1117 
1118 static __init void qdi65_identify_port(u8 r, u8 res, unsigned long port)
1119 {
1120 	static const unsigned long ide_port[2] = { 0x170, 0x1F0 };
1121 	/* Check card type */
1122 	if ((r & 0xF0) == 0xC0) {
1123 		/* QD6500: single channel */
1124 		if (r & 8)
1125 			/* Disabled ? */
1126 			return;
1127 		legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1128 								QDI6500, port);
1129 	}
1130 	if (((r & 0xF0) == 0xA0) || (r & 0xF0) == 0x50) {
1131 		/* QD6580: dual channel */
1132 		if (!request_region(port + 2 , 2, "pata_qdi")) {
1133 			release_region(port, 2);
1134 			return;
1135 		}
1136 		res = inb(port + 3);
1137 		/* Single channel mode ? */
1138 		if (res & 1)
1139 			legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1140 								QDI6580, port);
1141 		else { /* Dual channel mode */
1142 			legacy_probe_add(0x1F0, 14, QDI6580DP, port);
1143 			/* port + 0x02, r & 0x04 */
1144 			legacy_probe_add(0x170, 15, QDI6580DP, port + 2);
1145 		}
1146 		release_region(port + 2, 2);
1147 	}
1148 }
1149 
1150 static __init void probe_qdi_vlb(void)
1151 {
1152 	unsigned long flags;
1153 	static const unsigned long qd_port[2] = { 0x30, 0xB0 };
1154 	int i;
1155 
1156 	/*
1157 	 *	Check each possible QD65xx base address
1158 	 */
1159 
1160 	for (i = 0; i < 2; i++) {
1161 		unsigned long port = qd_port[i];
1162 		u8 r, res;
1163 
1164 
1165 		if (request_region(port, 2, "pata_qdi")) {
1166 			/* Check for a card */
1167 			local_irq_save(flags);
1168 			/* I have no h/w that needs this delay but it
1169 			   is present in the historic code */
1170 			r = inb(port);
1171 			udelay(1);
1172 			outb(0x19, port);
1173 			udelay(1);
1174 			res = inb(port);
1175 			udelay(1);
1176 			outb(r, port);
1177 			udelay(1);
1178 			local_irq_restore(flags);
1179 
1180 			/* Fail */
1181 			if (res == 0x19) {
1182 				release_region(port, 2);
1183 				continue;
1184 			}
1185 			/* Passes the presence test */
1186 			r = inb(port + 1);
1187 			udelay(1);
1188 			/* Check port agrees with port set */
1189 			if ((r & 2) >> 1 == i)
1190 				qdi65_identify_port(r, res, port);
1191 			release_region(port, 2);
1192 		}
1193 	}
1194 }
1195 
1196 /**
1197  *	legacy_init		-	attach legacy interfaces
1198  *
1199  *	Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
1200  *	Right now we do not scan the ide0 and ide1 address but should do so
1201  *	for non PCI systems or systems with no PCI IDE legacy mode devices.
1202  *	If you fix that note there are special cases to consider like VLB
1203  *	drivers and CS5510/20.
1204  */
1205 
1206 static __init int legacy_init(void)
1207 {
1208 	int i;
1209 	int ct = 0;
1210 	int primary = 0;
1211 	int secondary = 0;
1212 	int pci_present = 0;
1213 	struct legacy_probe *pl = &probe_list[0];
1214 	int slot = 0;
1215 
1216 	struct pci_dev *p = NULL;
1217 
1218 	for_each_pci_dev(p) {
1219 		int r;
1220 		/* Check for any overlap of the system ATA mappings. Native
1221 		   mode controllers stuck on these addresses or some devices
1222 		   in 'raid' mode won't be found by the storage class test */
1223 		for (r = 0; r < 6; r++) {
1224 			if (pci_resource_start(p, r) == 0x1f0)
1225 				primary = 1;
1226 			if (pci_resource_start(p, r) == 0x170)
1227 				secondary = 1;
1228 		}
1229 		/* Check for special cases */
1230 		legacy_check_special_cases(p, &primary, &secondary);
1231 
1232 		/* If PCI bus is present then don't probe for tertiary
1233 		   legacy ports */
1234 		pci_present = 1;
1235 	}
1236 
1237 	if (winbond == 1)
1238 		winbond = 0x130;	/* Default port, alt is 1B0 */
1239 
1240 	if (primary == 0 || all)
1241 		legacy_probe_add(0x1F0, 14, UNKNOWN, 0);
1242 	if (secondary == 0 || all)
1243 		legacy_probe_add(0x170, 15, UNKNOWN, 0);
1244 
1245 	if (probe_all || !pci_present) {
1246 		/* ISA/VLB extra ports */
1247 		legacy_probe_add(0x1E8, 11, UNKNOWN, 0);
1248 		legacy_probe_add(0x168, 10, UNKNOWN, 0);
1249 		legacy_probe_add(0x1E0, 8, UNKNOWN, 0);
1250 		legacy_probe_add(0x160, 12, UNKNOWN, 0);
1251 	}
1252 
1253 	if (opti82c46x)
1254 		probe_opti_vlb();
1255 	if (qdi)
1256 		probe_qdi_vlb();
1257 
1258 	for (i = 0; i < NR_HOST; i++, pl++) {
1259 		if (pl->port == 0)
1260 			continue;
1261 		if (pl->type == UNKNOWN)
1262 			pl->type = probe_chip_type(pl);
1263 		pl->slot = slot++;
1264 		if (legacy_init_one(pl) == 0)
1265 			ct++;
1266 	}
1267 	if (ct != 0)
1268 		return 0;
1269 	return -ENODEV;
1270 }
1271 
1272 static __exit void legacy_exit(void)
1273 {
1274 	int i;
1275 
1276 	for (i = 0; i < nr_legacy_host; i++) {
1277 		struct legacy_data *ld = &legacy_data[i];
1278 		ata_host_detach(legacy_host[i]);
1279 		platform_device_unregister(ld->platform_dev);
1280 	}
1281 }
1282 
1283 MODULE_AUTHOR("Alan Cox");
1284 MODULE_DESCRIPTION("low-level driver for legacy ATA");
1285 MODULE_LICENSE("GPL");
1286 MODULE_VERSION(DRV_VERSION);
1287 MODULE_ALIAS("pata_qdi");
1288 MODULE_ALIAS("pata_winbond");
1289 
1290 module_init(legacy_init);
1291 module_exit(legacy_exit);
1292