summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManikandan Mohan <manikand@qca.qualcomm.com>2014-12-15 13:19:14 -0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-12-17 16:02:55 +0530
commitb9ac48659fa933b57e4394ebd9dc70368f90dc5f (patch)
tree4d4a8336f05d41d59b3d790c10d52e4f0ca6b2a2
parenta9cbf06d76a31dc4e5b8cb5540f55c0553dab829 (diff)
qcacld SAP: Check and extend ACS range for DFS
Update SAP ACS extend range function to include DFS channels only when extending ACS range if start or end channel is a DFS channel. Active scanning in adjacent non DFS channels results in transmission spikes in DFS specturm channels. Remove the active channels from extended ACS range for DFS only range Change-Id: I38908eec1506f172b94289a1fb07c66de2cca6f4 CRs-fixed: 771361
-rw-r--r--CORE/SAP/src/sapModule.c151
1 files changed, 87 insertions, 64 deletions
diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c
index 5ca1f3001403..b0039037f7a9 100644
--- a/CORE/SAP/src/sapModule.c
+++ b/CORE/SAP/src/sapModule.c
@@ -3546,74 +3546,97 @@ v_VOID_t WLANSAP_extend_to_acs_range(v_U8_t operatingBand,
v_U8_t *bandStartChannel,
v_U8_t *bandEndChannel)
{
-#define ACS_2G_EXTEND 4
-#define ACS_5G_EXTEND 12
+#define ACS_WLAN_20M_CH_INC 4
+#define ACS_2G_EXTEND ACS_WLAN_20M_CH_INC
+#define ACS_5G_EXTEND (ACS_WLAN_20M_CH_INC * 3)
- switch(operatingBand)
- {
- case eSAP_RF_SUBBAND_2_4_GHZ:
- *bandStartChannel = RF_CHAN_1;
- *bandEndChannel = RF_CHAN_14;
- *startChannelNum = *startChannelNum > 5 ?
- (*startChannelNum - ACS_2G_EXTEND): 1;
- *endChannelNum = (*endChannelNum + ACS_2G_EXTEND) <= 14 ?
- (*endChannelNum + ACS_2G_EXTEND):14;
- break;
-
- case eSAP_RF_SUBBAND_5_LOW_GHZ:
- *bandStartChannel = RF_CHAN_36;
- *bandEndChannel = RF_CHAN_64;
- *startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 36 ?
- (*startChannelNum - ACS_5G_EXTEND):36;
- *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 64?
- (*endChannelNum + ACS_5G_EXTEND):64;
- break;
-
- case eSAP_RF_SUBBAND_5_MID_GHZ:
- *bandStartChannel = RF_CHAN_100;
- *startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 100 ?
- (*startChannelNum - ACS_5G_EXTEND):100;
+ v_U8_t tmp_startChannelNum = 0, tmp_endChannelNum = 0;
+
+ switch(operatingBand)
+ {
+ case eSAP_RF_SUBBAND_2_4_GHZ:
+ *bandStartChannel = RF_CHAN_1;
+ *bandEndChannel = RF_CHAN_14;
+ tmp_startChannelNum = *startChannelNum > 5 ?
+ (*startChannelNum - ACS_2G_EXTEND): 1;
+ tmp_endChannelNum = (*endChannelNum + ACS_2G_EXTEND) <= 14 ?
+ (*endChannelNum + ACS_2G_EXTEND):14;
+ break;
+
+ case eSAP_RF_SUBBAND_5_LOW_GHZ:
+ *bandStartChannel = RF_CHAN_36;
+ *bandEndChannel = RF_CHAN_64;
+ tmp_startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 36 ?
+ (*startChannelNum - ACS_5G_EXTEND):36;
+ tmp_endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 64?
+ (*endChannelNum + ACS_5G_EXTEND):64;
+ break;
+
+ case eSAP_RF_SUBBAND_5_MID_GHZ:
+ *bandStartChannel = RF_CHAN_100;
+ tmp_startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 100 ?
+ (*startChannelNum - ACS_5G_EXTEND):100;
#ifndef FEATURE_WLAN_CH144
- *bandEndChannel = RF_CHAN_140;
- *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 140 ?
- (*endChannelNum + ACS_5G_EXTEND):140;
+ *bandEndChannel = RF_CHAN_140;
+ tmp_endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 140 ?
+ (*endChannelNum + ACS_5G_EXTEND):140;
#else
- *bandEndChannel = RF_CHAN_144;
- *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 144 ?
- (*endChannelNum + ACS_5G_EXTEND):144;
+ *bandEndChannel = RF_CHAN_144;
+ tmp_endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 144 ?
+ (*endChannelNum + ACS_5G_EXTEND):144;
#endif /* FEATURE_WLAN_CH144 */
- break;
-
- case eSAP_RF_SUBBAND_5_HIGH_GHZ:
- *bandStartChannel = RF_CHAN_149;
- *bandEndChannel = RF_CHAN_165;
- *startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 149 ?
- (*startChannelNum - ACS_5G_EXTEND):149;
- *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 165 ?
- (*endChannelNum + ACS_5G_EXTEND):165;
- break;
-
- case eSAP_RF_SUBBAND_5_ALL_GHZ:
- *bandStartChannel = RF_CHAN_36;
- *bandEndChannel = RF_CHAN_165;
- *startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 36 ?
- (*startChannelNum - ACS_5G_EXTEND):36;
- *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 165 ?
- (*endChannelNum + ACS_5G_EXTEND):165;
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
- "sapGetChannelList:OperatingBand not valid ");
- /* assume 2.4 GHz */
- *bandStartChannel = RF_CHAN_1;
- *bandEndChannel = RF_CHAN_14;
- *startChannelNum = *startChannelNum > 5 ?
- (*startChannelNum - ACS_2G_EXTEND): 1;
- *endChannelNum = (*endChannelNum + ACS_2G_EXTEND) <= 14 ?
- (*endChannelNum + ACS_2G_EXTEND):14;
- break;
- }
+ break;
+
+ case eSAP_RF_SUBBAND_5_HIGH_GHZ:
+ *bandStartChannel = RF_CHAN_149;
+ *bandEndChannel = RF_CHAN_165;
+ tmp_startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 149 ?
+ (*startChannelNum - ACS_5G_EXTEND):149;
+ tmp_endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 165 ?
+ (*endChannelNum + ACS_5G_EXTEND):165;
+ break;
+
+ case eSAP_RF_SUBBAND_5_ALL_GHZ:
+ *bandStartChannel = RF_CHAN_36;
+ *bandEndChannel = RF_CHAN_165;
+ tmp_startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 36 ?
+ (*startChannelNum - ACS_5G_EXTEND):36;
+ tmp_endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 165 ?
+ (*endChannelNum + ACS_5G_EXTEND):165;
+ break;
+
+ default:
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "sapGetChannelList:OperatingBand not valid ");
+ /* assume 2.4 GHz */
+ *bandStartChannel = RF_CHAN_1;
+ *bandEndChannel = RF_CHAN_14;
+ tmp_startChannelNum = *startChannelNum > 5 ?
+ (*startChannelNum - ACS_2G_EXTEND): 1;
+ tmp_endChannelNum = (*endChannelNum + ACS_2G_EXTEND) <= 14 ?
+ (*endChannelNum + ACS_2G_EXTEND):14;
+ break;
+ }
+
+ /* Note if the ACS range include only DFS channels, do not cross the range.
+ * Active scanning in adjacent non DFS channels results in transmission
+ * spikes in DFS specturm channels which is due to emission spill.
+ * Remove the active channels from extend ACS range for DFS only range
+ */
+ if (VOS_IS_DFS_CH(*startChannelNum)) {
+ while (!VOS_IS_DFS_CH(tmp_startChannelNum) && tmp_startChannelNum <
+ *startChannelNum)
+ tmp_startChannelNum += ACS_WLAN_20M_CH_INC;
+
+ *startChannelNum = tmp_startChannelNum;
+ }
+ if (VOS_IS_DFS_CH(*endChannelNum)) {
+ while (!VOS_IS_DFS_CH(tmp_endChannelNum) && tmp_endChannelNum >
+ *endChannelNum)
+ tmp_endChannelNum -= ACS_WLAN_20M_CH_INC;
+
+ *endChannelNum = tmp_endChannelNum;
+ }
}
/*==========================================================================