wifi: rtl8xxxu: Clean up filter configuration
authorMartin Kaistra <martin.kaistra@linutronix.de>
Fri, 28 Apr 2023 15:08:29 +0000 (17:08 +0200)
committerKalle Valo <kvalo@kernel.org>
Fri, 5 May 2023 07:30:14 +0000 (10:30 +0300)
When RCR_CHECK_BSSID_MATCH is set in AP mode, we don't receive any data
frames. Rearrange RCR bits to filter flags to match other realtek drivers
and remove RCR_CHECK_BSSID_MATCH in AP mode.

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://lore.kernel.org/r/20230428150833.218605-15-martin.kaistra@linutronix.de
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c

index 2e07509..9e9d172 100644 (file)
@@ -6689,22 +6689,22 @@ static void rtl8xxxu_configure_filter(struct ieee80211_hw *hw,
         */
 
        if (*total_flags & FIF_BCN_PRBRESP_PROMISC)
-               rcr &= ~RCR_CHECK_BSSID_BEACON;
+               rcr &= ~(RCR_CHECK_BSSID_BEACON | RCR_CHECK_BSSID_MATCH);
        else
-               rcr |= RCR_CHECK_BSSID_BEACON;
+               rcr |= RCR_CHECK_BSSID_BEACON | RCR_CHECK_BSSID_MATCH;
+
+       if (priv->vif && priv->vif->type == NL80211_IFTYPE_AP)
+               rcr &= ~RCR_CHECK_BSSID_MATCH;
 
        if (*total_flags & FIF_CONTROL)
                rcr |= RCR_ACCEPT_CTRL_FRAME;
        else
                rcr &= ~RCR_ACCEPT_CTRL_FRAME;
 
-       if (*total_flags & FIF_OTHER_BSS) {
+       if (*total_flags & FIF_OTHER_BSS)
                rcr |= RCR_ACCEPT_AP;
-               rcr &= ~RCR_CHECK_BSSID_MATCH;
-       } else {
+       else
                rcr &= ~RCR_ACCEPT_AP;
-               rcr |= RCR_CHECK_BSSID_MATCH;
-       }
 
        if (*total_flags & FIF_PSPOLL)
                rcr |= RCR_ACCEPT_PM;