]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
wifi: rtl8xxxu: extend check for matching bssid to both interfaces
authorMartin Kaistra <martin.kaistra@linutronix.de>
Fri, 22 Dec 2023 10:14:28 +0000 (11:14 +0100)
committerKalle Valo <kvalo@kernel.org>
Wed, 10 Jan 2024 14:52:56 +0000 (16:52 +0200)
The driver will support two interfaces soon, which both can be in
station mode, so extend the check, whether cfo information should be
parsed, to cover both interfaces.

For better code readability put the lines with priv->vifs[port_num] in a
separate function.

Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20231222101442.626837-8-martin.kaistra@linutronix.de
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c

index a87e6f92c03be811ef823efb56f6febf21a46618..63e7634eb0f19af9db3c5d7597cbd6fbb38b9f45 100644 (file)
@@ -5706,6 +5706,16 @@ static void rtl8xxxu_update_beacon_work_callback(struct work_struct *work)
        rtl8xxxu_send_beacon_frame(hw, vif);
 }
 
+static inline bool rtl8xxxu_is_packet_match_bssid(struct rtl8xxxu_priv *priv,
+                                                 struct ieee80211_hdr *hdr,
+                                                 int port_num)
+{
+       return priv->vifs[port_num] &&
+              priv->vifs[port_num]->type == NL80211_IFTYPE_STATION &&
+              priv->vifs[port_num]->cfg.assoc &&
+              ether_addr_equal(priv->vifs[port_num]->bss_conf.bssid, hdr->addr2);
+}
+
 void rtl8723au_rx_parse_phystats(struct rtl8xxxu_priv *priv,
                                 struct ieee80211_rx_status *rx_status,
                                 struct rtl8723au_phy_stats *phy_stats,
@@ -5722,12 +5732,10 @@ void rtl8723au_rx_parse_phystats(struct rtl8xxxu_priv *priv,
                rx_status->signal = priv->fops->cck_rssi(priv, phy_stats);
        } else {
                bool parse_cfo = priv->fops->set_crystal_cap &&
-                                priv->vif &&
-                                priv->vif->type == NL80211_IFTYPE_STATION &&
-                                priv->vif->cfg.assoc &&
                                 !crc_icv_err &&
                                 !ieee80211_is_ctl(hdr->frame_control) &&
-                                ether_addr_equal(priv->vif->bss_conf.bssid, hdr->addr2);
+                                (rtl8xxxu_is_packet_match_bssid(priv, hdr, 0) ||
+                                 rtl8xxxu_is_packet_match_bssid(priv, hdr, 1));
 
                if (parse_cfo) {
                        priv->cfo_tracking.cfo_tail[0] = phy_stats->path_cfotail[0];
@@ -5762,12 +5770,10 @@ static void jaguar2_rx_parse_phystats_type1(struct rtl8xxxu_priv *priv,
                                            bool crc_icv_err)
 {
        bool parse_cfo = priv->fops->set_crystal_cap &&
-                        priv->vif &&
-                        priv->vif->type == NL80211_IFTYPE_STATION &&
-                        priv->vif->cfg.assoc &&
                         !crc_icv_err &&
                         !ieee80211_is_ctl(hdr->frame_control) &&
-                        ether_addr_equal(priv->vif->bss_conf.bssid, hdr->addr2);
+                        (rtl8xxxu_is_packet_match_bssid(priv, hdr, 0) ||
+                         rtl8xxxu_is_packet_match_bssid(priv, hdr, 1));
        u8 pwdb_max = 0;
        int rx_path;