From bedbef8ad3e75a304af6361af235302bcc61d06b Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Tue, 14 May 2024 06:39:01 +0000
Subject: [PATCH] 修改内核路径

---
 kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c |  403 +++++++++++++++++---------------------------------------
 1 files changed, 124 insertions(+), 279 deletions(-)

diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c
old mode 100644
new mode 100755
index 6fe9efb..ae863e1
--- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c
+++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c
@@ -88,6 +88,8 @@
 #define WL_BSSIDX_MAX	16
 #endif /* WL_STATIC_IF */
 
+uint android_msg_level = ANDROID_ERROR_LEVEL | ANDROID_MSG_LEVEL;
+
 #define ANDROID_ERROR_MSG(x, args...) \
 	do { \
 		if (android_msg_level & ANDROID_ERROR_LEVEL) { \
@@ -726,24 +728,8 @@
 #define CMD_TWT_SETUP		"TWT_SETUP"
 #define CMD_TWT_TEARDOWN	"TWT_TEARDOWN"
 #define CMD_TWT_INFO		"TWT_INFO_FRM"
-#define CMD_TWT_STATUS_QUERY	"GET_TWT_STATUS"
-#define CMD_TWT_CAPABILITY	"GET_TWT_CAP"
-#define CMD_TWT_GET_STATS	"GET_TWT_STATISTICS"
-#define CMD_TWT_CLR_STATS	"CLEAR_TWT_STATISTICS"
-#define WL_TWT_CMD_INVAL	255
-
-/* setup command name to value conversion */
-static struct {
-	const char *name;
-	uint8 val;
-} setup_cmd_val[] = {
-	{"request", TWT_SETUP_CMD_REQUEST_TWT},
-	{"suggest", TWT_SETUP_CMD_SUGGEST_TWT},
-	{"demand", TWT_SETUP_CMD_DEMAND_TWT},
-	{"accept", TWT_SETUP_CMD_ACCEPT_TWT},
-	{"alternate", TWT_SETUP_CMD_ALTER_TWT},
-	{"reject", TWT_SETUP_CMD_REJECT_TWT}
-};
+#define CMD_TWT_STATUS_QUERY	"TWT_STATUS"
+#define CMD_TWT_CAPABILITY	"TWT_CAP"
 #endif /* WL_TWT */
 
 /* drv command info structure */
@@ -910,9 +896,7 @@
 	char *command, int total_len);
 static int wlc_wbtext_get_roam_prof(struct net_device *ndev, wl_roamprof_band_t *rp,
 	uint8 band, uint8 *roam_prof_ver, uint8 *roam_prof_size);
-#ifdef WES_SUPPORT
 static int wl_android_wbtext_enable(struct net_device *dev, int mode);
-#endif // WES_SUPPORT
 #endif /* WBTEXT */
 #ifdef WES_SUPPORT
 /* wl_roam.c */
@@ -1693,6 +1677,14 @@
 
 #ifdef CUSTOMER_HW4_PRIVATE_CMD
 #ifdef ROAM_API
+#ifdef WBTEXT
+static bool wl_android_check_wbtext_support(struct net_device *dev)
+{
+	dhd_pub_t *dhdp = wl_cfg80211_get_dhdp(dev);
+	return dhdp->wbtext_support;
+}
+#endif /* WBTEXT */
+
 static bool
 wl_android_check_wbtext_policy(struct net_device *dev)
 {
@@ -4298,13 +4290,6 @@
 	return error;
 }
 
-#ifdef WES_SUPPORT
-static bool wl_android_check_wbtext_support(struct net_device *dev)
-{
-	dhd_pub_t *dhdp = wl_cfg80211_get_dhdp(dev);
-	return dhdp->wbtext_support;
-}
-
 static int
 wl_android_wbtext_enable(struct net_device *dev, int mode)
 {
@@ -4323,7 +4308,6 @@
 
 	return error;
 }
-#endif /* WES_SUPPORT */
 
 static int wl_cfg80211_wbtext_btm_timer_threshold(struct net_device *dev,
 	char *command, int total_len)
@@ -10282,17 +10266,8 @@
 exit:
 #ifdef DHD_SEND_HANG_PRIVCMD_ERRORS
 	if (ret) {
-		/* Avoid incrementing priv_cmd_errors in case of unsupported feature
-		* or BUSY state specific to TWT commands
-		*/
-		if (
-#ifdef WL_TWT
-			((ret != BCME_BUSY) &&
-			((strnicmp(command, CMD_TWT_SETUP, strlen(CMD_TWT_SETUP)) == 0) ||
-			(strnicmp(command, CMD_TWT_TEARDOWN, strlen(CMD_TWT_TEARDOWN)) == 0) ||
-			(strnicmp(command, CMD_TWT_INFO, strlen(CMD_TWT_INFO)) == 0))) ||
-#endif /* WL_TWT */
-			(ret != BCME_UNSUPPORTED)) {
+		/* Avoid incrementing priv_cmd_errors in case of unsupported feature */
+		if (ret != BCME_UNSUPPORTED) {
 			wl_android_check_priv_cmd_errors(net);
 		}
 	} else {
@@ -11172,31 +11147,18 @@
 
 #ifdef WL_TWT
 
-static uint8
-wl_twt_cmd2val(const char *name)
-{
-	uint i;
-
-	for (i = 0; i < ARRAYSIZE(setup_cmd_val); i ++) {
-		if (strcmp(name, setup_cmd_val[i].name) == 0) {
-			return setup_cmd_val[i].val;
-		}
-	}
-
-	return WL_TWT_CMD_INVAL;
-}
-
 static int
 wl_android_twt_setup(struct net_device *ndev, char *command, int total_len)
 {
-	wl_twt_setup_t val;
-	s32 bw = 0;
+	wl_twt_config_t val;
+	s32 bw;
 	char *token, *pos;
 	u8 mybuf[WLC_IOCTL_SMLEN] = {0};
 	u8 resp_buf[WLC_IOCTL_SMLEN] = {0};
+	u64 twt;
 	uint8 *rem = mybuf;
 	uint16 rem_len = sizeof(mybuf);
-	uint8 tmp;
+	int32 val32;
 
 	WL_DBG_MEM(("Enter. cmd:%s\n", command));
 
@@ -11210,26 +11172,16 @@
 	val.version = WL_TWT_SETUP_VER;
 	val.length = sizeof(val.version) + sizeof(val.length);
 
-	val.desc.bid = WL_TWT_INV_BCAST_ID;
-	val.desc.flow_id = WL_TWT_INV_FLOW_ID;
-	val.desc.btwt_persistence = WL_TWT_INFINITE_BTWT_PERSIST;
-	val.desc.wake_type = WL_TWT_TIME_TYPE_AUTO;
+	/* Default values, Overide Below */
+	val.desc.wake_time_h = 0xFFFFFFFF;
+	val.desc.wake_time_l = 0xFFFFFFFF;
+	val.desc.wake_int_min = 0xFFFFFFFF;
+	val.desc.wake_int_max = 0xFFFFFFFF;
+	val.desc.wake_dur_min = 0xFFFFFFFF;
+	val.desc.wake_dur_max = 0xFFFFFFFF;
+	val.desc.avg_pkt_num  = 0xFFFFFFFF;
 
 	pos = command + sizeof(CMD_TWT_SETUP);
-
-	/* setup_cmd */
-	token = strsep((char**)&pos, " ");
-	if (!token) {
-		ANDROID_ERROR(("Mandaory param setup_cmd not present\n"));
-		bw = -EINVAL;
-		goto exit;
-	}
-
-	val.desc.setup_cmd = wl_twt_cmd2val(token);
-	if (val.desc.setup_cmd == WL_TWT_CMD_INVAL) {
-		ANDROID_ERROR(("Unrecognized TWT Setup command '%s'\n", token));
-	}
-	ANDROID_INFO(("TWT_SETUP val.desc.setup_cmd %s\n", token));
 
 	/* negotiation_type */
 	token = strsep((char**)&pos, " ");
@@ -11238,101 +11190,108 @@
 		bw = -EINVAL;
 		goto exit;
 	}
-	val.desc.negotiation_type = htod32((u32)bcm_atoi(token));
-	ANDROID_INFO(("TWT_SETUP val.desc.negotiation_type %d\n", val.desc.negotiation_type));
+	val.desc.negotiation_type  = htod32((u32)bcm_atoi(token));
 
-	if (pos != NULL) {
-		ANDROID_INFO(("TWT_SETUP string %s\n", pos));
-		while ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-			ANDROID_INFO(("TWT_SETUP token is %s\n", token));
+	/* Wake Duration */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("Mandatory param wake Duration not present\n"));
+		bw = -EINVAL;
+		goto exit;
+	}
+	val.desc.wake_dur = htod32((u32)bcm_atoi(token));
 
-			if (!strnicmp(token, "u", 1)) {
-				val.desc.flow_flags |= WL_TWT_FLOW_FLAG_UNANNOUNCED;
-			}
-			else if (!strnicmp(token, "t", 1)) {
-				val.desc.flow_flags |= WL_TWT_FLOW_FLAG_TRIGGER;
-			}
-			else if (!strnicmp(token, "n", 1)) {
-				val.desc.flow_flags |= WL_TWT_FLOW_FLAG_UNSOLICITED;
-			}
-			else if (!strnicmp(token, "p", 1)) {
-				token++;
-				val.desc.btwt_persistence = (int)simple_strtol(token, NULL, 0);
-				ANDROID_INFO(("TWT_SETUP broadcast persistence %d\n",
-					val.desc.btwt_persistence));
-			}
-			/* Wake Duration */
-			else if (!strnicmp(token, "-d", 2)) {
-				if ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-					val.desc.wake_dur = (int)simple_strtol(token, NULL, 0);
-					ANDROID_INFO(("TWT_SETUP val.desc.wake_dur %d\n",
-						val.desc.wake_dur));
-				}
-			}
-			/* Wake Interval */
-			else if (!strnicmp(token, "-i", 2)) {
-				if ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-					val.desc.wake_int = (int)simple_strtol(token, NULL, 0);
-					ANDROID_INFO(("TWT_SETUP val.desc.wake_int %d\n",
-						val.desc.wake_int));
-				}
-			}
-			/* flow id */
-			else if (!strnicmp(token, "-f", 2)) {
-				if ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-					val.desc.flow_id = (int)simple_strtol(token, NULL, 0);
-					ANDROID_INFO(("TWT_SETUP val.desc.flow_id %d\n",
-						val.desc.flow_id));
-				}
-			}
-			else if (!strnicmp(token, "-b", 2)) {
-				if ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-					val.desc.bid = (int)simple_strtol(token, NULL, 0);
-					ANDROID_INFO(("TWT_SETUP val.desc.bid %d\n", val.desc.bid));
-				}
-			}
-			else if (!strnicmp(token, "-r", 2)) {
-				if ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-					tmp = (int)simple_strtol(token, NULL, 0);
-					if (tmp > TWT_BCAST_FRAME_RECOMM_3) {
-						bw = -EINVAL;
-						goto exit;
-					}
-					val.desc.bid = tmp;
-					ANDROID_INFO(("TWT_SETUP frame recommendation %d\n",
-						val.desc.frame_recomm));
-				}
-			}
-			else if (!strnicmp(token, "-s", 2)) {
-				if ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-					val.desc.duty_cycle_min =
-						(int)simple_strtol(token, NULL, 0);
-					ANDROID_INFO(("TWT_SETUP duty_cycle_min %d\n",
-						val.desc.duty_cycle_min));
-				}
-			}
-			else if (!strnicmp(token, "-v", 2)) {
-				if ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-					val.desc.wake_int_max = (int)simple_strtol(token, NULL, 0);
-					ANDROID_INFO(("TWT_SETUP wake_int_max %d\n",
-						val.desc.wake_int_max));
-				}
-			}
-			/* a peer_address */
-			else if (!strnicmp(token, "-a", 2)) {
-				if ((token = bcmstrtok(&pos, " ", 0)) != NULL) {
-					if (!bcm_ether_atoe(token, &val.peer)) {
-						ANDROID_ERROR(("%s : Malformed peer addr\n",
-							__FUNCTION__));
-						bw = -EINVAL;
-						goto exit;
-					}
-				}
-			}
+	/* Wake interval */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("Mandaory param Wake Interval not present\n"));
+		bw = -EINVAL;
+		goto exit;
+	}
+	val.desc.wake_int = htod32((u32)bcm_atoi(token));
+
+	/* Wake Time parameter */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("No Wake Time parameter provided, using default\n"));
+	} else {
+		twt = (u64)bcm_atoi(token);
+		val32 = htod32((u32)(twt >> 32));
+		if ((val32 != -1) && ((int32)(htod32((u32)twt)) != -1)) {
+			val.desc.wake_time_h = htod32((u32)(twt >> 32));
+			val.desc.wake_time_l = htod32((u32)twt);
 		}
 	}
 
-	bw = bcm_pack_xtlv_entry(&rem, &rem_len, WL_TWT_CMD_SETUP,
+	/* Minimum allowed Wake interval */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("No Minimum allowed Wake interval provided, using default\n"));
+	} else {
+		val32 = htod32((u32)bcm_atoi(token));
+		if (val32 != -1) {
+			val.desc.wake_int_min = htod32((u32)bcm_atoi(token));
+		}
+	}
+
+	/* Max Allowed Wake interval */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("Maximum allowed Wake interval not provided, using default\n"));
+	} else {
+		val32 = htod32((u32)bcm_atoi(token));
+		if (val32 != -1) {
+			val.desc.wake_int_max = htod32((u32)bcm_atoi(token));
+		}
+	}
+
+	/* Minimum allowed Wake duration */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("Maximum allowed Wake duration not provided, using default\n"));
+	} else {
+		val32 = htod32((u32)bcm_atoi(token));
+		if (val32 != -1) {
+			val.desc.wake_dur_min = htod32((u32)bcm_atoi(token));
+		}
+	}
+
+	/* Maximum allowed Wake duration */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("Maximum allowed Wake duration not provided, using default\n"));
+	} else {
+		val32 = htod32((u32)bcm_atoi(token));
+		if (val32 != -1) {
+			val.desc.wake_dur_max = htod32((u32)bcm_atoi(token));
+		}
+	}
+
+	/* Average number of packets */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("Average number of packets not provided, using default\n"));
+	} else {
+		val32 = htod32((u32)bcm_atoi(token));
+		if (val32 != -1) {
+			val.desc.avg_pkt_num  = htod32((u32)bcm_atoi(token));
+		}
+	}
+
+	/* a peer_address */
+	token = strsep((char**)&pos, " ");
+	if (!token) {
+		ANDROID_ERROR(("Average number of packets not provided, using default\n"));
+	} else {
+		/* get peer mac */
+		if (!bcm_ether_atoe(token, &val.peer)) {
+			ANDROID_ERROR(("%s : Malformed peer addr\n", __FUNCTION__));
+			bw = BCME_ERROR;
+			goto exit;
+		}
+	}
+
+	bw = bcm_pack_xtlv_entry(&rem, &rem_len, WL_TWT_CMD_CONFIG,
 			sizeof(val), (uint8 *)&val, BCM_XTLV_OPTION_ALIGN32);
 	if (bw != BCME_OK) {
 		goto exit;
@@ -11341,7 +11300,7 @@
 	bw = wldev_iovar_setbuf(ndev, "twt",
 		mybuf, sizeof(mybuf) - rem_len, resp_buf, WLC_IOCTL_SMLEN, NULL);
 	if (bw < 0) {
-		ANDROID_ERROR(("twt setup failed. ret:%d\n", bw));
+		ANDROID_ERROR(("twt config set failed. ret:%d\n", bw));
 	}
 exit:
 	return bw;
@@ -11949,116 +11908,6 @@
 	}
 exit:
 	return bw;
-}
-
-/* wl twt stats result display version 2 */
-static int
-wl_android_twt_stats_display_v2(wl_twt_stats_v2_t *stats, char *command, int total_len)
-{
-	u32 i;
-	wl_twt_peer_stats_v2_t *peer_stats;
-	int rem_len = 0, bytes_written = 0;
-
-	rem_len = total_len;
-	for (i = 0; i < stats->num_stats; i++) {
-		peer_stats = &stats->peer_stats_list[i];
-
-		bytes_written = scnprintf(command, rem_len,
-			"%u %u %u %u %u",
-			peer_stats->eosp_dur_avg, peer_stats->tx_pkts_avg, peer_stats->rx_pkts_avg,
-			peer_stats->tx_pkt_sz_avg, peer_stats->rx_pkt_sz_avg);
-		CHECK_SCNPRINTF_RET_VAL(bytes_written);
-		command += bytes_written;
-		rem_len -= bytes_written;
-	}
-
-	if ((total_len - rem_len) > 0) {
-		return (total_len - rem_len);
-	} else {
-		return BCME_ERROR;
-	}
-}
-
-static int
-wl_android_twt_stats(struct net_device *ndev, char *command, int total_len)
-{
-	wl_twt_stats_cmd_v1_t query;
-	wl_twt_stats_v2_t stats_v2;
-	int ret = BCME_OK;
-	char iovbuf[WLC_IOCTL_SMLEN] = {0, };
-	uint8 *pxtlv = NULL;
-	uint8 *iovresp = NULL;
-	char *token, *pos;
-	uint16 buflen = 0, bufstart = 0;
-	struct bcm_cfg80211 *cfg = wl_get_cfg(ndev);
-
-	WL_DBG_MEM(("Enter. cmd:%s\n", command));
-
-	bzero(&query, sizeof(query));
-	query.version = WL_TWT_STATS_CMD_VERSION_1;
-	query.length = sizeof(query) - OFFSETOF(wl_twt_stats_cmd_v1_t, peer);
-
-	/* Default values, Overide Below */
-	query.num_bid = 0xFF;
-	query.num_fid = 0xFF;
-
-	if (!(strnicmp(command, CMD_TWT_CLR_STATS, strlen(CMD_TWT_CLR_STATS)))) {
-		query.flags |= WL_TWT_STATS_CMD_FLAGS_RESET;
-		pos = command + sizeof(CMD_TWT_CLR_STATS);
-	} else if (!(strnicmp(command, CMD_TWT_GET_STATS, strlen(CMD_TWT_GET_STATS)))) {
-		pos = command + sizeof(CMD_TWT_GET_STATS);
-	}
-
-	/* Config ID */
-	token = strsep((char**)&pos, " ");
-	if (!token) {
-		ANDROID_ERROR(("Mandatory param config ID not present\n"));
-		ret = -EINVAL;
-		goto exit;
-	}
-	query.configID = (u8)bcm_atoi(token);
-
-	iovresp = (uint8 *)MALLOCZ(cfg->osh, WLC_IOCTL_MEDLEN);
-	if (iovresp == NULL) {
-		ANDROID_ERROR(("%s: iov resp memory alloc exited\n", __FUNCTION__));
-		goto exit;
-	}
-
-	buflen = bufstart = WLC_IOCTL_SMLEN;
-	pxtlv = (uint8 *)iovbuf;
-	ret = bcm_pack_xtlv_entry(&pxtlv, &buflen, WL_TWT_CMD_STATS,
-			sizeof(query), (uint8 *)&query, BCM_XTLV_OPTION_ALIGN32);
-	if (ret != BCME_OK) {
-		ANDROID_ERROR(("%s : Error return during pack xtlv :%d\n", __FUNCTION__, ret));
-		goto exit;
-	}
-
-	if ((ret = wldev_iovar_getbuf(ndev, "twt", iovbuf, bufstart-buflen,
-		iovresp, WLC_IOCTL_MEDLEN, NULL))) {
-		ANDROID_ERROR(("twt status failed with err=%d \n", ret));
-		goto exit;
-	}
-
-	(void)memcpy_s(&stats_v2, sizeof(stats_v2), iovresp, sizeof(stats_v2));
-
-	if (dtoh16(stats_v2.version) == WL_TWT_STATS_VERSION_2) {
-		if (!(strnicmp(command, CMD_TWT_GET_STATS, strlen(CMD_TWT_GET_STATS)))) {
-			ANDROID_ERROR(("stats query ver %d, \n", dtoh16(stats_v2.version)));
-			ret = wl_android_twt_stats_display_v2((wl_twt_stats_v2_t*)iovresp,
-				command, total_len);
-		}
-	} else {
-		ret = BCME_UNSUPPORTED;
-		ANDROID_ERROR(("Version 1 unsupported. ver %d, \n", dtoh16(stats_v2.version)));
-		goto exit;
-	}
-
-exit:
-	if (iovresp) {
-		MFREE(cfg->osh, iovresp, WLC_IOCTL_MEDLEN);
-	}
-
-	return ret;
 }
 #endif /* WL_TWT */
 
@@ -13026,10 +12875,6 @@
 	}
 	else if (strnicmp(command, CMD_TWT_CAPABILITY, strlen(CMD_TWT_CAPABILITY)) == 0) {
 		bytes_written = wl_android_twt_cap(net, command, priv_cmd.total_len);
-	}
-	else if ((strnicmp(command, CMD_TWT_GET_STATS, strlen(CMD_TWT_GET_STATS)) == 0) ||
-		(strnicmp(command, CMD_TWT_CLR_STATS, strlen(CMD_TWT_CLR_STATS)) == 0)) {
-		bytes_written = wl_android_twt_stats(net, command, priv_cmd.total_len);
 	}
 #endif /* WL_TWT */
 #ifdef WL_P2P_6G

--
Gitblit v1.6.2