diff options
author | benno <benno@FreeBSD.org> | 2003-02-06 10:42:22 +0000 |
---|---|---|
committer | benno <benno@FreeBSD.org> | 2003-02-06 10:42:22 +0000 |
commit | ba64b35fac4fa0d4fad7dc24ce1daaca073a7eac (patch) | |
tree | ec93455617fe510fbd5e75b59531b682abeb52ba /sys/powerpc/powermac | |
parent | 6fd61c14bdaabd0dd53881ba3efe6bc68a8c479a (diff) | |
download | FreeBSD-src-ba64b35fac4fa0d4fad7dc24ce1daaca073a7eac.zip FreeBSD-src-ba64b35fac4fa0d4fad7dc24ce1daaca073a7eac.tar.gz |
If a device tries to allocate an interrupt that's not on it's resource list,
assume that the child knows what it's doing and add it to the resource list.
Diffstat (limited to 'sys/powerpc/powermac')
-rw-r--r-- | sys/powerpc/powermac/macio.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/powerpc/powermac/macio.c b/sys/powerpc/powermac/macio.c index f41a66c..c2b4a8d 100644 --- a/sys/powerpc/powermac/macio.c +++ b/sys/powerpc/powermac/macio.c @@ -444,6 +444,22 @@ macio_alloc_resource(device_t bus, device_t child, int type, int *rid, break; case SYS_RES_IRQ: + rle = resource_list_find(&dinfo->mdi_resources, SYS_RES_IRQ, + *rid); + if (rle == NULL) { + if (dinfo->mdi_ninterrupts >= 5) { + device_printf(bus, + "%s has more than 5 interrupts\n", + device_get_nameunit(child)); + return (NULL); + } + resource_list_add(&dinfo->mdi_resources, SYS_RES_IRQ, + dinfo->mdi_ninterrupts, start, start, 1); + + dinfo->mdi_interrupts[dinfo->mdi_ninterrupts] = start; + dinfo->mdi_ninterrupts++; + } + return (resource_list_alloc(&dinfo->mdi_resources, bus, child, type, rid, start, end, count, flags)); break; |