Selaa lähdekoodia

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 vuotta sitten
vanhempi
sitoutus
11ecd55d23
1 muutettua tiedostoa jossa 8 lisäystä ja 2 poistoa
  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,