mt76x02: tidy up beacon shared code
Subsystems (2)
Lorenzo Bianconi
maintainercover mt76x02: tidy up beacon shared code
Do not copy beacon skb in mt76x02_mac_set_beacon_enable for usb devices since it will be done in tbtt tasklet. Moreover tidy up a bit beacon shared code
Lorenzo Bianconi (2):
mt76: mt76x02: introduce mt76x02_pre_tbtt_enable and
mt76x02_beacon_enable macros
mt76: mt76x02: do not copy beacon skb in mt76x02_mac_set_beacon_enable
.../net/wireless/mediatek/mt76/mt76x0/main.c | 4 +- drivers/net/wireless/mediatek/mt76/mt76x02.h | 5 ++ .../wireless/mediatek/mt76/mt76x02_beacon.c | 66 ++++++++----------- .../net/wireless/mediatek/mt76/mt76x02_mac.h | 2 +- .../wireless/mediatek/mt76/mt76x2/usb_main.c | 4 +- 5 files changed, 37 insertions(+), 44 deletions(-)
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 1/2 mt76: mt76x02: introduce mt76x02_pre_tbtt_enable and mt76x02_beacon_enable macros
Improve code readability introducing mt76x02_pre_tbtt_enable and mt76x02_beacon_enable utility macros
--- drivers/net/wireless/mediatek/mt76/mt76x0/main.c | 4 ++-- drivers/net/wireless/mediatek/mt76/mt76x02.h | 5 +++++ drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c | 7 +++---- drivers/net/wireless/mediatek/mt76/mt76x2/usb_main.c | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76x0/main.c +2 -2
@@ -14,7 +14,7 @@ mt76x0_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)int ret;cancel_delayed_work_sync (&dev->cal_work); - dev->beacon_ops->pre_tbtt_enable (dev, false); +mt76x02_pre_tbtt_enable (dev, false);if (mt76_is_mmio (dev))tasklet_disable (&dev->dfs_pd.dfs_tasklet);
@@ -31,7 +31,7 @@ mt76x0_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)mt76x02_dfs_init_params (dev);tasklet_enable (&dev->dfs_pd.dfs_tasklet); } - dev->beacon_ops->pre_tbtt_enable (dev, true); +mt76x02_pre_tbtt_enable (dev, true);mt76_txq_schedule_all (&dev->mt76);
drivers/net/wireless/mediatek/mt76/mt76x02.h +5 -0
@@ -75,6 +75,11 @@ struct mt76x02_beacon_ops {void (*beacon_enable) (struct mt76x02_dev *,bool ); }; +#define mt76x02_beacon_enable (dev, enable) \ + (dev)->beacon_ops->beacon_enable((dev), (enable)) +#define mt76x02_pre_tbtt_enable (dev, enable) \ + (dev)->beacon_ops->pre_tbtt_enable((dev), (enable)) +struct mt76x02_dev {struct mt76_dev mt76;/* must be first */
drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c +3 -4
@@ -141,8 +141,7 @@ __mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev, u8 vif_idx,MT_BEACON_TIME_CFG_TBTT_EN |MT_BEACON_TIME_CFG_TIMER_EN ;mt76_rmw (dev,MT_BEACON_TIME_CFG , reg, reg * en); - - dev->beacon_ops->beacon_enable (dev, en); +mt76x02_beacon_enable (dev, en); } void mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev,
@@ -151,7 +150,7 @@ void mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev,u8 vif_idx = ((struct mt76x02_vif *)vif->drv_priv)->idx;struct sk_buff *skb =NULL ; - dev->beacon_ops->pre_tbtt_enable (dev, false); +mt76x02_pre_tbtt_enable (dev, false);if (mt76_is_usb (dev)) skb =ieee80211_beacon_get (mt76_hw (dev), vif);
@@ -161,7 +160,7 @@ void mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev,__mt76x02_mac_set_beacon_enable (dev, vif_idx, val, skb); - dev->beacon_ops->pre_tbtt_enable (dev, true); +mt76x02_pre_tbtt_enable (dev, true); }void
drivers/net/wireless/mediatek/mt76/mt76x2/usb_main.c +2 -2
@@ -48,7 +48,7 @@ mt76x2u_set_channel(struct mt76x02_dev *dev,int err;cancel_delayed_work_sync (&dev->cal_work); - dev->beacon_ops->pre_tbtt_enable (dev, false); +mt76x02_pre_tbtt_enable (dev, false);mutex_lock (&dev->mt76.mutex);set_bit (MT76_RESET , &dev->mt76.state);
@@ -64,7 +64,7 @@ mt76x2u_set_channel(struct mt76x02_dev *dev,clear_bit (MT76_RESET , &dev->mt76.state);mutex_unlock (&dev->mt76.mutex); - dev->beacon_ops->pre_tbtt_enable (dev, true); +mt76x02_pre_tbtt_enable (dev, true);mt76_txq_schedule_all (&dev->mt76);return err;
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 2/2 mt76: mt76x02: do not copy beacon skb in mt76x02_mac_set_beacon_enable
In reply to Lorenzo BianconiDo not copy beacon skb in mt76x02_mac_set_beacon_enable for usb devices since it will be done in mt76x02_update_beacon_iter. Moreover squash mt76x02_mac_set_beacon_enable and __mt76x02_mac_set_beacon_enable since the latter is run just by mt76x02_mac_set_beacon_enable
--- .../wireless/mediatek/mt76/mt76x02_beacon.c | 61 ++++++++----------- .../net/wireless/mediatek/mt76/mt76x02_mac.h | 2 +- 2 files changed, 26 insertions(+), 37 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c +25 -36
@@ -115,51 +115,40 @@ int mt76x02_mac_set_beacon(struct mt76x02_dev *dev, u8 vif_idx, }EXPORT_SYMBOL_GPL (mt76x02_mac_set_beacon); -static void -__mt76x02_mac_set_beacon_enable (struct mt76x02_dev *dev,u8 vif_idx, -bool val,struct sk_buff *skb) -{ -u8 old_mask = dev->mt76.beacon_mask; -bool en; -u32 reg; - -if (val) { - dev->mt76.beacon_mask |=BIT (vif_idx); -if (skb) -mt76x02_mac_set_beacon (dev, vif_idx, skb); - }else { - dev->mt76.beacon_mask &= ~BIT (vif_idx); -mt76x02_mac_set_beacon (dev, vif_idx,NULL ); - } - -if (!!old_mask == !!dev->mt76.beacon_mask) -return ; - - en = dev->mt76.beacon_mask; - - reg =MT_BEACON_TIME_CFG_BEACON_TX | -MT_BEACON_TIME_CFG_TBTT_EN | -MT_BEACON_TIME_CFG_TIMER_EN ; -mt76_rmw (dev,MT_BEACON_TIME_CFG , reg, reg * en); -mt76x02_beacon_enable (dev, en); -} -void mt76x02_mac_set_beacon_enable (struct mt76x02_dev *dev, -struct ieee80211_vif *vif,bool val) +struct ieee80211_vif *vif,bool enable) { -u8 vif_idx = ((struct mt76x02_vif *)vif->drv_priv)->idx; -struct sk_buff *skb =NULL ; +struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv; +u8 old_mask = dev->mt76.beacon_mask;mt76x02_pre_tbtt_enable (dev, false); -if (mt76_is_usb (dev)) - skb =ieee80211_beacon_get (mt76_hw (dev), vif); -if (!dev->mt76.beacon_mask) dev->tbtt_count =0 ; -__mt76x02_mac_set_beacon_enable (dev, vif_idx, val, skb); +if (enable) { + dev->mt76.beacon_mask |=BIT (mvif->idx); + }else { + dev->mt76.beacon_mask &= ~BIT (mvif->idx); +mt76x02_mac_set_beacon (dev, mvif->idx,NULL ); + } +if (!!old_mask == !!dev->mt76.beacon_mask) + goto out; + +if (dev->mt76.beacon_mask) +mt76_set (dev,MT_BEACON_TIME_CFG , +MT_BEACON_TIME_CFG_BEACON_TX | +MT_BEACON_TIME_CFG_TBTT_EN | +MT_BEACON_TIME_CFG_TIMER_EN ); +else +mt76_clear (dev,MT_BEACON_TIME_CFG , +MT_BEACON_TIME_CFG_BEACON_TX | +MT_BEACON_TIME_CFG_TBTT_EN | +MT_BEACON_TIME_CFG_TIMER_EN ); +mt76x02_beacon_enable (dev, !!dev->mt76.beacon_mask); + +out:mt76x02_pre_tbtt_enable (dev, true); }
drivers/net/wireless/mediatek/mt76/mt76x02_mac.h +1 -1
@@ -207,7 +207,7 @@ void mt76x02_mac_set_bssid(struct mt76x02_dev *dev, u8 idx, const u8 *addr);int mt76x02_mac_set_beacon (struct mt76x02_dev *dev,u8 vif_idx,struct sk_buff *skb);void mt76x02_mac_set_beacon_enable (struct mt76x02_dev *dev, -struct ieee80211_vif *vif,bool val); +struct ieee80211_vif *vif,bool enable);void mt76x02_edcca_init (struct mt76x02_dev *dev);#endif
Signature · 1 line
2.21.0