linux/arch/i386/pci/acpi.c
<<
>>
Prefs
   1#include <linux/pci.h>
   2#include <linux/acpi.h>
   3#include <linux/init.h>
   4#include <linux/irq.h>
   5#include <asm/numa.h>
   6#include "pci.h"
   7
   8struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int domain, int busnum)
   9{
  10        struct pci_bus *bus;
  11
  12        if (domain != 0) {
  13                printk(KERN_WARNING "PCI: Multiple domains not supported\n");
  14                return NULL;
  15        }
  16
  17        bus = pcibios_scan_root(busnum);
  18#ifdef CONFIG_ACPI_NUMA
  19        if (bus != NULL) {
  20                int pxm = acpi_get_pxm(device->handle);
  21                if (pxm >= 0) {
  22                        bus->sysdata = (void *)(unsigned long)pxm_to_node(pxm);
  23                        printk("bus %d -> pxm %d -> node %ld\n",
  24                                busnum, pxm, (long)(bus->sysdata));
  25                }
  26        }
  27#endif
  28        
  29        return bus;
  30}
  31
  32extern int pci_routeirq;
  33static int __init pci_acpi_init(void)
  34{
  35        struct pci_dev *dev = NULL;
  36
  37        if (pcibios_scanned)
  38                return 0;
  39
  40        if (acpi_noirq)
  41                return 0;
  42
  43        printk(KERN_INFO "PCI: Using ACPI for IRQ routing\n");
  44        acpi_irq_penalty_init();
  45        pcibios_scanned++;
  46        pcibios_enable_irq = acpi_pci_irq_enable;
  47        pcibios_disable_irq = acpi_pci_irq_disable;
  48
  49        if (pci_routeirq) {
  50                /*
  51                 * PCI IRQ routing is set up by pci_enable_device(), but we
  52                 * also do it here in case there are still broken drivers that
  53                 * don't use pci_enable_device().
  54                 */
  55                printk(KERN_INFO "PCI: Routing PCI interrupts for all devices because \"pci=routeirq\" specified\n");
  56                for_each_pci_dev(dev)
  57                        acpi_pci_irq_enable(dev);
  58        } else
  59                printk(KERN_INFO "PCI: If a device doesn't work, try \"pci=routeirq\".  If it helps, post a report\n");
  60
  61#ifdef CONFIG_X86_IO_APIC
  62        if (acpi_ioapic)
  63                print_IO_APIC();
  64#endif
  65
  66        return 0;
  67}
  68subsys_initcall(pci_acpi_init);
  69
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.