Bug #804 ยป new-bus-resources-functions.patch
sys/kern/subr_bus.c | ||
---|---|---|
* less-wordy code. In the future, it might make sense for this code
|
||
* to maintain some sort of a list of resources allocated by each device.
|
||
*/
|
||
int
|
||
bus_alloc_resources(device_t dev, struct resource_spec *rs,
|
||
struct resource **res)
|
||
{
|
||
int i;
|
||
for (i = 0; rs[i].type != -1; i++)
|
||
res[i] = NULL;
|
||
for (i = 0; rs[i].type != -1; i++) {
|
||
res[i] = bus_alloc_resource_any(dev,
|
||
rs[i].type, &rs[i].rid, rs[i].flags);
|
||
if (res[i] == NULL) {
|
||
bus_release_resources(dev, rs, res);
|
||
return (ENXIO);
|
||
}
|
||
}
|
||
return (0);
|
||
}
|
||
void
|
||
bus_release_resources(device_t dev, const struct resource_spec *rs,
|
||
struct resource **res)
|
||
{
|
||
int i;
|
||
for (i = 0; rs[i].type != -1; i++)
|
||
if (res[i] != NULL) {
|
||
bus_release_resource(
|
||
dev, rs[i].type, rs[i].rid, res[i]);
|
||
res[i] = NULL;
|
||
}
|
||
}
|
||
struct resource *
|
||
bus_alloc_resource(device_t dev, int type, int *rid, u_long start, u_long end,
|
||
u_long count, u_int flags)
|
sys/sys/bus.h | ||
---|---|---|
* Wrapper functions for the BUS_*_RESOURCE methods to make client code
|
||
* a little simpler.
|
||
*/
|
||
struct resource_spec {
|
||
int type;
|
||
int rid;
|
||
int flags;
|
||
};
|
||
int bus_alloc_resources(device_t dev, struct resource_spec *rs,
|
||
struct resource **res);
|
||
void bus_release_resources(device_t dev, const struct resource_spec *rs,
|
||
struct resource **res);
|
||
struct resource *bus_alloc_resource(device_t dev, int type, int *rid,
|
||
u_long start, u_long end, u_long count,
|
||
u_int flags);
|