wlan: IBSS Support for 11AC and 11N
The current IBSS implementation does not support 11N and
11AC rates. The changeset provides support for 11N HT40
VHT20, VHT40 and VHT80 rates.
Change-Id: If17d9e8992b5902496df323f65ca04d6b166e216
CRs-Fixed: 478476
Conflicts:
prima/CORE/SME/inc/sme_Api.h
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index a995be1..72ba8a0 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -8210,3 +8210,96 @@
}
return;
}
+
+/*
+ * SME API to determine the channel bonding mode
+ */
+VOS_STATUS sme_SelectCBMode(tHalHandle hHal, eCsrPhyMode eCsrPhyMode, tANI_U8 channel)
+{
+ tSmeConfigParams smeConfig;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+
+ if (
+#ifdef WLAN_FEATURE_11AC
+ eCSR_DOT11_MODE_11ac != eCsrPhyMode &&
+ eCSR_DOT11_MODE_11ac_ONLY != eCsrPhyMode &&
+#endif
+ eCSR_DOT11_MODE_11n != eCsrPhyMode &&
+ eCSR_DOT11_MODE_11n_ONLY != eCsrPhyMode
+ )
+ {
+ return VOS_STATUS_SUCCESS;
+ }
+
+ /* If channel bonding mode is not required */
+ if ( !pMac->roam.configParam.channelBondingMode5GHz ) {
+ return VOS_STATUS_SUCCESS;
+ }
+
+ vos_mem_zero(&smeConfig, sizeof (tSmeConfigParams));
+ sme_GetConfigParam(pMac, &smeConfig);
+
+#ifdef WLAN_FEATURE_11AC
+ if ( eCSR_DOT11_MODE_11ac == eCsrPhyMode ||
+ eCSR_DOT11_MODE_11ac_ONLY == eCsrPhyMode )
+ {
+ if ( channel== 36 || channel == 52 || channel == 100 ||
+ channel == 116 || channel == 149 )
+ {
+ smeConfig.csrConfig.channelBondingMode5GHz =
+ PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW - 1;
+ }
+ else if ( channel == 40 || channel == 56 || channel == 104 ||
+ channel == 120 || channel == 153 )
+ {
+ smeConfig.csrConfig.channelBondingMode5GHz =
+ PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW - 1;
+ }
+ else if ( channel == 44 || channel == 60 || channel == 108 ||
+ channel == 124 || channel == 157 )
+ {
+ smeConfig.csrConfig.channelBondingMode5GHz =
+ PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH -1;
+ }
+ else if ( channel == 48 || channel == 64 || channel == 112 ||
+ channel == 128 || channel == 161 )
+ {
+ smeConfig.csrConfig.channelBondingMode5GHz =
+ PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH - 1;
+ }
+ else if ( channel == 165 )
+ {
+ smeConfig.csrConfig.channelBondingMode5GHz = 0;
+ }
+ }
+#endif
+
+ if ( eCSR_DOT11_MODE_11n == eCsrPhyMode ||
+ eCSR_DOT11_MODE_11n_ONLY == eCsrPhyMode )
+ {
+ if ( channel== 40 || channel == 48 || channel == 56 ||
+ channel == 64 || channel == 104 || channel == 112 ||
+ channel == 120 || channel == 128 || channel == 136 ||
+ channel == 144 || channel == 153 || channel == 161 )
+ {
+ smeConfig.csrConfig.channelBondingMode5GHz = 1;
+ }
+ else if ( channel== 36 || channel == 44 || channel == 52 ||
+ channel == 60 || channel == 100 || channel == 108 ||
+ channel == 116 || channel == 124 || channel == 132 ||
+ channel == 140 || channel == 149 || channel == 157 )
+ {
+ smeConfig.csrConfig.channelBondingMode5GHz = 2;
+ }
+ else if ( channel == 165 )
+ {
+ smeConfig.csrConfig.channelBondingMode5GHz = 0;
+ }
+ }
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "cbmode selected=%ld\n", smeConfig.csrConfig.channelBondingMode5GHz);
+
+ sme_UpdateConfig (pMac, &smeConfig);
+ return VOS_STATUS_SUCCESS;
+}
+