From ed0edfaa6c006a4d54b5479866e569635197ec2a Mon Sep 17 00:00:00 2001 From: gaurank kathpalia Date: Sun, 8 Nov 2020 19:44:20 +0530 Subject: [PATCH] qcacld-3.0: Inform userspace about stop ap Currently the driver does not inform userspace when there is no channel available for the SAP to restart. This case can happen if all the channels in the spectrum are unsafe, in NOL list, SRD etc. and the driver cannot find a safe channel. Fix is to inform userspace about this scenario of driver stopping the SAP. Change-Id: I77f7a5156c8f7b1da29023675d5a7a448be0fb92 CRs-Fixed: 2815265 --- core/hdd/src/wlan_hdd_main.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 1554360c9e18..370d20628bab 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -15953,6 +15953,32 @@ void hdd_bus_bw_compute_reset_prev_txrx_stats(struct hdd_adapter *adapter) #endif /*WLAN_FEATURE_DP_BUS_BANDWIDTH*/ +#if defined MSM_PLATFORM && (LINUX_VERSION_CODE <= KERNEL_VERSION(4, 19, 0)) +/** + * hdd_inform_stop_sap() - call cfg80211 API to stop SAP + * @adapter: pointer to adapter + * + * This function calls cfg80211 API to stop SAP + * + * Return: None + */ +static void hdd_inform_stop_sap(struct hdd_adapter *adapter) +{ + hdd_debug("SAP stopped due to invalid channel vdev id %d", + wlan_vdev_get_id(adapter->vdev)); + cfg80211_ap_stopped(adapter->dev, GFP_KERNEL); +} + +#else +static void hdd_inform_stop_sap(struct hdd_adapter *adapter) +{ + hdd_debug("SAP stopped due to invalid channel vdev id %d", + wlan_vdev_get_id(adapter->vdev)); + cfg80211_stop_iface(adapter->hdd_ctx->wiphy, &adapter->wdev, + GFP_KERNEL); +} +#endif + /** * wlan_hdd_stop_sap() - This function stops bss of SAP. * @ap_adapter: SAP adapter @@ -16001,6 +16027,7 @@ void wlan_hdd_stop_sap(struct hdd_adapter *ap_adapter) ap_adapter->vdev_id); hdd_green_ap_start_state_mc(hdd_ctx, ap_adapter->device_mode, false); + hdd_inform_stop_sap(ap_adapter); hdd_debug("SAP Stop Success"); } else { hdd_err("Can't stop ap because its not started");