소스 검색

qcacld-3.0: Start pre cac adapter after opening it

Start the pre cac adapter after opening the it.
Earlier, opening of adapter starts the adapter as
well. With the recent design changes, start
adapter needs to be explicitly issued after
opening the adapter.

Change-Id: I3cfa7f74bb121ab74fa18f2237069f41bf3fe736
CRs-Fixed: 1058745
Manishekar Chandrasekaran 8 년 전
부모
커밋
dfdf2a8bcd
2개의 변경된 파일22개의 추가작업 그리고 12개의 파일을 삭제
  1. 20 10
      core/hdd/src/wlan_hdd_cfg80211.c
  2. 2 2
      core/hdd/src/wlan_hdd_hostapd.c

+ 20 - 10
core/hdd/src/wlan_hdd_cfg80211.c

@@ -6635,10 +6635,20 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 			wlan_hdd_get_intf_addr(hdd_ctx),
 			NET_NAME_UNKNOWN, true);
 	if (!pre_cac_adapter) {
-		hdd_err("error starting pre cac adapter");
+		hdd_err("error opening the pre cac adapter");
 		return -EINVAL;
 	}
 
+	/*
+	 * This interface is internally created by the driver. So, no interface
+	 * up comes for this interface from user space and hence starting
+	 * the adapter internally.
+	 */
+	if (hdd_start_adapter(pre_cac_adapter)) {
+		hdd_err("error starting the pre cac adapter");
+		goto close_pre_cac_adapter;
+	}
+
 	hdd_debug("preparing for start ap/bss on the pre cac adapter");
 
 	wiphy = hdd_ctx->wiphy;
@@ -6652,7 +6662,7 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 			sizeof(*ap_adapter->sessionCtx.ap.beacon));
 	if (!pre_cac_adapter->sessionCtx.ap.beacon) {
 		hdd_err("failed to alloc mem for beacon");
-		goto close_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 	qdf_mem_copy(pre_cac_adapter->sessionCtx.ap.beacon,
 			ap_adapter->sessionCtx.ap.beacon,
@@ -6686,7 +6696,7 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 	chan = __ieee80211_get_channel(wiphy, freq);
 	if (!chan) {
 		hdd_err("channel converion failed");
-		goto close_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	cfg80211_chandef_create(&chandef, chan, channel_type);
@@ -6698,7 +6708,7 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 	ret = wlan_hdd_set_channel(wiphy, dev, &chandef, channel_type);
 	if (0 != ret) {
 		hdd_err("failed to set channel");
-		goto close_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	status = wlan_hdd_cfg80211_start_bss(pre_cac_adapter, NULL,
@@ -6706,7 +6716,7 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 			eHIDDEN_SSID_NOT_IN_USE, false);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		hdd_err("start bss failed");
-		goto close_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	/*
@@ -6717,25 +6727,25 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 	ret = wlan_hdd_set_pre_cac_status(pre_cac_adapter, true, handle);
 	if (0 != ret) {
 		hdd_err("failed to set pre cac status");
-		goto stop_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	ret = wlan_hdd_set_chan_before_pre_cac(ap_adapter,
 				hdd_ap_ctx->operatingChannel);
 	if (0 != ret) {
 		hdd_err("failed to set channel before pre cac");
-		goto stop_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	ap_adapter->pre_cac_chan = pre_cac_chan;
 
 	return 0;
 
-stop_pre_cac_adapter:
-	hdd_stop_adapter(hdd_ctx, pre_cac_adapter, false);
-close_pre_cac_adapter:
+stop_close_pre_cac_adapter:
+	hdd_stop_adapter(hdd_ctx, pre_cac_adapter, true);
 	qdf_mem_free(pre_cac_adapter->sessionCtx.ap.beacon);
 	pre_cac_adapter->sessionCtx.ap.beacon = NULL;
+close_pre_cac_adapter:
 	hdd_close_adapter(hdd_ctx, pre_cac_adapter, false);
 	return -EINVAL;
 }

+ 2 - 2
core/hdd/src/wlan_hdd_hostapd.c

@@ -898,7 +898,7 @@ void wlan_hdd_sap_pre_cac_failure(void *data)
 	}
 
 	cds_ssr_protect(__func__);
-	hdd_stop_adapter(hdd_ctx, pHostapdAdapter, false);
+	hdd_stop_adapter(hdd_ctx, pHostapdAdapter, true);
 	hdd_close_adapter(hdd_ctx, pHostapdAdapter, false);
 	cds_ssr_unprotect(__func__);
 }
@@ -934,7 +934,7 @@ static void wlan_hdd_sap_pre_cac_success(void *data)
 	}
 
 	cds_ssr_protect(__func__);
-	hdd_stop_adapter(hdd_ctx, pHostapdAdapter, false);
+	hdd_stop_adapter(hdd_ctx, pHostapdAdapter, true);
 	hdd_close_adapter(hdd_ctx, pHostapdAdapter, false);
 	cds_ssr_unprotect(__func__);