buffalo wli-uc-gn wireless card sometimes unusable and emit "run0: wcid=xx out of range"
PseudoCylon
moonlightakkiy at yahoo.ca
Tue Jan 1 05:23:20 UTC 2013
> Message: 13
> Date: Mon, 31 Dec 2012 18:11:04 +0800
> From: Jov <zhao6014 at gmail.com>
> To: freebsd-questions at freebsd.org
> Subject: buffalo wli-uc-gn wireless card sometimes unusable and emit
> "run0: wcid=xx out of range"
> Message-ID:
> <CADyrUxPrP6OS2mpK51yiwoG-jKwTQ+XpOP48uZQ+Y15_oUr9Sg at mail.gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1
>
> hi experts:
> I think the hardware is ok because I can use it in Win7. And in Freebsd
> 9.1,it works for sometime,but sometimes after system reboot or I plug out &
> plug in the card it my unusable.on the console it emmit:
> "run0: wcid=xx out of range" where xx is 91,87 and etc.
Please try attached patch.
Reboot or re-plug-in shouldn't be a cause of the problem. Receiving an
association ID larger than device's max (64) is the problem. You must
be using a high-end AP. Reboot or re-plug-in initiate re-association
and just happen to receive a large association ID.
AK
--begin patch--
diff --git a/dev/usb/wlan/if_run.c b/dev/usb/wlan/if_run.c
index 3d2577f..ed11d97 100644
--- a/dev/usb/wlan/if_run.c
+++ b/dev/usb/wlan/if_run.c
@@ -2019,7 +2019,8 @@ run_key_set_cb(void *arg)
wcid = 0; /* NB: update WCID0 for group keys */
base = RT2860_SKEY(RUN_VAP(vap)->rvp_id, k->wk_keyix);
} else {
- wcid = RUN_AID2WCID(associd);
+ wcid = (vap->iv_opmode == IEEE80211_M_STA) ?
+ 1 : RUN_AID2WCID(associd);
base = RT2860_PKEY(wcid);
}
@@ -2374,9 +2375,12 @@ run_newassoc(struct ieee80211_node *ni, int isnew)
struct run_softc *sc = ic->ic_ifp->if_softc;
uint8_t rate;
uint8_t ridx;
- uint8_t wcid = RUN_AID2WCID(ni->ni_associd);
+ uint8_t wcid;
int i, j;
+ wcid = (vap->iv_opmode == IEEE80211_M_STA) ?
+ 1 : RUN_AID2WCID(ni->ni_associd);
+
if (wcid > RT2870_WCID_MAX) {
device_printf(sc->sc_dev, "wcid=%d out of range\n", wcid);
return;
@@ -3044,8 +3048,12 @@ run_tx(struct run_softc *sc, struct mbuf *m,
struct ieee80211_node *ni)
txd->flags = qflags;
txwi = (struct rt2860_txwi *)(txd + 1);
txwi->xflags = xflags;
- txwi->wcid = IEEE80211_IS_MULTICAST(wh->i_addr1) ?
- 0 : RUN_AID2WCID(ni->ni_associd);
+ if (IEEE80211_IS_MULTICAST(wh->i_addr1))
+ txwi->wcid = 0;
+ else {
+ txwi->wcid = (vap->iv_opmode == IEEE80211_M_STA) ?
+ 1 : RUN_AID2WCID(ni->ni_associd);
+ }
/* clear leftover garbage bits */
txwi->flags = 0;
txwi->txop = 0;
More information about the freebsd-questions
mailing list