mt76: testmode: add attributes for ipg related parameters
authorShayne Chen <shayne.chen@mediatek.com>
Tue, 5 Jan 2021 08:55:24 +0000 (16:55 +0800)
committerFelix Fietkau <nbd@nbd.name>
Tue, 26 Jan 2021 19:07:48 +0000 (20:07 +0100)
Add attributes for setting tx inter-packet gap (ipg), duty cycle, and
transmission time in testmode.

Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/testmode.c
drivers/net/wireless/mediatek/mt76/testmode.h

index 1f638b4..c65f926 100644 (file)
@@ -541,6 +541,10 @@ struct mt76_testmode_data {
        u8 tx_antenna_mask;
        u8 tx_spe_idx;
 
+       u8 tx_duty_cycle;
+       u32 tx_time;
+       u32 tx_ipg;
+
        u32 freq_offset;
 
        u8 tx_power[4];
index ad8edf1..74cadf5 100644 (file)
@@ -17,6 +17,9 @@ static const struct nla_policy mt76_tm_policy[NUM_MT76_TM_ATTRS] = {
        [MT76_TM_ATTR_TX_SPE_IDX] = { .type = NLA_U8 },
        [MT76_TM_ATTR_TX_POWER_CONTROL] = { .type = NLA_U8 },
        [MT76_TM_ATTR_TX_POWER] = { .type = NLA_NESTED },
+       [MT76_TM_ATTR_TX_DUTY_CYCLE] = { .type = NLA_U8 },
+       [MT76_TM_ATTR_TX_IPG] = { .type = NLA_U32 },
+       [MT76_TM_ATTR_TX_TIME] = { .type = NLA_U32 },
        [MT76_TM_ATTR_FREQ_OFFSET] = { .type = NLA_U32 },
 };
 
@@ -361,10 +364,18 @@ int mt76_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
            mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_ANTENNA], &td->tx_antenna_mask,
                           1 << (ext_phy * 2), phy->antenna_mask << (ext_phy * 2)) ||
            mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_SPE_IDX], &td->tx_spe_idx, 0, 27) ||
+           mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_DUTY_CYCLE],
+                          &td->tx_duty_cycle, 0, 99) ||
            mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_POWER_CONTROL],
                           &td->tx_power_control, 0, 1))
                goto out;
 
+       if (tb[MT76_TM_ATTR_TX_IPG])
+               td->tx_ipg = nla_get_u32(tb[MT76_TM_ATTR_TX_IPG]);
+
+       if (tb[MT76_TM_ATTR_TX_TIME])
+               td->tx_time = nla_get_u32(tb[MT76_TM_ATTR_TX_TIME]);
+
        if (tb[MT76_TM_ATTR_FREQ_OFFSET])
                td->freq_offset = nla_get_u32(tb[MT76_TM_ATTR_FREQ_OFFSET]);
 
@@ -503,6 +514,12 @@ int mt76_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
             nla_put_u8(msg, MT76_TM_ATTR_TX_ANTENNA, td->tx_antenna_mask)) ||
            (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_SPE_IDX) &&
             nla_put_u8(msg, MT76_TM_ATTR_TX_SPE_IDX, td->tx_spe_idx)) ||
+           (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_DUTY_CYCLE) &&
+            nla_put_u8(msg, MT76_TM_ATTR_TX_DUTY_CYCLE, td->tx_duty_cycle)) ||
+           (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_IPG) &&
+            nla_put_u32(msg, MT76_TM_ATTR_TX_IPG, td->tx_ipg)) ||
+           (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_TIME) &&
+            nla_put_u32(msg, MT76_TM_ATTR_TX_TIME, td->tx_time)) ||
            (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_POWER_CONTROL) &&
             nla_put_u8(msg, MT76_TM_ATTR_TX_POWER_CONTROL, td->tx_power_control)) ||
            (mt76_testmode_param_present(td, MT76_TM_ATTR_FREQ_OFFSET) &&
index 45f0047..90c4b2a 100644 (file)
  * @MT76_TM_ATTR_STATS: statistics (nested, see &enum mt76_testmode_stats_attr)
  *
  * @MT76_TM_ATTR_TX_SPE_IDX: tx spatial extension index (u8)
+ *
+ * @MT76_TM_ATTR_TX_DUTY_CYCLE: packet tx duty cycle (u8)
+ * @MT76_TM_ATTR_TX_IPG: tx inter-packet gap, in unit of us (u32)
+ * @MT76_TM_ATTR_TX_TIME: packet transmission time, in unit of us (u32)
+ *
  */
 enum mt76_testmode_attr {
        MT76_TM_ATTR_UNSPEC,
@@ -67,6 +72,10 @@ enum mt76_testmode_attr {
 
        MT76_TM_ATTR_TX_SPE_IDX,
 
+       MT76_TM_ATTR_TX_DUTY_CYCLE,
+       MT76_TM_ATTR_TX_IPG,
+       MT76_TM_ATTR_TX_TIME,
+
        /* keep last */
        NUM_MT76_TM_ATTRS,
        MT76_TM_ATTR_MAX = NUM_MT76_TM_ATTRS - 1,