From 906bc021d4e4ddd62edc985dd37d7ad61d39fdb7 Mon Sep 17 00:00:00 2001
From: Evelyn Tsai <evelyn.tsai@mediatek.com>
Date: Fri, 12 May 2023 05:24:19 +0800
Subject: [PATCH 24/54] mtk: hostapd: Add muru user number debug command

---
 hostapd/ctrl_iface.c         | 13 ++++++++++++-
 src/ap/ap_drv_ops.c          |  4 ++--
 src/ap/ap_drv_ops.h          |  2 +-
 src/ap/hostapd.c             |  3 ++-
 src/common/mtk_vendor.h      |  7 +++++++
 src/drivers/driver.h         |  4 ++--
 src/drivers/driver_nl80211.c | 37 ++++++++++++++++++++++++++++--------
 7 files changed, 55 insertions(+), 15 deletions(-)

diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index ab2768e76..4515583cf 100644
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
@@ -3398,6 +3398,8 @@ hostapd_ctrl_iface_set_edcca(struct hostapd_data *hapd, char *cmd,
 					 char *buf, size_t buflen)
 {
 	char *pos, *config, *value;
+	u8 mode;
+
 	config = cmd;
 	pos = os_strchr(config, ' ');
 	if (pos == NULL)
@@ -3504,6 +3506,8 @@ hostapd_ctrl_iface_set_mu(struct hostapd_data *hapd, char *cmd,
 					 char *buf, size_t buflen)
 {
 	char *pos, *config, *value;
+	u8 mode;
+
 	config = cmd;
 	pos = os_strchr(config, ' ');
 	if (pos == NULL)
@@ -3521,13 +3525,20 @@ hostapd_ctrl_iface_set_mu(struct hostapd_data *hapd, char *cmd,
 			return -1;
 		}
 		hapd->iconf->mu_onoff = (u8) mu;
+		mode = MU_CTRL_ONOFF;
+	} else if (os_strcmp(config, "ul_user_cnt") == 0) {
+		mode = MU_CTRL_UL_USER_CNT;
+		wpa_printf(MSG_ERROR, "ul_user_cnt:%d\n", (u8)atoi(value));
+	} else if (os_strcmp(config, "dl_user_cnt") == 0) {
+		mode = MU_CTRL_DL_USER_CNT;
+		wpa_printf(MSG_ERROR, "dl_user_cnt:%d\n", (u8)atoi(value));
 	} else {
 		wpa_printf(MSG_ERROR,
 			"Unsupported parameter %s for SET_MU", config);
 		return -1;
 	}
 
-	if(hostapd_drv_mu_ctrl(hapd) == 0) {
+	if(hostapd_drv_mu_ctrl(hapd, mode, (u8)atoi(value)) == 0) {
 		return os_snprintf(buf, buflen, "OK\n");
 	} else {
 		return -1;
diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c
index b90dd5722..0aec9e925 100644
--- a/src/ap/ap_drv_ops.c
+++ b/src/ap/ap_drv_ops.c
@@ -1162,11 +1162,11 @@ int hostapd_drv_get_edcca(struct hostapd_data *hapd, const u8 mode, u8 *value)
 	return hapd->driver->get_edcca(hapd->drv_priv, mode, value);
 }
 
-int hostapd_drv_mu_ctrl(struct hostapd_data *hapd)
+int hostapd_drv_mu_ctrl(struct hostapd_data *hapd, u8 mode, u8 val)
 {
 	if (!hapd->driver || !hapd->driver->mu_ctrl)
 		return 0;
-	return hapd->driver->mu_ctrl(hapd->drv_priv, hapd->iconf->mu_onoff);
+	return hapd->driver->mu_ctrl(hapd->drv_priv, mode, val);
 }
 
 int hostapd_drv_mu_dump(struct hostapd_data *hapd, u8 *mu_onoff)
diff --git a/src/ap/ap_drv_ops.h b/src/ap/ap_drv_ops.h
index 8a97e0fea..464efbae1 100644
--- a/src/ap/ap_drv_ops.h
+++ b/src/ap/ap_drv_ops.h
@@ -148,7 +148,7 @@ int hostapd_drv_configure_edcca_enable(struct hostapd_data *hapd);
 int hostapd_drv_configure_edcca_threshold(struct hostapd_data *hapd,
 					  const int *threshold);
 int hostapd_drv_get_edcca(struct hostapd_data *hapd, const u8 mode, u8 *value);
-int hostapd_drv_mu_ctrl(struct hostapd_data *hapd);
+int hostapd_drv_mu_ctrl(struct hostapd_data *hapd, u8 mode, u8 val);
 int hostapd_drv_mu_dump(struct hostapd_data *hapd, u8 *mu_onoff);
 int hostapd_drv_three_wire_ctrl(struct hostapd_data *hapd);
 int hostapd_drv_ibf_ctrl(struct hostapd_data *hapd);
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index fcf346d36..2d7fb6d39 100644
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -57,6 +57,7 @@
 #include "wpa_auth_kay.h"
 #include "hw_features.h"
 
+#include "common/mtk_vendor.h"
 
 static int hostapd_flush_old_stations(struct hostapd_data *hapd, u16 reason);
 #ifdef CONFIG_WEP
@@ -2517,7 +2518,7 @@ dfs_offload:
 	if (hostapd_drv_configure_edcca_threshold(hapd,
 						  hapd->iconf->edcca_threshold) < 0)
 		goto fail;
-	if (hostapd_drv_mu_ctrl(hapd) < 0)
+	if (hostapd_drv_mu_ctrl(hapd, MU_CTRL_ONOFF, hapd->iconf->mu_onoff) < 0)
 		goto fail;
 	if (hostapd_drv_three_wire_ctrl(hapd) < 0)
 		goto fail;
diff --git a/src/common/mtk_vendor.h b/src/common/mtk_vendor.h
index dd1ca2164..99371bf73 100644
--- a/src/common/mtk_vendor.h
+++ b/src/common/mtk_vendor.h
@@ -199,6 +199,8 @@ enum mtk_vendor_attr_mu_ctrl {
 
 	MTK_VENDOR_ATTR_MU_CTRL_ONOFF,
 	MTK_VENDOR_ATTR_MU_CTRL_DUMP,
+	MTK_VENDOR_ATTR_MU_CTRL_OFDMA_MODE,
+	MTK_VENDOR_ATTR_MU_CTRL_OFDMA_VAL,
 
 	/* keep last */
 	NUM_MTK_VENDOR_ATTRS_MU_CTRL,
@@ -272,4 +274,9 @@ struct amnt_resp_data {
 	struct amnt_data resp_data[0];
 };
 
+enum {
+	MU_CTRL_ONOFF,
+	MU_CTRL_DL_USER_CNT,
+	MU_CTRL_UL_USER_CNT,
+};
 #endif /* MTK_VENDOR_H */
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 24c9b96df..83d347338 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -5121,11 +5121,11 @@ struct wpa_driver_ops {
 	int (*get_edcca)(void *priv, const u8 mode, u8 *value);
 
 	/**
-	 * mu_ctrl - ctrl on off for UL/DL MURU
+	 * mu_ctrl - ctrl for UL/DL MURU
 	 * @priv: Private driver interface data
 	 *
 	 */
-	 int (*mu_ctrl)(void *priv, u8 mu_onoff);
+	 int (*mu_ctrl)(void *priv, u8 mode, u8 val);
 	 int (*mu_dump)(void *priv, u8 *mu_onoff);
 
 	/**
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 3a1c32a6d..8226bebc4 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -13698,13 +13698,13 @@ fail:
 
 
 #ifdef CONFIG_IEEE80211AX
-static int nl80211_mu_onoff(void *priv, u8 mu_onoff)
+static int nl80211_mu_ctrl(void *priv, u8 mode, u8 val)
 {
 	struct i802_bss *bss = priv;
 	struct wpa_driver_nl80211_data *drv = bss->drv;
 	struct nl_msg *msg;
 	struct nlattr *data;
-	int ret;
+	int ret = -ENOBUFS;
 
 	if (!drv->mtk_mu_vendor_cmd_avail) {
 		wpa_printf(MSG_INFO,
@@ -13715,17 +13715,38 @@ static int nl80211_mu_onoff(void *priv, u8 mu_onoff)
 	if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) ||
 		nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_MTK) ||
 		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_MU_CTRL) ||
-		!(data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA)) ||
-		nla_put_u8(msg, MTK_VENDOR_ATTR_MU_CTRL_ONOFF, mu_onoff)) {
-		nlmsg_free(msg);
-		return -ENOBUFS;
+		!(data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA)))
+		goto fail;
+
+	switch (mode) {
+	case MU_CTRL_ONOFF:
+			if (nla_put_u8(msg, MTK_VENDOR_ATTR_MU_CTRL_ONOFF, val))
+				goto fail;
+		break;
+	case MU_CTRL_UL_USER_CNT:
+	case MU_CTRL_DL_USER_CNT:
+			if (nla_put_u8(msg, MTK_VENDOR_ATTR_MU_CTRL_OFDMA_MODE, mode) ||
+			    nla_put_u8(msg, MTK_VENDOR_ATTR_MU_CTRL_OFDMA_VAL, val))
+				goto fail;
+		break;
+	default:
+		wpa_printf(MSG_ERROR, "nl80211: Wrong mu mode !");
+		ret = -EINVAL;
+		goto fail;
 	}
+
 	nla_nest_end(msg, data);
+
 	ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL);
 	if(ret){
-		wpa_printf(MSG_ERROR, "Failed to set mu_onoff. ret=%d (%s)", ret, strerror(-ret));
+		wpa_printf(MSG_ERROR, "Failed to set mu_ctrl. ret=%d (%s)", ret, strerror(-ret));
 	}
 	return ret;
+
+fail:
+	nl80211_nlmsg_clear(msg);
+	nlmsg_free(msg);
+	return ret;
 }
 
 
@@ -14869,7 +14890,7 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
 	.update_connect_params = nl80211_update_connection_params,
 	.send_external_auth_status = nl80211_send_external_auth_status,
 	.set_4addr_mode = nl80211_set_4addr_mode,
-	.mu_ctrl = nl80211_mu_onoff,
+	.mu_ctrl = nl80211_mu_ctrl,
 	.mu_dump = nl80211_mu_dump,
 #ifdef CONFIG_DPP
 	.dpp_listen = nl80211_dpp_listen,
-- 
2.18.0

