wlan: Avoid unsafe channel with softap mode and P2PGO mode
If FW sends unsafe channel detect indication,
Softap mode and P2PGO mode, should avoid to stay unsafe channels.
Make indication path from FW.
Store into module context.
Store into static module storage incase of re-load driver.
Channel selection should avoid unsafe channel
CRs-fixed: 576020
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 0279d2a..30420e8 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -12690,6 +12690,45 @@
}
#endif
+#ifdef FEATURE_WLAN_CH_AVOID
+ case WDI_CH_AVOID_IND:
+ {
+ vos_msg_t vosMsg;
+ tSirChAvoidIndType *chAvoidInd;
+
+ chAvoidInd =
+ (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
+ if (NULL == chAvoidInd)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: CH_AVOID IND buffer alloc Fail", __func__);
+ return ;
+ }
+
+ chAvoidInd->avoidRangeCount =
+ wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
+ wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
+ (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
+ chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s : WDA CH avoid notification", __func__);
+
+ vosMsg.type = eWNI_SME_CH_AVOID_IND;
+ vosMsg.bodyptr = chAvoidInd;
+ vosMsg.bodyval = 0;
+ /* Send message to SME */
+ if (VOS_STATUS_SUCCESS !=
+ vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "post eWNI_SME_CH_AVOID_IND to SME Failed");
+ vos_mem_free(chAvoidInd);
+ }
+ break;
+ }
+#endif /* FEATURE_WLAN_CH_AVOID */
+
default:
{
/* TODO error */