From 4abe8577898cd2fa5176fbeed85322488dc8a154 Mon Sep 17 00:00:00 2001 From: Pragaspathi Thilagaraj Date: Tue, 12 Apr 2022 13:00:17 +0530 Subject: [PATCH] qcacmn: Add support for per candidate roam frame capability Firmware advertises per candidate roam frame capability to indicate: 1. Firmware sends auth/assoc frames for each candidate to which roaming was attempted. 2. Fill the frame info TLV with authentication algo = 3 for authentication frames. Add support for the roam per candidate frame info capability Change-Id: I95c23031ab0fbc21fb9d8db3bd54004e4d1ac234 CRs-Fixed: 3172311 --- .../init_deinit/src/init_event_handler.c | 19 +++++++++++++++++++ .../obj_mgr/inc/wlan_objmgr_psoc_obj.h | 3 +++ wmi/inc/wmi_unified_param.h | 5 ++++- wmi/src/wmi_unified_tlv.c | 4 ++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/target_if/init_deinit/src/init_event_handler.c b/target_if/init_deinit/src/init_event_handler.c index a0c923881b..c313b1b0bd 100644 --- a/target_if/init_deinit/src/init_event_handler.c +++ b/target_if/init_deinit/src/init_event_handler.c @@ -114,6 +114,23 @@ init_deinit_update_wifi_pos_caps(struct wmi_unified *wmi_handle, {} #endif +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +static void +init_deinit_update_roam_stats_cap(struct wmi_unified *wmi_handle, + struct wlan_objmgr_psoc *psoc) +{ + if (wmi_service_enabled(wmi_handle, + wmi_service_roam_stats_per_candidate_frame_info)) + wlan_psoc_nif_fw_ext2_cap_set( + psoc, WLAN_ROAM_STATS_FRAME_INFO_PER_CANDIDATE); +} +#else +static inline void +init_deinit_update_roam_stats_cap(struct wmi_unified *wmi_handle, + struct wlan_objmgr_psoc *psoc) +{} +#endif + static int init_deinit_service_ready_event_handler(ol_scn_t scn_handle, uint8_t *event, uint32_t data_len) @@ -264,6 +281,8 @@ static int init_deinit_service_ready_event_handler(ol_scn_t scn_handle, wlan_psoc_nif_fw_ext_cap_set(psoc, WLAN_SOC_CEXT_CSA_TX_OFFLOAD); + init_deinit_update_roam_stats_cap(wmi_handle, psoc); + init_deinit_update_wifi_pos_caps(wmi_handle, psoc); /* override derived value, if it exceeds max peer count */ diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h index 78a4ce2afd..6088052553 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h @@ -240,6 +240,9 @@ /* 11AZ Secure ranging PHY Security support */ #define WLAN_RTT_11AZ_MAC_PHY_SEC_SUPPORT 0x00000004 +/* Roam Frame info stats - per candidate frames support */ +#define WLAN_ROAM_STATS_FRAME_INFO_PER_CANDIDATE 0x00000008 + /* PSOC op flags */ /* Invalid VHT cap */ diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index cf511772fa..0b3ff6f854 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -5594,6 +5594,9 @@ typedef enum { wmi_service_rtt_11az_tb_support, #endif wmi_service_pktlog_decode_info_support, +#ifdef WLAN_FEATURE_ROAM_OFFLOAD + wmi_service_roam_stats_per_candidate_frame_info, +#endif wmi_services_max, } wmi_conv_service_ids; #define WMI_SERVICE_UNAVAILABLE 0xFFFF @@ -7875,7 +7878,7 @@ struct wmi_roam_scan_stats_res { #define MAX_ROAM_SCAN_CHAN 38 #define MAX_ROAM_SCAN_STATS_TLV 5 #define WLAN_MAX_BTM_CANDIDATE 8 -#define WLAN_ROAM_MAX_FRAME_INFO 6 +#define WLAN_ROAM_MAX_FRAME_INFO (MAX_ROAM_CANDIDATE_AP * 6) /** * struct btm_req_candidate_info - BTM request candidate * info diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 22c3d2f719..ca3f914119 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -18806,6 +18806,10 @@ static void populate_tlv_service(uint32_t *wmi_service) #endif wmi_service[wmi_service_pktlog_decode_info_support] = WMI_SERVICE_PKTLOG_DECODE_INFO_SUPPORT; +#ifdef WLAN_FEATURE_ROAM_OFFLOAD + wmi_service[wmi_service_roam_stats_per_candidate_frame_info] = + WMI_SERVICE_ROAM_STAT_PER_CANDIDATE_FRAME_INFO_SUPPORT; +#endif } /**