PERFORCE change 151570 for review
Sam Leffler
sam at FreeBSD.org
Sun Oct 19 20:44:09 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=151570
Change 151570 by sam at sam_ebb on 2008/10/19 20:43:58
move complaints about bad rate codes up a level so we can print
the h/w rate code and other useful info
Affected files ...
.. //depot/projects/vap/sys/dev/ath/ath_rate/sample/sample.c#15 edit
Differences ...
==== //depot/projects/vap/sys/dev/ath/ath_rate/sample/sample.c#15 (text+ko) ====
@@ -393,11 +393,8 @@
size_bin = size_to_bin(frame_size);
size = bin_to_size(size_bin);
- if (!(0 <= ndx0 && ndx0 < sn->num_rates)) {
- printf("%s: bogus ndx0 %d, max %u, mode %u\n",
- __func__, ndx0, sn->num_rates, sc->sc_curmode);
+ if (!(0 <= ndx0 && ndx0 < sn->num_rates))
return;
- }
rate = sn->rates[ndx0].rate;
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx0].rix,
@@ -405,11 +402,8 @@
MIN(tries0, tries) - 1);
tries_so_far += tries0;
if (tries1 && tries0 < tries) {
- if (!(0 <= ndx1 && ndx1 < sn->num_rates)) {
- printf("%s: bogus ndx1 %d, max %u, mode %u\n",
- __func__, ndx1, sn->num_rates, sc->sc_curmode);
+ if (!(0 <= ndx1 && ndx1 < sn->num_rates))
return;
- }
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx1].rix,
short_tries,
MIN(tries1 + tries_so_far, tries) - tries_so_far - 1);
@@ -417,11 +411,8 @@
tries_so_far += tries1;
if (tries2 && tries0 + tries1 < tries) {
- if (!(0 <= ndx2 && ndx2 < sn->num_rates)) {
- printf("%s: bogus ndx2 %d, max %u, mode %u\n",
- __func__, ndx2, sn->num_rates, sc->sc_curmode);
+ if (!(0 <= ndx2 && ndx2 < sn->num_rates))
return;
- }
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx2].rix,
short_tries,
MIN(tries2 + tries_so_far, tries) - tries_so_far - 1);
@@ -430,11 +421,8 @@
tries_so_far += tries2;
if (tries3 && tries0 + tries1 + tries2 < tries) {
- if (!(0 <= ndx3 && ndx3 < sn->num_rates)) {
- printf("%s: bogus ndx3 %d, max %u, mode %u\n",
- __func__, ndx3, sn->num_rates, sc->sc_curmode);
+ if (!(0 <= ndx3 && ndx3 < sn->num_rates))
return;
- }
tt += calc_usecs_unicast_packet(sc, size, sn->rates[ndx3].rix,
short_tries,
MIN(tries3 + tries_so_far, tries) - tries_so_far - 1);
@@ -488,6 +476,13 @@
}
}
+static void
+badrate(struct ifnet *ifp, int series, int hwrate, int tries, int status)
+{
+ if_printf(ifp, "bad series%d hwrate 0x%x, tries %u ts_status 0x%x\n",
+ series, hwrate, tries, status);
+}
+
void
ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an,
const struct ath_buf *bf)
@@ -523,6 +518,10 @@
if (!mrr || !(ts->ts_rate & HAL_TXSTAT_ALTRATE)) {
int ndx = rate_to_ndx(sn, final_rate);
+ if (ndx < 0) {
+ badrate(ifp, 0, ts->ts_rate, long_tries, ts->ts_status);
+ return;
+ }
/*
* Only one rate was used; optimize work.
*/
@@ -576,6 +575,15 @@
tries3 = MS(ds0->ds_ctl2, AR_XmitDataTries3);
ndx3 = rate_to_ndx(sn, rate3);
+ if (tries0 && ndx0 < 0)
+ badrate(ifp, 0, hwrate0, tries0, ts->ts_status);
+ if (tries1 && ndx1 < 0)
+ badrate(ifp, 1, hwrate1, tries1, ts->ts_status);
+ if (tries2 && ndx2 < 0)
+ badrate(ifp, 2, hwrate2, tries2, ts->ts_status);
+ if (tries3 && ndx3 < 0)
+ badrate(ifp, 3, hwrate3, tries3, ts->ts_status);
+
IEEE80211_NOTE(an->an_node.ni_vap, IEEE80211_MSG_RATECTL,
&an->an_node,
"%s: size %d finaltsidx %d tries %d %s rate/try [%d/%d %d/%d %d/%d %d/%d]",
More information about the p4-projects
mailing list