From 934c90729e00901fe6785727dc9004315725b587 Mon Sep 17 00:00:00 2001
From: Evelyn Tsai <evelyn.tsai@mediatek.com>
Date: Fri, 17 Mar 2023 16:17:14 +0800
Subject: [PATCH 23/28] hostapd: mtk: Add vendor for CAPI certification
 commands

---
 hostapd/ctrl_iface.c              | 95 +++++++++++++++++++++++++++++++
 src/ap/ap_drv_ops.c               | 21 +++++++
 src/ap/ap_drv_ops.h               |  3 +
 src/common/mtk_vendor.h           | 32 +----------
 src/drivers/driver.h              | 22 +++++++
 src/drivers/driver_nl80211.c      | 54 ++++++++++++++++++
 src/drivers/driver_nl80211.h      |  1 +
 src/drivers/driver_nl80211_capa.c |  3 +
 8 files changed, 201 insertions(+), 30 deletions(-)

diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index da6e727..79457d7 100644
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
@@ -70,6 +70,7 @@
 #include "ctrl_iface.h"
 #include "config_file.h"
 
+#include "common/mtk_vendor.h"
 
 #define HOSTAPD_CLI_DUP_VALUE_MAX_LEN 256
 
@@ -3801,6 +3802,96 @@ hostapd_ctrl_iface_get_aval_color_bmp(struct hostapd_data *hapd, char *buf,
 	return pos - buf;
 }
 
+static int
+hostapd_ctrl_iface_ap_wireless(struct hostapd_data *hapd, char *cmd,
+					 char *buf, size_t buflen)
+{
+	char *pos, *value, *config = cmd;
+	enum mtk_vendor_attr_wireless_ctrl sub_cmd;
+
+	pos = os_strchr(config, '=');
+	if (pos == NULL)
+		return -1;
+	*pos++ = '\0';
+
+	if(pos == NULL)
+		return -1;
+	value = pos;
+
+	if (os_strncmp(config, "fixed_mcs", 9) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_MCS;
+	else if (os_strncmp(config, "ofdma", 5) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_OFDMA;
+	else if (os_strncmp(config, "ppdu_type", 9) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_PPDU_TX_TYPE;
+	else if (os_strncmp(config, "nusers_ofdma", 12) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_NUSERS_OFDMA;
+	else if (os_strncmp(config, "add_ba_req_bufsize", 18) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE;
+	else if (os_strncmp(config, "mimo", 4) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO;
+	else if (os_strncmp(config, "cert", 4) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT ;
+	else {
+		wpa_printf(MSG_ERROR,
+			"Unsupported parameter %s for ap_wireless", config);
+		return -1;
+	}
+
+	if (hostapd_drv_ap_wireless(hapd, (u8) sub_cmd, atoi(value)) != 0)
+		return -1;
+
+	return os_snprintf(buf, buflen, "OK\n");
+}
+
+static int
+hostapd_ctrl_iface_ap_rfeatures(struct hostapd_data *hapd, char *cmd,
+					 char *buf, size_t buflen)
+{
+	char *pos, *value, *type, *config = cmd;
+	enum mtk_vendor_attr_rfeature_ctrl sub_cmd;
+
+	pos = os_strchr(config, '=');
+	if (pos == NULL)
+		return -1;
+	*pos++ = '\0';
+
+	if(pos == NULL)
+		return -1;
+	value = pos;
+
+	if (os_strncmp(config, "he_gi", 5) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI;
+	else if (os_strncmp(config, "he_ltf", 6) == 0)
+		sub_cmd = MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_LTF;
+	else if (os_strncmp(config, "trig_type", 9) == 0) {
+		pos = os_strchr(value, ',');
+		if (pos == NULL)
+			return -1;
+		*pos++ = '\0';
+		if(pos == NULL)
+			return -1;
+		type = pos;
+		goto trigtype;
+	} else if (os_strcmp(config, "ack_policy") == 0)
+		sub_cmd = MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY;
+	else {
+		wpa_printf(MSG_ERROR,
+			"Unsupported parameter %s for ap_rfeatures", config);
+		return -1;
+	}
+
+	if (hostapd_drv_ap_rfeatures(hapd, (u8) sub_cmd, atoi(value)) != 0)
+		return -1;
+	goto exit;
+
+trigtype:
+	if (hostapd_drv_ap_trig_type(hapd, atoi(value), atoi(type)) != 0)
+		return -1;
+
+exit:
+	return os_snprintf(buf, buflen, "OK\n");
+}
 
 static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
 					      char *buf, char *reply,
@@ -4381,6 +4472,10 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
 		reply_len = hostapd_ctrl_iface_get_bss_color(hapd, reply, reply_size);
 	} else if (os_strncmp(buf, "AVAL_COLOR_BMP", 14) == 0) {
 		reply_len = hostapd_ctrl_iface_get_aval_color_bmp(hapd, reply, reply_size);
+	} else if (os_strncmp(buf, "ap_wireless ", 12) == 0) {
+		reply_len = hostapd_ctrl_iface_ap_wireless(hapd, buf + 12, reply, reply_size);
+	} else if (os_strncmp(buf, "ap_rfeatures ", 13) == 0) {
+		reply_len = hostapd_ctrl_iface_ap_rfeatures(hapd, buf + 13, reply, reply_size);
 	} else {
 		os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
 		reply_len = 16;
diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c
index 7b686e5..78b52c8 100644
--- a/src/ap/ap_drv_ops.c
+++ b/src/ap/ap_drv_ops.c
@@ -1139,3 +1139,24 @@ int hostapd_drv_get_aval_bss_color_bmp(struct hostapd_data *hapd, u64 *aval_colo
 		return 0;
 	return hapd->driver->get_aval_color_bmp(hapd->drv_priv, aval_color_bmp);
 }
+
+int hostapd_drv_ap_wireless(struct hostapd_data *hapd, u8 sub_vendor_id, int value)
+{
+	if (!hapd->driver || !hapd->driver->ap_wireless)
+		return 0;
+	return hapd->driver->ap_wireless(hapd->drv_priv, sub_vendor_id, value);
+}
+
+int hostapd_drv_ap_rfeatures(struct hostapd_data *hapd, u8 sub_vendor_id, int value)
+{
+	if (!hapd->driver || !hapd->driver->ap_rfeatures)
+		return 0;
+	return hapd->driver->ap_rfeatures(hapd->drv_priv, sub_vendor_id, value);
+}
+
+int hostapd_drv_ap_trig_type(struct hostapd_data *hapd, u8 enable, u8 type)
+{
+	if (!hapd->driver || !hapd->driver->ap_trigtype)
+		return 0;
+	return hapd->driver->ap_trigtype(hapd->drv_priv, enable, type);
+}
diff --git a/src/ap/ap_drv_ops.h b/src/ap/ap_drv_ops.h
index 47356ab..bb9fdf7 100644
--- a/src/ap/ap_drv_ops.h
+++ b/src/ap/ap_drv_ops.h
@@ -157,6 +157,9 @@ int hostapd_drv_amsdu_ctrl(struct hostapd_data *hapd);
 int hostapd_drv_amsdu_dump(struct hostapd_data *hapd, u8 *amsdu);
 int hostapd_drv_get_aval_bss_color_bmp(struct hostapd_data *hapd,
 				       u64 *aval_color_bmp);
+int hostapd_drv_ap_wireless(struct hostapd_data *hapd, u8 sub_vendor_id, int value);
+int hostapd_drv_ap_rfeatures(struct hostapd_data *hapd, u8 sub_vendor_id, int value);
+int hostapd_drv_ap_trig_type(struct hostapd_data *hapd, u8 enable, u8 type);
 
 #include "drivers/driver.h"
 
diff --git a/src/common/mtk_vendor.h b/src/common/mtk_vendor.h
index a99e6f2..32438af 100644
--- a/src/common/mtk_vendor.h
+++ b/src/common/mtk_vendor.h
@@ -48,16 +48,6 @@ enum mtk_vendor_attr_edcca_dump {
 		NUM_MTK_VENDOR_ATTRS_EDCCA_DUMP - 1
 };
 
-
-static struct nla_policy edcca_ctrl_policy[NUM_MTK_VENDOR_ATTRS_EDCCA_CTRL] = {
-	[MTK_VENDOR_ATTR_EDCCA_CTRL_MODE] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_EDCCA_CTRL_PRI20_VAL] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_EDCCA_CTRL_SEC20_VAL] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_EDCCA_CTRL_SEC40_VAL] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_EDCCA_CTRL_SEC80_VAL] = { .type = NLA_U8 },
-	[MTK_VENDOR_ATTR_EDCCA_CTRL_COMPENSATE] = { .type = NLA_U8 },
-};
-
 enum mtk_vendor_attr_3wire_ctrl {
 	MTK_VENDOR_ATTR_3WIRE_CTRL_UNSPEC,
 
@@ -69,10 +59,6 @@ enum mtk_vendor_attr_3wire_ctrl {
 		NUM_MTK_VENDOR_ATTRS_3WIRE_CTRL - 1
 };
 
-static struct nla_policy three_wire_ctrl_policy[NUM_MTK_VENDOR_ATTRS_3WIRE_CTRL] = {
-	[MTK_VENDOR_ATTR_3WIRE_CTRL_MODE] = {.type = NLA_U8 },
-};
-
 enum mtk_vendor_attr_csi_ctrl {
 	MTK_VENDOR_ATTR_CSI_CTRL_UNSPEC,
 
@@ -169,7 +155,7 @@ enum mtk_vendor_attr_wireless_ctrl {
 	MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE,
 	MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO,
 	MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU,
-	MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT,
+	MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT = 9,
 	MTK_VENDOR_ATTR_WIRELESS_CTRL_RTS_SIGTA,
 
 	/* keep last */
@@ -189,11 +175,6 @@ enum mtk_vendor_attr_wireless_dump {
 		NUM_MTK_VENDOR_ATTRS_WIRELESS_DUMP - 1
 };
 
-static const struct nla_policy
-wireless_dump_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_DUMP] = {
-	[MTK_VENDOR_ATTR_WIRELESS_DUMP_AMSDU] = { .type = NLA_U8 },
-};
-
 enum mtk_vendor_attr_rfeature_ctrl {
 	MTK_VENDOR_ATTR_RFEATURE_CTRL_UNSPEC,
 
@@ -203,6 +184,7 @@ enum mtk_vendor_attr_rfeature_ctrl {
 	MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_EN,
 	MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE,
 	MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY,
+	MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TXBF,
 
 	/* keep last */
 	NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL,
@@ -244,16 +226,6 @@ enum mtk_vendor_attr_ibf_dump {
 		NUM_MTK_VENDOR_ATTRS_IBF_DUMP - 1
 };
 
-static struct nla_policy
-ibf_ctrl_policy[NUM_MTK_VENDOR_ATTRS_IBF_CTRL] = {
-	[MTK_VENDOR_ATTR_IBF_CTRL_ENABLE] = { .type = NLA_U8 },
-};
-
-static struct nla_policy
-ibf_dump_policy[NUM_MTK_VENDOR_ATTRS_IBF_DUMP] = {
-	[MTK_VENDOR_ATTR_IBF_DUMP_ENABLE] = { .type = NLA_U8 },
-};
-
 enum mtk_vendor_attr_bss_color_ctrl {
 	MTK_VENDOR_ATTR_BSS_COLOR_CTRL_UNSPEC,
 
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index f9f9fb5..ae692c2 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -5062,6 +5062,28 @@ struct wpa_driver_ops {
 	 *
 	 */
 	int (*get_aval_color_bmp)(void *priv, u64 *aval_color_bmp);
+
+	/**
+	* ap_wireless - set wireless command
+	* @priv: Private driver interface data
+	* @value: value
+	*/
+	int (*ap_wireless)(void *priv, u8 mode, int value);
+
+	/**
+	* ap_rfeatures - set ap rf features command
+	* @priv: Private driver interface data
+	* @value: value
+	*/
+	int (*ap_rfeatures)(void *priv, u8 mode, int value);
+
+	/**
+	* ap_trigtype - set trigger type
+	* @priv: Private driver interface data
+	* @enable: enable or disable
+	* @type: trigger type
+	*/
+	int (*ap_trigtype)(void *priv, u8 enable, u8 type);
 };
 
 /**
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 18a5647..730a696 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -76,6 +76,57 @@ enum nlmsgerr_attrs {
 #endif /* ANDROID */
 
 
+static struct nla_policy
+ibf_ctrl_policy[NUM_MTK_VENDOR_ATTRS_IBF_CTRL] = {
+	[MTK_VENDOR_ATTR_IBF_CTRL_ENABLE] = { .type = NLA_U8 },
+};
+
+static struct nla_policy
+ibf_dump_policy[NUM_MTK_VENDOR_ATTRS_IBF_DUMP] = {
+	[MTK_VENDOR_ATTR_IBF_DUMP_ENABLE] = { .type = NLA_U8 },
+};
+
+static struct nla_policy three_wire_ctrl_policy[NUM_MTK_VENDOR_ATTRS_3WIRE_CTRL] = {
+	[MTK_VENDOR_ATTR_3WIRE_CTRL_MODE] = {.type = NLA_U8 },
+};
+
+static struct nla_policy edcca_ctrl_policy[NUM_MTK_VENDOR_ATTRS_EDCCA_CTRL] = {
+	[MTK_VENDOR_ATTR_EDCCA_CTRL_MODE] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_EDCCA_CTRL_PRI20_VAL] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_EDCCA_CTRL_SEC20_VAL] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_EDCCA_CTRL_SEC40_VAL] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_EDCCA_CTRL_SEC80_VAL] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_EDCCA_CTRL_COMPENSATE] = { .type = NLA_U8 },
+};
+
+static const struct nla_policy
+wireless_dump_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_DUMP] = {
+	[MTK_VENDOR_ATTR_WIRELESS_DUMP_AMSDU] = { .type = NLA_U8 },
+};
+
+static const struct nla_policy
+rfeature_ctrl_policy[NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL] = {
+	[MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI] = {.type = NLA_U8 },
+	[MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_LTF] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_CFG] = { .type = NLA_NESTED },
+	[MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_EN] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY] = { .type = NLA_U8 },
+	[MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TXBF] = { .type = NLA_U8 },
+};
+
+static const struct nla_policy
+wireless_ctrl_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL] = {
+	[MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_MCS] = {.type = NLA_U8 },
+	[MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_OFDMA] = {.type = NLA_U8 },
+	[MTK_VENDOR_ATTR_WIRELESS_CTRL_PPDU_TX_TYPE] = {.type = NLA_U8 },
+	[MTK_VENDOR_ATTR_WIRELESS_CTRL_NUSERS_OFDMA] = {.type = NLA_U8 },
+	[MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO] = {.type = NLA_U8 },
+	[MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE] = {.type = NLA_U16 },
+	[MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU] = {.type = NLA_U8 },
+	[MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT] = {.type = NLA_U8 },
+};
+
 static struct nl_sock * nl_create_handle(struct nl_cb *cb, const char *dbg)
 {
 	struct nl_sock *handle;
@@ -14246,4 +14297,7 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
 	.amsdu_ctrl = nl80211_enable_amsdu,
 	.amsdu_dump = nl80211_dump_amsdu,
 	.get_aval_color_bmp = nl80211_get_aval_color_bmp,
+	.ap_wireless = nl80211_ap_wireless,
+	.ap_rfeatures = nl80211_ap_rfeatures,
+	.ap_trigtype = nl80211_ap_trigtype,
 };
diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h
index 190e7a5..49588e6 100644
--- a/src/drivers/driver_nl80211.h
+++ b/src/drivers/driver_nl80211.h
@@ -205,6 +205,7 @@ struct wpa_driver_nl80211_data {
 	unsigned int mtk_ibf_vendor_cmd_avail:1;
 	unsigned int mtk_wireless_vendor_cmd_avail:1;
 	unsigned int mtk_bss_color_vendor_cmd_avail:1;
+	unsigned int mtk_rfeatures_vendor_cmd_avail:1;
 
 	u64 vendor_scan_cookie;
 	u64 remain_on_chan_cookie;
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index a266926..0674b66 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -1120,6 +1120,9 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)
 				case MTK_NL80211_VENDOR_SUBCMD_BSS_COLOR_CTRL :
 					drv->mtk_bss_color_vendor_cmd_avail = 1;
 					break;
+				case MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL:
+					drv->mtk_rfeatures_vendor_cmd_avail = 1;
+					break;
 				}
 			}
 
-- 
2.18.0

