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>
6 * Promise Ultra33 cards with BIOS v1.20 through 1.28 will need this
7 * compiled into the kernel if you have more than one card installed.
8 * Note that BIOS v1.29 is reported to fix the problem. Since this is
9 * safe chipset tuning, including this support is harmless
11 * Promise Ultra66 cards with BIOS v1.11 this
12 * compiled into the kernel if you have more than one card installed.
14 * Promise Ultra100 cards.
16 * The latest chipset code will support the following ::
17 * Three Ultra33 controllers and 12 drives.
18 * 8 are UDMA supported and 4 are limited to DMA mode 2 multi-word.
19 * The 8/4 ratio is a BIOS code limit by promise.
21 * UNLESS you enable "CONFIG_PDC202XX_BURST"
26 * Portions Copyright (C) 1999 Promise Technology, Inc.
27 * Author: Frank Tiernan (frankt@promise.com)
28 * Released under terms of General Public License
31 #include <linux/types.h>
32 #include <linux/module.h>
33 #include <linux/kernel.h>
34 #include <linux/delay.h>
35 #include <linux/timer.h>
37 #include <linux/ioport.h>
38 #include <linux/blkdev.h>
39 #include <linux/hdreg.h>
40 #include <linux/interrupt.h>
41 #include <linux/pci.h>
42 #include <linux/init.h>
43 #include <linux/ide.h>
48 #define PDC202_DEBUG_CABLE 0
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",
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 */
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 */
90 #define IORDYp_NO_SPEED 0x4F
91 #define SPEED_DIS 0x0F
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 u8 pdc202xx_ratemask (ide_drive_t *drive)
107 switch(HWIF(drive)->pci_dev->device) {
108 case PCI_DEVICE_ID_PROMISE_20267:
109 case PCI_DEVICE_ID_PROMISE_20265:
112 case PCI_DEVICE_ID_PROMISE_20263:
113 case PCI_DEVICE_ID_PROMISE_20262:
116 case PCI_DEVICE_ID_PROMISE_20246:
121 if (!eighty_ninty_three(drive))
122 mode = min(mode, (u8)1);
126 static int pdc202xx_tune_chipset (ide_drive_t *drive, u8 xferspeed)
128 ide_hwif_t *hwif = HWIF(drive);
129 struct pci_dev *dev = hwif->pci_dev;
130 u8 drive_pci = 0x60 + (drive->dn << 2);
131 u8 speed = ide_rate_filter(pdc202xx_ratemask(drive), xferspeed);
135 u8 TA = 0, TB = 0, TC = 0;
137 if (drive->media != ide_disk &&
138 drive->media != ide_cdrom && speed < XFER_SW_DMA_0)
141 pci_read_config_dword(dev, drive_pci, &drive_conf);
142 pci_read_config_byte(dev, (drive_pci), &AP);
143 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
144 pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
145 pci_read_config_byte(dev, (drive_pci)|0x03, &DP);
147 if (speed < XFER_SW_DMA_0) {
148 if ((AP & 0x0F) || (BP & 0x07)) {
149 /* clear PIO modes of lower 8421 bits of A Register */
150 pci_write_config_byte(dev, (drive_pci), AP &~0x0F);
151 pci_read_config_byte(dev, (drive_pci), &AP);
153 /* clear PIO modes of lower 421 bits of B Register */
154 pci_write_config_byte(dev, (drive_pci)|0x01, BP &~0x07);
155 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
157 pci_read_config_byte(dev, (drive_pci), &AP);
158 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
161 if ((BP & 0xF0) && (CP & 0x0F)) {
162 /* clear DMA modes of upper 842 bits of B Register */
163 /* clear PIO forced mode upper 1 bit of B Register */
164 pci_write_config_byte(dev, (drive_pci)|0x01, BP &~0xF0);
165 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
167 /* clear DMA modes of lower 8421 bits of C Register */
168 pci_write_config_byte(dev, (drive_pci)|0x02, CP &~0x0F);
169 pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
173 pci_read_config_byte(dev, (drive_pci), &AP);
174 pci_read_config_byte(dev, (drive_pci)|0x01, &BP);
175 pci_read_config_byte(dev, (drive_pci)|0x02, &CP);
178 case XFER_UDMA_6: speed = XFER_UDMA_5;
180 case XFER_UDMA_4: TB = 0x20; TC = 0x01; break;
181 case XFER_UDMA_2: TB = 0x20; TC = 0x01; break;
183 case XFER_UDMA_1: TB = 0x40; TC = 0x02; break;
185 case XFER_MW_DMA_2: TB = 0x60; TC = 0x03; break;
186 case XFER_MW_DMA_1: TB = 0x60; TC = 0x04; break;
188 case XFER_SW_DMA_2: TB = 0x60; TC = 0x05; break;
189 case XFER_SW_DMA_1: TB = 0x80; TC = 0x06; break;
190 case XFER_SW_DMA_0: TB = 0xC0; TC = 0x0B; break;
191 case XFER_PIO_4: TA = 0x01; TB = 0x04; break;
192 case XFER_PIO_3: TA = 0x02; TB = 0x06; break;
193 case XFER_PIO_2: TA = 0x03; TB = 0x08; break;
194 case XFER_PIO_1: TA = 0x05; TB = 0x0C; break;
196 default: TA = 0x09; TB = 0x13; break;
199 if (speed < XFER_SW_DMA_0) {
200 pci_write_config_byte(dev, (drive_pci), AP|TA);
201 pci_write_config_byte(dev, (drive_pci)|0x01, BP|TB);
203 pci_write_config_byte(dev, (drive_pci)|0x01, BP|TB);
204 pci_write_config_byte(dev, (drive_pci)|0x02, CP|TC);
207 #if PDC202XX_DEBUG_DRIVE_INFO
208 printk(KERN_DEBUG "%s: %s drive%d 0x%08x ",
209 drive->name, ide_xfer_verbose(speed),
210 drive->dn, drive_conf);
211 pci_read_config_dword(dev, drive_pci, &drive_conf);
212 printk("0x%08x\n", drive_conf);
213 #endif /* PDC202XX_DEBUG_DRIVE_INFO */
215 return (ide_config_drive_speed(drive, speed));
220 * 960, 480, 390, 300, 240, 180, 120, 90, 60
221 * 180, 150, 120, 90, 60
223 * 180, 120, 90, 90, 90, 60, 30
224 * 11, 5, 4, 3, 2, 1, 0
226 static void config_chipset_for_pio (ide_drive_t *drive, u8 pio)
230 if (pio == 5) pio = 4;
231 speed = XFER_PIO_0 + ide_get_best_pio_mode(drive, 255, pio, NULL);
233 pdc202xx_tune_chipset(drive, speed);
236 static u8 pdc202xx_old_cable_detect (ide_hwif_t *hwif)
238 u16 CIS = 0, mask = (hwif->channel) ? (1<<11) : (1<<10);
239 pci_read_config_word(hwif->pci_dev, 0x50, &CIS);
240 return (CIS & mask) ? 1 : 0;
244 * Set the control register to use the 66MHz system
245 * clock for UDMA 3/4/5 mode operation when necessary.
247 * It may also be possible to leave the 66MHz clock on
248 * and readjust the timing parameters.
250 static void pdc_old_enable_66MHz_clock(ide_hwif_t *hwif)
252 unsigned long clock_reg = hwif->dma_master + 0x11;
253 u8 clock = hwif->INB(clock_reg);
255 hwif->OUTB(clock | (hwif->channel ? 0x08 : 0x02), clock_reg);
258 static void pdc_old_disable_66MHz_clock(ide_hwif_t *hwif)
260 unsigned long clock_reg = hwif->dma_master + 0x11;
261 u8 clock = hwif->INB(clock_reg);
263 hwif->OUTB(clock & ~(hwif->channel ? 0x08 : 0x02), clock_reg);
266 static int config_chipset_for_dma (ide_drive_t *drive)
268 struct hd_driveid *id = drive->id;
269 ide_hwif_t *hwif = HWIF(drive);
270 struct pci_dev *dev = hwif->pci_dev;
272 u8 drive_pci = 0x60 + (drive->dn << 2);
273 u8 test1 = 0, test2 = 0, speed = -1;
274 u8 AP = 0, cable = 0;
276 u8 ultra_66 = ((id->dma_ultra & 0x0010) ||
277 (id->dma_ultra & 0x0008)) ? 1 : 0;
279 if (dev->device != PCI_DEVICE_ID_PROMISE_20246)
280 cable = pdc202xx_old_cable_detect(hwif);
284 if (ultra_66 && cable) {
285 printk(KERN_WARNING "Warning: %s channel requires an 80-pin cable for operation.\n", hwif->channel ? "Secondary":"Primary");
286 printk(KERN_WARNING "%s reduced to Ultra33 mode.\n", drive->name);
289 if (dev->device != PCI_DEVICE_ID_PROMISE_20246)
290 pdc_old_disable_66MHz_clock(drive->hwif);
292 drive_pci = 0x60 + (drive->dn << 2);
293 pci_read_config_dword(dev, drive_pci, &drive_conf);
294 if ((drive_conf != 0x004ff304) && (drive_conf != 0x004ff3c4))
297 pci_read_config_byte(dev, drive_pci, &test1);
298 if (!(test1 & SYNC_ERRDY_EN)) {
299 if (drive->select.b.unit & 0x01) {
300 pci_read_config_byte(dev, drive_pci - 4, &test2);
301 if ((test2 & SYNC_ERRDY_EN) &&
302 !(test1 & SYNC_ERRDY_EN)) {
303 pci_write_config_byte(dev, drive_pci,
304 test1|SYNC_ERRDY_EN);
307 pci_write_config_byte(dev, drive_pci,
308 test1|SYNC_ERRDY_EN);
314 pci_read_config_byte(dev, (drive_pci), &AP);
315 if (id->capability & 4) /* IORDY_EN */
316 pci_write_config_byte(dev, (drive_pci), AP|IORDY_EN);
317 pci_read_config_byte(dev, (drive_pci), &AP);
318 if (drive->media == ide_disk) /* PREFETCH_EN */
319 pci_write_config_byte(dev, (drive_pci), AP|PREFETCH_EN);
321 speed = ide_dma_speed(drive, pdc202xx_ratemask(drive));
324 /* restore original pci-config space */
325 pci_write_config_dword(dev, drive_pci, drive_conf);
329 (void) hwif->speedproc(drive, speed);
330 return ide_dma_enable(drive);
333 static int pdc202xx_config_drive_xfer_rate (ide_drive_t *drive)
335 ide_hwif_t *hwif = HWIF(drive);
336 struct hd_driveid *id = drive->id;
338 drive->init_speed = 0;
340 if (id && (id->capability & 1) && drive->autodma) {
342 if (ide_use_dma(drive)) {
343 if (config_chipset_for_dma(drive))
344 return hwif->ide_dma_on(drive);
349 } else if ((id->capability & 8) || (id->field_valid & 2)) {
351 hwif->tuneproc(drive, 5);
352 return hwif->ide_dma_off_quietly(drive);
354 /* IORDY not supported */
358 static int pdc202xx_quirkproc (ide_drive_t *drive)
360 const char **list, *model = drive->id->model;
362 for (list = pdc_quirk_drives; *list != NULL; list++)
363 if (strstr(model, *list) != NULL)
368 static void pdc202xx_old_ide_dma_start(ide_drive_t *drive)
370 if (drive->current_speed > XFER_UDMA_2)
371 pdc_old_enable_66MHz_clock(drive->hwif);
372 if (drive->media != ide_disk || drive->addressing == 1) {
373 struct request *rq = HWGROUP(drive)->rq;
374 ide_hwif_t *hwif = HWIF(drive);
375 unsigned long high_16 = hwif->dma_master;
376 unsigned long atapi_reg = high_16 + (hwif->channel ? 0x24 : 0x20);
378 u8 clock = hwif->INB(high_16 + 0x11);
380 hwif->OUTB(clock|(hwif->channel ? 0x08 : 0x02), high_16+0x11);
381 word_count = (rq->nr_sectors << 8);
382 word_count = (rq_data_dir(rq) == READ) ?
383 word_count | 0x05000000 :
384 word_count | 0x06000000;
385 hwif->OUTL(word_count, atapi_reg);
387 ide_dma_start(drive);
390 static int pdc202xx_old_ide_dma_end(ide_drive_t *drive)
392 if (drive->media != ide_disk || drive->addressing == 1) {
393 ide_hwif_t *hwif = HWIF(drive);
394 unsigned long high_16 = hwif->dma_master;
395 unsigned long atapi_reg = high_16 + (hwif->channel ? 0x24 : 0x20);
398 hwif->OUTL(0, atapi_reg); /* zero out extra */
399 clock = hwif->INB(high_16 + 0x11);
400 hwif->OUTB(clock & ~(hwif->channel ? 0x08:0x02), high_16+0x11);
402 if (drive->current_speed > XFER_UDMA_2)
403 pdc_old_disable_66MHz_clock(drive->hwif);
404 return __ide_dma_end(drive);
407 static int pdc202xx_old_ide_dma_test_irq(ide_drive_t *drive)
409 ide_hwif_t *hwif = HWIF(drive);
410 unsigned long high_16 = hwif->dma_master;
411 u8 dma_stat = hwif->INB(hwif->dma_status);
412 u8 sc1d = hwif->INB((high_16 + 0x001d));
415 /* bit7: Error, bit6: Interrupting, bit5: FIFO Full, bit4: FIFO Empty */
416 if ((sc1d & 0x50) == 0x50)
418 else if ((sc1d & 0x40) == 0x40)
419 return (dma_stat & 4) == 4;
421 /* bit3: Error, bit2: Interrupting, bit1: FIFO Full, bit0: FIFO Empty */
422 if ((sc1d & 0x05) == 0x05)
424 else if ((sc1d & 0x04) == 0x04)
425 return (dma_stat & 4) == 4;
428 return (dma_stat & 4) == 4; /* return 1 if INTR asserted */
431 static int pdc202xx_ide_dma_lostirq(ide_drive_t *drive)
433 if (HWIF(drive)->resetproc != NULL)
434 HWIF(drive)->resetproc(drive);
435 return __ide_dma_lostirq(drive);
438 static int pdc202xx_ide_dma_timeout(ide_drive_t *drive)
440 if (HWIF(drive)->resetproc != NULL)
441 HWIF(drive)->resetproc(drive);
442 return __ide_dma_timeout(drive);
445 static void pdc202xx_reset_host (ide_hwif_t *hwif)
447 unsigned long high_16 = hwif->dma_master;
448 u8 udma_speed_flag = hwif->INB(high_16|0x001f);
450 hwif->OUTB((udma_speed_flag | 0x10), (high_16|0x001f));
452 hwif->OUTB((udma_speed_flag & ~0x10), (high_16|0x001f));
453 mdelay(2000); /* 2 seconds ?! */
455 printk(KERN_WARNING "PDC202XX: %s channel reset.\n",
456 hwif->channel ? "Secondary" : "Primary");
459 static void pdc202xx_reset (ide_drive_t *drive)
461 ide_hwif_t *hwif = HWIF(drive);
462 ide_hwif_t *mate = hwif->mate;
464 pdc202xx_reset_host(hwif);
465 pdc202xx_reset_host(mate);
466 hwif->tuneproc(drive, 5);
469 static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev,
472 /* This doesn't appear needed */
473 if (dev->resource[PCI_ROM_RESOURCE].start) {
474 pci_write_config_dword(dev, PCI_ROM_ADDRESS,
475 dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
476 printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name,
477 (unsigned long)dev->resource[PCI_ROM_RESOURCE].start);
483 static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
485 struct pci_dev *dev = hwif->pci_dev;
487 /* PDC20265 has problems with large LBA48 requests */
488 if ((dev->device == PCI_DEVICE_ID_PROMISE_20267) ||
489 (dev->device == PCI_DEVICE_ID_PROMISE_20265))
493 hwif->tuneproc = &config_chipset_for_pio;
494 hwif->quirkproc = &pdc202xx_quirkproc;
496 if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246)
497 hwif->resetproc = &pdc202xx_reset;
499 hwif->speedproc = &pdc202xx_tune_chipset;
501 hwif->drives[0].autotune = hwif->drives[1].autotune = 1;
503 hwif->ultra_mask = 0x3f;
504 hwif->mwdma_mask = 0x07;
505 hwif->swdma_mask = 0x07;
508 hwif->err_stops_fifo = 1;
510 hwif->ide_dma_check = &pdc202xx_config_drive_xfer_rate;
511 hwif->ide_dma_lostirq = &pdc202xx_ide_dma_lostirq;
512 hwif->ide_dma_timeout = &pdc202xx_ide_dma_timeout;
514 if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246) {
515 if (!(hwif->udma_four))
516 hwif->udma_four = (pdc202xx_old_cable_detect(hwif)) ? 0 : 1;
517 hwif->dma_start = &pdc202xx_old_ide_dma_start;
518 hwif->ide_dma_end = &pdc202xx_old_ide_dma_end;
520 hwif->ide_dma_test_irq = &pdc202xx_old_ide_dma_test_irq;
524 hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma;
525 #if PDC202_DEBUG_CABLE
526 printk(KERN_DEBUG "%s: %s-pin cable\n",
527 hwif->name, hwif->udma_four ? "80" : "40");
528 #endif /* PDC202_DEBUG_CABLE */
531 static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase)
533 u8 udma_speed_flag = 0, primary_mode = 0, secondary_mode = 0;
536 ide_setup_dma(hwif, dmabase, 8);
540 udma_speed_flag = hwif->INB((dmabase|0x1f));
541 primary_mode = hwif->INB((dmabase|0x1a));
542 secondary_mode = hwif->INB((dmabase|0x1b));
543 printk(KERN_INFO "%s: (U)DMA Burst Bit %sABLED " \
545 "Secondary %s Mode.\n", hwif->cds->name,
546 (udma_speed_flag & 1) ? "EN" : "DIS",
547 (primary_mode & 1) ? "MASTER" : "PCI",
548 (secondary_mode & 1) ? "MASTER" : "PCI" );
550 #ifdef CONFIG_PDC202XX_BURST
551 if (!(udma_speed_flag & 1)) {
552 printk(KERN_INFO "%s: FORCING BURST BIT 0x%02x->0x%02x ",
553 hwif->cds->name, udma_speed_flag,
554 (udma_speed_flag|1));
555 hwif->OUTB(udma_speed_flag|1,(dmabase|0x1f));
557 (hwif->INB(dmabase|0x1f)&1) ? "":"IN");
559 #endif /* CONFIG_PDC202XX_BURST */
560 #ifdef CONFIG_PDC202XX_MASTER
561 if (!(primary_mode & 1)) {
562 printk(KERN_INFO "%s: FORCING PRIMARY MODE BIT "
563 "0x%02x -> 0x%02x ", hwif->cds->name,
564 primary_mode, (primary_mode|1));
565 hwif->OUTB(primary_mode|1, (dmabase|0x1a));
567 (hwif->INB((dmabase|0x1a)) & 1) ? "MASTER" : "PCI");
570 if (!(secondary_mode & 1)) {
571 printk(KERN_INFO "%s: FORCING SECONDARY MODE BIT "
572 "0x%02x -> 0x%02x ", hwif->cds->name,
573 secondary_mode, (secondary_mode|1));
574 hwif->OUTB(secondary_mode|1, (dmabase|0x1b));
576 (hwif->INB((dmabase|0x1b)) & 1) ? "MASTER" : "PCI");
578 #endif /* CONFIG_PDC202XX_MASTER */
580 ide_setup_dma(hwif, dmabase, 8);
583 static int __devinit init_setup_pdc202ata4(struct pci_dev *dev,
586 if ((dev->class >> 8) != PCI_CLASS_STORAGE_IDE) {
587 u8 irq = 0, irq2 = 0;
588 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
590 pci_read_config_byte(dev, (PCI_INTERRUPT_LINE)|0x80, &irq2);
592 pci_write_config_byte(dev,
593 (PCI_INTERRUPT_LINE)|0x80, irq); /* 0xbc */
594 printk(KERN_INFO "%s: pci-config space interrupt "
595 "mirror fixed.\n", d->name);
598 return ide_setup_pci_device(dev, d);
601 static int __devinit init_setup_pdc20265(struct pci_dev *dev,
604 if ((dev->bus->self) &&
605 (dev->bus->self->vendor == PCI_VENDOR_ID_INTEL) &&
606 ((dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960) ||
607 (dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960RM))) {
608 printk(KERN_INFO "ide: Skipping Promise PDC20265 "
609 "attached to I2O RAID controller.\n");
612 return ide_setup_pci_device(dev, d);
615 static int __devinit init_setup_pdc202xx(struct pci_dev *dev,
618 return ide_setup_pci_device(dev, d);
621 static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
624 .init_setup = init_setup_pdc202ata4,
625 .init_chipset = init_chipset_pdc202xx,
626 .init_hwif = init_hwif_pdc202xx,
627 .init_dma = init_dma_pdc202xx,
630 .bootable = OFF_BOARD,
634 .init_setup = init_setup_pdc202ata4,
635 .init_chipset = init_chipset_pdc202xx,
636 .init_hwif = init_hwif_pdc202xx,
637 .init_dma = init_dma_pdc202xx,
640 .bootable = OFF_BOARD,
644 .init_setup = init_setup_pdc202ata4,
645 .init_chipset = init_chipset_pdc202xx,
646 .init_hwif = init_hwif_pdc202xx,
647 .init_dma = init_dma_pdc202xx,
650 .bootable = OFF_BOARD,
654 .init_setup = init_setup_pdc20265,
655 .init_chipset = init_chipset_pdc202xx,
656 .init_hwif = init_hwif_pdc202xx,
657 .init_dma = init_dma_pdc202xx,
660 .bootable = OFF_BOARD,
664 .init_setup = init_setup_pdc202xx,
665 .init_chipset = init_chipset_pdc202xx,
666 .init_hwif = init_hwif_pdc202xx,
667 .init_dma = init_dma_pdc202xx,
670 .bootable = OFF_BOARD,
676 * pdc202xx_init_one - called when a PDC202xx is found
677 * @dev: the pdc202xx device
678 * @id: the matching pci id
680 * Called when the PCI registration layer (or the IDE initialization)
681 * finds a device matching our IDE device tables.
684 static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_device_id *id)
686 ide_pci_device_t *d = &pdc202xx_chipsets[id->driver_data];
688 return d->init_setup(dev, d);
691 static struct pci_device_id pdc202xx_pci_tbl[] = {
692 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
693 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20262, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
694 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20263, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
695 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20265, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},
696 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20267, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
699 MODULE_DEVICE_TABLE(pci, pdc202xx_pci_tbl);
701 static struct pci_driver driver = {
702 .name = "Promise_Old_IDE",
703 .id_table = pdc202xx_pci_tbl,
704 .probe = pdc202xx_init_one,
707 static int __init pdc202xx_ide_init(void)
709 return ide_pci_register_driver(&driver);
712 module_init(pdc202xx_ide_init);
714 MODULE_AUTHOR("Andre Hedrick, Frank Tiernan");
715 MODULE_DESCRIPTION("PCI driver module for older Promise IDE");
716 MODULE_LICENSE("GPL");