diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-07-22 13:02:37 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-07-22 13:02:37 +0000 |
commit | c05bc62b82f4a0aed6e67a67e430445d095fa2aa (patch) | |
tree | 373569b90ccd4f24b34cc798d7e4db709ebfac3d /c/src/lib/libbsp/powerpc/mvme5500/network/if_100MHz/GT64260eth.c | |
parent | 2011-07-21 Jorge Lopez <jorge.lopez.trescastro@esa.int> (diff) | |
download | rtems-c05bc62b82f4a0aed6e67a67e430445d095fa2aa.tar.bz2 |
2011-03-31 Kate Feng <feng@bnl.gov>
PR 1778/bsps
* vme/VMEConfig.h: Used the VME shared IRQ handlers.
* include/bsp.h: Removed BSP_PIC_DO_EOI.
* network/if_100MHz/GT64260eth.c:
Recycle the Rx mbuf if there is any Rx error.
Diffstat (limited to 'c/src/lib/libbsp/powerpc/mvme5500/network/if_100MHz/GT64260eth.c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/mvme5500/network/if_100MHz/GT64260eth.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/c/src/lib/libbsp/powerpc/mvme5500/network/if_100MHz/GT64260eth.c b/c/src/lib/libbsp/powerpc/mvme5500/network/if_100MHz/GT64260eth.c index 3ed43638b1..c04e361d21 100644 --- a/c/src/lib/libbsp/powerpc/mvme5500/network/if_100MHz/GT64260eth.c +++ b/c/src/lib/libbsp/powerpc/mvme5500/network/if_100MHz/GT64260eth.c @@ -743,21 +743,22 @@ static int GT64260eth_rx(struct GTeth_softc *sc) if (cmdsts & RX_STS_SF) sc->stats.frame_errors++; if ((cmdsts & RX_STS_LC) || (cmdsts & RX_STS_COL)) ifp->if_collisions++; - goto give_it_back; + /* recycle the buffer */ + m->m_len=sc->rx_buf_sz; + } + else { + m = sc->rxq_mbuf[sc->rxq_fi]; + m->m_len = m->m_pkthdr.len = byteCount - sizeof(struct ether_header); + eh = mtod (m, struct ether_header *); + m->m_data += sizeof(struct ether_header); + ether_input (ifp, eh, m); + + ifp->if_ipackets++; + ifp->if_ibytes+=byteCount; + --sc->rxq_active; + MGETHDR (m, M_WAIT, MT_DATA); + MCLGET (m, M_WAIT); } - m = sc->rxq_mbuf[sc->rxq_fi]; - m->m_len = m->m_pkthdr.len = byteCount - sizeof(struct ether_header); - eh = mtod (m, struct ether_header *); - m->m_data += sizeof(struct ether_header); - ether_input (ifp, eh, m); - - ifp->if_ipackets++; - ifp->if_ibytes+=byteCount; - --sc->rxq_active; - - give_it_back: - MGETHDR (m, M_WAIT, MT_DATA); - MCLGET (m, M_WAIT); m->m_pkthdr.rcvif = ifp; sc->rxq_mbuf[sc->rxq_fi]= m; /* convert mbuf pointer to data pointer of correct type */ |