aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath6kl/sdio.c
diff options
context:
space:
mode:
authorChilam Ng <chilamng@qca.qualcomm.com>2012-02-07 04:33:00 -0500
committerKalle Valo <kvalo@qca.qualcomm.com>2012-02-08 04:33:49 -0500
commitb29072cc7b0e08ace48ab709c40cf6246fb2e8b0 (patch)
treea360185622713df0934983e90d7a9277eaeb661a /drivers/net/wireless/ath/ath6kl/sdio.c
parent1b2df4073447234034e2329f0df584c6346a8ec3 (diff)
ath6kl: prioritize Tx bundling based on AC priorities
Tx bundling is the more efficient use of SDIO bus and allows more packet transfers with fewer bus transactions, and is a way to improve overall throughput. However, Tx bundling has only 4 scatter request resources available. When there are multiple traffic streams of different priorities, it's possible that lower priority traffic may hog all the scatter requests and lock out the higher prioirty traffic from bundling. Tx bundling is now enabled per AC. When an AC do a scatter request and the remaining scatter request resources is lower than a configurable threshold, it will disable Tx bundling for all AC's of lower priorities. When an AC has Tx bundling disabled and has no Tx bundles sent in a consecutive and configurable number of packets, Tx bundling will be re-enabled for that AC. Signed-off-by: Chilam Ng <chilamng@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath6kl/sdio.c')
-rw-r--r--drivers/net/wireless/ath/ath6kl/sdio.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c b/drivers/net/wireless/ath/ath6kl/sdio.c
index 2826613b1933..cae446bf2129 100644
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -602,6 +602,8 @@ static struct hif_scatter_req *ath6kl_sdio_scatter_req_get(struct ath6kl *ar)
602 node = list_first_entry(&ar_sdio->scat_req, 602 node = list_first_entry(&ar_sdio->scat_req,
603 struct hif_scatter_req, list); 603 struct hif_scatter_req, list);
604 list_del(&node->list); 604 list_del(&node->list);
605
606 node->scat_q_depth = get_queue_depth(&ar_sdio->scat_req);
605 } 607 }
606 608
607 spin_unlock_bh(&ar_sdio->scat_lock); 609 spin_unlock_bh(&ar_sdio->scat_lock);