Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}