Skip to content

Commit 89699f0

Browse files
Roopni Devanathanjeff-t-johnson
authored andcommitted
wifi: ath12k: Support AST Entry Stats
Add support to request Address Search Table(AST) entries stats from firmware through HTT stats type 41. These stats give AST entries related information such as software peer id, MAC address, pdev id, vdev, id, next hop, etc. Sample output: ------------- echo 41 > /sys/kernel/debug/ath12k/pci-0000\:06\:00.0/mac0/htt_stats_type cat /sys/kernel/debug/ath12k/pci-0000\:06\:00.0/mac0/htt_stats HTT_AST_ENTRY_TLV: ast_index = 10 mac_addr = 00:00:00:01:00:00 sw_peer_id = 0 pdev_id = 3 vdev_id = 255 next_hop = 0 mcast = 0 monitor_direct = 0 mesh_sta = 0 mec = 0 intra_bss = 0 Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4 Signed-off-by: Roopni Devanathan <[email protected]> Acked-by: Kalle Valo <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jeff Johnson <[email protected]>
1 parent 3f482f2 commit 89699f0

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3469,6 +3469,59 @@ ath12k_htt_print_tx_per_rate_stats_tlv(const void *tag_buf, u16 tag_len,
34693469
stats_req->buf_len = len;
34703470
}
34713471

3472+
static void
3473+
ath12k_htt_print_ast_entry_tlv(const void *tag_buf, u16 tag_len,
3474+
struct debug_htt_stats_req *stats_req)
3475+
{
3476+
const struct ath12k_htt_ast_entry_tlv *htt_stats_buf = tag_buf;
3477+
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
3478+
u32 len = stats_req->buf_len;
3479+
u8 *buf = stats_req->buf;
3480+
u32 mac_addr_l32;
3481+
u32 mac_addr_h16;
3482+
u32 ast_info;
3483+
3484+
if (tag_len < sizeof(*htt_stats_buf))
3485+
return;
3486+
3487+
mac_addr_l32 = le32_to_cpu(htt_stats_buf->mac_addr.mac_addr_l32);
3488+
mac_addr_h16 = le32_to_cpu(htt_stats_buf->mac_addr.mac_addr_h16);
3489+
ast_info = le32_to_cpu(htt_stats_buf->info);
3490+
3491+
len += scnprintf(buf + len, buf_len - len, "HTT_AST_ENTRY_TLV:\n");
3492+
len += scnprintf(buf + len, buf_len - len, "ast_index = %u\n",
3493+
le32_to_cpu(htt_stats_buf->ast_index));
3494+
len += scnprintf(buf + len, buf_len - len,
3495+
"mac_addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
3496+
u32_get_bits(mac_addr_l32, ATH12K_HTT_MAC_ADDR_L32_0),
3497+
u32_get_bits(mac_addr_l32, ATH12K_HTT_MAC_ADDR_L32_1),
3498+
u32_get_bits(mac_addr_l32, ATH12K_HTT_MAC_ADDR_L32_2),
3499+
u32_get_bits(mac_addr_l32, ATH12K_HTT_MAC_ADDR_L32_3),
3500+
u32_get_bits(mac_addr_h16, ATH12K_HTT_MAC_ADDR_H16_0),
3501+
u32_get_bits(mac_addr_h16, ATH12K_HTT_MAC_ADDR_H16_1));
3502+
3503+
len += scnprintf(buf + len, buf_len - len, "sw_peer_id = %u\n",
3504+
le32_to_cpu(htt_stats_buf->sw_peer_id));
3505+
len += scnprintf(buf + len, buf_len - len, "pdev_id = %u\n",
3506+
u32_get_bits(ast_info, ATH12K_HTT_AST_PDEV_ID_INFO));
3507+
len += scnprintf(buf + len, buf_len - len, "vdev_id = %u\n",
3508+
u32_get_bits(ast_info, ATH12K_HTT_AST_VDEV_ID_INFO));
3509+
len += scnprintf(buf + len, buf_len - len, "next_hop = %u\n",
3510+
u32_get_bits(ast_info, ATH12K_HTT_AST_NEXT_HOP_INFO));
3511+
len += scnprintf(buf + len, buf_len - len, "mcast = %u\n",
3512+
u32_get_bits(ast_info, ATH12K_HTT_AST_MCAST_INFO));
3513+
len += scnprintf(buf + len, buf_len - len, "monitor_direct = %u\n",
3514+
u32_get_bits(ast_info, ATH12K_HTT_AST_MONITOR_DIRECT_INFO));
3515+
len += scnprintf(buf + len, buf_len - len, "mesh_sta = %u\n",
3516+
u32_get_bits(ast_info, ATH12K_HTT_AST_MESH_STA_INFO));
3517+
len += scnprintf(buf + len, buf_len - len, "mec = %u\n",
3518+
u32_get_bits(ast_info, ATH12K_HTT_AST_MEC_INFO));
3519+
len += scnprintf(buf + len, buf_len - len, "intra_bss = %u\n\n",
3520+
u32_get_bits(ast_info, ATH12K_HTT_AST_INTRA_BSS_INFO));
3521+
3522+
stats_req->buf_len = len;
3523+
}
3524+
34723525
static void
34733526
ath12k_htt_print_dmac_reset_stats_tlv(const void *tag_buf, u16 tag_len,
34743527
struct debug_htt_stats_req *stats_req)
@@ -3877,6 +3930,9 @@ static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
38773930
case HTT_STATS_PER_RATE_STATS_TAG:
38783931
ath12k_htt_print_tx_per_rate_stats_tlv(tag_buf, len, stats_req);
38793932
break;
3933+
case HTT_STATS_AST_ENTRY_TAG:
3934+
ath12k_htt_print_ast_entry_tlv(tag_buf, len, stats_req);
3935+
break;
38803936
case HTT_STATS_DMAC_RESET_STATS_TAG:
38813937
ath12k_htt_print_dmac_reset_stats_tlv(tag_buf, len, stats_req);
38823938
break;

drivers/net/wireless/ath/ath12k/debugfs_htt_stats.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ enum ath12k_dbg_htt_ext_stats_type {
141141
ATH12K_DBG_HTT_EXT_PHY_COUNTERS_AND_PHY_STATS = 37,
142142
ATH12K_DBG_HTT_EXT_VDEVS_TXRX_STATS = 38,
143143
ATH12K_DBG_HTT_EXT_PDEV_PER_STATS = 40,
144+
ATH12K_DBG_HTT_EXT_AST_ENTRIES = 41,
144145
ATH12K_DBG_HTT_EXT_STATS_SOC_ERROR = 45,
145146
ATH12K_DBG_HTT_EXT_STATS_PDEV_SCHED_ALGO = 49,
146147
ATH12K_DBG_HTT_EXT_STATS_MANDATORY_MUOFDMA = 51,
@@ -211,6 +212,7 @@ enum ath12k_dbg_htt_tlv_tag {
211212
HTT_STATS_PER_RATE_STATS_TAG = 128,
212213
HTT_STATS_MU_PPDU_DIST_TAG = 129,
213214
HTT_STATS_TX_PDEV_MUMIMO_GRP_STATS_TAG = 130,
215+
HTT_STATS_AST_ENTRY_TAG = 132,
214216
HTT_STATS_TX_PDEV_RATE_STATS_BE_OFDMA_TAG = 135,
215217
HTT_STATS_TX_SELFGEN_BE_ERR_STATS_TAG = 137,
216218
HTT_STATS_TX_SELFGEN_BE_STATS_TAG = 138,
@@ -1293,6 +1295,22 @@ struct ath12k_htt_t2h_soc_txrx_stats_common_tlv {
12931295
__le32 inv_peers_msdu_drop_count_lo;
12941296
} __packed;
12951297

1298+
#define ATH12K_HTT_AST_PDEV_ID_INFO GENMASK(1, 0)
1299+
#define ATH12K_HTT_AST_VDEV_ID_INFO GENMASK(9, 2)
1300+
#define ATH12K_HTT_AST_NEXT_HOP_INFO BIT(10)
1301+
#define ATH12K_HTT_AST_MCAST_INFO BIT(11)
1302+
#define ATH12K_HTT_AST_MONITOR_DIRECT_INFO BIT(12)
1303+
#define ATH12K_HTT_AST_MESH_STA_INFO BIT(13)
1304+
#define ATH12K_HTT_AST_MEC_INFO BIT(14)
1305+
#define ATH12K_HTT_AST_INTRA_BSS_INFO BIT(15)
1306+
1307+
struct ath12k_htt_ast_entry_tlv {
1308+
__le32 sw_peer_id;
1309+
__le32 ast_index;
1310+
struct htt_mac_addr mac_addr;
1311+
__le32 info;
1312+
} __packed;
1313+
12961314
struct ath12k_htt_dmac_reset_stats_tlv {
12971315
__le32 reset_count;
12981316
__le32 reset_time_lo_ms;

drivers/net/wireless/ath/ath12k/dp.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,6 +1798,18 @@ enum vdev_stats_offload_timer_duration {
17981798
ATH12K_STATS_TIMER_DUR_2SEC = 3,
17991799
};
18001800

1801+
#define ATH12K_HTT_MAC_ADDR_L32_0 GENMASK(7, 0)
1802+
#define ATH12K_HTT_MAC_ADDR_L32_1 GENMASK(15, 8)
1803+
#define ATH12K_HTT_MAC_ADDR_L32_2 GENMASK(23, 16)
1804+
#define ATH12K_HTT_MAC_ADDR_L32_3 GENMASK(31, 24)
1805+
#define ATH12K_HTT_MAC_ADDR_H16_0 GENMASK(7, 0)
1806+
#define ATH12K_HTT_MAC_ADDR_H16_1 GENMASK(15, 8)
1807+
1808+
struct htt_mac_addr {
1809+
__le32 mac_addr_l32;
1810+
__le32 mac_addr_h16;
1811+
} __packed;
1812+
18011813
static inline void ath12k_dp_get_mac_addr(u32 addr_l32, u16 addr_h16, u8 *addr)
18021814
{
18031815
memcpy(addr, &addr_l32, 4);

0 commit comments

Comments
 (0)