Browse Source

qcacmn: Radar event process based on concurrency policy

Per requirement, if STA+SAP is working on same 5G DFS
channel and INI g_sta_sap_scc_on_dfs_chan = 2, the
SAP DFS master is temporarily disabled to skip radar event,
and it will follow STA's channel movement. So, skip the
radar event processing based on STA+SAP concurrency policy,
otherwise the SAP would be stopped by kernel because the
current home channel is marked "disabled" by regulatory
during processing of radar event.

Change-Id: I3f851fe694c0e127665732894306e20f5d1c93f4
CRs-Fixed: 2636200
Liangwei Dong 5 years ago
parent
commit
86dd484d69

+ 2 - 0
umac/dfs/core/src/misc/dfs_process_radar_found_ind.c

@@ -956,6 +956,8 @@ QDF_STATUS dfs_process_radar_ind(struct wlan_dfs *dfs,
 	uint32_t radarfound_freq;
 	struct dfs_channel *dfs_curchan;
 
+	if (utils_dfs_can_ignore_radar_event(dfs->dfs_pdev_obj))
+		return QDF_STATUS_SUCCESS;
 	/* Acquire a lock to avoid initiating mode switch till radar
 	 * processing is completed.
 	 */

+ 17 - 0
umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h

@@ -761,6 +761,18 @@ QDF_STATUS utils_dfs_mark_leaking_chan_for_freq(struct wlan_objmgr_pdev *pdev,
 						uint8_t temp_ch_lst_sz,
 						uint16_t *temp_ch_lst);
 #endif
+
+/**
+ * utils_dfs_can_ignore_radar_event() - check whether to skip radar event
+ * processing
+ * @pdev: Pointer to pdev structure.
+ *
+ * This function will check with policy mgr to process radar event or not based
+ * on current concurrency mode and dfs policy.
+ *
+ * Return: true - ignore radar event processing, otherwise false.
+ */
+bool utils_dfs_can_ignore_radar_event(struct wlan_objmgr_pdev *pdev);
 #else
 #ifdef CONFIG_CHAN_NUM_API
 static inline QDF_STATUS utils_dfs_mark_leaking_ch
@@ -782,6 +794,11 @@ static inline QDF_STATUS utils_dfs_mark_leaking_chan_for_freq
 	return QDF_STATUS_SUCCESS;
 }
 #endif
+static inline bool
+utils_dfs_can_ignore_radar_event(struct wlan_objmgr_pdev *pdev)
+{
+	return false;
+}
 #endif
 /**
  * utils_get_dfsdomain() - Get DFS domain.

+ 6 - 0
umac/dfs/dispatcher/src/wlan_dfs_utils_api.c

@@ -965,6 +965,12 @@ void utils_dfs_get_chan_list(struct wlan_objmgr_pdev *pdev,
 	utils_dfs_get_channel_list(pdev, NULL, (struct dfs_channel *)clist,
 				   num_chan);
 }
+
+bool utils_dfs_can_ignore_radar_event(struct wlan_objmgr_pdev *pdev)
+{
+	return !policy_mgr_get_dfs_master_dynamic_enabled(
+		wlan_pdev_get_psoc(pdev), INVALID_VDEV_ID);
+}
 #endif
 
 #ifdef CONFIG_CHAN_NUM_API