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);