• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/i386/pci/

Lines Matching refs:pci_link

58 struct pci_link {
59 TAILQ_ENTRY(pci_link) pl_links;
68 struct pci_link **pci_link_ptr;
87 static int pci_pir_choose_irq(struct pci_link *pci_link, int irqmask);
91 static struct pci_link *pci_pir_find_link(uint8_t link_id);
98 static int pci_pir_valid_irq(struct pci_link *pci_link, int irq);
106 static TAILQ_HEAD(, pci_link) pci_links;
167 * Find the pci_link structure for a given link ID.
169 static struct pci_link *
172 struct pci_link *pci_link;
174 TAILQ_FOREACH(pci_link, &pci_links, pl_links) {
175 if (pci_link->pl_id == link_id)
176 return (pci_link);
201 pci_pir_valid_irq(struct pci_link *pci_link, int irq)
206 return (pci_link->pl_irqmask & (1 << irq));
234 struct pci_link *pci_link;
236 pci_link = pci_pir_find_link(intpin->link);
237 if (pci_link != NULL) {
238 pci_link->pl_references++;
239 if (intpin->irqs != pci_link->pl_irqmask) {
245 pci_link->pl_id);
246 pci_link->pl_irqmask &= intpin->irqs;
249 pci_link = malloc(sizeof(struct pci_link), M_PIR, M_WAITOK);
250 pci_link->pl_id = intpin->link;
251 pci_link->pl_irqmask = intpin->irqs;
252 pci_link->pl_irq = PCI_INVALID_IRQ;
253 pci_link->pl_references = 1;
254 pci_link->pl_routed = 0;
255 TAILQ_INSERT_TAIL(&pci_links, pci_link, pl_links);
313 struct pci_link *pci_link;
317 pci_link = pci_pir_find_link(intpin->link);
319 if (irq == PCI_INVALID_IRQ || irq == pci_link->pl_irq)
327 pci_link->pl_id);
335 if (pci_link->pl_irq == PCI_INVALID_IRQ) {
336 if (!pci_pir_valid_irq(pci_link, irq))
340 pci_link->pl_id);
341 pci_link->pl_irq = irq;
342 pci_link->pl_routed = 1;
355 if (!pci_pir_valid_irq(pci_link, irq)) {
359 pci_link->pl_id);
360 } else if (!pci_pir_valid_irq(pci_link, pci_link->pl_irq)) {
364 pci_link->pl_id, pci_link->pl_irq);
365 pci_link->pl_irq = irq;
366 pci_link->pl_routed = 1;
371 pci_link->pl_id, pci_link->pl_irq);
384 struct pci_link *pci_link;
417 TAILQ_FOREACH(pci_link, &pci_links, pl_links) {
419 "hw.pci.link.%#x.irq", pci_link->pl_id);
425 !pci_pir_valid_irq(pci_link, irq) && bootverbose)
428 irq, pci_link->pl_id);
429 pci_link->pl_routed = 0;
430 pci_link->pl_irq = irq;
442 TAILQ_FOREACH(pci_link, &pci_links, pl_links) {
443 if (!PCI_INTERRUPT_VALID(pci_link->pl_irq))
445 pir_bios_irqs |= 1 << pci_link->pl_irq;
446 pir_interrupt_weight[pci_link->pl_irq] +=
447 pci_link->pl_references;
491 struct pci_link *pci_link;
498 pci_link = NULL;
502 lookup.pci_link_ptr = &pci_link;
504 if (pci_link == NULL) {
519 if (!PCI_INTERRUPT_VALID(pci_link->pl_irq)) {
520 if (pci_link->pl_irqmask != 0 && powerof2(pci_link->pl_irqmask))
521 irq = ffs(pci_link->pl_irqmask) - 1;
523 irq = pci_pir_choose_irq(pci_link,
526 irq = pci_pir_choose_irq(pci_link, pir_bios_irqs);
528 irq = pci_pir_choose_irq(pci_link,
537 pci_link->pl_irq = irq;
541 if (!pci_link->pl_routed) {
543 pci_link->pl_irq);
546 if (error && !powerof2(pci_link->pl_irqmask)) {
550 pci_link->pl_routed = 1;
554 BUS_CONFIG_INTR(pir_device, pci_link->pl_irq,
559 pin - 1 + 'A', pci_link->pl_irq);
560 return (pci_link->pl_irq);
568 pci_pir_choose_irq(struct pci_link *pci_link, int irqmask)
573 realmask = pci_link->pl_irqmask & irqmask;
588 pci_link->pl_id);
621 struct pci_link *pci_link;
624 TAILQ_FOREACH(pci_link, &pci_links, pl_links) {
625 printf("%#4x %3d %c %3d ", pci_link->pl_id,
626 pci_link->pl_irq, pci_link->pl_routed ? 'Y' : 'N',
627 pci_link->pl_references);
628 pci_print_irqmask(pci_link->pl_irqmask);
695 struct pci_link *pci_link;
699 TAILQ_FOREACH(pci_link, &pci_links, pl_links) {
700 if (!PCI_INTERRUPT_VALID(pci_link->pl_irq)) {
701 KASSERT(!pci_link->pl_routed,
703 pci_link->pl_id));
706 if (pci_link->pl_routed) {
708 pd.link = pci_link->pl_id;
712 pci_link->pl_id));
717 pci_link->pl_id, pci_link->pl_irq);
719 pci_link->pl_irq);
723 pci_link->pl_id);