|
@@ -11,8 +11,8 @@
|
|
|
#include <linux/slab.h>
|
|
|
#include <linux/interrupt.h>
|
|
|
#include <linux/dmi.h>
|
|
|
-#include <asm/io.h>
|
|
|
-#include <asm/smp.h>
|
|
|
+#include <linux/io.h>
|
|
|
+#include <linux/smp.h>
|
|
|
#include <asm/io_apic.h>
|
|
|
#include <linux/irq.h>
|
|
|
#include <linux/acpi.h>
|
|
@@ -61,7 +61,7 @@ void (*pcibios_disable_irq)(struct pci_dev *dev) = NULL;
|
|
|
* and perform checksum verification.
|
|
|
*/
|
|
|
|
|
|
-static inline struct irq_routing_table * pirq_check_routing_table(u8 *addr)
|
|
|
+static inline struct irq_routing_table *pirq_check_routing_table(u8 *addr)
|
|
|
{
|
|
|
struct irq_routing_table *rt;
|
|
|
int i;
|
|
@@ -74,7 +74,7 @@ static inline struct irq_routing_table * pirq_check_routing_table(u8 *addr)
|
|
|
rt->size < sizeof(struct irq_routing_table))
|
|
|
return NULL;
|
|
|
sum = 0;
|
|
|
- for (i=0; i < rt->size; i++)
|
|
|
+ for (i = 0; i < rt->size; i++)
|
|
|
sum += addr[i];
|
|
|
if (!sum) {
|
|
|
DBG(KERN_DEBUG "PCI: Interrupt Routing Table found at 0x%p\n", rt);
|
|
@@ -100,7 +100,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;
|
|
@@ -122,20 +122,20 @@ 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);
|
|
|
- for(j=0; j<4; j++)
|
|
|
+ for (j = 0; j < 4; j++)
|
|
|
DBG(" %d:%02x/%04x", j, e->irq[j].link, e->irq[j].bitmap);
|
|
|
DBG("\n");
|
|
|
}
|
|
|
#endif
|
|
|
busmap[e->bus] = 1;
|
|
|
}
|
|
|
- for(i = 1; i < 256; i++) {
|
|
|
+ for (i = 1; i < 256; i++) {
|
|
|
int node;
|
|
|
if (!busmap[i] || pci_find_bus(0, i))
|
|
|
continue;
|
|
@@ -285,7 +285,7 @@ static int pirq_ite_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
|
|
|
static const unsigned char pirqmap[4] = { 1, 0, 2, 3 };
|
|
|
|
|
|
WARN_ON_ONCE(pirq > 4);
|
|
|
- return read_config_nybble(router,0x43, pirqmap[pirq-1]);
|
|
|
+ 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)
|
|
@@ -314,7 +314,7 @@ static int pirq_opti_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
|
|
|
|
|
|
/*
|
|
|
* Cyrix: nibble offset 0x5C
|
|
|
- * 0x5C bits 7:4 is INTB bits 3:0 is INTA
|
|
|
+ * 0x5C bits 7:4 is INTB bits 3:0 is INTA
|
|
|
* 0x5D bits 7:4 is INTD bits 3:0 is INTC
|
|
|
*/
|
|
|
static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
|
|
@@ -350,7 +350,7 @@ static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
|
|
|
* Apparently there are systems implementing PCI routing table using
|
|
|
* link values 0x01-0x04 and others using 0x41-0x44 for PCI INTA..D.
|
|
|
* We try our best to handle both link mappings.
|
|
|
- *
|
|
|
+ *
|
|
|
* Currently (2003-05-21) it appears most SiS chipsets follow the
|
|
|
* definition of routing registers from the SiS-5595 southbridge.
|
|
|
* According to the SiS 5595 datasheets the revision id's of the
|
|
@@ -370,7 +370,7 @@ static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
|
|
|
*
|
|
|
* 0x62: USBIRQ:
|
|
|
* bit 6 OHCI function disabled (0), enabled (1)
|
|
|
- *
|
|
|
+ *
|
|
|
* 0x6a: ACPI/SCI IRQ: bits 4-6 reserved
|
|
|
*
|
|
|
* 0x7e: Data Acq. Module IRQ - bits 4-6 reserved
|
|
@@ -487,9 +487,7 @@ 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",
|
|
|
dev->vendor, dev->device, pirq, irq);
|
|
|
return irq;
|
|
@@ -497,12 +495,10 @@ static int pirq_amd756_get(struct pci_dev *router, struct pci_dev *dev, int pirq
|
|
|
|
|
|
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);
|
|
|
- }
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -549,50 +545,49 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
|
|
|
if (pci_dev_present(pirq_440gx))
|
|
|
return 0;
|
|
|
|
|
|
- switch(device)
|
|
|
- {
|
|
|
- case PCI_DEVICE_ID_INTEL_82371FB_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82371SB_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82371AB_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82371MX:
|
|
|
- case PCI_DEVICE_ID_INTEL_82443MX_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801AA_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801AB_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801BA_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801BA_10:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801CA_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801CA_12:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801DB_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801E_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_82801EB_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_ESB_1:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH6_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH6_1:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH7_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH7_1:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH7_30:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH7_31:
|
|
|
- case PCI_DEVICE_ID_INTEL_ESB2_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH8_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH8_1:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH8_2:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH8_3:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH8_4:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH9_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH9_1:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH9_2:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH9_3:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH9_4:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH9_5:
|
|
|
- case PCI_DEVICE_ID_INTEL_TOLAPAI_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH10_0:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH10_1:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH10_2:
|
|
|
- case PCI_DEVICE_ID_INTEL_ICH10_3:
|
|
|
- r->name = "PIIX/ICH";
|
|
|
- r->get = pirq_piix_get;
|
|
|
- r->set = pirq_piix_set;
|
|
|
- return 1;
|
|
|
+ switch (device) {
|
|
|
+ case PCI_DEVICE_ID_INTEL_82371FB_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82371SB_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82371AB_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82371MX:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82443MX_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801AA_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801AB_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801BA_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801BA_10:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801CA_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801CA_12:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801DB_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801E_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_82801EB_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ESB_1:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH6_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH6_1:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH7_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH7_1:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH7_30:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH7_31:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ESB2_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH8_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH8_1:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH8_2:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH8_3:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH8_4:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH9_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH9_1:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH9_2:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH9_3:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH9_4:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH9_5:
|
|
|
+ case PCI_DEVICE_ID_INTEL_TOLAPAI_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH10_0:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH10_1:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH10_2:
|
|
|
+ case PCI_DEVICE_ID_INTEL_ICH10_3:
|
|
|
+ r->name = "PIIX/ICH";
|
|
|
+ r->get = pirq_piix_get;
|
|
|
+ r->set = pirq_piix_set;
|
|
|
+ return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -606,7 +601,7 @@ static __init int via_router_probe(struct irq_router *r,
|
|
|
* workarounds for some buggy BIOSes
|
|
|
*/
|
|
|
if (device == PCI_DEVICE_ID_VIA_82C586_0) {
|
|
|
- switch(router->device) {
|
|
|
+ switch (router->device) {
|
|
|
case PCI_DEVICE_ID_VIA_82C686:
|
|
|
/*
|
|
|
* Asus k7m bios wrongly reports 82C686A
|
|
@@ -624,7 +619,7 @@ static __init int via_router_probe(struct irq_router *r,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- switch(device) {
|
|
|
+ switch (device) {
|
|
|
case PCI_DEVICE_ID_VIA_82C586_0:
|
|
|
r->name = "VIA";
|
|
|
r->get = pirq_via586_get;
|
|
@@ -647,13 +642,12 @@ static __init int via_router_probe(struct irq_router *r,
|
|
|
|
|
|
static __init int vlsi_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
|
|
|
{
|
|
|
- switch(device)
|
|
|
- {
|
|
|
- case PCI_DEVICE_ID_VLSI_82C534:
|
|
|
- r->name = "VLSI 82C534";
|
|
|
- r->get = pirq_vlsi_get;
|
|
|
- r->set = pirq_vlsi_set;
|
|
|
- return 1;
|
|
|
+ switch (device) {
|
|
|
+ case PCI_DEVICE_ID_VLSI_82C534:
|
|
|
+ r->name = "VLSI 82C534";
|
|
|
+ r->get = pirq_vlsi_get;
|
|
|
+ r->set = pirq_vlsi_set;
|
|
|
+ return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -661,14 +655,13 @@ static __init int vlsi_router_probe(struct irq_router *r, struct pci_dev *router
|
|
|
|
|
|
static __init int serverworks_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
|
|
|
{
|
|
|
- switch(device)
|
|
|
- {
|
|
|
- case PCI_DEVICE_ID_SERVERWORKS_OSB4:
|
|
|
- case PCI_DEVICE_ID_SERVERWORKS_CSB5:
|
|
|
- r->name = "ServerWorks";
|
|
|
- r->get = pirq_serverworks_get;
|
|
|
- r->set = pirq_serverworks_set;
|
|
|
- return 1;
|
|
|
+ switch (device) {
|
|
|
+ case PCI_DEVICE_ID_SERVERWORKS_OSB4:
|
|
|
+ case PCI_DEVICE_ID_SERVERWORKS_CSB5:
|
|
|
+ r->name = "ServerWorks";
|
|
|
+ r->get = pirq_serverworks_get;
|
|
|
+ r->set = pirq_serverworks_set;
|
|
|
+ return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -677,7 +670,7 @@ static __init int sis_router_probe(struct irq_router *r, struct pci_dev *router,
|
|
|
{
|
|
|
if (device != PCI_DEVICE_ID_SI_503)
|
|
|
return 0;
|
|
|
-
|
|
|
+
|
|
|
r->name = "SIS";
|
|
|
r->get = pirq_sis_get;
|
|
|
r->set = pirq_sis_set;
|
|
@@ -686,47 +679,43 @@ static __init int sis_router_probe(struct irq_router *r, struct pci_dev *router,
|
|
|
|
|
|
static __init int cyrix_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
|
|
|
{
|
|
|
- switch(device)
|
|
|
- {
|
|
|
- case PCI_DEVICE_ID_CYRIX_5520:
|
|
|
- r->name = "NatSemi";
|
|
|
- r->get = pirq_cyrix_get;
|
|
|
- r->set = pirq_cyrix_set;
|
|
|
- return 1;
|
|
|
+ switch (device) {
|
|
|
+ case PCI_DEVICE_ID_CYRIX_5520:
|
|
|
+ r->name = "NatSemi";
|
|
|
+ r->get = pirq_cyrix_get;
|
|
|
+ r->set = pirq_cyrix_set;
|
|
|
+ return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static __init int opti_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
|
|
|
{
|
|
|
- switch(device)
|
|
|
- {
|
|
|
- case PCI_DEVICE_ID_OPTI_82C700:
|
|
|
- r->name = "OPTI";
|
|
|
- r->get = pirq_opti_get;
|
|
|
- r->set = pirq_opti_set;
|
|
|
- return 1;
|
|
|
+ switch (device) {
|
|
|
+ case PCI_DEVICE_ID_OPTI_82C700:
|
|
|
+ r->name = "OPTI";
|
|
|
+ r->get = pirq_opti_get;
|
|
|
+ r->set = pirq_opti_set;
|
|
|
+ return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
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:
|
|
|
- r->name = "ITE";
|
|
|
- r->get = pirq_ite_get;
|
|
|
- r->set = pirq_ite_set;
|
|
|
- return 1;
|
|
|
+ switch (device) {
|
|
|
+ case PCI_DEVICE_ID_ITE_IT8330G_0:
|
|
|
+ r->name = "ITE";
|
|
|
+ r->get = pirq_ite_get;
|
|
|
+ r->set = pirq_ite_set;
|
|
|
+ return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static __init int ali_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
|
|
|
{
|
|
|
- switch(device)
|
|
|
- {
|
|
|
+ switch (device) {
|
|
|
case PCI_DEVICE_ID_AL_M1533:
|
|
|
case PCI_DEVICE_ID_AL_M1563:
|
|
|
printk(KERN_DEBUG "PCI: Using ALI IRQ Router\n");
|
|
@@ -740,25 +729,24 @@ static __init int ali_router_probe(struct irq_router *r, struct pci_dev *router,
|
|
|
|
|
|
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:
|
|
|
- r->name = "AMD756";
|
|
|
- break;
|
|
|
- case PCI_DEVICE_ID_AMD_VIPER_7413:
|
|
|
- r->name = "AMD766";
|
|
|
- break;
|
|
|
- case PCI_DEVICE_ID_AMD_VIPER_7443:
|
|
|
- r->name = "AMD768";
|
|
|
- break;
|
|
|
- default:
|
|
|
- return 0;
|
|
|
+ switch (device) {
|
|
|
+ case PCI_DEVICE_ID_AMD_VIPER_740B:
|
|
|
+ r->name = "AMD756";
|
|
|
+ break;
|
|
|
+ case PCI_DEVICE_ID_AMD_VIPER_7413:
|
|
|
+ r->name = "AMD766";
|
|
|
+ break;
|
|
|
+ case PCI_DEVICE_ID_AMD_VIPER_7443:
|
|
|
+ r->name = "AMD768";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return 0;
|
|
|
}
|
|
|
r->get = pirq_amd756_get;
|
|
|
r->set = pirq_amd756_set;
|
|
|
return 1;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
static __init int pico_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
|
|
|
{
|
|
|
switch (device) {
|
|
@@ -800,7 +788,7 @@ static struct pci_dev *pirq_router_dev;
|
|
|
* FIXME: should we have an option to say "generic for
|
|
|
* chipset" ?
|
|
|
*/
|
|
|
-
|
|
|
+
|
|
|
static void __init pirq_find_router(struct irq_router *r)
|
|
|
{
|
|
|
struct irq_routing_table *rt = pirq_table;
|
|
@@ -819,7 +807,7 @@ static void __init pirq_find_router(struct irq_router *r)
|
|
|
r->name = "default";
|
|
|
r->get = NULL;
|
|
|
r->set = NULL;
|
|
|
-
|
|
|
+
|
|
|
DBG(KERN_DEBUG "PCI: Attempting to find IRQ router for %04x:%04x\n",
|
|
|
rt->rtr_vendor, rt->rtr_device);
|
|
|
|
|
@@ -830,7 +818,7 @@ static void __init pirq_find_router(struct irq_router *r)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- for( h = pirq_routers; h->vendor; h++) {
|
|
|
+ for (h = pirq_routers; h->vendor; h++) {
|
|
|
/* First look for a router match */
|
|
|
if (rt->rtr_vendor == h->vendor && h->probe(r, pirq_router_dev, rt->rtr_device))
|
|
|
break;
|
|
@@ -882,7 +870,7 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
|
|
|
|
|
|
if (!pirq_table)
|
|
|
return 0;
|
|
|
-
|
|
|
+
|
|
|
DBG(KERN_DEBUG "IRQ for %s[%c]", pci_name(dev), 'A' + pin);
|
|
|
info = pirq_get_info(dev);
|
|
|
if (!info) {
|
|
@@ -921,8 +909,10 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
|
|
|
*/
|
|
|
newirq = dev->irq;
|
|
|
if (newirq && !((1 << newirq) & mask)) {
|
|
|
- if ( pci_probe & PCI_USE_PIRQ_MASK) newirq = 0;
|
|
|
- else printk("\n" KERN_WARNING
|
|
|
+ if (pci_probe & PCI_USE_PIRQ_MASK)
|
|
|
+ newirq = 0;
|
|
|
+ else
|
|
|
+ printk("\n" KERN_WARNING
|
|
|
"PCI: IRQ %i for device %s doesn't match PIRQ mask "
|
|
|
"- try pci=usepirqmask\n" KERN_DEBUG, newirq,
|
|
|
pci_name(dev));
|
|
@@ -942,8 +932,8 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
|
|
|
irq = pirq & 0xf;
|
|
|
DBG(" -> hardcoded IRQ %d\n", irq);
|
|
|
msg = "Hardcoded";
|
|
|
- } else if ( r->get && (irq = r->get(pirq_router_dev, dev, pirq)) && \
|
|
|
- ((!(pci_probe & PCI_USE_PIRQ_MASK)) || ((1 << irq) & mask)) ) {
|
|
|
+ } else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq)) && \
|
|
|
+ ((!(pci_probe & PCI_USE_PIRQ_MASK)) || ((1 << irq) & mask))) {
|
|
|
DBG(" -> got IRQ %d\n", irq);
|
|
|
msg = "Found";
|
|
|
eisa_set_level_irq(irq);
|
|
@@ -978,15 +968,15 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
|
|
|
continue;
|
|
|
if (info->irq[pin].link == pirq) {
|
|
|
/* We refuse to override the dev->irq information. Give a warning! */
|
|
|
- if ( dev2->irq && dev2->irq != irq && \
|
|
|
+ if (dev2->irq && dev2->irq != irq && \
|
|
|
(!(pci_probe & PCI_USE_PIRQ_MASK) || \
|
|
|
- ((1 << dev2->irq) & mask)) ) {
|
|
|
+ ((1 << dev2->irq) & mask))) {
|
|
|
#ifndef CONFIG_PCI_MSI
|
|
|
- printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n",
|
|
|
+ printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n",
|
|
|
pci_name(dev2), dev2->irq, irq);
|
|
|
#endif
|
|
|
- continue;
|
|
|
- }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
dev2->irq = irq;
|
|
|
pirq_penalty[irq]++;
|
|
|
if (dev != dev2)
|
|
@@ -1024,8 +1014,7 @@ static void __init pcibios_fixup_irqs(void)
|
|
|
/*
|
|
|
* Recalculate IRQ numbers if we use the I/O APIC.
|
|
|
*/
|
|
|
- if (io_apic_assign_pci_irqs)
|
|
|
- {
|
|
|
+ if (io_apic_assign_pci_irqs) {
|
|
|
int irq;
|
|
|
|
|
|
if (pin) {
|
|
@@ -1038,10 +1027,10 @@ static void __init pcibios_fixup_irqs(void)
|
|
|
* busses itself so we should get into this branch reliably.
|
|
|
*/
|
|
|
if (irq < 0 && dev->bus->parent) { /* go back to the bridge */
|
|
|
- struct pci_dev * bridge = dev->bus->self;
|
|
|
+ struct pci_dev *bridge = dev->bus->self;
|
|
|
|
|
|
pin = (pin + PCI_SLOT(dev->devfn)) % 4;
|
|
|
- irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number,
|
|
|
+ irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number,
|
|
|
PCI_SLOT(bridge->devfn), pin);
|
|
|
if (irq >= 0)
|
|
|
printk(KERN_WARNING "PCI: using PPB %s[%c] to get irq %d\n",
|
|
@@ -1131,7 +1120,7 @@ static int __init pcibios_irq_init(void)
|
|
|
pirq_find_router(&pirq_router);
|
|
|
if (pirq_table->exclusive_irqs) {
|
|
|
int i;
|
|
|
- for (i=0; i<16; i++)
|
|
|
+ for (i = 0; i < 16; i++)
|
|
|
if (!(pirq_table->exclusive_irqs & (1 << i)))
|
|
|
pirq_penalty[i] += 100;
|
|
|
}
|
|
@@ -1196,10 +1185,10 @@ static int pirq_enable_irq(struct pci_dev *dev)
|
|
|
*/
|
|
|
temp_dev = dev;
|
|
|
while (irq < 0 && dev->bus->parent) { /* go back to the bridge */
|
|
|
- struct pci_dev * bridge = dev->bus->self;
|
|
|
+ struct pci_dev *bridge = dev->bus->self;
|
|
|
|
|
|
pin = (pin + PCI_SLOT(dev->devfn)) % 4;
|
|
|
- irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number,
|
|
|
+ irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number,
|
|
|
PCI_SLOT(bridge->devfn), pin);
|
|
|
if (irq >= 0)
|
|
|
printk(KERN_WARNING "PCI: using PPB %s[%c] to get irq %d\n",
|