if_nge.c (162321) | if_nge.c (162375) |
---|---|
1/*- 2 * Copyright (c) 2001 Wind River Systems 3 * Copyright (c) 1997, 1998, 1999, 2000, 2001 4 * Bill Paul <wpaul@bsdi.com>. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2001 Wind River Systems 3 * Copyright (c) 1997, 1998, 1999, 2000, 2001 4 * Bill Paul <wpaul@bsdi.com>. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> |
35__FBSDID("$FreeBSD: head/sys/dev/nge/if_nge.c 162321 2006-09-15 15:16:12Z glebius $"); | 35__FBSDID("$FreeBSD: head/sys/dev/nge/if_nge.c 162375 2006-09-17 13:33:30Z andre $"); |
36 37/* 38 * National Semiconductor DP83820/DP83821 gigabit ethernet driver 39 * for FreeBSD. Datasheets are available from: 40 * 41 * http://www.national.com/ds/DP/DP83820.pdf 42 * http://www.national.com/ds/DP/DP83821.pdf 43 * --- 1178 unchanged lines hidden (view full) --- 1222 m->m_pkthdr.csum_data = 0xffff; 1223 } 1224 1225 /* 1226 * If we received a packet with a vlan tag, pass it 1227 * to vlan_input() instead of ether_input(). 1228 */ 1229 if (extsts & NGE_RXEXTSTS_VLANPKT) { | 36 37/* 38 * National Semiconductor DP83820/DP83821 gigabit ethernet driver 39 * for FreeBSD. Datasheets are available from: 40 * 41 * http://www.national.com/ds/DP/DP83820.pdf 42 * http://www.national.com/ds/DP/DP83821.pdf 43 * --- 1178 unchanged lines hidden (view full) --- 1222 m->m_pkthdr.csum_data = 0xffff; 1223 } 1224 1225 /* 1226 * If we received a packet with a vlan tag, pass it 1227 * to vlan_input() instead of ether_input(). 1228 */ 1229 if (extsts & NGE_RXEXTSTS_VLANPKT) { |
1230 VLAN_INPUT_TAG(ifp, m, 1231 ntohs(extsts & NGE_RXEXTSTS_VTCI)); 1232 if (m == NULL) 1233 continue; | 1230 m->m_pkthdr.ether_vtag = 1231 ntohs(extsts & NGE_RXEXTSTS_VTCI); 1232 m->m_flags |= M_VLANTAG; |
1234 } 1235 NGE_UNLOCK(sc); 1236 (*ifp->if_input)(ifp, m); 1237 NGE_LOCK(sc); 1238 } 1239 1240 sc->nge_cdata.nge_rx_prod = i; 1241 --- 260 unchanged lines hidden (view full) --- 1502nge_encap(sc, m_head, txidx) 1503 struct nge_softc *sc; 1504 struct mbuf *m_head; 1505 u_int32_t *txidx; 1506{ 1507 struct nge_desc *f = NULL; 1508 struct mbuf *m; 1509 int frag, cur, cnt = 0; | 1233 } 1234 NGE_UNLOCK(sc); 1235 (*ifp->if_input)(ifp, m); 1236 NGE_LOCK(sc); 1237 } 1238 1239 sc->nge_cdata.nge_rx_prod = i; 1240 --- 260 unchanged lines hidden (view full) --- 1501nge_encap(sc, m_head, txidx) 1502 struct nge_softc *sc; 1503 struct mbuf *m_head; 1504 u_int32_t *txidx; 1505{ 1506 struct nge_desc *f = NULL; 1507 struct mbuf *m; 1508 int frag, cur, cnt = 0; |
1510 struct m_tag *mtag; | |
1511 1512 /* 1513 * Start packing the mbufs in this chain into 1514 * the fragment pointers. Stop when we run out 1515 * of fragments or hit the end of the mbuf chain. 1516 */ 1517 m = m_head; 1518 cur = frag = *txidx; --- 25 unchanged lines hidden (view full) --- 1544 if (m_head->m_pkthdr.csum_flags & CSUM_TCP) 1545 sc->nge_ldata->nge_tx_list[*txidx].nge_extsts |= 1546 NGE_TXEXTSTS_TCPCSUM; 1547 if (m_head->m_pkthdr.csum_flags & CSUM_UDP) 1548 sc->nge_ldata->nge_tx_list[*txidx].nge_extsts |= 1549 NGE_TXEXTSTS_UDPCSUM; 1550 } 1551 | 1509 1510 /* 1511 * Start packing the mbufs in this chain into 1512 * the fragment pointers. Stop when we run out 1513 * of fragments or hit the end of the mbuf chain. 1514 */ 1515 m = m_head; 1516 cur = frag = *txidx; --- 25 unchanged lines hidden (view full) --- 1542 if (m_head->m_pkthdr.csum_flags & CSUM_TCP) 1543 sc->nge_ldata->nge_tx_list[*txidx].nge_extsts |= 1544 NGE_TXEXTSTS_TCPCSUM; 1545 if (m_head->m_pkthdr.csum_flags & CSUM_UDP) 1546 sc->nge_ldata->nge_tx_list[*txidx].nge_extsts |= 1547 NGE_TXEXTSTS_UDPCSUM; 1548 } 1549 |
1552 mtag = VLAN_OUTPUT_TAG(sc->nge_ifp, m_head); 1553 if (mtag != NULL) { | 1550 if (m_head->m_flags & M_VLANTAG) { |
1554 sc->nge_ldata->nge_tx_list[cur].nge_extsts |= | 1551 sc->nge_ldata->nge_tx_list[cur].nge_extsts |= |
1555 (NGE_TXEXTSTS_VLANPKT|htons(VLAN_TAG_VALUE(mtag))); | 1552 (NGE_TXEXTSTS_VLANPKT|htons(m_head->m_pkthdr.ether_vtag)); |
1556 } 1557 1558 sc->nge_ldata->nge_tx_list[cur].nge_mbuf = m_head; 1559 sc->nge_ldata->nge_tx_list[cur].nge_ctl &= ~NGE_CMDSTS_MORE; 1560 sc->nge_ldata->nge_tx_list[*txidx].nge_ctl |= NGE_CMDSTS_OWN; 1561 sc->nge_cdata.nge_tx_cnt += cnt; 1562 *txidx = frag; 1563 --- 618 unchanged lines hidden --- | 1553 } 1554 1555 sc->nge_ldata->nge_tx_list[cur].nge_mbuf = m_head; 1556 sc->nge_ldata->nge_tx_list[cur].nge_ctl &= ~NGE_CMDSTS_MORE; 1557 sc->nge_ldata->nge_tx_list[*txidx].nge_ctl |= NGE_CMDSTS_OWN; 1558 sc->nge_cdata.nge_tx_cnt += cnt; 1559 *txidx = frag; 1560 --- 618 unchanged lines hidden --- |