From 72213318bd612b2ba3fbc7c87bfb04cff01a11a1 Mon Sep 17 00:00:00 2001 From: Srikanth Marepalli Date: Fri, 20 Dec 2019 16:11:02 +0530 Subject: [PATCH] qcacld-3.0: Make WMI_ROAM_PMKID_REQUEST_EVENTID event as wakable Add support to make event WMI_ROAM_PMKID_REQUEST_EVENTID as wakable in FIPS case. In FIPS Enabled case, for roaming Firmware sends PMKID request to host as firmware is not supposed to do crypto functionality with FIPS enabled. Change-Id: I09b6b68f77ba75f9e5519ff18017c95d16771f52 CRs-Fixed: 2513790 --- components/pmo/core/src/wlan_pmo_wow.c | 5 ++++- core/wma/inc/wma_internal.h | 16 ++++++++++++++++ core/wma/src/wma_features.c | 12 +++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/components/pmo/core/src/wlan_pmo_wow.c b/components/pmo/core/src/wlan_pmo_wow.c index 51cfffef4bff..988b166ae433 100644 --- a/components/pmo/core/src/wlan_pmo_wow.c +++ b/components/pmo/core/src/wlan_pmo_wow.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -432,6 +432,9 @@ void pmo_set_sta_wow_bitmask(uint32_t *bitmask, uint32_t wow_bitmap_size) pmo_set_wow_event_bitmap(WOW_ROAM_PREAUTH_START_EVENT, wow_bitmap_size, bitmask); + pmo_set_wow_event_bitmap(WOW_ROAM_PMKID_REQUEST_EVENT, + wow_bitmap_size, + bitmask); } void pmo_set_sap_wow_bitmask(uint32_t *bitmask, uint32_t wow_bitmap_size) diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index df5158d00710..9a9510ac90f8 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -212,6 +212,14 @@ static inline void wma_register_pmkid_req_event_handler(tp_wma_handle wma_handle) { } + +static inline int +wma_roam_pmkid_request_event_handler(void *handle, + uint8_t *event, + uint32_t len) +{ + return 0; +} #endif /* WLAN_FEATURE_FIPS */ /** @@ -283,6 +291,14 @@ wma_roam_stats_event_handler(WMA_HANDLE handle, uint8_t *event, { return 0; } + +static inline int +wma_roam_pmkid_request_event_handler(void *handle, + uint8_t *event, + uint32_t len) +{ + return 0; +} #endif /** diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index f8454cd3151f..3659476299dd 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -1515,6 +1515,8 @@ static const uint8_t *wma_wow_wake_reason_str(A_INT32 wake_reason) #endif /* WLAN_FEATURE_MOTION_DETECTION */ case WOW_REASON_PAGE_FAULT: return "PAGE_FAULT"; + case WOW_REASON_ROAM_PMKID_REQUEST: + return "ROAM_PMKID_REQUEST"; default: return "unknown"; } @@ -1737,6 +1739,9 @@ static int wow_get_wmi_eventid(int32_t reason, uint32_t tag) case WOW_ROAM_PREAUTH_START_EVENT: event_id = WMI_ROAM_PREAUTH_STATUS_CMDID; break; + case WOW_REASON_ROAM_PMKID_REQUEST: + event_id = WMI_ROAM_PMKID_REQUEST_EVENTID; + break; default: WMA_LOGD(FL("No Event Id for WOW reason %s(%d)"), wma_wow_wake_reason_str(reason), reason); @@ -1775,6 +1780,7 @@ static bool is_piggybacked_event(int32_t reason) case WOW_REASON_NAN_DATA: case WOW_REASON_TDLS_CONN_TRACKER_EVENT: case WOW_REASON_ROAM_HO: + case WOW_REASON_ROAM_PMKID_REQUEST: return true; default: return false; @@ -2632,7 +2638,11 @@ static int wma_wake_event_piggybacked( wma_send_msg(wma, SIR_LIM_DELETE_STA_CONTEXT_IND, del_sta_ctx, 0); break; - + case WOW_REASON_ROAM_PMKID_REQUEST: + WMA_LOGD("Host woken up because of PMKID request event"); + errno = wma_roam_pmkid_request_event_handler(wma, pb_event, + pb_event_len); + break; default: WMA_LOGE("Wake reason %s(%u) is not a piggybacked event", wma_wow_wake_reason_str(wake_reason), wake_reason);