Deleted Added
full compact
rt2860.c (260444) rt2860.c (271849)
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 *

--- 4 unchanged lines hidden (view full) ---

13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 *
17 * $OpenBSD: rt2860.c,v 1.65 2010/10/23 14:24:54 damien Exp $
18 */
19
20#include <sys/cdefs.h>
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 *

--- 4 unchanged lines hidden (view full) ---

13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 *
17 * $OpenBSD: rt2860.c,v 1.65 2010/10/23 14:24:54 damien Exp $
18 */
19
20#include <sys/cdefs.h>
21__FBSDID("$FreeBSD: head/sys/dev/ral/rt2860.c 260444 2014-01-08 08:06:56Z kevlo $");
21__FBSDID("$FreeBSD: head/sys/dev/ral/rt2860.c 271849 2014-09-19 03:51:26Z glebius $");
22
23/*-
24 * Ralink Technology RT2860/RT3090/RT3390/RT3562 chipset driver
25 * http://www.ralinktech.com/
26 */
27
28#include <sys/param.h>
29#include <sys/sysctl.h>

--- 1092 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);
22
23/*-
24 * Ralink Technology RT2860/RT3090/RT3390/RT3562 chipset driver
25 * http://www.ralinktech.com/
26 */
27
28#include <sys/param.h>
29#include <sys/sysctl.h>

--- 1092 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 ---