mt76: move common beacon code in mt76 module
Subsystems (2)
Lorenzo Bianconi
maintainerv2 cover mt76: move common beacon code in mt76 module
Move beacon data structures shared between mt76x02 and mt7603 drivers in mt76_dev.
Enable/disable pre_tbtt_tasklet tasklet in mt7603_set_channel
Changes since v1:
- added new patch: 'mt76: do not enable/disable pre_tbtt_tasklet in scan_start/scan_complete'
Lorenzo Bianconi (5):
mt76: do not enable/disable pre_tbtt_tasklet in
scan_start/scan_complete
mt76: move beacon_int in mt76_dev
mt76: move beacon_mask in mt76_dev
mt76: move pre_tbtt_tasklet in mt76_dev
mt76: mt7603: enable/disable pre_tbtt_tasklet in mt7603_set_channel
drivers/net/wireless/mediatek/mt76/mt76.h | 4 ++++ .../wireless/mediatek/mt76/mt7603/beacon.c | 19 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7603/core.c | 2 +- .../net/wireless/mediatek/mt76/mt7603/init.c | 4 ++-- .../net/wireless/mediatek/mt76/mt7603/mac.c | 6 +++--- .../net/wireless/mediatek/mt76/mt7603/main.c | 11 +++++++---- .../wireless/mediatek/mt76/mt7603/mt7603.h | 5 ----- .../net/wireless/mediatek/mt76/mt76x0/pci.c | 2 +- drivers/net/wireless/mediatek/mt76/mt76x02.h | 3 --- .../wireless/mediatek/mt76/mt76x02_beacon.c | 18 +++++++++--------- .../net/wireless/mediatek/mt76/mt76x02_mac.c | 2 +- .../net/wireless/mediatek/mt76/mt76x02_mmio.c | 18 +++++++++--------- .../wireless/mediatek/mt76/mt76x02_usb_core.c | 11 ++++++----- .../net/wireless/mediatek/mt76/mt76x02_util.c | 7 +------ .../wireless/mediatek/mt76/mt76x2/pci_init.c | 2 +- .../wireless/mediatek/mt76/mt76x2/pci_main.c | 4 ++-- 16 files changed, 57 insertions(+), 61 deletions(-)
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH v2 1/5 mt76: do not enable/disable pre_tbtt_tasklet in scan_start/scan_complete
Do not enable/disable pre_tbtt_tasklet tasklet in mt76x02_sw_scan/mt76x02_sw_scan_complete since it is already done setting the operating channel
--- drivers/net/wireless/mediatek/mt76/mt76x02_util.c | 5 ----- 1 file changed, 5 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +0 -5
@@ -593,8 +593,6 @@ void mt76x02_sw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif, {struct mt76x02_dev *dev = hw->priv; -if (mt76_is_mmio (dev)) -tasklet_disable (&dev->pre_tbtt_tasklet);set_bit (MT76_SCANNING , &dev->mt76.state); }EXPORT_SYMBOL_GPL (mt76x02_sw_scan);
@@ -605,9 +603,6 @@ void mt76x02_sw_scan_complete(struct ieee80211_hw *hw,struct mt76x02_dev *dev = hw->priv;clear_bit (MT76_SCANNING , &dev->mt76.state); -if (mt76_is_mmio (dev)) -tasklet_enable (&dev->pre_tbtt_tasklet); -if (dev->cal.gain_init_done) {/* Restore AGC gain and resume calibration after scanning. */ dev->cal.low_gain =-1 ;
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH v2 2/5 mt76: move beacon_int in mt76_dev
In reply to Lorenzo BianconiMove beacon_int in mt76_dev data structure since it is used by all drivers
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ drivers/net/wireless/mediatek/mt76/mt7603/beacon.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7603/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7603/main.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h | 1 - drivers/net/wireless/mediatek/mt76/mt76x02.h | 1 - drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c | 2 +- drivers/net/wireless/mediatek/mt76/mt76x02_usb_core.c | 4 ++-- drivers/net/wireless/mediatek/mt76/mt76x02_util.c | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -469,6 +469,8 @@ struct mt76_dev {u8 antenna_mask;u16 chainmask; +int beacon_int; +struct mt76_sband sband_2g;struct mt76_sband sband_5g;struct debugfs_blob_wrapper eeprom;
drivers/net/wireless/mediatek/mt76/mt7603/beacon.c +1 -1
@@ -156,7 +156,7 @@ void mt7603_beacon_set_timer(struct mt7603_dev *dev, int idx, int intval)return ; } - dev->beacon_int = intval; + dev->mt76.beacon_int = intval;mt76_wr (dev,MT_TBTT ,FIELD_PREP (MT_TBTT_PERIOD , intval) |MT_TBTT_CAL_ENABLE );
drivers/net/wireless/mediatek/mt76/mt7603/mac.c +1 -1
@@ -1268,7 +1268,7 @@ static void mt7603_dma_sched_reset(struct mt7603_dev *dev)static void mt7603_mac_watchdog_reset (struct mt7603_dev *dev) { -int beacon_int = dev->beacon_int; +int beacon_int = dev->mt76.beacon_int;u32 mask = dev->mt76.mmio.irqmask;int i;
drivers/net/wireless/mediatek/mt76/mt7603/main.c +1 -1
@@ -544,7 +544,7 @@ mt7603_sw_scan_complete(struct ieee80211_hw *hw, struct ieee80211_vif *vif)struct mt7603_dev *dev = hw->priv;clear_bit (MT76_SCANNING , &dev->mt76.state); -mt7603_beacon_set_timer (dev,-1 , dev->beacon_int); +mt7603_beacon_set_timer (dev,-1 , dev->mt76.beacon_int); } static void
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +0 -1
@@ -109,7 +109,6 @@ struct mt7603_dev {ktime_t survey_time;ktime_t ed_time; -int beacon_int;struct mt76_queue q_rx;
drivers/net/wireless/mediatek/mt76/mt76x02.h +0 -1
@@ -106,7 +106,6 @@ struct mt76x02_dev {u8 beacon_data_mask;u8 tbtt_count; -u16 beacon_int;u32 tx_hang_reset;u8 tx_hang_check;
drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c +1 -1
@@ -167,7 +167,7 @@ void mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev,void mt76x02_resync_beacon_timer (struct mt76x02_dev *dev) { -u32 timer_val = dev->beacon_int <<4 ; +u32 timer_val = dev->mt76.beacon_int <<4 ; dev->tbtt_count++;
drivers/net/wireless/mediatek/mt76/mt76x02_usb_core.c +2 -2
@@ -147,7 +147,7 @@ static void mt76x02u_restart_pre_tbtt_timer(struct mt76x02_dev *dev)dev_dbg (dev->mt76.dev,"TSF: %llu us TBTT %u us\n" , tsf, tbtt);/* Convert beacon interval in TU (1024 usec) to nsec */ - time = ((1000000000ull * dev->beacon_int) >>10 ); + time = ((1000000000ull * dev->mt76.beacon_int) >>10 );/* Adjust time to trigger hrtimer 8ms before TBTT */ if (tbtt <PRE_TBTT_USEC )
@@ -217,7 +217,7 @@ static void mt76x02u_beacon_enable(struct mt76x02_dev *dev, bool en) {int i; -if (WARN_ON_ONCE (!dev->beacon_int)) +if (WARN_ON_ONCE (!dev->mt76.beacon_int))return ;if (en) {
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +1 -1
@@ -645,7 +645,7 @@ void mt76x02_bss_info_changed(struct ieee80211_hw *hw,mt76_rmw_field (dev,MT_BEACON_TIME_CFG ,MT_BEACON_TIME_CFG_INTVAL , info->beacon_int <<4 ); - dev->beacon_int = info->beacon_int; + dev->mt76.beacon_int = info->beacon_int; }if (changed &BSS_CHANGED_BEACON_ENABLED )
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH v2 3/5 mt76: move beacon_mask in mt76_dev
In reply to Lorenzo BianconiMove beacon_mask in mt76_dev data structure since it is used by all drivers
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + .../net/wireless/mediatek/mt76/mt7603/beacon.c | 17 +++++++++-------- .../net/wireless/mediatek/mt76/mt7603/mt7603.h | 2 -- drivers/net/wireless/mediatek/mt76/mt76x02.h | 1 - .../net/wireless/mediatek/mt76/mt76x02_beacon.c | 16 ++++++++-------- .../net/wireless/mediatek/mt76/mt76x02_mac.c | 2 +- .../net/wireless/mediatek/mt76/mt76x02_mmio.c | 6 +++--- .../wireless/mediatek/mt76/mt76x02_usb_core.c | 7 ++++--- 8 files changed, 26 insertions(+), 26 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -470,6 +470,7 @@ struct mt76_dev {u16 chainmask;int beacon_int; +u8 beacon_mask;struct mt76_sband sband_2g;struct mt76_sband sband_5g;
drivers/net/wireless/mediatek/mt76/mt7603/beacon.c +9 -8
@@ -16,7 +16,7 @@ mt7603_update_beacon_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;struct sk_buff *skb =NULL ; -if (!(dev->beacon_mask &BIT (mvif->idx))) +if (!(dev->mt76.beacon_mask &BIT (mvif->idx)))return ; skb =ieee80211_beacon_get (mt76_hw (dev), vif);
@@ -48,7 +48,7 @@ mt7603_add_buffered_bc(void *priv, u8 *mac, struct ieee80211_vif *vif)struct ieee80211_tx_info *info;struct sk_buff *skb; -if (!(dev->beacon_mask &BIT (mvif->idx))) +if (!(dev->mt76.beacon_mask &BIT (mvif->idx)))return ; skb =ieee80211_get_buffered_bc (mt76_hw (dev), vif);
@@ -134,7 +134,7 @@ void mt7603_pre_tbtt_tasklet(unsigned long arg) out:mt76_queue_tx_cleanup (dev,MT_TXQ_BEACON , false);if (dev->mt76.q_tx[MT_TXQ_BEACON ].q->queued > -hweight8 (dev->beacon_mask)) +hweight8 (dev->mt76.beacon_mask)) dev->beacon_check++; }
@@ -144,12 +144,12 @@ void mt7603_beacon_set_timer(struct mt7603_dev *dev, int idx, int intval)if (idx >=0 ) {if (intval) - dev->beacon_mask |=BIT (idx); + dev->mt76.beacon_mask |=BIT (idx);else - dev->beacon_mask &= ~BIT (idx); + dev->mt76.beacon_mask &= ~BIT (idx); } -if (!dev->beacon_mask || (!intval && idx <0 )) { +if (!dev->mt76.beacon_mask || (!intval && idx <0 )) {mt7603_irq_disable (dev,MT_INT_MAC_IRQ3 );mt76_clear (dev,MT_ARB_SCR ,MT_ARB_SCR_BCNQ_OPMODE_MASK );mt76_wr (dev,MT_HW_INT_MASK (3 ),0 );
@@ -174,10 +174,11 @@ void mt7603_beacon_set_timer(struct mt7603_dev *dev, int idx, int intval)mt76_set (dev,MT_WF_ARB_BCN_START ,MT_WF_ARB_BCN_START_BSSn (0 ) | - ((dev->beacon_mask >>1 ) *MT_WF_ARB_BCN_START_BSS0n (1 ))); + ((dev->mt76.beacon_mask >>1 ) * +MT_WF_ARB_BCN_START_BSS0n (1 )));mt7603_irq_enable (dev,MT_INT_MAC_IRQ3 ); -if (dev->beacon_mask & ~BIT (0 )) +if (dev->mt76.beacon_mask & ~BIT (0 ))mt76_set (dev,MT_LPON_SBTOR (0 ),MT_LPON_SBTOR_SUB_BSS_EN );else mt76_clear (dev,MT_LPON_SBTOR (0 ),MT_LPON_SBTOR_SUB_BSS_EN );
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +0 -2
@@ -125,8 +125,6 @@ struct mt7603_dev {s8 sensitivity; -u8 beacon_mask; -u8 beacon_check;u8 tx_hang_check;u8 tx_dma_check;
drivers/net/wireless/mediatek/mt76/mt76x02.h +0 -1
@@ -102,7 +102,6 @@ struct mt76x02_dev {u32 aggr_stats[32 ];struct sk_buff *beacons[8 ]; -u8 beacon_mask;u8 beacon_data_mask;u8 tbtt_count;
drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c +8 -8
@@ -119,23 +119,23 @@ static void __mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev, u8 vif_idx, bool val, struct sk_buff *skb) { - u8 old_mask = dev->beacon_mask; + u8 old_mask = dev->mt76.beacon_mask;bool en;u32 reg;if (val) { - dev->beacon_mask |=BIT (vif_idx); + dev->mt76.beacon_mask |=BIT (vif_idx);if (skb)mt76x02_mac_set_beacon (dev, vif_idx, skb); }else { - dev->beacon_mask &= ~BIT (vif_idx); + dev->mt76.beacon_mask &= ~BIT (vif_idx);mt76x02_mac_set_beacon (dev, vif_idx,NULL ); } -if (!!old_mask == !!dev->beacon_mask) +if (!!old_mask == !!dev->mt76.beacon_mask)return ; - en = dev->beacon_mask; + en = dev->mt76.beacon_mask; reg =MT_BEACON_TIME_CFG_BEACON_TX | MT_BEACON_TIME_CFG_TBTT_EN |
@@ -156,7 +156,7 @@ void mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev,if (mt76_is_usb (dev)) skb =ieee80211_beacon_get (mt76_hw (dev), vif); -if (!dev->beacon_mask) +if (!dev->mt76.beacon_mask) dev->tbtt_count =0 ;__mt76x02_mac_set_beacon_enable (dev, vif_idx, val, skb);
@@ -203,7 +203,7 @@ mt76x02_update_beacon_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;struct sk_buff *skb =NULL ; -if (!(dev->beacon_mask &BIT (mvif->idx))) +if (!(dev->mt76.beacon_mask &BIT (mvif->idx)))return ; skb =ieee80211_beacon_get (mt76_hw (dev), vif);
@@ -223,7 +223,7 @@ mt76x02_add_buffered_bc(void *priv, u8 *mac, struct ieee80211_vif *vif)struct ieee80211_tx_info *info;struct sk_buff *skb; -if (!(dev->beacon_mask &BIT (mvif->idx))) +if (!(dev->mt76.beacon_mask &BIT (mvif->idx)))return ; skb =ieee80211_get_buffered_bc (mt76_hw (dev), vif);
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c +1 -1
@@ -1044,7 +1044,7 @@ void mt76x02_mac_work(struct work_struct *work) dev->aggr_stats[idx++] += val >>16 ; } -if (!dev->beacon_mask) +if (!dev->mt76.beacon_mask)mt76x02_check_mac_err (dev);if (dev->ed_monitor)
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c +3 -3
@@ -415,7 +415,7 @@ static void mt76x02_reset_state(struct mt76x02_dev *dev) } dev->vif_mask =0 ; - dev->beacon_mask =0 ; + dev->mt76.beacon_mask =0 ; }static void mt76x02_watchdog_reset (struct mt76x02_dev *dev)
@@ -438,7 +438,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)if (restart)mt76x02_reset_state (dev); -if (dev->beacon_mask) +if (dev->mt76.beacon_mask)mt76_clear (dev,MT_BEACON_TIME_CFG ,MT_BEACON_TIME_CFG_BEACON_TX |MT_BEACON_TIME_CFG_TBTT_EN );
@@ -470,7 +470,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)if (dev->ed_monitor)mt76_set (dev,MT_TXOP_CTRL_CFG ,MT_TXOP_ED_CCA_EN ); -if (dev->beacon_mask && !restart) +if (dev->mt76.beacon_mask && !restart)mt76_set (dev,MT_BEACON_TIME_CFG ,MT_BEACON_TIME_CFG_BEACON_TX |MT_BEACON_TIME_CFG_TBTT_EN );
drivers/net/wireless/mediatek/mt76/mt76x02_usb_core.c +4 -3
@@ -175,7 +175,7 @@ static void mt76x02u_pre_tbtt_work(struct work_struct *work)struct sk_buff *skb;int i, nbeacons; -if (!dev->beacon_mask) +if (!dev->mt76.beacon_mask)return ;mt76x02_resync_beacon_timer (dev);
@@ -184,7 +184,7 @@ static void mt76x02u_pre_tbtt_work(struct work_struct *work)IEEE80211_IFACE_ITER_RESUME_ALL , mt76x02_update_beacon_iter, dev); - nbeacons =hweight8 (dev->beacon_mask); + nbeacons =hweight8 (dev->mt76.beacon_mask);mt76x02_enqueue_buffered_bc (dev, &data,N_BCN_SLOTS - nbeacons);for (i = nbeacons; i <N_BCN_SLOTS ; i++) {
@@ -207,7 +207,8 @@ static enum hrtimer_restart mt76x02u_pre_tbtt_interrupt(struct hrtimer *timer)static void mt76x02u_pre_tbtt_enable (struct mt76x02_dev *dev,bool en) { -if (en && dev->beacon_mask && !hrtimer_active (&dev->pre_tbtt_timer)) +if (en && dev->mt76.beacon_mask && + !hrtimer_active (&dev->pre_tbtt_timer))mt76x02u_start_pre_tbtt_timer (dev);if (!en)mt76x02u_stop_pre_tbtt_timer (dev);
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH v2 4/5 mt76: move pre_tbtt_tasklet in mt76_dev
In reply to Lorenzo BianconiMove pre_tbtt_tasklet tasklet in mt76_dev data structure since it is used by all drivers
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + drivers/net/wireless/mediatek/mt76/mt7603/core.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7603/init.c | 4 ++-- drivers/net/wireless/mediatek/mt76/mt7603/mac.c | 4 ++-- drivers/net/wireless/mediatek/mt76/mt7603/main.c | 4 ++-- drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h | 2 -- drivers/net/wireless/mediatek/mt76/mt76x0/pci.c | 2 +- drivers/net/wireless/mediatek/mt76/mt76x02.h | 1 - drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c | 12 ++++++------ drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c | 2 +- drivers/net/wireless/mediatek/mt76/mt76x2/pci_main.c | 4 ++-- 11 files changed, 18 insertions(+), 20 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -469,6 +469,7 @@ struct mt76_dev {u8 antenna_mask;u16 chainmask; +struct tasklet_struct pre_tbtt_tasklet;int beacon_int;u8 beacon_mask;
drivers/net/wireless/mediatek/mt76/mt7603/core.c +1 -1
@@ -27,7 +27,7 @@ irqreturn_t mt7603_irq_handler(int irq, void *dev_instance)mt76_wr (dev,MT_HW_INT_STATUS (3 ), hwintr);if (hwintr &MT_HW_INT3_PRE_TBTT0 ) -tasklet_schedule (&dev->pre_tbtt_tasklet); +tasklet_schedule (&dev->mt76.pre_tbtt_tasklet);if ((hwintr &MT_HW_INT3_TBTT0 ) && dev->mt76.csa_complete)mt76_csa_finish (&dev->mt76);
drivers/net/wireless/mediatek/mt76/mt7603/init.c +2 -2
@@ -514,7 +514,7 @@ int mt7603_register_device(struct mt7603_dev *dev)spin_lock_init (&dev->ps_lock);INIT_DELAYED_WORK (&dev->mt76.mac_work, mt7603_mac_work); -tasklet_init (&dev->pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet, +tasklet_init (&dev->mt76.pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet, (unsigned long )dev);/* Check for 7688, which only has 1SS */
@@ -573,7 +573,7 @@ int mt7603_register_device(struct mt7603_dev *dev)void mt7603_unregister_device (struct mt7603_dev *dev) { -tasklet_disable (&dev->pre_tbtt_tasklet); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet);mt76_unregister_device (&dev->mt76);mt7603_mcu_exit (dev);mt7603_dma_cleanup (dev);
drivers/net/wireless/mediatek/mt76/mt7603/mac.c +2 -2
@@ -1279,7 +1279,7 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev)mt76_txq_schedule_all (&dev->mt76);tasklet_disable (&dev->mt76.tx_tasklet); -tasklet_disable (&dev->pre_tbtt_tasklet); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet);napi_disable (&dev->mt76.napi[0 ]);napi_disable (&dev->mt76.napi[1 ]);
@@ -1328,7 +1328,7 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev)tasklet_enable (&dev->mt76.tx_tasklet);tasklet_schedule (&dev->mt76.tx_tasklet); -tasklet_enable (&dev->pre_tbtt_tasklet); +tasklet_enable (&dev->mt76.pre_tbtt_tasklet);mt7603_beacon_set_timer (dev,-1 , beacon_int);napi_enable (&dev->mt76.napi[0 ]);
drivers/net/wireless/mediatek/mt76/mt7603/main.c +2 -2
@@ -294,9 +294,9 @@ mt7603_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,if (changed & (BSS_CHANGED_BEACON_ENABLED |BSS_CHANGED_BEACON_INT )) {int beacon_int = !!info->enable_beacon * info->beacon_int; -tasklet_disable (&dev->pre_tbtt_tasklet); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet);mt7603_beacon_set_timer (dev, mvif->idx, beacon_int); -tasklet_enable (&dev->pre_tbtt_tasklet); +tasklet_enable (&dev->mt76.pre_tbtt_tasklet); }mutex_unlock (&dev->mt76.mutex);
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +0 -2
@@ -140,8 +140,6 @@ struct mt7603_dev {u32 reset_test;unsigned int reset_cause[__RESET_CAUSE_MAX]; - -struct tasklet_struct pre_tbtt_tasklet; };extern const struct mt76_driver_ops mt7603_drv_ops;
drivers/net/wireless/mediatek/mt76/mt76x0/pci.c +1 -1
@@ -219,7 +219,7 @@ mt76x0e_probe(struct pci_dev *pdev, const struct pci_device_id *id)static void mt76x0e_cleanup (struct mt76x02_dev *dev) {clear_bit (MT76_STATE_INITIALIZED , &dev->mt76.state); -tasklet_disable (&dev->pre_tbtt_tasklet); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet);mt76x0_chip_onoff (dev, false, false);mt76x0e_stop_hw (dev);mt76x02_dma_cleanup (dev);
drivers/net/wireless/mediatek/mt76/mt76x02.h +0 -1
@@ -90,7 +90,6 @@ struct mt76x02_dev {struct sk_buff *rx_head;struct tasklet_struct tx_tasklet; -struct tasklet_struct pre_tbtt_tasklet;struct delayed_work cal_work;struct delayed_work wdt_work;
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c +6 -6
@@ -68,9 +68,9 @@ static void mt76x02_pre_tbtt_tasklet(unsigned long arg)static void mt76x02e_pre_tbtt_enable (struct mt76x02_dev *dev,bool en) {if (en) -tasklet_enable (&dev->pre_tbtt_tasklet); +tasklet_enable (&dev->mt76.pre_tbtt_tasklet);else -tasklet_disable (&dev->pre_tbtt_tasklet); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet); }static void mt76x02e_beacon_enable (struct mt76x02_dev *dev,bool en)
@@ -184,7 +184,7 @@ int mt76x02_dma_init(struct mt76x02_dev *dev)tasklet_init (&dev->mt76.tx_tasklet, mt76x02_tx_tasklet, (unsigned long ) dev); -tasklet_init (&dev->pre_tbtt_tasklet, mt76x02_pre_tbtt_tasklet, +tasklet_init (&dev->mt76.pre_tbtt_tasklet, mt76x02_pre_tbtt_tasklet, (unsigned long )dev);kfifo_init (&dev->txstatus_fifo, status_fifo, fifo_size);
@@ -267,7 +267,7 @@ irqreturn_t mt76x02_irq_handler(int irq, void *dev_instance) }if (intr &MT_INT_PRE_TBTT ) -tasklet_schedule (&dev->pre_tbtt_tasklet); +tasklet_schedule (&dev->mt76.pre_tbtt_tasklet);/* send buffered multicast frames now */ if (intr &MT_INT_TBTT ) {
@@ -427,7 +427,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)ieee80211_stop_queues (dev->mt76.hw);set_bit (MT76_RESET , &dev->mt76.state); -tasklet_disable (&dev->pre_tbtt_tasklet); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet);tasklet_disable (&dev->mt76.tx_tasklet);for (i =0 ; i <ARRAY_SIZE (dev->mt76.napi); i++)
@@ -484,7 +484,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)tasklet_enable (&dev->mt76.tx_tasklet);tasklet_schedule (&dev->mt76.tx_tasklet); -tasklet_enable (&dev->pre_tbtt_tasklet); +tasklet_enable (&dev->mt76.pre_tbtt_tasklet);for (i =0 ; i <ARRAY_SIZE (dev->mt76.napi); i++) {napi_enable (&dev->mt76.napi[i]);
drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c +1 -1
@@ -300,7 +300,7 @@ void mt76x2_stop_hardware(struct mt76x02_dev *dev)void mt76x2_cleanup (struct mt76x02_dev *dev) {tasklet_disable (&dev->dfs_pd.dfs_tasklet); -tasklet_disable (&dev->pre_tbtt_tasklet); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet);mt76x2_stop_hardware (dev);mt76x02_dma_cleanup (dev);mt76x02_mcu_cleanup (dev);
drivers/net/wireless/mediatek/mt76/mt76x2/pci_main.c +2 -2
@@ -66,7 +66,7 @@ mt76x2_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)mt76_set_channel (&dev->mt76); -tasklet_disable (&dev->pre_tbtt_tasklet); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet);tasklet_disable (&dev->dfs_pd.dfs_tasklet);mt76x2_mac_stop (dev, true);
@@ -80,7 +80,7 @@ mt76x2_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)mt76x2_mac_resume (dev);tasklet_enable (&dev->dfs_pd.dfs_tasklet); -tasklet_enable (&dev->pre_tbtt_tasklet); +tasklet_enable (&dev->mt76.pre_tbtt_tasklet);clear_bit (MT76_RESET , &dev->mt76.state);
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH v2 5/5 mt76: mt7603: enable/disable pre_tbtt_tasklet in mt7603_set_channel
In reply to Lorenzo BianconiDisable pre_tbtt_tasklet tasklet before setting the operating channel. Enable/disable beacon_timer in mt7603_set_channel
--- drivers/net/wireless/mediatek/mt76/mt7603/main.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7603/main.c +5 -2
@@ -133,10 +133,12 @@ mt7603_set_channel(struct mt7603_dev *dev, struct cfg80211_chan_def *def)bool failed = false;cancel_delayed_work_sync (&dev->mt76.mac_work); +tasklet_disable (&dev->mt76.pre_tbtt_tasklet);mutex_lock (&dev->mt76.mutex);set_bit (MT76_RESET , &dev->mt76.state); +mt7603_beacon_set_timer (dev,-1 ,0 );mt76_set_channel (&dev->mt76);mt7603_mac_stop (dev);
@@ -186,8 +188,11 @@ mt7603_set_channel(struct mt7603_dev *dev, struct cfg80211_chan_def *def)mt7603_init_edcca (dev); out: +mt7603_beacon_set_timer (dev,-1 , dev->mt76.beacon_int);mutex_unlock (&dev->mt76.mutex); +tasklet_enable (&dev->mt76.pre_tbtt_tasklet); +if (failed)mt7603_mac_work (&dev->mt76.mac_work.work);
@@ -535,7 +540,6 @@ mt7603_sw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,struct mt7603_dev *dev = hw->priv;set_bit (MT76_SCANNING , &dev->mt76.state); -mt7603_beacon_set_timer (dev,-1 ,0 ); } static void
@@ -544,7 +548,6 @@ mt7603_sw_scan_complete(struct ieee80211_hw *hw, struct ieee80211_vif *vif)struct mt7603_dev *dev = hw->priv;clear_bit (MT76_SCANNING , &dev->mt76.state); -mt7603_beacon_set_timer (dev,-1 , dev->mt76.beacon_int); } static void
Signature · 1 line
2.20.1
Felix Fietkau
maintainerRe: [PATCH v2 5/5] mt76: mt7603: enable/disable pre_tbtt_tasklet in mt7603_set_channel
Quoted 4 lines · Lorenzo Bianconi
Disable
pre_tbtt_tasklettasklet before setting the operating channel. Enable/disablebeacon_timerinmt7603_set_channelSigned-off-by Lorenzo Bianconi <[email protected]>
This doesn't seem right to me - I don't think we should send beacons while off-channel.
- Felix
Re: [PATCH v2 5/5] mt76: mt7603: enable/disable pre_tbtt_tasklet in mt7603_set_channel
Quoted 8 lines · Lorenzo Bianconi
Quoted 4 lines
Disable
pre_tbtt_tasklettasklet before setting the operating channel. Enable/disablebeacon_timerinmt7603_set_channelSigned-off-by Lorenzo Bianconi <[email protected]>This doesn't seem right to me - I don't think we should send beacons while off-channel.
Yes, right. I will rework this patch and even patch 1/5
Regards,
Lorenzo
Quoted 2 lines
- Felix