qcacld-3.0: Remove legacy ini for chainmask configs

Remove the legacy ini config values defined in hdd_cfg.
Call the mlme cfg get api to retrieve chainmask config values.
Remove the tx_chainmask_cck from cds_config as mlme object is
not initialized during cds_open. Call mlme cfg api during
wma_open to populate the tx_chainmask_cck value.

Change-Id: If48aeb62cf35e2e604be2b72845b8e98c5c313dc
CRs-Fixed: 2310382
This commit is contained in:
Pragaspathi Thilagaraj
2018-08-18 01:23:01 +05:30
committed by nshrivas
parent ce0a9d02ce
commit 00bd8bc47f
10 changed files with 301 additions and 439 deletions

View File

@@ -57,4 +57,59 @@ QDF_STATUS wlan_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
*/ */
QDF_STATUS wlan_mlme_get_ignore_peer_ht_mode(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_mlme_get_ignore_peer_ht_mode(struct wlan_objmgr_psoc *psoc,
bool *value); bool *value);
/**
* wlan_mlme_get_tx_chainmask_cck() - Get the tx_chainmask_cfg value
*
* @psoc: pointer to psoc object
* @value: Value that needs to be set from the caller
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
QDF_STATUS wlan_mlme_get_tx_chainmask_cck(struct wlan_objmgr_psoc *psoc,
bool *value);
/**
* wlan_mlme_get_tx_chainmask_1ss() - Get the tx_chainmask_1ss value
*
* @psoc: pointer to psoc object
* @value: Value that needs to be set from the caller
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
QDF_STATUS wlan_mlme_get_tx_chainmask_1ss(struct wlan_objmgr_psoc *psoc,
uint8_t *value);
/**
* wlan_mlme_get_num_11b_tx_chains() - Get the number of 11b only tx chains
*
* @psoc: pointer to psoc object
* @value: Value that needs to be set from the caller
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
QDF_STATUS wlan_mlme_get_num_11b_tx_chains(struct wlan_objmgr_psoc *psoc,
uint16_t *value);
/**
* wlan_mlme_get_num_11ag_tx_chains() - get the total number of 11a/g tx chains
*
* @psoc: pointer to psoc object
* @value: Value that needs to be set from the caller
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
QDF_STATUS wlan_mlme_get_num_11ag_tx_chains(struct wlan_objmgr_psoc *psoc,
uint16_t *value);
/**
* wlan_mlme_configure_chain_mask() - configure chainmask parameters
*
* @psoc: pointer to psoc object
* @session_id: vdev_id
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
QDF_STATUS wlan_mlme_configure_chain_mask(struct wlan_objmgr_psoc *psoc,
uint8_t session_id);
#endif /* _WLAN_MLME_API_H_ */ #endif /* _WLAN_MLME_API_H_ */

View File

@@ -117,4 +117,65 @@ QDF_STATUS ucfg_mlme_get_ignore_peer_ht_mode(struct wlan_objmgr_psoc *psoc,
{ {
return wlan_mlme_get_ignore_peer_ht_mode(psoc, value); return wlan_mlme_get_ignore_peer_ht_mode(psoc, value);
} }
/**
* ucfg_mlme_get_tx_chainmask_1ss() - Get the tx_chainmask_1ss value
*
* @psoc: pointer to psoc object
* @value: Value that needs to be set from the caller
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
static inline
QDF_STATUS ucfg_mlme_get_tx_chainmask_1ss(struct wlan_objmgr_psoc *psoc,
uint8_t *value)
{
return wlan_mlme_get_tx_chainmask_1ss(psoc, value);
}
/**
* ucfg_mlme_get_num_11b_tx_chains() - Get the number of 11b only tx chains
*
* @psoc: pointer to psoc object
* @value: Value that needs to be set from the caller
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
static inline
QDF_STATUS ucfg_mlme_get_num_11b_tx_chains(struct wlan_objmgr_psoc *psoc,
uint16_t *value)
{
return wlan_mlme_get_num_11b_tx_chains(psoc, value);
}
/**
* ucfg_mlme_get_num_11ag_tx_chains() - get the total number of 11a/g tx chains
*
* @psoc: pointer to psoc object
* @value: Value that needs to be set from the caller
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
static inline
QDF_STATUS ucfg_mlme_get_num_11ag_tx_chains(struct wlan_objmgr_psoc *psoc,
uint16_t *value)
{
return wlan_mlme_get_num_11ag_tx_chains(psoc, value);
}
/**
* ucfg_mlme_configure_chain_mask() - configure chainmask parameters
*
* @psoc: pointer to psoc object
* @session_id: vdev_id
*
* Return: QDF_STATUS_FAILURE or QDF_STATUS_SUCCESS
*/
static inline
QDF_STATUS ucfg_mlme_configure_chain_mask(struct wlan_objmgr_psoc *psoc,
uint8_t session_id)
{
return wlan_mlme_configure_chain_mask(psoc, session_id);
}
#endif /* _WLAN_MLME_UCFG_API_H_ */ #endif /* _WLAN_MLME_UCFG_API_H_ */

View File

@@ -22,6 +22,8 @@
#include "cfg_ucfg_api.h" #include "cfg_ucfg_api.h"
#include "wlan_mlme_main.h" #include "wlan_mlme_main.h"
#include "wlan_mlme_ucfg_api.h" #include "wlan_mlme_ucfg_api.h"
#include "wma_types.h"
#include "wmi_unified.h"
QDF_STATUS wlan_mlme_get_ht_cap_info(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_mlme_get_ht_cap_info(struct wlan_objmgr_psoc *psoc,
struct mlme_ht_capabilities_info struct mlme_ht_capabilities_info
@@ -70,3 +72,144 @@ QDF_STATUS wlan_mlme_get_ignore_peer_ht_mode(struct wlan_objmgr_psoc *psoc,
*value = mlme_obj->cfg.sap_protection_cfg.ignore_peer_ht_mode; *value = mlme_obj->cfg.sap_protection_cfg.ignore_peer_ht_mode;
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS wlan_mlme_get_tx_chainmask_cck(struct wlan_objmgr_psoc *psoc,
bool *value)
{
struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj) {
mlme_err("Failed to get MLME Obj");
return QDF_STATUS_E_FAILURE;
}
*value = mlme_obj->cfg.chainmask_cfg.tx_chain_mask_cck;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_mlme_get_tx_chainmask_1ss(struct wlan_objmgr_psoc *psoc,
uint8_t *value)
{
struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj) {
mlme_err("Failed to get MLME Obj");
return QDF_STATUS_E_FAILURE;
}
*value = mlme_obj->cfg.chainmask_cfg.tx_chain_mask_1ss;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_mlme_get_num_11b_tx_chains(struct wlan_objmgr_psoc *psoc,
uint16_t *value)
{
struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj) {
mlme_err("Failed to get MLME Obj");
return QDF_STATUS_E_FAILURE;
}
*value = mlme_obj->cfg.chainmask_cfg.num_11b_tx_chains;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_mlme_get_num_11ag_tx_chains(struct wlan_objmgr_psoc *psoc,
uint16_t *value)
{
struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj) {
mlme_err("Failed to get MLME Obj");
return QDF_STATUS_E_FAILURE;
}
*value = mlme_obj->cfg.chainmask_cfg.num_11ag_tx_chains;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_mlme_configure_chain_mask(struct wlan_objmgr_psoc *psoc,
uint8_t session_id)
{
int ret_val;
uint8_t ch_msk_val;
struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj) {
mlme_err("Failed to get MLME Obj");
return QDF_STATUS_E_FAILURE;
}
mlme_debug("txchainmask1x1: %d rxchainmask1x1: %d",
mlme_obj->cfg.chainmask_cfg.txchainmask1x1,
mlme_obj->cfg.chainmask_cfg.rxchainmask1x1);
mlme_debug("tx_chain_mask_2g: %d, rx_chain_mask_2g: %d",
mlme_obj->cfg.chainmask_cfg.tx_chain_mask_2g,
mlme_obj->cfg.chainmask_cfg.rx_chain_mask_2g);
mlme_debug("tx_chain_mask_5g: %d, rx_chain_mask_5g: %d",
mlme_obj->cfg.chainmask_cfg.tx_chain_mask_5g,
mlme_obj->cfg.chainmask_cfg.rx_chain_mask_5g);
if (mlme_obj->cfg.chainmask_cfg.txchainmask1x1) {
ch_msk_val = mlme_obj->cfg.chainmask_cfg.txchainmask1x1;
ret_val = wma_cli_set_command(session_id,
WMI_PDEV_PARAM_TX_CHAIN_MASK,
ch_msk_val, PDEV_CMD);
if (ret_val)
return QDF_STATUS_E_FAILURE;
}
if (mlme_obj->cfg.chainmask_cfg.rxchainmask1x1) {
ch_msk_val = mlme_obj->cfg.chainmask_cfg.rxchainmask1x1;
ret_val = wma_cli_set_command(session_id,
WMI_PDEV_PARAM_RX_CHAIN_MASK,
ch_msk_val, PDEV_CMD);
if (ret_val)
return QDF_STATUS_E_FAILURE;
}
if (mlme_obj->cfg.chainmask_cfg.txchainmask1x1 ||
mlme_obj->cfg.chainmask_cfg.rxchainmask1x1) {
mlme_debug("band agnostic tx/rx chain mask set. skip per band chain mask");
return QDF_STATUS_SUCCESS;
}
if (mlme_obj->cfg.chainmask_cfg.tx_chain_mask_2g) {
ch_msk_val = mlme_obj->cfg.chainmask_cfg.tx_chain_mask_2g;
ret_val = wma_cli_set_command(session_id,
WMI_PDEV_PARAM_TX_CHAIN_MASK_2G,
ch_msk_val, PDEV_CMD);
if (0 != ret_val)
return QDF_STATUS_E_FAILURE;
}
if (mlme_obj->cfg.chainmask_cfg.rx_chain_mask_2g) {
ch_msk_val = mlme_obj->cfg.chainmask_cfg.rx_chain_mask_2g;
ret_val = wma_cli_set_command(session_id,
WMI_PDEV_PARAM_RX_CHAIN_MASK_2G,
ch_msk_val, PDEV_CMD);
if (0 != ret_val)
return QDF_STATUS_E_FAILURE;
}
if (mlme_obj->cfg.chainmask_cfg.tx_chain_mask_5g) {
ch_msk_val = mlme_obj->cfg.chainmask_cfg.tx_chain_mask_5g;
ret_val = wma_cli_set_command(session_id,
WMI_PDEV_PARAM_TX_CHAIN_MASK_5G,
ch_msk_val, PDEV_CMD);
if (0 != ret_val)
return QDF_STATUS_E_FAILURE;
}
if (mlme_obj->cfg.chainmask_cfg.rx_chain_mask_5g) {
ch_msk_val = mlme_obj->cfg.chainmask_cfg.rx_chain_mask_5g;
ret_val = wma_cli_set_command(session_id,
WMI_PDEV_PARAM_RX_CHAIN_MASK_5G,
ch_msk_val, PDEV_CMD);
if (0 != ret_val)
return QDF_STATUS_E_FAILURE;
}
return QDF_STATUS_SUCCESS;
}

View File

@@ -154,7 +154,6 @@ struct cds_config_info {
bool is_lpass_enabled; bool is_lpass_enabled;
#endif #endif
bool apf_packet_filter_enable; bool apf_packet_filter_enable;
bool tx_chain_mask_cck;
uint16_t self_gen_frm_pwr; uint16_t self_gen_frm_pwr;
enum cfg_sub_20_channel_width sub_20_channel_width; enum cfg_sub_20_channel_width sub_20_channel_width;
bool flow_steering_enabled; bool flow_steering_enabled;

View File

@@ -1725,52 +1725,6 @@ enum hdd_dot11_mode {
#define CFG_FORCE_1X1_MAX (1) #define CFG_FORCE_1X1_MAX (1)
#define CFG_FORCE_1X1_DEFAULT (1) #define CFG_FORCE_1X1_DEFAULT (1)
/*
* <ini>
* g11bNumTxChains - Number of Tx Chanins in 11b mode
* @Min: 0
* @Max: 2
* @Default: 0
*
* Number of Tx Chanins in 11b mode
*
*
* Related: None
*
* Supported Feature: connection
*
* Usage: External
*
* </ini>
*/
#define CFG_11B_NUM_TX_CHAIN_NAME "g11bNumTxChains"
#define CFG_11B_NUM_TX_CHAIN_MIN (0)
#define CFG_11B_NUM_TX_CHAIN_MAX (2)
#define CFG_11B_NUM_TX_CHAIN_DEFAULT (0)
/*
* <ini>
* g11agNumTxChains - Number of Tx Chanins in 11ag mode
* @Min: 0
* @Max: 2
* @Default: 0
*
* Number of Tx Chanins in 11ag mode
*
*
* Related: None
*
* Supported Feature: connection
*
* Usage: External
*
* </ini>
*/
#define CFG_11AG_NUM_TX_CHAIN_NAME "g11agNumTxChains"
#define CFG_11AG_NUM_TX_CHAIN_MIN (0)
#define CFG_11AG_NUM_TX_CHAIN_MAX (2)
#define CFG_11AG_NUM_TX_CHAIN_DEFAULT (0)
/* /*
* <ini> * <ini>
* gEnableFastRoamInConcurrency - Enable LFR roaming on STA during concurrency * gEnableFastRoamInConcurrency - Enable LFR roaming on STA during concurrency
@@ -5081,64 +5035,6 @@ enum hdd_link_speed_rpt_type {
#define CFG_VHT_ENABLE_GID_FEATURE_MAX (1) #define CFG_VHT_ENABLE_GID_FEATURE_MAX (1)
#define CFG_VHT_ENABLE_GID_FEATURE_DEFAULT (0) #define CFG_VHT_ENABLE_GID_FEATURE_DEFAULT (0)
/*
* <ini>
* gSetTxChainmask1x1 - Sets Transmit chain mask.
* @Min: 1
* @Max: 3
* @Default: 0
*
* This ini Sets Transmit chain mask.
*
* If gEnable2x2 is disabled, gSetTxChainmask1x1 and gSetRxChainmask1x1 values
* are taken into account. If chainmask value exceeds the maximum number of
* chains supported by target, the max number of chains is used. By default,
* chain0 is selected for both Tx and Rx.
* gSetTxChainmask1x1=1 or gSetRxChainmask1x1=1 to select chain0.
* gSetTxChainmask1x1=2 or gSetRxChainmask1x1=2 to select chain1.
* gSetTxChainmask1x1=3 or gSetRxChainmask1x1=3 to select both chains.
*
* Supported Feature: 11AC
*
* Usage: External
*
* </ini>
*/
#define CFG_VHT_ENABLE_1x1_TX_CHAINMASK "gSetTxChainmask1x1"
#define CFG_VHT_ENABLE_1x1_TX_CHAINMASK_MIN (0)
#define CFG_VHT_ENABLE_1x1_TX_CHAINMASK_MAX (3)
#define CFG_VHT_ENABLE_1x1_TX_CHAINMASK_DEFAULT (0)
/*
* <ini>
* gSetRxChainmask1x1 - Sets Receive chain mask.
* @Min: 1
* @Max: 3
* @Default: 0
*
* This ini is used to set Receive chain mask.
*
* If gEnable2x2 is disabled, gSetTxChainmask1x1 and gSetRxChainmask1x1 values
* are taken into account. If chainmask value exceeds the maximum number of
* chains supported by target, the max number of chains is used. By default,
* chain0 is selected for both Tx and Rx.
* gSetTxChainmask1x1=1 or gSetRxChainmask1x1=1 to select chain0.
* gSetTxChainmask1x1=2 or gSetRxChainmask1x1=2 to select chain1.
* gSetTxChainmask1x1=3 or gSetRxChainmask1x1=3 to select both chains.
*
* Supported Feature: 11AC
*
* Usage: External
*
* </ini>
*/
#define CFG_VHT_ENABLE_1x1_RX_CHAINMASK "gSetRxChainmask1x1"
#define CFG_VHT_ENABLE_1x1_RX_CHAINMASK_MIN (0)
#define CFG_VHT_ENABLE_1x1_RX_CHAINMASK_MAX (3)
#define CFG_VHT_ENABLE_1x1_RX_CHAINMASK_DEFAULT (0)
/* /*
* <ini> * <ini>
* gEnableAMPDUPS - Enable the AMPDUPS * gEnableAMPDUPS - Enable the AMPDUPS
@@ -7884,53 +7780,6 @@ enum hdd_link_speed_rpt_type {
#define CFG_APF_PACKET_FILTER_OFFLOAD_MAX (1) #define CFG_APF_PACKET_FILTER_OFFLOAD_MAX (1)
#define CFG_APF_PACKET_FILTER_OFFLOAD_DEFAULT (1) #define CFG_APF_PACKET_FILTER_OFFLOAD_DEFAULT (1)
/*
* <ini>
* gCckChainMaskEnable - Used to enable/disable Cck ChainMask
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to set default Cck ChainMask
* 0: disable the cck tx chain mask (default)
* 1: enable the cck tx chain mask
*
* Related: None
*
* Supported Feature: STA
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_TX_CHAIN_MASK_CCK "gCckChainMaskEnable"
#define CFG_TX_CHAIN_MASK_CCK_MIN (0)
#define CFG_TX_CHAIN_MASK_CCK_MAX (1)
#define CFG_TX_CHAIN_MASK_CCK_DEFAULT (0)
/*
* <ini>
* gTxChainMask1ss - Enables/disables tx chain Mask1ss
* @Min: 0
* @Max: 3
* @Default: 1
*
* This ini is used to set default tx chain Mask1ss
*
* Related: None
*
* Supported Feature: STA
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_TX_CHAIN_MASK_1SS "gTxChainMask1ss"
#define CFG_TX_CHAIN_MASK_1SS_MIN (0)
#define CFG_TX_CHAIN_MASK_1SS_MAX (3)
#define CFG_TX_CHAIN_MASK_1SS_DEFAULT (1)
/* /*
* <ini> * <ini>
* gEnableSmartChainmask - Enable Smart Chainmask * gEnableSmartChainmask - Enable Smart Chainmask
@@ -12940,129 +12789,6 @@ enum hdd_external_acs_policy {
#define CFG_ENABLE_ESP_FEATURE_MAX (1) #define CFG_ENABLE_ESP_FEATURE_MAX (1)
#define CFG_ENABLE_ESP_FEATURE_DEFAULT (0) #define CFG_ENABLE_ESP_FEATURE_DEFAULT (0)
/*
* <ini>
* tx_chain_mask_2g - tx chain mask for 2g
* @Min: 0
* @Max: 3
* @Default: 0
*
* This ini will set tx chain mask for 2g. To use the ini, make sure:
* gSetTxChainmask1x1/gSetRxChainmask1x1 = 0,
* gDualMacFeatureDisable = 1
* gEnable2x2 = 0
*
* tx_chain_mask_2g=0 : don't care
* tx_chain_mask_2g=1 : for 2g tx use chain 0
* tx_chain_mask_2g=2 : for 2g tx use chain 1
* tx_chain_mask_2g=3 : for 2g tx can use either chain
*
* Related: None
*
* Supported Feature: All profiles
*
* Usage: External
*
* </ini>
*/
#define CFG_TX_CHAIN_MASK_2G_NAME "tx_chain_mask_2g"
#define CFG_TX_CHAIN_MASK_2G_MIN (0)
#define CFG_TX_CHAIN_MASK_2G_MAX (3)
#define CFG_TX_CHAIN_MASK_2G_DEFAULT (0)
/*
* <ini>
* tx_chain_mask_5g - tx chain mask for 5g
* @Min: 0
* @Max: 3
* @Default: 0
*
* This ini will set tx chain mask for 5g. To use the ini, make sure:
* gSetTxChainmask1x1/gSetRxChainmask1x1 = 0,
* gDualMacFeatureDisable = 1
* gEnable2x2 = 0
*
* tx_chain_mask_5g=0 : don't care
* tx_chain_mask_5g=1 : for 5g tx use chain 0
* tx_chain_mask_5g=2 : for 5g tx use chain 1
* tx_chain_mask_5g=3 : for 5g tx can use either chain
*
* Related: None
*
* Supported Feature: All profiles
*
* Usage: External
*
* </ini>
*/
#define CFG_TX_CHAIN_MASK_5G_NAME "tx_chain_mask_5g"
#define CFG_TX_CHAIN_MASK_5G_MIN (0)
#define CFG_TX_CHAIN_MASK_5G_MAX (3)
#define CFG_TX_CHAIN_MASK_5G_DEFAULT (0)
/*
* <ini>
* rx_chain_mask_2g - rx chain mask for 2g
* @Min: 0
* @Max: 3
* @Default: 0
*
* This ini will set rx chain mask for 2g. To use the ini, make sure:
* gSetTxChainmask1x1/gSetRxChainmask1x1 = 0,
* gDualMacFeatureDisable = 1
* gEnable2x2 = 0
*
* rx_chain_mask_2g=0 : don't care
* rx_chain_mask_2g=1 : for 2g rx use chain 0
* rx_chain_mask_2g=2 : for 2g rx use chain 1
* rx_chain_mask_2g=3 : for 2g rx can use either chain
*
* Related: None
*
* Supported Feature: All profiles
*
* Usage: External
*
* </ini>
*/
#define CFG_RX_CHAIN_MASK_2G_NAME "rx_chain_mask_2g"
#define CFG_RX_CHAIN_MASK_2G_MIN (0)
#define CFG_RX_CHAIN_MASK_2G_MAX (3)
#define CFG_RX_CHAIN_MASK_2G_DEFAULT (0)
/*
* <ini>
* rx_chain_mask_5g - rx chain mask for 5g
* @Min: 0
* @Max: 3
* @Default: 0
*
* This ini will set rx chain mask for 5g. To use the ini, make sure:
* gSetTxChainmask1x1/gSetRxChainmask1x1 = 0,
* gDualMacFeatureDisable = 1
* gEnable2x2 = 0
*
* rx_chain_mask_5g=0 : don't care
* rx_chain_mask_5g=1 : for 5g rx use chain 0
* rx_chain_mask_5g=2 : for 5g rx use chain 1
* rx_chain_mask_5g=3 : for 5g rx can use either chain
*
* Related: None
*
* Supported Feature: All profiles
*
* Usage: External
*
* </ini>
*/
#define CFG_RX_CHAIN_MASK_5G_NAME "rx_chain_mask_5g"
#define CFG_RX_CHAIN_MASK_5G_MIN (0)
#define CFG_RX_CHAIN_MASK_5G_MAX (3)
#define CFG_RX_CHAIN_MASK_5G_DEFAULT (0)
/* /*
* <ini> * <ini>
* btm_offload_config - Configure BTM * btm_offload_config - Configure BTM
@@ -14240,8 +13966,6 @@ struct hdd_config {
bool enable2x2; bool enable2x2;
uint32_t vdev_type_nss_2g; uint32_t vdev_type_nss_2g;
uint32_t vdev_type_nss_5g; uint32_t vdev_type_nss_5g;
uint8_t txchainmask1x1;
uint8_t rxchainmask1x1;
bool enableMuBformee; bool enableMuBformee;
bool enableVhtpAid; bool enableVhtpAid;
bool enableVhtGid; bool enableVhtGid;
@@ -14496,8 +14220,6 @@ struct hdd_config {
uint8_t dbs_scan_selection[CFG_DBS_SCAN_PARAM_LENGTH]; uint8_t dbs_scan_selection[CFG_DBS_SCAN_PARAM_LENGTH];
uint32_t sta_sap_scc_on_dfs_chan; uint32_t sta_sap_scc_on_dfs_chan;
uint32_t sta_sap_scc_on_lte_coex_chan; uint32_t sta_sap_scc_on_lte_coex_chan;
bool tx_chain_mask_cck;
uint8_t tx_chain_mask_1ss;
bool smart_chainmask_enabled; bool smart_chainmask_enabled;
bool alternative_chainmask_enabled; bool alternative_chainmask_enabled;
uint16_t self_gen_frm_pwr; uint16_t self_gen_frm_pwr;
@@ -14675,8 +14397,6 @@ struct hdd_config {
uint8_t enable_rts_sifsbursting; uint8_t enable_rts_sifsbursting;
uint8_t max_mpdus_inampdu; uint8_t max_mpdus_inampdu;
enum pmo_auto_pwr_detect_failure_mode auto_pwr_save_fail_mode; enum pmo_auto_pwr_detect_failure_mode auto_pwr_save_fail_mode;
uint16_t num_11b_tx_chains;
uint16_t num_11ag_tx_chains;
uint8_t ito_repeat_count; uint8_t ito_repeat_count;
/* LCA(Last connected AP) disallow configs */ /* LCA(Last connected AP) disallow configs */
uint32_t disallow_duration; uint32_t disallow_duration;
@@ -14761,10 +14481,6 @@ struct hdd_config {
bool probe_req_deferral_enabled; bool probe_req_deferral_enabled;
bool fils_discovery_sap_enabled; bool fils_discovery_sap_enabled;
bool esp_for_roam_enabled; bool esp_for_roam_enabled;
uint8_t tx_chain_mask_2g;
uint8_t rx_chain_mask_2g;
uint8_t tx_chain_mask_5g;
uint8_t rx_chain_mask_5g;
uint32_t btm_offload_config; uint32_t btm_offload_config;
#ifdef WLAN_FEATURE_SAE #ifdef WLAN_FEATURE_SAE
bool is_sae_enabled; bool is_sae_enabled;

View File

@@ -2014,20 +2014,6 @@ struct reg_table_entry g_registry_table[] = {
CFG_VHT_ENABLE_GID_FEATURE_MIN, CFG_VHT_ENABLE_GID_FEATURE_MIN,
CFG_VHT_ENABLE_GID_FEATURE_MAX), CFG_VHT_ENABLE_GID_FEATURE_MAX),
REG_VARIABLE(CFG_VHT_ENABLE_1x1_TX_CHAINMASK, WLAN_PARAM_Integer,
struct hdd_config, txchainmask1x1,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_VHT_ENABLE_1x1_TX_CHAINMASK_DEFAULT,
CFG_VHT_ENABLE_1x1_TX_CHAINMASK_MIN,
CFG_VHT_ENABLE_1x1_TX_CHAINMASK_MAX),
REG_VARIABLE(CFG_VHT_ENABLE_1x1_RX_CHAINMASK, WLAN_PARAM_Integer,
struct hdd_config, rxchainmask1x1,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_VHT_ENABLE_1x1_RX_CHAINMASK_DEFAULT,
CFG_VHT_ENABLE_1x1_RX_CHAINMASK_MIN,
CFG_VHT_ENABLE_1x1_RX_CHAINMASK_MAX),
REG_VARIABLE(CFG_ENABLE_AMPDUPS_FEATURE, WLAN_PARAM_Integer, REG_VARIABLE(CFG_ENABLE_AMPDUPS_FEATURE, WLAN_PARAM_Integer,
struct hdd_config, enableAmpduPs, struct hdd_config, enableAmpduPs,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -3427,21 +3413,6 @@ struct reg_table_entry g_registry_table[] = {
CFG_ADAPTIVE_PNOSCAN_DWELL_MODE_MIN, CFG_ADAPTIVE_PNOSCAN_DWELL_MODE_MIN,
CFG_ADAPTIVE_PNOSCAN_DWELL_MODE_MAX), CFG_ADAPTIVE_PNOSCAN_DWELL_MODE_MAX),
#endif #endif
REG_VARIABLE(CFG_TX_CHAIN_MASK_CCK, WLAN_PARAM_Integer,
struct hdd_config, tx_chain_mask_cck,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_TX_CHAIN_MASK_CCK_DEFAULT,
CFG_TX_CHAIN_MASK_CCK_MIN,
CFG_TX_CHAIN_MASK_CCK_MAX),
REG_VARIABLE(CFG_TX_CHAIN_MASK_1SS, WLAN_PARAM_Integer,
struct hdd_config, tx_chain_mask_1ss,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_TX_CHAIN_MASK_1SS_DEFAULT,
CFG_TX_CHAIN_MASK_1SS_MIN,
CFG_TX_CHAIN_MASK_1SS_MAX),
REG_VARIABLE(CFG_ENABLE_SMART_CHAINMASK_NAME, WLAN_PARAM_Integer, REG_VARIABLE(CFG_ENABLE_SMART_CHAINMASK_NAME, WLAN_PARAM_Integer,
struct hdd_config, smart_chainmask_enabled, struct hdd_config, smart_chainmask_enabled,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -4437,20 +4408,6 @@ struct reg_table_entry g_registry_table[] = {
CFG_AUTO_DETECT_POWER_FAIL_MODE_MIN, CFG_AUTO_DETECT_POWER_FAIL_MODE_MIN,
CFG_AUTO_DETECT_POWER_FAIL_MODE_MAX), CFG_AUTO_DETECT_POWER_FAIL_MODE_MAX),
REG_VARIABLE(CFG_11B_NUM_TX_CHAIN_NAME, WLAN_PARAM_Integer,
struct hdd_config, num_11b_tx_chains,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_11B_NUM_TX_CHAIN_DEFAULT,
CFG_11B_NUM_TX_CHAIN_MIN,
CFG_11B_NUM_TX_CHAIN_MAX),
REG_VARIABLE(CFG_11AG_NUM_TX_CHAIN_NAME, WLAN_PARAM_Integer,
struct hdd_config, num_11ag_tx_chains,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_11AG_NUM_TX_CHAIN_DEFAULT,
CFG_11AG_NUM_TX_CHAIN_MIN,
CFG_11AG_NUM_TX_CHAIN_MAX),
REG_VARIABLE(CFG_ITO_REPEAT_COUNT_NAME, WLAN_PARAM_Integer, REG_VARIABLE(CFG_ITO_REPEAT_COUNT_NAME, WLAN_PARAM_Integer,
struct hdd_config, ito_repeat_count, struct hdd_config, ito_repeat_count,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -5033,34 +4990,6 @@ struct reg_table_entry g_registry_table[] = {
CFG_ENABLE_ESP_FEATURE_MIN, CFG_ENABLE_ESP_FEATURE_MIN,
CFG_ENABLE_ESP_FEATURE_MAX), CFG_ENABLE_ESP_FEATURE_MAX),
REG_VARIABLE(CFG_TX_CHAIN_MASK_2G_NAME, WLAN_PARAM_Integer,
struct hdd_config, tx_chain_mask_2g,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_TX_CHAIN_MASK_2G_DEFAULT,
CFG_TX_CHAIN_MASK_2G_MIN,
CFG_TX_CHAIN_MASK_2G_MAX),
REG_VARIABLE(CFG_RX_CHAIN_MASK_2G_NAME, WLAN_PARAM_Integer,
struct hdd_config, rx_chain_mask_2g,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_RX_CHAIN_MASK_2G_DEFAULT,
CFG_RX_CHAIN_MASK_2G_MIN,
CFG_RX_CHAIN_MASK_2G_MAX),
REG_VARIABLE(CFG_TX_CHAIN_MASK_5G_NAME, WLAN_PARAM_Integer,
struct hdd_config, tx_chain_mask_5g,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_TX_CHAIN_MASK_5G_DEFAULT,
CFG_TX_CHAIN_MASK_5G_MIN,
CFG_TX_CHAIN_MASK_5G_MAX),
REG_VARIABLE(CFG_RX_CHAIN_MASK_5G_NAME, WLAN_PARAM_Integer,
struct hdd_config, rx_chain_mask_5g,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_RX_CHAIN_MASK_5G_DEFAULT,
CFG_RX_CHAIN_MASK_5G_MIN,
CFG_RX_CHAIN_MASK_5G_MAX),
REG_VARIABLE(CFG_BTM_ENABLE_NAME, WLAN_PARAM_HexInteger, REG_VARIABLE(CFG_BTM_ENABLE_NAME, WLAN_PARAM_HexInteger,
struct hdd_config, btm_offload_config, struct hdd_config, btm_offload_config,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -7620,10 +7549,7 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
smeConfig->csrConfig.is_force_1x1 = smeConfig->csrConfig.is_force_1x1 =
hdd_ctx->config->is_force_1x1; hdd_ctx->config->is_force_1x1;
smeConfig->csrConfig.num_11b_tx_chains =
hdd_ctx->config->num_11b_tx_chains;
smeConfig->csrConfig.num_11ag_tx_chains =
hdd_ctx->config->num_11ag_tx_chains;
val = (pConfig->oce_probe_req_rate_enabled * val = (pConfig->oce_probe_req_rate_enabled *
WMI_VDEV_OCE_PROBE_REQUEST_RATE_FEATURE_BITMAP) + WMI_VDEV_OCE_PROBE_REQUEST_RATE_FEATURE_BITMAP) +
(pConfig->oce_probe_resp_rate_enabled * (pConfig->oce_probe_resp_rate_enabled *
@@ -7664,6 +7590,7 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
status = sme_update_config(mac_handle, smeConfig); status = sme_update_config(mac_handle, smeConfig);
if (!QDF_IS_STATUS_SUCCESS(status)) if (!QDF_IS_STATUS_SUCCESS(status))
hdd_err("sme_update_config() failure: %d", status); hdd_err("sme_update_config() failure: %d", status);
error: error:
qdf_mem_free(smeConfig); qdf_mem_free(smeConfig);
return status; return status;

View File

@@ -4463,22 +4463,13 @@ static void hdd_set_fw_log_params(struct hdd_context *hdd_ctx,
*/ */
static int hdd_configure_chain_mask(struct hdd_adapter *adapter) static int hdd_configure_chain_mask(struct hdd_adapter *adapter)
{ {
int ret_val;
QDF_STATUS status; QDF_STATUS status;
struct wma_caps_per_phy non_dbs_phy_cap; struct wma_caps_per_phy non_dbs_phy_cap;
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
hdd_debug("enable2x2: %d, lte_coex: %d, ChainMask1x1: tx: %d rx: %d", hdd_debug("enable2x2: %d, lte_coex: %d, disable_DBS: %d",
hdd_ctx->config->enable2x2, hdd_ctx->lte_coex_ant_share, hdd_ctx->config->enable2x2, hdd_ctx->lte_coex_ant_share,
hdd_ctx->config->txchainmask1x1, hdd_ctx->config->dual_mac_feature_disable);
hdd_ctx->config->rxchainmask1x1);
hdd_debug("disable_DBS: %d, tx_chain_mask_2g: %d, rx_chain_mask_2g: %d",
hdd_ctx->config->dual_mac_feature_disable,
hdd_ctx->config->tx_chain_mask_2g,
hdd_ctx->config->rx_chain_mask_2g);
hdd_debug("tx_chain_mask_5g: %d, rx_chain_mask_5g: %d",
hdd_ctx->config->tx_chain_mask_5g,
hdd_ctx->config->rx_chain_mask_5g);
hdd_debug("enable_bt_chain_separation %d", hdd_debug("enable_bt_chain_separation %d",
hdd_ctx->config->enable_bt_chain_separation); hdd_ctx->config->enable_bt_chain_separation);
@@ -4516,66 +4507,15 @@ static int hdd_configure_chain_mask(struct hdd_adapter *adapter)
return 0; return 0;
} }
if (hdd_ctx->config->txchainmask1x1) { status = ucfg_mlme_configure_chain_mask(hdd_ctx->hdd_psoc,
ret_val = sme_cli_set_command(adapter->session_id, adapter->session_id);
WMI_PDEV_PARAM_TX_CHAIN_MASK, if (status != QDF_STATUS_SUCCESS)
hdd_ctx->config->txchainmask1x1,
PDEV_CMD);
if (ret_val)
goto error; goto error;
}
if (hdd_ctx->config->rxchainmask1x1) {
ret_val = sme_cli_set_command(adapter->session_id,
WMI_PDEV_PARAM_RX_CHAIN_MASK,
hdd_ctx->config->rxchainmask1x1,
PDEV_CMD);
if (ret_val)
goto error;
}
if (hdd_ctx->config->txchainmask1x1 ||
hdd_ctx->config->rxchainmask1x1) {
hdd_debug("band agnostic tx/rx chain mask set. skip per band chain mask");
return 0;
}
if (hdd_ctx->config->tx_chain_mask_2g) {
ret_val = sme_cli_set_command(adapter->session_id,
WMI_PDEV_PARAM_TX_CHAIN_MASK_2G,
hdd_ctx->config->tx_chain_mask_2g, PDEV_CMD);
if (0 != ret_val)
goto error;
}
if (hdd_ctx->config->rx_chain_mask_2g) {
ret_val = sme_cli_set_command(adapter->session_id,
WMI_PDEV_PARAM_RX_CHAIN_MASK_2G,
hdd_ctx->config->rx_chain_mask_2g, PDEV_CMD);
if (0 != ret_val)
goto error;
}
if (hdd_ctx->config->tx_chain_mask_5g) {
ret_val = sme_cli_set_command(adapter->session_id,
WMI_PDEV_PARAM_TX_CHAIN_MASK_5G,
hdd_ctx->config->tx_chain_mask_5g, PDEV_CMD);
if (0 != ret_val)
goto error;
}
if (hdd_ctx->config->rx_chain_mask_5g) {
ret_val = sme_cli_set_command(adapter->session_id,
WMI_PDEV_PARAM_RX_CHAIN_MASK_5G,
hdd_ctx->config->rx_chain_mask_5g, PDEV_CMD);
if (0 != ret_val)
goto error;
}
return 0; return 0;
error: error:
hdd_err("WMI PDEV set param failed %d", ret_val); hdd_err("WMI PDEV set param failed");
return -EINVAL; return -EINVAL;
} }
@@ -9576,7 +9516,6 @@ static int hdd_update_cds_config(struct hdd_context *hdd_ctx)
hdd_ctx->config->ce_classify_enabled; hdd_ctx->config->ce_classify_enabled;
cds_cfg->apf_packet_filter_enable = cds_cfg->apf_packet_filter_enable =
hdd_ctx->config->apf_packet_filter_enable; hdd_ctx->config->apf_packet_filter_enable;
cds_cfg->tx_chain_mask_cck = hdd_ctx->config->tx_chain_mask_cck;
cds_cfg->self_gen_frm_pwr = hdd_ctx->config->self_gen_frm_pwr; cds_cfg->self_gen_frm_pwr = hdd_ctx->config->self_gen_frm_pwr;
cds_cfg->max_station = hdd_ctx->config->maxNumberOfPeers; cds_cfg->max_station = hdd_ctx->config->maxNumberOfPeers;
cds_cfg->sub_20_channel_width = WLAN_SUB_20_CH_WIDTH_NONE; cds_cfg->sub_20_channel_width = WLAN_SUB_20_CH_WIDTH_NONE;
@@ -10116,6 +10055,7 @@ static int hdd_set_ani_enabled(struct hdd_context *hdd_ctx)
static int hdd_pre_enable_configure(struct hdd_context *hdd_ctx) static int hdd_pre_enable_configure(struct hdd_context *hdd_ctx)
{ {
int ret; int ret;
uint8_t val = 0;
QDF_STATUS status; QDF_STATUS status;
void *soc = cds_get_context(QDF_MODULE_ID_SOC); void *soc = cds_get_context(QDF_MODULE_ID_SOC);
@@ -10151,8 +10091,13 @@ static int hdd_pre_enable_configure(struct hdd_context *hdd_ctx)
goto out; goto out;
} }
ret = sme_cli_set_command(0, WMI_PDEV_PARAM_TX_CHAIN_MASK_1SS, status = ucfg_mlme_get_tx_chainmask_1ss(hdd_ctx->hdd_psoc, &val);
hdd_ctx->config->tx_chain_mask_1ss, if (QDF_STATUS_SUCCESS != status) {
hdd_err("Get tx_chainmask_1ss from mlme failed");
ret = qdf_status_to_os_return(status);
goto out;
}
ret = sme_cli_set_command(0, WMI_PDEV_PARAM_TX_CHAIN_MASK_1SS, val,
PDEV_CMD); PDEV_CMD);
if (0 != ret) { if (0 != ret) {
hdd_err("WMI_PDEV_PARAM_TX_CHAIN_MASK_1SS failed %d", ret); hdd_err("WMI_PDEV_PARAM_TX_CHAIN_MASK_1SS failed %d", ret);
@@ -10736,8 +10681,8 @@ int hdd_configure_cds(struct hdd_context *hdd_ctx)
int set_value; int set_value;
mac_handle_t mac_handle; mac_handle_t mac_handle;
uint32_t num_abg_tx_chains = 0; uint32_t num_abg_tx_chains = 0;
uint32_t num_11b_tx_chains = 0; uint16_t num_11b_tx_chains = 0;
uint32_t num_11ag_tx_chains = 0; uint16_t num_11ag_tx_chains = 0;
struct policy_mgr_dp_cbacks dp_cbs = {0}; struct policy_mgr_dp_cbacks dp_cbs = {0};
mac_handle = hdd_ctx->mac_handle; mac_handle = hdd_ctx->mac_handle;
@@ -10771,8 +10716,20 @@ int hdd_configure_cds(struct hdd_context *hdd_ctx)
set_value, PDEV_CMD); set_value, PDEV_CMD);
} }
num_11b_tx_chains = hdd_ctx->config->num_11b_tx_chains; status = ucfg_mlme_get_num_11b_tx_chains(hdd_ctx->hdd_psoc,
num_11ag_tx_chains = hdd_ctx->config->num_11ag_tx_chains; &num_11b_tx_chains);
if (status != QDF_STATUS_SUCCESS) {
hdd_err("Failed to get num_11b_tx_chains");
goto out;
}
status = ucfg_mlme_get_num_11ag_tx_chains(hdd_ctx->hdd_psoc,
&num_11ag_tx_chains);
if (status != QDF_STATUS_SUCCESS) {
hdd_err("Failed to get num_11ag_tx_chains");
goto out;
}
if (!hdd_ctx->config->enable2x2) { if (!hdd_ctx->config->enable2x2) {
if (num_11b_tx_chains > 1) if (num_11b_tx_chains > 1)
num_11b_tx_chains = 1; num_11b_tx_chains = 1;

View File

@@ -1278,8 +1278,6 @@ typedef struct tagCsrConfigParam {
uint8_t fils_max_chan_guard_time; uint8_t fils_max_chan_guard_time;
uint16_t pkt_err_disconn_th; uint16_t pkt_err_disconn_th;
bool is_force_1x1; bool is_force_1x1;
uint16_t num_11b_tx_chains;
uint16_t num_11ag_tx_chains;
uint32_t disallow_duration; uint32_t disallow_duration;
uint32_t rssi_channel_penalization; uint32_t rssi_channel_penalization;
uint32_t num_disallowed_aps; uint32_t num_disallowed_aps;

View File

@@ -583,8 +583,6 @@ struct csr_config {
uint8_t fils_max_chan_guard_time; uint8_t fils_max_chan_guard_time;
uint16_t pkt_err_disconn_th; uint16_t pkt_err_disconn_th;
bool is_force_1x1; bool is_force_1x1;
uint16_t num_11b_tx_chains;
uint16_t num_11ag_tx_chains;
uint32_t disallow_duration; uint32_t disallow_duration;
uint32_t rssi_channel_penalization; uint32_t rssi_channel_penalization;
uint32_t num_disallowed_aps; uint32_t num_disallowed_aps;

View File

@@ -90,6 +90,7 @@
#include "service_ready_param.h" #include "service_ready_param.h"
#include "wlan_cp_stats_mc_ucfg_api.h" #include "wlan_cp_stats_mc_ucfg_api.h"
#include "cfg_nan_api.h" #include "cfg_nan_api.h"
#include "wlan_mlme_api.h"
#define WMA_LOG_COMPLETION_TIMER 3000 /* 3 seconds */ #define WMA_LOG_COMPLETION_TIMER 3000 /* 3 seconds */
#define WMI_TLV_HEADROOM 128 #define WMI_TLV_HEADROOM 128
@@ -3102,6 +3103,7 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
struct policy_mgr_wma_cbacks wma_cbacks; struct policy_mgr_wma_cbacks wma_cbacks;
struct target_psoc_info *tgt_psoc_info; struct target_psoc_info *tgt_psoc_info;
int i; int i;
bool val = 0;
void *cds_context; void *cds_context;
target_resource_config *wlan_res_cfg; target_resource_config *wlan_res_cfg;
@@ -3245,7 +3247,13 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
wma_set_default_tgt_config(wma_handle, wlan_res_cfg, cds_cfg); wma_set_default_tgt_config(wma_handle, wlan_res_cfg, cds_cfg);
wma_handle->tx_chain_mask_cck = cds_cfg->tx_chain_mask_cck; qdf_status = wlan_mlme_get_tx_chainmask_cck(psoc, &val);
if (qdf_status != QDF_STATUS_SUCCESS) {
WMA_LOGE("%s: Failed to get tx_chainmask_cck", __func__);
qdf_status = QDF_STATUS_E_FAILURE;
goto err_wma_handle;
}
wma_handle->tx_chain_mask_cck = val;
wma_handle->self_gen_frm_pwr = cds_cfg->self_gen_frm_pwr; wma_handle->self_gen_frm_pwr = cds_cfg->self_gen_frm_pwr;
cds_cfg->max_bssid = WMA_MAX_SUPPORTED_BSS; cds_cfg->max_bssid = WMA_MAX_SUPPORTED_BSS;