summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/dev/dc/if_dc.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/dev/dc/if_dc.c')
-rw-r--r--freebsd/sys/dev/dc/if_dc.c46
1 files changed, 21 insertions, 25 deletions
diff --git a/freebsd/sys/dev/dc/if_dc.c b/freebsd/sys/dev/dc/if_dc.c
index 0c7a46cb..5b0aaffd 100644
--- a/freebsd/sys/dev/dc/if_dc.c
+++ b/freebsd/sys/dev/dc/if_dc.c
@@ -109,6 +109,7 @@ __FBSDID("$FreeBSD$");
#include <sys/socket.h>
#include <net/if.h>
+#include <net/if_var.h>
#include <net/if_arp.h>
#include <net/ethernet.h>
#include <net/if_dl.h>
@@ -672,20 +673,16 @@ dc_miibus_readreg(device_t dev, int phy, int reg)
* code think there's a PHY here.
*/
return (BMSR_MEDIAMASK);
- break;
case MII_PHYIDR1:
if (DC_IS_PNIC(sc))
return (DC_VENDORID_LO);
return (DC_VENDORID_DEC);
- break;
case MII_PHYIDR2:
if (DC_IS_PNIC(sc))
return (DC_DEVICEID_82C168);
return (DC_DEVICEID_21143);
- break;
default:
return (0);
- break;
}
} else
return (0);
@@ -749,7 +746,6 @@ dc_miibus_readreg(device_t dev, int phy, int reg)
device_printf(dev, "phy_read: bad phy register %x\n",
reg);
return (0);
- break;
}
rval = CSR_READ_4(sc, phy_reg) & 0x0000FFFF;
@@ -1983,9 +1979,9 @@ dc_dma_free(struct dc_softc *sc)
/* RX descriptor list. */
if (sc->dc_rx_ltag) {
- if (sc->dc_rx_lmap != NULL)
+ if (sc->dc_ldata.dc_rx_list_paddr != 0)
bus_dmamap_unload(sc->dc_rx_ltag, sc->dc_rx_lmap);
- if (sc->dc_rx_lmap != NULL && sc->dc_ldata.dc_rx_list != NULL)
+ if (sc->dc_ldata.dc_rx_list != NULL)
bus_dmamem_free(sc->dc_rx_ltag, sc->dc_ldata.dc_rx_list,
sc->dc_rx_lmap);
bus_dma_tag_destroy(sc->dc_rx_ltag);
@@ -1993,9 +1989,9 @@ dc_dma_free(struct dc_softc *sc)
/* TX descriptor list. */
if (sc->dc_tx_ltag) {
- if (sc->dc_tx_lmap != NULL)
+ if (sc->dc_ldata.dc_tx_list_paddr != 0)
bus_dmamap_unload(sc->dc_tx_ltag, sc->dc_tx_lmap);
- if (sc->dc_tx_lmap != NULL && sc->dc_ldata.dc_tx_list != NULL)
+ if (sc->dc_ldata.dc_tx_list != NULL)
bus_dmamem_free(sc->dc_tx_ltag, sc->dc_ldata.dc_tx_list,
sc->dc_tx_lmap);
bus_dma_tag_destroy(sc->dc_tx_ltag);
@@ -2003,9 +1999,9 @@ dc_dma_free(struct dc_softc *sc)
/* multicast setup frame. */
if (sc->dc_stag) {
- if (sc->dc_smap != NULL)
+ if (sc->dc_saddr != 0)
bus_dmamap_unload(sc->dc_stag, sc->dc_smap);
- if (sc->dc_smap != NULL && sc->dc_cdata.dc_sbuf != NULL)
+ if (sc->dc_cdata.dc_sbuf != NULL)
bus_dmamem_free(sc->dc_stag, sc->dc_cdata.dc_sbuf,
sc->dc_smap);
bus_dma_tag_destroy(sc->dc_stag);
@@ -2485,7 +2481,7 @@ dc_attach(device_t dev)
/*
* Tell the upper layer(s) we support long frames.
*/
- ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
+ ifp->if_hdrlen = sizeof(struct ether_vlan_header);
ifp->if_capabilities |= IFCAP_VLAN_MTU;
ifp->if_capenable = ifp->if_capabilities;
#ifdef DEVICE_POLLING
@@ -2916,9 +2912,9 @@ dc_rxeof(struct dc_softc *sc)
(rxstat & (DC_RXSTAT_CRCERR | DC_RXSTAT_DRIBBLE |
DC_RXSTAT_MIIERE | DC_RXSTAT_COLLSEEN |
DC_RXSTAT_RUNT | DC_RXSTAT_DE))) {
- ifp->if_ierrors++;
+ if_inc_counter(ifp, IFCOUNTER_IERRORS, 1);
if (rxstat & DC_RXSTAT_COLLSEEN)
- ifp->if_collisions++;
+ if_inc_counter(ifp, IFCOUNTER_COLLISIONS, 1);
dc_discard_rxbuf(sc, i);
if (rxstat & DC_RXSTAT_CRCERR)
continue;
@@ -2944,7 +2940,7 @@ dc_rxeof(struct dc_softc *sc)
*/
if (dc_newbuf(sc, i) != 0) {
dc_discard_rxbuf(sc, i);
- ifp->if_iqdrops++;
+ if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
continue;
}
m->m_pkthdr.rcvif = ifp;
@@ -2957,14 +2953,14 @@ dc_rxeof(struct dc_softc *sc)
ETHER_ALIGN, ifp, NULL);
dc_discard_rxbuf(sc, i);
if (m0 == NULL) {
- ifp->if_iqdrops++;
+ if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
continue;
}
m = m0;
}
#endif
- ifp->if_ipackets++;
+ if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
DC_UNLOCK(sc);
(*ifp->if_input)(ifp, m);
DC_LOCK(sc);
@@ -3055,19 +3051,19 @@ dc_txeof(struct dc_softc *sc)
}
if (txstat & DC_TXSTAT_ERRSUM) {
- ifp->if_oerrors++;
+ if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if (txstat & DC_TXSTAT_EXCESSCOLL)
- ifp->if_collisions++;
+ if_inc_counter(ifp, IFCOUNTER_COLLISIONS, 1);
if (txstat & DC_TXSTAT_LATECOLL)
- ifp->if_collisions++;
+ if_inc_counter(ifp, IFCOUNTER_COLLISIONS, 1);
if (!(txstat & DC_TXSTAT_UNDERRUN)) {
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
dc_init_locked(sc);
return;
}
} else
- ifp->if_opackets++;
- ifp->if_collisions += (txstat & DC_TXSTAT_COLLCNT) >> 3;
+ if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
+ if_inc_counter(ifp, IFCOUNTER_COLLISIONS, (txstat & DC_TXSTAT_COLLCNT) >> 3);
bus_dmamap_sync(sc->dc_tx_mtag, sc->dc_cdata.dc_tx_map[idx],
BUS_DMASYNC_POSTWRITE);
@@ -3262,7 +3258,7 @@ dc_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
if (status & (DC_ISR_RX_WATDOGTIMEO | DC_ISR_RX_NOBUF)) {
uint32_t r = CSR_READ_4(sc, DC_FRAMESDISCARDED);
- ifp->if_ierrors += (r & 0xffff) + ((r >> 17) & 0x7ff);
+ if_inc_counter(ifp, IFCOUNTER_IERRORS, (r & 0xffff) + ((r >> 17) & 0x7ff));
if (dc_rx_resync(sc))
dc_rxeof(sc);
@@ -3344,7 +3340,7 @@ dc_intr(void *arg)
if ((status & DC_ISR_RX_WATDOGTIMEO)
|| (status & DC_ISR_RX_NOBUF)) {
r = CSR_READ_4(sc, DC_FRAMESDISCARDED);
- ifp->if_ierrors += (r & 0xffff) + ((r >> 17) & 0x7ff);
+ if_inc_counter(ifp, IFCOUNTER_IERRORS, (r & 0xffff) + ((r >> 17) & 0x7ff));
if (dc_rxeof(sc) == 0) {
while (dc_rx_resync(sc))
dc_rxeof(sc);
@@ -3942,7 +3938,7 @@ dc_watchdog(void *xsc)
}
ifp = sc->dc_ifp;
- ifp->if_oerrors++;
+ if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
device_printf(sc->dc_dev, "watchdog timeout\n");
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;