From ff95ece535e4bad8f6ed07528e8e4011f03f9f58 Mon Sep 17 00:00:00 2001 From: Alan Chen Date: Wed, 15 Apr 2020 16:06:17 -0700 Subject: [PATCH] qcacld-3.0: Move RTPM QoS notification inside HDD enable/disable Runtime PM is enabled in hdd_enable_power_management(). Hence, move PM QoS notification registration to HDD enable power management. Similarly, move PM QoS unregistration to HDD disable power management. Change-Id: Ifc7f280ab838dd9347095726961b6a0296626f6a CRs-Fixed: 2665176 --- core/hdd/src/wlan_hdd_main.c | 99 ++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 50 deletions(-) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 95675fd8a81e..4c2513babf50 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -2856,44 +2856,6 @@ err_start_adapter: return -EINVAL; } -/** - * hdd_enable_power_management() - API to Enable Power Management - * - * API invokes Bus Interface Layer power management functionality - * - * Return: None - */ -static void hdd_enable_power_management(void) -{ - void *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); - - if (!hif_ctx) { - hdd_err("Bus Interface Context is Invalid"); - return; - } - - hif_enable_power_management(hif_ctx, cds_is_packet_log_enabled()); -} - -/** - * hdd_disable_power_management() - API to disable Power Management - * - * API disable Bus Interface Layer Power management functionality - * - * Return: None - */ -static void hdd_disable_power_management(void) -{ - void *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); - - if (!hif_ctx) { - hdd_err("Bus Interface Context is Invalid"); - return; - } - - hif_disable_power_management(hif_ctx); -} - void hdd_update_hw_sw_info(struct hdd_context *hdd_ctx) { void *hif_sc; @@ -3543,6 +3505,46 @@ static void hdd_wlan_unregister_pm_qos_notifier(struct hdd_context *hdd_ctx) } #endif +/** + * hdd_enable_power_management() - API to Enable Power Management + * + * API invokes Bus Interface Layer power management functionality + * + * Return: None + */ +static void hdd_enable_power_management(struct hdd_context *hdd_ctx) +{ + void *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); + + if (!hif_ctx) { + hdd_err("Bus Interface Context is Invalid"); + return; + } + + hif_enable_power_management(hif_ctx, cds_is_packet_log_enabled()); + hdd_wlan_register_pm_qos_notifier(hdd_ctx); +} + +/** + * hdd_disable_power_management() - API to disable Power Management + * + * API disable Bus Interface Layer Power management functionality + * + * Return: None + */ +static void hdd_disable_power_management(struct hdd_context *hdd_ctx) +{ + void *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); + + if (!hif_ctx) { + hdd_err("Bus Interface Context is Invalid"); + return; + } + + hdd_wlan_unregister_pm_qos_notifier(hdd_ctx); + hif_disable_power_management(hif_ctx); +} + /** * hdd_register_notifiers - Register netdev notifiers. * @hdd_ctx: HDD context @@ -3573,14 +3575,8 @@ static int hdd_register_notifiers(struct hdd_context *hdd_ctx) goto unregister_inetaddr_notifier; } - ret = hdd_wlan_register_pm_qos_notifier(hdd_ctx); - if (ret) - goto unregister_nud_notifier; - return 0; -unregister_nud_notifier: - hdd_nud_unregister_netevent_notifier(hdd_ctx); unregister_inetaddr_notifier: unregister_inetaddr_notifier(&hdd_ctx->ipv4_notifier); unregister_ip6_notifier: @@ -3777,7 +3773,7 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx, bool reinit) hdd_update_hw_sw_info(hdd_ctx); if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) { - hdd_enable_power_management(); + hdd_enable_power_management(hdd_ctx); hdd_err("in ftm mode, no need to configure cds modules"); ret = -EINVAL; break; @@ -3789,7 +3785,7 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx, bool reinit) goto destroy_driver_sysfs; } - hdd_enable_power_management(); + hdd_enable_power_management(hdd_ctx); hdd_skip_acs_scan_timer_init(hdd_ctx); @@ -8043,7 +8039,6 @@ void hdd_set_disconnect_status(struct hdd_adapter *adapter, bool status) */ void hdd_unregister_notifiers(struct hdd_context *hdd_ctx) { - hdd_wlan_unregister_pm_qos_notifier(hdd_ctx); hdd_nud_unregister_netevent_notifier(hdd_ctx); hdd_wlan_unregister_ip6_notifier(hdd_ctx); @@ -12760,15 +12755,19 @@ int hdd_wlan_stop_modules(struct hdd_context *hdd_ctx, bool ftm_mode) case DRIVER_MODULES_ENABLED: hdd_debug("Wlan transitioning (CLOSED <- ENABLED)"); - if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE || - hdd_get_conparam() == QDF_GLOBAL_EPPING_MODE) + if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE) { + hdd_disable_power_management(hdd_ctx); + break; + } + + if (hdd_get_conparam() == QDF_GLOBAL_EPPING_MODE) break; wlan_hdd_deinit_tx_rx_histogram(hdd_ctx); hdd_skip_acs_scan_timer_deinit(hdd_ctx); - hdd_disable_power_management(); + hdd_disable_power_management(hdd_ctx); if (hdd_deconfigure_cds(hdd_ctx)) { hdd_err("Failed to de-configure CDS"); QDF_ASSERT(0);