From 056bf5581d307659c4a2c5ef8efad64c2485448c Mon Sep 17 00:00:00 2001 From: Srikanth Marepalli Date: Sun, 7 Nov 2021 00:03:59 +0530 Subject: [PATCH] qcacld-3.0: Add wow event and reason for roam event stats This change sends the new wow event in the bitmap to FW only when the roam stats suspend mode attribute is enabled from the user space. Also, the new wow reason is added to wake up the host while sending the roam event stats. Change-Id: Iaefb229929e8791870f33bf787487f7c20daf218 CRs-Fixed: 3050830 --- .../dispatcher/src/wlan_cm_roam_api.c | 6 ++++++ core/hdd/src/wlan_hdd_cfg80211.c | 16 ++++++++++++++++ core/wma/src/wma_features.c | 3 +++ 3 files changed, 25 insertions(+) diff --git a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c index 1d7f07c9ce73f..fe31940eea969 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c +++ b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c @@ -838,6 +838,9 @@ wlan_cm_update_roam_rt_stats(struct wlan_objmgr_psoc *psoc, case ROAM_RT_STATS_ENABLE: roam_rt_stats->roam_stats_enabled = value; break; + case ROAM_RT_STATS_SUSPEND_MODE_ENABLE: + roam_rt_stats->roam_stats_wow_sent = value; + break; default: break; } @@ -863,6 +866,9 @@ uint8_t wlan_cm_get_roam_rt_stats(struct wlan_objmgr_psoc *psoc, case ROAM_RT_STATS_ENABLE: rstats_value = roam_rt_stats->roam_stats_enabled; break; + case ROAM_RT_STATS_SUSPEND_MODE_ENABLE: + rstats_value = roam_rt_stats->roam_stats_wow_sent; + break; default: break; } diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index f064a28e9504b..fe625213ccef9 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -15400,6 +15400,22 @@ static int __wlan_hdd_cfg80211_set_roam_events(struct wiphy *wiphy, ucfg_cm_update_roam_rt_stats(hdd_ctx->psoc, param, ROAM_RT_STATS_ENABLE); + if (param == (ROAM_RT_STATS_ENABLED | + ROAM_RT_STATS_ENABLED_IN_SUSPEND_MODE)) { + ucfg_pmo_enable_wakeup_event(hdd_ctx->psoc, adapter->vdev_id, + WOW_ROAM_STATS_EVENT); + ucfg_cm_update_roam_rt_stats(hdd_ctx->psoc, + ROAM_RT_STATS_ENABLED, + ROAM_RT_STATS_SUSPEND_MODE_ENABLE); + } else if (ucfg_cm_get_roam_rt_stats(hdd_ctx->psoc, + ROAM_RT_STATS_SUSPEND_MODE_ENABLE)) { + ucfg_pmo_disable_wakeup_event(hdd_ctx->psoc, adapter->vdev_id, + WOW_ROAM_STATS_EVENT); + ucfg_cm_update_roam_rt_stats(hdd_ctx->psoc, + ROAM_RT_STATS_DISABLED, + ROAM_RT_STATS_SUSPEND_MODE_ENABLE); + } + status = ucfg_cm_roam_send_rt_stats_config(hdd_ctx->pdev, adapter->vdev_id, param); diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 8c1a30ebcb720..3c57aa225e64c 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -1498,6 +1498,8 @@ static const uint8_t *wma_wow_wake_reason_str(A_INT32 wake_reason) return "GENERIC_WAKE"; case WOW_REASON_TWT: return "TWT Event"; + case WOW_REASON_ROAM_STATS: + return "ROAM_STATS"; default: return "unknown"; } @@ -2493,6 +2495,7 @@ static int wma_wake_event_no_payload( return wma_wake_reason_nlod(wma, wake_info->vdev_id); case WOW_REASON_GENERIC_WAKE: + case WOW_REASON_ROAM_STATS: wma_info("Wake reason %s", wma_wow_wake_reason_str(wake_info->wake_reason)); return 0;