[bwn] TX logging / completion fixes
* Log the per-completion status out if requested * If we get a PHY failure, the retrycnt is set to 0 and ack=0, so the logic was incorrect. So, for ack=0, ensure we don't log a retrycnt of 0 (or rate control breaks) or a negative retrycnt (or rate control also breaks.) Tested: * BCM4321 (11abgn N-PHY), BCM4312 (LP-PHY)
This commit is contained in:
parent
4b9a54a9fc
commit
9193516e94
@ -5097,6 +5097,21 @@ bwn_intr_txeof(struct bwn_mac *mac)
|
|||||||
stat.ampdu = (tmp & 0x0020) ? 1 : 0;
|
stat.ampdu = (tmp & 0x0020) ? 1 : 0;
|
||||||
stat.ack = (tmp & 0x0002) ? 1 : 0;
|
stat.ack = (tmp & 0x0002) ? 1 : 0;
|
||||||
|
|
||||||
|
DPRINTF(mac->mac_sc, BWN_DEBUG_XMIT,
|
||||||
|
"%s: cookie=%d, seq=%d, phystat=0x%02x, framecnt=%d, "
|
||||||
|
"rtscnt=%d, sreason=%d, pm=%d, im=%d, ampdu=%d, ack=%d\n",
|
||||||
|
__func__,
|
||||||
|
stat.cookie,
|
||||||
|
stat.seq,
|
||||||
|
stat.phy_stat,
|
||||||
|
stat.framecnt,
|
||||||
|
stat.rtscnt,
|
||||||
|
stat.sreason,
|
||||||
|
stat.pm,
|
||||||
|
stat.im,
|
||||||
|
stat.ampdu,
|
||||||
|
stat.ack);
|
||||||
|
|
||||||
bwn_handle_txeof(mac, &stat);
|
bwn_handle_txeof(mac, &stat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5733,8 +5748,19 @@ bwn_dma_handle_txeof(struct bwn_mac *mac,
|
|||||||
KASSERT(meta->mt_m != NULL,
|
KASSERT(meta->mt_m != NULL,
|
||||||
("%s:%d: fail", __func__, __LINE__));
|
("%s:%d: fail", __func__, __LINE__));
|
||||||
|
|
||||||
/* Just count full frame retries for now */
|
/*
|
||||||
retrycnt = status->framecnt - 1;
|
* If we don't get an ACK, then we should log the
|
||||||
|
* full framecnt. That may be 0 if it's a PHY
|
||||||
|
* failure, so ensure that gets logged as some
|
||||||
|
* retry attempt.
|
||||||
|
*/
|
||||||
|
if (status->ack) {
|
||||||
|
retrycnt = status->framecnt - 1;
|
||||||
|
} else {
|
||||||
|
retrycnt = status->framecnt;
|
||||||
|
if (retrycnt == 0)
|
||||||
|
retrycnt = 1;
|
||||||
|
}
|
||||||
ieee80211_ratectl_tx_complete(meta->mt_ni->ni_vap, meta->mt_ni,
|
ieee80211_ratectl_tx_complete(meta->mt_ni->ni_vap, meta->mt_ni,
|
||||||
status->ack ?
|
status->ack ?
|
||||||
IEEE80211_RATECTL_TX_SUCCESS :
|
IEEE80211_RATECTL_TX_SUCCESS :
|
||||||
@ -5784,8 +5810,19 @@ bwn_pio_handle_txeof(struct bwn_mac *mac,
|
|||||||
* be done before releasing the node reference.
|
* be done before releasing the node reference.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Just count full frame retries for now */
|
/*
|
||||||
retrycnt = status->framecnt - 1;
|
* If we don't get an ACK, then we should log the
|
||||||
|
* full framecnt. That may be 0 if it's a PHY
|
||||||
|
* failure, so ensure that gets logged as some
|
||||||
|
* retry attempt.
|
||||||
|
*/
|
||||||
|
if (status->ack) {
|
||||||
|
retrycnt = status->framecnt - 1;
|
||||||
|
} else {
|
||||||
|
retrycnt = status->framecnt;
|
||||||
|
if (retrycnt == 0)
|
||||||
|
retrycnt = 1;
|
||||||
|
}
|
||||||
ieee80211_ratectl_tx_complete(tp->tp_ni->ni_vap, tp->tp_ni,
|
ieee80211_ratectl_tx_complete(tp->tp_ni->ni_vap, tp->tp_ni,
|
||||||
status->ack ?
|
status->ack ?
|
||||||
IEEE80211_RATECTL_TX_SUCCESS :
|
IEEE80211_RATECTL_TX_SUCCESS :
|
||||||
|
Loading…
Reference in New Issue
Block a user