diff options
author | tmm <tmm@FreeBSD.org> | 2001-12-21 21:45:09 +0000 |
---|---|---|
committer | tmm <tmm@FreeBSD.org> | 2001-12-21 21:45:09 +0000 |
commit | 5d1f367b0b4b0ca0ef88b09b083d747e457c9f7d (patch) | |
tree | 2d00173ab25b2c22cef03261498ca1bd9426b18d /sys/kern/subr_bus.c | |
parent | dadac692002f0972c05f77679ecf7a78e8446731 (diff) | |
download | FreeBSD-src-5d1f367b0b4b0ca0ef88b09b083d747e457c9f7d.zip FreeBSD-src-5d1f367b0b4b0ca0ef88b09b083d747e457c9f7d.tar.gz |
Add a generic __BUS_ACCESSOR macro to construct ivar accessor functions,
and a generic resource_list_print_type() function to print all resouces
of a certain type in a resource list.
Use ulmin()/ulmax() instead of min()/max() in two places to handle
u_longs correctly.
Diffstat (limited to 'sys/kern/subr_bus.c')
-rw-r--r-- | sys/kern/subr_bus.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index 7e0e86f..df73c8f 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -1207,8 +1207,8 @@ resource_list_alloc(struct resource_list *rl, device_t bus, device_t child, if (isdefault) { start = rle->start; - count = max(count, rle->count); - end = max(rle->end, start + count - 1); + count = ulmax(count, rle->count); + end = ulmax(rle->end, start + count - 1); } rle->res = BUS_ALLOC_RESOURCE(device_get_parent(bus), child, @@ -1255,6 +1255,34 @@ resource_list_release(struct resource_list *rl, device_t bus, device_t child, return (0); } +int +resource_list_print_type(struct resource_list *rl, const char *name, int type, + const char *format) +{ + struct resource_list_entry *rle; + int printed, retval; + + printed = 0; + retval = 0; + /* Yes, this is kinda cheating */ + SLIST_FOREACH(rle, rl, link) { + if (rle->type == type) { + if (printed == 0) + retval += printf(" %s ", name); + else + retval += printf(","); + printed++; + retval += printf(format, rle->start); + if (rle->count > 1) { + retval += printf("-"); + retval += printf(format, rle->start + + rle->count - 1); + } + } + } + return retval; +} + /* * Call DEVICE_IDENTIFY for each driver. */ |