qcacld-3.0: Enable Tx beamformee in SAP mode

Currently Tx beamformee feature is enabled only in STA mode.
Add knob to enable or disable the Tx beamformee feature in SAP
mode

Change-Id: I6ea218b3bff6c973688aad716a3f1a3c8acc469b
CRs-Fixed: 963034
This commit is contained in:
Kiran Kumar Lokere
2015-12-16 16:03:16 -08:00
committed by Akash Patel
parent 945c02a9d6
commit 381c39f7c4
10 changed files with 51 additions and 17 deletions

View File

@@ -367,6 +367,9 @@ gEnableRXLDPC=1
#Enable/Disable Tx beamforming
gTxBFEnable=1
#Enable/Disable Tx beamformee in SAP mode
gEnableTxBFeeSAP=1
# Enable Tx beamforming in VHT20MHz
# Valid values are 0,1. If commented out, the default value is 0.
# 0=disable, 1=enable

View File

@@ -1739,6 +1739,15 @@ typedef enum {
#define CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MAX (WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STAMAX)
#define CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_DEFAULT (WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STADEF)
/*
* Enable / Disable Tx beamformee in SAP mode
* Default: Disable
*/
#define CFG_VHT_ENABLE_TXBF_SAP_MODE "gEnableTxBFeeSAP"
#define CFG_VHT_ENABLE_TXBF_SAP_MODE_MIN (0)
#define CFG_VHT_ENABLE_TXBF_SAP_MODE_MAX (1)
#define CFG_VHT_ENABLE_TXBF_SAP_MODE_DEFAULT (0)
#define CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED "gTxBFCsnValue"
#define CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_MIN (WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMIN)
#define CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_MAX (WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMAX - 1)
@@ -3154,6 +3163,7 @@ struct hdd_config {
uint8_t vhtRxMCS;
uint8_t vhtTxMCS;
bool enableTxBF;
bool enable_txbf_sap_mode;
uint8_t txBFCsnValue;
bool enable_su_tx_bformer;
uint8_t vhtRxMCS2x2;

View File

@@ -2427,6 +2427,13 @@ REG_TABLE_ENTRY g_registry_table[] = {
CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MIN,
CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MAX),
REG_VARIABLE(CFG_VHT_ENABLE_TXBF_SAP_MODE, WLAN_PARAM_Integer,
struct hdd_config, enable_txbf_sap_mode,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_VHT_ENABLE_TXBF_SAP_MODE_DEFAULT,
CFG_VHT_ENABLE_TXBF_SAP_MODE_MIN,
CFG_VHT_ENABLE_TXBF_SAP_MODE_MAX),
REG_VARIABLE(CFG_VHT_ENABLE_TXBF_IN_20MHZ, WLAN_PARAM_Integer,
struct hdd_config, enableTxBFin20MHz,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -6485,6 +6492,8 @@ CDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx)
#ifdef WLAN_FEATURE_11AC
smeConfig->csrConfig.nVhtChannelWidth = pConfig->vhtChannelWidth;
smeConfig->csrConfig.enableTxBF = pConfig->enableTxBF;
smeConfig->csrConfig.enable_txbf_sap_mode =
pConfig->enable_txbf_sap_mode;
smeConfig->csrConfig.txBFCsnValue = pConfig->txBFCsnValue;
smeConfig->csrConfig.enable2x2 = pConfig->enable2x2;
smeConfig->csrConfig.enableVhtFor24GHz = pConfig->enableVhtFor24GHzBand;

View File

@@ -610,6 +610,8 @@ typedef struct sSirSmeStartBssReq {
uint8_t center_freq_seg0;
uint8_t center_freq_seg1;
uint8_t sec_ch_offset;
bool txbf_ini_enabled;
uint8_t txbf_csn_val;
uint8_t privacy;
uint8_t apUapsdEnable;

View File

@@ -330,6 +330,7 @@ typedef struct sPESession /* Added to Support BT-AMP */
phy_ch_width ch_width;
uint8_t ch_center_freq_seg1;
uint8_t txBFIniFeatureEnabled;
uint8_t txbf_csn_value;
uint8_t txMuBformee;
uint8_t enableVhtpAid;
uint8_t enableVhtGid;

View File

@@ -718,7 +718,6 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
session->vhtCapability);
session->txLdpcIniFeatureEnabled =
sme_start_bss_req->txLdpcIniFeatureEnabled;
if (mac_ctx->roam.configParam.enable2x2)
session->nss = 2;
else
@@ -741,6 +740,12 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
case eSIR_INFRA_AP_MODE:
lim_configure_ap_start_bss_session(mac_ctx, session,
sme_start_bss_req);
if (session->pePersona == CDF_SAP_MODE) {
session->txBFIniFeatureEnabled =
sme_start_bss_req->txbf_ini_enabled;
session->txbf_csn_value =
sme_start_bss_req->txbf_csn_val;
}
break;
case eSIR_IBSS_MODE:
session->limSystemRole = eLIM_STA_IN_IBSS_ROLE;
@@ -1740,17 +1745,7 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
CDF_TRACE(CDF_MODULE_ID_PE, CDF_TRACE_LEVEL_INFO_MED,
"%s: txBFCsnValue=%d", __func__,
sme_join_req->txBFCsnValue);
if (cfg_set_int(mac_ctx,
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
sme_join_req->txBFCsnValue) != eSIR_SUCCESS) {
/*
* Set Failed for CFG
* CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED
*/
lim_log(mac_ctx, LOGP, FL("Set Fail CFG"));
ret_code = eSIR_LOGP_EXCEPTION;
goto end;
}
session->txbf_csn_value = sme_join_req->txBFCsnValue;
}
#endif

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
* Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1002,6 +1002,8 @@ populate_dot11f_vht_caps(tpAniSirGlobal pMac,
CFG_GET_INT(nStatus, pMac,
WNI_CFG_VHT_MU_BEAMFORMEE_CAP, nCfgValue);
pDot11f->muBeamformeeCap = (nCfgValue & 0x0001);
pDot11f->csnofBeamformerAntSup =
psessionEntry->txbf_csn_value;
} else {
pDot11f->muBeamformeeCap = 0;
}
@@ -1037,11 +1039,13 @@ populate_dot11f_vht_caps(tpAniSirGlobal pMac,
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_SU_BEAMFORMER_CAP,
nCfgValue);
pDot11f->suBeamFormerCap = (nCfgValue & 0x0001);
nCfgValue = 0;
CFG_GET_INT(nStatus, pMac,
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
nCfgValue);
pDot11f->csnofBeamformerAntSup = (nCfgValue & 0x0007);
}
nCfgValue = 0;
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
nCfgValue);
pDot11f->csnofBeamformerAntSup = (nCfgValue & 0x0007);
nCfgValue = 0;
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS,

View File

@@ -1166,6 +1166,7 @@ typedef struct tagCsrConfigParam {
#ifdef WLAN_FEATURE_11AC
uint32_t nVhtChannelWidth;
uint8_t enableTxBF;
uint8_t enable_txbf_sap_mode;
uint8_t txBFCsnValue;
uint8_t enable2x2;
bool enableVhtFor24GHz;

View File

@@ -601,6 +601,7 @@ typedef struct tagCsrConfig {
#ifdef WLAN_FEATURE_11AC
uint32_t nVhtChannelWidth;
uint8_t txBFEnable;
uint8_t enable_txbf_sap_mode;
uint8_t txBFCsnValue;
uint8_t enable2x2;
bool enableVhtFor24GHz;

View File

@@ -2026,6 +2026,8 @@ CDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
pMac->roam.configParam.nVhtChannelWidth =
pParam->nVhtChannelWidth;
pMac->roam.configParam.txBFEnable = pParam->enableTxBF;
pMac->roam.configParam.enable_txbf_sap_mode =
pParam->enable_txbf_sap_mode;
pMac->roam.configParam.txBFCsnValue = pParam->txBFCsnValue;
pMac->roam.configParam.enable2x2 = pParam->enable2x2;
pMac->roam.configParam.enableVhtFor24GHz =
@@ -2189,6 +2191,8 @@ CDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
#ifdef WLAN_FEATURE_11AC
pParam->nVhtChannelWidth = cfg_params->nVhtChannelWidth;
pParam->enableTxBF = cfg_params->txBFEnable;
pParam->enable_txbf_sap_mode =
cfg_params->enable_txbf_sap_mode;
pParam->txBFCsnValue = cfg_params->txBFCsnValue;
pParam->enableMuBformee = cfg_params->txMuBformee;
pParam->enableVhtFor24GHz = cfg_params->enableVhtFor24GHz;
@@ -14600,6 +14604,10 @@ CDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId
pMsg->isCoalesingInIBSSAllowed = pMac->isCoalesingInIBSSAllowed;
pMsg->bssPersona = pParam->bssPersona;
pMsg->txLdpcIniFeatureEnabled = pMac->roam.configParam.txLdpcEnable;
pMsg->txbf_ini_enabled =
(uint8_t)pMac->roam.configParam.txBFEnable &&
(uint8_t)pMac->roam.configParam.enable_txbf_sap_mode;
pMsg->txbf_csn_val = (uint8_t)pMac->roam.configParam.txBFCsnValue;
#ifdef WLAN_FEATURE_11W
pMsg->pmfCapable = pParam->mfpCapable;
pMsg->pmfRequired = pParam->mfpRequired;