X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=arch%2Fx86%2Fcpu%2Fpci.c;h=c209f15ec4a8787364080467fffed562eda65cc1;hb=8c38e4d0b8d37dcd3bfd2293481e220b1b4a3a42;hp=e23b233961cec277154b22941565990af7c87cab;hpb=b8d7652c81689a69bc6eaa206cf875bbe632831c;p=oweals%2Fu-boot.git diff --git a/arch/x86/cpu/pci.c b/arch/x86/cpu/pci.c index e23b233961..c209f15ec4 100644 --- a/arch/x86/cpu/pci.c +++ b/arch/x86/cpu/pci.c @@ -151,3 +151,24 @@ int pci_x86_write_config(struct udevice *bus, pci_dev_t bdf, uint offset, return 0; } + +void pci_assign_irqs(int bus, int device, int func, u8 irq[4]) +{ + pci_dev_t bdf; + u8 pin, line; + + bdf = PCI_BDF(bus, device, func); + + pin = x86_pci_read_config8(bdf, PCI_INTERRUPT_PIN); + + /* PCI spec says all values except 1..4 are reserved */ + if ((pin < 1) || (pin > 4)) + return; + + line = irq[pin - 1]; + + debug("Assigning IRQ %d to PCI device %d.%x.%d (INT%c)\n", + line, bus, device, func, 'A' + pin - 1); + + x86_pci_write_config8(bdf, PCI_INTERRUPT_LINE, line); +}