summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManishekar Chandrasekaran <cmshekar@codeaurora.org>2016-08-24 16:16:16 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-27 16:14:51 -0700
commitdfdf2a8bcd444749c5901be33bbc2d2009a74084 (patch)
treeb4cbcf04c7ec452d3882c115a81d917cda7eb4e6
parente7b1a65408fe31159a3b102aa4b9213915aec5dd (diff)
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
-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__);