Deleted Added
full compact
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 ---