From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 03:04:41 +0000
Subject: [PATCH] rk3568 rt init

---
 kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvendor.c |   41 ++++++++++++++++++++++++++++++++---------
 1 files changed, 32 insertions(+), 9 deletions(-)

diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvendor.c b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvendor.c
index ab7e073..480dc1f 100644
--- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvendor.c
+++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvendor.c
@@ -6860,11 +6860,13 @@
 	cca_congest_ext_channel_req_v2_t *per_chspec_stats = NULL;
 	uint per_chspec_stats_size = 0;
 	cca_congest_ext_channel_req_v3_t *all_chan_results;
-	cca_congest_ext_channel_req_v3_t all_chan_req;
+	cca_congest_ext_channel_req_v3_t *all_chan_req = NULL;
+	uint all_chan_req_size = sizeof(cca_congest_ext_channel_req_v3_t);
 #else
 	/* cca_get_stats_ext iovar for Wifi channel statics */
 	struct cca_congest_ext_channel_req_v2 *cca_v2_results;
-	struct cca_congest_ext_channel_req_v2 cca_v2_req;
+	struct cca_congest_ext_channel_req_v2 *cca_v2_req = NULL;
+	uint cca_v2_req_size = sizeof(cca_congest_ext_channel_req_v2_t);
 #endif /* CHAN_STATS_SUPPORT  */
 	const wl_cnt_wlc_t *wlc_cnt;
 	scb_val_t scbval;
@@ -7025,10 +7027,16 @@
 
 #ifdef CHAN_STATS_SUPPORT
 	/* Option to get all channel statistics */
-	all_chan_req.num_of_entries = 0;
-	all_chan_req.ver = WL_CCA_EXT_REQ_VER_V3;
+	all_chan_req = (void *)MALLOCZ(cfg->osh, all_chan_req_size);
+	if (all_chan_req == NULL) {
+		err = BCME_NOMEM;
+		WL_ERR(("all_chan_req alloc failed\n"));
+		goto exit;
+	}
+	all_chan_req->num_of_entries = 0;
+	all_chan_req->ver = WL_CCA_EXT_REQ_VER_V3;
 	err = wldev_iovar_getbuf(bcmcfg_to_prmry_ndev(cfg), "cca_get_stats_ext",
-		&all_chan_req, sizeof(all_chan_req), iovar_buf, WLC_IOCTL_MAXLEN, NULL);
+		all_chan_req, all_chan_req_size, iovar_buf, WLC_IOCTL_MAXLEN, NULL);
 
 	if (err != BCME_OK && err != BCME_UNSUPPORTED) {
 		WL_ERR(("cca_get_stats_ext iovar err = %d\n", err));
@@ -7089,12 +7097,18 @@
 		}
 	}
 #else
-	cca_v2_req.ver = WL_CCA_EXT_REQ_VER_V2;
-	cca_v2_req.chanspec =
+	cca_v2_req = (void *)MALLOCZ(cfg->osh, cca_v2_req_size);
+	if (cca_v2_req == NULL) {
+		err = BCME_NOMEM;
+		WL_ERR(("cca_v2_req alloc failed\n"));
+		goto exit;
+	}
+	cca_v2_req->ver = WL_CCA_EXT_REQ_VER_V2;
+	cca_v2_req->chanspec =
 		wl_chspec_host_to_driver(wf_chspec_primary20_chspec(cur_chanspec));
 
-	err = wldev_iovar_getbuf(bcmcfg_to_prmry_ndev(cfg), "cca_get_stats_ext", &cca_v2_req,
-		sizeof(cca_v2_req), iovar_buf, WLC_IOCTL_MAXLEN, NULL);
+	err = wldev_iovar_getbuf(bcmcfg_to_prmry_ndev(cfg), "cca_get_stats_ext", cca_v2_req,
+		cca_v2_req_size, iovar_buf, WLC_IOCTL_MAXLEN, NULL);
 
 	if (err != BCME_OK && err != BCME_UNSUPPORTED) {
 		WL_ERR(("cca_get_stats_ext iovar err = %d\n", err));
@@ -7300,6 +7314,15 @@
 		WL_ERR(("Vendor Command reply failed ret:%d \n", err));
 
 exit:
+#ifdef CHAN_STATS_SUPPORT
+	if (all_chan_req) {
+		MFREE(cfg->osh, all_chan_req, all_chan_req_size);
+	}
+#else
+	if (cca_v2_req) {
+		MFREE(cfg->osh, cca_v2_req, cca_v2_req_size);
+	}
+#endif /* CHAN_STATS_SUPPORT */
 	if (outdata) {
 		MFREE(cfg->osh, outdata, WLC_IOCTL_MAXLEN);
 	}

--
Gitblit v1.6.2