From owner-svn-src-head@FreeBSD.ORG Tue Dec 17 15:11:27 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id AB871816; Tue, 17 Dec 2013 15:11:27 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 94F021D90; Tue, 17 Dec 2013 15:11:27 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rBHFBRrQ018263; Tue, 17 Dec 2013 15:11:27 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.7/8.14.7/Submit) id rBHFBPm4018244; Tue, 17 Dec 2013 15:11:25 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201312171511.rBHFBPm4018244@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 17 Dec 2013 15:11:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r259516 - in head/sys: arm/mv dev/ofw powerpc/ofw sparc64/ebus sparc64/isa sparc64/pci X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 17 Dec 2013 15:11:27 -0000 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, ®, 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, ®, 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, ®, - sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr), - &iparent, maskbuf)) { + intrcells = ofw_bus_lookup_imap(ofw_bus_get_node(dev), ii, ®, + 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, ®, 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, ®, 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, ®, 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, ®, 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, ®, 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, ®, 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",