lkml.org 
[lkml]   [2009]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 6/7] x86/acpi: move setup io apic routing out of ACPI macro scope

    so we could set io apic routing when ACPI is not set

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>

    ---
    arch/x86/include/asm/io_apic.h | 4 -
    arch/x86/kernel/apic/io_apic.c | 122 ++++++++++++++++++++---------------------
    2 files changed, 63 insertions(+), 63 deletions(-)

    Index: linux-2.6/arch/x86/kernel/apic/io_apic.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c
    +++ linux-2.6/arch/x86/kernel/apic/io_apic.c
    @@ -3840,6 +3840,67 @@ int __init arch_probe_nr_irqs(void)
    }
    #endif

    +static int __io_apic_set_pci_routing(struct device *dev, int ioapic, int pin, int irq,
    + int triggering, int polarity)
    +{
    + struct irq_desc *desc;
    + struct irq_cfg *cfg;
    + int node;
    +
    + if (!IO_APIC_IRQ(irq)) {
    + apic_printk(APIC_QUIET,KERN_ERR "IOAPIC[%d]: Invalid reference to IRQ 0\n",
    + ioapic);
    + return -EINVAL;
    + }
    +
    + if (dev)
    + node = dev_to_node(dev);
    + else
    + node = cpu_to_node(boot_cpu_id);
    +
    + desc = irq_to_desc_alloc_node(irq, node);
    + if (!desc) {
    + printk(KERN_INFO "can not get irq_desc %d\n", irq);
    + return 0;
    + }
    +
    + /*
    + * IRQs < 16 are already in the irq_2_pin[] map
    + */
    + if (irq >= NR_IRQS_LEGACY) {
    + cfg = desc->chip_data;
    + add_pin_to_irq_node(cfg, node, ioapic, pin);
    + }
    +
    + setup_IO_APIC_irq(ioapic, pin, irq, desc, triggering, polarity);
    +
    + return 0;
    +}
    +
    +static struct {
    + DECLARE_BITMAP(pin_programmed, MP_MAX_IOAPIC_PIN + 1);
    +} mp_ioapic_routing[MAX_IO_APICS];
    +
    +int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin, int irq,
    + int triggering, int polarity)
    +{
    +
    + /*
    + * Avoid pin reprogramming. PRTs typically include entries
    + * with redundant pin->gsi mappings (but unique PCI devices);
    + * we only program the IOAPIC on the first.
    + */
    + if (test_bit(pin, mp_ioapic_routing[ioapic].pin_programmed)) {
    + pr_debug("Pin %d-%d already programmed\n",
    + mp_ioapics[ioapic].apicid, pin);
    + return 0;
    + }
    + set_bit(pin, mp_ioapic_routing[ioapic].pin_programmed);
    +
    + return __io_apic_set_pci_routing(dev, ioapic, pin, irq,
    + triggering, polarity);
    +}
    +
    /* --------------------------------------------------------------------------
    ACPI-based IOAPIC Configuration
    -------------------------------------------------------------------------- */
    @@ -3934,67 +3995,6 @@ int __init io_apic_get_version(int ioapi
    }
    #endif

    -static int __io_apic_set_pci_routing(struct device *dev, int ioapic, int pin, int irq,
    - int triggering, int polarity)
    -{
    - struct irq_desc *desc;
    - struct irq_cfg *cfg;
    - int node;
    -
    - if (!IO_APIC_IRQ(irq)) {
    - apic_printk(APIC_QUIET,KERN_ERR "IOAPIC[%d]: Invalid reference to IRQ 0\n",
    - ioapic);
    - return -EINVAL;
    - }
    -
    - if (dev)
    - node = dev_to_node(dev);
    - else
    - node = cpu_to_node(boot_cpu_id);
    -
    - desc = irq_to_desc_alloc_node(irq, node);
    - if (!desc) {
    - printk(KERN_INFO "can not get irq_desc %d\n", irq);
    - return 0;
    - }
    -
    - /*
    - * IRQs < 16 are already in the irq_2_pin[] map
    - */
    - if (irq >= NR_IRQS_LEGACY) {
    - cfg = desc->chip_data;
    - add_pin_to_irq_node(cfg, node, ioapic, pin);
    - }
    -
    - setup_IO_APIC_irq(ioapic, pin, irq, desc, triggering, polarity);
    -
    - return 0;
    -}
    -
    -static struct {
    - DECLARE_BITMAP(pin_programmed, MP_MAX_IOAPIC_PIN + 1);
    -} mp_ioapic_routing[MAX_IO_APICS];
    -
    -int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin, int irq,
    - int triggering, int polarity)
    -{
    -
    - /*
    - * Avoid pin reprogramming. PRTs typically include entries
    - * with redundant pin->gsi mappings (but unique PCI devices);
    - * we only program the IOAPIC on the first.
    - */
    - if (test_bit(pin, mp_ioapic_routing[ioapic].pin_programmed)) {
    - pr_debug("Pin %d-%d already programmed\n",
    - mp_ioapics[ioapic].apicid, pin);
    - return 0;
    - }
    - set_bit(pin, mp_ioapic_routing[ioapic].pin_programmed);
    -
    - return __io_apic_set_pci_routing(dev, ioapic, pin, irq,
    - triggering, polarity);
    -}
    -
    int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity)
    {
    int i;
    Index: linux-2.6/arch/x86/include/asm/io_apic.h
    ===================================================================
    --- linux-2.6.orig/arch/x86/include/asm/io_apic.h
    +++ linux-2.6/arch/x86/include/asm/io_apic.h
    @@ -154,10 +154,10 @@ extern int timer_through_8259;
    extern int io_apic_get_unique_id(int ioapic, int apic_id);
    extern int io_apic_get_version(int ioapic);
    extern int io_apic_get_redir_entries(int ioapic);
    -extern int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin,
    - int irq, int edge_level, int active_high_low);
    #endif /* CONFIG_ACPI */

    +extern int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin,
    + int irq, int edge_level, int active_high_low);
    extern int (*ioapic_renumber_irq)(int ioapic, int irq);
    extern void ioapic_init_mappings(void);


    \
     
     \ /
      Last update: 2009-05-06 19:13    [W:0.028 / U:0.256 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site