Author: andrew
Date: Mon Aug  3 16:26:10 2020
New Revision: 363799
URL: https://svnweb.freebsd.org/changeset/base/363799

Log:
  Allow child classes of simplebus to call attach directly
  
  Reduce code duplication when a bus is subclassed from simplebus by allowing
  them to call simplebus_attach directly. This is useful when the child bus
  will just implement the same calls.
  
  As not all children will expect to have a ranges property, e.g. the
  Raspberry Pi firmware, allow this property to be missing.
  
  Reviewed by:  manu
  Sponsored by: Innovate UK
  Differential Revision:        https://reviews.freebsd.org/D25925

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        Mon Aug  3 13:12:07 2020        
(r363798)
+++ head/sys/dev/fdt/simplebus.c        Mon Aug  3 16:26:10 2020        
(r363799)
@@ -46,7 +46,6 @@ __FBSDID("$FreeBSD$");
  * Bus interface.
  */
 static int             simplebus_probe(device_t dev);
-static int             simplebus_attach(device_t dev);
 static struct resource *simplebus_alloc_resource(device_t, device_t, int,
     int *, rman_res_t, rman_res_t, rman_res_t, u_int);
 static void            simplebus_probe_nomatch(device_t bus, device_t child);
@@ -134,7 +133,7 @@ simplebus_probe(device_t dev)
        return (BUS_PROBE_GENERIC);
 }
 
-static int
+int
 simplebus_attach(device_t dev)
 {
        struct          simplebus_softc *sc;
@@ -142,7 +141,8 @@ simplebus_attach(device_t dev)
 
        sc = device_get_softc(dev);
        simplebus_init(dev, 0);
-       if (simplebus_fill_ranges(sc->node, sc) < 0) {
+       if ((sc->flags & SB_FLAG_NO_RANGES) == 0 &&
+           simplebus_fill_ranges(sc->node, sc) < 0) {
                device_printf(dev, "could not get ranges\n");
                return (ENXIO);
        }

Modified: head/sys/dev/fdt/simplebus.h
==============================================================================
--- head/sys/dev/fdt/simplebus.h        Mon Aug  3 13:12:07 2020        
(r363798)
+++ head/sys/dev/fdt/simplebus.h        Mon Aug  3 16:26:10 2020        
(r363799)
@@ -47,6 +47,8 @@ struct simplebus_softc {
 
        struct simplebus_range *ranges;
        int nranges;
+#define        SB_FLAG_NO_RANGES       (1 << 0) /* Bus doesn't have ranges 
property */
+       int flags;
 
        pcell_t acells, scells;
 };
@@ -63,4 +65,7 @@ struct simplebus_devinfo *simplebus_setup_dinfo(device
     struct simplebus_devinfo *di);
 int simplebus_fill_ranges(phandle_t node,
     struct simplebus_softc *sc);
+
+int simplebus_attach(device_t dev);
+
 #endif /* _FDT_SIMPLEBUS_H */
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to