summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/hdd/src/wlan_hdd_cfg80211.c30
-rw-r--r--core/hdd/src/wlan_hdd_hostapd.c4
2 files changed, 22 insertions, 12 deletions
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index d57cf3bd172f..cf517223652e 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/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;
}
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c
index 22f74ef1ef36..9ea29f4b5d53 100644
--- a/core/hdd/src/wlan_hdd_hostapd.c
+++ b/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__);