1
0
Fork 0

irq: change ACPI GSI APIs to also take a device argument

We want to use dev_to_node() later on, to be aware of the 'home node'
of the GSI in question.

[ Impact: cleanup, prepare the IRQ code to be more NUMA aware ]

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: Len Brown <lenb@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Len Brown <lenb@kernel.org>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: linux-acpi@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
LKML-Reference: <49F65560.20904@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
hifive-unleashed-5.1
Yinghai Lu 2009-04-27 18:01:20 -07:00 committed by Ingo Molnar
parent 85ac16d033
commit a2f809b08a
9 changed files with 21 additions and 16 deletions

View File

@ -636,7 +636,7 @@ void __init acpi_numa_arch_fixup(void)
* success: return IRQ number (>=0) * success: return IRQ number (>=0)
* failure: return < 0 * failure: return < 0
*/ */
int acpi_register_gsi(u32 gsi, int triggering, int polarity) int acpi_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity)
{ {
if (acpi_irq_model == ACPI_IRQ_MODEL_PLATFORM) if (acpi_irq_model == ACPI_IRQ_MODEL_PLATFORM)
return gsi; return gsi;
@ -678,7 +678,8 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table)
fadt = (struct acpi_table_fadt *)fadt_header; fadt = (struct acpi_table_fadt *)fadt_header;
acpi_register_gsi(fadt->sci_interrupt, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); acpi_register_gsi(NULL, fadt->sci_interrupt, ACPI_LEVEL_SENSITIVE,
ACPI_ACTIVE_LOW);
return 0; return 0;
} }

View File

@ -154,8 +154,8 @@ extern int timer_through_8259;
extern int io_apic_get_unique_id(int ioapic, int apic_id); 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_version(int ioapic);
extern int io_apic_get_redir_entries(int ioapic); extern int io_apic_get_redir_entries(int ioapic);
extern int io_apic_set_pci_routing(int ioapic, int pin, int irq, extern int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin,
int edge_level, int active_high_low); int irq, int edge_level, int active_high_low);
#endif /* CONFIG_ACPI */ #endif /* CONFIG_ACPI */
extern int (*ioapic_renumber_irq)(int ioapic, int irq); extern int (*ioapic_renumber_irq)(int ioapic, int irq);

View File

@ -72,7 +72,9 @@ extern void mp_register_ioapic(int id, u32 address, u32 gsi_base);
extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger,
u32 gsi); u32 gsi);
extern void mp_config_acpi_legacy_irqs(void); extern void mp_config_acpi_legacy_irqs(void);
extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); struct device;
extern int mp_register_gsi(struct device *dev, u32 gsi, int edge_level,
int active_high_low);
extern int acpi_probe_gsi(void); extern int acpi_probe_gsi(void);
#ifdef CONFIG_X86_IO_APIC #ifdef CONFIG_X86_IO_APIC
extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,

View File

@ -522,7 +522,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
* success: return IRQ number (>=0) * success: return IRQ number (>=0)
* failure: return < 0 * failure: return < 0
*/ */
int acpi_register_gsi(u32 gsi, int triggering, int polarity) int acpi_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity)
{ {
unsigned int irq; unsigned int irq;
unsigned int plat_gsi = gsi; unsigned int plat_gsi = gsi;
@ -539,7 +539,7 @@ int acpi_register_gsi(u32 gsi, int triggering, int polarity)
#ifdef CONFIG_X86_IO_APIC #ifdef CONFIG_X86_IO_APIC
if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) { if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) {
plat_gsi = mp_register_gsi(gsi, triggering, polarity); plat_gsi = mp_register_gsi(dev, gsi, triggering, polarity);
} }
#endif #endif
acpi_gsi_to_irq(plat_gsi, &irq); acpi_gsi_to_irq(plat_gsi, &irq);
@ -1158,7 +1158,7 @@ void __init mp_config_acpi_legacy_irqs(void)
} }
} }
int mp_register_gsi(u32 gsi, int triggering, int polarity) int mp_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity)
{ {
int ioapic; int ioapic;
int ioapic_pin; int ioapic_pin;
@ -1253,7 +1253,7 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity)
} }
} }
#endif #endif
io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, io_apic_set_pci_routing(dev, ioapic, ioapic_pin, gsi,
triggering == ACPI_EDGE_SENSITIVE ? 0 : 1, triggering == ACPI_EDGE_SENSITIVE ? 0 : 1,
polarity == ACPI_ACTIVE_HIGH ? 0 : 1); polarity == ACPI_ACTIVE_HIGH ? 0 : 1);
return gsi; return gsi;

View File

@ -3958,7 +3958,8 @@ int __init io_apic_get_version(int ioapic)
} }
#endif #endif
int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity) 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_desc *desc;
struct irq_cfg *cfg; struct irq_cfg *cfg;

View File

@ -401,7 +401,8 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
/* Interrupt Line values above 0xF are forbidden */ /* Interrupt Line values above 0xF are forbidden */
if (dev->irq > 0 && (dev->irq <= 0xF)) { if (dev->irq > 0 && (dev->irq <= 0xF)) {
printk(" - using IRQ %d\n", dev->irq); printk(" - using IRQ %d\n", dev->irq);
acpi_register_gsi(dev->irq, ACPI_LEVEL_SENSITIVE, acpi_register_gsi(&dev->dev, dev->irq,
ACPI_LEVEL_SENSITIVE,
ACPI_ACTIVE_LOW); ACPI_ACTIVE_LOW);
return 0; return 0;
} else { } else {
@ -410,7 +411,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
} }
} }
rc = acpi_register_gsi(gsi, triggering, polarity); rc = acpi_register_gsi(&dev->dev, gsi, triggering, polarity);
if (rc < 0) { if (rc < 0) {
dev_warn(&dev->dev, "PCI INT %c: failed to register GSI\n", dev_warn(&dev->dev, "PCI INT %c: failed to register GSI\n",
pin_name(pin)); pin_name(pin));

View File

@ -224,7 +224,7 @@ static void hpet_timer_set_irq(struct hpet_dev *devp)
break; break;
} }
gsi = acpi_register_gsi(irq, ACPI_LEVEL_SENSITIVE, gsi = acpi_register_gsi(NULL, irq, ACPI_LEVEL_SENSITIVE,
ACPI_ACTIVE_LOW); ACPI_ACTIVE_LOW);
if (gsi > 0) if (gsi > 0)
break; break;
@ -939,7 +939,7 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)
irqp = &res->data.extended_irq; irqp = &res->data.extended_irq;
for (i = 0; i < irqp->interrupt_count; i++) { for (i = 0; i < irqp->interrupt_count; i++) {
irq = acpi_register_gsi(irqp->interrupts[i], irq = acpi_register_gsi(NULL, irqp->interrupts[i],
irqp->triggering, irqp->polarity); irqp->triggering, irqp->polarity);
if (irq < 0) if (irq < 0)
return AE_ERROR; return AE_ERROR;

View File

@ -123,7 +123,7 @@ static void pnpacpi_parse_allocated_irqresource(struct pnp_dev *dev,
} }
flags = irq_flags(triggering, polarity, shareable); flags = irq_flags(triggering, polarity, shareable);
irq = acpi_register_gsi(gsi, triggering, polarity); irq = acpi_register_gsi(&dev->dev, gsi, triggering, polarity);
if (irq >= 0) if (irq >= 0)
pcibios_penalize_isa_irq(irq, 1); pcibios_penalize_isa_irq(irq, 1);
else else

View File

@ -119,7 +119,7 @@ extern int pci_mmcfg_config_num;
extern int sbf_port; extern int sbf_port;
extern unsigned long acpi_realmode_flags; extern unsigned long acpi_realmode_flags;
int acpi_register_gsi (u32 gsi, int triggering, int polarity); int acpi_register_gsi (struct device *dev, u32 gsi, int triggering, int polarity);
int acpi_gsi_to_irq (u32 gsi, unsigned int *irq); int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
#ifdef CONFIG_X86_IO_APIC #ifdef CONFIG_X86_IO_APIC