From dfdf2a8bcd444749c5901be33bbc2d2009a74084 Mon Sep 17 00:00:00 2001 From: Manishekar Chandrasekaran Date: Wed, 24 Aug 2016 16:16:16 +0530 Subject: [PATCH] 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 --- core/hdd/src/wlan_hdd_cfg80211.c | 30 ++++++++++++++++++++---------- core/hdd/src/wlan_hdd_hostapd.c | 4 ++-- 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 d57cf3bd172f1..cf517223652e9 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 22f74ef1ef365..9ea29f4b5d535 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__);