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