Loading...
/* * Exceptions for specific devices. Usually work-arounds for fatal design flaws. * Short list on x86-64........so far. */ #include <linux/pci.h> #include <linux/init.h> #include "pci.h" static void __devinit pci_fixup_ncr53c810(struct pci_dev *d) { /* * NCR 53C810 returns class code 0 (at least on some systems). * Fix class to be PCI_CLASS_STORAGE_SCSI */ if (!d->class) { printk(KERN_WARNING "PCI: fixing NCR 53C810 class code for %s\n", d->slot_name); d->class = PCI_CLASS_STORAGE_SCSI << 8; } } static void __devinit pci_fixup_ide_bases(struct pci_dev *d) { int i; /* * PCI IDE controllers use non-standard I/O port decoding, respect it. */ if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE) return; DBG("PCI: IDE base address fixup for %s\n", d->slot_name); for(i=0; i<4; i++) { struct resource *r = &d->resource[i]; if ((r->start & ~0x80) == 0x374) { r->start |= 2; r->end = r->start; } } } struct pci_fixup pcibios_fixups[] = { { PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases }, { PCI_FIXUP_HEADER, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810 }, { 0 } }; |