mt76: mt7663: add support to sched scan with randomise addr
authorSean Wang <sean.wang@mediatek.com>
Wed, 6 May 2020 09:55:42 +0000 (11:55 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 12 May 2020 17:52:35 +0000 (19:52 +0200)
Add support to sched scan with randomise addr

Co-developed-by: Wan-Feng Jiang <Wan-Feng.Jiang@mediatek.com>
Signed-off-by: Wan-Feng Jiang <Wan-Feng.Jiang@mediatek.com>
Co-developed-by: Soul Huang <Soul.Huang@mediatek.com>
Signed-off-by: Soul Huang <Soul.Huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/init.c
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
drivers/net/wireless/mediatek/mt76/mt7615/mcu.h

index 1d49d65d1acd18a553207d11901484240dce170c..37fc70197f920cfa650aabf57de2d1a4d8236eda 100644 (file)
@@ -139,7 +139,8 @@ void mt7615_check_offload_capability(struct mt7615_dev *dev)
                ieee80211_hw_set(hw, SUPPORTS_PS);
                ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS);
 
-               wiphy->features |= NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;
+               wiphy->features |= NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR |
+                                  NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;
        } else {
                dev->ops->hw_scan = NULL;
                dev->ops->cancel_hw_scan = NULL;
index 2775238b36ca4537f734684ea5909b30e9528856..19b59a7550b6c481f124368f5b991e16834010ad 100644 (file)
@@ -2907,7 +2907,12 @@ int mt7615_mcu_sched_scan_req(struct mt7615_phy *phy,
        req = (struct mt7615_sched_scan_req *)skb_put(skb, sizeof(*req));
        req->version = 1;
        req->seq_num = mvif->scan_seq_num | ext_phy << 7;
-       req->scan_func = !!(sreq->flags & NL80211_SCAN_FLAG_RANDOM_ADDR);
+
+       if (sreq->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
+               get_random_mask_addr(req->random_mac, sreq->mac_addr,
+                                    sreq->mac_addr_mask);
+               req->scan_func = 1;
+       }
 
        req->ssids_num = sreq->n_ssids;
        for (i = 0; i < req->ssids_num; i++) {
index 737ccec6dd96178599eae1ed49f51928cf58c073..0f12e6da89af72a3049ed89c1a35426775cc280d 100644 (file)
@@ -405,10 +405,11 @@ struct mt7615_sched_scan_req {
        u8 channel_type;
        u8 channels_num;
        u8 intervals_num;
-       u8 scan_func;
+       u8 scan_func; /* BIT(0) eable random mac address */
        struct mt7615_mcu_scan_channel channels[64];
        __le16 intervals[MT7615_MAX_SCHED_SCAN_INTERVAL];
-       u8 pad2[64];
+       u8 random_mac[ETH_ALEN]; /* valid when BIT(0) in scan_func is set */
+       u8 pad2[58];
 } __packed;
 
 struct nt7615_sched_scan_done {