feedback: the patch is fine for me,it works great! Thank you very much! do I need send a PR for this problem?
2013/1/1 Jov <[email protected]> > thanks very much,i will try the patch. > > jov > 在 2013-1-1 下午1:19,"PseudoCylon" <[email protected]>写道: > > > Message: 13 >> > Date: Mon, 31 Dec 2012 18:11:04 +0800 >> > From: Jov <[email protected]> >> > To: [email protected] >> > Subject: buffalo wli-uc-gn wireless card sometimes unusable and emit >> > "run0: wcid=xx out of range" >> > Message-ID: >> > < >> cadyruxprp6os2mpk51yiwog-jkwtq+xpop48uzq+y15_our...@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; >> > -- jov blog: http:amutu.com/blog _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[email protected]"
