[PATCH] Bring in the latest agp code from FreeBSD HEAD
Hasso Tepper
hasso at estpak.ee
Mon Sep 10 02:58:47 PDT 2007
Oops! The agp patch requires one more patch from my queue. It's attached
to this mail. Any objections to commit this?
And i810 crash issue I had, turned out to be a documented feature - i810
doesn't allocate offscreen memory by default, seems. The "LinearAlloc"
option helps. Really weird ... Thanks to anyone pointing me to this.
--
Hasso
# HG changeset patch
# User Hasso Tepper <hasso at estpak.ee>
# Date 1189417456 -10800
# Branch HEAD
# Node ID d331609b916a50a7f6c4ff52ee2f0436c38c65cd
# Parent 7c11353afd8ef8ac40acb4827e2304bd0a2c4459
Add bus_alloc_resources()/bus_release_resources() functions.
They simplify the code and make porting drivers (initially agp) from
FreeBSD easier.
Obtained-from: FreeBSD
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -2319,6 +2319,39 @@ bus_generic_child_present(device_t bus,
* 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)
diff --git a/sys/sys/bus.h b/sys/sys/bus.h
--- a/sys/sys/bus.h
+++ b/sys/sys/bus.h
@@ -252,6 +252,17 @@ int bus_generic_rl_release_resource (dev
* 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);
More information about the Submit
mailing list