developer | 20d6771 | 2022-03-02 14:09:32 +0800 | [diff] [blame] | 1 | From e5b15e6a5f8f8ee282e818172f9b1a9cb5a63942 Mon Sep 17 00:00:00 2001 |
| 2 | From: Shayne Chen <shayne.chen@mediatek.com> |
| 3 | Date: Mon, 17 May 2021 11:27:17 +0800 |
| 4 | Subject: [PATCH 1107/1112] mt76: testmode: support to dump stats from |
| 5 | different virtual stations |
| 6 | |
| 7 | Support to |
| 8 | |
| 9 | Signed-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 | |
| 14 | diff --git a/testmode.c b/testmode.c |
| 15 | index 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 | -- |
| 93 | 2.25.1 |
| 94 | |