1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-10-19 02:29:40 +00:00

Fix newbus resource allocations

PR:		kern/18744
Submitted by:	Alexander Langer <alex@cichlids.com>
This commit is contained in:
Roger Hardiman 2000-08-24 14:17:06 +00:00
parent 735a59b412
commit dae49011e7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=65049
2 changed files with 16 additions and 10 deletions

View File

@ -292,7 +292,6 @@ bktr_attach( device_t dev )
unsigned int rev;
unsigned int unit;
int error = 0;
int rid;
#ifdef BROOKTREE_IRQ
u_long old_irq, new_irq;
#endif
@ -314,9 +313,10 @@ bktr_attach( device_t dev )
/*
* Map control/status registers.
*/
rid = PCIR_MAPS;
bktr->res_mem = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid,
0, ~0, 1, RF_ACTIVE);
bktr->mem_rid = PCIR_MAPS;
bktr->res_mem = bus_alloc_resource(dev, SYS_RES_MEMORY, &bktr->mem_rid,
0, ~0, 1, RF_ACTIVE);
if (!bktr->res_mem) {
device_printf(dev, "could not map memory\n");
@ -345,9 +345,9 @@ bktr_attach( device_t dev )
/*
* Allocate our interrupt.
*/
rid = 0;
bktr->res_irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1,
RF_SHAREABLE | RF_ACTIVE);
bktr->irq_rid = 0;
bktr->res_irq = bus_alloc_resource(dev, SYS_RES_IRQ, &bktr->irq_rid,
0, ~0, 1, RF_SHAREABLE | RF_ACTIVE);
if (bktr->res_irq == NULL) {
device_printf(dev, "could not map interrupt\n");
error = ENXIO;
@ -426,6 +426,10 @@ bktr_attach( device_t dev )
return 0;
fail:
if (bktr->res_irq)
bus_release_resource(dev, SYS_RES_IRQ, bktr->irq_rid, bktr->res_irq);
if (bktr->res_mem)
bus_release_resource(dev, SYS_RES_IRQ, bktr->mem_rid, bktr->res_mem);
return error;
}
@ -448,9 +452,9 @@ bktr_detach( device_t dev )
* Deallocate resources.
*/
bus_teardown_intr(dev, bktr->res_irq, bktr->res_ih);
bus_release_resource(dev, SYS_RES_IRQ, 0, bktr->res_irq);
bus_release_resource(dev, SYS_RES_MEMORY, PCIR_MAPS, bktr->res_mem);
bus_release_resource(dev, SYS_RES_IRQ, bktr->irq_rid, bktr->res_irq);
bus_release_resource(dev, SYS_RES_MEMORY, bktr->mem_rid, bktr->res_mem);
return 0;
}

View File

@ -527,7 +527,9 @@ struct bktr_softc {
pcici_t tag; /* 2.x PCI tag, for doing PCI commands */
#endif
#if (__FreeBSD_version >= 400000)
int mem_rid; /* 4.x resource id */
struct resource *res_mem; /* 4.x resource descriptor for registers */
int irq_rid; /* 4.x resource id */
struct resource *res_irq; /* 4.x resource descriptor for interrupt */
void *res_ih; /* 4.x newbus interrupt handler cookie */
#endif