summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_bus.c
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>1999-10-12 21:35:51 +0000
committerdfr <dfr@FreeBSD.org>1999-10-12 21:35:51 +0000
commit229cdb91443142db582b7e32098f62f6446c3f3a (patch)
tree8eaacbe4f132a095dfe6be00173bd751633a034d /sys/kern/subr_bus.c
parentb203e98b2b9de39cedbf62c7eb859ade4d60e6bc (diff)
downloadFreeBSD-src-229cdb91443142db582b7e32098f62f6446c3f3a.zip
FreeBSD-src-229cdb91443142db582b7e32098f62f6446c3f3a.tar.gz
* Add struct resource_list* argument to resource_list_alloc and
resource_list_release. This removes the dependancy on the layout of ivars. * Move set_resource, get_resource and delete_resource from isa_if.m to bus_if.m. * Simplify driver code by providing wrappers to those methods: bus_set_resource(dev, type, rid, start, count); bus_get_resource(dev, type, rid, startp, countp); bus_get_resource_start(dev, type, rid); bus_get_resource_count(dev, type, rid); bus_delete_resource(dev, type, rid); * Delete isa_get_rsrc and use bus_get_resource_start instead. * Fix a stupid typo in isa_alloc_resource reported by Takahashi Yoshihiro <nyan@FreeBSD.org>. * Print a diagnostic message if we can't assign resources to a PnP device. * Change device_print_prettyname() so that it doesn't print "(no driver assigned)-1" for anonymous devices.
Diffstat (limited to 'sys/kern/subr_bus.c')
-rw-r--r--sys/kern/subr_bus.c81
1 files changed, 64 insertions, 17 deletions
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index a115151..2370e6c 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -906,24 +906,25 @@ device_get_flags(device_t dev)
int
device_print_prettyname(device_t dev)
{
- const char *name = device_get_name(dev);
+ const char *name = device_get_name(dev);
- if (name == 0)
- name = "(no driver assigned)";
- return(printf("%s%d: ", name, device_get_unit(dev)));
+ if (name == 0)
+ return printf("unknown: ");
+ else
+ return printf("%s%d: ", name, device_get_unit(dev));
}
int
device_printf(device_t dev, const char * fmt, ...)
{
- va_list ap;
- int retval;
+ va_list ap;
+ int retval;
- retval = device_print_prettyname(dev);
- va_start(ap, fmt);
- retval += vprintf(fmt, ap);
- va_end(ap);
- return retval;
+ retval = device_print_prettyname(dev);
+ va_start(ap, fmt);
+ retval += vprintf(fmt, ap);
+ va_end(ap);
+ return retval;
}
static void
@@ -1710,12 +1711,12 @@ resource_list_delete(struct resource_list *rl,
}
struct resource *
-resource_list_alloc(device_t bus, device_t child,
+resource_list_alloc(struct resource_list *rl,
+ device_t bus, device_t child,
int type, int *rid,
u_long start, u_long end,
u_long count, u_int flags)
{
- struct resource_list *rl;
struct resource_list_entry *rle = 0;
int passthrough = (device_get_parent(child) != bus);
int isdefault = (start == 0UL && end == ~0UL);
@@ -1726,7 +1727,6 @@ resource_list_alloc(device_t bus, device_t child,
start, end, count, flags);
}
- rl = device_get_ivars(child);
rle = resource_list_find(rl, type, *rid);
if (!rle)
@@ -1756,10 +1756,10 @@ resource_list_alloc(device_t bus, device_t child,
}
int
-resource_list_release(device_t bus, device_t child,
+resource_list_release(struct resource_list *rl,
+ device_t bus, device_t child,
int type, int rid, struct resource *res)
{
- struct resource_list *rl;
struct resource_list_entry *rle = 0;
int passthrough = (device_get_parent(child) != bus);
int error;
@@ -1769,7 +1769,6 @@ resource_list_release(device_t bus, device_t child,
type, rid, res);
}
- rl = device_get_ivars(child);
rle = resource_list_find(rl, type, rid);
if (!rle)
@@ -2065,6 +2064,54 @@ bus_teardown_intr(device_t dev, struct resource *r, void *cookie)
return (BUS_TEARDOWN_INTR(dev->parent, dev, r, cookie));
}
+int
+bus_set_resource(device_t dev, int type, int rid,
+ u_long start, u_long count)
+{
+ return BUS_SET_RESOURCE(device_get_parent(dev), dev, type, rid,
+ start, count);
+}
+
+int
+bus_get_resource(device_t dev, int type, int rid,
+ u_long *startp, u_long *countp)
+{
+ return BUS_GET_RESOURCE(device_get_parent(dev), dev, type, rid,
+ startp, countp);
+}
+
+u_long
+bus_get_resource_start(device_t dev, int type, int rid)
+{
+ u_long start, count;
+ int error;
+
+ error = BUS_GET_RESOURCE(device_get_parent(dev), dev, type, rid,
+ &start, &count);
+ if (error)
+ return 0;
+ return start;
+}
+
+u_long
+bus_get_resource_count(device_t dev, int type, int rid)
+{
+ u_long start, count;
+ int error;
+
+ error = BUS_GET_RESOURCE(device_get_parent(dev), dev, type, rid,
+ &start, &count);
+ if (error)
+ return 0;
+ return count;
+}
+
+void
+bus_delete_resource(device_t dev, int type, int rid)
+{
+ BUS_DELETE_RESOURCE(device_get_parent(dev), dev, type, rid);
+}
+
static int
root_print_child(device_t dev, device_t child)
{
OpenPOWER on IntegriCloud