if_nfe.c (270876) | if_nfe.c (271782) |
---|---|
1/* $OpenBSD: if_nfe.c,v 1.54 2006/04/07 12:38:12 jsg Exp $ */ 2 3/*- 4 * Copyright (c) 2006 Shigeaki Tagashira <shigeaki@se.hiroshima-u.ac.jp> 5 * Copyright (c) 2006 Damien Bergamini <damien.bergamini@free.fr> 6 * Copyright (c) 2005, 2006 Jonathan Gray <jsg@openbsd.org> 7 * 8 * Permission to use, copy, modify, and distribute this software for any --- 7 unchanged lines hidden (view full) --- 16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19 */ 20 21/* Driver for NVIDIA nForce MCP Fast Ethernet and Gigabit Ethernet */ 22 23#include <sys/cdefs.h> | 1/* $OpenBSD: if_nfe.c,v 1.54 2006/04/07 12:38:12 jsg Exp $ */ 2 3/*- 4 * Copyright (c) 2006 Shigeaki Tagashira <shigeaki@se.hiroshima-u.ac.jp> 5 * Copyright (c) 2006 Damien Bergamini <damien.bergamini@free.fr> 6 * Copyright (c) 2005, 2006 Jonathan Gray <jsg@openbsd.org> 7 * 8 * Permission to use, copy, modify, and distribute this software for any --- 7 unchanged lines hidden (view full) --- 16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19 */ 20 21/* Driver for NVIDIA nForce MCP Fast Ethernet and Gigabit Ethernet */ 22 23#include <sys/cdefs.h> |
24__FBSDID("$FreeBSD: head/sys/dev/nfe/if_nfe.c 270876 2014-08-31 12:48:13Z glebius $"); | 24__FBSDID("$FreeBSD: head/sys/dev/nfe/if_nfe.c 271782 2014-09-18 15:56:14Z glebius $"); |
25 26#ifdef HAVE_KERNEL_OPTION_HEADERS 27#include "opt_device_polling.h" 28#endif 29 30#include <sys/param.h> 31#include <sys/endian.h> 32#include <sys/systm.h> --- 2111 unchanged lines hidden (view full) --- 2144 len = le16toh(desc32->length) & NFE_RX_LEN_MASK; 2145 } 2146 2147 if (flags & NFE_RX_READY) 2148 break; 2149 prog++; 2150 if ((sc->nfe_flags & (NFE_JUMBO_SUP | NFE_40BIT_ADDR)) == 0) { 2151 if (!(flags & NFE_RX_VALID_V1)) { | 25 26#ifdef HAVE_KERNEL_OPTION_HEADERS 27#include "opt_device_polling.h" 28#endif 29 30#include <sys/param.h> 31#include <sys/endian.h> 32#include <sys/systm.h> --- 2111 unchanged lines hidden (view full) --- 2144 len = le16toh(desc32->length) & NFE_RX_LEN_MASK; 2145 } 2146 2147 if (flags & NFE_RX_READY) 2148 break; 2149 prog++; 2150 if ((sc->nfe_flags & (NFE_JUMBO_SUP | NFE_40BIT_ADDR)) == 0) { 2151 if (!(flags & NFE_RX_VALID_V1)) { |
2152 if_incierrors(ifp, 1); | 2152 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
2153 nfe_discard_rxbuf(sc, sc->rxq.cur); 2154 continue; 2155 } 2156 if ((flags & NFE_RX_FIXME_V1) == NFE_RX_FIXME_V1) { 2157 flags &= ~NFE_RX_ERROR; 2158 len--; /* fix buffer length */ 2159 } 2160 } else { 2161 if (!(flags & NFE_RX_VALID_V2)) { | 2153 nfe_discard_rxbuf(sc, sc->rxq.cur); 2154 continue; 2155 } 2156 if ((flags & NFE_RX_FIXME_V1) == NFE_RX_FIXME_V1) { 2157 flags &= ~NFE_RX_ERROR; 2158 len--; /* fix buffer length */ 2159 } 2160 } else { 2161 if (!(flags & NFE_RX_VALID_V2)) { |
2162 if_incierrors(ifp, 1); | 2162 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
2163 nfe_discard_rxbuf(sc, sc->rxq.cur); 2164 continue; 2165 } 2166 2167 if ((flags & NFE_RX_FIXME_V2) == NFE_RX_FIXME_V2) { 2168 flags &= ~NFE_RX_ERROR; 2169 len--; /* fix buffer length */ 2170 } 2171 } 2172 2173 if (flags & NFE_RX_ERROR) { | 2163 nfe_discard_rxbuf(sc, sc->rxq.cur); 2164 continue; 2165 } 2166 2167 if ((flags & NFE_RX_FIXME_V2) == NFE_RX_FIXME_V2) { 2168 flags &= ~NFE_RX_ERROR; 2169 len--; /* fix buffer length */ 2170 } 2171 } 2172 2173 if (flags & NFE_RX_ERROR) { |
2174 if_incierrors(ifp, 1); | 2174 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
2175 nfe_discard_rxbuf(sc, sc->rxq.cur); 2176 continue; 2177 } 2178 2179 m = data->m; 2180 if (nfe_newbuf(sc, sc->rxq.cur) != 0) { | 2175 nfe_discard_rxbuf(sc, sc->rxq.cur); 2176 continue; 2177 } 2178 2179 m = data->m; 2180 if (nfe_newbuf(sc, sc->rxq.cur) != 0) { |
2181 if_inciqdrops(ifp, 1); | 2181 if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1); |
2182 nfe_discard_rxbuf(sc, sc->rxq.cur); 2183 continue; 2184 } 2185 2186 if ((vtag & NFE_RX_VTAG) != 0 && 2187 (if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0) { 2188 m->m_pkthdr.ether_vtag = vtag & 0xffff; 2189 m->m_flags |= M_VLANTAG; --- 10 unchanged lines hidden (view full) --- 2200 (flags & NFE_RX_UDP_CSUMOK) != 0) { 2201 m->m_pkthdr.csum_flags |= 2202 CSUM_DATA_VALID | CSUM_PSEUDO_HDR; 2203 m->m_pkthdr.csum_data = 0xffff; 2204 } 2205 } 2206 } 2207 | 2182 nfe_discard_rxbuf(sc, sc->rxq.cur); 2183 continue; 2184 } 2185 2186 if ((vtag & NFE_RX_VTAG) != 0 && 2187 (if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0) { 2188 m->m_pkthdr.ether_vtag = vtag & 0xffff; 2189 m->m_flags |= M_VLANTAG; --- 10 unchanged lines hidden (view full) --- 2200 (flags & NFE_RX_UDP_CSUMOK) != 0) { 2201 m->m_pkthdr.csum_flags |= 2202 CSUM_DATA_VALID | CSUM_PSEUDO_HDR; 2203 m->m_pkthdr.csum_data = 0xffff; 2204 } 2205 } 2206 } 2207 |
2208 if_incipackets(ifp, 1); | 2208 if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); |
2209 2210 NFE_UNLOCK(sc); 2211 if_input(ifp, m); 2212 NFE_LOCK(sc); 2213 rx_npkts++; 2214 } 2215 2216 if (prog > 0) --- 43 unchanged lines hidden (view full) --- 2260 len = le16toh(desc32->length) & NFE_RX_LEN_MASK; 2261 } 2262 2263 if (flags & NFE_RX_READY) 2264 break; 2265 prog++; 2266 if ((sc->nfe_flags & (NFE_JUMBO_SUP | NFE_40BIT_ADDR)) == 0) { 2267 if (!(flags & NFE_RX_VALID_V1)) { | 2209 2210 NFE_UNLOCK(sc); 2211 if_input(ifp, m); 2212 NFE_LOCK(sc); 2213 rx_npkts++; 2214 } 2215 2216 if (prog > 0) --- 43 unchanged lines hidden (view full) --- 2260 len = le16toh(desc32->length) & NFE_RX_LEN_MASK; 2261 } 2262 2263 if (flags & NFE_RX_READY) 2264 break; 2265 prog++; 2266 if ((sc->nfe_flags & (NFE_JUMBO_SUP | NFE_40BIT_ADDR)) == 0) { 2267 if (!(flags & NFE_RX_VALID_V1)) { |
2268 if_incierrors(ifp, 1); | 2268 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
2269 nfe_discard_jrxbuf(sc, sc->jrxq.jcur); 2270 continue; 2271 } 2272 if ((flags & NFE_RX_FIXME_V1) == NFE_RX_FIXME_V1) { 2273 flags &= ~NFE_RX_ERROR; 2274 len--; /* fix buffer length */ 2275 } 2276 } else { 2277 if (!(flags & NFE_RX_VALID_V2)) { | 2269 nfe_discard_jrxbuf(sc, sc->jrxq.jcur); 2270 continue; 2271 } 2272 if ((flags & NFE_RX_FIXME_V1) == NFE_RX_FIXME_V1) { 2273 flags &= ~NFE_RX_ERROR; 2274 len--; /* fix buffer length */ 2275 } 2276 } else { 2277 if (!(flags & NFE_RX_VALID_V2)) { |
2278 if_incierrors(ifp, 1); | 2278 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
2279 nfe_discard_jrxbuf(sc, sc->jrxq.jcur); 2280 continue; 2281 } 2282 2283 if ((flags & NFE_RX_FIXME_V2) == NFE_RX_FIXME_V2) { 2284 flags &= ~NFE_RX_ERROR; 2285 len--; /* fix buffer length */ 2286 } 2287 } 2288 2289 if (flags & NFE_RX_ERROR) { | 2279 nfe_discard_jrxbuf(sc, sc->jrxq.jcur); 2280 continue; 2281 } 2282 2283 if ((flags & NFE_RX_FIXME_V2) == NFE_RX_FIXME_V2) { 2284 flags &= ~NFE_RX_ERROR; 2285 len--; /* fix buffer length */ 2286 } 2287 } 2288 2289 if (flags & NFE_RX_ERROR) { |
2290 if_incierrors(ifp, 1); | 2290 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
2291 nfe_discard_jrxbuf(sc, sc->jrxq.jcur); 2292 continue; 2293 } 2294 2295 m = data->m; 2296 if (nfe_jnewbuf(sc, sc->jrxq.jcur) != 0) { | 2291 nfe_discard_jrxbuf(sc, sc->jrxq.jcur); 2292 continue; 2293 } 2294 2295 m = data->m; 2296 if (nfe_jnewbuf(sc, sc->jrxq.jcur) != 0) { |
2297 if_inciqdrops(ifp, 1); | 2297 if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1); |
2298 nfe_discard_jrxbuf(sc, sc->jrxq.jcur); 2299 continue; 2300 } 2301 2302 if ((vtag & NFE_RX_VTAG) != 0 && 2303 (if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0) { 2304 m->m_pkthdr.ether_vtag = vtag & 0xffff; 2305 m->m_flags |= M_VLANTAG; --- 10 unchanged lines hidden (view full) --- 2316 (flags & NFE_RX_UDP_CSUMOK) != 0) { 2317 m->m_pkthdr.csum_flags |= 2318 CSUM_DATA_VALID | CSUM_PSEUDO_HDR; 2319 m->m_pkthdr.csum_data = 0xffff; 2320 } 2321 } 2322 } 2323 | 2298 nfe_discard_jrxbuf(sc, sc->jrxq.jcur); 2299 continue; 2300 } 2301 2302 if ((vtag & NFE_RX_VTAG) != 0 && 2303 (if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0) { 2304 m->m_pkthdr.ether_vtag = vtag & 0xffff; 2305 m->m_flags |= M_VLANTAG; --- 10 unchanged lines hidden (view full) --- 2316 (flags & NFE_RX_UDP_CSUMOK) != 0) { 2317 m->m_pkthdr.csum_flags |= 2318 CSUM_DATA_VALID | CSUM_PSEUDO_HDR; 2319 m->m_pkthdr.csum_data = 0xffff; 2320 } 2321 } 2322 } 2323 |
2324 if_incipackets(ifp, 1); | 2324 if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); |
2325 2326 NFE_UNLOCK(sc); 2327 if_input(ifp, m); 2328 NFE_LOCK(sc); 2329 rx_npkts++; 2330 } 2331 2332 if (prog > 0) --- 41 unchanged lines hidden (view full) --- 2374 2375 if ((sc->nfe_flags & (NFE_JUMBO_SUP | NFE_40BIT_ADDR)) == 0) { 2376 if ((flags & NFE_TX_LASTFRAG_V1) == 0) 2377 continue; 2378 if ((flags & NFE_TX_ERROR_V1) != 0) { 2379 device_printf(sc->nfe_dev, 2380 "tx v1 error 0x%4b\n", flags, NFE_V1_TXERR); 2381 | 2325 2326 NFE_UNLOCK(sc); 2327 if_input(ifp, m); 2328 NFE_LOCK(sc); 2329 rx_npkts++; 2330 } 2331 2332 if (prog > 0) --- 41 unchanged lines hidden (view full) --- 2374 2375 if ((sc->nfe_flags & (NFE_JUMBO_SUP | NFE_40BIT_ADDR)) == 0) { 2376 if ((flags & NFE_TX_LASTFRAG_V1) == 0) 2377 continue; 2378 if ((flags & NFE_TX_ERROR_V1) != 0) { 2379 device_printf(sc->nfe_dev, 2380 "tx v1 error 0x%4b\n", flags, NFE_V1_TXERR); 2381 |
2382 if_incoerrors(ifp, 1); | 2382 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
2383 } else | 2383 } else |
2384 if_incopackets(ifp, 1); | 2384 if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); |
2385 } else { 2386 if ((flags & NFE_TX_LASTFRAG_V2) == 0) 2387 continue; 2388 if ((flags & NFE_TX_ERROR_V2) != 0) { 2389 device_printf(sc->nfe_dev, 2390 "tx v2 error 0x%4b\n", flags, NFE_V2_TXERR); | 2385 } else { 2386 if ((flags & NFE_TX_LASTFRAG_V2) == 0) 2387 continue; 2388 if ((flags & NFE_TX_ERROR_V2) != 0) { 2389 device_printf(sc->nfe_dev, 2390 "tx v2 error 0x%4b\n", flags, NFE_V2_TXERR); |
2391 if_incoerrors(ifp, 1); | 2391 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
2392 } else | 2392 } else |
2393 if_incopackets(ifp, 1); | 2393 if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); |
2394 } 2395 2396 /* last fragment of the mbuf chain transmitted */ 2397 KASSERT(data->m != NULL, ("%s: freeing NULL mbuf!", __func__)); 2398 bus_dmamap_sync(sc->txq.tx_data_tag, data->tx_data_map, 2399 BUS_DMASYNC_POSTWRITE); 2400 bus_dmamap_unload(sc->txq.tx_data_tag, data->tx_data_map); 2401 m_freem(data->m); --- 316 unchanged lines hidden (view full) --- 2718 NFE_WRITE(sc, NFE_RXTX_CTL, NFE_RXTX_KICKTX | sc->rxtxctl); 2719 return; 2720 } 2721 sc->nfe_force_tx = 0; 2722 2723 if_printf(ifp, "watchdog timeout\n"); 2724 2725 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); | 2394 } 2395 2396 /* last fragment of the mbuf chain transmitted */ 2397 KASSERT(data->m != NULL, ("%s: freeing NULL mbuf!", __func__)); 2398 bus_dmamap_sync(sc->txq.tx_data_tag, data->tx_data_map, 2399 BUS_DMASYNC_POSTWRITE); 2400 bus_dmamap_unload(sc->txq.tx_data_tag, data->tx_data_map); 2401 m_freem(data->m); --- 316 unchanged lines hidden (view full) --- 2718 NFE_WRITE(sc, NFE_RXTX_CTL, NFE_RXTX_KICKTX | sc->rxtxctl); 2719 return; 2720 } 2721 sc->nfe_force_tx = 0; 2722 2723 if_printf(ifp, "watchdog timeout\n"); 2724 2725 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); |
2726 if_incoerrors(ifp, 1); | 2726 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
2727 nfe_init_locked(sc); 2728} 2729 2730 2731static void 2732nfe_init(void *xsc) 2733{ 2734 struct nfe_softc *sc = xsc; --- 683 unchanged lines hidden --- | 2727 nfe_init_locked(sc); 2728} 2729 2730 2731static void 2732nfe_init(void *xsc) 2733{ 2734 struct nfe_softc *sc = xsc; --- 683 unchanged lines hidden --- |