static int __init pci_check_type1(void) { unsigned long flags; unsigned int tmp; int works = 0; local_irq_save(flags); outb(0x01, 0xCFB); tmp = inl(0xCF8); outl(0x80000000, 0xCF8); if (inl(0xCF8) == 0x80000000 && pci_sanity_check(&pci_direct_conf1)) { works = 1; } outl(tmp, 0xCF8); local_irq_restore(flags); return works; }
static int __init pci_check_type2(void) { unsigned long flags; int works = 0; local_irq_save(flags); outb(0x00, 0xCFB); outb(0x00, 0xCF8); outb(0x00, 0xCFA); if (inb(0xCF8) == 0x00 && inb(0xCFA) == 0x00 && pci_sanity_check(&pci_direct_conf2)) { works = 1; } local_irq_restore(flags); return works; }
static int __init pci_check_direct(void) { unsigned long flags; local_irq_save(flags); /* * Check if access works. */ if (pci_sanity_check(&pci_direct_ampci)) { local_irq_restore(flags); printk(KERN_INFO "PCI: Using configuration ampci\n"); request_mem_region(0xBE040000, 256, "AMPCI bridge"); request_mem_region(0xBFFFFFF4, 12, "PCI ampci"); return 0; } local_irq_restore(flags); return -ENODEV; }
static int __init pci_check_type2(void) { unsigned long flags; int works = 0; atomic_spin_lock_irqsave(&pci_config_lock, flags); outb(0x00, 0xCFB); outb(0x00, 0xCF8); outb(0x00, 0xCFA); if (inb(0xCF8) == 0x00 && inb(0xCFA) == 0x00) { atomic_spin_unlock_irqrestore(&pci_config_lock, flags); if (pci_sanity_check(&pci_direct_conf2)) works = 1; } else atomic_spin_unlock_irqrestore(&pci_config_lock, flags); return works; }