|
@@ -492,6 +492,26 @@ static int pirq_amd756_set(struct pci_dev *router, struct pci_dev *dev, int pirq
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * PicoPower PT86C523
|
|
|
|
+ */
|
|
|
|
+static int pirq_pico_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
|
|
|
|
+{
|
|
|
|
+ outb(0x10 + ((pirq - 1) >> 1), 0x24);
|
|
|
|
+ return ((pirq - 1) & 1) ? (inb(0x26) >> 4) : (inb(0x26) & 0xf);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int pirq_pico_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
|
|
|
|
+ int irq)
|
|
|
|
+{
|
|
|
|
+ unsigned int x;
|
|
|
|
+ outb(0x10 + ((pirq - 1) >> 1), 0x24);
|
|
|
|
+ x = inb(0x26);
|
|
|
|
+ x = ((pirq - 1) & 1) ? ((x & 0x0f) | (irq << 4)) : ((x & 0xf0) | (irq));
|
|
|
|
+ outb(x, 0x26);
|
|
|
|
+ return 1;
|
|
|
|
+}
|
|
|
|
+
|
|
#ifdef CONFIG_PCI_BIOS
|
|
#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)
|
|
@@ -721,6 +741,24 @@ static __init int amd_router_probe(struct irq_router *r, struct pci_dev *router,
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static __init int pico_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
|
|
|
|
+{
|
|
|
|
+ switch (device) {
|
|
|
|
+ case PCI_DEVICE_ID_PICOPOWER_PT86C523:
|
|
|
|
+ r->name = "PicoPower PT86C523";
|
|
|
|
+ r->get = pirq_pico_get;
|
|
|
|
+ r->set = pirq_pico_set;
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
|
|
+ case PCI_DEVICE_ID_PICOPOWER_PT86C523BBP:
|
|
|
|
+ r->name = "PicoPower PT86C523 rev. BB+";
|
|
|
|
+ r->get = pirq_pico_get;
|
|
|
|
+ r->set = pirq_pico_set;
|
|
|
|
+ return 1;
|
|
|
|
+ }
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
static __initdata struct irq_router_handler pirq_routers[] = {
|
|
static __initdata struct irq_router_handler pirq_routers[] = {
|
|
{ PCI_VENDOR_ID_INTEL, intel_router_probe },
|
|
{ PCI_VENDOR_ID_INTEL, intel_router_probe },
|
|
{ PCI_VENDOR_ID_AL, ali_router_probe },
|
|
{ PCI_VENDOR_ID_AL, ali_router_probe },
|
|
@@ -732,6 +770,7 @@ static __initdata struct irq_router_handler pirq_routers[] = {
|
|
{ PCI_VENDOR_ID_VLSI, vlsi_router_probe },
|
|
{ PCI_VENDOR_ID_VLSI, vlsi_router_probe },
|
|
{ PCI_VENDOR_ID_SERVERWORKS, serverworks_router_probe },
|
|
{ PCI_VENDOR_ID_SERVERWORKS, serverworks_router_probe },
|
|
{ PCI_VENDOR_ID_AMD, amd_router_probe },
|
|
{ PCI_VENDOR_ID_AMD, amd_router_probe },
|
|
|
|
+ { PCI_VENDOR_ID_PICOPOWER, pico_router_probe },
|
|
/* Someone with docs needs to add the ATI Radeon IGP */
|
|
/* Someone with docs needs to add the ATI Radeon IGP */
|
|
{ 0, NULL }
|
|
{ 0, NULL }
|
|
};
|
|
};
|