From 0b8a7c01935a42e78ee186cbd2e7ae84d27f1e58 Mon Sep 17 00:00:00 2001 From: Gao Wu Date: Thu, 14 Apr 2016 13:16:18 +0800 Subject: qcacld-2.0: Set htc tx tag when call set vdev suspend dtim It doesn't set tag HTC_TX_PACKET_TAG_AUTO_PM when attempt to suspend and set vdev suspend dtim, which cause host wake up frequently. Change-Id: Iba32c715694e64ce7d941f198990b25b9c87240d CRs-Fixed: 1003313 --- CORE/SERVICES/WMI/wmi_unified.c | 89 ++++++++++++++++++++++++++++++++--------- 1 file changed, 69 insertions(+), 20 deletions(-) diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c index c561ee9ce617..fb93e7f04fd4 100644 --- a/CORE/SERVICES/WMI/wmi_unified.c +++ b/CORE/SERVICES/WMI/wmi_unified.c @@ -710,6 +710,73 @@ inline bool wmi_get_runtime_pm_inprogress(wmi_unified_t wmi_handle) } #endif +/** + * wmi_set_htc_tx_tag() - set HTC TX tag for WMI commands + * @wmi_handle: WMI handle + * @buf: WMI buffer + * @cmd_id: WMI command Id + * + * Return htc_tx_tag + */ +static uint16_t wmi_set_htc_tx_tag(wmi_unified_t wmi_handle, + wmi_buf_t buf, + WMI_CMD_ID cmd_id) +{ + uint16_t htc_tx_tag = 0; + wmi_vdev_set_param_cmd_fixed_param *set_cmd; + wmi_sta_powersave_param_cmd_fixed_param *ps_cmd; + + switch(cmd_id) { + case WMI_WOW_ENABLE_CMDID: + case WMI_PDEV_SUSPEND_CMDID: + case WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID: + case WMI_WOW_ADD_WAKE_PATTERN_CMDID: + case WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID: + case WMI_PDEV_RESUME_CMDID: + case WMI_WOW_DEL_WAKE_PATTERN_CMDID: +#ifdef FEATURE_WLAN_D0WOW + case WMI_D0_WOW_ENABLE_DISABLE_CMDID: +#endif + htc_tx_tag = HTC_TX_PACKET_TAG_AUTO_PM; + case WMI_FORCE_FW_HANG_CMDID: + if (wmi_handle->tag_crash_inject) { + htc_tx_tag = HTC_TX_PACKET_TAG_AUTO_PM; + wmi_handle->tag_crash_inject = false; + } + default: + break; + } + + if(cmd_id == WMI_VDEV_SET_PARAM_CMDID) + { + set_cmd = (wmi_vdev_set_param_cmd_fixed_param *) + wmi_buf_data(buf); + + switch(set_cmd->param_id) { + case WMI_VDEV_PARAM_LISTEN_INTERVAL: + case WMI_VDEV_PARAM_DTIM_POLICY: + htc_tx_tag = HTC_TX_PACKET_TAG_AUTO_PM; + default: + break; + } + } + + if(cmd_id == WMI_STA_POWERSAVE_PARAM_CMDID) + { + ps_cmd = (wmi_sta_powersave_param_cmd_fixed_param *) + wmi_buf_data(buf); + + switch(ps_cmd->param) { + case WMI_STA_PS_ENABLE_QPOWER: + htc_tx_tag = HTC_TX_PACKET_TAG_AUTO_PM; + default: + break; + } + } + + return htc_tx_tag; +} + /* WMI command API */ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, int len, WMI_CMD_ID cmd_id) @@ -740,26 +807,8 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, int len, goto dont_tag; skip_suspend_check: - switch(cmd_id) { - case WMI_WOW_ENABLE_CMDID: - case WMI_PDEV_SUSPEND_CMDID: - case WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID: - case WMI_WOW_ADD_WAKE_PATTERN_CMDID: - case WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID: - case WMI_PDEV_RESUME_CMDID: - case WMI_WOW_DEL_WAKE_PATTERN_CMDID: -#ifdef FEATURE_WLAN_D0WOW - case WMI_D0_WOW_ENABLE_DISABLE_CMDID: -#endif - htc_tag = HTC_TX_PACKET_TAG_AUTO_PM; - case WMI_FORCE_FW_HANG_CMDID: - if (wmi_handle->tag_crash_inject) { - htc_tag = HTC_TX_PACKET_TAG_AUTO_PM; - wmi_handle->tag_crash_inject = false; - } - default: - break; - } + htc_tag = (A_UINT16) wmi_set_htc_tx_tag(wmi_handle, + buf, cmd_id); dont_tag: /* Do sanity check on the TLV parameter structure */ -- cgit v1.2.3