Lines Matching refs:irq
133 DBG(" %d:%02x/%04x", j, e->irq[j].link, e->irq[j].bitmap); in pirq_peer_trick()
152 void elcr_set_level_irq(unsigned int irq) in elcr_set_level_irq() argument
154 unsigned char mask = 1 << (irq & 7); in elcr_set_level_irq()
155 unsigned int port = 0x4d0 + (irq >> 3); in elcr_set_level_irq()
159 if (irq >= 16 || (1 << irq) & elcr_irq_mask) in elcr_set_level_irq()
162 elcr_irq_mask |= (1 << irq); in elcr_set_level_irq()
163 printk(KERN_DEBUG "PCI: setting IRQ %u as level-triggered\n", irq); in elcr_set_level_irq()
208 static int pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_ali_set() argument
211 unsigned int val = irqmap[irq]; in pirq_ali_set()
233 static int pirq_piix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_piix_set() argument
235 pci_write_config_byte(router, pirq, irq); in pirq_piix_set()
249 static int pirq_via_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_via_set() argument
251 write_config_nybble(router, 0x55, pirq == 4 ? 5 : pirq, irq); in pirq_via_set()
268 static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_via586_set() argument
273 write_config_nybble(router, 0x55, pirqmap[pirq-1], irq); in pirq_via586_set()
290 static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_ite_set() argument
295 write_config_nybble(router, 0x43, pirqmap[pirq-1], irq); in pirq_ite_set()
308 static int pirq_opti_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_opti_set() argument
310 write_config_nybble(router, 0xb8, pirq >> 4, irq); in pirq_opti_set()
324 static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_cyrix_set() argument
326 write_config_nybble(router, 0x5C, (pirq-1)^1, irq); in pirq_cyrix_set()
407 static int pirq_sis_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_sis_set() argument
417 x |= irq ? irq: PIRQ_SIS_IRQ_DISABLE; in pirq_sis_set()
441 static int pirq_vlsi_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_vlsi_set() argument
448 write_config_nybble(router, 0x74, pirq-1, irq); in pirq_vlsi_set()
470 int pirq, int irq) in pirq_serverworks_set() argument
473 outb(irq, 0xc01); in pirq_serverworks_set()
487 u8 irq; in pirq_amd756_get() local
488 irq = 0; in pirq_amd756_get()
490 irq = read_config_nybble(router, 0x56, pirq - 1); in pirq_amd756_get()
493 dev->vendor, dev->device, pirq, irq); in pirq_amd756_get()
494 return irq; in pirq_amd756_get()
497 static int pirq_amd756_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_amd756_set() argument
501 dev->vendor, dev->device, pirq, irq); in pirq_amd756_set()
503 write_config_nybble(router, 0x56, pirq - 1, irq); in pirq_amd756_set()
517 int irq) in pirq_pico_set() argument
522 x = ((pirq - 1) & 1) ? ((x & 0x0f) | (irq << 4)) : ((x & 0xf0) | (irq)); in pirq_pico_set()
529 static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) in pirq_bios_set() argument
533 return pcibios_set_irq_routing(bridge, pin - 1, irq); in pirq_bios_set()
884 int irq = 0; in pcibios_lookup_irq() local
911 pirq = info->irq[pin - 1].link; in pcibios_lookup_irq()
912 mask = info->irq[pin - 1].bitmap; in pcibios_lookup_irq()
924 if (broken_hp_bios_irq9 && pirq == 0x59 && dev->irq == 9) { in pcibios_lookup_irq()
925 dev->irq = 11; in pcibios_lookup_irq()
931 if (acer_tm360_irqrouting && dev->irq == 11 && in pcibios_lookup_irq()
935 dev->irq = r->get(pirq_router_dev, dev, pirq); in pcibios_lookup_irq()
936 pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); in pcibios_lookup_irq()
943 newirq = dev->irq; in pcibios_lookup_irq()
964 irq = pirq & 0xf; in pcibios_lookup_irq()
966 } else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq)) && \ in pcibios_lookup_irq()
967 ((!(pci_probe & PCI_USE_PIRQ_MASK)) || ((1 << irq) & mask))) { in pcibios_lookup_irq()
969 elcr_set_level_irq(irq); in pcibios_lookup_irq()
975 irq = newirq; in pcibios_lookup_irq()
979 if (!irq) { in pcibios_lookup_irq()
982 irq = newirq; in pcibios_lookup_irq()
988 dev_info(&dev->dev, "%s PCI INT %c -> IRQ %d\n", msg, 'A' + pin - 1, irq); in pcibios_lookup_irq()
999 if (info->irq[pin - 1].link == pirq) { in pcibios_lookup_irq()
1004 if (dev2->irq && dev2->irq != irq && \ in pcibios_lookup_irq()
1006 ((1 << dev2->irq) & mask))) { in pcibios_lookup_irq()
1010 dev2->irq, irq); in pcibios_lookup_irq()
1014 dev2->irq = irq; in pcibios_lookup_irq()
1015 pirq_penalty[irq]++; in pcibios_lookup_irq()
1018 irq, pci_name(dev2)); in pcibios_lookup_irq()
1036 if (dev->irq >= 16) { in pcibios_fixup_irqs()
1037 dev_dbg(&dev->dev, "ignoring bogus IRQ %d\n", dev->irq); in pcibios_fixup_irqs()
1038 dev->irq = 0; in pcibios_fixup_irqs()
1044 if (pirq_penalty[dev->irq] >= 100 && in pcibios_fixup_irqs()
1045 pirq_penalty[dev->irq] < 100000) in pcibios_fixup_irqs()
1046 pirq_penalty[dev->irq] = 0; in pcibios_fixup_irqs()
1047 pirq_penalty[dev->irq]++; in pcibios_fixup_irqs()
1062 if (!dev->irq) in pcibios_fixup_irqs()
1165 static void pirq_penalize_isa_irq(int irq, int active) in pirq_penalize_isa_irq() argument
1171 if (irq < 16) { in pirq_penalize_isa_irq()
1173 pirq_penalty[irq] += 1000; in pirq_penalize_isa_irq()
1175 pirq_penalty[irq] += 100; in pirq_penalize_isa_irq()
1179 void pcibios_penalize_isa_irq(int irq, int active) in pcibios_penalize_isa_irq() argument
1183 acpi_penalize_isa_irq(irq, active); in pcibios_penalize_isa_irq()
1186 pirq_penalize_isa_irq(irq, active); in pcibios_penalize_isa_irq()
1197 if (!io_apic_assign_pci_irqs && dev->irq) in pirq_enable_irq()
1203 int irq; in pirq_enable_irq() local
1205 if (dev->irq_managed && dev->irq > 0) in pirq_enable_irq()
1208 irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, in pirq_enable_irq()
1217 while (irq < 0 && dev->bus->parent) { /* go back to the bridge */ in pirq_enable_irq()
1221 irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number, in pirq_enable_irq()
1224 if (irq >= 0) in pirq_enable_irq()
1228 irq); in pirq_enable_irq()
1232 if (irq >= 0) { in pirq_enable_irq()
1234 dev->irq = irq; in pirq_enable_irq()
1236 "INT %c -> IRQ %d\n", 'A' + pin - 1, irq); in pirq_enable_irq()
1275 dev->irq_managed && dev->irq) { in pirq_disable_irq()
1276 mp_unmap_irq(dev->irq); in pirq_disable_irq()
1277 dev->irq = 0; in pirq_disable_irq()