qcacld-3.0: Refactor monitor mode cleanup in stop adapter

Move RTPM wakelock release on monitor mode stop and session
delete to new APIs.
New APIs
1) hdd_monitor_mode_release_wakelock()
2) hdd_monitor_mode_disable_and_delete()

Change-Id: Ib1b0d060fd96dc131d54e1261cadf67e3c23e1d4
CRs-Fixed: 3523612
This commit is contained in:
Vinod Kumar Pirla
2023-02-28 22:04:38 -08:00
committed by Rahul Choudhary
parent bfd69f55cf
commit 8c93ab2d7a

View File

@@ -8798,6 +8798,42 @@ hdd_disable_nan_active_disc(struct hdd_adapter *adapter)
ucfg_disable_nan_discovery(hdd_ctx->psoc, NULL, 0);
}
static void
hdd_monitor_mode_release_wakelock(struct wlan_hdd_link_info *link_info)
{
struct hdd_adapter *adapter = link_info->adapter;
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
if (wlan_hdd_is_session_type_monitor(adapter->device_mode) &&
(ucfg_mlme_is_sta_mon_conc_supported(hdd_ctx->psoc) ||
ucfg_dp_is_local_pkt_capture_enabled(hdd_ctx->psoc))) {
hdd_info("Release wakelock for STA + monitor mode!");
os_if_dp_local_pkt_capture_stop(link_info->vdev);
qdf_runtime_pm_allow_suspend(
&hdd_ctx->runtime_context.monitor_mode);
hdd_lpc_enable_powersave(hdd_ctx);
qdf_wake_lock_release(&hdd_ctx->monitor_mode_wakelock,
WIFI_POWER_EVENT_WAKELOCK_MONITOR_MODE);
}
}
static void
hdd_monitor_mode_disable_and_delete(struct wlan_hdd_link_info *link_info)
{
QDF_STATUS status;
struct hdd_adapter *adapter = link_info->adapter;
struct hdd_context *hdd_ctx = adapter->hdd_ctx;
status = hdd_disable_monitor_mode();
if (QDF_IS_STATUS_ERROR(status))
hdd_err_rl("datapath reset failed for montior mode");
hdd_set_idle_ps_config(hdd_ctx, true);
status = hdd_monitor_mode_vdev_status(adapter);
if (QDF_IS_STATUS_ERROR(status))
hdd_err_rl("stop failed montior mode");
sme_delete_mon_session(hdd_ctx->mac_handle, link_info->vdev_id);
}
QDF_STATUS hdd_stop_adapter_ext(struct hdd_context *hdd_ctx,
struct hdd_adapter *adapter)
{
@@ -8892,28 +8928,10 @@ QDF_STATUS hdd_stop_adapter_ext(struct hdd_context *hdd_ctx,
hdd_reset_monitor_interface(sta_adapter);
}
if (wlan_hdd_is_session_type_monitor(QDF_MONITOR_MODE) &&
(ucfg_mlme_is_sta_mon_conc_supported(hdd_ctx->psoc) ||
ucfg_dp_is_local_pkt_capture_enabled(hdd_ctx->psoc))) {
hdd_info("Release wakelock for STA + monitor mode!");
os_if_dp_local_pkt_capture_stop(vdev);
qdf_runtime_pm_allow_suspend(
&hdd_ctx->runtime_context.monitor_mode);
hdd_lpc_enable_powersave(hdd_ctx);
qdf_wake_lock_release(&hdd_ctx->monitor_mode_wakelock,
WIFI_POWER_EVENT_WAKELOCK_MONITOR_MODE);
}
hdd_monitor_mode_release_wakelock(link_info);
wlan_hdd_scan_abort(link_info);
hdd_adapter_deregister_fc(adapter);
status = hdd_disable_monitor_mode();
if (QDF_IS_STATUS_ERROR(status))
hdd_err_rl("datapath reset failed for monitor mode");
hdd_set_idle_ps_config(hdd_ctx, true);
status = hdd_monitor_mode_vdev_status(adapter);
if (QDF_IS_STATUS_ERROR(status))
hdd_err_rl("stop failed monitor mode");
sme_delete_mon_session(mac_handle, link_info->vdev_id);
hdd_monitor_mode_disable_and_delete(link_info);
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
hdd_vdev_destroy(adapter);
break;