blob: 78ad215188935a9e3ba03c4e56597508f958c84f [file] [log] [blame]
developer20d67712022-03-02 14:09:32 +08001From e5b15e6a5f8f8ee282e818172f9b1a9cb5a63942 Mon Sep 17 00:00:00 2001
2From: Shayne Chen <shayne.chen@mediatek.com>
3Date: Mon, 17 May 2021 11:27:17 +0800
4Subject: [PATCH 1107/1112] mt76: testmode: support to dump stats from
5 different virtual stations
6
7Support to
8
9Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
10---
11 drivers/net/wireless/mediatek/mt76/testmode.c | 36 ++++++++++++++++---
12 1 file changed, 31 insertions(+), 5 deletions(-)
13
14diff --git a/testmode.c b/testmode.c
15index 682ca3d..bb15388 100644
16--- a/testmode.c
17+++ b/testmode.c
18@@ -331,8 +331,11 @@ __mt76_testmode_set_state(struct mt76_phy *phy, enum mt76_testmode_state state)
19 struct mt76_dev *dev = phy->dev;
20 int err;
21
22- if (prev_state == MT76_TM_STATE_TX_FRAMES)
23+ if (prev_state == MT76_TM_STATE_TX_FRAMES) {
24+ if (phy->test.tx_rate_mode == MT76_TM_TX_MODE_HE_MU)
25+ dev->test_ops->set_state(phy, MT76_TM_STATE_IDLE);
26 mt76_testmode_tx_stop(phy);
27+ }
28
29 if (state == MT76_TM_STATE_TX_FRAMES) {
30 err = mt76_testmode_tx_init(phy);
31@@ -654,6 +657,7 @@ int mt76_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
32 struct mt76_phy *phy = hw->priv;
33 struct mt76_dev *dev = phy->dev;
34 struct mt76_testmode_data *td = &phy->test;
35+ struct mt76_testmode_sta_data *sd = &td->sd;
36 struct nlattr *tb[NUM_MT76_TM_ATTRS] = {};
37 int err = 0;
38 void *a;
39@@ -686,6 +690,23 @@ int mt76_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
40 goto out;
41 }
42
43+ if (tb[MT76_TM_ATTR_AID]) {
44+ struct mt76_testmode_sta *tm_sta;
45+ u8 aid;
46+
47+ err = mt76_tm_get_u8(tb[MT76_TM_ATTR_AID], &aid, 1, 16);
48+ if (err)
49+ goto out;
50+
51+ tm_sta = mt76_testmode_aid_get_sta(phy, aid);
52+ if (!tm_sta) {
53+ err = -EINVAL;
54+ goto out;
55+ }
56+
57+ sd = &tm_sta->sd;
58+ }
59+
60 mt76_testmode_init_defaults(phy);
61
62 err = -EMSGSIZE;
63@@ -698,12 +719,8 @@ int mt76_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
64 goto out;
65
66 if (nla_put_u32(msg, MT76_TM_ATTR_TX_COUNT, td->tx_count) ||
67- nla_put_u32(msg, MT76_TM_ATTR_TX_LENGTH, td->tx_mpdu_len) ||
68 nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_MODE, td->tx_rate_mode) ||
69- nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_NSS, td->tx_rate_nss) ||
70- nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_IDX, td->tx_rate_idx) ||
71 nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_SGI, td->tx_rate_sgi) ||
72- nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_LDPC, td->tx_rate_ldpc) ||
73 nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_STBC, td->tx_rate_stbc) ||
74 (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_LTF) &&
75 nla_put_u8(msg, MT76_TM_ATTR_TX_LTF, td->tx_ltf)) ||
76@@ -723,6 +740,15 @@ int mt76_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
77 nla_put_u8(msg, MT76_TM_ATTR_FREQ_OFFSET, td->freq_offset)))
78 goto out;
79
80+ if (nla_put_u8(msg, MT76_TM_ATTR_AID, sd->aid) ||
81+ nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_NSS, sd->tx_rate_nss) ||
82+ nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_IDX, sd->tx_rate_idx) ||
83+ nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_LDPC, sd->tx_rate_ldpc) ||
84+ nla_put_u8(msg, MT76_TM_ATTR_RU_ALLOC, sd->ru_alloc) ||
85+ nla_put_u8(msg, MT76_TM_ATTR_RU_IDX, sd->ru_idx) ||
86+ nla_put_u32(msg, MT76_TM_ATTR_TX_LENGTH, sd->tx_mpdu_len))
87+ goto out;
88+
89 if (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_POWER)) {
90 a = nla_nest_start(msg, MT76_TM_ATTR_TX_POWER);
91 if (!a)
92--
932.25.1
94