qcacld-3.0: Process LINK_STATE_CONTROL_MODE in default mode
1.Host receives QCA_NL80211_VENDOR_SUBCMD_MLO_LINK_STATE vendor cmd. 2.Parse new attribute QCA_WLAN_VENDOR_ATTR_LINK_STATE_CONTROL_MODE. 3.Restore mlo link(s) state as per driver. Change-Id: I79327618a007cd1f50ca1eafcb3633bcbac2e13f CRs-Fixed: 3529507
这个提交包含在:
@@ -4866,10 +4866,21 @@ void policy_mgr_handle_emlsr_sta_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
bool conc_con_coming_up,
|
||||
bool emlsr_sta_coming_up);
|
||||
|
||||
/**
|
||||
* policy_mgr_clear_ml_links_settings_in_fw() - Process
|
||||
* QCA_WLAN_VENDOR_ATTR_LINK_STATE_CONTROL_MODE in default mode
|
||||
* @psoc: objmgr psoc
|
||||
* @vdev_id: vdev_id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
policy_mgr_clear_ml_links_settings_in_fw(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
* policy_mgr_activate_mlo_links() - Force active ML links based on user
|
||||
* requested link mac address
|
||||
*
|
||||
* @psoc: objmgr psoc
|
||||
* @session_id: session id
|
||||
* @num_links: number of links to be forced active
|
||||
|
@@ -7828,6 +7828,108 @@ release_vdev_ref:
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
policy_mgr_clear_ml_links_settings_in_fw(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
uint8_t num_ml_sta = 0, num_disabled_ml_sta = 0, num_non_ml = 0;
|
||||
uint8_t ml_sta_vdev_lst[MAX_NUMBER_OF_CONC_CONNECTIONS] = {0};
|
||||
qdf_freq_t ml_freq_lst[MAX_NUMBER_OF_CONC_CONNECTIONS] = {0};
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
uint8_t num_link_to_no_force = 0, num_active_ml_sta = 0;
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_POLICY_MGR_ID);
|
||||
if (!vdev) {
|
||||
policy_mgr_err("vdev: %d vdev not found", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_STA_MODE)
|
||||
goto release_vdev_ref;
|
||||
|
||||
if (!wlan_cm_is_vdev_connected(vdev)) {
|
||||
policy_mgr_err("vdev: %d is not in connected state", vdev_id);
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
|
||||
if (!wlan_vdev_mlme_is_mlo_vdev(vdev)) {
|
||||
policy_mgr_err("vdev: %d is not mlo vdev", vdev_id);
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("vdev: %d Invalid Context", vdev_id);
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
|
||||
policy_mgr_get_ml_sta_info(pm_ctx, &num_ml_sta, &num_disabled_ml_sta,
|
||||
ml_sta_vdev_lst, ml_freq_lst, &num_non_ml,
|
||||
NULL, NULL);
|
||||
policy_mgr_debug("vdev %d: num_ml_sta %d disabled %d num_non_ml: %d",
|
||||
vdev_id, num_ml_sta, num_disabled_ml_sta, num_non_ml);
|
||||
|
||||
if (!num_ml_sta || num_ml_sta > MAX_NUMBER_OF_CONC_CONNECTIONS ||
|
||||
num_disabled_ml_sta > MAX_NUMBER_OF_CONC_CONNECTIONS)
|
||||
goto release_vdev_ref;
|
||||
|
||||
num_active_ml_sta = num_ml_sta;
|
||||
if (num_ml_sta >= num_disabled_ml_sta)
|
||||
num_active_ml_sta = num_ml_sta - num_disabled_ml_sta;
|
||||
|
||||
num_link_to_no_force += num_active_ml_sta;
|
||||
|
||||
/* Link can not be allowed to enable then skip checking further */
|
||||
if (policy_mgr_sta_ml_link_enable_allowed(psoc, num_disabled_ml_sta,
|
||||
num_ml_sta, ml_freq_lst,
|
||||
ml_sta_vdev_lst)) {
|
||||
num_link_to_no_force += num_disabled_ml_sta;
|
||||
policy_mgr_debug("Link enable allowed, total num_links: %d",
|
||||
num_link_to_no_force);
|
||||
}
|
||||
|
||||
if (num_link_to_no_force < 1 ||
|
||||
num_link_to_no_force > MAX_NUMBER_OF_CONC_CONNECTIONS) {
|
||||
policy_mgr_debug("vdev %d: invalid num_link_to_no_force: %d",
|
||||
vdev_id, num_link_to_no_force);
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
|
||||
/*
|
||||
* send WMI_MLO_LINK_SET_ACTIVE_CMDID to clear user mode setting
|
||||
* configured via QCA_WLAN_VENDOR_ATTR_LINK_STATE_CONTROL_MODE in FW
|
||||
*/
|
||||
status = policy_mgr_mlo_sta_set_link(psoc,
|
||||
MLO_LINK_FORCE_REASON_CONNECT,
|
||||
MLO_LINK_FORCE_MODE_NO_FORCE,
|
||||
num_link_to_no_force,
|
||||
ml_sta_vdev_lst);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto release_vdev_ref;
|
||||
else
|
||||
policy_mgr_debug("clear user mode setting for num_links:%d",
|
||||
num_link_to_no_force);
|
||||
|
||||
/*
|
||||
* send WMI_MLO_LINK_SET_ACTIVE_CMDID with value of
|
||||
* num_link as 0 to clear dynamic mode setting configured
|
||||
* via vendor attr LINK_STATE_MIXED_MODE_ACTIVE_NUM_LINKS in FW
|
||||
*/
|
||||
status = policy_mgr_process_mlo_sta_dynamic_force_num_link(psoc,
|
||||
MLO_LINK_FORCE_REASON_CONNECT,
|
||||
MLO_LINK_FORCE_MODE_ACTIVE_NUM,
|
||||
num_link_to_no_force, ml_sta_vdev_lst, 0);
|
||||
if (QDF_IS_STATUS_SUCCESS(status))
|
||||
policy_mgr_debug("clear mixed mode setting for num_links:%d",
|
||||
num_link_to_no_force);
|
||||
release_vdev_ref:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID);
|
||||
return status;
|
||||
}
|
||||
|
||||
#else
|
||||
static bool
|
||||
policy_mgr_allow_sta_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
|
在新工单中引用
屏蔽一个用户