Skip to content

Commit

Permalink
wl12xx: AP mode - clean BA and queue state in tx_reset
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Arik Nemtsov authored and Luciano Coelho committed Sep 14, 2011
1 parent f4d3b6a commit f1acea9
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 3 deletions.
7 changes: 5 additions & 2 deletions drivers/net/wireless/wl12xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3757,11 +3757,14 @@ static int wl1271_allocate_sta(struct wl1271 *wl,
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;

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;

clear_bit(id, wl->ap_hlid_map);
Expand Down
7 changes: 6 additions & 1 deletion drivers/net/wireless/wl12xx/tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -891,6 +891,7 @@ void wl1271_tx_reset(struct wl1271 *wl, bool reset_tx_queues)
/* TX failure */
if (wl->bss_type == BSS_TYPE_AP_BSS) {
for (i = 0; i < AP_MAX_LINKS; i++) {
wl1271_free_sta(wl, i);
wl1271_tx_reset_link_queues(wl, i);
wl->links[i].allocated_pkts = 0;
wl->links[i].prev_freed_pkts = 0;
Expand All @@ -910,10 +911,14 @@ void wl1271_tx_reset(struct wl1271 *wl, bool reset_tx_queues)
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;

/*
Expand Down
3 changes: 3 additions & 0 deletions drivers/net/wireless/wl12xx/tx.h
Original file line number Diff line number Diff line change
Expand Up @@ -216,4 +216,7 @@ void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid);
void wl1271_handle_tx_low_watermark(struct wl1271 *wl);
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

0 comments on commit f1acea9

Please sign in to comment.