Răsfoiți Sursa

qcacld-3.0: Pass correct band info to roam set band

Currently driver always sets band value as REG_BAND_MASK_ALL
to roam set band which is incorrect.
Set correct band value from regulatory to roam set band.

Change-Id: I2cfb0c92e1eca549175135811d0122162281ba06
CRs-Fixed: 3050318
Ashish Kumar Dhanotiya 3 ani în urmă
părinte
comite
fbd44f9434

+ 7 - 3
components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c

@@ -33,6 +33,7 @@
 #include "wlan_cm_roam_api.h"
 #include "wlan_mlme_ucfg_api.h"
 #include "wlan_cm_api.h"
+#include "wlan_reg_ucfg_api.h"
 
 #define POLICY_MGR_MAX_CON_STRING_LEN   100
 
@@ -1643,7 +1644,7 @@ static uint32_t
 policy_mgr_get_connected_roaming_vdev_band_mask(struct wlan_objmgr_psoc *psoc,
 						uint8_t vdev_id)
 {
-	uint32_t band_mask = REG_BAND_MASK_ALL;
+	uint32_t band_mask;
 	struct wlan_objmgr_vdev *vdev;
 	bool dual_sta_roam_active;
 	struct wlan_channel *chan;
@@ -1657,19 +1658,22 @@ policy_mgr_get_connected_roaming_vdev_band_mask(struct wlan_objmgr_psoc *psoc,
 	}
 
 	chan = wlan_vdev_get_active_channel(vdev);
+
+	ucfg_reg_get_band(wlan_vdev_get_pdev(vdev), &band_mask);
+	roam_band_mask = wlan_cm_get_roam_band_value(psoc, vdev);
+
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID);
 	if (!chan) {
 		policy_mgr_err("no active channel");
 		return 0;
 	}
 
-	roam_band_mask = wlan_cm_get_roam_band_value(psoc, vdev_id);
 	/*
 	 * if vendor command to configure roam band is set , we will
 	 * take this as priority instead of drv cmd "SETROAMINTRABAND" or
 	 * active connection band.
 	 */
-	if (roam_band_mask != REG_BAND_MASK_ALL)
+	if (roam_band_mask != band_mask)
 		return roam_band_mask;
 
 	/*

+ 3 - 1
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -4567,6 +4567,7 @@ static void cm_roam_start_init(struct wlan_objmgr_psoc *psoc,
 	uint8_t vdev_id = wlan_vdev_get_id(vdev);
 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
 	enum QDF_OPMODE opmode;
+	uint32_t current_band;
 
 	opmode = wlan_vdev_mlme_get_opmode(vdev);
 	if (opmode != QDF_STA_MODE) {
@@ -4594,7 +4595,8 @@ static void cm_roam_start_init(struct wlan_objmgr_psoc *psoc,
 					       DEFAULT_ROAM_SCAN_SCHEME_BITMAP);
 	wlan_cm_roam_cfg_get_value(psoc, vdev_id,
 				   MOBILITY_DOMAIN, &src_cfg);
-	wlan_cm_set_roam_band_bitmask(psoc, vdev_id, REG_BAND_MASK_ALL);
+	ucfg_reg_get_band(pdev, &current_band);
+	wlan_cm_set_roam_band_bitmask(psoc, vdev_id, current_band);
 
 	mdie_present = src_cfg.bool_value;
 	/* Based on the auth scheme tell if we are 11r */

+ 9 - 4
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h

@@ -27,6 +27,7 @@
 #include "../../core/src/wlan_cm_roam_offload.h"
 #include "wlan_mlme_main.h"
 #include "wlan_mlme_api.h"
+#include "wlan_reg_ucfg_api.h"
 
 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
 /**
@@ -752,12 +753,12 @@ wlan_cm_roam_extract_roam_msg_info(wmi_unified_t wmi, void *evt_buf,
 /**
  * wlan_cm_get_roam_band_value  - Get roam band value from RSO config
  * @psoc: psoc pointer
- * @vdev_id: vdev id
+ * @vdev: Pointer to vdev
  *
  * Return: Roam Band
  */
 uint32_t wlan_cm_get_roam_band_value(struct wlan_objmgr_psoc *psoc,
-				     uint8_t vdev_id);
+				     struct wlan_objmgr_vdev *vdev);
 
 /**
  * wlan_cm_roam_extract_frame_info  - Extract the roam frame info TLV
@@ -1073,9 +1074,13 @@ void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
 
 static inline
 uint32_t wlan_cm_get_roam_band_value(struct wlan_objmgr_psoc *psoc,
-				     uint8_t vdev_id)
+				     struct wlan_objmgr_vdev *vdev)
 {
-	return REG_BAND_MASK_ALL;
+	uint32_t current_band;
+
+	ucfg_reg_get_band(wlan_vdev_get_pdev(vdev), &current_band);
+
+	return current_band;
 }
 
 static inline

+ 7 - 3
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -32,6 +32,7 @@
 #include "wlan_cm_roam_api.h"
 #include "wlan_blm_api.h"
 #include <../../core/src/wlan_cm_roam_i.h>
+#include "wlan_reg_ucfg_api.h"
 
 
 /* Support for "Fast roaming" (i.e., ESE, LFR, or 802.11r.) */
@@ -365,12 +366,13 @@ wlan_cm_roam_extract_roam_msg_info(wmi_unified_t wmi, void *evt_buf,
 }
 
 uint32_t wlan_cm_get_roam_band_value(struct wlan_objmgr_psoc *psoc,
-				     uint8_t vdev_id)
+				     struct wlan_objmgr_vdev *vdev)
 {
 	struct cm_roam_values_copy config;
 	uint32_t band_mask;
 
-	wlan_cm_roam_cfg_get_value(psoc, vdev_id, ROAM_BAND, &config);
+	wlan_cm_roam_cfg_get_value(psoc, wlan_vdev_get_id(vdev), ROAM_BAND,
+				   &config);
 
 	band_mask = config.uint_value;
 	mlme_debug("[ROAM BAND] band mask:%d", band_mask);
@@ -1154,6 +1156,7 @@ cm_update_roam_scan_channel_list(struct wlan_objmgr_psoc *psoc,
 	uint16_t pref_chan_cnt = 0;
 	uint32_t valid_chan_num = 0;
 	struct cm_roam_values_copy config;
+	uint32_t current_band;
 
 	if (chan_info->num_chan) {
 		mlme_debug("Current channel num: %d", chan_info->num_chan);
@@ -1171,8 +1174,9 @@ cm_update_roam_scan_channel_list(struct wlan_objmgr_psoc *psoc,
 		return QDF_STATUS_E_FAILURE;
 
 	wlan_cm_roam_cfg_get_value(psoc, vdev_id, ROAM_BAND, &config);
+	ucfg_reg_get_band(wlan_vdev_get_pdev(vdev), &current_band);
 	/* No need to modify channel list if all channel is allowed */
-	if (config.uint_value != REG_BAND_MASK_ALL) {
+	if (config.uint_value != current_band) {
 		valid_chan_num =
 			cm_modify_chan_list_based_on_band(freq_list, num_chan,
 							  config.uint_value);