qcacld-3.0: Add configuration support to enable/disable Tx BF

Add support to dynamically enable/disable the tx beamformee
support.

Change-Id: I205fd352d731e9b26654b8bbbbc459d2798b03be
CRs-Fixed: 2241816
This commit is contained in:
Kiran Kumar Lokere
2018-05-14 18:12:27 -07:00
committed by nshrivas
parent 0cbe1791e7
commit 6c7f3fae12
4 changed files with 86 additions and 12 deletions

View File

@@ -6206,6 +6206,8 @@ wlan_hdd_wifi_test_config_policy[
.type = NLA_U8},
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_LTF] = {
.type = NLA_U8},
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ENABLE_TX_BEAMFORMEE] = {
.type = NLA_U8},
};
/**
@@ -7400,6 +7402,18 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
goto send_err;
}
if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ENABLE_TX_BEAMFORMEE]) {
cfg_val = nla_get_u8(tb[
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ENABLE_TX_BEAMFORMEE]);
hdd_debug("Set Tx beamformee to %d", cfg_val);
ret_val = sme_update_tx_bfee_supp(hdd_ctx->hHal,
adapter->session_id,
cfg_val);
if (ret_val)
sme_err("Failed to set Tx beamformee cap");
}
if (update_sme_cfg)
sme_update_config(hdd_ctx->hHal, sme_config);

View File

@@ -1058,6 +1058,17 @@ QDF_STATUS sme_update_roam_scan_hi_rssi_scan_params(tHalHandle hal_handle,
uint32_t notify_id,
int32_t val);
/**
* sme_update_tx_bfee_supp() - sets the Tx Bfee support
* @hal: Pointer to HAL
* @session_id: SME session id
* @cfg_val: Tx Bfee config value
*
* Return: 0 on success else err code
*/
int sme_update_tx_bfee_supp(tHalHandle hal, uint8_t session_id,
uint8_t cfg_val);
void wlan_sap_enable_phy_error_logs(tHalHandle hal, uint32_t enable_log);
#ifdef WLAN_FEATURE_DSRC
void sme_set_dot11p_config(tHalHandle hal, bool enable_dot11p);
@@ -2118,6 +2129,16 @@ int sme_set_auto_rate_he_ltf(tHalHandle hal, uint8_t session_id,
void sme_update_he_cap_nss(tHalHandle hal, uint8_t session_id,
uint8_t nss);
/**
* sme_update_he_tx_bfee_supp() - sets the HE Tx Bfee support
* @hal: Pointer to HAL
* @session_id: SME session id
* @cfg_val: Tx Bfee config value
*
* Return: 0 on success else err code
*/
int sme_update_he_tx_bfee_supp(tHalHandle hal, uint8_t session_id,
uint8_t cfg_val);
/**
* sme_update_he_mcs() - sets the HE MCS based on user request
* @hal: Pointer to HAL
@@ -2194,11 +2215,18 @@ static inline int sme_update_he_frag_supp(tHalHandle hal, uint8_t session_id,
{
return 0;
}
static inline int sme_update_he_ldpc_supp(tHalHandle hal, uint8_t session_id,
uint16_t he_ldpc)
{
return 0;
}
static inline int sme_update_he_tx_bfee_supp(tHalHandle hal, uint8_t session_id,
uint8_t cfg_val)
{
return 0;
}
#endif
/**

View File

@@ -12934,6 +12934,20 @@ void sme_update_user_configured_nss(tHalHandle hal, uint8_t nss)
mac_ctx->user_configured_nss = nss;
}
int sme_update_tx_bfee_supp(tHalHandle hal, uint8_t session_id,
uint8_t cfg_val)
{
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
QDF_STATUS status = QDF_STATUS_SUCCESS;
status = sme_cfg_set_int(mac_ctx, WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
cfg_val);
if (status != QDF_STATUS_SUCCESS) {
sme_err("Failed to set SU BFEE CFG");
return -EFAULT;
}
return sme_update_he_tx_bfee_supp(hal, session_id, cfg_val);
}
#ifdef WLAN_FEATURE_11AX
void sme_update_he_cap_nss(tHalHandle hal, uint8_t session_id,
uint8_t nss)
@@ -13043,6 +13057,13 @@ static int sme_update_he_cap(tHalHandle hal, uint8_t session_id,
return 0;
}
int sme_update_he_tx_bfee_supp(tHalHandle hal, uint8_t session_id,
uint8_t cfg_val)
{
return sme_update_he_cap(hal, session_id, WNI_CFG_HE_SU_BEAMFORMEE,
cfg_val);
}
int sme_update_he_tx_stbc_cap(tHalHandle hal, uint8_t session_id, int value)
{
int ret;

View File

@@ -2502,20 +2502,31 @@ void csr_update_session_he_cap(tpAniSirGlobal mac_ctx,
he_cap->dcm_enc_rx = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_MU_PPDU, &value);
he_cap->ul_he_mu = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_SU_BEAMFORMER, &value);
he_cap->su_beamformer = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_SU_BEAMFORMEE, &value);
he_cap->su_beamformee = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_MU_BEAMFORMER, &value);
he_cap->mu_beamformer = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_BFEE_STS_LT80, &value);
he_cap->bfee_sts_lt_80 = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_BFEE_STS_GT80, &value);
he_cap->bfee_sts_gt_80 = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_NUM_SOUND_LT80, &value);
he_cap->num_sounding_lt_80 = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_NUM_SOUND_GT80, &value);
he_cap->num_sounding_gt_80 = value;
if (he_cap->su_beamformee) {
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_BFEE_STS_LT80, &value);
he_cap->bfee_sts_lt_80 = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_BFEE_STS_GT80, &value);
he_cap->bfee_sts_gt_80 = value;
} else {
he_cap->bfee_sts_lt_80 = 0;
he_cap->bfee_sts_gt_80 = 0;
}
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_SU_BEAMFORMER, &value);
he_cap->su_beamformer = value;
if (he_cap->su_beamformer) {
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_MU_BEAMFORMER, &value);
he_cap->mu_beamformer = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_NUM_SOUND_LT80, &value);
he_cap->num_sounding_lt_80 = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_NUM_SOUND_GT80, &value);
he_cap->num_sounding_gt_80 = value;
} else {
he_cap->mu_beamformer = 0;
he_cap->num_sounding_lt_80 = 0;
he_cap->num_sounding_gt_80 = 0;
}
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_SU_FEED_TONE16, &value);
he_cap->su_feedback_tone16 = value;
sme_cfg_get_int(mac_ctx, WNI_CFG_HE_MU_FEED_TONE16, &value);