Browse Source

qcacld-3.0: Fill proper channel(s) in wide band scan request

In case of 320 MHz BW, 6 GHz channel numbers are overlapping
with existing 2.4 GHz and 5 GHz channel numbers.

If DUT connected with one of overlapped channel, To identify
exact band and corresponding bonded channels driver should
pass 320 MHz center frequency to
wlan_reg_get_bonded_chan_entry() as a argument along with
connected 6 GHz frequency and channel width.

Fix is to use 320 MHz center frequency to compute bonded
channels in mlme_update_freq_in_scan_start_req().

Change-Id: I7616f0379d64e33f9bd4a208253db0a390158f77
CRs-Fixed: 3606575
Abhinav Kumar 1 year ago
parent
commit
9e1471bd14
1 changed files with 19 additions and 6 deletions
  1. 19 6
      components/mlme/core/src/wlan_mlme_main.c

+ 19 - 6
components/mlme/core/src/wlan_mlme_main.c

@@ -397,22 +397,35 @@ mlme_update_freq_in_scan_start_req(struct wlan_objmgr_vdev *vdev,
 	const struct bonded_channel_freq *range;
 	uint8_t num_chan;
 	qdf_freq_t op_freq, center_20_freq, start_freq, end_freq;
+	qdf_freq_t cen320_freq = 0;
 	enum scan_phy_mode phymode = SCAN_PHY_MODE_UNKNOWN;
 	uint8_t vdev_id;
+	struct wlan_channel *des_chan;
 
 	vdev_id = vdev->vdev_objmgr.vdev_id;
 
-	if (scan_freq != INVALID_CHANNEL)
+	if (scan_freq != INVALID_CHANNEL) {
 		op_freq = scan_freq;
-	else
-		op_freq = wlan_get_operation_chan_freq(vdev);
+	} else {
+		des_chan = wlan_vdev_mlme_get_des_chan(vdev);
+		if (!des_chan) {
+			mlme_debug("null des chan");
+			return QDF_STATUS_E_FAILURE;
+		}
+		op_freq = des_chan->ch_freq;
+		/* Set center_freq1 to center frequency of complete 320MHz */
+		cen320_freq = des_chan->ch_cfreq2;
+	}
 
-	mlme_debug("vdev %d : fill ch list for op_freq:%d, scan_ch_width: %d",
-		   vdev_id, op_freq, scan_ch_width);
+	mlme_debug("vdev %d :op_freq:%d, cen320_freq:%d, scan_ch_width: %d",
+		   vdev_id, op_freq, cen320_freq, scan_ch_width);
 
 	if (scan_ch_width == CH_WIDTH_320MHZ) {
+		if (!cen320_freq)
+			return QDF_STATUS_E_FAILURE;
 		range = wlan_reg_get_bonded_chan_entry(op_freq,
-						       scan_ch_width, 0);
+						       scan_ch_width,
+						       cen320_freq);
 		if (!range) {
 			mlme_debug("vdev %d : range is null for freq %d",
 				   vdev_id, op_freq);