Merge android13-gs-pixel-5.10-24Q1 into android13-gs-pixel-5.10

SBMerger: 571992243
Change-Id: Ib45fc3e4fd5a1db37f1c4cd4d394df1e96215ef6
Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
diff --git a/Kbuild b/Kbuild
index c36f095..629255c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -298,12 +298,12 @@
 DHDCFLAGS += -DDHD_DUMP_START_COMMAND
 # Enable pktid logging
 DHDCFLAGS += -DDHD_MAP_PKTID_LOGGING
+# Skip coredump for certain health check traps
+DHDCFLAGS += -DDHD_SKIP_COREDUMP_ON_HC
 else
 DHDCFLAGS += -DDHD_FILE_DUMP_EVENT
 # The debug dump file path is blank in DHD, it is defined in HAL.
 DHDCFLAGS += -DDHD_COMMON_DUMP_PATH="\"/\""
-# Skip coredump for certain health check traps
-DHDCFLAGS += -DDHD_SKIP_COREDUMP_ON_HC
 endif
 DHDCFLAGS := $(filter-out -DDHD_DUMP_FILE_WRITE_FROM_KERNEL ,$(DHDCFLAGS))
 endif
diff --git a/wl_android.c b/wl_android.c
index 3aa7844..6569172 100644
--- a/wl_android.c
+++ b/wl_android.c
@@ -15094,3 +15094,77 @@
 	return bytes_written;
 }
 #endif /* SUPPORT_AP_INIT_BWCONF */
+
+s32
+wl_android_set_blacklist_bssid(struct net_device *dev, maclist_t *blacklist,
+    uint32 len, uint32 flush)
+{
+	s32 err;
+	s32 macmode;
+
+	if (blacklist) {
+		err = wldev_ioctl_set(dev, WLC_SET_MACLIST, (u8 *)blacklist, len);
+		if (err != BCME_OK) {
+			WL_ERR(("WLC_SET_MACLIST failed %d\n", err));
+			return err;
+		}
+	}
+	/* By default programming blacklist flushes out old values */
+	macmode = (flush && !blacklist) ? WLC_MACMODE_DISABLED : WLC_MACMODE_DENY;
+	err = wldev_ioctl_set(dev, WLC_SET_MACMODE, (u8 *)&macmode, sizeof(macmode));
+	if (err != BCME_OK) {
+		WL_ERR(("WLC_SET_MACMODE %d failed %d\n", macmode, err));
+	} else {
+		WL_INFORM_MEM(("WLC_SET_MACMODE %d applied\n", macmode));
+	}
+	return err;
+}
+
+s32
+wl_android_set_whitelist_ssid(struct net_device *dev, wl_ssid_whitelist_t *ssid_whitelist,
+    uint32 len, uint32 flush)
+{
+	s32 err;
+	u8 *buf;
+	u32 buf_len = WLC_IOCTL_MEDLEN;
+	wl_ssid_whitelist_t whitelist_ssid_flush;
+	struct bcm_cfg80211 *cfg = wl_get_cfg(dev);
+
+	if (!ssid_whitelist) {
+		if (flush) {
+			ssid_whitelist = &whitelist_ssid_flush;
+			ssid_whitelist->ssid_count = 0;
+		} else {
+			WL_ERR(("%s : Nothing to do here\n", __FUNCTION__));
+			return BCME_BADARG;
+		}
+	}
+
+	buf = (char *)MALLOC(cfg->osh, buf_len);
+	if (buf == NULL) {
+		WL_ERR(("failed to allocated memory %d bytes\n",
+			WLC_IOCTL_MEDLEN));
+		return -ENOMEM;
+	}
+
+	if ((len + strlen("roam_exp_ssid_whitelist")) >= buf_len) {
+		WL_ERR(("unexpected len for ssid blklist:%d\n", len));
+		err = -EINVAL;
+		goto exit;
+	}
+
+	ssid_whitelist->version = SSID_WHITELIST_VERSION_1;
+	ssid_whitelist->flags = flush ? ROAM_EXP_CLEAR_SSID_WHITELIST : 0;
+	err = wldev_iovar_setbuf(dev, "roam_exp_ssid_whitelist",
+			(u8 *)ssid_whitelist, len, buf, buf_len, NULL);
+	if (err != BCME_OK) {
+		if (err == BCME_UNSUPPORTED) {
+			WL_ERR(("roam_exp_bssid_pref, UNSUPPORTED \n"));
+		} else {
+			WL_ERR(("Failed to execute roam_exp_bssid_pref %d\n", err));
+		}
+	}
+exit:
+	MFREE(cfg->osh, buf, buf_len);
+	return err;
+}
diff --git a/wl_android.h b/wl_android.h
index 5e330f3..5120c41 100644
--- a/wl_android.h
+++ b/wl_android.h
@@ -156,6 +156,10 @@
 #define APCS_DEFAULT_5G_CH	149
 #define APCS_DEFAULT_6G_CH	5
 
+extern int wl_android_set_whitelist_ssid(struct net_device *dev,
+	wl_ssid_whitelist_t *ssid_whitelist, uint32 len, uint32 flush);
+extern int wl_android_set_blacklist_bssid(struct net_device *dev, maclist_t *blacklist,
+    uint32 len, uint32 flush);
 int wl_android_set_ap_mac_list(struct net_device *dev, int macmode, struct maclist *maclist);
 #ifdef WL_BCNRECV
 extern int wl_android_bcnrecv_config(struct net_device *ndev, char *data,
diff --git a/wl_cfg80211.c b/wl_cfg80211.c
index d655e1b..3802ed0 100644
--- a/wl_cfg80211.c
+++ b/wl_cfg80211.c
@@ -6132,17 +6132,6 @@
 		wl_restore_ap_bw(cfg);
 	}
 #endif /* SUPPORT_AP_BWCTRL */
-#if defined(ROAMEXP_SUPPORT)
-	/* Clear Blacklist bssid and Whitelist ssid list before join issue
-	 * This is temporary fix since currently firmware roaming is not
-	 * disabled by android framework before SSID join from framework
-	*/
-	/* Flush blacklist bssid content */
-	dhd_dev_set_blacklist_bssid(dev, NULL, 0, true);
-	/* Flush whitelist ssid content */
-	dhd_dev_set_whitelist_ssid(dev, NULL, 0, true);
-#endif /* ROAMEXP_SUPPORT */
-
 	WL_DBG(("SME IE : len=%zu\n", sme->ie_len));
 	if (sme->ie != NULL && sme->ie_len > 0 && (wl_dbg_level & WL_DBG_DBG)) {
 		prhex(NULL, sme->ie, sme->ie_len);
@@ -12845,6 +12834,13 @@
 	}
 #endif /* SUPPORT_SET_TID */
 
+#if defined(ROAMEXP_SUPPORT)
+	/* Flush blacklist bssid content */
+	wl_android_set_blacklist_bssid(ndev, NULL, 0, TRUE);
+	/* Flush whitelist ssid content */
+	wl_android_set_whitelist_ssid(ndev, NULL, 0, TRUE);
+#endif /* ROAMEXP_SUPPORT */
+
 	return ret;
 }
 
@@ -25722,7 +25718,7 @@
 		}
 
 		/* Supplicant does scan passive channel but not for DFS channel */
-		if (!(chaninfo & WL_CHAN_RADAR) && !ch_160mhz_5g &&
+		if (!restrict_chan && !ch_160mhz_5g &&
 			!CHSPEC_IS6G(chspec) && (!is_unii4)) {
 			mask |= (1 << WIFI_INTERFACE_P2P_CLIENT);
 		}
diff --git a/wl_cfgvendor.c b/wl_cfgvendor.c
index da8ee12..91bcbcc 100755
--- a/wl_cfgvendor.c
+++ b/wl_cfgvendor.c
@@ -2845,6 +2845,7 @@
 					err = -EINVAL;
 					goto exit;
 				}
+				WL_INFORM_MEM(("blacklist_flush:%d\n", flush));
 				break;
 			case GSCAN_ATTRIBUTE_BLACKLIST_BSSID:
 				if (num == 0 || !blacklist) {
@@ -2863,8 +2864,9 @@
 					err = -EINVAL;
 					goto exit;
 				}
-				memcpy(&(blacklist->ea[blacklist->count]), nla_data(iter),
-						ETHER_ADDR_LEN);
+				WL_INFORM_MEM(("blacklist mac_addr:" MACDBG "\n",
+					MAC2STRDBG(nla_data(iter))));
+				eacopy(nla_data(iter), &(blacklist->ea[blacklist->count]));
 				blacklist->count++;
 				break;
 		default:
@@ -2880,8 +2882,8 @@
 		goto exit;
 	}
 
-	err = dhd_dev_set_blacklist_bssid(bcmcfg_to_prmry_ndev(cfg),
-	          blacklist, mem_needed, flush);
+	err = wl_android_set_blacklist_bssid(wdev_to_ndev(wdev), blacklist,
+		mem_needed, flush);
 exit:
 	MFREE(cfg->osh, blacklist, mem_needed);
 	return err;