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:
Emmanuel Vadot 2020-09-30 17:09:17 +00:00
parent 4301a5a794
commit a52c8a6502
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=366294

View File

@ -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