wlan: Fix for SAP turning ON on invalid channels for a given CC
Avoid SAP turning ON on invalid channels when a particular country
code is set in hostapd.conf due to race condition between reg
notifier and nv bin based channel initializtion during driver load.
This commit ensures reg_notifier callback is called once the
channels are initialized based on nv bin, thus updating the latest
reg domain set by the notifier callback.
Change-Id: I4e8e9e9a86a58c8bf4c4ee9ebb85ba691694bd1c
CRs-Fixed: 661014
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 1c4679a..36f170c 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -349,7 +349,7 @@
status = csrInitGetChannels( pMac );
#endif
}while(0);
-
+
return (status);
}
@@ -363,7 +363,7 @@
eHalStatus status = eHAL_STATUS_SUCCESS;
static uNvTables nvTables;
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
- v_REGDOMAIN_t regId;
+ v_REGDOMAIN_t regId = REGDOMAIN_WORLD;
vosStatus = vos_nv_readDefaultCountryTable( &nvTables );
if ( VOS_IS_STATUS_SUCCESS(vosStatus) )
@@ -382,17 +382,6 @@
}
smsLog( pMac, LOG1, FL(" country Code from nvRam %.2s"), pMac->scan.countryCodeDefault );
- if (!('0' == pMac->scan.countryCodeDefault[0] &&
- '0' == pMac->scan.countryCodeDefault[1]))
- {
- csrGetRegulatoryDomainForCountry(pMac, pMac->scan.countryCodeDefault,
- ®Id, COUNTRY_NV);
- }
- else
- {
- regId = REGDOMAIN_WORLD;
- }
-
WDA_SetRegDomain(pMac, regId, eSIR_TRUE);
pMac->scan.domainIdDefault = regId;
pMac->scan.domainIdCurrent = pMac->scan.domainIdDefault;
@@ -406,6 +395,31 @@
return status;
}
+eHalStatus csrInitChannelsForCC(tpAniSirGlobal pMac)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ v_REGDOMAIN_t regId = REGDOMAIN_WORLD;
+
+ if (!('0' == pMac->scan.countryCodeDefault[0] &&
+ '0' == pMac->scan.countryCodeDefault[1]))
+ {
+ csrGetRegulatoryDomainForCountry(pMac, pMac->scan.countryCodeDefault,
+ ®Id, COUNTRY_NV);
+
+ }
+ else
+ {
+ return status;
+ }
+ WDA_SetRegDomain(pMac, regId, eSIR_TRUE);
+ pMac->scan.domainIdDefault = regId;
+ pMac->scan.domainIdCurrent = pMac->scan.domainIdDefault;
+ vos_mem_copy(pMac->scan.countryCodeCurrent, pMac->scan.countryCodeDefault,
+ WNI_CFG_COUNTRY_CODE_LEN);
+ status = csrInitGetChannels( pMac );
+ return status;
+}
+
eHalStatus csrSetRegInfo(tHalHandle hHal, tANI_U8 *apCntryCode)
{
eHalStatus status = eHAL_STATUS_SUCCESS;