If the resource listing obtained from BUS_GET_RESOURCE_LIST() in

ndis_probe_pci() doesn't contain an entry for an IRQ resource, try to
force one to be routed to us anyway by adding an extra call to
bus_alloc_resource(). If this fails, then we have to abort the attach.

Patch provided by jhb, tweaked by me.
This commit is contained in:
Bill Paul 2004-03-09 18:39:40 +00:00
parent 577cf233eb
commit 3e7791af10

View File

@ -262,6 +262,26 @@ ndis_attach_pci(dev)
}
}
/*
* If the BIOS did not set up an interrupt for this device,
* the resource traversal code above will fail to set up
* an IRQ resource. This is usually a bad thing, so try to
* force the allocation of an interrupt here. If one was
* not assigned to us by the BIOS, bus_alloc_resource()
* should route one for us.
*/
if (sc->ndis_irq == NULL) {
rid = 0;
sc->ndis_irq = bus_alloc_resource(dev, SYS_RES_IRQ,
&rid, 0, ~0, 1, RF_SHAREABLE | RF_ACTIVE);
if (sc->ndis_irq == NULL) {
device_printf(dev, "couldn't route interrupt\n");
error = ENXIO;
goto fail;
}
sc->ndis_rescnt++;
}
/*
* Allocate the parent bus DMA tag appropriate for PCI.
*/