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