mt76: mt7915: split edca update function
authorShayne Chen <shayne.chen@mediatek.com>
Tue, 5 Jan 2021 08:55:26 +0000 (16:55 +0800)
committerFelix Fietkau <nbd@nbd.name>
Tue, 26 Jan 2021 19:07:48 +0000 (20:07 +0100)
Split parameter settings and mcu command update in mt7915_mcu_set_tx().
This is for reusing edca update function in testmode ipg setting.

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

index f4cb46c..e7bd382 100644 (file)
@@ -2977,30 +2977,21 @@ int mt7915_mcu_set_rts_thresh(struct mt7915_phy *phy, u32 val)
                                 sizeof(req), true);
 }
 
+int mt7915_mcu_update_edca(struct mt7915_dev *dev, void *param)
+{
+       struct mt7915_mcu_tx *req = (struct mt7915_mcu_tx *)param;
+       u8 num = req->total;
+       size_t len = sizeof(*req) -
+                    (IEEE80211_NUM_ACS - num) * sizeof(struct edca);
+
+       return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_EDCA_UPDATE, req,
+                                len, true);
+}
+
 int mt7915_mcu_set_tx(struct mt7915_dev *dev, struct ieee80211_vif *vif)
 {
-#define WMM_AIFS_SET           BIT(0)
-#define WMM_CW_MIN_SET         BIT(1)
-#define WMM_CW_MAX_SET         BIT(2)
-#define WMM_TXOP_SET           BIT(3)
-#define WMM_PARAM_SET          GENMASK(3, 0)
 #define TX_CMD_MODE            1
-       struct edca {
-               u8 queue;
-               u8 set;
-               u8 aifs;
-               u8 cw_min;
-               __le16 cw_max;
-               __le16 txop;
-       };
-       struct mt7915_mcu_tx {
-               u8 total;
-               u8 action;
-               u8 valid;
-               u8 mode;
-
-               struct edca edca[IEEE80211_NUM_ACS];
-       } __packed req = {
+       struct mt7915_mcu_tx req = {
                .valid = true,
                .mode = TX_CMD_MODE,
                .total = IEEE80211_NUM_ACS,
@@ -3027,8 +3018,8 @@ int mt7915_mcu_set_tx(struct mt7915_dev *dev, struct ieee80211_vif *vif)
                else
                        e->cw_max = cpu_to_le16(10);
        }
-       return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_EDCA_UPDATE, &req,
-                                sizeof(req), true);
+
+       return mt7915_mcu_update_edca(dev, &req);
 }
 
 int mt7915_mcu_set_pm(struct mt7915_dev *dev, int band, int enter)
index 30ec2ef..ee6d703 100644 (file)
@@ -182,6 +182,30 @@ struct mt7915_mcu_phy_rx_info {
 #define MT_RA_RATE_DCM_EN              BIT(4)
 #define MT_RA_RATE_BW                  GENMASK(14, 13)
 
+struct edca {
+       u8 queue;
+       u8 set;
+       u8 aifs;
+       u8 cw_min;
+       __le16 cw_max;
+       __le16 txop;
+};
+
+struct mt7915_mcu_tx {
+       u8 total;
+       u8 action;
+       u8 valid;
+       u8 mode;
+
+       struct edca edca[IEEE80211_NUM_ACS];
+} __packed;
+
+#define WMM_AIFS_SET           BIT(0)
+#define WMM_CW_MIN_SET         BIT(1)
+#define WMM_CW_MAX_SET         BIT(2)
+#define WMM_TXOP_SET           BIT(3)
+#define WMM_PARAM_SET          GENMASK(3, 0)
+
 #define MCU_PQ_ID(p, q)                        (((p) << 15) | ((q) << 10))
 #define MCU_PKT_ID                     0xa0
 
index 970c397..1732b1e 100644 (file)
@@ -324,6 +324,7 @@ int mt7915_mcu_add_smps(struct mt7915_dev *dev, struct ieee80211_vif *vif,
 int mt7915_set_channel(struct mt7915_phy *phy);
 int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd);
 int mt7915_mcu_set_tx(struct mt7915_dev *dev, struct ieee80211_vif *vif);
+int mt7915_mcu_update_edca(struct mt7915_dev *dev, void *req);
 int mt7915_mcu_set_fixed_rate(struct mt7915_dev *dev,
                              struct ieee80211_sta *sta, u32 rate);
 int mt7915_mcu_set_eeprom(struct mt7915_dev *dev);