From e80a9ee61fc2f7a2e9de1cae3b81ee7be0e8a80b Mon Sep 17 00:00:00 2001
From: mtk27835 <shurong.wen@mediatek.com>
Date: Wed, 7 Sep 2022 14:41:51 -0700
Subject: [PATCH 99916/99920] Add hostapd iBF control

Signed-off-by: mtk27835 <shurong.wen@mediatek.com>
---
 hostapd/config_file.c             |   3 +
 hostapd/ctrl_iface.c              |  26 +++++++
 hostapd/hostapd_cli.c             |   9 +++
 src/ap/ap_config.c                |   1 +
 src/ap/ap_config.h                |   2 +
 src/ap/ap_drv_ops.c               |  14 ++++
 src/ap/ap_drv_ops.h               |   2 +
 src/ap/hostapd.c                  |   2 +
 src/common/mtk_vendor.h           |  35 +++++++++-
 src/drivers/driver.h              |  19 ++++++
 src/drivers/driver_nl80211.c      | 108 ++++++++++++++++++++++++++++++
 src/drivers/driver_nl80211.h      |   1 +
 src/drivers/driver_nl80211_capa.c |   3 +
 13 files changed, 224 insertions(+), 1 deletion(-)

diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 0bf8b6c..9b79be1 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -4786,6 +4786,9 @@ static int hostapd_config_fill(struct hostapd_config *conf,
 		u8 en = atoi(pos);
 
 		conf->three_wire_enable = en;
+	} else if (os_strcmp(buf, "ibf_enable") == 0) { /*ibf setting is per device*/
+		int val = atoi(pos);
+		conf->ibf_enable = !!val;
 	} else {
 		wpa_printf(MSG_ERROR,
 			   "Line %d: unknown configuration item '%s'",
diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index 60c1fb4..a010e7f 100644
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
@@ -3471,6 +3471,30 @@ hostapd_ctrl_iface_get_hemu(struct hostapd_data *hapd, char *buf,
 }
 
 
+static int
+hostapd_ctrl_iface_get_ibf(struct hostapd_data *hapd, char *buf,
+					 size_t buflen)
+{
+	u8 ibf_enable;
+	int ret;
+	char *pos, *end;
+
+	pos = buf;
+	end = buf + buflen;
+
+	if (hostapd_drv_ibf_dump(hapd, &ibf_enable) == 0) {
+		hapd->iconf->ibf_enable = ibf_enable;
+		ret = os_snprintf(pos, end - pos, "ibf_enable: %u\n",
+			  ibf_enable);
+	}
+
+	if (os_snprintf_error(end - pos, ret))
+		return 0;
+
+	return ret;
+}
+
+
 static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
 					      char *buf, char *reply,
 					      int reply_size,
@@ -4029,6 +4053,8 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
 							  reply_size);
 	} else if (os_strncmp(buf, "GET_HEMU", 8) == 0) {
 		reply_len = hostapd_ctrl_iface_get_hemu(hapd, reply, reply_size);
+	} else if (os_strncmp(buf, "GET_IBF", 7) == 0) {
+		reply_len = hostapd_ctrl_iface_get_ibf(hapd, reply, reply_size);
 	} else {
 		os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
 		reply_len = 16;
diff --git a/hostapd/hostapd_cli.c b/hostapd/hostapd_cli.c
index 0d36477..c2a123a 100644
--- a/hostapd/hostapd_cli.c
+++ b/hostapd/hostapd_cli.c
@@ -1586,6 +1586,13 @@ static int hostapd_cli_cmd_driver(struct wpa_ctrl *ctrl, int argc, char *argv[])
 #endif /* ANDROID */
 
 
+static int hostapd_cli_cmd_get_ibf(struct wpa_ctrl *ctrl, int argc,
+					   char *argv[])
+{
+	return hostapd_cli_cmd(ctrl, "GET_IBF", 0, NULL, NULL);
+}
+
+
 struct hostapd_cli_cmd {
 	const char *cmd;
 	int (*handler)(struct wpa_ctrl *ctrl, int argc, char *argv[]);
@@ -1787,6 +1794,8 @@ static const struct hostapd_cli_cmd hostapd_cli_commands[] = {
 #endif /* ANDROID */
 	{ "inband_discovery", hostapd_cli_cmd_inband_discovery, NULL,
           "<tx type(0/1/2)> <interval> = runtime set inband discovery" },
+	{ "get_ibf", hostapd_cli_cmd_get_ibf, NULL,
+	  " = show iBF state (enabled/disabled)"},
 	{ NULL, NULL, NULL, NULL }
 };
 
diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c
index 2d72009..14b21cb 100644
--- a/src/ap/ap_config.c
+++ b/src/ap/ap_config.c
@@ -298,6 +298,7 @@ struct hostapd_config * hostapd_config_defaults(void)
 	conf->edcca_enable = EDCCA_MODE_AUTO;
 	conf->edcca_compensation = EDCCA_DEFAULT_COMPENSATION;
 	conf->three_wire_enable = THREE_WIRE_MODE_DISABLE;
+	conf->ibf_enable = IBF_DEFAULT_ENABLE;
 
 	return conf;
 }
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index 8b9e887..2a74e09 100644
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -1157,6 +1157,7 @@ struct hostapd_config {
 	u8 edcca_enable;
 	s8 edcca_compensation;
 	u8 three_wire_enable;
+	u8 ibf_enable;
 };
 
 enum three_wire_mode {
@@ -1179,6 +1180,7 @@ enum edcca_mode {
 #define EDCCA_DEFAULT_COMPENSATION -6
 #define EDCCA_MIN_COMPENSATION -126
 #define EDCCA_MAX_COMPENSATION 126
+#define IBF_DEFAULT_ENABLE 0
 
 static inline enum oper_chan_width
 hostapd_get_oper_chwidth(struct hostapd_config *conf)
diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c
index 77d5f89..0b9b410 100644
--- a/src/ap/ap_drv_ops.c
+++ b/src/ap/ap_drv_ops.c
@@ -1049,3 +1049,17 @@ int hostapd_drv_three_wire_ctrl(struct hostapd_data *hapd)
 	}
 	return hapd->driver->three_wire_ctrl(hapd->drv_priv, hapd->iconf->three_wire_enable);
 }
+
+int hostapd_drv_ibf_ctrl(struct hostapd_data *hapd)
+{
+	if (!hapd->driver || !hapd->driver->ibf_ctrl)
+		return 0;
+	return hapd->driver->ibf_ctrl(hapd->drv_priv, hapd->iconf->ibf_enable);
+}
+
+int hostapd_drv_ibf_dump(struct hostapd_data *hapd, u8 *ibf_enable)
+{
+	if (!hapd->driver || !hapd->driver->ibf_dump)
+		return 0;
+	return hapd->driver->ibf_dump(hapd->drv_priv, ibf_enable);
+}
\ No newline at end of file
diff --git a/src/ap/ap_drv_ops.h b/src/ap/ap_drv_ops.h
index 0a8bf0c..da82382 100644
--- a/src/ap/ap_drv_ops.h
+++ b/src/ap/ap_drv_ops.h
@@ -142,6 +142,8 @@ int hostapd_drv_configure_edcca_threshold(struct hostapd_data *hapd);
 int hostapd_drv_hemu_ctrl(struct hostapd_data *hapd);
 int hostapd_drv_hemu_dump(struct hostapd_data *hapd, u8 *hemu_onoff);
 int hostapd_drv_three_wire_ctrl(struct hostapd_data *hapd);
+int hostapd_drv_ibf_ctrl(struct hostapd_data *hapd);
+int hostapd_drv_ibf_dump(struct hostapd_data *hapd, u8 *ibf_enable);
 
 #include "drivers/driver.h"
 
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index 32b75dc..f095fe4 100644
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -2301,6 +2301,8 @@ dfs_offload:
 		goto fail;
 	if (hostapd_drv_three_wire_ctrl(hapd) < 0)
 		goto fail;
+	if (hostapd_drv_ibf_ctrl(hapd) < 0)
+		goto fail;
 
 	wpa_printf(MSG_DEBUG, "%s: Setup of interface done.",
 		   iface->bss[0]->conf->iface);
diff --git a/src/common/mtk_vendor.h b/src/common/mtk_vendor.h
index 99a4d7f..d6d04de 100644
--- a/src/common/mtk_vendor.h
+++ b/src/common/mtk_vendor.h
@@ -13,7 +13,8 @@ enum mtk_nl80211_vendor_subcmds {
 	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
 	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL= 0xc6,
 	MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL = 0xc7,
-	MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL = 0xc8
+	MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL = 0xc8,
+	MTK_NL80211_VENDOR_SUBCMD_IBF_CTRL = 0xc9,
 };
 
 enum mtk_vendor_attr_edcca_ctrl {
@@ -197,6 +198,38 @@ enum mtk_vendor_attr_hemu_ctrl {
 		NUM_MTK_VENDOR_ATTRS_HEMU_CTRL - 1
 };
 
+enum mtk_vendor_attr_ibf_ctrl {
+	MTK_VENDOR_ATTR_IBF_CTRL_UNSPEC,
+
+	MTK_VENDOR_ATTR_IBF_CTRL_ENABLE,
+
+	/* keep last */
+	NUM_MTK_VENDOR_ATTRS_IBF_CTRL,
+	MTK_VENDOR_ATTR_IBF_CTRL_MAX =
+		NUM_MTK_VENDOR_ATTRS_IBF_CTRL - 1
+};
+
+enum mtk_vendor_attr_ibf_dump {
+	MTK_VENDOR_ATTR_IBF_DUMP_UNSPEC,
+
+	MTK_VENDOR_ATTR_IBF_DUMP_ENABLE,
+
+	/* keep last */
+	NUM_MTK_VENDOR_ATTRS_IBF_DUMP,
+	MTK_VENDOR_ATTR_IBF_DUMP_MAX =
+		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 },
+};
+
 
 #define CSI_MAX_COUNT 256
 #define ETH_ALEN 6
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index e725433..dab37f9 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -1628,6 +1628,11 @@ struct wpa_driver_ap_params {
 	 * hemu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))
 	 */
 	u8 hemu_onoff;
+
+	/**
+	 * ibf_enable=<val>
+	 */
+	u8 ibf_enable;
 };
 
 struct wpa_driver_mesh_bss_params {
@@ -4699,6 +4704,20 @@ struct wpa_driver_ops {
 	 *
 	 */
 	 int (*three_wire_ctrl)(void *priv, u8 three_wire_enable);
+
+	/**
+	 * ibf_ctrl - ctrl disable/enable for ibf
+	 * @priv: Private driver interface data
+	 *
+	 */
+	int (*ibf_ctrl)(void *priv, u8 ibf_enable);
+
+	/**
+	 * ibf_dump - dump ibf
+	 * @priv: Private driver interface data
+	 *
+	 */
+	int (*ibf_dump)(void *priv, u8 *ibf_enable);
 };
 
 /**
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 03babd8..1c065d4 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -12549,6 +12549,112 @@ static int nl80211_enable_three_wire(void *priv, const u8 three_wire_enable)
 	return ret;
 }
 
+static int nl80211_ibf_enable(void *priv, u8 ibf_enable)
+{
+	struct i802_bss *bss = priv;
+	struct wpa_driver_nl80211_data *drv = bss->drv;
+	struct nl_msg *msg;
+	struct nlattr *data;
+	int ret;
+
+	if (!drv->mtk_ibf_vendor_cmd_avail) {
+		wpa_printf(MSG_INFO,
+			   "nl80211: Driver does not support setting ibf control");
+		return 0;
+	}
+
+	msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR);
+	if (!msg)
+		goto fail;
+
+	if (nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_MTK) ||
+		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_IBF_CTRL))
+		goto fail;
+
+	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA);
+	if (!data)
+		goto fail;
+
+	nla_put_u8(msg, MTK_VENDOR_ATTR_IBF_CTRL_ENABLE, ibf_enable);
+
+	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 ibf_enable. ret=%d (%s)", ret, strerror(-ret));
+	}
+
+	return ret;
+
+fail:
+	nlmsg_free(msg);
+	return -ENOBUFS;
+}
+
+static int ibf_dump_handler(struct nl_msg *msg, void *arg)
+{
+	u8 *ibf_enable = (u8 *) arg;
+	struct nlattr *tb[NL80211_ATTR_MAX + 1];
+	struct nlattr *tb_vendor[MTK_VENDOR_ATTR_IBF_DUMP_MAX + 1];
+	struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
+	struct nlattr *nl_vend, *attr;
+
+	nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
+			genlmsg_attrlen(gnlh, 0), NULL);
+
+	nl_vend = tb[NL80211_ATTR_VENDOR_DATA];
+	if (!nl_vend)
+		return NL_SKIP;
+
+	nla_parse(tb_vendor, MTK_VENDOR_ATTR_IBF_DUMP_MAX,
+			nla_data(nl_vend), nla_len(nl_vend), NULL);
+
+	attr = tb_vendor[MTK_VENDOR_ATTR_IBF_DUMP_ENABLE];
+	if (!attr) {
+		wpa_printf(MSG_ERROR, "nl80211: cannot find MTK_VENDOR_ATTR_IBF_DUMP_ENABLE");
+		return NL_SKIP;
+	}
+
+	*ibf_enable = nla_get_u8(attr);
+
+	return NL_SKIP;
+}
+
+static int
+nl80211_ibf_dump(void *priv, u8 *ibf_enable)
+{
+	struct i802_bss *bss = priv;
+	struct wpa_driver_nl80211_data *drv = bss->drv;
+	struct nl_msg *msg;
+	struct nlattr *data;
+	int ret;
+
+	msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_VENDOR);
+	if (!msg)
+		goto fail;
+
+	if (nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_MTK) ||
+		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_IBF_CTRL))
+		goto fail;
+
+	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA | NLA_F_NESTED);
+	if (!data)
+		goto fail;
+
+	nla_nest_end(msg, data);
+
+	ret = send_and_recv_msgs(drv, msg, ibf_dump_handler, ibf_enable, NULL, NULL);
+
+	if (ret) {
+		wpa_printf(MSG_ERROR, "Failed to dump ibf_enable. ret=%d (%s)", ret, strerror(-ret));
+	}
+
+	return ret;
+
+fail:
+	nlmsg_free(msg);
+	return -ENOBUFS;
+}
+
 const struct wpa_driver_ops wpa_driver_nl80211_ops = {
 	.name = "nl80211",
 	.desc = "Linux nl80211/cfg80211",
@@ -12699,4 +12805,6 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
 /* Need ifdef CONFIG_DRIVER_NL80211_MTK */
 	.configure_edcca_threshold = nl80211_configure_edcca_threshold,
 	.three_wire_ctrl = nl80211_enable_three_wire,
+	.ibf_ctrl = nl80211_ibf_enable,
+	.ibf_dump = nl80211_ibf_dump,
 };
diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h
index 9fe7811..607592c 100644
--- a/src/drivers/driver_nl80211.h
+++ b/src/drivers/driver_nl80211.h
@@ -184,6 +184,7 @@ struct wpa_driver_nl80211_data {
 	unsigned int mtk_edcca_vendor_cmd_avail:1;
 	unsigned int mtk_hemu_vendor_cmd_avail:1;
 	unsigned int mtk_3wire_vendor_cmd_avail:1;
+	unsigned int mtk_ibf_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 04bc54e..9ecc0ff 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -1062,6 +1062,9 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)
 				case MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL :
 					drv->mtk_3wire_vendor_cmd_avail = 1;
 					break;
+				case MTK_NL80211_VENDOR_SUBCMD_IBF_CTRL:
+					drv->mtk_ibf_vendor_cmd_avail = 1;
+					break;
 				}
 			}
 
-- 
2.18.0

