mt76: unify conf_tx
authorStanislaw Gruszka <sgruszka@redhat.com>
Tue, 4 Sep 2018 14:41:03 +0000 (16:41 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 19 Sep 2018 10:29:11 +0000 (12:29 +0200)
Use one conf_tx implementation in mt76x0 and mt76x2. Note this change
conf_tx for mt76x0, but it should work with mt76x2 version.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76x0/main.c
drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
drivers/net/wireless/mediatek/mt76/mt76x0/tx.c
drivers/net/wireless/mediatek/mt76/mt76x02_util.c
drivers/net/wireless/mediatek/mt76/mt76x02_util.h
drivers/net/wireless/mediatek/mt76/mt76x2_common.c
drivers/net/wireless/mediatek/mt76/mt76x2_main.c
drivers/net/wireless/mediatek/mt76/mt76x2u_main.c

index 24fe92febe50308f1a3f35221d0c84776c07780e..f87103aea868955df28b1cd00df3b9a5883b5f8b 100644 (file)
@@ -219,7 +219,7 @@ const struct ieee80211_ops mt76x0_ops = {
        .sta_add = mt76x02_sta_add,
        .sta_remove = mt76x02_sta_remove,
        .set_key = mt76x02_set_key,
-       .conf_tx = mt76x0_conf_tx,
+       .conf_tx = mt76x02_conf_tx,
        .sw_scan_start = mt76x0_sw_scan,
        .sw_scan_complete = mt76x0_sw_scan_complete,
        .ampdu_action = mt76x02_ampdu_action,
index 3fc2b6efeda3348b1633e5f35dc1b9d6b9f6c11b..e65e6c09877cef90db06c729695cee600a0d9966 100644 (file)
@@ -246,8 +246,6 @@ void mt76x0_mac_set_ampdu_factor(struct mt76x0_dev *dev);
 /* TX */
 void mt76x0_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
                struct sk_buff *skb);
-int mt76x0_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                   u16 queue, const struct ieee80211_tx_queue_params *params);
 void mt76x0_tx_status(struct mt76x0_dev *dev, struct sk_buff *skb);
 void mt76x0_tx_stat(struct work_struct *work);
 
index acf830bc9b4e495fa827b831ff85c807fd927267..ce80763ec55799b2b6fe8109f1d063231e79ba8f 100644 (file)
@@ -211,60 +211,3 @@ void mt76x0_tx_stat(struct work_struct *work)
                clear_bit(MT76_READING_STATS, &dev->mt76.state);
        spin_unlock_irqrestore(&dev->tx_lock, flags);
 }
-
-int mt76x0_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                   u16 queue, const struct ieee80211_tx_queue_params *params)
-{
-       struct mt76x0_dev *dev = hw->priv;
-       u8 cw_min = 5, cw_max = 10, hw_q = mt76_ac_to_hwq(queue);
-       u32 val;
-
-       /* TODO: should we do funny things with the parameters?
-        *       See what mt76x0_set_default_edca() used to do in init.c.
-        */
-
-       if (params->cw_min)
-               cw_min = fls(params->cw_min);
-       if (params->cw_max)
-               cw_max = fls(params->cw_max);
-
-       WARN_ON(params->txop > 0xff);
-       WARN_ON(params->aifs > 0xf);
-       WARN_ON(cw_min > 0xf);
-       WARN_ON(cw_max > 0xf);
-
-       val = FIELD_PREP(MT_EDCA_CFG_AIFSN, params->aifs) |
-             FIELD_PREP(MT_EDCA_CFG_CWMIN, cw_min) |
-             FIELD_PREP(MT_EDCA_CFG_CWMAX, cw_max);
-       /* TODO: based on user-controlled EnableTxBurst var vendor drv sets
-        *       a really long txop on AC0 (see connect.c:2009) but only on
-        *       connect? When not connected should be 0.
-        */
-       if (!hw_q)
-               val |= 0x60;
-       else
-               val |= FIELD_PREP(MT_EDCA_CFG_TXOP, params->txop);
-       mt76_wr(dev, MT_EDCA_CFG_AC(hw_q), val);
-
-       val = mt76_rr(dev, MT_WMM_TXOP(hw_q));
-       val &= ~(MT_WMM_TXOP_MASK << MT_WMM_TXOP_SHIFT(hw_q));
-       val |= params->txop << MT_WMM_TXOP_SHIFT(hw_q);
-       mt76_wr(dev, MT_WMM_TXOP(hw_q), val);
-
-       val = mt76_rr(dev, MT_WMM_AIFSN);
-       val &= ~(MT_WMM_AIFSN_MASK << MT_WMM_AIFSN_SHIFT(hw_q));
-       val |= params->aifs << MT_WMM_AIFSN_SHIFT(hw_q);
-       mt76_wr(dev, MT_WMM_AIFSN, val);
-
-       val = mt76_rr(dev, MT_WMM_CWMIN);
-       val &= ~(MT_WMM_CWMIN_MASK << MT_WMM_CWMIN_SHIFT(hw_q));
-       val |= cw_min << MT_WMM_CWMIN_SHIFT(hw_q);
-       mt76_wr(dev, MT_WMM_CWMIN, val);
-
-       val = mt76_rr(dev, MT_WMM_CWMAX);
-       val &= ~(MT_WMM_CWMAX_MASK << MT_WMM_CWMAX_SHIFT(hw_q));
-       val |= cw_max << MT_WMM_CWMAX_SHIFT(hw_q);
-       mt76_wr(dev, MT_WMM_CWMAX, val);
-
-       return 0;
-}
index 4375fce0606d89b1b035502efec6879e35d34c3d..140e43817a3904f1a5a4cd9f617fc88c3e1da725 100644 (file)
@@ -244,4 +244,48 @@ int mt76x02_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 }
 EXPORT_SYMBOL_GPL(mt76x02_set_key);
 
+int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+                  u16 queue, const struct ieee80211_tx_queue_params *params)
+{
+       struct mt76_dev *dev = hw->priv;
+       u8 cw_min = 5, cw_max = 10, qid;
+       u32 val;
+
+       qid = dev->q_tx[queue].hw_idx;
+
+       if (params->cw_min)
+               cw_min = fls(params->cw_min);
+       if (params->cw_max)
+               cw_max = fls(params->cw_max);
+
+       val = FIELD_PREP(MT_EDCA_CFG_TXOP, params->txop) |
+             FIELD_PREP(MT_EDCA_CFG_AIFSN, params->aifs) |
+             FIELD_PREP(MT_EDCA_CFG_CWMIN, cw_min) |
+             FIELD_PREP(MT_EDCA_CFG_CWMAX, cw_max);
+       __mt76_wr(dev, MT_EDCA_CFG_AC(qid), val);
+
+       val = __mt76_rr(dev, MT_WMM_TXOP(qid));
+       val &= ~(MT_WMM_TXOP_MASK << MT_WMM_TXOP_SHIFT(qid));
+       val |= params->txop << MT_WMM_TXOP_SHIFT(qid);
+       __mt76_wr(dev, MT_WMM_TXOP(qid), val);
+
+       val = __mt76_rr(dev, MT_WMM_AIFSN);
+       val &= ~(MT_WMM_AIFSN_MASK << MT_WMM_AIFSN_SHIFT(qid));
+       val |= params->aifs << MT_WMM_AIFSN_SHIFT(qid);
+       __mt76_wr(dev, MT_WMM_AIFSN, val);
+
+       val = __mt76_rr(dev, MT_WMM_CWMIN);
+       val &= ~(MT_WMM_CWMIN_MASK << MT_WMM_CWMIN_SHIFT(qid));
+       val |= cw_min << MT_WMM_CWMIN_SHIFT(qid);
+       __mt76_wr(dev, MT_WMM_CWMIN, val);
+
+       val = __mt76_rr(dev, MT_WMM_CWMAX);
+       val &= ~(MT_WMM_CWMAX_MASK << MT_WMM_CWMAX_SHIFT(qid));
+       val |= cw_max << MT_WMM_CWMAX_SHIFT(qid);
+       __mt76_wr(dev, MT_WMM_CWMAX, val);
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(mt76x02_conf_tx);
+
 MODULE_LICENSE("Dual BSD/GPL");
index 31f144d7f6d50e41e34cd6ab5a89d5c7a2d6e537..54f895d8cdbe022bafdab2c69c04669460a3cb36 100644 (file)
@@ -31,8 +31,9 @@ void mt76x02_vif_init(struct mt76_dev *dev, struct ieee80211_vif *vif,
 
 int mt76x02_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                        struct ieee80211_ampdu_params *params);
-
 int mt76x02_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                   struct ieee80211_vif *vif, struct ieee80211_sta *sta,
                   struct ieee80211_key_conf *key);
+int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+                  u16 queue, const struct ieee80211_tx_queue_params *params);
 #endif
index 7f05aebf67ec50367bebc509c0437c7b21df0b2f..5ce9fbc654a26843ed02deeb9f0fa9a900386db4 100644 (file)
@@ -27,50 +27,6 @@ void mt76x2_remove_interface(struct ieee80211_hw *hw,
 }
 EXPORT_SYMBOL_GPL(mt76x2_remove_interface);
 
-int mt76x2_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                  u16 queue, const struct ieee80211_tx_queue_params *params)
-{
-       struct mt76x2_dev *dev = hw->priv;
-       u8 cw_min = 5, cw_max = 10, qid;
-       u32 val;
-
-       qid = dev->mt76.q_tx[queue].hw_idx;
-
-       if (params->cw_min)
-               cw_min = fls(params->cw_min);
-       if (params->cw_max)
-               cw_max = fls(params->cw_max);
-
-       val = FIELD_PREP(MT_EDCA_CFG_TXOP, params->txop) |
-             FIELD_PREP(MT_EDCA_CFG_AIFSN, params->aifs) |
-             FIELD_PREP(MT_EDCA_CFG_CWMIN, cw_min) |
-             FIELD_PREP(MT_EDCA_CFG_CWMAX, cw_max);
-       mt76_wr(dev, MT_EDCA_CFG_AC(qid), val);
-
-       val = mt76_rr(dev, MT_WMM_TXOP(qid));
-       val &= ~(MT_WMM_TXOP_MASK << MT_WMM_TXOP_SHIFT(qid));
-       val |= params->txop << MT_WMM_TXOP_SHIFT(qid);
-       mt76_wr(dev, MT_WMM_TXOP(qid), val);
-
-       val = mt76_rr(dev, MT_WMM_AIFSN);
-       val &= ~(MT_WMM_AIFSN_MASK << MT_WMM_AIFSN_SHIFT(qid));
-       val |= params->aifs << MT_WMM_AIFSN_SHIFT(qid);
-       mt76_wr(dev, MT_WMM_AIFSN, val);
-
-       val = mt76_rr(dev, MT_WMM_CWMIN);
-       val &= ~(MT_WMM_CWMIN_MASK << MT_WMM_CWMIN_SHIFT(qid));
-       val |= cw_min << MT_WMM_CWMIN_SHIFT(qid);
-       mt76_wr(dev, MT_WMM_CWMIN, val);
-
-       val = mt76_rr(dev, MT_WMM_CWMAX);
-       val &= ~(MT_WMM_CWMAX_MASK << MT_WMM_CWMAX_SHIFT(qid));
-       val |= cw_max << MT_WMM_CWMAX_SHIFT(qid);
-       mt76_wr(dev, MT_WMM_CWMAX, val);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x2_conf_tx);
-
 void mt76x2_sta_rate_tbl_update(struct ieee80211_hw *hw,
                                struct ieee80211_vif *vif,
                                struct ieee80211_sta *sta)
index 143d8abed403b12513f7719f2e4ebe9fb331d0eb..87302845d582776309dc89a10df338d99130358e 100644 (file)
@@ -321,7 +321,7 @@ const struct ieee80211_ops mt76x2_ops = {
        .sta_add = mt76x02_sta_add,
        .sta_remove = mt76x02_sta_remove,
        .set_key = mt76x02_set_key,
-       .conf_tx = mt76x2_conf_tx,
+       .conf_tx = mt76x02_conf_tx,
        .sw_scan_start = mt76x2_sw_scan,
        .sw_scan_complete = mt76x2_sw_scan_complete,
        .flush = mt76x2_flush,
index 62d0eb75cac3dad8b72ac6e35dad323a9dc5f9cd..1dcc6ced15a56fde3393a4f9816875667ade6adc 100644 (file)
@@ -173,7 +173,7 @@ const struct ieee80211_ops mt76x2u_ops = {
        .wake_tx_queue = mt76_wake_tx_queue,
        .bss_info_changed = mt76x2u_bss_info_changed,
        .configure_filter = mt76x02_configure_filter,
-       .conf_tx = mt76x2_conf_tx,
+       .conf_tx = mt76x02_conf_tx,
        .sw_scan_start = mt76x2u_sw_scan,
        .sw_scan_complete = mt76x2u_sw_scan_complete,
        .sta_rate_tbl_update = mt76x2_sta_rate_tbl_update,