summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_bus.c
diff options
context:
space:
mode:
authortmm <tmm@FreeBSD.org>2001-12-21 21:45:09 +0000
committertmm <tmm@FreeBSD.org>2001-12-21 21:45:09 +0000
commit5d1f367b0b4b0ca0ef88b09b083d747e457c9f7d (patch)
tree2d00173ab25b2c22cef03261498ca1bd9426b18d /sys/kern/subr_bus.c
parentdadac692002f0972c05f77679ecf7a78e8446731 (diff)
downloadFreeBSD-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.c32
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.
*/
OpenPOWER on IntegriCloud