rt2860.c (6cec9cad762b6476313fb1f8e931a1647822db6b) | rt2860.c (c8dfaf382fa6df9dc6fd1e1c3356e0c8bf607e6a) |
---|---|
1/*- 2 * Copyright (c) 2007-2010 Damien Bergamini <damien.bergamini@free.fr> 3 * Copyright (c) 2012 Bernhard Schmidt <bschmidt@FreeBSD.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * --- 1113 unchanged lines hidden (view full) --- 1122 retrycnt = 1; 1123 else 1124 retrycnt = 0; 1125 ieee80211_ratectl_tx_complete(ni->ni_vap, ni, 1126 IEEE80211_RATECTL_TX_SUCCESS, &retrycnt, NULL); 1127 } else { 1128 ieee80211_ratectl_tx_complete(ni->ni_vap, ni, 1129 IEEE80211_RATECTL_TX_FAILURE, &retrycnt, NULL); | 1/*- 2 * Copyright (c) 2007-2010 Damien Bergamini <damien.bergamini@free.fr> 3 * Copyright (c) 2012 Bernhard Schmidt <bschmidt@FreeBSD.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * --- 1113 unchanged lines hidden (view full) --- 1122 retrycnt = 1; 1123 else 1124 retrycnt = 0; 1125 ieee80211_ratectl_tx_complete(ni->ni_vap, ni, 1126 IEEE80211_RATECTL_TX_SUCCESS, &retrycnt, NULL); 1127 } else { 1128 ieee80211_ratectl_tx_complete(ni->ni_vap, ni, 1129 IEEE80211_RATECTL_TX_FAILURE, &retrycnt, NULL); |
1130 ifp->if_oerrors++; | 1130 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
1131 } 1132 } 1133} 1134 1135static void 1136rt2860_tx_intr(struct rt2860_softc *sc, int qid) 1137{ 1138 struct ifnet *ifp = sc->sc_ifp; --- 17 unchanged lines hidden (view full) --- 1156 m_freem(data->m); 1157 ieee80211_free_node(data->ni); 1158 data->m = NULL; 1159 data->ni = NULL; 1160 1161 SLIST_INSERT_HEAD(&sc->data_pool, data, next); 1162 ring->data[ring->next] = NULL; 1163 | 1131 } 1132 } 1133} 1134 1135static void 1136rt2860_tx_intr(struct rt2860_softc *sc, int qid) 1137{ 1138 struct ifnet *ifp = sc->sc_ifp; --- 17 unchanged lines hidden (view full) --- 1156 m_freem(data->m); 1157 ieee80211_free_node(data->ni); 1158 data->m = NULL; 1159 data->ni = NULL; 1160 1161 SLIST_INSERT_HEAD(&sc->data_pool, data, next); 1162 ring->data[ring->next] = NULL; 1163 |
1164 ifp->if_opackets++; | 1164 if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); |
1165 } 1166 ring->queued--; 1167 ring->next = (ring->next + 1) % RT2860_TX_RING_COUNT; 1168 } 1169 1170 sc->sc_tx_timer = 0; 1171 if (ring->queued < RT2860_TX_RING_COUNT) 1172 sc->qfullmsk &= ~(1 << qid); --- 46 unchanged lines hidden (view full) --- 1219 1220 if (__predict_false(!(rxd->sdl0 & htole16(RT2860_RX_DDONE)))) { 1221 DPRINTF(("RXD DDONE bit not set!\n")); 1222 break; /* should not happen */ 1223 } 1224 1225 if (__predict_false(rxd->flags & 1226 htole32(RT2860_RX_CRCERR | RT2860_RX_ICVERR))) { | 1165 } 1166 ring->queued--; 1167 ring->next = (ring->next + 1) % RT2860_TX_RING_COUNT; 1168 } 1169 1170 sc->sc_tx_timer = 0; 1171 if (ring->queued < RT2860_TX_RING_COUNT) 1172 sc->qfullmsk &= ~(1 << qid); --- 46 unchanged lines hidden (view full) --- 1219 1220 if (__predict_false(!(rxd->sdl0 & htole16(RT2860_RX_DDONE)))) { 1221 DPRINTF(("RXD DDONE bit not set!\n")); 1222 break; /* should not happen */ 1223 } 1224 1225 if (__predict_false(rxd->flags & 1226 htole32(RT2860_RX_CRCERR | RT2860_RX_ICVERR))) { |
1227 ifp->if_ierrors++; | 1227 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
1228 goto skip; 1229 } 1230 1231#ifdef HW_CRYPTO 1232 if (__predict_false(rxd->flags & htole32(RT2860_RX_MICERR))) { 1233 /* report MIC failures to net80211 for TKIP */ 1234 ic->ic_stats.is_rx_locmicfail++; 1235 ieee80211_michael_mic_failure(ic, 0/* XXX */); | 1228 goto skip; 1229 } 1230 1231#ifdef HW_CRYPTO 1232 if (__predict_false(rxd->flags & htole32(RT2860_RX_MICERR))) { 1233 /* report MIC failures to net80211 for TKIP */ 1234 ic->ic_stats.is_rx_locmicfail++; 1235 ieee80211_michael_mic_failure(ic, 0/* XXX */); |
1236 ifp->if_ierrors++; | 1236 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
1237 goto skip; 1238 } 1239#endif 1240 1241 m1 = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); 1242 if (__predict_false(m1 == NULL)) { | 1237 goto skip; 1238 } 1239#endif 1240 1241 m1 = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); 1242 if (__predict_false(m1 == NULL)) { |
1243 ifp->if_ierrors++; | 1243 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
1244 goto skip; 1245 } 1246 1247 bus_dmamap_sync(sc->rxq.data_dmat, data->map, 1248 BUS_DMASYNC_POSTREAD); 1249 bus_dmamap_unload(sc->rxq.data_dmat, data->map); 1250 1251 error = bus_dmamap_load(sc->rxq.data_dmat, data->map, --- 7 unchanged lines hidden (view full) --- 1259 mtod(data->m, void *), MCLBYTES, 1260 rt2860_dma_map_addr, &physaddr, 0); 1261 if (__predict_false(error != 0)) { 1262 panic("%s: could not load old rx mbuf", 1263 device_get_name(sc->sc_dev)); 1264 } 1265 /* physical address may have changed */ 1266 rxd->sdp0 = htole32(physaddr); | 1244 goto skip; 1245 } 1246 1247 bus_dmamap_sync(sc->rxq.data_dmat, data->map, 1248 BUS_DMASYNC_POSTREAD); 1249 bus_dmamap_unload(sc->rxq.data_dmat, data->map); 1250 1251 error = bus_dmamap_load(sc->rxq.data_dmat, data->map, --- 7 unchanged lines hidden (view full) --- 1259 mtod(data->m, void *), MCLBYTES, 1260 rt2860_dma_map_addr, &physaddr, 0); 1261 if (__predict_false(error != 0)) { 1262 panic("%s: could not load old rx mbuf", 1263 device_get_name(sc->sc_dev)); 1264 } 1265 /* physical address may have changed */ 1266 rxd->sdp0 = htole32(physaddr); |
1267 ifp->if_ierrors++; | 1267 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
1268 goto skip; 1269 } 1270 1271 /* 1272 * New mbuf successfully loaded, update Rx ring and continue 1273 * processing. 1274 */ 1275 m = data->m; --- 463 unchanged lines hidden (view full) --- 1739 * Caller supplied explicit parameters to use in 1740 * sending the frame. 1741 */ 1742 error = rt2860_tx_raw(sc, m, ni, params); 1743 } 1744 if (error != 0) { 1745 /* NB: m is reclaimed on tx failure */ 1746 ieee80211_free_node(ni); | 1268 goto skip; 1269 } 1270 1271 /* 1272 * New mbuf successfully loaded, update Rx ring and continue 1273 * processing. 1274 */ 1275 m = data->m; --- 463 unchanged lines hidden (view full) --- 1739 * Caller supplied explicit parameters to use in 1740 * sending the frame. 1741 */ 1742 error = rt2860_tx_raw(sc, m, ni, params); 1743 } 1744 if (error != 0) { 1745 /* NB: m is reclaimed on tx failure */ 1746 ieee80211_free_node(ni); |
1747 ifp->if_oerrors++; | 1747 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
1748 } 1749 sc->sc_tx_timer = 5; 1750 RAL_UNLOCK(sc); 1751 return error; 1752} 1753 1754static int 1755rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m, --- 236 unchanged lines hidden (view full) --- 1992 break; 1993 } 1994 IFQ_DRV_DEQUEUE(&ifp->if_snd, m); 1995 if (m == NULL) 1996 break; 1997 ni = (struct ieee80211_node *)m->m_pkthdr.rcvif; 1998 if (rt2860_tx(sc, m, ni) != 0) { 1999 ieee80211_free_node(ni); | 1748 } 1749 sc->sc_tx_timer = 5; 1750 RAL_UNLOCK(sc); 1751 return error; 1752} 1753 1754static int 1755rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m, --- 236 unchanged lines hidden (view full) --- 1992 break; 1993 } 1994 IFQ_DRV_DEQUEUE(&ifp->if_snd, m); 1995 if (m == NULL) 1996 break; 1997 ni = (struct ieee80211_node *)m->m_pkthdr.rcvif; 1998 if (rt2860_tx(sc, m, ni) != 0) { 1999 ieee80211_free_node(ni); |
2000 ifp->if_oerrors++; | 2000 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
2001 continue; 2002 } 2003 sc->sc_tx_timer = 5; 2004 } 2005} 2006 2007static void 2008rt2860_watchdog(void *arg) --- 7 unchanged lines hidden (view full) --- 2016 2017 if (sc->sc_invalid) /* card ejected */ 2018 return; 2019 2020 if (sc->sc_tx_timer > 0 && --sc->sc_tx_timer == 0) { 2021 if_printf(ifp, "device timeout\n"); 2022 rt2860_stop_locked(sc); 2023 rt2860_init_locked(sc); | 2001 continue; 2002 } 2003 sc->sc_tx_timer = 5; 2004 } 2005} 2006 2007static void 2008rt2860_watchdog(void *arg) --- 7 unchanged lines hidden (view full) --- 2016 2017 if (sc->sc_invalid) /* card ejected */ 2018 return; 2019 2020 if (sc->sc_tx_timer > 0 && --sc->sc_tx_timer == 0) { 2021 if_printf(ifp, "device timeout\n"); 2022 rt2860_stop_locked(sc); 2023 rt2860_init_locked(sc); |
2024 ifp->if_oerrors++; | 2024 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
2025 return; 2026 } 2027 callout_reset(&sc->watchdog_ch, hz, rt2860_watchdog, sc); 2028} 2029 2030static int 2031rt2860_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) 2032{ --- 2073 unchanged lines hidden --- | 2025 return; 2026 } 2027 callout_reset(&sc->watchdog_ch, hz, rt2860_watchdog, sc); 2028} 2029 2030static int 2031rt2860_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) 2032{ --- 2073 unchanged lines hidden --- |