diff options
| author | Jeff Johnson <jjohnson@codeaurora.org> | 2017-02-24 12:25:07 -0800 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2017-03-01 17:13:05 -0800 |
| commit | 10e6fc2d56913c21725a3da7784d60b9e6495021 (patch) | |
| tree | 929b20e718411ff94f9e0e6daa7a1dce719c767d | |
| parent | a080b0453af1df56e3f04872d5f6ab5c10f20c42 (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.h | 49 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg.c | 14 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_main.c | 39 |
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); |
