enable channel survey for mt76u and mt7615
Subsystems (2)
Lorenzo Bianconi
maintainercover enable channel survey for mt76u and mt7615
Introduce channel survey support for mt76x02u and mt7615 drivers in order to enable ACS for all of them
Lorenzo Bianconi (3):
mt76: mt76x02u: enable survey support
mt76: mt7603: move survey_time in mt76_dev
mt76: mt7615: enable survey support
drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ .../net/wireless/mediatek/mt76/mt7603/mac.c | 5 ++-- .../net/wireless/mediatek/mt76/mt7603/main.c | 4 ++-- .../wireless/mediatek/mt76/mt7603/mt7603.h | 1 - .../net/wireless/mediatek/mt76/mt7615/mac.c | 24 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/main.c | 5 ++++ .../wireless/mediatek/mt76/mt7615/mt7615.h | 1 + .../net/wireless/mediatek/mt76/mt7615/pci.c | 1 + .../net/wireless/mediatek/mt76/mt7615/regs.h | 3 +++ .../net/wireless/mediatek/mt76/mt76x0/usb.c | 9 +++++++ .../net/wireless/mediatek/mt76/mt76x2/usb.c | 1 + .../wireless/mediatek/mt76/mt76x2/usb_init.c | 7 ++++++ .../wireless/mediatek/mt76/mt76x2/usb_main.c | 5 ++++ 13 files changed, 63 insertions(+), 5 deletions(-)
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 1/3 mt76: mt76x02u: enable survey support
Introduce channel survey support for mt76x2u and mt76x0u drivers
Signed-off-by Lorenzo Bianconi <[email protected]>
--- drivers/net/wireless/mediatek/mt76/mt76x0/usb.c | 9 +++++++++ drivers/net/wireless/mediatek/mt76/mt76x2/usb.c | 1 + drivers/net/wireless/mediatek/mt76/mt76x2/usb_init.c | 7 +++++++ drivers/net/wireless/mediatek/mt76/mt76x2/usb_main.c | 5 +++++ 4 files changed, 22 insertions(+)
drivers/net/wireless/mediatek/mt76/mt76x0/usb.c +9 -0
@@ -132,6 +132,7 @@ static const struct ieee80211_ops mt76x0u_ops = { .set_rts_threshold = mt76x02_set_rts_threshold, .wake_tx_queue = mt76_wake_tx_queue, .get_txpower = mt76_get_txpower, + .get_survey = mt76_get_survey, .set_tim = mt76_set_tim, .release_buffered_frames = mt76_release_buffered_frames, };
@@ -161,6 +162,13 @@ static int mt76x0u_init_hardware(struct mt76x02_dev *dev)FIELD_PREP (MT_TXOP_TRUN_EN ,0x3f ) | FIELD_PREP(MT_TXOP_EXT_CCA_DLY, 0x58)); +mt76_wr (dev,MT_CH_TIME_CFG , +MT_CH_TIME_CFG_TIMER_EN | +MT_CH_TIME_CFG_TX_AS_BUSY | +MT_CH_TIME_CFG_RX_AS_BUSY | +MT_CH_TIME_CFG_NAV_AS_BUSY | +MT_CH_TIME_CFG_EIFS_AS_BUSY ); +return 0 ; }
@@ -200,6 +208,7 @@ static int mt76x0u_probe(struct usb_interface *usb_intf, const struct usb_device_id *id) {static const struct mt76_driver_ops drv_ops = { + .update_survey = mt76x02_update_channel, .tx_prepare_skb = mt76x02u_tx_prepare_skb, .tx_complete_skb = mt76x02u_tx_complete_skb, .tx_status_data = mt76x02_tx_status_data,
drivers/net/wireless/mediatek/mt76/mt76x2/usb.c +1 -0
@@ -36,6 +36,7 @@ static int mt76x2u_probe(struct usb_interface *intf, const struct usb_device_id *id) {static const struct mt76_driver_ops drv_ops = { + .update_survey = mt76x02_update_channel, .tx_prepare_skb = mt76x02u_tx_prepare_skb, .tx_complete_skb = mt76x02u_tx_complete_skb, .tx_status_data = mt76x02_tx_status_data,
drivers/net/wireless/mediatek/mt76/mt76x2/usb_init.c +7 -0
@@ -195,6 +195,13 @@ int mt76x2u_init_hardware(struct mt76x02_dev *dev)mt76x02_phy_set_rxpath (dev);mt76x02_phy_set_txdac (dev); +mt76_wr (dev,MT_CH_TIME_CFG , +MT_CH_TIME_CFG_TIMER_EN | +MT_CH_TIME_CFG_TX_AS_BUSY | +MT_CH_TIME_CFG_RX_AS_BUSY | +MT_CH_TIME_CFG_NAV_AS_BUSY | +MT_CH_TIME_CFG_EIFS_AS_BUSY ); +return mt76x2u_mac_stop (dev); }
drivers/net/wireless/mediatek/mt76/mt76x2/usb_main.c +5 -0
@@ -59,6 +59,10 @@ mt76x2u_set_channel(struct mt76x02_dev *dev, err =mt76x2u_phy_set_channel (dev, chandef); +/* channel cycle counters read-and-clear */ +mt76_rr (dev,MT_CH_IDLE ); +mt76_rr (dev,MT_CH_BUSY ); +mt76x2_mac_resume (dev);clear_bit (MT76_RESET , &dev->mt76.state);
@@ -125,6 +129,7 @@ const struct ieee80211_ops mt76x2u_ops = { .sw_scan_complete = mt76x02_sw_scan_complete, .sta_rate_tbl_update = mt76x02_sta_rate_tbl_update, .get_txpower = mt76_get_txpower, + .get_survey = mt76_get_survey, .set_tim = mt76_set_tim, .release_buffered_frames = mt76_release_buffered_frames, };
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 2/3 mt76: mt7603: move survey_time in mt76_dev
In reply to Lorenzo BianconiMove survey_time field in mt76_dev in order to be reused adding survey support to mt7615 driver
Signed-off-by Lorenzo Bianconi <[email protected]>
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ drivers/net/wireless/mediatek/mt76/mt7603/mac.c | 5 +++-- drivers/net/wireless/mediatek/mt76/mt7603/main.c | 4 ++-- drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h | 1 - 4 files changed, 7 insertions(+), 5 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -504,6 +504,8 @@ struct mt76_dev {u8 csa_complete; +ktime_t survey_time; +u32 rxfilter;union {
drivers/net/wireless/mediatek/mt76/mt7603/mac.c +3 -2
@@ -1473,8 +1473,9 @@ void mt7603_update_channel(struct mt76_dev *mdev)spin_lock_bh (&dev->mt76.cc_lock); cur_time =ktime_get_boottime (); state->cc_busy += busy; - state->cc_active +=ktime_to_us (ktime_sub (cur_time, dev->survey_time)); - dev->survey_time = cur_time; + state->cc_active +=ktime_to_us (ktime_sub (cur_time, + dev->mt76.survey_time)); + dev->mt76.survey_time = cur_time;spin_unlock_bh (&dev->mt76.cc_lock); }
drivers/net/wireless/mediatek/mt76/mt7603/main.c +2 -2
@@ -14,7 +14,7 @@ mt7603_start(struct ieee80211_hw *hw)struct mt7603_dev *dev = hw->priv;mt7603_mac_start (dev); - dev->survey_time =ktime_get_boottime (); + dev->mt76.survey_time =ktime_get_boottime ();set_bit (MT76_STATE_RUNNING , &dev->mt76.state);mt7603_mac_work (&dev->mt76.mac_work.work);
@@ -182,7 +182,7 @@ mt7603_set_channel(struct mt7603_dev *dev, struct cfg80211_chan_def *def)mt76_rr (dev,MT_MIB_STAT_PSCCA );mt7603_cca_stats_reset (dev); - dev->survey_time =ktime_get_boottime (); + dev->mt76.survey_time =ktime_get_boottime ();mt7603_init_edcca (dev);
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +0 -1
@@ -116,7 +116,6 @@ struct mt7603_dev {s8 tx_power_limit; -ktime_t survey_time;ktime_t ed_time;struct mt76_queue q_rx;
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 3/3 mt76: mt7615: enable survey support
In reply to Lorenzo BianconiIntroduce channel survey support for mt7615 driver
Signed-off-by Lorenzo Bianconi <[email protected]>
--- .../net/wireless/mediatek/mt76/mt7615/mac.c | 24 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/main.c | 5 ++++ .../wireless/mediatek/mt76/mt7615/mt7615.h | 1 + .../net/wireless/mediatek/mt76/mt7615/pci.c | 1 + .../net/wireless/mediatek/mt76/mt7615/regs.h | 3 +++ 5 files changed, 34 insertions(+)
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +24 -0
@@ -1237,6 +1237,29 @@ mt7615_mac_scs_check(struct mt7615_dev *dev)mt7615_mac_set_default_sensitivity (dev); } +void mt7615_update_channel (struct mt76_dev *mdev) +{ + struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76); +struct mt76_channel_state *state; +ktime_t cur_time; +u32 busy; + +if (!test_bit (MT76_STATE_RUNNING , &mdev->state)) +return ; + + state =mt76_channel_state (mdev, mdev->chandef.chan); +/* TODO: add DBDC support */ + busy =mt76_get_field (dev,MT_MIB_SDR16 (0 ),MT_MIB_BUSY_MASK ); + +spin_lock_bh (&mdev->cc_lock); + cur_time =ktime_get_boottime (); + state->cc_busy += busy; + state->cc_active +=ktime_to_us (ktime_sub (cur_time, + mdev->survey_time)); + mdev->survey_time = cur_time; +spin_unlock_bh (&mdev->cc_lock); +} +void mt7615_mac_work (struct work_struct *work) {struct mt7615_dev *dev;
@@ -1245,6 +1268,7 @@ void mt7615_mac_work(struct work_struct *work) mac_work.work);mutex_lock (&dev->mt76.mutex); +mt7615_update_channel (&dev->mt76);if (++dev->mac_work_count ==5 ) {mt7615_mac_scs_check (dev); dev->mac_work_count =0 ;
drivers/net/wireless/mediatek/mt76/mt7615/main.c +5 -0
@@ -16,6 +16,7 @@ static int mt7615_start(struct ieee80211_hw *hw) {struct mt7615_dev *dev = hw->priv; + dev->mt76.survey_time =ktime_get_boottime ();set_bit (MT76_STATE_RUNNING , &dev->mt76.state);ieee80211_queue_delayed_work (mt76_hw (dev), &dev->mt76.mac_work,MT7615_WATCHDOG_TIME );
@@ -149,6 +150,9 @@ static int mt7615_set_channel(struct mt7615_dev *dev) ret =mt7615_dfs_init_radar_detector (dev);mt7615_mac_cca_stats_reset (dev); + dev->mt76.survey_time =ktime_get_boottime (); +/* TODO: add DBDC support */ +mt76_rr (dev,MT_MIB_SDR16 (0 )); out:clear_bit (MT76_RESET , &dev->mt76.state);
@@ -528,4 +532,5 @@ const struct ieee80211_ops mt7615_ops = { .release_buffered_frames = mt76_release_buffered_frames, .get_txpower = mt76_get_txpower, .channel_switch_beacon = mt7615_channel_switch_beacon, + .get_survey = mt76_get_survey, };
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +1 -0
@@ -224,6 +224,7 @@ static inline void mt7615_irq_disable(struct mt7615_dev *dev, u32 mask)mt76_set_irq_mask (&dev->mt76,MT_INT_MASK_CSR , mask,0 ); } +void mt7615_update_channel (struct mt76_dev *mdev);void mt7615_mac_cca_stats_reset (struct mt7615_dev *dev);void mt7615_mac_set_scs (struct mt7615_dev *dev,bool enable); int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
drivers/net/wireless/mediatek/mt76/mt7615/pci.c +1 -0
@@ -81,6 +81,7 @@ static int mt7615_pci_probe(struct pci_dev *pdev, .sta_add = mt7615_sta_add, .sta_assoc = mt7615_sta_assoc, .sta_remove = mt7615_sta_remove, + .update_survey = mt7615_update_channel, };struct mt7615_dev *dev;struct mt76_dev *mdev;
drivers/net/wireless/mediatek/mt76/mt7615/regs.h +3 -0
@@ -255,6 +255,9 @@#define MT_MIB_RTS_RETRIES_COUNT_MASK GENMASK(31, 16)#define MT_MIB_RTS_COUNT_MASK GENMASK(15, 0) +#define MT_MIB_SDR16 (n) MT_WF_MIB(0x48 + ((n) << 9)) +#define MT_MIB_BUSY_MASK GENMASK(23, 0) +#define MT_EFUSE_BASE 0x81070000#define MT_EFUSE_BASE_CTRL 0x000#define MT_EFUSE_BASE_CTRL_EMPTY BIT(30)
Signature · 1 line
2.21.0