summaryrefslogtreecommitdiffstats
path: root/sys/powerpc
diff options
context:
space:
mode:
authorbenno <benno@FreeBSD.org>2003-02-06 10:42:22 +0000
committerbenno <benno@FreeBSD.org>2003-02-06 10:42:22 +0000
commitba64b35fac4fa0d4fad7dc24ce1daaca073a7eac (patch)
treeec93455617fe510fbd5e75b59531b682abeb52ba /sys/powerpc
parent6fd61c14bdaabd0dd53881ba3efe6bc68a8c479a (diff)
downloadFreeBSD-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')
-rw-r--r--sys/powerpc/powermac/macio.c16
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;
OpenPOWER on IntegriCloud