PERFORCE change 196206 for review
John Baldwin
jhb at FreeBSD.org
Fri Jul 15 18:09:19 UTC 2011
http://p4web.freebsd.org/@@196206?ac=10
Change 196206 by jhb at jhb_jhbbsd on 2011/07/15 18:08:28
Add an adjust resource method to the ia64 nexus. I think this is
all that ia64 needs to support NEW_PCIB.
Affected files ...
.. //depot/projects/pci/sys/ia64/ia64/nexus.c#4 edit
Differences ...
==== //depot/projects/pci/sys/ia64/ia64/nexus.c#4 (text+ko) ====
@@ -86,6 +86,8 @@
int unit);
static struct resource *nexus_alloc_resource(device_t, device_t, int, int *,
u_long, u_long, u_long, u_int);
+static int nexus_adjust_resource(device_t, device_t, int, struct resource *,
+ u_long, u_long);
static int nexus_activate_resource(device_t, device_t, int, int,
struct resource *);
static int nexus_deactivate_resource(device_t, device_t, int, int,
@@ -122,6 +124,7 @@
DEVMETHOD(bus_print_child, nexus_print_child),
DEVMETHOD(bus_add_child, nexus_add_child),
DEVMETHOD(bus_alloc_resource, nexus_alloc_resource),
+ DEVMETHOD(bus_adjust_resource, nexus_adjust_resource),
DEVMETHOD(bus_release_resource, nexus_release_resource),
DEVMETHOD(bus_activate_resource, nexus_activate_resource),
DEVMETHOD(bus_deactivate_resource, nexus_deactivate_resource),
@@ -238,6 +241,20 @@
return(child);
}
+static struct rman *
+nexus_rman(int type)
+{
+ switch (type) {
+ case SYS_RES_IRQ:
+ return (&irq_rman);
+ case SYS_RES_IOPORT:
+ return (&port_rman);
+ case SYS_RES_MEMORY:
+ return (&mem_rman);
+ default:
+ return (NULL);
+ }
+}
/*
* Allocate a resource on behalf of child. NB: child is usually going to be a
@@ -271,24 +288,10 @@
}
flags &= ~RF_ACTIVE;
+ rm = nexus_rman(type);
+ if (rm == NULL)
+ return (NULL);
- switch (type) {
- case SYS_RES_IRQ:
- rm = &irq_rman;
- break;
-
- case SYS_RES_IOPORT:
- rm = &port_rman;
- break;
-
- case SYS_RES_MEMORY:
- rm = &mem_rman;
- break;
-
- default:
- return 0;
- }
-
rv = rman_reserve_resource(rm, start, end, count, flags, child);
if (rv == 0)
return 0;
@@ -305,6 +308,20 @@
}
static int
+nexus_adjust_resource(device_t bus, device_t child, int type,
+ struct resource *r, u_long start, u_long end)
+{
+ struct rman *rm;
+
+ rm = nexus_rman(type);
+ if (rm == NULL)
+ return (ENXIO);
+ if (!rman_is_region_manager(r, rm))
+ return (EINVAL);
+ return (rman_adjust_resource(r, start, end));
+}
+
+static int
nexus_activate_resource(device_t bus, device_t child, int type, int rid,
struct resource *r)
{
More information about the p4-projects
mailing list