Deleted Added
full compact
if_run.c (228494) if_run.c (228508)
1/*-
2 * Copyright (c) 2008,2010 Damien Bergamini <damien.bergamini@free.fr>
3 * ported to FreeBSD by Akinori Furukoshi <moonlightakkiy@yahoo.ca>
4 * USB Consulting, Hans Petter Selasky <hselasky@freebsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2008,2010 Damien Bergamini <damien.bergamini@free.fr>
3 * ported to FreeBSD by Akinori Furukoshi <moonlightakkiy@yahoo.ca>
4 * USB Consulting, Hans Petter Selasky <hselasky@freebsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include <sys/cdefs.h>
20__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_run.c 228494 2011-12-14 08:52:27Z hselasky $");
20__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_run.c 228508 2011-12-14 22:14:05Z hselasky $");
21
22/*-
23 * Ralink Technology RT2700U/RT2800U/RT3000U chipset driver.
24 * http://www.ralinktech.com/
25 */
26
27#include <sys/param.h>
28#include <sys/sockio.h>

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

2744tr_setup:
2745 data = STAILQ_FIRST(&pq->tx_qh);
2746 if (data == NULL)
2747 break;
2748
2749 STAILQ_REMOVE_HEAD(&pq->tx_qh, next);
2750
2751 m = data->m;
21
22/*-
23 * Ralink Technology RT2700U/RT2800U/RT3000U chipset driver.
24 * http://www.ralinktech.com/
25 */
26
27#include <sys/param.h>
28#include <sys/sockio.h>

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

2744tr_setup:
2745 data = STAILQ_FIRST(&pq->tx_qh);
2746 if (data == NULL)
2747 break;
2748
2749 STAILQ_REMOVE_HEAD(&pq->tx_qh, next);
2750
2751 m = data->m;
2752 if (m->m_pkthdr.len > RUN_MAX_TXSZ) {
2752 if ((m->m_pkthdr.len +
2753 sizeof(data->desc) + 3 + 8) > RUN_MAX_TXSZ) {
2753 DPRINTF("data overflow, %u bytes\n",
2754 m->m_pkthdr.len);
2755
2756 ifp->if_oerrors++;
2757
2758 run_tx_free(pq, data, 1);
2759
2760 goto tr_setup;
2761 }
2762
2763 pc = usbd_xfer_get_frame(xfer, 0);
2764 size = sizeof(data->desc);
2765 usbd_copy_in(pc, 0, &data->desc, size);
2766 usbd_m_copy_in(pc, size, m, 0, m->m_pkthdr.len);
2754 DPRINTF("data overflow, %u bytes\n",
2755 m->m_pkthdr.len);
2756
2757 ifp->if_oerrors++;
2758
2759 run_tx_free(pq, data, 1);
2760
2761 goto tr_setup;
2762 }
2763
2764 pc = usbd_xfer_get_frame(xfer, 0);
2765 size = sizeof(data->desc);
2766 usbd_copy_in(pc, 0, &data->desc, size);
2767 usbd_m_copy_in(pc, size, m, 0, m->m_pkthdr.len);
2768 size += m->m_pkthdr.len;
2769 /*
2770 * Align end on a 4-byte boundary, pad 8 bytes (CRC +
2771 * 4-byte padding), and be sure to zero those trailing
2772 * bytes:
2773 */
2774 usbd_frame_zero(pc, size, ((-size) & 3) + 8);
2775 size += ((-size) & 3) + 8;
2767
2768 vap = data->ni->ni_vap;
2769 if (ieee80211_radiotap_active_vap(vap)) {
2770 struct run_tx_radiotap_header *tap = &sc->sc_txtap;
2771 struct rt2860_txwi *txwi =
2772 (struct rt2860_txwi *)(&data->desc + sizeof(struct rt2870_txd));
2773
2774 tap->wt_flags = 0;
2775 tap->wt_rate = rt2860_rates[data->ridx].rate;
2776 tap->wt_chan_freq = htole16(vap->iv_bss->ni_chan->ic_freq);
2777 tap->wt_chan_flags = htole16(vap->iv_bss->ni_chan->ic_flags);
2778 tap->wt_hwqueue = index;
2779 if (le16toh(txwi->phy) & RT2860_PHY_SHPRE)
2780 tap->wt_flags |= IEEE80211_RADIOTAP_F_SHORTPRE;
2781
2782 ieee80211_radiotap_tx(vap, m);
2783 }
2784
2776
2777 vap = data->ni->ni_vap;
2778 if (ieee80211_radiotap_active_vap(vap)) {
2779 struct run_tx_radiotap_header *tap = &sc->sc_txtap;
2780 struct rt2860_txwi *txwi =
2781 (struct rt2860_txwi *)(&data->desc + sizeof(struct rt2870_txd));
2782
2783 tap->wt_flags = 0;
2784 tap->wt_rate = rt2860_rates[data->ridx].rate;
2785 tap->wt_chan_freq = htole16(vap->iv_bss->ni_chan->ic_freq);
2786 tap->wt_chan_flags = htole16(vap->iv_bss->ni_chan->ic_flags);
2787 tap->wt_hwqueue = index;
2788 if (le16toh(txwi->phy) & RT2860_PHY_SHPRE)
2789 tap->wt_flags |= IEEE80211_RADIOTAP_F_SHORTPRE;
2790
2791 ieee80211_radiotap_tx(vap, m);
2792 }
2793
2785 DPRINTFN(11, "sending frame len=%u @ index %d\n",
2786 m->m_pkthdr.len, index);
2794 DPRINTFN(11, "sending frame len=%u/%u @ index %d\n",
2795 m->m_pkthdr.len, size, index);
2787
2796
2788 usbd_xfer_set_frame_len(xfer, 0, size + m->m_pkthdr.len);
2797 usbd_xfer_set_frame_len(xfer, 0, size);
2789 usbd_xfer_set_priv(xfer, data);
2790
2791 usbd_transfer_submit(xfer);
2792
2793 RUN_UNLOCK(sc);
2794 run_start(ifp);
2795 RUN_LOCK(sc);
2796

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

2869run_bulk_tx_callback5(struct usb_xfer *xfer, usb_error_t error)
2870{
2871 run_bulk_tx_callbackN(xfer, error, 5);
2872}
2873
2874static void
2875run_set_tx_desc(struct run_softc *sc, struct run_tx_data *data)
2876{
2798 usbd_xfer_set_priv(xfer, data);
2799
2800 usbd_transfer_submit(xfer);
2801
2802 RUN_UNLOCK(sc);
2803 run_start(ifp);
2804 RUN_LOCK(sc);
2805

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

2878run_bulk_tx_callback5(struct usb_xfer *xfer, usb_error_t error)
2879{
2880 run_bulk_tx_callbackN(xfer, error, 5);
2881}
2882
2883static void
2884run_set_tx_desc(struct run_softc *sc, struct run_tx_data *data)
2885{
2877 static const uint8_t ztail[16];
2878 struct mbuf *m = data->m;
2879 struct ieee80211com *ic = sc->sc_ifp->if_l2com;
2880 struct ieee80211vap *vap = data->ni->ni_vap;
2881 struct ieee80211_frame *wh;
2882 struct rt2870_txd *txd;
2883 struct rt2860_txwi *txwi;
2884 uint16_t xferlen;
2885 uint16_t mcs;

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

2926 ((ic->ic_flags & IEEE80211_F_USEPROT) &&
2927 rt2860_rates[ridx].phy == IEEE80211_T_OFDM)))
2928 txwi->txop |= RT2860_TX_TXOP_HT;
2929 else
2930 txwi->txop |= RT2860_TX_TXOP_BACKOFF;
2931
2932 if (vap->iv_opmode != IEEE80211_M_STA && !IEEE80211_QOS_HAS_SEQ(wh))
2933 txwi->xflags |= RT2860_TX_NSEQ;
2886 struct mbuf *m = data->m;
2887 struct ieee80211com *ic = sc->sc_ifp->if_l2com;
2888 struct ieee80211vap *vap = data->ni->ni_vap;
2889 struct ieee80211_frame *wh;
2890 struct rt2870_txd *txd;
2891 struct rt2860_txwi *txwi;
2892 uint16_t xferlen;
2893 uint16_t mcs;

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

2934 ((ic->ic_flags & IEEE80211_F_USEPROT) &&
2935 rt2860_rates[ridx].phy == IEEE80211_T_OFDM)))
2936 txwi->txop |= RT2860_TX_TXOP_HT;
2937 else
2938 txwi->txop |= RT2860_TX_TXOP_BACKOFF;
2939
2940 if (vap->iv_opmode != IEEE80211_M_STA && !IEEE80211_QOS_HAS_SEQ(wh))
2941 txwi->xflags |= RT2860_TX_NSEQ;
2934
2935 /*
2936 * Align end on a 4-byte boundary, pad 8 bytes (CRC + 4-byte padding),
2937 * and be sure to zero those trailing bytes.
2938 */
2939 m_append(m, ((m->m_pkthdr.len + 3) & ~3) - m->m_pkthdr.len + 8,
2940 (c_caddr_t)ztail);
2941}
2942
2943/* This function must be called locked */
2944static int
2945run_tx(struct run_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
2946{
2947 struct ieee80211com *ic = sc->sc_ifp->if_l2com;
2948 struct ieee80211vap *vap = ni->ni_vap;

--- 2014 unchanged lines hidden ---
2942}
2943
2944/* This function must be called locked */
2945static int
2946run_tx(struct run_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
2947{
2948 struct ieee80211com *ic = sc->sc_ifp->if_l2com;
2949 struct ieee80211vap *vap = ni->ni_vap;

--- 2014 unchanged lines hidden ---