Lines Matching full:irq

83 		    int irq);
95 static int pci_pir_valid_irq(struct pci_link *pci_link, int irq);
195 * Check to see if a possible IRQ setting is valid.
198 pci_pir_valid_irq(struct pci_link *pci_link, int irq) in pci_pir_valid_irq() argument
201 if (!PCI_INTERRUPT_VALID(irq)) in pci_pir_valid_irq()
203 return (pci_link->pl_irqmask & (1 << irq)); in pci_pir_valid_irq()
304 * Try to initialize IRQ based on this device's IRQ.
311 uint8_t irq, pin; in pci_pir_initial_irqs() local
315 irq = pci_pir_search_irq(entry->pe_bus, entry->pe_device, pin); in pci_pir_initial_irqs()
316 if (irq == PCI_INVALID_IRQ || irq == pci_link->pl_irq) in pci_pir_initial_irqs()
320 if (irq >= NUM_ISA_INTERRUPTS) { in pci_pir_initial_irqs()
322 "$PIR: Ignoring invalid BIOS IRQ %d from %d.%d.INT%c for link %#x\n", in pci_pir_initial_irqs()
323 irq, entry->pe_bus, entry->pe_device, pin + 'A', in pci_pir_initial_irqs()
329 * If we don't have an IRQ for this link yet, then we trust the in pci_pir_initial_irqs()
333 if (!pci_pir_valid_irq(pci_link, irq)) in pci_pir_initial_irqs()
335 "$PIR: Using invalid BIOS IRQ %d from %d.%d.INT%c for link %#x\n", in pci_pir_initial_irqs()
336 irq, entry->pe_bus, entry->pe_device, pin + 'A', in pci_pir_initial_irqs()
338 pci_link->pl_irq = irq; in pci_pir_initial_irqs()
344 * We have an IRQ and it doesn't match the current IRQ for this in pci_pir_initial_irqs()
345 * link. If the new IRQ is invalid, then warn about it and ignore in pci_pir_initial_irqs()
346 * it. If the old IRQ is invalid and the new IRQ is valid, then in pci_pir_initial_irqs()
347 * prefer the new IRQ instead. If both IRQs are valid, then just in pci_pir_initial_irqs()
352 if (!pci_pir_valid_irq(pci_link, irq)) { in pci_pir_initial_irqs()
354 "$PIR: BIOS IRQ %d for %d.%d.INT%c is not valid for link %#x\n", in pci_pir_initial_irqs()
355 irq, entry->pe_bus, entry->pe_device, pin + 'A', in pci_pir_initial_irqs()
359 "$PIR: Preferring valid BIOS IRQ %d from %d.%d.INT%c for link %#x to IRQ %d\n", in pci_pir_initial_irqs()
360 irq, entry->pe_bus, entry->pe_device, pin + 'A', in pci_pir_initial_irqs()
362 pci_link->pl_irq = irq; in pci_pir_initial_irqs()
366 "$PIR: BIOS IRQ %d for %d.%d.INT%c does not match link %#x irq %d\n", in pci_pir_initial_irqs()
367 irq, entry->pe_bus, entry->pe_device, pin + 'A', in pci_pir_initial_irqs()
374 * various interrupt routers as they could read the initial IRQ for each
382 int i, irq; in pci_pir_parse() local
400 * valid IRQ. in pci_pir_parse()
404 printf("$PIR: Links after initial IRQ discovery:\n"); in pci_pir_parse()
409 * Allow the user to override the IRQ for a given link device. We in pci_pir_parse()
410 * allow invalid IRQs to be specified but warn about them. An IRQ in pci_pir_parse()
411 * of 255 or 0 clears any preset IRQ. in pci_pir_parse()
416 "hw.pci.link.%#x.irq", pci_link->pl_id); in pci_pir_parse()
417 if (getenv_int(tunable_buffer, &irq) == 0) in pci_pir_parse()
419 if (irq == 0) in pci_pir_parse()
420 irq = PCI_INVALID_IRQ; in pci_pir_parse()
421 if (irq != PCI_INVALID_IRQ && in pci_pir_parse()
422 !pci_pir_valid_irq(pci_link, irq) && bootverbose) in pci_pir_parse()
424 "$PIR: Warning, IRQ %d for link %#x is not listed as valid\n", in pci_pir_parse()
425 irq, pci_link->pl_id); in pci_pir_parse()
427 pci_link->pl_irq = irq; in pci_pir_parse()
467 * CH = IRQ
471 pci_pir_biosroute(int bus, int device, int func, int pin, int irq) in pci_pir_biosroute() argument
477 args.ecx = (irq << 8) | (0xa + pin); in pci_pir_biosroute()
489 int error, irq; in pci_pir_route_interrupt() local
510 * this link only has one valid IRQ, use that. Second, we in pci_pir_route_interrupt()
518 irq = ffs(pci_link->pl_irqmask) - 1; in pci_pir_route_interrupt()
520 irq = pci_pir_choose_irq(pci_link, in pci_pir_route_interrupt()
522 if (!PCI_INTERRUPT_VALID(irq)) in pci_pir_route_interrupt()
523 irq = pci_pir_choose_irq(pci_link, pir_bios_irqs); in pci_pir_route_interrupt()
524 if (!PCI_INTERRUPT_VALID(irq)) in pci_pir_route_interrupt()
525 irq = pci_pir_choose_irq(pci_link, in pci_pir_route_interrupt()
527 if (!PCI_INTERRUPT_VALID(irq)) { in pci_pir_route_interrupt()
534 pci_link->pl_irq = irq; in pci_pir_route_interrupt()
537 /* Ask the BIOS to route this IRQ if we haven't done so already. */ in pci_pir_route_interrupt()
555 printf("$PIR: %d:%d INT%c routed to irq %d\n", bus, device, in pci_pir_route_interrupt()
567 int i, irq, realmask; in pci_pir_choose_irq() local
574 /* Find IRQ with lowest weight. */ in pci_pir_choose_irq()
575 irq = PCI_INVALID_IRQ; in pci_pir_choose_irq()
579 if (irq == PCI_INVALID_IRQ || in pci_pir_choose_irq()
580 pir_interrupt_weight[i] < pir_interrupt_weight[irq]) in pci_pir_choose_irq()
581 irq = i; in pci_pir_choose_irq()
583 if (bootverbose && PCI_INTERRUPT_VALID(irq)) { in pci_pir_choose_irq()
584 printf("$PIR: Found IRQ %d for link %#x from ", irq, in pci_pir_choose_irq()
589 return (irq); in pci_pir_choose_irq()
620 printf("Link IRQ Rtd Ref IRQs\n"); in pci_pir_dump_links()
696 ("link %#x is routed but has invalid PCI IRQ", in pir_resume()
709 "Using %d.%d.INT%c to route link %#x to IRQ %d\n", in pir_resume()