From a90c24ae2b7558eac18cf92fee6cfaf480233ec2 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 28/28] hostapd: mtk: 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             |  4 ++--
 src/common/mtk_vendor.h      |  7 +++++++
 src/drivers/driver.h         |  4 ++--
 src/drivers/driver_nl80211.c | 37 ++++++++++++++++++++++++++++--------
 7 files changed, 55 insertions(+), 16 deletions(-)

diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index 06d8345..2d99647 100644
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
@@ -3441,6 +3441,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)
@@ -3547,6 +3549,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)
@@ -3564,13 +3568,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 0052a6d..d5c7b15 100644
--- a/src/ap/ap_drv_ops.c
+++ b/src/ap/ap_drv_ops.c
@@ -1079,11 +1079,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 9d5a23b..82283e6 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 05ddb6f..9bd81d3 100644
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -55,7 +55,7 @@
 #include "hs20.h"
 #include "airtime_policy.h"
 #include "wpa_auth_kay.h"
-
+#include "common/mtk_vendor.h"
 
 static int hostapd_flush_old_stations(struct hostapd_data *hapd, u16 reason);
 #ifdef CONFIG_WEP
@@ -2398,7 +2398,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 74f467c..7dd2fc4 100644
--- a/src/common/mtk_vendor.h
+++ b/src/common/mtk_vendor.h
@@ -197,6 +197,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,
@@ -270,4 +272,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 cb885f9..6cd4dc9 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -5017,11 +5017,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 088f625..8400e57 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -13295,13 +13295,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,
@@ -13312,17 +13312,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;
 }
 
 
@@ -14454,7 +14475,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

