]> git.karo-electronics.de Git - linux-beck.git/commit
ath10k: implement push-pull tx
authorMichal Kazior <michal.kazior@tieto.com>
Sun, 6 Mar 2016 14:14:43 +0000 (16:14 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Sun, 6 Mar 2016 14:31:12 +0000 (16:31 +0200)
commit426e10eaf76d7229ed6c2978f0d473d04ba0b377
tree61e542d7a2334099f00092a69e5a8ed38a61d985
parent3cc0fef6170dce8e7d4ec29afb4f34267fb9bf14
ath10k: implement push-pull tx

The current/old tx path design was that host, at
its own leisure, pushed tx frames to the device.
For HTT there was ~1000-1400 msdu queue depth.

After reaching that limit the driver would request
mac80211 to stop queues. There was little control
over what packets got in there as far as
DA/RA was considered so it was rather easy to
starve per-station traffic flows.

With MU-MIMO this became a significant problem
because the queue depth was insufficient to buffer
frames from multiple clients (which could have
different signal quality and capabilities) in an
efficient fashion.

Hence the new tx path in 10.4 was introduced: a
pull-push mode.

Firmware and host can share tx queue state via
DMA. The state is logically a 2 dimensional array
addressed via peer_id+tid pair. Each entry is a
counter (either number of bytes or packets. Host
keeps it updated and firmware uses it for
scheduling Tx pull requests to host.

This allows MU-MIMO to become a lot more effective
with 10+ clients.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/core.h
drivers/net/wireless/ath/ath10k/htt.h
drivers/net/wireless/ath/ath10k/htt_rx.c
drivers/net/wireless/ath/ath10k/htt_tx.c
drivers/net/wireless/ath/ath10k/mac.c
drivers/net/wireless/ath/ath10k/mac.h