qcacld-3.0: Add chipset stats for Roaming operations

Add chipset stats for Roaming operations

Change-Id: I0f9fbb362a3c4a8bcbbec991775272a127cdeae6
CRs-Fixed: 3783032
Этот коммит содержится в:
Rachit Kankane
2024-04-05 21:35:40 +05:30
коммит произвёл Ravindra Konda
родитель 1118030920
Коммит 391e08c8fd

Просмотреть файл

@@ -37,6 +37,7 @@
#include "wlan_connectivity_logging.h"
#include "target_if.h"
#include "wlan_mlo_mgr_roam.h"
#include <wlan_cp_stats_chipset_stats.h>
/* Support for "Fast roaming" (i.e., ESE, LFR, or 802.11r.) */
#define BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN 15
@@ -4359,6 +4360,140 @@ wlan_cm_update_roam_stats_info(struct wlan_objmgr_psoc *psoc,
}
#endif
#ifdef WLAN_CHIPSET_STATS
static void
cm_cp_stats_cstats_roam_scan_cancel(struct cstats_sta_roam_scan_cancel *stat,
struct wmi_roam_trigger_abort_reason *abort)
{
stat->reason_code = abort->abort_reason_code;
stat->data_rssi = abort->data_rssi;
stat->data_rssi_threshold = abort->data_rssi_threshold;
stat->rx_linkspeed_status = abort->rx_linkspeed_status;
}
static void
cm_cp_stats_cstats_roam_scan_start(struct wlan_objmgr_vdev *vdev,
struct wmi_roam_trigger_info *event,
bool is_full_scan)
{
struct cstats_sta_roam_scan_start stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_STA_ROAM_SCAN_START_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_sta_roam_scan_start) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.trigger_reason = event->trigger_reason;
stat.trigger_sub_reason = event->trigger_sub_reason;
stat.rssi = event->current_rssi;
stat.timestamp = event->timestamp;
stat.is_full_scan = is_full_scan;
cm_cp_stats_cstats_roam_scan_cancel(&stat.abort_roam,
&event->abort_reason);
wlan_cstats_host_stats(sizeof(struct cstats_sta_roam_scan_start),
&stat);
}
static void
cm_cp_stats_cstats_roam_scan_ap(struct cstats_sta_roam_scan_ap *stat,
struct wmi_roam_candidate_info *ap,
uint8_t num_ap)
{
uint8_t i;
if (num_ap > MAX_ROAM_CANDIDATE_AP)
num_ap = MAX_ROAM_CANDIDATE_AP;
for (i = 0; i < num_ap; i++) {
CSTATS_MAC_COPY(stat->bssid, ap->bssid.bytes);
stat[i].total_score = ap->total_score;
stat[i].rssi = ap->rssi;
stat[i].etp = ap->etp;
stat[i].freq = ap->freq;
stat[i].cu_load = ap->cu_load;
stat[i].is_mlo = ap->is_mlo;
stat[i].type = ap->type;
}
}
static void cm_cp_stats_cstats_roam_scan_done(struct wlan_objmgr_vdev *vdev,
struct wmi_roam_scan_data *event,
bool is_full_scan)
{
struct cstats_sta_roam_scan_done stat = {0};
uint8_t i;
if (event->num_ap >= MAX_ROAM_CANDIDATE_AP &&
event->num_chan > MAX_ROAM_SCAN_CHAN)
return;
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_STA_ROAM_SCAN_DONE_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_sta_roam_scan_done) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.cand_ap_count = event->num_ap;
stat.num_scanned_freq = event->num_chan;
stat.timestamp = event->scan_complete_timestamp;
for (i = 0; i < event->num_chan; i++)
stat.scanned_freq[i] = event->chan_freq[i];
stat.is_full_scan = is_full_scan;
cm_cp_stats_cstats_roam_scan_ap(stat.ap, event->ap, stat.cand_ap_count);
wlan_cstats_host_stats(sizeof(struct cstats_sta_roam_scan_done), &stat);
}
static void cm_cp_stats_cstats_roam_result(struct wlan_objmgr_vdev *vdev,
struct wmi_roam_result *event)
{
struct cstats_sta_roam_result stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_STA_ROAM_RESULT_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_sta_roam_result) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.timestamp = event->timestamp;
stat.status = event->status;
stat.fail_reason = event->fail_reason;
stat.roam_cancel_reason = event->roam_abort_reason;
CSTATS_MAC_COPY(stat.bssid, event->fail_bssid.bytes);
wlan_cstats_host_stats(sizeof(struct cstats_sta_roam_result), &stat);
}
#else
static inline void
cm_cp_stats_cstats_roam_scan_start(struct wlan_objmgr_vdev *vdev,
struct wmi_roam_trigger_info *event,
bool is_full_scan)
{
}
static inline void
cm_cp_stats_cstats_roam_scan_done(struct wlan_objmgr_vdev *vdev,
struct wmi_roam_scan_data *event,
bool is_full_scan)
{
}
static inline void
cm_cp_stats_cstats_roam_result(struct wlan_objmgr_vdev *vdev,
struct wmi_roam_result *event)
{
}
#endif /* WLAN_CHIPSET_STATS */
QDF_STATUS
cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
struct roam_stats_event *stats_info)
@@ -4384,6 +4519,9 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
stats_info->scan[i].present &&
stats_info->scan[i].type;
cm_cp_stats_cstats_roam_scan_start
(vdev, &stats_info->trigger[i], is_full_scan);
if (stats_info->trigger[i].trigger_reason ==
ROAM_TRIGGER_REASON_BTM) {
cm_roam_handle_btm_stats(psoc, stats_info, i,
@@ -4398,20 +4536,26 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
&stats_info->scan[i],
stats_info->vdev_id, is_full_scan);
if (stats_info->scan[i].present)
if (stats_info->scan[i].present) {
cm_roam_stats_print_scan_info(
psoc, &stats_info->scan[i],
stats_info->vdev_id,
stats_info->trigger[i].trigger_reason,
stats_info->trigger[i].timestamp);
cm_cp_stats_cstats_roam_scan_done
(vdev, &stats_info->scan[i], is_full_scan);
}
}
if (stats_info->result[i].present)
if (stats_info->result[i].present) {
cm_roam_stats_print_roam_result(psoc,
&stats_info->trigger[i],
&stats_info->result[i],
&stats_info->scan[i],
stats_info->vdev_id);
cm_cp_stats_cstats_roam_result
(vdev, &stats_info->result[i]);
}
if (stats_info->frame_stats[i].num_frame)
cm_roam_print_frame_info(psoc,