soc/intel/common/irq: Add function to return IRQ for PCI devfn
The IRQ for a single device may be required elsewhere, therefore provide get_pci_devfn_irq. BUG=b:130217151, b:171580862, b:176858827 Change-Id: Ibebd821767a2698c9e60b09eeeff3bb596359728 Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/55826 Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
e9ee919fac
commit
61005c8eb5
|
@ -7,6 +7,7 @@
|
|||
#include <types.h>
|
||||
|
||||
#define MAX_FNS 8
|
||||
#define INVALID_IRQ -1
|
||||
|
||||
#define ANY_PIRQ(x) [PCI_FUNC(x)] = { .fixed_int_pin = PCI_INT_NONE,\
|
||||
.fixed_pirq = PIRQ_INVALID, \
|
||||
|
@ -61,4 +62,8 @@ bool irq_program_non_pch(void);
|
|||
|
||||
const struct pci_irq_entry *get_cached_pci_irqs(void);
|
||||
|
||||
/* Search the cached PCI IRQ assignment results for the matching devfn and
|
||||
return the corresponding IRQ, or INVALID_IRQ if not found. */
|
||||
int get_pci_devfn_irq(unsigned int devfn);
|
||||
|
||||
#endif /* SOC_INTEL_COMMON_IRQ_H */
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
|
||||
#define IDX2PIN(i) (enum pci_pin)((i) + PCI_INT_A)
|
||||
#define PIN2IDX(p) (size_t)((p) - PCI_INT_A)
|
||||
#define INVALID_IRQ -1
|
||||
|
||||
struct pin_info {
|
||||
enum pin_state {
|
||||
|
@ -429,3 +428,17 @@ bool irq_program_non_pch(void)
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
int get_pci_devfn_irq(unsigned int devfn)
|
||||
{
|
||||
const struct pci_irq_entry *entry = cached_entries;
|
||||
|
||||
while (entry) {
|
||||
if (entry->devfn == devfn)
|
||||
return entry->irq;
|
||||
|
||||
entry = entry->next;
|
||||
}
|
||||
|
||||
return INVALID_IRQ;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue