qcacld-3.0: Fill the vendor attributes with the Roam stats

This change gathers the roam event stats from the FW.
New vendor event is used to fill in the vendor attributes
whenever the roam stats are received from Firmware.

Change-Id: I9a2ddef62d26b0b68897891788733df452ac1ceb
CRs-Fixed: 3036518
此提交包含在:
Srikanth Marepalli
2021-11-03 01:07:05 +05:30
提交者 Madan Koyyalamudi
父節點 5de37373cb
當前提交 bbeccbc9ce
共有 11 個檔案被更改,包括 573 行新增0 行删除

查看文件

@@ -1108,6 +1108,26 @@ wlan_cm_update_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
uint8_t
wlan_cm_get_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
enum roam_rt_stats_params stats);
/**
* cm_report_roam_rt_stats - Gathers/Sends the roam events stats
* @psoc: Pointer to psoc structure
* @vdev_id: Vdev ID
* @events: Event/Notif type from roam event/roam stats event
* @roam_info: Roam stats from the roam stats event
* @value: Notif param value from the roam event
* @idx: TLV index in roam stats event
*
* Gathers the roam stats from the roam event and the roam stats event and
* sends them to hdd for filling the vendor attributes.
*
* Return: none
*/
void cm_report_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
enum roam_rt_stats_type events,
struct roam_stats_event *roam_info,
uint32_t value, uint8_t idx);
#else
static inline
void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
@@ -1267,6 +1287,13 @@ wlan_cm_get_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
{
return 0;
}
static inline void
cm_report_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, enum roam_rt_stats_type events,
struct roam_stats_event *roam_info,
uint32_t value, uint8_t idx)
{}
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
#ifdef WLAN_FEATURE_FIPS

查看文件

@@ -1851,6 +1851,30 @@ struct roam_msg_info {
uint32_t msg_param2;
};
/**
* struct roam_event_rt_info - Roam event related information
* @roam_scan_state: roam scan state notif value
* @roam_invoke_fail_reason: roam invoke fail reason
*/
struct roam_event_rt_info {
uint32_t roam_scan_state;
uint32_t roam_invoke_fail_reason;
};
/**
* enum roam_rt_stats_type: different types of params to get roam event stats
* for the vdev
* @ROAM_RT_STATS_TYPE_SCAN_STATE: Roam Scan Start/End
* @ROAM_RT_STATS_TYPE_INVOKE_FAIL_REASON: One of WMI_ROAM_FAIL_REASON_ID for
* roam failure in case of forced roam
* @ROAM_RT_STATS_TYPE_ROAM_SCAN_INFO: Roam Trigger/Fail/Scan/AP Stats
*/
enum roam_rt_stats_type {
ROAM_RT_STATS_TYPE_SCAN_STATE,
ROAM_RT_STATS_TYPE_INVOKE_FAIL_REASON,
ROAM_RT_STATS_TYPE_ROAM_SCAN_INFO,
};
/**
* struct roam_frame_info - Structure to hold the mgmt frame/eapol frame
* related info exchanged during roaming.
@@ -1958,6 +1982,8 @@ struct roam_invoke_req {
* @CM_ROAM_NOTIF_DISASSOC_RECV: indicate disassoc received, notif_params to be
sent as reason code, notif_params1 to be sent
as frame length
* @CM_ROAM_NOTIF_SCAN_END: indicate roam scan end, notif_params to be sent
as WMI_ROAM_TRIGGER_REASON_ID
*/
enum cm_roam_notif {
CM_ROAM_NOTIF_INVALID = 0,
@@ -1971,6 +1997,7 @@ enum cm_roam_notif {
CM_ROAM_NOTIF_SCAN_START,
CM_ROAM_NOTIF_DEAUTH_RECV,
CM_ROAM_NOTIF_DISASSOC_RECV,
CM_ROAM_NOTIF_SCAN_END = 12,
};
/**
@@ -2126,6 +2153,7 @@ struct roam_offload_roam_event {
* @btm_rsp: BTM response related data
* @roam_init_info: Roam initial related data
* @roam_msg_info: Roam message related information
* @roam_event_param: Roam event notif params
*/
struct roam_stats_event {
uint8_t vdev_id;
@@ -2138,6 +2166,7 @@ struct roam_stats_event {
struct roam_btm_response_data btm_rsp[MAX_ROAM_SCAN_STATS_TLV];
struct roam_initial_data roam_init_info[MAX_ROAM_SCAN_STATS_TLV];
struct roam_msg_info *roam_msg_info;
struct roam_event_rt_info roam_event_param;
};
/*

查看文件

@@ -3031,6 +3031,70 @@ cm_roam_stats_print_11kv_info(struct wmi_neighbor_report_data *neigh_rpt,
qdf_mem_free(buf);
}
void cm_report_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
enum roam_rt_stats_type events,
struct roam_stats_event *roam_info,
uint32_t value, uint8_t idx)
{
struct roam_stats_event *roam_event = NULL;
if (!wlan_cm_get_roam_rt_stats(psoc, ROAM_RT_STATS_ENABLE)) {
mlme_err("Roam events stats is disabled");
return;
}
switch (events) {
case ROAM_RT_STATS_TYPE_SCAN_STATE:
roam_event = qdf_mem_malloc(sizeof(*roam_event));
if (!roam_event)
return;
if (value == WMI_ROAM_NOTIF_SCAN_START)
roam_event->roam_event_param.roam_scan_state =
QCA_WLAN_VENDOR_ROAM_SCAN_STATE_START;
else if (value == WMI_ROAM_NOTIF_SCAN_END)
roam_event->roam_event_param.roam_scan_state =
QCA_WLAN_VENDOR_ROAM_SCAN_STATE_END;
//TO DO: Add a new CB in CM and register the hdd function to it
//And call the new CB from here.
mlme_debug("Invoke HDD roam events callback for roam "
"scan notif");
roam_event->vdev_id = vdev_id;
qdf_mem_free(roam_event);
break;
case ROAM_RT_STATS_TYPE_INVOKE_FAIL_REASON:
roam_event = qdf_mem_malloc(sizeof(*roam_event));
if (!roam_event)
return;
roam_event->roam_event_param.roam_invoke_fail_reason = value;
//TO DO: Add a new CB in CM and register the hdd function to it
//And call the new CB from here.
mlme_debug("Invoke HDD roam events callback for roam "
"invoke fail");
roam_event->vdev_id = vdev_id;
qdf_mem_free(roam_event);
break;
case ROAM_RT_STATS_TYPE_ROAM_SCAN_INFO:
if (roam_info->scan[idx].present ||
roam_info->trigger[idx].present ||
(roam_info->result[idx].present &&
roam_info->result[idx].fail_reason)) {
mlme_debug("Invoke HDD roam events callback for roam "
"stats event");
roam_info->vdev_id = vdev_id;
//TO DO: Add a new CB in CM and register the hdd function to it
//And call the new CB from here.
}
break;
default:
break;
}
}
QDF_STATUS
cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
struct roam_stats_event *stats_info)
@@ -3111,6 +3175,10 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
&stats_info->data_11kv[i],
stats_info->vdev_id);
}
cm_report_roam_rt_stats(psoc, stats_info->vdev_id,
ROAM_RT_STATS_TYPE_ROAM_SCAN_INFO,
stats_info, 0, i);
}
if (!stats_info->num_tlv) {

查看文件

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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 above
@@ -2557,6 +2558,8 @@ wmi_convert_fw_notif_to_cm_notif(uint32_t fw_notif)
return CM_ROAM_NOTIF_DEAUTH_RECV;
case WMI_ROAM_NOTIF_DISASSOC_RECV:
return CM_ROAM_NOTIF_DISASSOC_RECV;
case WMI_ROAM_NOTIF_SCAN_END:
return CM_ROAM_NOTIF_SCAN_END;
default:
return CM_ROAM_NOTIF_INVALID;
}