qcacld-3.0: Add chipset stats for Roaming operations
Add chipset stats for Roaming operations Change-Id: I0f9fbb362a3c4a8bcbbec991775272a127cdeae6 CRs-Fixed: 3783032
This commit is contained in:

committed by
Ravindra Konda

parent
1118030920
commit
391e08c8fd
@@ -37,6 +37,7 @@
|
|||||||
#include "wlan_connectivity_logging.h"
|
#include "wlan_connectivity_logging.h"
|
||||||
#include "target_if.h"
|
#include "target_if.h"
|
||||||
#include "wlan_mlo_mgr_roam.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.) */
|
/* Support for "Fast roaming" (i.e., ESE, LFR, or 802.11r.) */
|
||||||
#define BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN 15
|
#define BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN 15
|
||||||
@@ -4359,6 +4360,140 @@ wlan_cm_update_roam_stats_info(struct wlan_objmgr_psoc *psoc,
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
QDF_STATUS
|
||||||
cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
|
cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
|
||||||
struct roam_stats_event *stats_info)
|
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].present &&
|
||||||
stats_info->scan[i].type;
|
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 ==
|
if (stats_info->trigger[i].trigger_reason ==
|
||||||
ROAM_TRIGGER_REASON_BTM) {
|
ROAM_TRIGGER_REASON_BTM) {
|
||||||
cm_roam_handle_btm_stats(psoc, stats_info, i,
|
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->scan[i],
|
||||||
stats_info->vdev_id, is_full_scan);
|
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(
|
cm_roam_stats_print_scan_info(
|
||||||
psoc, &stats_info->scan[i],
|
psoc, &stats_info->scan[i],
|
||||||
stats_info->vdev_id,
|
stats_info->vdev_id,
|
||||||
stats_info->trigger[i].trigger_reason,
|
stats_info->trigger[i].trigger_reason,
|
||||||
stats_info->trigger[i].timestamp);
|
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,
|
cm_roam_stats_print_roam_result(psoc,
|
||||||
&stats_info->trigger[i],
|
&stats_info->trigger[i],
|
||||||
&stats_info->result[i],
|
&stats_info->result[i],
|
||||||
&stats_info->scan[i],
|
&stats_info->scan[i],
|
||||||
stats_info->vdev_id);
|
stats_info->vdev_id);
|
||||||
|
cm_cp_stats_cstats_roam_result
|
||||||
|
(vdev, &stats_info->result[i]);
|
||||||
|
}
|
||||||
|
|
||||||
if (stats_info->frame_stats[i].num_frame)
|
if (stats_info->frame_stats[i].num_frame)
|
||||||
cm_roam_print_frame_info(psoc,
|
cm_roam_print_frame_info(psoc,
|
||||||
|
Reference in New Issue
Block a user