summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChenming Huang <chenhuan@codeaurora.org>2020-09-05 12:21:16 +0800
committerGerrit - the friendly Code Review server <code-review@localhost>2020-11-23 23:06:01 -0800
commit6989e2b1c68580d562c973fbc61b2408f8613001 (patch)
treee6e453ce9eb80711da0c33c1d5ff8d9a2f5a3c41
parentb04e99485db2eb891555da34fe4cc383ed1779e8 (diff)
wpa_supplicant_lib: Add support for set ani level command
This supports to set ani level to driver command CRs-Fixed: 2786763 Change-Id: I17594842ace84af5f90aca77a7ad9848ca161b33
-rw-r--r--qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c
index a6b4eac..f8317e5 100644
--- a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c
+++ b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c
@@ -42,6 +42,37 @@
/* ============ nl80211 driver extensions =========== */
+static int wpa_driver_cmd_set_ani_level(struct i802_bss *bss, int mode, int ofdmlvl)
+{
+ struct wpa_driver_nl80211_data *drv = bss->drv;
+ struct nl_msg *msg = NULL;
+ struct nlattr *params = NULL;
+ int ret = 0;
+
+ if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) ||
+ nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_QCA) ||
+ nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD,
+ QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION) ||
+ !(params = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA)) ||
+ nla_put_u8(msg, QCA_WLAN_VENDOR_ATTR_CONFIG_ANI_SETTING, mode)) {
+ nlmsg_free(msg);
+ return -1;
+ }
+ if(mode == QCA_WLAN_ANI_SETTING_FIXED) {
+ if(nla_put(msg, QCA_WLAN_VENDOR_ATTR_CONFIG_ANI_LEVEL, sizeof(int32_t), &ofdmlvl)){
+ nlmsg_free(msg);
+ return -1;
+ }
+ }
+ nla_nest_end(msg, params);
+ ret = send_and_recv_msgs(drv, msg, NULL, NULL);
+ if (!ret)
+ return 0;
+ wpa_printf(MSG_ERROR, "%s: Failed set_ani_level, ofdmlvl=%d, ret=%d",
+ __FUNCTION__, ofdmlvl, ret);
+ return ret;
+}
+
static int wpa_driver_cmd_set_tx_power(struct i802_bss *bss, char *cmd)
{
struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -1282,6 +1313,20 @@ int wpa_driver_nl80211_driver_cmd(void *priv, char *cmd, char *buf,
}
return WPA_DRIVER_OEM_STATUS_SUCCESS;
+ } else if (os_strncasecmp(cmd, "SET_ANI_LEVEL ", 14) == 0) {
+ char *endptr = NULL;
+ int mode = 0;
+ int ofdmlvl = 0;
+ mode = strtol(cmd + 14, &endptr, 10);
+ if (mode == 1) {
+ if(!(*endptr)) {
+ wpa_printf(MSG_ERROR, "%s: failed to set ani setting,\
+ invalid cmd: %s\n", __func__, cmd);
+ return -EINVAL;
+ }
+ ofdmlvl = strtol(endptr, NULL, 10);
+ }
+ return wpa_driver_cmd_set_ani_level(priv, mode, ofdmlvl);
} else { /* Use private command */
memset(&ifr, 0, sizeof(ifr));
memset(&priv_cmd, 0, sizeof(priv_cmd));