From owner-svn-src-projects@FreeBSD.ORG Tue Jan 8 07:32:38 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id EF3D2A5F; Tue, 8 Jan 2013 07:32:38 +0000 (UTC) (envelope-from bryanv@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id DC6E3F61; Tue, 8 Jan 2013 07:32:38 +0000 (UTC) Received: from svn.freebsd.org (svn.FreeBSD.org [8.8.178.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id r087WcGR068571; Tue, 8 Jan 2013 07:32:38 GMT (envelope-from bryanv@svn.freebsd.org) Received: (from bryanv@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id r087Wc4E068569; Tue, 8 Jan 2013 07:32:38 GMT (envelope-from bryanv@svn.freebsd.org) Message-Id: <201301080732.r087Wc4E068569@svn.freebsd.org> From: Bryan Venteicher Date: Tue, 8 Jan 2013 07:32:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r245159 - projects/vmxnet/sys/dev/vmware/vmxnet X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jan 2013 07:32:39 -0000 Author: bryanv Date: Tue Jan 8 07:32:38 2013 New Revision: 245159 URL: http://svnweb.freebsd.org/changeset/base/245159 Log: Use a bus space subregion for flexible devices A flexible vmxnet device appears as a PCNET device until transformed. The vmxnet registers are located after the PCNET registers in the same BAR, so a use subregion rather than manually adjusting our offset. Approved by: grehan (implicit) Modified: projects/vmxnet/sys/dev/vmware/vmxnet/if_vic.c projects/vmxnet/sys/dev/vmware/vmxnet/if_vicvar.h Modified: projects/vmxnet/sys/dev/vmware/vmxnet/if_vic.c ============================================================================== --- projects/vmxnet/sys/dev/vmware/vmxnet/if_vic.c Tue Jan 8 07:25:29 2013 (r245158) +++ projects/vmxnet/sys/dev/vmware/vmxnet/if_vic.c Tue Jan 8 07:32:38 2013 (r245159) @@ -419,8 +419,6 @@ static uint32_t vic_read(struct vic_softc *sc, bus_size_t r) { - r += sc->vic_ioadj; - bus_space_barrier(sc->vic_iot, sc->vic_ioh, r, 4, BUS_SPACE_BARRIER_READ); return (bus_space_read_4(sc->vic_iot, sc->vic_ioh, r)); @@ -430,8 +428,6 @@ static void vic_write(struct vic_softc *sc, bus_size_t r, uint32_t v) { - r += sc->vic_ioadj; - bus_space_write_4(sc->vic_iot, sc->vic_ioh, r, v); bus_space_barrier(sc->vic_iot, sc->vic_ioh, r, 4, BUS_SPACE_BARRIER_WRITE); @@ -1811,7 +1807,6 @@ vic_get_lladdr(struct vic_softc *sc) uint32_t r; r = (sc->vic_cap & VIC_CMD_HWCAP_VPROM) ? VIC_VPROM : VIC_LLADDR; - r += sc->vic_ioadj; bus_space_barrier(sc->vic_iot, sc->vic_ioh, r, ETHER_ADDR_LEN, BUS_SPACE_BARRIER_READ); @@ -1826,13 +1821,10 @@ vic_get_lladdr(struct vic_softc *sc) static void vic_set_lladdr(struct vic_softc *sc) { - uint32_t r; - r = VIC_LLADDR + sc->vic_ioadj; - - bus_space_write_region_1(sc->vic_iot, sc->vic_ioh, r, + bus_space_write_region_1(sc->vic_iot, sc->vic_ioh, VIC_LLADDR, sc->vic_lladdr, ETHER_ADDR_LEN); - bus_space_barrier(sc->vic_iot, sc->vic_ioh, r, + bus_space_barrier(sc->vic_iot, sc->vic_ioh, VIC_LLADDR, ETHER_ADDR_LEN, BUS_SPACE_BARRIER_WRITE); } @@ -1947,7 +1939,7 @@ vic_pcnet_restore(struct vic_softc *sc) uint32_t morph; sc->vic_flags &= ~VIC_FLAGS_MORPHED_PCNET; - sc->vic_ioadj = 0; + sc->vic_ioh = sc->vic_orig_ioh; morph = vic_read(sc, VIC_LANCE_SIZE); morph &= ~VIC_MORPH_MASK; @@ -1960,12 +1952,22 @@ vic_pcnet_transform(struct vic_softc *sc { device_t dev; uint32_t morph; + bus_space_handle_t handle; + int error; dev = sc->vic_dev; if (rman_get_size(sc->vic_res) < VIC_LANCE_MINLEN) return (ENOSPC); + /* Set up the subregion now - it doesn't require any cleanup. */ + error = bus_space_subregion(sc->vic_iot, sc->vic_ioh, + VIC_LANCE_SIZE + VIC_MORPH_SIZE, VIC_VMXNET_SIZE, &handle); + if (error) { + device_printf(dev, "unable to create bus space subregion\n"); + return (error); + } + morph = vic_read(sc, VIC_LANCE_SIZE); if ((morph & VIC_MORPH_MASK) == VIC_MORPH_VMXNET) goto morphed; @@ -1988,7 +1990,9 @@ vic_pcnet_transform(struct vic_softc *sc morphed: sc->vic_flags |= VIC_FLAGS_MORPHED_PCNET; - sc->vic_ioadj = VIC_LANCE_SIZE + VIC_MORPH_SIZE; + sc->vic_orig_ioh = sc->vic_ioh; + sc->vic_ioh = handle; + if (bootverbose) device_printf(dev, "transformed PCNet into VMXNET\n"); Modified: projects/vmxnet/sys/dev/vmware/vmxnet/if_vicvar.h ============================================================================== --- projects/vmxnet/sys/dev/vmware/vmxnet/if_vicvar.h Tue Jan 8 07:25:29 2013 (r245158) +++ projects/vmxnet/sys/dev/vmware/vmxnet/if_vicvar.h Tue Jan 8 07:32:38 2013 (r245159) @@ -70,7 +70,7 @@ struct vic_softc { struct resource *vic_res; bus_space_tag_t vic_iot; bus_space_handle_t vic_ioh; - int vic_ioadj; + bus_space_handle_t vic_orig_ioh; bus_dma_tag_t vic_dma_tag; bus_dmamap_t vic_dma_map;