wl12xx: AP mode - clean BA and queue state in tx_reset
Reset the BA state of all connected stations and explicitly clear the Tx queues. The latter is needed for clearing dummy packets from tx_queue_count. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
f4d3b6ab5e
commit
f1acea9a9d
|
@ -3757,11 +3757,14 @@ static int wl1271_allocate_sta(struct wl1271 *wl,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
|
void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
|
||||||
{
|
{
|
||||||
int id = hlid - WL1271_AP_STA_HLID_START;
|
int id = hlid - WL1271_AP_STA_HLID_START;
|
||||||
|
|
||||||
if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
|
if (hlid < WL1271_AP_STA_HLID_START)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!test_bit(id, wl->ap_hlid_map))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
clear_bit(id, wl->ap_hlid_map);
|
clear_bit(id, wl->ap_hlid_map);
|
||||||
|
|
|
@ -891,6 +891,7 @@ void wl1271_tx_reset(struct wl1271 *wl, bool reset_tx_queues)
|
||||||
/* TX failure */
|
/* TX failure */
|
||||||
if (wl->bss_type == BSS_TYPE_AP_BSS) {
|
if (wl->bss_type == BSS_TYPE_AP_BSS) {
|
||||||
for (i = 0; i < AP_MAX_LINKS; i++) {
|
for (i = 0; i < AP_MAX_LINKS; i++) {
|
||||||
|
wl1271_free_sta(wl, i);
|
||||||
wl1271_tx_reset_link_queues(wl, i);
|
wl1271_tx_reset_link_queues(wl, i);
|
||||||
wl->links[i].allocated_pkts = 0;
|
wl->links[i].allocated_pkts = 0;
|
||||||
wl->links[i].prev_freed_pkts = 0;
|
wl->links[i].prev_freed_pkts = 0;
|
||||||
|
@ -910,10 +911,14 @@ void wl1271_tx_reset(struct wl1271 *wl, bool reset_tx_queues)
|
||||||
ieee80211_tx_status_ni(wl->hw, skb);
|
ieee80211_tx_status_ni(wl->hw, skb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wl->tx_queue_count[i] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wl->ba_rx_bitmap = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_TX_QUEUES; i++)
|
||||||
|
wl->tx_queue_count[i] = 0;
|
||||||
|
|
||||||
wl->stopped_queues_map = 0;
|
wl->stopped_queues_map = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -216,4 +216,7 @@ void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid);
|
||||||
void wl1271_handle_tx_low_watermark(struct wl1271 *wl);
|
void wl1271_handle_tx_low_watermark(struct wl1271 *wl);
|
||||||
bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb);
|
bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb);
|
||||||
|
|
||||||
|
/* from main.c */
|
||||||
|
void wl1271_free_sta(struct wl1271 *wl, u8 hlid);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue