Procházet zdrojové kódy

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
abhinav kumar před 2 roky
rodič
revize
058889e6a0

+ 31 - 11
umac/scan/core/src/wlan_scan_manager.c

@@ -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 */

+ 24 - 2
umac/scan/dispatcher/inc/wlan_scan_public_structs.h

@@ -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
 };
 
 /**