acpi_resource: support multiple IRQs
Some DSDT entries have multiple interrupts for one device. Add support for it. This fixes ahci on NXP LS2160 and genet on RPi4 Submitted by: Greg V <greg@unrelenting.technology> Reviewed by: jhb MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D25145
This commit is contained in:
parent
4301a5a794
commit
a52c8a6502
@ -643,17 +643,13 @@ acpi_res_set_irq(device_t dev, void *context, uint8_t *irq, int count,
|
||||
int trig, int pol)
|
||||
{
|
||||
struct acpi_res_context *cp = (struct acpi_res_context *)context;
|
||||
rman_res_t intr;
|
||||
int i;
|
||||
|
||||
if (cp == NULL || irq == NULL)
|
||||
return;
|
||||
|
||||
/* This implements no resource relocation. */
|
||||
if (count != 1)
|
||||
return;
|
||||
|
||||
intr = *irq;
|
||||
bus_set_resource(dev, SYS_RES_IRQ, cp->ar_nirq++, intr, 1);
|
||||
for (i = 0; i < count; i++)
|
||||
bus_set_resource(dev, SYS_RES_IRQ, cp->ar_nirq++, irq[i], 1);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -661,17 +657,13 @@ acpi_res_set_ext_irq(device_t dev, void *context, uint32_t *irq, int count,
|
||||
int trig, int pol)
|
||||
{
|
||||
struct acpi_res_context *cp = (struct acpi_res_context *)context;
|
||||
rman_res_t intr;
|
||||
int i;
|
||||
|
||||
if (cp == NULL || irq == NULL)
|
||||
return;
|
||||
|
||||
/* This implements no resource relocation. */
|
||||
if (count != 1)
|
||||
return;
|
||||
|
||||
intr = *irq;
|
||||
bus_set_resource(dev, SYS_RES_IRQ, cp->ar_nirq++, intr, 1);
|
||||
for (i = 0; i < count; i++)
|
||||
bus_set_resource(dev, SYS_RES_IRQ, cp->ar_nirq++, irq[i], 1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
x
Reference in New Issue
Block a user