- struct pci_dev *dev = hwif->pci_dev;
- struct hpt_info *info = ide_get_hwifdata (hwif);
- u8 speed = hpt3xx_ratefilter(drive, xferspeed);
- u8 mcr_addr = hwif->select_data + 1;
- u8 itr_addr = 0x40 + (drive->dn * 4);
- u8 mcr = 0;
- u32 new_itr, old_itr = 0;
- u32 itr_mask = (speed < XFER_MW_DMA_0) ? 0x303c0000 : 0xc0000000;
-
- /*
- * Disable the "fast interrupt" prediction.
- * don't holdoff on interrupts. (== 0x01 despite what the docs say)
- */
- pci_read_config_byte (dev, mcr_addr, &mcr);
- pci_write_config_byte(dev, mcr_addr, (mcr & ~0x07));
-
- new_itr = pci_bus_clock_list(speed, info->speed);
- pci_read_config_dword(dev, itr_addr, &old_itr);
- new_itr = (new_itr & ~itr_mask) | (old_itr & itr_mask);
- if (speed < XFER_MW_DMA_0)
- new_itr &= ~0x80000000; /* Disable on-chip PIO FIFO/buffer */
- pci_write_config_dword(dev, itr_addr, new_itr);
-
- return ide_config_drive_speed(drive, speed);
-}
-
-static int hpt3xx_tune_chipset (ide_drive_t *drive, u8 speed)
-{
- ide_hwif_t *hwif = drive->hwif;