qcacld-3.0: Enable full scan logging in cm_roam_scan_info_event

In the api cm_roam_scan_info_event(), only for partial
roam scan the frequencies are logged in logcat. For full scan,
the expectation is to print the frequency count as the number
of characters for scanning all frequencies exceed 255.

Enable Roam full scan logging in api cm_roam_scan_info_event()

Change-Id: Ib644a4e8d85e434e8b826c7656cda1251134c4fa
CRs-Fixed: 3131791
This commit is contained in:
VIJAY RAJ
2022-03-10 17:26:08 +05:30
committed by Madan Koyyalamudi
parent d7dc1883ba
commit ebe3c21573
6 changed files with 99 additions and 17 deletions

View File

@@ -47,6 +47,9 @@
#include "wlan_roam_debug.h"
#include "wlan_mlo_mgr_roam.h"
#include "wlan_mlo_mgr_sta.h"
#include "wlan_mlme_api.h"
#include "wlan_policy_mgr_api.h"
#ifdef WLAN_FEATURE_SAE
#define CM_IS_FW_FT_SAE_SUPPORTED(fw_akm_bitmap) \
@@ -5261,11 +5264,36 @@ send_evt:
#if defined(WLAN_FEATURE_CONNECTIVITY_LOGGING) && \
defined(WLAN_FEATURE_ROAM_OFFLOAD)
void cm_roam_scan_info_event(struct wmi_roam_scan_data *scan, uint8_t vdev_id)
static
bool wlan_is_valid_frequency(uint32_t freq, uint32_t band_capability,
uint32_t band_mask)
{
if ((band_capability == BIT(REG_BAND_5G) ||
band_mask == BIT(REG_BAND_5G) ||
band_capability == BIT(REG_BAND_6G) ||
band_mask == BIT(REG_BAND_6G)) &&
WLAN_REG_IS_24GHZ_CH_FREQ(freq))
return false;
if ((band_capability == BIT(REG_BAND_2G) ||
band_mask == BIT(REG_BAND_2G)) &&
!WLAN_REG_IS_24GHZ_CH_FREQ(freq))
return false;
return true;
}
void cm_roam_scan_info_event(struct wlan_objmgr_psoc *psoc,
struct wmi_roam_scan_data *scan, uint8_t vdev_id)
{
int i;
struct wlan_log_record *log_record = NULL;
struct wmi_roam_candidate_info *ap = scan->ap;
uint32_t chan_freq[NUM_CHANNELS];
uint8_t count = 0, status, num_chan;
uint32_t band_capability = 0, band_mask = 0;
bool is_full_scan;
struct wlan_objmgr_vdev *vdev = NULL;
log_record = qdf_mem_malloc(sizeof(*log_record));
if (!log_record)
@@ -5286,13 +5314,47 @@ void cm_roam_scan_info_event(struct wmi_roam_scan_data *scan, uint8_t vdev_id)
if (scan->num_ap)
log_record->roam_scan.cand_ap_count = scan->num_ap - 1;
if (scan->num_chan > MAX_ROAM_SCAN_CHAN)
scan->num_chan = MAX_ROAM_SCAN_CHAN;
log_record->roam_scan.num_scanned_freq = scan->num_chan;
for (i = 0; i < scan->num_chan; i++)
log_record->roam_scan.scan_freq[i] = scan->chan_freq[i];
is_full_scan = scan->type & scan->present;
if (is_full_scan) {
status = mlme_get_fw_scan_channels(psoc, chan_freq, &num_chan);
if (QDF_IS_STATUS_ERROR(status))
goto out;
status = wlan_mlme_get_band_capability(psoc, &band_capability);
if (QDF_IS_STATUS_ERROR(status))
goto out;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_OBJMGR_ID);
if (!vdev)
goto out;
band_mask = policy_mgr_get_connected_vdev_band_mask(vdev);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
for (i = 0; i < num_chan; i++) {
if (!wlan_is_valid_frequency(chan_freq[i],
band_capability,
band_mask))
continue;
log_record->roam_scan.scan_freq[count] = chan_freq[i];
count++;
}
log_record->roam_scan.num_scanned_freq = count;
} else {
if (scan->num_chan > MAX_ROAM_SCAN_CHAN)
scan->num_chan = MAX_ROAM_SCAN_CHAN;
log_record->roam_scan.num_scanned_freq = scan->num_chan;
for (i = 0; i < scan->num_chan; i++)
log_record->roam_scan.scan_freq[i] = scan->chan_freq[i];
}
out:
wlan_connectivity_log_enqueue(log_record);
qdf_mem_free(log_record);
}

View File

@@ -33,12 +33,14 @@
defined(WLAN_FEATURE_ROAM_OFFLOAD)
/**
* cm_roam_scan_info_event() - send scan info to userspace
* @psoc: psoc common object
* @scan: roam scan data
* @vdev_id: vdev id
*
* Return: None
*/
void cm_roam_scan_info_event(struct wmi_roam_scan_data *scan, uint8_t vdev_id);
void cm_roam_scan_info_event(struct wlan_objmgr_psoc *psoc,
struct wmi_roam_scan_data *scan, uint8_t vdev_id);
/**
* cm_roam_trigger_info_event() - send trigger info to userspace
@@ -80,7 +82,8 @@ void cm_roam_result_info_event(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
#else
static inline void
cm_roam_scan_info_event(struct wmi_roam_scan_data *scan, uint8_t vdev_id)
cm_roam_scan_info_event(struct wlan_objmgr_psoc *psoc,
struct wmi_roam_scan_data *scan, uint8_t vdev_id)
{
}

View File

@@ -2844,6 +2844,7 @@ cm_stats_log_roam_scan_candidates(struct wmi_roam_candidate_info *ap,
/**
* cm_roam_stats_print_scan_info - Print the roam scan details and candidate AP
* details
* @psoc: psoc common object
* @scan: Pointer to the received tlv after sanitization
* @vdev_id: Vdev ID
* @trigger: Roam scan trigger reason
@@ -2855,7 +2856,8 @@ cm_stats_log_roam_scan_candidates(struct wmi_roam_candidate_info *ap,
* Return: None
*/
static void
cm_roam_stats_print_scan_info(struct wmi_roam_scan_data *scan, uint8_t vdev_id,
cm_roam_stats_print_scan_info(struct wlan_objmgr_psoc *psoc,
struct wmi_roam_scan_data *scan, uint8_t vdev_id,
uint32_t trigger, uint32_t timestamp)
{
uint16_t num_ch = scan->num_chan;
@@ -2865,7 +2867,7 @@ cm_roam_stats_print_scan_info(struct wmi_roam_scan_data *scan, uint8_t vdev_id,
char time[TIME_STRING_LEN];
/* Update roam scan info to userspace */
cm_roam_scan_info_event(scan, vdev_id);
cm_roam_scan_info_event(psoc, scan, vdev_id);
buf = qdf_mem_malloc(ROAM_CHANNEL_BUF_SIZE);
if (!buf)
@@ -3169,7 +3171,8 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
if (stats_info->scan[i].present &&
stats_info->trigger[i].present)
cm_roam_stats_print_scan_info(&stats_info->scan[i],
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);
@@ -3251,7 +3254,8 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
if (stats_info->scan[0].present &&
stats_info->trigger[0].present)
cm_roam_stats_print_scan_info(&stats_info->scan[0],
cm_roam_stats_print_scan_info(psoc,
&stats_info->scan[0],
stats_info->vdev_id,
stats_info->trigger[0].trigger_reason,
stats_info->trigger[0].timestamp);