PERFORCE change 191384 for review

John Baldwin jhb at FreeBSD.org
Tue Apr 12 17:25:43 UTC 2011


http://p4web.freebsd.org/@@191384?ac=10

Change 191384 by jhb at jhb_fiver on 2011/04/12 17:25:40

	Oops, the PCI-PCI bridge driver needs a custom release resource
	method in the NEW_PCIB case.

Affected files ...

.. //depot/projects/pci/sys/dev/pci/pci_pci.c#12 edit
.. //depot/projects/pci/sys/dev/pci/pcib_private.h#7 edit

Differences ...

==== //depot/projects/pci/sys/dev/pci/pci_pci.c#12 (text+ko) ====

@@ -76,7 +76,11 @@
     DEVMETHOD(bus_write_ivar,		pcib_write_ivar),
     DEVMETHOD(bus_alloc_resource,	pcib_alloc_resource),
     DEVMETHOD(bus_adjust_resource,	pcib_adjust_resource),
+#ifdef NEW_PCIB
+    DEVMETHOD(bus_release_resource,	pcib_release_resource),
+#else
     DEVMETHOD(bus_release_resource,	bus_generic_release_resource),
+#endif
     DEVMETHOD(bus_activate_resource,	bus_generic_activate_resource),
     DEVMETHOD(bus_deactivate_resource,	bus_generic_deactivate_resource),
     DEVMETHOD(bus_setup_intr,		bus_generic_setup_intr),
@@ -1115,6 +1119,25 @@
 #endif
 	return (r);
 }
+
+int
+pcib_release_resource(device_t dev, device_t child, int type, int rid,
+    struct resource *r)
+{
+	struct pcib_softc *sc;
+	int error;
+
+	sc = device_get_softc(dev);
+	if (pcib_is_resource_managed(sc, type, r)) {
+		if (rman_get_flags(r) & RF_ACTIVE) {
+			error = bus_deactivate_resource(child, type, rid, r);
+			if (error)
+				return (error);
+		}
+		return (rman_release_resource(r));
+	}
+	return (bus_generic_release_resource(dev, child, type, rid, r));
+}
 #else
 /*
  * We have to trap resource allocation requests and ensure that the bridge

==== //depot/projects/pci/sys/dev/pci/pcib_private.h#7 (text+ko) ====

@@ -100,6 +100,10 @@
 					    u_long start, u_long end, u_long count, u_int flags);
 int		pcib_adjust_resource(device_t bus, device_t child, int type,
     struct resource *r, u_long start, u_long end);
+#ifdef NEW_PCIB
+int		pcib_release_resource(device_t dev, device_t child, int type, int rid,
+    struct resource *r);
+#endif
 int		pcib_maxslots(device_t dev);
 uint32_t	pcib_read_config(device_t dev, u_int b, u_int s, u_int f, u_int reg, int width);
 void		pcib_write_config(device_t dev, u_int b, u_int s, u_int f, u_int reg, uint32_t val, int width);


More information about the p4-projects mailing list