Commit f1acea9a authored by Arik Nemtsov's avatar Arik Nemtsov Committed by Luciano Coelho

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: default avatarArik Nemtsov <arik@wizery.com>
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent f4d3b6ab
...@@ -3757,11 +3757,14 @@ static int wl1271_allocate_sta(struct wl1271 *wl, ...@@ -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) ...@@ -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) ...@@ -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); ...@@ -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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment