qcacmn: Process ML Channel Measurement request

Host parse newely added vendor command
QCA_NL80211_VENDOR_SUBCMD_CONNECTED_CHANNEL_STATS and trigger
scan to get connected channel stats from FW in case of MLO
connection.

On scan done host sends scan done indication to upper layer
via QCA_NL80211_VENDOR_SUBCMD_CONNECTED_CHANNEL_STATS vendor
command.

Change-Id: I92dbd779c5fbdb1652a37cfa54c177bd13de4f28
CRs-Fixed: 3491060
This commit is contained in:
abhinav kumar
2023-05-09 15:43:54 +05:30
committed by Madan Koyyalamudi
parent 4bb252b2a3
commit 058889e6a0
2 changed files with 55 additions and 13 deletions

View File

@@ -1198,7 +1198,9 @@ scm_scan_req_update_params(struct wlan_objmgr_vdev *vdev,
*/
pdev = wlan_vdev_get_pdev(vdev);
pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
if (ucfg_scan_get_wide_band_scan(pdev))
/* Trigger wide band scan also if pause_home_channel scan flag is set */
if (ucfg_scan_get_wide_band_scan(pdev) ||
req->scan_req.scan_f_pause_home_channel)
req->scan_req.scan_f_wide_band = true;
else
req->scan_req.scan_f_wide_band = false;
@@ -1224,11 +1226,11 @@ static inline void scm_print_scan_req_info(struct scan_req_params *req)
uint32_t buff_len;
char *chan_buff;
uint32_t len = 0;
uint8_t idx, count = 0;
uint8_t buff_size, idx, count = 0;
struct chan_list *chan_lst;
#define MAX_SCAN_FREQ_TO_PRINT 25
scm_nofl_debug("Scan start: scan id %d vdev %d Dwell time: act %d pass %d act_2G %d act_6G %d pass_6G %d, probe time %d n_probes %d flags %x ext_flag %x events %x policy %d wide_bw %d pri %d",
scm_nofl_debug("Scan start: scan id %d vdev %d Dwell time: act %d pass %d act_2G %d act_6G %d pass_6G %d, probe time %d n_probes %d flags %x ext_flag %x events %x policy %d is_wb: %d pri %d",
req->scan_id, req->vdev_id, req->dwell_time_active,
req->dwell_time_passive, req->dwell_time_active_2g,
req->dwell_time_active_6g, req->dwell_time_passive_6g,
@@ -1246,21 +1248,39 @@ static inline void scm_print_scan_req_info(struct scan_req_params *req)
if (!chan_lst->num_chan)
return;
/*
* Buffer of (num channel * 11) + 1 to consider the 4 char freq, 6 char
* flags and 1 space after it for each channel and 1 to end the string
* with NULL.
* Buffer of (num channel * buff_size) + 1 to consider the 4 char freq,
* 6 char flags and 1 space after it for each channel and 1 to end the
* string with NULL.
* In case of wide band scan extra 4 char for phymode.
*/
buff_len =
(QDF_MIN(MAX_SCAN_FREQ_TO_PRINT, chan_lst->num_chan) * 11) + 1;
if (req->scan_f_wide_band)
buff_size = 15;
else
buff_size = 11;
buff_len = (QDF_MIN(MAX_SCAN_FREQ_TO_PRINT,
chan_lst->num_chan) * buff_size) + 1;
chan_buff = qdf_mem_malloc(buff_len);
if (!chan_buff)
return;
scm_nofl_debug("Total freq %d", chan_lst->num_chan);
for (idx = 0; idx < chan_lst->num_chan; idx++) {
len += qdf_scnprintf(chan_buff + len, buff_len - len,
"%d(0x%02x) ", chan_lst->chan[idx].freq,
chan_lst->chan[idx].flags);
if (req->scan_f_wide_band)
len += qdf_scnprintf(chan_buff + len, buff_len - len,
"%d(0x%02x)[%d] ",
chan_lst->chan[idx].freq,
chan_lst->chan[idx].flags,
chan_lst->chan[idx].phymode);
else
len += qdf_scnprintf(chan_buff + len, buff_len - len,
"%d(0x%02x) ",
chan_lst->chan[idx].freq,
chan_lst->chan[idx].flags);
count++;
if (count >= MAX_SCAN_FREQ_TO_PRINT) {
/* Print the MAX_SCAN_FREQ_TO_PRINT channels */

View File

@@ -830,6 +830,16 @@ enum scan_priority {
* @SCAN_PHY_MODE_11AX_HE20_2G: 2GHz 11ax he20 mode
* @SCAN_PHY_MODE_11AX_HE40_2G: 2GHz 11ax he40 mode
* @SCAN_PHY_MODE_11AX_HE80_2G: 2GHz 11ax he80 mode
* @SCAN_PHY_MODE_11BE_EHT20: 11be EHT 20 mode
* @SCAN_PHY_MODE_11BE_EHT40: 11be EHT 40 mode
* @SCAN_PHY_MODE_11BE_EHT80: 11be EHT 80 mode
* @SCAN_PHY_MODE_11BE_EHT80_80: 11be EHT 80+80 mode
* @SCAN_PHY_MODE_11BE_EHT160: 11be EHT 160 mode
* @SCAN_PHY_MODE_11BE_EHT160_160: 11be EHT 160+160 mode
* @SCAN_PHY_MODE_11BE_EHT320: 11be EHT 320 mode
* @SCAN_PHY_MODE_11BE_EHT20_2G: 2GHz 11be EHT 20 mode
* @SCAN_PHY_MODE_11BE_EHT40_2G: 2GHz 11be EHT 40 mode
* @SCAN_PHY_MODE_11BE_EHT80_2G: 2GHz 11be EHT 80 mode
* @SCAN_PHY_MODE_UNKNOWN: unknown phy mode
* @SCAN_PHY_MODE_MAX: max valid phymode
*/
@@ -858,8 +868,20 @@ enum scan_phy_mode {
SCAN_PHY_MODE_11AX_HE20_2G = 21,
SCAN_PHY_MODE_11AX_HE40_2G = 22,
SCAN_PHY_MODE_11AX_HE80_2G = 23,
SCAN_PHY_MODE_UNKNOWN = 24,
SCAN_PHY_MODE_MAX = 24
#ifdef WLAN_FEATURE_11BE
SCAN_PHY_MODE_11BE_EHT20 = 24,
SCAN_PHY_MODE_11BE_EHT40 = 25,
SCAN_PHY_MODE_11BE_EHT80 = 26,
SCAN_PHY_MODE_11BE_EHT80_80 = 27,
SCAN_PHY_MODE_11BE_EHT160 = 28,
SCAN_PHY_MODE_11BE_EHT160_160 = 29,
SCAN_PHY_MODE_11BE_EHT320 = 30,
SCAN_PHY_MODE_11BE_EHT20_2G = 31,
SCAN_PHY_MODE_11BE_EHT40_2G = 32,
SCAN_PHY_MODE_11BE_EHT80_2G = 33,
#endif
SCAN_PHY_MODE_UNKNOWN = 34,
SCAN_PHY_MODE_MAX = 34
};
/**