summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-03-26 15:08:36 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-04-01 09:15:29 +0200
commit36a92dfe8e8d8a216fb2fbeeaae8d42575eae142 (patch)
tree78072ca2fcbd6b09fb736d58c5887cde0becce00
parentif_dwc: Import from FreeBSD (diff)
downloadrtems-libbsd-36a92dfe8e8d8a216fb2fbeeaae8d42575eae142.tar.bz2
if_dwc: Workaround for if_inc_counter()
-rw-r--r--freebsd/sys/dev/dwc/if_dwc.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/freebsd/sys/dev/dwc/if_dwc.c b/freebsd/sys/dev/dwc/if_dwc.c
index 48711a34..ea086674 100644
--- a/freebsd/sys/dev/dwc/if_dwc.c
+++ b/freebsd/sys/dev/dwc/if_dwc.c
@@ -386,6 +386,7 @@ dwc_harvest_stats(struct dwc_softc *sc)
sc->stats_harvest_count = 0;
ifp = sc->ifp;
+#ifndef __rtems__
if_inc_counter(ifp, IFCOUNTER_IPACKETS, READ4(sc, RXFRAMECOUNT_GB));
if_inc_counter(ifp, IFCOUNTER_IMCASTS, READ4(sc, RXMULTICASTFRAMES_G));
if_inc_counter(ifp, IFCOUNTER_IERRORS,
@@ -402,6 +403,24 @@ dwc_harvest_stats(struct dwc_softc *sc)
if_inc_counter(ifp, IFCOUNTER_COLLISIONS,
READ4(sc, TXEXESSCOL) + READ4(sc, TXLATECOL));
+#else /* __rtems__ */
+ ifp->if_ipackets += READ4(sc, RXFRAMECOUNT_GB);
+ ifp->if_imcasts += READ4(sc, RXMULTICASTFRAMES_G);
+ ifp->if_ierrors +=
+ READ4(sc, RXOVERSIZE_G) + READ4(sc, RXUNDERSIZE_G) +
+ READ4(sc, RXCRCERROR) + READ4(sc, RXALIGNMENTERROR) +
+ READ4(sc, RXRUNTERROR) + READ4(sc, RXJABBERERROR) +
+ READ4(sc, RXLENGTHERROR);
+
+ ifp->if_opackets += READ4(sc, TXFRAMECOUNT_G);
+ ifp->if_omcasts += READ4(sc, TXMULTICASTFRAMES_G);
+ ifp->if_oerrors +=
+ READ4(sc, TXOVERSIZE_G) + READ4(sc, TXEXCESSDEF) +
+ READ4(sc, TXCARRIERERR) + READ4(sc, TXUNDERFLOWERROR);
+
+ ifp->if_collisions +=
+ READ4(sc, TXEXESSCOL) + READ4(sc, TXLATECOL);
+#endif /* __rtems__ */
dwc_clear_stats(sc);
}
@@ -798,7 +817,11 @@ dwc_rxfinish_locked(struct dwc_softc *sc)
m->m_pkthdr.rcvif = ifp;
m->m_pkthdr.len = len;
m->m_len = len;
+#ifndef __rtems__
if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
+#else /* __rtems__ */
+ ++ifp->if_ipackets;
+#endif /* __rtems__ */
DWC_UNLOCK(sc);
(*ifp->if_input)(ifp, m);
@@ -815,7 +838,11 @@ dwc_rxfinish_locked(struct dwc_softc *sc)
*/
}
} else
+#ifndef __rtems__
if_inc_counter(sc->ifp, IFCOUNTER_IQDROPS, 1);
+#else /* __rtems__ */
+ ++ifp->if_iqdrops;
+#endif /* __rtems__ */
sc->rx_idx = next_rxidx(sc, sc->rx_idx);
}