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

wl12xx: track freed packets in FW by AC

Track the number of freed packets in each AC when receiving an interrupt
from the FW. This paves the way for tracking allocated packets per AC.
Signed-off-by: default avatarArik Nemtsov <arik@wizery.com>
Signed-off-by: default avatarEliad Peller <eliad@wizery.com>
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent 010d3d30
...@@ -814,6 +814,7 @@ static void wl12xx_fw_status(struct wl1271 *wl, ...@@ -814,6 +814,7 @@ static void wl12xx_fw_status(struct wl1271 *wl,
struct timespec ts; struct timespec ts;
u32 old_tx_blk_count = wl->tx_blocks_available; u32 old_tx_blk_count = wl->tx_blocks_available;
int avail, freed_blocks; int avail, freed_blocks;
int i;
wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false); wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
...@@ -824,6 +825,15 @@ static void wl12xx_fw_status(struct wl1271 *wl, ...@@ -824,6 +825,15 @@ static void wl12xx_fw_status(struct wl1271 *wl,
status->drv_rx_counter, status->drv_rx_counter,
status->tx_results_counter); status->tx_results_counter);
for (i = 0; i < NUM_TX_QUEUES; i++) {
/* prevent wrap-around in freed-packets counter */
wl->tx_allocated_pkts -=
(status->tx_released_pkts[i] -
wl->tx_pkts_freed[i]) & 0xff;
wl->tx_pkts_freed[i] = status->tx_released_pkts[i];
}
freed_blocks = le32_to_cpu(status->total_released_blks) - freed_blocks = le32_to_cpu(status->total_released_blks) -
wl->tx_blocks_freed; wl->tx_blocks_freed;
wl->tx_blocks_freed = le32_to_cpu(status->total_released_blks); wl->tx_blocks_freed = le32_to_cpu(status->total_released_blks);
...@@ -1934,7 +1944,7 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw, ...@@ -1934,7 +1944,7 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
static void __wl1271_op_remove_interface(struct wl1271 *wl, static void __wl1271_op_remove_interface(struct wl1271 *wl,
bool reset_tx_queues) bool reset_tx_queues)
{ {
int ret; int ret, i;
wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface"); wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
...@@ -2050,6 +2060,10 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl, ...@@ -2050,6 +2060,10 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl,
wl->tx_blocks_freed = 0; wl->tx_blocks_freed = 0;
wl->tx_allocated_pkts = 0;
for (i = 0; i < NUM_TX_QUEUES; i++)
wl->tx_pkts_freed[i] = 0;
wl1271_debugfs_reset(wl); wl1271_debugfs_reset(wl);
kfree(wl->fw_status); kfree(wl->fw_status);
......
...@@ -242,6 +242,8 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct sk_buff *skb, u32 extra, ...@@ -242,6 +242,8 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct sk_buff *skb, u32 extra,
wl->tx_blocks_available -= total_blocks; wl->tx_blocks_available -= total_blocks;
wl->tx_allocated_blocks += total_blocks; wl->tx_allocated_blocks += total_blocks;
wl->tx_allocated_pkts++;
if (wl->bss_type == BSS_TYPE_AP_BSS) if (wl->bss_type == BSS_TYPE_AP_BSS)
wl->links[hlid].allocated_blks += total_blocks; wl->links[hlid].allocated_blks += total_blocks;
......
...@@ -268,8 +268,8 @@ struct wl12xx_fw_status { ...@@ -268,8 +268,8 @@ struct wl12xx_fw_status {
/* Size (in Memory Blocks) of TX pool */ /* Size (in Memory Blocks) of TX pool */
__le32 tx_total; __le32 tx_total;
/* Cumulative counter of released mem-blocks per AC */ /* Cumulative counter of released packets per AC */
u8 tx_released_blks[NUM_TX_QUEUES]; u8 tx_released_pkts[NUM_TX_QUEUES];
/* Cumulative counter of freed MBs per HLID */ /* Cumulative counter of freed MBs per HLID */
u8 tx_lnk_free_blks[WL12XX_MAX_LINKS]; u8 tx_lnk_free_blks[WL12XX_MAX_LINKS];
...@@ -422,6 +422,10 @@ struct wl1271 { ...@@ -422,6 +422,10 @@ struct wl1271 {
u32 tx_allocated_blocks; u32 tx_allocated_blocks;
u32 tx_results_count; u32 tx_results_count;
/* Accounting for allocated / available Tx packets in HW */
u32 tx_pkts_freed[NUM_TX_QUEUES];
u32 tx_allocated_pkts;
/* Transmitted TX packets counter for chipset interface */ /* Transmitted TX packets counter for chipset interface */
u32 tx_packets_count; u32 tx_packets_count;
......
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