summaryrefslogtreecommitdiffstats
path: root/arch/x86/pci/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/pci/irq.c')
-rw-r--r--arch/x86/pci/irq.c143
1 files changed, 48 insertions, 95 deletions
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c
index c422e10337b..6a06a2eb059 100644
--- a/arch/x86/pci/irq.c
+++ b/arch/x86/pci/irq.c
@@ -102,8 +102,7 @@ static struct irq_routing_table * __init pirq_find_routing_table(void)
return rt;
printk(KERN_WARNING "PCI: PIRQ table NOT found at pirqaddr\n");
}
- for (addr = (u8 *) __va(0xf0000); addr < (u8 *) __va(0x100000);
- addr += 16) {
+ for (addr = (u8 *) __va(0xf0000); addr < (u8 *) __va(0x100000); addr += 16) {
rt = pirq_check_routing_table(addr);
if (rt)
return rt;
@@ -125,17 +124,14 @@ static void __init pirq_peer_trick(void)
struct irq_info *e;
memset(busmap, 0, sizeof(busmap));
- for (i = 0; i < (rt->size - sizeof(struct irq_routing_table)) /
- sizeof(struct irq_info); i++) {
+ for (i = 0; i < (rt->size - sizeof(struct irq_routing_table)) / sizeof(struct irq_info); i++) {
e = &rt->slots[i];
#ifdef DEBUG
{
int j;
- DBG(KERN_DEBUG "%02x:%02x slot=%02x", e->bus,
- e->devfn/8, e->slot);
+ DBG(KERN_DEBUG "%02x:%02x slot=%02x", e->bus, e->devfn/8, e->slot);
for (j = 0; j < 4; j++)
- DBG(" %d:%02x/%04x", j, e->irq[j].link,
- e->irq[j].bitmap);
+ DBG(" %d:%02x/%04x", j, e->irq[j].link, e->irq[j].bitmap);
DBG("\n");
}
#endif
@@ -180,8 +176,7 @@ void eisa_set_level_irq(unsigned int irq)
* Common IRQ routing practice: nibbles in config space,
* offset by some magic constant.
*/
-static unsigned int
-read_config_nybble(struct pci_dev *router, unsigned offset, unsigned nr)
+static unsigned int read_config_nybble(struct pci_dev *router, unsigned offset, unsigned nr)
{
u8 x;
unsigned reg = offset + (nr >> 1);
@@ -208,18 +203,15 @@ static void write_config_nybble(struct pci_dev *router, unsigned offset,
*/
static int pirq_ali_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
{
- static const unsigned char irqmap[16] = { 0, 9, 3, 10, 4, 5, 7, 6, 1,
- 11, 0, 12, 0, 14, 0, 15 };
+ static const unsigned char irqmap[16] = { 0, 9, 3, 10, 4, 5, 7, 6, 1, 11, 0, 12, 0, 14, 0, 15 };
WARN_ON_ONCE(pirq > 16);
return irqmap[read_config_nybble(router, 0x48, pirq-1)];
}
-static int
-pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
- static const unsigned char irqmap[16] = { 0, 8, 0, 2, 4, 5, 7, 6, 0, 1,
- 3, 9, 11, 0, 13, 15 };
+ static const unsigned char irqmap[16] = { 0, 8, 0, 2, 4, 5, 7, 6, 0, 1, 3, 9, 11, 0, 13, 15 };
unsigned int val = irqmap[irq];
WARN_ON_ONCE(pirq > 16);
@@ -242,8 +234,7 @@ static int pirq_piix_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
return (x < 16) ? x : 0;
}
-static int
-pirq_piix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_piix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
pci_write_config_byte(router, pirq, irq);
return 1;
@@ -259,8 +250,7 @@ static int pirq_via_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
return read_config_nybble(router, 0x55, pirq == 4 ? 5 : pirq);
}
-static int
-pirq_via_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_via_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
write_config_nybble(router, 0x55, pirq == 4 ? 5 : pirq, irq);
return 1;
@@ -271,8 +261,7 @@ pirq_via_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
* but without the ugly irq number munging.
* However, for 82C586, nibble map is different .
*/
-static int
-pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
+static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
{
static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
@@ -280,8 +269,7 @@ pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
return read_config_nybble(router, 0x55, pirqmap[pirq-1]);
}
-static int
-pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
@@ -303,8 +291,7 @@ static int pirq_ite_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
return read_config_nybble(router, 0x43, pirqmap[pirq-1]);
}
-static int
-pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
static const unsigned char pirqmap[4] = { 1, 0, 2, 3 };
@@ -322,8 +309,7 @@ static int pirq_opti_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
return read_config_nybble(router, 0xb8, pirq >> 4);
}
-static int
-pirq_opti_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_opti_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
write_config_nybble(router, 0xb8, pirq >> 4, irq);
return 1;
@@ -339,8 +325,7 @@ static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
return read_config_nybble(router, 0x5C, (pirq-1)^1);
}
-static int
-pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
write_config_nybble(router, 0x5C, (pirq-1)^1, irq);
return 1;
@@ -423,8 +408,7 @@ static int pirq_sis_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
return (x & PIRQ_SIS_IRQ_DISABLE) ? 0 : (x & PIRQ_SIS_IRQ_MASK);
}
-static int
-pirq_sis_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_sis_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
u8 x;
int reg;
@@ -458,8 +442,7 @@ static int pirq_vlsi_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
return read_config_nybble(router, 0x74, pirq-1);
}
-static int
-pirq_vlsi_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_vlsi_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
WARN_ON_ONCE(pirq >= 9);
if (pirq > 8) {
@@ -481,8 +464,7 @@ pirq_vlsi_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
* 0x00 for ACPI (SCI), 0x01 for USB, 0x02 for IDE0, 0x04 for IDE1,
* and 0x03 for SMBus.
*/
-static int
-pirq_serverworks_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
+static int pirq_serverworks_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
{
outb(pirq, 0xc00);
return inb(0xc01) & 0xf;
@@ -504,24 +486,20 @@ static int pirq_serverworks_set(struct pci_dev *router, struct pci_dev *dev,
* offset 0x56 0-3 PIRQA 4-7 PIRQB
* offset 0x57 0-3 PIRQC 4-7 PIRQD
*/
-static int
-pirq_amd756_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
+static int pirq_amd756_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
{
u8 irq;
irq = 0;
if (pirq <= 4)
irq = read_config_nybble(router, 0x56, pirq - 1);
- printk(KERN_INFO
- "AMD756: dev %04x:%04x, router pirq : %d get irq : %2d\n",
+ printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d get irq : %2d\n",
dev->vendor, dev->device, pirq, irq);
return irq;
}
-static int
-pirq_amd756_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_amd756_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
- printk(KERN_INFO
- "AMD756: dev %04x:%04x, router pirq : %d SET irq : %2d\n",
+ printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d SET irq : %2d\n",
dev->vendor, dev->device, pirq, irq);
if (pirq <= 4)
write_config_nybble(router, 0x56, pirq - 1, irq);
@@ -550,8 +528,7 @@ static int pirq_pico_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
#ifdef CONFIG_PCI_BIOS
-static int
-pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
struct pci_dev *bridge;
int pin = pci_get_interrupt_pin(dev, &bridge);
@@ -560,14 +537,11 @@ pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
#endif
-static __init int
-intel_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int intel_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
static struct pci_device_id __initdata pirq_440gx[] = {
- { PCI_DEVICE(PCI_VENDOR_ID_INTEL,
- PCI_DEVICE_ID_INTEL_82443GX_0) },
- { PCI_DEVICE(PCI_VENDOR_ID_INTEL,
- PCI_DEVICE_ID_INTEL_82443GX_2) },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_0) },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_2) },
{ },
};
@@ -677,8 +651,7 @@ static __init int via_router_probe(struct irq_router *r,
return 0;
}
-static __init int
-vlsi_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int vlsi_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
switch (device) {
case PCI_DEVICE_ID_VLSI_82C534:
@@ -705,8 +678,7 @@ static __init int serverworks_router_probe(struct irq_router *r,
return 0;
}
-static __init int
-sis_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int sis_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
if (device != PCI_DEVICE_ID_SI_503)
return 0;
@@ -717,8 +689,7 @@ sis_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
return 1;
}
-static __init int
-cyrix_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int cyrix_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
switch (device) {
case PCI_DEVICE_ID_CYRIX_5520:
@@ -730,8 +701,7 @@ cyrix_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
return 0;
}
-static __init int
-opti_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int opti_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
switch (device) {
case PCI_DEVICE_ID_OPTI_82C700:
@@ -743,8 +713,7 @@ opti_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
return 0;
}
-static __init int
-ite_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int ite_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
switch (device) {
case PCI_DEVICE_ID_ITE_IT8330G_0:
@@ -756,8 +725,7 @@ ite_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
return 0;
}
-static __init int
-ali_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int ali_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
switch (device) {
case PCI_DEVICE_ID_AL_M1533:
@@ -771,8 +739,7 @@ ali_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
return 0;
}
-static __init int
-amd_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int amd_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
switch (device) {
case PCI_DEVICE_ID_AMD_VIPER_740B:
@@ -792,8 +759,7 @@ amd_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
return 1;
}
-static __init int
-pico_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
+static __init int pico_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
{
switch (device) {
case PCI_DEVICE_ID_PICOPOWER_PT86C523:
@@ -1030,9 +996,8 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
(!(pci_probe & PCI_USE_PIRQ_MASK) || \
((1 << dev2->irq) & mask))) {
#ifndef CONFIG_PCI_MSI
- printk(KERN_INFO
- "IRQ routing conflict for %s, have irq %d, want irq %d\n",
- pci_name(dev2), dev2->irq, irq);
+ printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n",
+ pci_name(dev2), dev2->irq, irq);
#endif
continue;
}
@@ -1098,23 +1063,18 @@ static void __init pcibios_fixup_irqs(void)
* parent slot, and pin number. The SMP code detects such bridged
* busses itself so we should get into this branch reliably.
*/
- if (irq < 0 && dev->bus->parent) {
- /* go back to the bridge */
+ if (irq < 0 && dev->bus->parent) { /* go back to the bridge */
struct pci_dev *bridge = dev->bus->self;
pin = (pin + PCI_SLOT(dev->devfn)) % 4;
irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number,
- PCI_SLOT(bridge->devfn),
- pin);
+ PCI_SLOT(bridge->devfn), pin);
if (irq >= 0)
- printk(KERN_WARNING
- "PCI: using PPB %s[%c] to get irq %d\n",
- pci_name(bridge),
- 'A' + pin, irq);
+ printk(KERN_WARNING "PCI: using PPB %s[%c] to get irq %d\n",
+ pci_name(bridge), 'A' + pin, irq);
}
if (irq >= 0) {
- printk(KERN_INFO
- "PCI->APIC IRQ transform: %s[%c] -> IRQ %d\n",
+ printk(KERN_INFO "PCI->APIC IRQ transform: %s[%c] -> IRQ %d\n",
pci_name(dev), 'A' + pin, irq);
dev->irq = irq;
}
@@ -1180,7 +1140,7 @@ static struct dmi_system_id __initdata pciirq_dmi_table[] = {
{ }
};
-static int __init pcibios_irq_init(void)
+int __init pcibios_irq_init(void)
{
DBG(KERN_DEBUG "PCI: IRQ init\n");
@@ -1218,9 +1178,6 @@ static int __init pcibios_irq_init(void)
return 0;
}
-subsys_initcall(pcibios_irq_init);
-
-
static void pirq_penalize_isa_irq(int irq, int active)
{
/*
@@ -1259,19 +1216,15 @@ static int pirq_enable_irq(struct pci_dev *dev)
if (io_apic_assign_pci_irqs) {
int irq;
- irq = IO_APIC_get_PCI_irq_vector(dev->bus->number,
- PCI_SLOT(dev->devfn), pin);
+ irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, PCI_SLOT(dev->devfn), pin);
/*
- * Busses behind bridges are typically not
- * listed in the MP-table. In this case we have
- * to look up the IRQ based on the parent bus,
- * parent slot, and pin number. The SMP code
- * detects such bridged busses itself so we
- * should get into this branch reliably.
+ * Busses behind bridges are typically not listed in the MP-table.
+ * In this case we have to look up the IRQ based on the parent bus,
+ * parent slot, and pin number. The SMP code detects such bridged
+ * busses itself so we should get into this branch reliably.
*/
temp_dev = dev;
- while (irq < 0 && dev->bus->parent) {
- /* go back to the bridge */
+ while (irq < 0 && dev->bus->parent) { /* go back to the bridge */
struct pci_dev *bridge = dev->bus->self;
pin = (pin + PCI_SLOT(dev->devfn)) % 4;