ath10k: add per peer tx stats support for 10.2.4
10.2.4 firmware branch (used in QCA988X) does not support HTT_10_4_T2H_MSG_TYPE_PEER_STATS and that's why ath10k does not provide tranmission rate statistics to user space, instead it just shows hardcoded 6 Mbit/s. But pktlog firmware facility provides per peer tx statistics. The firmware sends one pktlog event for every four PPDUs per peer, which include: * successful number of packets and bytes transmitted * number of packets and bytes dropped * retried number of packets and bytes * rate info per ppdu Firmware supports WMI_SERVICE_PEER_STATS, pktlog is enabled through ATH10K_FLAG_PEER_STATS, which is nowadays enabled by default in ath10k. This patch does not impact throughput. Tested on QCA9880 with firmware version 10.2.4.70.48. This should also work with firmware branch 10.2.4-1.0-00029 Parse peer stats from pktlog packets and update the tx rate information per STA. This way user space can query about transmit rate with iw: $iw wlan0 station dump Station 3c:a9:f4:72:bb:a4 (on wlan1) inactive time: 8210 ms rx bytes: 9166 rx packets: 44 tx bytes: 1105 tx packets: 9 tx retries: 0 tx failed: 1 rx drop misc: 3 signal: -75 [-75, -87, -88] dBm signal avg: -75 [-75, -85, -88] dBm tx bitrate: 39.0 MBit/s MCS 10 rx bitrate: 26.0 MBit/s MCS 3 rx duration: 23250 us authorized: yes authenticated: yes associated: yes preamble: short WMM/WME: yes MFP: no TDLS peer: no DTIM period: 2 beacon interval:100 short preamble: yes short slot time:yes connected time: 22 seconds Signed-off-by: Anilkumar Kolli <akolli@qti.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:

committed by
Kalle Valo

parent
7f9befbb55
commit
e8123bb74c
@@ -51,7 +51,8 @@ enum ath10k_pktlog_filter {
|
||||
ATH10K_PKTLOG_RCFIND = 0x000000004,
|
||||
ATH10K_PKTLOG_RCUPDATE = 0x000000008,
|
||||
ATH10K_PKTLOG_DBG_PRINT = 0x000000010,
|
||||
ATH10K_PKTLOG_ANY = 0x00000001f,
|
||||
ATH10K_PKTLOG_PEER_STATS = 0x000000040,
|
||||
ATH10K_PKTLOG_ANY = 0x00000005f,
|
||||
};
|
||||
|
||||
enum ath10k_dbg_aggr_mode {
|
||||
@@ -60,6 +61,21 @@ enum ath10k_dbg_aggr_mode {
|
||||
ATH10K_DBG_AGGR_MODE_MAX,
|
||||
};
|
||||
|
||||
/* Types of packet log events */
|
||||
enum ath_pktlog_type {
|
||||
ATH_PKTLOG_TYPE_TX_CTRL = 1,
|
||||
ATH_PKTLOG_TYPE_TX_STAT,
|
||||
};
|
||||
|
||||
struct ath10k_pktlog_hdr {
|
||||
__le16 flags;
|
||||
__le16 missed_cnt;
|
||||
__le16 log_type; /* Type of log information foll this header */
|
||||
__le16 size; /* Size of variable length log information in bytes */
|
||||
__le32 timestamp;
|
||||
u8 payload[0];
|
||||
} __packed;
|
||||
|
||||
/* FIXME: How to calculate the buffer size sanely? */
|
||||
#define ATH10K_FW_STATS_BUF_SIZE (1024 * 1024)
|
||||
|
||||
|
Reference in New Issue
Block a user