Date: Tue, 8 Jan 2013 07:32:38 +0000 (UTC) From: Bryan Venteicher <bryanv@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r245159 - projects/vmxnet/sys/dev/vmware/vmxnet Message-ID: <201301080732.r087Wc4E068569@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301080732.r087Wc4E068569>