summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKabilan Kannan <kabilank@qca.qualcomm.com>2016-01-27 17:30:05 -0800
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-01-29 15:24:40 +0530
commit6d9f9130ad7a236a77176d5825f2e52ff1fb2e53 (patch)
treef3648bf5f0f8c3588dd9e1eddd6033bf3ceedcfa
parent3e2ce08e445cbc26e9ec02c1a88b113a7f41914d (diff)
qcacld-2.0: Support NSS configuration for TDLS from user space
TDLS NSS can be changed dynamically by the user, if that happens the newer NSS value needs to be recorded in the MAC context and should be used to form TDLS management frames. Update driver to keep the user configured NSS value in the MAC context and uses the NSS value in the tdls protocol engine to construct management frames. Change-Id: I4098e3c5e3a03c4de6ae40c837a5616613623979 CRs-Fixed: 968106
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c7
-rw-r--r--CORE/MAC/inc/aniGlobal.h1
-rw-r--r--CORE/MAC/src/pe/lim/limProcessTdls.c2
-rw-r--r--CORE/SME/inc/sme_Api.h1
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c16
5 files changed, 27 insertions, 0 deletions
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index c1a958e898e6..d39679686923 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -5137,6 +5137,13 @@ static int drv_cmd_set_antenna_mode(hdd_adapter_t *adapter,
hdd_ctx->current_antenna_mode =
HDD_ANTENNA_MODE_2X2;
}
+ /* Update the user requested nss in the mac context.
+ * This will be used in tdls protocol engine to form tdls
+ * Management frames.
+ */
+ sme_update_user_configured_nss(
+ hdd_ctx->hHal,
+ hdd_ctx->current_antenna_mode);
}
exit:
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 4a7a81a8c7d4..34f3904ad43f 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -1256,6 +1256,7 @@ typedef struct sAniSirGlobal
bool per_band_chainmask_supp;
struct vdev_type_nss vdev_type_nss_2g;
struct vdev_type_nss vdev_type_nss_5g;
+ uint8_t user_configured_nss;
t_auth_ack_status auth_ack_status;
bool first_scan_done;
int8_t first_scan_bucket_threshold;
diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c
index 527a3101a4d2..e0da5e1d19f9 100644
--- a/CORE/MAC/src/pe/lim/limProcessTdls.c
+++ b/CORE/MAC/src/pe/lim/limProcessTdls.c
@@ -571,6 +571,7 @@ static void PopulateDot11fTdlsHtVhtCap(tpAniSirGlobal pMac, uint32 selfDot11Mode
else
nss = pMac->vdev_type_nss_2g.tdls;
+ nss = VOS_MIN(nss, pMac->user_configured_nss);
if (IS_DOT11_MODE_HT(selfDot11Mode))
{
/* Include HT Capability IE */
@@ -2235,6 +2236,7 @@ limTdlsPopulateMatchingRateSet(tpAniSirGlobal pMac,
nss = pMac->vdev_type_nss_5g.tdls;
else
nss = pMac->vdev_type_nss_2g.tdls;
+ nss = VOS_MIN(nss, pMac->user_configured_nss);
//compute the matching MCS rate set, if peer is 11n capable and self mode is 11n
#ifdef FEATURE_WLAN_TDLS
if (pStaDs->mlmStaContext.htCapability)
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 7e2562db1e16..a448ca307034 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4438,6 +4438,7 @@ void sme_set_pdev_ht_vht_ies(tHalHandle hHal, bool enable2x2);
void sme_update_vdev_type_nss(tHalHandle hal, uint8_t max_supp_nss,
uint32_t vdev_type_nss, eCsrBand band);
+void sme_update_user_configured_nss(tHalHandle hal, uint8_t nss);
void sme_set_vdev_nss(tHalHandle hal, bool enable2x2);
void sme_set_per_band_chainmask_supp(tHalHandle hal, bool val);
void sme_set_lte_coex_supp(tHalHandle hal, bool val);
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 3457ba7f6ddf..8558d544905a 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -17463,6 +17463,20 @@ void sme_SetDefDot11Mode(tHalHandle hal)
tpAniSirGlobal mac_ctx = PMAC_STRUCT( hal );
csrSetDefaultDot11Mode(mac_ctx);
}
+
+/**
+ * sme_update_user_configured_nss() - sets the nss based on user request
+ * @hal: Pointer to HAL
+ * @nss: number of streams
+ *
+ * Return: None
+ */
+void sme_update_user_configured_nss(tHalHandle hal, uint8_t nss)
+{
+ tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
+ mac_ctx->user_configured_nss = nss;
+}
+
/**
* sme_set_vdev_nss() - sets the vdev nss based on INI
* @hal: Pointer to HAL
@@ -17490,6 +17504,7 @@ void sme_set_vdev_nss(tHalHandle hal, bool enable2x2)
nss_val = 1;
coex = 0;
}
+ mac_ctx->user_configured_nss = nss_val;
vdev_nss = &mac_ctx->vdev_type_nss_2g;
@@ -17542,6 +17557,7 @@ void sme_update_vdev_type_nss(tHalHandle hal, uint8_t max_supp_nss,
vdev_nss->ibss = VOS_MIN(max_supp_nss, CFG_IBSS_NSS(vdev_type_nss));
vdev_nss->tdls = VOS_MIN(max_supp_nss, CFG_TDLS_NSS(vdev_type_nss));
vdev_nss->ocb = VOS_MIN(max_supp_nss, CFG_OCB_NSS(vdev_type_nss));
+ mac_ctx->user_configured_nss = max_supp_nss;
smsLog(mac_ctx, LOG1,
"band %d NSS: sta %d sap %d cli %d go %d dev %d ibss %d tdls %d ocb %d",