summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnson <jjohnson@codeaurora.org>2017-02-24 12:25:07 -0800
committerqcabuildsw <qcabuildsw@localhost>2017-03-01 17:13:05 -0800
commit10e6fc2d56913c21725a3da7784d60b9e6495021 (patch)
tree929b20e718411ff94f9e0e6daa7a1dce719c767d
parenta080b0453af1df56e3f04872d5f6ab5c10f20c42 (diff)
qcacld-3.0: Add support for new chainmask controls
Firmware has implemented two new chanimask control parameters: WMI_PDEV_PARAM_SMART_CHAINMASK_SCHEME WMI_PDEV_PARAM_ALTERNATIVE_CHAINMASK_SCHEME Add two new INI parameters to control the values of these firmware parameters. Change-Id: Iafe8d38684c5f2ab3f4150eee722461ec21e3e21 CRs-Fixed: 2011634
-rw-r--r--core/hdd/inc/wlan_hdd_cfg.h49
-rw-r--r--core/hdd/src/wlan_hdd_cfg.c14
-rw-r--r--core/hdd/src/wlan_hdd_main.c39
3 files changed, 102 insertions, 0 deletions
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index d71a652390f0..3feac5c4a440 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -7839,6 +7839,53 @@ typedef enum {
#define CFG_TX_CHAIN_MASK_1SS_DEFAULT (1)
/*
+ * <ini>
+ * gEnableSmartChainmask - Enable Smart Chainmask
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * This ini is used to enable/disable the Smart Chainmask feature via
+ * the WMI_PDEV_PARAM_SMART_CHAINMASK_SCHEME firmware parameter.
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+#define CFG_ENABLE_SMART_CHAINMASK_NAME "gEnableSmartChainmask"
+#define CFG_ENABLE_SMART_CHAINMASK_MIN (0)
+#define CFG_ENABLE_SMART_CHAINMASK_MAX (1)
+#define CFG_ENABLE_SMART_CHAINMASK_DEFAULT (0)
+
+/*
+ * <ini>
+ * gEnableAlternativeChainmask - Enable Co-Ex Alternative Chainmask
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * This ini is used to enable/disable the Co-ex Alternative Chainmask
+ * feature via the WMI_PDEV_PARAM_ALTERNATIVE_CHAINMASK_SCHEME
+ * firmware parameter.
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+#define CFG_ENABLE_COEX_ALT_CHAINMASK_NAME "gEnableAlternativeChainmask"
+#define CFG_ENABLE_COEX_ALT_CHAINMASK_MIN (0)
+#define CFG_ENABLE_COEX_ALT_CHAINMASK_MAX (1)
+#define CFG_ENABLE_COEX_ALT_CHAINMASK_DEFAULT (0)
+
+/*
* set the self gen power value from
* 0 to 0xffff
*/
@@ -10461,6 +10508,8 @@ struct hdd_config {
uint32_t dual_mac_feature_disable;
bool tx_chain_mask_cck;
uint8_t tx_chain_mask_1ss;
+ bool smart_chainmask_enabled;
+ bool alternative_chainmask_enabled;
uint16_t self_gen_frm_pwr;
#ifdef WLAN_FEATURE_UDP_RESPONSE_OFFLOAD
bool udp_resp_offload_support;
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index 197ee472beaa..b8b17dc3486f 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -3733,6 +3733,20 @@ REG_TABLE_ENTRY g_registry_table[] = {
CFG_TX_CHAIN_MASK_1SS_MIN,
CFG_TX_CHAIN_MASK_1SS_MAX),
+ REG_VARIABLE(CFG_ENABLE_SMART_CHAINMASK_NAME, WLAN_PARAM_Integer,
+ struct hdd_config, smart_chainmask_enabled,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_ENABLE_SMART_CHAINMASK_DEFAULT,
+ CFG_ENABLE_SMART_CHAINMASK_MIN,
+ CFG_ENABLE_SMART_CHAINMASK_MAX),
+
+ REG_VARIABLE(CFG_ENABLE_COEX_ALT_CHAINMASK_NAME, WLAN_PARAM_Integer,
+ struct hdd_config, alternative_chainmask_enabled,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_ENABLE_COEX_ALT_CHAINMASK_DEFAULT,
+ CFG_ENABLE_COEX_ALT_CHAINMASK_MIN,
+ CFG_ENABLE_COEX_ALT_CHAINMASK_MAX),
+
REG_VARIABLE(CFG_SELF_GEN_FRM_PWR, WLAN_PARAM_Integer,
struct hdd_config, self_gen_frm_pwr,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 9ceebd2e2f1c..81447678058c 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -7683,6 +7683,37 @@ static void hdd_tsf_init(hdd_context_t *hdd_ctx)
}
#endif
+static int hdd_set_smart_chainmask_enabled(hdd_context_t *hdd_ctx)
+{
+ int vdev_id = 0;
+ int param_id = WMI_PDEV_PARAM_SMART_CHAINMASK_SCHEME;
+ int value = hdd_ctx->config->smart_chainmask_enabled;
+ int vpdev = PDEV_CMD;
+ int ret;
+
+ ret = wma_cli_set_command(vdev_id, param_id, value, vpdev);
+ if (ret)
+ hdd_err("WMI_PDEV_PARAM_SMART_CHAINMASK_SCHEME failed %d", ret);
+
+ return ret;
+}
+
+static int hdd_set_alternative_chainmask_enabled(hdd_context_t *hdd_ctx)
+{
+ int vdev_id = 0;
+ int param_id = WMI_PDEV_PARAM_ALTERNATIVE_CHAINMASK_SCHEME;
+ int value = hdd_ctx->config->alternative_chainmask_enabled;
+ int vpdev = PDEV_CMD;
+ int ret;
+
+ ret = wma_cli_set_command(vdev_id, param_id, value, vpdev);
+ if (ret)
+ hdd_err("WMI_PDEV_PARAM_ALTERNATIVE_CHAINMASK_SCHEME failed %d",
+ ret);
+
+ return ret;
+}
+
/**
* hdd_pre_enable_configure() - Configurations prior to cds_enable
* @hdd_ctx: HDD context
@@ -7729,6 +7760,14 @@ static int hdd_pre_enable_configure(hdd_context_t *hdd_ctx)
goto out;
}
+ ret = hdd_set_smart_chainmask_enabled(hdd_ctx);
+ if (ret)
+ goto out;
+
+ ret = hdd_set_alternative_chainmask_enabled(hdd_ctx);
+ if (ret)
+ goto out;
+
hdd_program_country_code(hdd_ctx);
status = hdd_set_sme_chan_list(hdd_ctx);