mt76x0: pci: add get_survey support
authorLorenzo Bianconi <lorenzo.bianconi@redhat.com>
Mon, 15 Oct 2018 09:33:11 +0000 (11:33 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 30 Nov 2018 11:21:39 +0000 (12:21 +0100)
Move mt76x02_update_channel routine in mt76x02-lib module in
order to be reused by mt76x0 driver adding get_survey support

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76x0/mac.c
drivers/net/wireless/mediatek/mt76/mt76x0/main.c
drivers/net/wireless/mediatek/mt76/mt76x0/pci.c
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
drivers/net/wireless/mediatek/mt76/mt76x02_mac.h
drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
drivers/net/wireless/mediatek/mt76/mt76x2/pci_mac.c

index 7a422c5902113d46e5c02096790671ea49b5620a..9cabe8ebf5dabdae74ff7caf0312d0e0db3aaf31 100644 (file)
@@ -137,6 +137,8 @@ void mt76x0_mac_work(struct work_struct *work)
        u32 sum, n;
        int i, j, k;
 
+       mt76x02_update_channel(&dev->mt76);
+
        /* Note: using MCU_RANDOM_READ is actually slower then reading all the
         *       registers by hand.  MCU takes ca. 20ms to complete read of 24
         *       registers while reading them one by one will takes roughly
index 9273d2d2764ab3e12a63309346821dfffb48bfe0..e9fbbabbe7e0ae5089c09eff2a795494dfe68622 100644 (file)
@@ -25,6 +25,11 @@ mt76x0_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)
 
        mt76_set_channel(&dev->mt76);
        ret = mt76x0_phy_set_channel(dev, chandef);
+
+       /* channel cycle counters read-and-clear */
+       mt76_rr(dev, MT_CH_IDLE);
+       mt76_rr(dev, MT_CH_BUSY);
+
        mt76_txq_schedule_all(&dev->mt76);
 
        return ret;
index 522c86059bcbf45797a9299ad39c8b7ac6c89839..3277e6b07a462670580c5b81935a55def086c4bf 100644 (file)
@@ -85,6 +85,7 @@ static const struct ieee80211_ops mt76x0e_ops = {
        .ampdu_action = mt76x02_ampdu_action,
        .sta_rate_tbl_update = mt76x02_sta_rate_tbl_update,
        .wake_tx_queue = mt76_wake_tx_queue,
+       .get_survey = mt76_get_survey,
 };
 
 static int mt76x0e_register_device(struct mt76x02_dev *dev)
@@ -135,6 +136,7 @@ mt76x0e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 {
        static const struct mt76_driver_ops drv_ops = {
                .txwi_size = sizeof(struct mt76x02_txwi),
+               .update_survey = mt76x02_update_channel,
                .tx_prepare_skb = mt76x02_tx_prepare_skb,
                .tx_complete_skb = mt76x02_tx_complete_skb,
                .rx_skb = mt76x02_queue_rx_skb,
index 10578e4cb2691d119019ffb70d1fbab349e0b7fc..e6d6ddaa5a07a8fc68c677912dd3dfb3a46764aa 100644 (file)
@@ -735,3 +735,21 @@ void mt76x02_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue *q,
                dev_kfree_skb_any(e->skb);
 }
 EXPORT_SYMBOL_GPL(mt76x02_tx_complete_skb);
+
+void mt76x02_update_channel(struct mt76_dev *mdev)
+{
+       struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
+       struct mt76_channel_state *state;
+       u32 active, busy;
+
+       state = mt76_channel_state(&dev->mt76, dev->mt76.chandef.chan);
+
+       busy = mt76_rr(dev, MT_CH_BUSY);
+       active = busy + mt76_rr(dev, MT_CH_IDLE);
+
+       spin_lock_bh(&dev->mt76.cc_lock);
+       state->cc_busy += busy;
+       state->cc_active += active;
+       spin_unlock_bh(&dev->mt76.cc_lock);
+}
+EXPORT_SYMBOL_GPL(mt76x02_update_channel);
index d99c18743969a1fc276e260852bef550e41a55ff..6bce18bcbf3655ad5cc14ae06cd2fd9342ddbdfb 100644 (file)
@@ -226,4 +226,5 @@ void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
 void mt76x02_mac_poll_tx_status(struct mt76x02_dev *dev, bool irq);
 void mt76x02_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue *q,
                             struct mt76_queue_entry *e, bool flush);
+void mt76x02_update_channel(struct mt76_dev *mdev);
 #endif
index be0ae24d310a38363fa6b5add7c1bf20a66d2898..72c365040be1526cebcfd47f32e381b3da6fc5ce 100644 (file)
@@ -85,8 +85,6 @@ void mt76x2_pre_tbtt_tasklet(unsigned long arg);
 
 void mt76x2_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);
 
-void mt76x2_update_channel(struct mt76_dev *mdev);
-
 void mt76x2_reset_wlan(struct mt76x02_dev *dev, bool enable);
 void mt76x2_init_txpower(struct mt76x02_dev *dev,
                         struct ieee80211_supported_band *sband);
index 3824290b219d5b7165a47611eb42cb6bcfe9e042..279edc6121199337b654a38bcfc3de038f9b7719 100644 (file)
@@ -354,7 +354,7 @@ struct mt76x02_dev *mt76x2_alloc_device(struct device *pdev)
 {
        static const struct mt76_driver_ops drv_ops = {
                .txwi_size = sizeof(struct mt76x02_txwi),
-               .update_survey = mt76x2_update_channel,
+               .update_survey = mt76x02_update_channel,
                .tx_prepare_skb = mt76x02_tx_prepare_skb,
                .tx_complete_skb = mt76x02_tx_complete_skb,
                .rx_skb = mt76x02_queue_rx_skb,
index 4b331ed14bb28d7aaad6c9e188f53b7ddbea2aca..15620d4d425ed3ddcfea7734e4ddaefa20983be0 100644 (file)
@@ -137,30 +137,13 @@ void mt76x2_mac_set_beacon_enable(struct mt76x02_dev *dev,
                mt76x02_irq_disable(dev, MT_INT_PRE_TBTT | MT_INT_TBTT);
 }
 
-void mt76x2_update_channel(struct mt76_dev *mdev)
-{
-       struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-       struct mt76_channel_state *state;
-       u32 active, busy;
-
-       state = mt76_channel_state(&dev->mt76, dev->mt76.chandef.chan);
-
-       busy = mt76_rr(dev, MT_CH_BUSY);
-       active = busy + mt76_rr(dev, MT_CH_IDLE);
-
-       spin_lock_bh(&dev->mt76.cc_lock);
-       state->cc_busy += busy;
-       state->cc_active += active;
-       spin_unlock_bh(&dev->mt76.cc_lock);
-}
-
 void mt76x2_mac_work(struct work_struct *work)
 {
        struct mt76x02_dev *dev = container_of(work, struct mt76x02_dev,
                                               mac_work.work);
        int i, idx;
 
-       mt76x2_update_channel(&dev->mt76);
+       mt76x02_update_channel(&dev->mt76);
        for (i = 0, idx = 0; i < 16; i++) {
                u32 val = mt76_rr(dev, MT_TX_AGG_CNT(i));