summaryrefslogtreecommitdiff
path: root/sys/dev/ic
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2014-03-14 11:04:25 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2014-03-14 11:04:25 +0000
commit8b088944de0049abe3ba91c3d5ec88c88c72e033 (patch)
tree08ee05c47e50f09943ecfc91e4d6f9eb75e2cb45 /sys/dev/ic
parent2d885fe86ccebb33f3d9e3c029ca1b6cade18f6b (diff)
use lemtoh64 and htolem64 for reading and writing entries in the rings.
tested on sparc64 and powerpc with and without the MI backends for the lem ops enabled.
Diffstat (limited to 'sys/dev/ic')
-rw-r--r--sys/dev/ic/gem.c16
-rw-r--r--sys/dev/ic/gemvar.h15
2 files changed, 16 insertions, 15 deletions
diff --git a/sys/dev/ic/gem.c b/sys/dev/ic/gem.c
index 514c6fb2476..eefb6410649 100644
--- a/sys/dev/ic/gem.c
+++ b/sys/dev/ic/gem.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: gem.c,v 1.101 2013/08/08 16:01:34 kettenis Exp $ */
+/* $OpenBSD: gem.c,v 1.102 2014/03/14 11:04:24 dlg Exp $ */
/* $NetBSD: gem.c,v 1.1 2001/09/16 00:11:43 eeh Exp $ */
/*
@@ -1056,7 +1056,7 @@ gem_rint(struct gem_softc *sc)
GEM_CDRXSYNC(sc, i,
BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
- rxstat = GEM_DMA_READ(sc, sc->sc_rxdescs[i].gd_flags);
+ rxstat = GEM_DMA_READ(sc, &sc->sc_rxdescs[i].gd_flags);
if (rxstat & GEM_RD_OWN) {
/* We have processed all of the receive buffers. */
@@ -1086,9 +1086,9 @@ gem_rint(struct gem_softc *sc)
if (ifp->if_flags & IFF_DEBUG) {
printf(" rxsoft %p descriptor %d: ", rxs, i);
printf("gd_flags: 0x%016llx\t", (long long)
- GEM_DMA_READ(sc, sc->sc_rxdescs[i].gd_flags));
+ GEM_DMA_READ(sc, &sc->sc_rxdescs[i].gd_flags));
printf("gd_addr: 0x%016llx\n", (long long)
- GEM_DMA_READ(sc, sc->sc_rxdescs[i].gd_addr));
+ GEM_DMA_READ(sc, &sc->sc_rxdescs[i].gd_addr));
}
#endif
@@ -1811,15 +1811,15 @@ gem_start(struct ifnet *ifp)
BUS_DMASYNC_PREWRITE);
for (i = 0; i < map->dm_nsegs; i++) {
- sc->sc_txdescs[frag].gd_addr =
- GEM_DMA_WRITE(sc, map->dm_segs[i].ds_addr);
+ GEM_DMA_WRITE(sc, &sc->sc_txdescs[frag].gd_addr,
+ map->dm_segs[i].ds_addr);
flags = map->dm_segs[i].ds_len & GEM_TD_BUFSIZE;
if (i == 0)
flags |= GEM_TD_START_OF_PACKET;
if (i == (map->dm_nsegs - 1))
flags |= GEM_TD_END_OF_PACKET;
- sc->sc_txdescs[frag].gd_flags =
- GEM_DMA_WRITE(sc, flags);
+ GEM_DMA_WRITE(sc, &sc->sc_txdescs[frag].gd_flags,
+ flags);
bus_dmamap_sync(sc->sc_dmatag, sc->sc_cddmamap,
GEM_CDTXOFF(frag), sizeof(struct gem_desc),
BUS_DMASYNC_PREWRITE);
diff --git a/sys/dev/ic/gemvar.h b/sys/dev/ic/gemvar.h
index 05ed2b3711f..12fc0ae897d 100644
--- a/sys/dev/ic/gemvar.h
+++ b/sys/dev/ic/gemvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: gemvar.h,v 1.27 2013/03/09 17:57:00 mpi Exp $ */
+/* $OpenBSD: gemvar.h,v 1.28 2014/03/14 11:04:24 dlg Exp $ */
/* $NetBSD: gemvar.h,v 1.1 2001/09/16 00:11:43 eeh Exp $ */
/*
@@ -208,8 +208,10 @@ struct gem_softc {
void (*sc_hwinit)(struct gem_softc *);
};
-#define GEM_DMA_READ(sc, v) (((sc)->sc_pci) ? letoh64(v) : betoh64(v))
-#define GEM_DMA_WRITE(sc, v) (((sc)->sc_pci) ? htole64(v) : htobe64(v))
+#define GEM_DMA_READ(_sc, _a) \
+ (((_sc)->sc_pci) ? lemtoh64(_a) : bemtoh64(_a))
+#define GEM_DMA_WRITE(_sc, _a, _v) \
+ (((_sc)->sc_pci) ? htolem64((_a), (_v)) : htobem64((_a), (_v)))
/*
* This macro returns the current media entry for *non-MII* media.
@@ -266,10 +268,9 @@ do { \
struct gem_desc *__rxd = &sc->sc_rxdescs[(x)]; \
struct mbuf *__m = __rxs->rxs_mbuf; \
\
- __rxd->gd_addr = \
- GEM_DMA_WRITE((sc), __rxs->rxs_dmamap->dm_segs[0].ds_addr); \
- __rxd->gd_flags = \
- GEM_DMA_WRITE((sc), \
+ GEM_DMA_WRITE((sc), &__rxd->gd_addr, \
+ __rxs->rxs_dmamap->dm_segs[0].ds_addr); \
+ GEM_DMA_WRITE((sc), &__rxd->gd_flags, \
(((__m->m_ext.ext_size)<<GEM_RD_BUFSHIFT) \
& GEM_RD_BUFSIZE) | GEM_RD_OWN); \
GEM_CDRXSYNC((sc), (x), BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); \