svn commit: r366146 - head/sys/dev/fdt

Michal Meloun mmel at FreeBSD.org
Fri Sep 25 09:56:51 UTC 2020


Author: mmel
Date: Fri Sep 25 09:56:50 2020
New Revision: 366146
URL: https://svnweb.freebsd.org/changeset/base/366146

Log:
  Make simplebus friendlier for subclassing.
  
  MFC after:	1 week

Modified:
  head/sys/dev/fdt/simplebus.c
  head/sys/dev/fdt/simplebus.h

Modified: head/sys/dev/fdt/simplebus.c
==============================================================================
--- head/sys/dev/fdt/simplebus.c	Fri Sep 25 09:34:00 2020	(r366145)
+++ head/sys/dev/fdt/simplebus.c	Fri Sep 25 09:56:50 2020	(r366146)
@@ -67,7 +67,7 @@ static device_method_t	simplebus_methods[] = {
 	/* Device interface */
 	DEVMETHOD(device_probe,		simplebus_probe),
 	DEVMETHOD(device_attach,	simplebus_attach),
-	DEVMETHOD(device_detach,	bus_generic_detach),
+	DEVMETHOD(device_detach,	simplebus_detach),
 	DEVMETHOD(device_shutdown,	bus_generic_shutdown),
 	DEVMETHOD(device_suspend,	bus_generic_suspend),
 	DEVMETHOD(device_resume,	bus_generic_resume),
@@ -134,7 +134,7 @@ simplebus_probe(device_t dev)
 }
 
 int
-simplebus_attach(device_t dev)
+simplebus_attach_impl(device_t dev)
 {
 	struct		simplebus_softc *sc;
 	phandle_t	node;
@@ -154,7 +154,32 @@ simplebus_attach(device_t dev)
 
 	for (node = OF_child(sc->node); node > 0; node = OF_peer(node))
 		simplebus_add_device(dev, node, 0, NULL, -1, NULL);
+
+	return (0);
+}
+
+int
+simplebus_attach(device_t dev)
+{
+	int	rv;
+
+	rv = simplebus_attach_impl(dev);
+	if (rv != 0)
+		return (rv);
+
 	return (bus_generic_attach(dev));
+}
+
+int
+simplebus_detach(device_t dev)
+{
+	struct		simplebus_softc *sc;
+
+	sc = device_get_softc(dev);
+	if (sc->ranges != NULL)
+		free(sc->ranges, M_DEVBUF);
+
+	return (bus_generic_detach(dev));
 }
 
 void

Modified: head/sys/dev/fdt/simplebus.h
==============================================================================
--- head/sys/dev/fdt/simplebus.h	Fri Sep 25 09:34:00 2020	(r366145)
+++ head/sys/dev/fdt/simplebus.h	Fri Sep 25 09:56:50 2020	(r366146)
@@ -67,5 +67,7 @@ int simplebus_fill_ranges(phandle_t node,
     struct simplebus_softc *sc);
 
 int simplebus_attach(device_t dev);
+int simplebus_attach_impl(device_t dev);
+int simplebus_detach(device_t dev);
 
 #endif	/* _FDT_SIMPLEBUS_H */


More information about the svn-src-head mailing list