Kaynağa Gözat

qcacld-3.0: Check for channel state before blocking the transmissions

Ensure that the channel state is checked to see if it is a DFS
channel before stopping the transmission on the interface. Currently,
on radar detection, transmission is getting stopped for all the
SAP/P2P-GO interfaces. This affects SAP+SAP case where one SAP is on
a DFS channel and the other SAP is on a non-DFS channel. On radar
detection, the transmission is getting stopped for both the SAP
interfaces. But, the transmission should be stopped only for the
interface that is operating on DFS channel. Fix the same by checking
the channel state before stopping the transmissions.

Change-Id: I564980534bc0d943db8da300439e1d072715f462
CRs-Fixed: 1061559
Manishekar Chandrasekaran 8 yıl önce
ebeveyn
işleme
11ecd55d23
1 değiştirilmiş dosya ile 8 ekleme ve 2 silme
  1. 8 2
      core/hdd/src/wlan_hdd_main.c

+ 8 - 2
core/hdd/src/wlan_hdd_main.c

@@ -1487,6 +1487,7 @@ bool hdd_dfs_indicate_radar(void *context, void *param)
 	hdd_adapter_list_node_t *adapterNode = NULL, *pNext = NULL;
 	hdd_adapter_t *adapter;
 	QDF_STATUS status;
+	hdd_ap_ctx_t *ap_ctx;
 
 	if (!hdd_ctx || !hdd_radar_event ||
 		 hdd_ctx->config->disableDFSChSwitch)
@@ -1504,10 +1505,15 @@ bool hdd_dfs_indicate_radar(void *context, void *param)
 		status = hdd_get_front_adapter(hdd_ctx, &adapterNode);
 		while (NULL != adapterNode && QDF_STATUS_SUCCESS == status) {
 			adapter = adapterNode->pAdapter;
-			if (QDF_SAP_MODE == adapter->device_mode ||
-			    QDF_P2P_GO_MODE == adapter->device_mode) {
+			ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(adapter);
+			if ((QDF_SAP_MODE == adapter->device_mode ||
+			     QDF_P2P_GO_MODE == adapter->device_mode) &&
+			     (CHANNEL_STATE_DFS ==
+			     cds_get_channel_state(ap_ctx->operatingChannel))) {
 				WLAN_HDD_GET_AP_CTX_PTR(adapter)->
 				dfs_cac_block_tx = true;
+				hdd_info("tx blocked for session:%d",
+					 adapter->sessionId);
 			}
 
 			status = hdd_get_next_adapter(hdd_ctx,