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