if_nge.c (148654) | if_nge.c (148887) |
---|---|
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 148654 2005-08-03 00:18:35Z rwatson $"); | 35__FBSDID("$FreeBSD: head/sys/dev/nge/if_nge.c 148887 2005-08-09 10:20:02Z rwatson $"); |
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 * --- 1242 unchanged lines hidden (view full) --- 1286 1287 ifp->if_collisions += 1288 (cur_tx->nge_txstat & NGE_TXSTAT_COLLCNT) >> 16; 1289 1290 ifp->if_opackets++; 1291 if (cur_tx->nge_mbuf != NULL) { 1292 m_freem(cur_tx->nge_mbuf); 1293 cur_tx->nge_mbuf = NULL; | 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 * --- 1242 unchanged lines hidden (view full) --- 1286 1287 ifp->if_collisions += 1288 (cur_tx->nge_txstat & NGE_TXSTAT_COLLCNT) >> 16; 1289 1290 ifp->if_opackets++; 1291 if (cur_tx->nge_mbuf != NULL) { 1292 m_freem(cur_tx->nge_mbuf); 1293 cur_tx->nge_mbuf = NULL; |
1294 ifp->if_flags &= ~IFF_OACTIVE; | 1294 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; |
1295 } 1296 1297 sc->nge_cdata.nge_tx_cnt--; 1298 NGE_INC(idx, NGE_TX_LIST_CNT); 1299 } 1300 1301 sc->nge_cdata.nge_tx_cons = idx; 1302 --- 176 unchanged lines hidden (view full) --- 1479 (status & NGE_ISR_RX_OK)) 1480 nge_rxeof(sc); 1481 1482 if ((status & NGE_ISR_RX_IDLE)) 1483 NGE_SETBIT(sc, NGE_CSR, NGE_CSR_RX_ENABLE); 1484 1485 if (status & NGE_ISR_SYSERR) { 1486 nge_reset(sc); | 1295 } 1296 1297 sc->nge_cdata.nge_tx_cnt--; 1298 NGE_INC(idx, NGE_TX_LIST_CNT); 1299 } 1300 1301 sc->nge_cdata.nge_tx_cons = idx; 1302 --- 176 unchanged lines hidden (view full) --- 1479 (status & NGE_ISR_RX_OK)) 1480 nge_rxeof(sc); 1481 1482 if ((status & NGE_ISR_RX_IDLE)) 1483 NGE_SETBIT(sc, NGE_CSR, NGE_CSR_RX_ENABLE); 1484 1485 if (status & NGE_ISR_SYSERR) { 1486 nge_reset(sc); |
1487 ifp->if_flags &= ~IFF_RUNNING; | 1487 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; |
1488 nge_init_locked(sc); 1489 } 1490 1491#if 0 1492 /* 1493 * XXX: nge_tick() is not ready to be called this way 1494 * it screws up the aneg timeout because mii_tick() is 1495 * only to be called once per second. --- 121 unchanged lines hidden (view full) --- 1617 1618 sc = ifp->if_softc; 1619 1620 if (!sc->nge_link) 1621 return; 1622 1623 idx = sc->nge_cdata.nge_tx_prod; 1624 | 1488 nge_init_locked(sc); 1489 } 1490 1491#if 0 1492 /* 1493 * XXX: nge_tick() is not ready to be called this way 1494 * it screws up the aneg timeout because mii_tick() is 1495 * only to be called once per second. --- 121 unchanged lines hidden (view full) --- 1617 1618 sc = ifp->if_softc; 1619 1620 if (!sc->nge_link) 1621 return; 1622 1623 idx = sc->nge_cdata.nge_tx_prod; 1624 |
1625 if (ifp->if_flags & IFF_OACTIVE) | 1625 if (ifp->if_drv_flags & IFF_DRV_OACTIVE) |
1626 return; 1627 1628 while(sc->nge_ldata->nge_tx_list[idx].nge_mbuf == NULL) { 1629 IF_DEQUEUE(&ifp->if_snd, m_head); 1630 if (m_head == NULL) 1631 break; 1632 1633 if (nge_encap(sc, m_head, &idx)) { 1634 IF_PREPEND(&ifp->if_snd, m_head); | 1626 return; 1627 1628 while(sc->nge_ldata->nge_tx_list[idx].nge_mbuf == NULL) { 1629 IF_DEQUEUE(&ifp->if_snd, m_head); 1630 if (m_head == NULL) 1631 break; 1632 1633 if (nge_encap(sc, m_head, &idx)) { 1634 IF_PREPEND(&ifp->if_snd, m_head); |
1635 ifp->if_flags |= IFF_OACTIVE; | 1635 ifp->if_drv_flags |= IFF_DRV_OACTIVE; |
1636 break; 1637 } 1638 1639 /* 1640 * If there's a BPF listener, bounce a copy of this frame 1641 * to him. 1642 */ 1643 BPF_MTAP(ifp, m_head); --- 27 unchanged lines hidden (view full) --- 1671nge_init_locked(sc) 1672 struct nge_softc *sc; 1673{ 1674 struct ifnet *ifp = sc->nge_ifp; 1675 struct mii_data *mii; 1676 1677 NGE_LOCK_ASSERT(sc); 1678 | 1636 break; 1637 } 1638 1639 /* 1640 * If there's a BPF listener, bounce a copy of this frame 1641 * to him. 1642 */ 1643 BPF_MTAP(ifp, m_head); --- 27 unchanged lines hidden (view full) --- 1671nge_init_locked(sc) 1672 struct nge_softc *sc; 1673{ 1674 struct ifnet *ifp = sc->nge_ifp; 1675 struct mii_data *mii; 1676 1677 NGE_LOCK_ASSERT(sc); 1678 |
1679 if (ifp->if_flags & IFF_RUNNING) | 1679 if (ifp->if_drv_flags & IFF_DRV_RUNNING) |
1680 return; 1681 1682 /* 1683 * Cancel pending I/O and free all RX/TX buffers. 1684 */ 1685 nge_stop(sc); 1686 1687 if (sc->nge_tbi) { --- 156 unchanged lines hidden (view full) --- 1844 CSR_WRITE_4(sc, NGE_IER, 1); 1845 1846 /* Enable receiver and transmitter. */ 1847 NGE_CLRBIT(sc, NGE_CSR, NGE_CSR_TX_DISABLE|NGE_CSR_RX_DISABLE); 1848 NGE_SETBIT(sc, NGE_CSR, NGE_CSR_RX_ENABLE); 1849 1850 nge_ifmedia_upd(ifp); 1851 | 1680 return; 1681 1682 /* 1683 * Cancel pending I/O and free all RX/TX buffers. 1684 */ 1685 nge_stop(sc); 1686 1687 if (sc->nge_tbi) { --- 156 unchanged lines hidden (view full) --- 1844 CSR_WRITE_4(sc, NGE_IER, 1); 1845 1846 /* Enable receiver and transmitter. */ 1847 NGE_CLRBIT(sc, NGE_CSR, NGE_CSR_TX_DISABLE|NGE_CSR_RX_DISABLE); 1848 NGE_SETBIT(sc, NGE_CSR, NGE_CSR_RX_ENABLE); 1849 1850 nge_ifmedia_upd(ifp); 1851 |
1852 ifp->if_flags |= IFF_RUNNING; 1853 ifp->if_flags &= ~IFF_OACTIVE; | 1852 ifp->if_drv_flags |= IFF_DRV_RUNNING; 1853 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; |
1854 1855 return; 1856} 1857 1858/* 1859 * Set media options. 1860 */ 1861static int --- 132 unchanged lines hidden (view full) --- 1994 ifp->if_capenable |= IFCAP_TXCSUM; 1995 ifp->if_hwassist = NGE_CSUM_FEATURES; 1996 } 1997 } 1998 break; 1999 case SIOCSIFFLAGS: 2000 NGE_LOCK(sc); 2001 if (ifp->if_flags & IFF_UP) { | 1854 1855 return; 1856} 1857 1858/* 1859 * Set media options. 1860 */ 1861static int --- 132 unchanged lines hidden (view full) --- 1994 ifp->if_capenable |= IFCAP_TXCSUM; 1995 ifp->if_hwassist = NGE_CSUM_FEATURES; 1996 } 1997 } 1998 break; 1999 case SIOCSIFFLAGS: 2000 NGE_LOCK(sc); 2001 if (ifp->if_flags & IFF_UP) { |
2002 if (ifp->if_flags & IFF_RUNNING && | 2002 if (ifp->if_drv_flags & IFF_DRV_RUNNING && |
2003 ifp->if_flags & IFF_PROMISC && 2004 !(sc->nge_if_flags & IFF_PROMISC)) { 2005 NGE_SETBIT(sc, NGE_RXFILT_CTL, 2006 NGE_RXFILTCTL_ALLPHYS| 2007 NGE_RXFILTCTL_ALLMULTI); | 2003 ifp->if_flags & IFF_PROMISC && 2004 !(sc->nge_if_flags & IFF_PROMISC)) { 2005 NGE_SETBIT(sc, NGE_RXFILT_CTL, 2006 NGE_RXFILTCTL_ALLPHYS| 2007 NGE_RXFILTCTL_ALLMULTI); |
2008 } else if (ifp->if_flags & IFF_RUNNING && | 2008 } else if (ifp->if_drv_flags & IFF_DRV_RUNNING && |
2009 !(ifp->if_flags & IFF_PROMISC) && 2010 sc->nge_if_flags & IFF_PROMISC) { 2011 NGE_CLRBIT(sc, NGE_RXFILT_CTL, 2012 NGE_RXFILTCTL_ALLPHYS); 2013 if (!(ifp->if_flags & IFF_ALLMULTI)) 2014 NGE_CLRBIT(sc, NGE_RXFILT_CTL, 2015 NGE_RXFILTCTL_ALLMULTI); 2016 } else { | 2009 !(ifp->if_flags & IFF_PROMISC) && 2010 sc->nge_if_flags & IFF_PROMISC) { 2011 NGE_CLRBIT(sc, NGE_RXFILT_CTL, 2012 NGE_RXFILTCTL_ALLPHYS); 2013 if (!(ifp->if_flags & IFF_ALLMULTI)) 2014 NGE_CLRBIT(sc, NGE_RXFILT_CTL, 2015 NGE_RXFILTCTL_ALLMULTI); 2016 } else { |
2017 ifp->if_flags &= ~IFF_RUNNING; | 2017 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; |
2018 nge_init_locked(sc); 2019 } 2020 } else { | 2018 nge_init_locked(sc); 2019 } 2020 } else { |
2021 if (ifp->if_flags & IFF_RUNNING) | 2021 if (ifp->if_drv_flags & IFF_DRV_RUNNING) |
2022 nge_stop(sc); 2023 } 2024 sc->nge_if_flags = ifp->if_flags; 2025 NGE_UNLOCK(sc); 2026 error = 0; 2027 break; 2028 case SIOCADDMULTI: 2029 case SIOCDELMULTI: --- 34 unchanged lines hidden (view full) --- 2064 sc = ifp->if_softc; 2065 2066 ifp->if_oerrors++; 2067 printf("nge%d: watchdog timeout\n", sc->nge_unit); 2068 2069 NGE_LOCK(sc); 2070 nge_stop(sc); 2071 nge_reset(sc); | 2022 nge_stop(sc); 2023 } 2024 sc->nge_if_flags = ifp->if_flags; 2025 NGE_UNLOCK(sc); 2026 error = 0; 2027 break; 2028 case SIOCADDMULTI: 2029 case SIOCDELMULTI: --- 34 unchanged lines hidden (view full) --- 2064 sc = ifp->if_softc; 2065 2066 ifp->if_oerrors++; 2067 printf("nge%d: watchdog timeout\n", sc->nge_unit); 2068 2069 NGE_LOCK(sc); 2070 nge_stop(sc); 2071 nge_reset(sc); |
2072 ifp->if_flags &= ~IFF_RUNNING; | 2072 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; |
2073 nge_init_locked(sc); 2074 2075 if (ifp->if_snd.ifq_head != NULL) 2076 nge_start_locked(ifp); 2077 2078 NGE_UNLOCK(sc); 2079 2080 return; --- 56 unchanged lines hidden (view full) --- 2137 m_freem(sc->nge_ldata->nge_tx_list[i].nge_mbuf); 2138 sc->nge_ldata->nge_tx_list[i].nge_mbuf = NULL; 2139 } 2140 } 2141 2142 bzero((char *)&sc->nge_ldata->nge_tx_list, 2143 sizeof(sc->nge_ldata->nge_tx_list)); 2144 | 2073 nge_init_locked(sc); 2074 2075 if (ifp->if_snd.ifq_head != NULL) 2076 nge_start_locked(ifp); 2077 2078 NGE_UNLOCK(sc); 2079 2080 return; --- 56 unchanged lines hidden (view full) --- 2137 m_freem(sc->nge_ldata->nge_tx_list[i].nge_mbuf); 2138 sc->nge_ldata->nge_tx_list[i].nge_mbuf = NULL; 2139 } 2140 } 2141 2142 bzero((char *)&sc->nge_ldata->nge_tx_list, 2143 sizeof(sc->nge_ldata->nge_tx_list)); 2144 |
2145 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE); | 2145 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); |
2146 2147 return; 2148} 2149 2150/* 2151 * Stop all chip I/O so that the kernel's probe routines don't 2152 * get confused by errant DMAs when rebooting. 2153 */ --- 15 unchanged lines hidden --- | 2146 2147 return; 2148} 2149 2150/* 2151 * Stop all chip I/O so that the kernel's probe routines don't 2152 * get confused by errant DMAs when rebooting. 2153 */ --- 15 unchanged lines hidden --- |