svn commit: r256846 - head/sys/powerpc/ofw

Nathan Whitehorn nwhitehorn at FreeBSD.org
Mon Oct 21 13:57:35 UTC 2013


Author: nwhitehorn
Date: Mon Oct 21 13:57:34 2013
New Revision: 256846
URL: http://svnweb.freebsd.org/changeset/base/256846

Log:
  Provide an interface for PCI bus drivers that need some of ofw_pci's
  metadata during attach.

Modified:
  head/sys/powerpc/ofw/ofw_pci.c
  head/sys/powerpc/ofw/ofw_pci.h

Modified: head/sys/powerpc/ofw/ofw_pci.c
==============================================================================
--- head/sys/powerpc/ofw/ofw_pci.c	Mon Oct 21 13:09:09 2013	(r256845)
+++ head/sys/powerpc/ofw/ofw_pci.c	Mon Oct 21 13:57:34 2013	(r256846)
@@ -124,7 +124,7 @@ static device_method_t	ofw_pci_methods[]
 DEFINE_CLASS_0(ofw_pci, ofw_pci_driver, ofw_pci_methods, 0);
 
 int
-ofw_pci_attach(device_t dev)
+ofw_pci_init(device_t dev)
 {
 	struct		ofw_pci_softc *sc;
 	phandle_t	node;
@@ -134,6 +134,7 @@ ofw_pci_attach(device_t dev)
 
 	node = ofw_bus_get_node(dev);
 	sc = device_get_softc(dev);
+	sc->sc_initialized = 1;
 
 	if (OF_getprop(node, "reg", &sc->sc_pcir, sizeof(sc->sc_pcir)) == -1)
 		return (ENXIO);
@@ -217,13 +218,28 @@ ofw_pci_attach(device_t dev)
 			    "error = %d\n", rp->pci_hi &
 			    OFW_PCI_PHYS_HI_SPACEMASK, rp->pci,
 			    rp->pci + rp->size - 1, error);
-			panic("AHOY");
 			return (error);
 		}
 	}
 
 	ofw_bus_setup_iinfo(node, &sc->sc_pci_iinfo, sizeof(cell_t));
 
+	return (error);
+}
+
+int
+ofw_pci_attach(device_t dev)
+{
+	struct ofw_pci_softc *sc;
+	int error;
+
+	sc = device_get_softc(dev);
+	if (!sc->sc_initialized) {
+		error = ofw_pci_init(dev);
+		if (error)
+			return (error);
+	}
+
 	device_add_child(dev, "pci", device_get_unit(dev));
 	return (bus_generic_attach(dev));
 }

Modified: head/sys/powerpc/ofw/ofw_pci.h
==============================================================================
--- head/sys/powerpc/ofw/ofw_pci.h	Mon Oct 21 13:09:09 2013	(r256845)
+++ head/sys/powerpc/ofw/ofw_pci.h	Mon Oct 21 13:57:34 2013	(r256846)
@@ -52,6 +52,7 @@ struct ofw_pci_softc {
 	device_t		sc_dev;
 	phandle_t		sc_node;
 	int			sc_bus;
+	int			sc_initialized;
 
 	int			sc_quirks;
 
@@ -68,6 +69,7 @@ struct ofw_pci_softc {
 	struct ofw_bus_iinfo    sc_pci_iinfo;
 };
 
+int ofw_pci_init(device_t dev);
 int ofw_pci_attach(device_t dev);
 
 #endif // POWERPC_OFW_OFW_PCI_H


More information about the svn-src-all mailing list