瀏覽代碼

qcacmn: Set DFS channel to radar component

vdev_mgr_start_param_update will handle STA and
AP mode in vdev start. So, we need to check and
only set DFS AP's channel to Radar component by
tgt_dfs_set_current_channel. Thist will avoid
seting incorrect channel to Radar component
in STA+AP(DFS) or AP(2.4G)+AP(5G DFS) concurrency
case.

Change-Id: If60e1630c5288884d01242a20d68b2cd315942ca
CRs-Fixed: 2531766
Liangwei Dong 5 年之前
父節點
當前提交
dcab2f8924
共有 1 個文件被更改,包括 14 次插入7 次删除
  1. 14 7
      umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c

+ 14 - 7
umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c

@@ -99,6 +99,7 @@ static QDF_STATUS vdev_mgr_start_param_update(
 	bool set_agile = false, dfs_set_cfreq2 = false;
 	struct wlan_objmgr_vdev *vdev;
 	struct wlan_objmgr_pdev *pdev;
+	enum QDF_OPMODE op_mode;
 
 	vdev = mlme_obj->vdev;
 	if (!vdev) {
@@ -121,12 +122,17 @@ static QDF_STATUS vdev_mgr_start_param_update(
 	des_chan = wlan_vdev_mlme_get_des_chan(vdev);
 	param->vdev_id = wlan_vdev_get_id(vdev);
 
-	tgt_dfs_set_current_channel(pdev, des_chan->ch_freq,
-				    des_chan->ch_flags,
-				    des_chan->ch_flagext,
-				    des_chan->ch_ieee,
-				    des_chan->ch_freq_seg1,
-				    des_chan->ch_freq_seg2);
+	op_mode = wlan_vdev_mlme_get_opmode(vdev);
+	if ((op_mode == QDF_SAP_MODE || op_mode == QDF_P2P_GO_MODE) &&
+	    (WLAN_REG_IS_5GHZ_CH_FREQ(des_chan->ch_freq) ||
+	     WLAN_REG_IS_49GHZ_FREQ(des_chan->ch_freq) ||
+	     WLAN_REG_IS_6GHZ_CHAN_FREQ(des_chan->ch_freq)))
+		tgt_dfs_set_current_channel(pdev, des_chan->ch_freq,
+					    des_chan->ch_flags,
+					    des_chan->ch_flagext,
+					    des_chan->ch_ieee,
+					    des_chan->ch_freq_seg1,
+					    des_chan->ch_freq_seg2);
 
 	param->beacon_interval = mlme_obj->proto.generic.beacon_interval;
 	param->dtim_period = mlme_obj->proto.generic.dtim_period;
@@ -145,7 +151,8 @@ static QDF_STATUS vdev_mgr_start_param_update(
 	param->channel.mhz = des_chan->ch_freq;
 	param->channel.half_rate = mlme_obj->mgmt.rate_info.half_rate;
 	param->channel.quarter_rate = mlme_obj->mgmt.rate_info.quarter_rate;
-	param->channel.dfs_set = utils_is_dfs_ch(pdev, param->channel.chan_id);
+	param->channel.dfs_set = wlan_reg_is_dfs_for_freq(pdev,
+							  des_chan->ch_freq);
 	param->channel.dfs_set_cfreq2 = utils_is_dfs_cfreq2_ch(pdev);
 	param->channel.is_chan_passive =
 		utils_is_dfs_ch(pdev, param->channel.chan_id);