Revert "[PATCH] paravirt: Add startup infrastructure for paravirtualization"
[pv_ops_mirror.git] / drivers / ide / pci / pdc202xx_old.c
blob7146fe3f6ba7bdffd0bc9bafaea0afd2e8b8ab64
1 /*
2 * linux/drivers/ide/pci/pdc202xx_old.c Version 0.36 Sept 11, 2002
4 * Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org>
5 * Copyright (C) 2006-2007 MontaVista Software, Inc.
7 * Promise Ultra33 cards with BIOS v1.20 through 1.28 will need this
8 * compiled into the kernel if you have more than one card installed.
9 * Note that BIOS v1.29 is reported to fix the problem. Since this is
10 * safe chipset tuning, including this support is harmless
12 * Promise Ultra66 cards with BIOS v1.11 this
13 * compiled into the kernel if you have more than one card installed.
15 * Promise Ultra100 cards.
17 * The latest chipset code will support the following ::
18 * Three Ultra33 controllers and 12 drives.
19 * 8 are UDMA supported and 4 are limited to DMA mode 2 multi-word.
20 * The 8/4 ratio is a BIOS code limit by promise.
22 * UNLESS you enable "CONFIG_PDC202XX_BURST"
27 * Portions Copyright (C) 1999 Promise Technology, Inc.
28 * Author: Frank Tiernan (frankt@promise.com)
29 * Released under terms of General Public License
32 #include <linux/types.h>
33 #include <linux/module.h>
34 #include <linux/kernel.h>
35 #include <linux/delay.h>
36 #include <linux/timer.h>
37 #include <linux/mm.h>
38 #include <linux/ioport.h>
39 #include <linux/blkdev.h>
40 #include <linux/hdreg.h>
41 #include <linux/interrupt.h>
42 #include <linux/pci.h>
43 #include <linux/init.h>
44 #include <linux/ide.h>
46 #include <asm/io.h>
47 #include <asm/irq.h>
49 #define PDC202XX_DEBUG_DRIVE_INFO 0
51 static const char *pdc_quirk_drives[] = {
52 "QUANTUM FIREBALLlct08 08",
53 "QUANTUM FIREBALLP KA6.4",
54 "QUANTUM FIREBALLP KA9.1",
55 "QUANTUM FIREBALLP LM20.4",
56 "QUANTUM FIREBALLP KX13.6",
57 "QUANTUM FIREBALLP KX20.5",
58 "QUANTUM FIREBALLP KX27.3",
59 "QUANTUM FIREBALLP LM20.5",
60 NULL
63 /* A Register */
64 #define SYNC_ERRDY_EN 0xC0
66 #define SYNC_IN 0x80 /* control bit, different for master vs. slave drives */
67 #define ERRDY_EN 0x40 /* control bit, different for master vs. slave drives */
68 #define IORDY_EN 0x20 /* PIO: IOREADY */
69 #define PREFETCH_EN 0x10 /* PIO: PREFETCH */
71 #define PA3 0x08 /* PIO"A" timing */
72 #define PA2 0x04 /* PIO"A" timing */
73 #define PA1 0x02 /* PIO"A" timing */
74 #define PA0 0x01 /* PIO"A" timing */
76 /* B Register */
78 #define MB2 0x80 /* DMA"B" timing */
79 #define MB1 0x40 /* DMA"B" timing */
80 #define MB0 0x20 /* DMA"B" timing */
82 #define PB4 0x10 /* PIO_FORCE 1:0 */
84 #define PB3 0x08 /* PIO"B" timing */ /* PIO flow Control mode */
85 #define PB2 0x04 /* PIO"B" timing */ /* PIO 4 */
86 #define PB1 0x02 /* PIO"B" timing */ /* PIO 3 half */
87 #define PB0 0x01 /* PIO"B" timing */ /* PIO 3 other half */
89 /* C Register */
90 #define IORDYp_NO_SPEED 0x4F
91 #define SPEED_DIS 0x0F
93 #define DMARQp 0x80
94 #define IORDYp 0x40
95 #define DMAR_EN 0x20
96 #define DMAW_EN 0x10
98 #define MC3 0x08 /* DMA"C" timing */
99 #define MC2 0x04 /* DMA"C" timing */
100 #define MC1 0x02 /* DMA"C" timing */
101 #define MC0 0x01 /* DMA"C" timing */
103 static int pdc202xx_tune_chipset (ide_drive_t *drive, u8 xferspeed)
105 ide_hwif_t *hwif = HWIF(drive);
106 struct pci_dev *dev = hwif->pci_dev;
107 u8 drive_pci = 0x60 + (drive->dn << 2);
108 u8 speed = ide_rate_filter(drive, xferspeed);
110 u32 drive_conf;
111 u8 AP, BP, CP, DP;
112 u8 TA = 0, TB = 0, TC = 0;
114 if (drive->media != ide_disk &&
115 drive->media != ide_cdrom && speed < XFER_SW_DMA_0)
116 return -1;
118 pci_read_config_dword(dev, drive_pci, &drive_conf);
119 pci_read_config_byte(dev, (drive_pci), &AP);
120 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
121 pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
122 pci_read_config_byte(dev, (drive_pci)|0x03, &DP);
124 if (speed < XFER_SW_DMA_0) {
125 if ((AP & 0x0F) || (BP & 0x07)) {
126 /* clear PIO modes of lower 8421 bits of A Register */
127 pci_write_config_byte(dev, (drive_pci), AP &~0x0F);
128 pci_read_config_byte(dev, (drive_pci), &AP);
130 /* clear PIO modes of lower 421 bits of B Register */
131 pci_write_config_byte(dev, (drive_pci)|0x01, BP &~0x07);
132 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
134 pci_read_config_byte(dev, (drive_pci), &AP);
135 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
137 } else {
138 if ((BP & 0xF0) && (CP & 0x0F)) {
139 /* clear DMA modes of upper 842 bits of B Register */
140 /* clear PIO forced mode upper 1 bit of B Register */
141 pci_write_config_byte(dev, (drive_pci)|0x01, BP &~0xF0);
142 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
144 /* clear DMA modes of lower 8421 bits of C Register */
145 pci_write_config_byte(dev, (drive_pci)|0x02, CP &~0x0F);
146 pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
150 pci_read_config_byte(dev, (drive_pci), &AP);
151 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
152 pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
154 switch(speed) {
155 case XFER_UDMA_6: speed = XFER_UDMA_5;
156 case XFER_UDMA_5:
157 case XFER_UDMA_4: TB = 0x20; TC = 0x01; break;
158 case XFER_UDMA_2: TB = 0x20; TC = 0x01; break;
159 case XFER_UDMA_3:
160 case XFER_UDMA_1: TB = 0x40; TC = 0x02; break;
161 case XFER_UDMA_0:
162 case XFER_MW_DMA_2: TB = 0x60; TC = 0x03; break;
163 case XFER_MW_DMA_1: TB = 0x60; TC = 0x04; break;
164 case XFER_MW_DMA_0:
165 case XFER_SW_DMA_2: TB = 0x60; TC = 0x05; break;
166 case XFER_SW_DMA_1: TB = 0x80; TC = 0x06; break;
167 case XFER_SW_DMA_0: TB = 0xC0; TC = 0x0B; break;
168 case XFER_PIO_4: TA = 0x01; TB = 0x04; break;
169 case XFER_PIO_3: TA = 0x02; TB = 0x06; break;
170 case XFER_PIO_2: TA = 0x03; TB = 0x08; break;
171 case XFER_PIO_1: TA = 0x05; TB = 0x0C; break;
172 case XFER_PIO_0:
173 default: TA = 0x09; TB = 0x13; break;
176 if (speed < XFER_SW_DMA_0) {
177 pci_write_config_byte(dev, (drive_pci), AP|TA);
178 pci_write_config_byte(dev, (drive_pci)|0x01, BP|TB);
179 } else {
180 pci_write_config_byte(dev, (drive_pci)|0x01, BP|TB);
181 pci_write_config_byte(dev, (drive_pci)|0x02, CP|TC);
184 #if PDC202XX_DEBUG_DRIVE_INFO
185 printk(KERN_DEBUG "%s: %s drive%d 0x%08x ",
186 drive->name, ide_xfer_verbose(speed),
187 drive->dn, drive_conf);
188 pci_read_config_dword(dev, drive_pci, &drive_conf);
189 printk("0x%08x\n", drive_conf);
190 #endif /* PDC202XX_DEBUG_DRIVE_INFO */
192 return (ide_config_drive_speed(drive, speed));
196 static void pdc202xx_tune_drive(ide_drive_t *drive, u8 pio)
198 pio = ide_get_best_pio_mode(drive, pio, 4, NULL);
199 pdc202xx_tune_chipset(drive, XFER_PIO_0 + pio);
202 static u8 pdc202xx_old_cable_detect (ide_hwif_t *hwif)
204 u16 CIS = 0, mask = (hwif->channel) ? (1<<11) : (1<<10);
205 pci_read_config_word(hwif->pci_dev, 0x50, &CIS);
206 return (CIS & mask) ? 1 : 0;
210 * Set the control register to use the 66MHz system
211 * clock for UDMA 3/4/5 mode operation when necessary.
213 * It may also be possible to leave the 66MHz clock on
214 * and readjust the timing parameters.
216 static void pdc_old_enable_66MHz_clock(ide_hwif_t *hwif)
218 unsigned long clock_reg = hwif->dma_master + 0x11;
219 u8 clock = inb(clock_reg);
221 outb(clock | (hwif->channel ? 0x08 : 0x02), clock_reg);
224 static void pdc_old_disable_66MHz_clock(ide_hwif_t *hwif)
226 unsigned long clock_reg = hwif->dma_master + 0x11;
227 u8 clock = inb(clock_reg);
229 outb(clock & ~(hwif->channel ? 0x08 : 0x02), clock_reg);
232 static int config_chipset_for_dma (ide_drive_t *drive)
234 struct hd_driveid *id = drive->id;
235 ide_hwif_t *hwif = HWIF(drive);
236 struct pci_dev *dev = hwif->pci_dev;
237 u32 drive_conf = 0;
238 u8 drive_pci = 0x60 + (drive->dn << 2);
239 u8 test1 = 0, test2 = 0, speed = -1;
240 u8 AP = 0;
242 if (dev->device != PCI_DEVICE_ID_PROMISE_20246)
243 pdc_old_disable_66MHz_clock(drive->hwif);
245 drive_pci = 0x60 + (drive->dn << 2);
246 pci_read_config_dword(dev, drive_pci, &drive_conf);
247 if ((drive_conf != 0x004ff304) && (drive_conf != 0x004ff3c4))
248 goto chipset_is_set;
250 pci_read_config_byte(dev, drive_pci, &test1);
251 if (!(test1 & SYNC_ERRDY_EN)) {
252 if (drive->select.b.unit & 0x01) {
253 pci_read_config_byte(dev, drive_pci - 4, &test2);
254 if ((test2 & SYNC_ERRDY_EN) &&
255 !(test1 & SYNC_ERRDY_EN)) {
256 pci_write_config_byte(dev, drive_pci,
257 test1|SYNC_ERRDY_EN);
259 } else {
260 pci_write_config_byte(dev, drive_pci,
261 test1|SYNC_ERRDY_EN);
265 chipset_is_set:
267 pci_read_config_byte(dev, (drive_pci), &AP);
268 if (id->capability & 4) /* IORDY_EN */
269 pci_write_config_byte(dev, (drive_pci), AP|IORDY_EN);
270 pci_read_config_byte(dev, (drive_pci), &AP);
271 if (drive->media == ide_disk) /* PREFETCH_EN */
272 pci_write_config_byte(dev, (drive_pci), AP|PREFETCH_EN);
274 speed = ide_max_dma_mode(drive);
276 if (!(speed)) {
277 /* restore original pci-config space */
278 pci_write_config_dword(dev, drive_pci, drive_conf);
279 return 0;
282 (void) hwif->speedproc(drive, speed);
283 return ide_dma_enable(drive);
286 static int pdc202xx_config_drive_xfer_rate (ide_drive_t *drive)
288 drive->init_speed = 0;
290 if (ide_use_dma(drive) && config_chipset_for_dma(drive))
291 return 0;
293 if (ide_use_fast_pio(drive))
294 pdc202xx_tune_drive(drive, 255);
296 return -1;
299 static int pdc202xx_quirkproc (ide_drive_t *drive)
301 const char **list, *model = drive->id->model;
303 for (list = pdc_quirk_drives; *list != NULL; list++)
304 if (strstr(model, *list) != NULL)
305 return 2;
306 return 0;
309 static void pdc202xx_old_ide_dma_start(ide_drive_t *drive)
311 if (drive->current_speed > XFER_UDMA_2)
312 pdc_old_enable_66MHz_clock(drive->hwif);
313 if (drive->media != ide_disk || drive->addressing == 1) {
314 struct request *rq = HWGROUP(drive)->rq;
315 ide_hwif_t *hwif = HWIF(drive);
316 unsigned long high_16 = hwif->dma_master;
317 unsigned long atapi_reg = high_16 + (hwif->channel ? 0x24 : 0x20);
318 u32 word_count = 0;
319 u8 clock = inb(high_16 + 0x11);
321 outb(clock | (hwif->channel ? 0x08 : 0x02), high_16 + 0x11);
322 word_count = (rq->nr_sectors << 8);
323 word_count = (rq_data_dir(rq) == READ) ?
324 word_count | 0x05000000 :
325 word_count | 0x06000000;
326 outl(word_count, atapi_reg);
328 ide_dma_start(drive);
331 static int pdc202xx_old_ide_dma_end(ide_drive_t *drive)
333 if (drive->media != ide_disk || drive->addressing == 1) {
334 ide_hwif_t *hwif = HWIF(drive);
335 unsigned long high_16 = hwif->dma_master;
336 unsigned long atapi_reg = high_16 + (hwif->channel ? 0x24 : 0x20);
337 u8 clock = 0;
339 outl(0, atapi_reg); /* zero out extra */
340 clock = inb(high_16 + 0x11);
341 outb(clock & ~(hwif->channel ? 0x08:0x02), high_16 + 0x11);
343 if (drive->current_speed > XFER_UDMA_2)
344 pdc_old_disable_66MHz_clock(drive->hwif);
345 return __ide_dma_end(drive);
348 static int pdc202xx_old_ide_dma_test_irq(ide_drive_t *drive)
350 ide_hwif_t *hwif = HWIF(drive);
351 unsigned long high_16 = hwif->dma_master;
352 u8 dma_stat = inb(hwif->dma_status);
353 u8 sc1d = inb(high_16 + 0x001d);
355 if (hwif->channel) {
356 /* bit7: Error, bit6: Interrupting, bit5: FIFO Full, bit4: FIFO Empty */
357 if ((sc1d & 0x50) == 0x50)
358 goto somebody_else;
359 else if ((sc1d & 0x40) == 0x40)
360 return (dma_stat & 4) == 4;
361 } else {
362 /* bit3: Error, bit2: Interrupting, bit1: FIFO Full, bit0: FIFO Empty */
363 if ((sc1d & 0x05) == 0x05)
364 goto somebody_else;
365 else if ((sc1d & 0x04) == 0x04)
366 return (dma_stat & 4) == 4;
368 somebody_else:
369 return (dma_stat & 4) == 4; /* return 1 if INTR asserted */
372 static int pdc202xx_ide_dma_lostirq(ide_drive_t *drive)
374 if (HWIF(drive)->resetproc != NULL)
375 HWIF(drive)->resetproc(drive);
376 return __ide_dma_lostirq(drive);
379 static int pdc202xx_ide_dma_timeout(ide_drive_t *drive)
381 if (HWIF(drive)->resetproc != NULL)
382 HWIF(drive)->resetproc(drive);
383 return __ide_dma_timeout(drive);
386 static void pdc202xx_reset_host (ide_hwif_t *hwif)
388 unsigned long high_16 = hwif->dma_master;
389 u8 udma_speed_flag = inb(high_16 | 0x001f);
391 outb(udma_speed_flag | 0x10, high_16 | 0x001f);
392 mdelay(100);
393 outb(udma_speed_flag & ~0x10, high_16 | 0x001f);
394 mdelay(2000); /* 2 seconds ?! */
396 printk(KERN_WARNING "PDC202XX: %s channel reset.\n",
397 hwif->channel ? "Secondary" : "Primary");
400 static void pdc202xx_reset (ide_drive_t *drive)
402 ide_hwif_t *hwif = HWIF(drive);
403 ide_hwif_t *mate = hwif->mate;
405 pdc202xx_reset_host(hwif);
406 pdc202xx_reset_host(mate);
407 pdc202xx_tune_drive(drive, 255);
410 static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev,
411 const char *name)
413 /* This doesn't appear needed */
414 if (dev->resource[PCI_ROM_RESOURCE].start) {
415 pci_write_config_dword(dev, PCI_ROM_ADDRESS,
416 dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
417 printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name,
418 (unsigned long)dev->resource[PCI_ROM_RESOURCE].start);
421 return dev->irq;
424 static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
426 struct pci_dev *dev = hwif->pci_dev;
428 /* PDC20265 has problems with large LBA48 requests */
429 if ((dev->device == PCI_DEVICE_ID_PROMISE_20267) ||
430 (dev->device == PCI_DEVICE_ID_PROMISE_20265))
431 hwif->rqsize = 256;
433 hwif->autodma = 0;
434 hwif->tuneproc = &pdc202xx_tune_drive;
435 hwif->quirkproc = &pdc202xx_quirkproc;
437 if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246)
438 hwif->resetproc = &pdc202xx_reset;
440 hwif->speedproc = &pdc202xx_tune_chipset;
442 hwif->drives[0].autotune = hwif->drives[1].autotune = 1;
444 hwif->ultra_mask = hwif->cds->udma_mask;
445 hwif->mwdma_mask = 0x07;
446 hwif->swdma_mask = 0x07;
447 hwif->atapi_dma = 1;
449 hwif->err_stops_fifo = 1;
451 hwif->ide_dma_check = &pdc202xx_config_drive_xfer_rate;
452 hwif->ide_dma_lostirq = &pdc202xx_ide_dma_lostirq;
453 hwif->ide_dma_timeout = &pdc202xx_ide_dma_timeout;
455 if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246) {
456 if (!(hwif->udma_four))
457 hwif->udma_four = (pdc202xx_old_cable_detect(hwif)) ? 0 : 1;
458 hwif->dma_start = &pdc202xx_old_ide_dma_start;
459 hwif->ide_dma_end = &pdc202xx_old_ide_dma_end;
461 hwif->ide_dma_test_irq = &pdc202xx_old_ide_dma_test_irq;
463 if (!noautodma)
464 hwif->autodma = 1;
465 hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma;
468 static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase)
470 u8 udma_speed_flag = 0, primary_mode = 0, secondary_mode = 0;
472 if (hwif->channel) {
473 ide_setup_dma(hwif, dmabase, 8);
474 return;
477 udma_speed_flag = inb(dmabase | 0x1f);
478 primary_mode = inb(dmabase | 0x1a);
479 secondary_mode = inb(dmabase | 0x1b);
480 printk(KERN_INFO "%s: (U)DMA Burst Bit %sABLED " \
481 "Primary %s Mode " \
482 "Secondary %s Mode.\n", hwif->cds->name,
483 (udma_speed_flag & 1) ? "EN" : "DIS",
484 (primary_mode & 1) ? "MASTER" : "PCI",
485 (secondary_mode & 1) ? "MASTER" : "PCI" );
487 #ifdef CONFIG_PDC202XX_BURST
488 if (!(udma_speed_flag & 1)) {
489 printk(KERN_INFO "%s: FORCING BURST BIT 0x%02x->0x%02x ",
490 hwif->cds->name, udma_speed_flag,
491 (udma_speed_flag|1));
492 outb(udma_speed_flag | 1, dmabase | 0x1f);
493 printk("%sACTIVE\n", (inb(dmabase | 0x1f) & 1) ? "" : "IN");
495 #endif /* CONFIG_PDC202XX_BURST */
497 ide_setup_dma(hwif, dmabase, 8);
500 static int __devinit init_setup_pdc202ata4(struct pci_dev *dev,
501 ide_pci_device_t *d)
503 if ((dev->class >> 8) != PCI_CLASS_STORAGE_IDE) {
504 u8 irq = 0, irq2 = 0;
505 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
506 /* 0xbc */
507 pci_read_config_byte(dev, (PCI_INTERRUPT_LINE)|0x80, &irq2);
508 if (irq != irq2) {
509 pci_write_config_byte(dev,
510 (PCI_INTERRUPT_LINE)|0x80, irq); /* 0xbc */
511 printk(KERN_INFO "%s: pci-config space interrupt "
512 "mirror fixed.\n", d->name);
515 return ide_setup_pci_device(dev, d);
518 static int __devinit init_setup_pdc20265(struct pci_dev *dev,
519 ide_pci_device_t *d)
521 if ((dev->bus->self) &&
522 (dev->bus->self->vendor == PCI_VENDOR_ID_INTEL) &&
523 ((dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960) ||
524 (dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960RM))) {
525 printk(KERN_INFO "ide: Skipping Promise PDC20265 "
526 "attached to I2O RAID controller.\n");
527 return -ENODEV;
529 return ide_setup_pci_device(dev, d);
532 static int __devinit init_setup_pdc202xx(struct pci_dev *dev,
533 ide_pci_device_t *d)
535 return ide_setup_pci_device(dev, d);
538 static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
539 { /* 0 */
540 .name = "PDC20246",
541 .init_setup = init_setup_pdc202ata4,
542 .init_chipset = init_chipset_pdc202xx,
543 .init_hwif = init_hwif_pdc202xx,
544 .init_dma = init_dma_pdc202xx,
545 .channels = 2,
546 .autodma = AUTODMA,
547 .bootable = OFF_BOARD,
548 .extra = 16,
549 .udma_mask = 0x07, /* udma0-2 */
550 },{ /* 1 */
551 .name = "PDC20262",
552 .init_setup = init_setup_pdc202ata4,
553 .init_chipset = init_chipset_pdc202xx,
554 .init_hwif = init_hwif_pdc202xx,
555 .init_dma = init_dma_pdc202xx,
556 .channels = 2,
557 .autodma = AUTODMA,
558 .bootable = OFF_BOARD,
559 .extra = 48,
560 .udma_mask = 0x1f, /* udma0-4 */
561 },{ /* 2 */
562 .name = "PDC20263",
563 .init_setup = init_setup_pdc202ata4,
564 .init_chipset = init_chipset_pdc202xx,
565 .init_hwif = init_hwif_pdc202xx,
566 .init_dma = init_dma_pdc202xx,
567 .channels = 2,
568 .autodma = AUTODMA,
569 .bootable = OFF_BOARD,
570 .extra = 48,
571 .udma_mask = 0x1f, /* udma0-4 */
572 },{ /* 3 */
573 .name = "PDC20265",
574 .init_setup = init_setup_pdc20265,
575 .init_chipset = init_chipset_pdc202xx,
576 .init_hwif = init_hwif_pdc202xx,
577 .init_dma = init_dma_pdc202xx,
578 .channels = 2,
579 .autodma = AUTODMA,
580 .bootable = OFF_BOARD,
581 .extra = 48,
582 .udma_mask = 0x3f, /* udma0-5 */
583 },{ /* 4 */
584 .name = "PDC20267",
585 .init_setup = init_setup_pdc202xx,
586 .init_chipset = init_chipset_pdc202xx,
587 .init_hwif = init_hwif_pdc202xx,
588 .init_dma = init_dma_pdc202xx,
589 .channels = 2,
590 .autodma = AUTODMA,
591 .bootable = OFF_BOARD,
592 .extra = 48,
593 .udma_mask = 0x3f, /* udma0-5 */
598 * pdc202xx_init_one - called when a PDC202xx is found
599 * @dev: the pdc202xx device
600 * @id: the matching pci id
602 * Called when the PCI registration layer (or the IDE initialization)
603 * finds a device matching our IDE device tables.
606 static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_device_id *id)
608 ide_pci_device_t *d = &pdc202xx_chipsets[id->driver_data];
610 return d->init_setup(dev, d);
613 static struct pci_device_id pdc202xx_pci_tbl[] = {
614 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
615 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20262, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
616 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20263, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
617 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20265, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},
618 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20267, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
619 { 0, },
621 MODULE_DEVICE_TABLE(pci, pdc202xx_pci_tbl);
623 static struct pci_driver driver = {
624 .name = "Promise_Old_IDE",
625 .id_table = pdc202xx_pci_tbl,
626 .probe = pdc202xx_init_one,
629 static int __init pdc202xx_ide_init(void)
631 return ide_pci_register_driver(&driver);
634 module_init(pdc202xx_ide_init);
636 MODULE_AUTHOR("Andre Hedrick, Frank Tiernan");
637 MODULE_DESCRIPTION("PCI driver module for older Promise IDE");
638 MODULE_LICENSE("GPL");