X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=carlfw%2Fsrc%2Fwlan.c;fp=carlfw%2Fsrc%2Fwlan.c;h=94ed62250d806ed262cdc86c316d2df4370fa35c;hb=a9df280e9edf83ab1596a81c1bf47cd2e72f3d50;hp=b83e672287c0e971469b878ec124d695bf4d363e;hpb=500397585d53a08f83d1798c0e871c91667a2be3;p=carl9170fw.git diff --git a/carlfw/src/wlan.c b/carlfw/src/wlan.c index b83e672..94ed622 100644 --- a/carlfw/src/wlan.c +++ b/carlfw/src/wlan.c @@ -526,7 +526,7 @@ static void wlan_send_buffered_ba(void) struct ieee80211_ba *ba = (struct ieee80211_ba *) &baf->f.ba; struct carl9170_bar_ctx *ctx; - if (likely(fw.wlan.ba_head_idx == fw.wlan.ba_tail_idx)) + if (likely(!fw.wlan.queued_ba)) return; /* there's no point to continue when the ba_desc is not available. */ @@ -536,6 +536,7 @@ static void wlan_send_buffered_ba(void) ctx = &fw.wlan.ba_cache[fw.wlan.ba_head_idx]; fw.wlan.ba_head_idx++; fw.wlan.ba_head_idx %= CONFIG_CARL9170FW_BACK_REQS_NUM; + fw.wlan.queued_ba--; baf->s.len = sizeof(struct carl9170_tx_superdesc) + sizeof(struct ar9170_tx_hwdesc) + @@ -582,6 +583,8 @@ static struct carl9170_bar_ctx *wlan_get_bar_cache_buffer(void) tmp = &fw.wlan.ba_cache[fw.wlan.ba_tail_idx]; fw.wlan.ba_tail_idx++; fw.wlan.ba_tail_idx %= CONFIG_CARL9170FW_BACK_REQS_NUM; + if (fw.wlan.queued_ba < CONFIG_CARL9170FW_BACK_REQS_NUM) + fw.wlan.queued_ba++; return tmp; }