Re: [CFT] Ralink RT2860, RT2870, RT3060, RT3090 support
--Boundary-00=_eYQpPv8wqFkpfch
Content-Type: Text/Plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
On Saturday 05 May 2012 09:52:58 Sergey V. Dyatko wrote:
> On Thu, 3 May 2012 18:53:52 +0200
> Bernhard Schmidt <bschmidt@freebsd.org> wrote:
>
> > Hi folks,
> >
> > As some of you might know there has been some work going on porting
> > support for new Ralink chipsets from OpenBSD. Several different
> > drivers where floating around but nothing seemed to be decent enough
> > to be committed. ray@ and I had been working on cleaning up one of
> > those to get it into a good enough shape, but abandoned this approach
> > as it resulted in more work than starting from scratch.
> >
> > So, attached diff [1] is a from-scratch effort to port over support
> > for the new chipsets. It doesn't contain fancy stuff like 802.11n
> > support as of yet (this will be worked one once the legacy stuff is
> > in HEAD), nonetheless it showed pretty decent performance during the
> > basic sta/adhoc/hostap tests I've done.
> >
> > I'd appreciate testing and feedback ;)
> >
> at 1st I would say 'Thank You' for all people who working on this :)
>
> patch, make, make install, kldload:
> http://tiger.ipfw.ru/files/rt2860_3090.txt
>
> this is FreeBSD 10.0-CURRENT, r234992M: Fri May 4 11:25:53 FET 2012
> from time to time on messages:
> May 5 10:32:47 laptop kernel: ral0: device timeout
> May 5 10:37:49 laptop kernel: ral0: device timeout
> May 5 10:42:50 laptop kernel: ral0: device timeout
>
> LED... is just glowing, rarely blinks. With patch from Alexander (ray@)
> it doesn't work
>
> [tiger@laptop]~%scp tiger:/storage/FreeBSD-8.2-RELEASE-amd64-dvd1.iso .
> FreeBSD-8.2-RELEASE-amd64-dvd1.iso 11%
> 271MB 1.9MB/s 18:19 ETA
> ^C
> Killed by signal 2.
> where 'tiger' is my desktop
Please apply attached patch (also here [1]) on top of the first one,
it fixes channel switching for >= 3070 (called the wrong function,
doh..) as well as a bgscan issue.
[1] http://techwires.net/~bschmidt/rt2860_1.diff
--
Bernhard
--Boundary-00=_eYQpPv8wqFkpfch
Content-Type: text/x-patch;
charset="UTF-8";
name="rt2860_1.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="rt2860_1.diff"
Index: sys/dev/ral/rt2860.c
===================================================================
--- sys/dev/ral/rt2860.c (revision 234847)
+++ sys/dev/ral/rt2860.c (working copy)
@@ -1605,10 +1605,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
ieee80211_radiotap_tx(vap, m);
}
- if (hdrlen & 3)
- pad = 4 - (hdrlen & 3);
- else
- pad = 0;
+ pad = (hdrlen + 3) & ~3;
/* copy and trim 802.11 header */
memcpy(txwi + 1, wh, hdrlen);
@@ -1667,7 +1664,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
/* first segment is TXWI + 802.11 header */
txd = &ring->txd[ring->cur];
txd->sdp0 = htole32(data->paddr);
- txd->sdl0 = htole16(sizeof (struct rt2860_txwi) + hdrlen + pad);
+ txd->sdl0 = htole16(sizeof (struct rt2860_txwi) + pad);
txd->flags = qsel;
/* setup payload segments */
@@ -1776,7 +1773,7 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m,
u_int hdrlen;
uint16_t dur;
uint8_t type, qsel, mcs, pid, tid, qid;
- int i, nsegs, ntxds, rate, ridx, error;
+ int i, nsegs, ntxds, pad, rate, ridx, error;
/* the data pool contains at least one element, pick the first */
data = SLIST_FIRST(&sc->data_pool);
@@ -1860,6 +1857,8 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m,
ieee80211_radiotap_tx(vap, m);
}
+ pad = (hdrlen + 3) & ~3;
+
/* copy and trim 802.11 header */
memcpy(txwi + 1, wh, hdrlen);
m_adj(m, hdrlen);
@@ -1917,7 +1916,7 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m,
/* first segment is TXWI + 802.11 header */
txd = &ring->txd[ring->cur];
txd->sdp0 = htole32(data->paddr);
- txd->sdl0 = htole16(sizeof (struct rt2860_txwi) + hdrlen);
+ txd->sdl0 = htole16(sizeof (struct rt2860_txwi) + pad);
txd->flags = qsel;
/* setup payload segments */
@@ -2336,7 +2335,6 @@ rt2860_scan_start(struct ieee80211com *ic)
tmp & ~(RT2860_BCN_TX_EN | RT2860_TSF_TIMER_EN |
RT2860_TBTT_TIMER_EN));
rt2860_set_gp_timer(sc, 0);
- rt2860_set_bssid(sc, ifp->if_broadcastaddr);
}
static void
@@ -2346,10 +2344,10 @@ rt2860_scan_end(struct ieee80211com *ic)
struct rt2860_softc *sc = ifp->if_softc;
struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
- rt2860_enable_tsf_sync(sc);
- /* XXX keep local copy */
- rt2860_set_bssid(sc, vap->iv_bss->ni_bssid);
- rt2860_set_gp_timer(sc, 500);
+ if (vap->iv_state == IEEE80211_S_RUN) {
+ rt2860_enable_tsf_sync(sc);
+ rt2860_set_gp_timer(sc, 500);
+ }
}
static void
@@ -2359,7 +2357,7 @@ rt2860_set_channel(struct ieee80211com *ic)
struct rt2860_softc *sc = ifp->if_softc;
RAL_LOCK(sc);
- rt2860_set_chan(sc, ieee80211_chan2ieee(ic, ic->ic_curchan));
+ rt2860_switch_chan(sc, ic->ic_curchan);
RAL_UNLOCK(sc);
}
--Boundary-00=_eYQpPv8wqFkpfch
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
--Boundary-00=_eYQpPv8wqFkpfch--
討論串 (同標題文章)
完整討論串 (本文為第 8 之 19 篇):