qcacld-3.0: Send proper PCL list to FW
Currently, the host does not check STA+STA concurrency before sending VDEV/PDEV level PCL command to FW. 1. In case of STA Standalone connection, Host should send PDEV level PCL commands to FW and marks all channels in PCL as allowed. 2. In the case of STA + STA connection in MCC/SCC, Host should send PDEV level PCL command for primary vdev id and mark all channels in PCL as allowed. 3. In case of STA + STA connection in DBS, Host should send VDEV level PCL command for both vdev id and via PCL list host should make sure band is restricted to maintain only DBS. 4. Initially STA + STA connection in DBS and then one STA got disconnected. In this case, After disconnection Host should send PDEV level PCL command for connected vdev id and mark all channels in PCL as allowed. Change-Id: I59cf5dfd1bf8fb26e360a8b0b5456fe05037376a CRs-Fixed: 3084156
This commit is contained in:

committed by
Madan Koyyalamudi

parent
62a3d83720
commit
f778fdacef
@@ -3534,7 +3534,7 @@ cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
enum roam_offload_state cur_state;
|
||||
uint8_t temp_vdev_id, roam_enabled_vdev_id;
|
||||
uint32_t roaming_bitmap, count;
|
||||
bool dual_sta_roam_active, usr_disabled_roaming;
|
||||
bool dual_sta_roam_active, usr_disabled_roaming, sta_concurrency_is_dbs;
|
||||
QDF_STATUS status;
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
@@ -3552,8 +3552,18 @@ cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
dual_sta_policy = &mlme_obj->cfg.gen.dual_sta_policy;
|
||||
dual_sta_roam_active =
|
||||
wlan_mlme_get_dual_sta_roaming_enabled(psoc);
|
||||
count = policy_mgr_mode_specific_connection_count(psoc, PM_STA_MODE,
|
||||
NULL);
|
||||
sta_concurrency_is_dbs = (count == 2) &&
|
||||
!(policy_mgr_current_concurrency_is_mcc(psoc) ||
|
||||
policy_mgr_current_concurrency_is_scc(psoc));
|
||||
|
||||
cur_state = mlme_get_roam_state(psoc, vdev_id);
|
||||
|
||||
mlme_info("sta count:%d, dual_sta_roam_active:%d, is_dbs:%d, state:%d",
|
||||
count, dual_sta_roam_active, sta_concurrency_is_dbs,
|
||||
cur_state);
|
||||
|
||||
switch (cur_state) {
|
||||
case WLAN_ROAM_DEINIT:
|
||||
roaming_bitmap = mlme_get_roam_trigger_bitmap(psoc, vdev_id);
|
||||
@@ -3567,12 +3577,7 @@ cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
* Enable roaming on other interface only if STA + STA
|
||||
* concurrency is in DBS.
|
||||
*/
|
||||
count = policy_mgr_mode_specific_connection_count(psoc,
|
||||
PM_STA_MODE,
|
||||
NULL);
|
||||
if (dual_sta_roam_active && (count == 2 &&
|
||||
!(policy_mgr_current_concurrency_is_mcc(psoc) ||
|
||||
policy_mgr_current_concurrency_is_scc(psoc)))) {
|
||||
if (dual_sta_roam_active && sta_concurrency_is_dbs) {
|
||||
mlme_info("STA + STA concurrency is in DBS");
|
||||
break;
|
||||
}
|
||||
@@ -3659,7 +3664,7 @@ cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
* PCL type to vdev level
|
||||
*/
|
||||
if (roam_enabled_vdev_id != WLAN_UMAC_VDEV_ID_MAX &&
|
||||
dual_sta_roam_active)
|
||||
dual_sta_roam_active && sta_concurrency_is_dbs)
|
||||
wlan_cm_roam_activate_pcl_per_vdev(psoc, vdev_id, true);
|
||||
|
||||
/* Set PCL before sending RSO start */
|
||||
|
@@ -78,6 +78,9 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc,
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
mlme_debug("RSO_CFG: band_capability:%d band_mask:%d for vdev[%d]",
|
||||
band_capability, pcl_req->band_mask, pcl_req->vdev_id);
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, pcl_req->vdev_id,
|
||||
WLAN_MLME_SB_ID);
|
||||
if (!vdev) {
|
||||
@@ -141,7 +144,8 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc,
|
||||
goto end;
|
||||
}
|
||||
|
||||
mlme_debug("RSO_CFG: vdev[%d] Dump Vdev PCL weights", pcl_req->vdev_id);
|
||||
mlme_debug("RSO_CFG: Dump Vdev PCL weights for vdev[%d]",
|
||||
pcl_req->vdev_id);
|
||||
policy_mgr_dump_channel_list(weights->saved_num_chan,
|
||||
weights->saved_chan_list,
|
||||
weights->weighed_valid_list);
|
||||
|
Reference in New Issue
Block a user