svn commit: r259516 - in head/sys: arm/mv dev/ofw powerpc/ofw sparc64/ebus sparc64/isa sparc64/pci

Nathan Whitehorn nwhitehorn at FreeBSD.org
Tue Dec 17 15:11:27 UTC 2013


Author: nwhitehorn
Date: Tue Dec 17 15:11:24 2013
New Revision: 259516
URL: http://svnweb.freebsd.org/changeset/base/259516

Log:
  Simplify the ofw_bus_lookup_imap() API slightly: make it allocate maskbuf
  internally instead of requiring the caller to allocate it.

Modified:
  head/sys/arm/mv/mv_pci.c
  head/sys/dev/ofw/ofw_bus_subr.c
  head/sys/dev/ofw/ofw_bus_subr.h
  head/sys/powerpc/ofw/ofw_pci.c
  head/sys/powerpc/ofw/ofw_pcib_pci.c
  head/sys/sparc64/ebus/ebus.c
  head/sys/sparc64/isa/ofw_isa.c
  head/sys/sparc64/pci/fire.c
  head/sys/sparc64/pci/ofw_pcib_subr.c
  head/sys/sparc64/pci/psycho.c
  head/sys/sparc64/pci/schizo.c

Modified: head/sys/arm/mv/mv_pci.c
==============================================================================
--- head/sys/arm/mv/mv_pci.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/arm/mv/mv_pci.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -884,7 +884,6 @@ mv_pcib_route_interrupt(device_t bus, de
 	struct ofw_pci_register reg;
 	uint32_t pintr, mintr;
 	phandle_t iparent;
-	uint8_t maskbuf[sizeof(reg) + sizeof(pintr)];
 
 	sc = device_get_softc(bus);
 	pintr = pin;
@@ -897,7 +896,7 @@ mv_pcib_route_interrupt(device_t bus, de
 
 	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo, &reg,
 	    sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
-	    &iparent, maskbuf))
+	    &iparent))
 		return (ofw_bus_map_intr(dev, iparent, mintr));
 
 	/* Maybe it's a real interrupt, not an intpin */

Modified: head/sys/dev/ofw/ofw_bus_subr.c
==============================================================================
--- head/sys/dev/ofw/ofw_bus_subr.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/dev/ofw/ofw_bus_subr.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -251,8 +251,9 @@ ofw_bus_setup_iinfo(phandle_t node, stru
 int
 ofw_bus_lookup_imap(phandle_t node, struct ofw_bus_iinfo *ii, void *reg,
     int regsz, void *pintr, int pintrsz, void *mintr, int mintrsz,
-    phandle_t *iparent, void *maskbuf)
+    phandle_t *iparent)
 {
+	uint8_t maskbuf[regsz + pintrsz];
 	int rv;
 
 	if (ii->opi_imapsz <= 0)

Modified: head/sys/dev/ofw/ofw_bus_subr.h
==============================================================================
--- head/sys/dev/ofw/ofw_bus_subr.h	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/dev/ofw/ofw_bus_subr.h	Tue Dec 17 15:11:24 2013	(r259516)
@@ -68,7 +68,7 @@ bus_child_pnpinfo_str_t	ofw_bus_gen_chil
 /* Routines for processing firmware interrupt maps */
 void	ofw_bus_setup_iinfo(phandle_t, struct ofw_bus_iinfo *, int);
 int	ofw_bus_lookup_imap(phandle_t, struct ofw_bus_iinfo *, void *, int,
-	    void *, int, void *, int, phandle_t *, void *);
+	    void *, int, void *, int, phandle_t *);
 int	ofw_bus_search_intrmap(void *, int, void *, int, void *, int, void *,
 	    void *, void *, int, phandle_t *);
 

Modified: head/sys/powerpc/ofw/ofw_pci.c
==============================================================================
--- head/sys/powerpc/ofw/ofw_pci.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/powerpc/ofw/ofw_pci.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -259,7 +259,6 @@ ofw_pci_route_interrupt(device_t bus, de
 	uint32_t pintr, mintr[2];
 	int intrcells;
 	phandle_t iparent;
-	uint8_t maskbuf[sizeof(reg) + sizeof(pintr)];
 
 	sc = device_get_softc(bus);
 	pintr = pin;
@@ -272,7 +271,7 @@ ofw_pci_route_interrupt(device_t bus, de
 
 	intrcells = ofw_bus_lookup_imap(ofw_bus_get_node(dev),
 	    &sc->sc_pci_iinfo, &reg, sizeof(reg), &pintr, sizeof(pintr),
-	    mintr, sizeof(mintr), &iparent, maskbuf);
+	    mintr, sizeof(mintr), &iparent);
 	if (intrcells) {
 		pintr = ofw_bus_map_intr(dev, iparent, mintr[0]);
 		if (intrcells == 2)

Modified: head/sys/powerpc/ofw/ofw_pcib_pci.c
==============================================================================
--- head/sys/powerpc/ofw/ofw_pcib_pci.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/powerpc/ofw/ofw_pcib_pci.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -134,9 +134,9 @@ ofw_pcib_pci_route_interrupt(device_t br
 	struct ofw_pcib_softc *sc;
 	struct ofw_bus_iinfo *ii;
 	struct ofw_pci_register reg;
-	cell_t pintr, mintr;
+	cell_t pintr, mintr[2];
+	int intrcells;
 	phandle_t iparent;
-	uint8_t maskbuf[sizeof(reg) + sizeof(pintr)];
 
 	sc = device_get_softc(bridge);
 	ii = &sc->ops_iinfo;
@@ -149,15 +149,20 @@ ofw_pcib_pci_route_interrupt(device_t br
 		    (pci_get_slot(dev) << OFW_PCI_PHYS_HI_DEVICESHIFT) |
 		    (pci_get_function(dev) << OFW_PCI_PHYS_HI_FUNCTIONSHIFT);
 
-		if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), ii, &reg,
-		    sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
-		    &iparent, maskbuf)) {
+		intrcells = ofw_bus_lookup_imap(ofw_bus_get_node(dev), ii, &reg,
+		    sizeof(reg), &pintr, sizeof(pintr), mintr, sizeof(mintr),
+		    &iparent);
+		if (intrcells) {
 			/*
 			 * If we've found a mapping, return it and don't map
 			 * it again on higher levels - that causes problems
 			 * in some cases, and never seems to be required.
 			 */
-			return (ofw_bus_map_intr(dev, iparent, mintr));
+			mintr[0] = ofw_bus_map_intr(dev, iparent, mintr[0]);
+			if (intrcells == 2)
+				ofw_bus_config_intr(dev, mintr[0], mintr[1]);
+			
+			return (mintr[0]);
 		}
 	} else if (intpin >= 1 && intpin <= 4) {
 		/*

Modified: head/sys/sparc64/ebus/ebus.c
==============================================================================
--- head/sys/sparc64/ebus/ebus.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/sparc64/ebus/ebus.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -638,7 +638,6 @@ ebus_setup_dinfo(device_t dev, struct eb
 	uint64_t start;
 	uint32_t rintr;
 	int i, nintr, nreg, rv;
-	uint8_t maskbuf[sizeof(reg) + sizeof(intr)];
 
 	edi = malloc(sizeof(*edi), M_DEVBUF, M_ZERO | M_WAITOK);
 	if (ofw_bus_gen_setup_devinfo(&edi->edi_obdinfo, node) != 0) {
@@ -673,7 +672,7 @@ ebus_setup_dinfo(device_t dev, struct eb
 			intr = intrs[i];
 			rv = ofw_bus_lookup_imap(node, &sc->sc_iinfo, &reg,
 			    sizeof(reg), &intr, sizeof(intr), &rintr,
-			    sizeof(rintr), NULL, maskbuf);
+			    sizeof(rintr), NULL);
 #ifndef SUN4V
 			if (rv != 0)
 				rintr = INTMAP_VEC(sc->sc_ign, rintr);

Modified: head/sys/sparc64/isa/ofw_isa.c
==============================================================================
--- head/sys/sparc64/isa/ofw_isa.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/sparc64/isa/ofw_isa.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -129,7 +129,6 @@ ofw_isa_route_intr(device_t bridge, phan
     ofw_isa_intr_t intr)
 {
 	struct isa_regs reg;
-	uint8_t maskbuf[sizeof(reg) + sizeof(intr)];
 	device_t pbridge;
 	ofw_isa_intr_t mintr;
 
@@ -139,7 +138,7 @@ ofw_isa_route_intr(device_t bridge, phan
 	 * fully specified, so we may not continue to map.
 	 */
 	if (!ofw_bus_lookup_imap(node, ii, &reg, sizeof(reg),
-	    &intr, sizeof(intr), &mintr, sizeof(mintr), NULL, maskbuf)) {
+	    &intr, sizeof(intr), &mintr, sizeof(mintr), NULL)) {
 		/* Try routing at the parent bridge. */
 		mintr = PCIB_ROUTE_INTERRUPT(pbridge, bridge, intr);
 	}

Modified: head/sys/sparc64/pci/fire.c
==============================================================================
--- head/sys/sparc64/pci/fire.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/sparc64/pci/fire.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -1470,13 +1470,12 @@ fire_route_interrupt(device_t bridge, de
 	struct fire_softc *sc;
 	struct ofw_pci_register reg;
 	ofw_pci_intr_t pintr, mintr;
-	uint8_t maskbuf[sizeof(reg) + sizeof(pintr)];
 
 	sc = device_get_softc(bridge);
 	pintr = pin;
 	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo,
 	    &reg, sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
-	    NULL, maskbuf) != 0)
+	    NULL) != 0)
 		return (mintr);
 
 	device_printf(bridge, "could not route pin %d for device %d.%d\n",

Modified: head/sys/sparc64/pci/ofw_pcib_subr.c
==============================================================================
--- head/sys/sparc64/pci/ofw_pcib_subr.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/sparc64/pci/ofw_pcib_subr.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -70,7 +70,6 @@ ofw_pcib_gen_route_interrupt(device_t br
 	struct ofw_bus_iinfo *ii;
 	struct ofw_pci_register reg;
 	ofw_pci_intr_t pintr, mintr;
-	uint8_t maskbuf[sizeof(reg) + sizeof(pintr)];
 
 	sc = device_get_softc(bridge);
 	ii = &sc->ops_iinfo;
@@ -78,7 +77,7 @@ ofw_pcib_gen_route_interrupt(device_t br
 		pintr = intpin;
 		if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), ii, &reg,
 		    sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
-		    NULL, maskbuf)) {
+		    NULL)) {
 			/*
 			 * If we've found a mapping, return it and don't map
 			 * it again on higher levels - that causes problems

Modified: head/sys/sparc64/pci/psycho.c
==============================================================================
--- head/sys/sparc64/pci/psycho.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/sparc64/pci/psycho.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -1046,13 +1046,12 @@ psycho_route_interrupt(device_t bridge, 
 	struct ofw_pci_register reg;
 	bus_addr_t intrmap;
 	ofw_pci_intr_t pintr, mintr;
-	uint8_t maskbuf[sizeof(reg) + sizeof(pintr)];
 
 	sc = device_get_softc(bridge);
 	pintr = pin;
 	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo,
 	    &reg, sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
-	    NULL, maskbuf))
+	    NULL))
 		return (mintr);
 	/*
 	 * If this is outside of the range for an intpin, it's likely a full

Modified: head/sys/sparc64/pci/schizo.c
==============================================================================
--- head/sys/sparc64/pci/schizo.c	Tue Dec 17 14:55:23 2013	(r259515)
+++ head/sys/sparc64/pci/schizo.c	Tue Dec 17 15:11:24 2013	(r259516)
@@ -1119,13 +1119,12 @@ schizo_route_interrupt(device_t bridge, 
 	struct schizo_softc *sc;
 	struct ofw_pci_register reg;
 	ofw_pci_intr_t pintr, mintr;
-	uint8_t maskbuf[sizeof(reg) + sizeof(pintr)];
 
 	sc = device_get_softc(bridge);
 	pintr = pin;
 	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo,
 	    &reg, sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
-	    NULL, maskbuf))
+	    NULL))
 		return (mintr);
 
 	device_printf(bridge, "could not route pin %d for device %d.%d\n",


More information about the svn-src-all mailing list