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>
                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;
 
        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++) {
 
        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 {