wifi: mt76: mt7996: handle IEEE80211_RC_SMPS_CHANGED
authorPeter Chiu <chui-hao.chiu@mediatek.com>
Mon, 23 Oct 2023 15:38:52 +0000 (23:38 +0800)
committerFelix Fietkau <nbd@nbd.name>
Thu, 7 Dec 2023 17:50:21 +0000 (18:50 +0100)
Make mt7996_mcu_set_fixed_field() non-static in order to handle
IEEE80211_RC_SMPS_CHANGED in mt7996_mac_sta_rc_work().

Signed-off-by: Peter Chiu <chui-hao.chiu@mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/mac.c
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h

index 861737fe55cd68f4a1a8e8786ec907af1d0a7356..b17365b8d07b37d4736d14e6d89ace43a6ac4a4a 100644 (file)
@@ -2285,7 +2285,9 @@ void mt7996_mac_sta_rc_work(struct work_struct *work)
                               IEEE80211_RC_BW_CHANGED))
                        mt7996_mcu_add_rate_ctrl(dev, vif, sta, true);
 
-               /* TODO: smps change */
+               if (changed & IEEE80211_RC_SMPS_CHANGED)
+                       mt7996_mcu_set_fixed_field(dev, vif, sta, NULL,
+                                                  RATE_PARAM_MMPS_UPDATE);
 
                spin_lock_bh(&dev->mt76.sta_poll_lock);
        }
index a13ff8f7be54ad9d1da1aeee79e6e0086dc32ca2..554ebe794caf87c13c30945563b2cd1761a27467 100644 (file)
@@ -1800,9 +1800,8 @@ int mt7996_mcu_set_fixed_rate_ctrl(struct mt7996_dev *dev,
                                     MCU_WM_UNI_CMD(RA), true);
 }
 
-static int
-mt7996_mcu_set_fixed_field(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-                          struct ieee80211_sta *sta, void *data, u32 field)
+int mt7996_mcu_set_fixed_field(struct mt7996_dev *dev, struct ieee80211_vif *vif,
+                              struct ieee80211_sta *sta, void *data, u32 field)
 {
        struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
        struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
@@ -1830,6 +1829,9 @@ mt7996_mcu_set_fixed_field(struct mt7996_dev *dev, struct ieee80211_vif *vif,
                if (phy)
                        ra->phy = *phy;
                break;
+       case RATE_PARAM_MMPS_UPDATE:
+               ra->mmps_mode = mt7996_mcu_get_mmps_mode(sta->deflink.smps_mode);
+               break;
        default:
                break;
        }
index ed99432b2d03b6573a176ce2f39897eb3c60c4d3..0a150bcb2c195cad0be564f3e63ce7048436bd42 100644 (file)
@@ -452,6 +452,8 @@ int mt7996_mcu_set_chan_info(struct mt7996_phy *phy, u16 tag);
 int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif);
 int mt7996_mcu_set_fixed_rate_ctrl(struct mt7996_dev *dev,
                                   void *data, u16 version);
+int mt7996_mcu_set_fixed_field(struct mt7996_dev *dev, struct ieee80211_vif *vif,
+                              struct ieee80211_sta *sta, void *data, u32 field);
 int mt7996_mcu_set_eeprom(struct mt7996_dev *dev);
 int mt7996_mcu_get_eeprom(struct mt7996_dev *dev, u32 offset);
 int mt7996_mcu_get_eeprom_free_block(struct mt7996_dev *dev, u8 *block_num);