PERFORCE change 93082 for review
Olivier Houchard
cognet at FreeBSD.org
Thu Mar 9 16:07:56 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=93082
Change 93082 by cognet at cognet on 2006/03/10 00:06:58
Split the received mbuf into two mbuf, for alignment constraints.
Affected files ...
.. //depot/projects/arm/src/sys/arm/at91/if_ate.c#35 edit
Differences ...
==== //depot/projects/arm/src/sys/arm/at91/if_ate.c#35 (text+ko) ====
@@ -74,7 +74,7 @@
#include "miibus_if.h"
#define ATE_MAX_TX_BUFFERS 2 /* We have ping-pong tx buffers */
-#define ATE_MAX_RX_BUFFERS 64
+#define ATE_MAX_RX_BUFFERS 8
struct ate_softc
{
@@ -579,7 +579,7 @@
struct ate_softc *sc = xsc;
int status;
int i;
- struct mbuf *mb;
+ struct mbuf *mb, *tmp_mbuf;
bus_dma_segment_t seg;
int rx_stat;
int nsegs;
@@ -630,8 +630,6 @@
* the new buffer is loaded for dma.
*/
sc->rx_mbuf[i] = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
- sc->rx_mbuf[i]->m_len =
- sc->rx_mbuf[i]->m_pkthdr.len = MCLBYTES;
if (!sc->rx_mbuf[i]) {
printf("Failed to get another mbuf -- discarding packet\n");
sc->rx_mbuf[i] = mb;
@@ -642,6 +640,8 @@
BUS_DMASYNC_PREWRITE);
continue;
}
+ sc->rx_mbuf[i]->m_len =
+ sc->rx_mbuf[i]->m_pkthdr.len = MCLBYTES;
bus_dmamap_unload(sc->rxtag, sc->rx_map[i]);
if (bus_dmamap_load_mbuf_sg(sc->rxtag, sc->rx_map[i],
sc->rx_mbuf[i], &seg, &nsegs, 0) != 0) {
@@ -657,6 +657,7 @@
mb->m_len = rx_stat & ETH_LEN_MASK;
mb->m_pkthdr.len = mb->m_len;
mb->m_pkthdr.rcvif = sc->ifp;
+ tmp_mbuf = m_copyup(mb, ETHER_HDR_LEN, 2);
/*
* For the last buffer, set the wrap bit so
* the controller restarts from the first
@@ -670,7 +671,7 @@
BUS_DMASYNC_PREREAD);
bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map,
BUS_DMASYNC_PREWRITE);
- (*sc->ifp->if_input)(sc->ifp, mb);
+ (*sc->ifp->if_input)(sc->ifp, tmp_mbuf);
}
}
if (status & ETH_ISR_TCOM) {
More information about the p4-projects
mailing list