qcacld-3.0: Add handling to disable vdev for miracast
Add handling to disable second vdev of mac if miracast is set for one vdev. In case high throughput or low latency is required for particular vdev then another vdev on same mac should be disabled, if present in MCC. Change-Id: I36cc19f442130b098c4a02ec0ebcf69b89dd2a3c CRs-Fixed: 3219512
此提交包含在:
@@ -1027,19 +1027,6 @@ void policy_mgr_move_vdev_from_connection_to_disabled_tbl(
|
||||
bool
|
||||
policy_mgr_ml_link_vdev_need_to_be_disabled(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* policy_mgr_handle_link_enable_disable_resp() - enable/disable a ml link
|
||||
* @vdev: vdev
|
||||
* @arg: req structure
|
||||
* evt: response event
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void
|
||||
policy_mgr_handle_link_enable_disable_resp(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg,
|
||||
struct mlo_link_set_active_resp *evt);
|
||||
#else
|
||||
static inline bool
|
||||
policy_mgr_is_ml_vdev_id(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
|
||||
@@ -4300,6 +4287,21 @@ policy_mgr_handle_ml_sta_links_on_vdev_up_csa(struct wlan_objmgr_psoc *psoc,
|
||||
enum QDF_OPMODE mode,
|
||||
uint8_t vdev_id);
|
||||
|
||||
/*
|
||||
* policy_mgr_handle_ml_sta_link_on_traffic_type_change() - Handle
|
||||
* enable/disable link on vdev traffic type change on SAP/P2P vdev
|
||||
* @psoc: objmgr psoc
|
||||
* @vdev: vdev on which traffic type change
|
||||
*
|
||||
* Context: Should be called only from north bound context and never from
|
||||
* schedular thread as it has wait for completed.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void policy_mgr_handle_ml_sta_link_on_traffic_type_change(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/*
|
||||
* policy_mgr_handle_ml_sta_links_on_vdev_down() - Handle enable
|
||||
* link on any vdev down
|
||||
@@ -4347,6 +4349,13 @@ policy_mgr_handle_ml_sta_links_on_vdev_up_csa(struct wlan_objmgr_psoc *psoc,
|
||||
{
|
||||
}
|
||||
|
||||
static inline void
|
||||
policy_mgr_handle_ml_sta_link_on_traffic_type_change(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline
|
||||
void policy_mgr_handle_ml_sta_links_on_vdev_down(struct wlan_objmgr_psoc *psoc,
|
||||
enum QDF_OPMODE mode,
|
||||
|
@@ -648,7 +648,6 @@ void policy_mgr_update_conc_list(struct wlan_objmgr_psoc *psoc,
|
||||
if (pm_ctx->mode_change_cb && update_conn)
|
||||
pm_ctx->mode_change_cb();
|
||||
|
||||
policy_mgr_dump_connection_status_info(psoc);
|
||||
if (pm_ctx->cdp_cbacks.cdp_update_mac_id)
|
||||
pm_ctx->cdp_cbacks.cdp_update_mac_id(psoc, vdev_id, mac);
|
||||
|
||||
@@ -1093,7 +1092,6 @@ void policy_mgr_update_hw_mode_conn_info(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
|
||||
policy_mgr_dump_connection_status_info(psoc);
|
||||
policy_mgr_dump_current_concurrency(psoc);
|
||||
}
|
||||
|
||||
@@ -1552,7 +1550,8 @@ policy_mgr_dump_disabled_ml_links(struct policy_mgr_psoc_priv_obj *pm_ctx)
|
||||
}
|
||||
}
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
policy_mgr_debug("Disabled links(%d): %s", count, buf);
|
||||
if (count)
|
||||
policy_mgr_debug("Disabled links(%d): %s", count, buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1689,6 +1688,7 @@ void policy_mgr_dump_current_concurrency(struct wlan_objmgr_psoc *psoc)
|
||||
if (!cc_mode)
|
||||
return;
|
||||
|
||||
policy_mgr_dump_connection_status_info(psoc);
|
||||
switch (num_connections) {
|
||||
case 1:
|
||||
policy_mgr_dump_current_concurrency_one_connection(cc_mode,
|
||||
|
@@ -3331,7 +3331,36 @@ policy_mgr_enable_disable_link_from_vdev_bitmask(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
policy_mgr_set_link_in_progress(struct policy_mgr_psoc_priv_obj *pm_ctx,
|
||||
bool value)
|
||||
{
|
||||
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
|
||||
pm_ctx->set_link_in_progress = value;
|
||||
/* if set link has started reset the event, else complete the event */
|
||||
if (pm_ctx->set_link_in_progress)
|
||||
qdf_event_reset(&pm_ctx->set_link_update_done_evt);
|
||||
else
|
||||
qdf_event_set(&pm_ctx->set_link_update_done_evt);
|
||||
policy_mgr_debug("set_link_in_progress %d",
|
||||
pm_ctx->set_link_in_progress);
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
}
|
||||
|
||||
static bool
|
||||
policy_mgr_get_link_in_progress(struct policy_mgr_psoc_priv_obj *pm_ctx)
|
||||
{
|
||||
bool value;
|
||||
|
||||
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
|
||||
value = pm_ctx->set_link_in_progress;
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
|
||||
policy_mgr_debug("set_link_in_progress %d", value);
|
||||
return value;
|
||||
}
|
||||
|
||||
static void
|
||||
policy_mgr_handle_link_enable_disable_resp(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg,
|
||||
struct mlo_link_set_active_resp *resp)
|
||||
@@ -3339,23 +3368,31 @@ policy_mgr_handle_link_enable_disable_resp(struct wlan_objmgr_vdev *vdev,
|
||||
struct mlo_link_set_active_req *req = arg;
|
||||
uint8_t i;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
psoc = wlan_vdev_get_psoc(vdev);
|
||||
if (!psoc) {
|
||||
policy_mgr_err("Psoc is Null");
|
||||
return;
|
||||
}
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
|
||||
if (!req || !resp) {
|
||||
policy_mgr_err("arguments or event empty for vdev %d",
|
||||
wlan_vdev_get_id(vdev));
|
||||
return;
|
||||
goto complete_evnt;
|
||||
}
|
||||
|
||||
if (resp->status) {
|
||||
policy_mgr_err("Set link status %d, for mode %d reason %d vdev bitmask 0x%x",
|
||||
resp->status, req->param.force_mode,
|
||||
req->param.reason, req->param.vdev_bitmap[0]);
|
||||
return;
|
||||
goto complete_evnt;
|
||||
}
|
||||
|
||||
policy_mgr_debug("Req mode %d reason %d, bitmask[0] = 0x%x, resp: active %d inactive %d, active[0] 0x%x inactive[0] 0x%x",
|
||||
@@ -3408,6 +3445,10 @@ policy_mgr_handle_link_enable_disable_resp(struct wlan_objmgr_vdev *vdev,
|
||||
req->param.force_mode);
|
||||
break;
|
||||
}
|
||||
|
||||
complete_evnt:
|
||||
policy_mgr_set_link_in_progress(pm_ctx, false);
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -4274,6 +4315,106 @@ static bool policy_mgr_is_6g_channel_allowed(
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static void
|
||||
policy_mgr_fill_ml_active_link_vdev_bitmap(struct mlo_link_set_active_req *req,
|
||||
uint8_t *mlo_vdev_lst,
|
||||
uint32_t num_mlo_vdev)
|
||||
{
|
||||
uint32_t entry_idx, entry_offset, vdev_idx;
|
||||
uint8_t vdev_id;
|
||||
|
||||
for (vdev_idx = 0; vdev_idx < num_mlo_vdev; vdev_idx++) {
|
||||
vdev_id = mlo_vdev_lst[vdev_idx];
|
||||
entry_idx = vdev_id / 32;
|
||||
entry_offset = vdev_id % 32;
|
||||
if (entry_idx >= MLO_LINK_NUM_SZ) {
|
||||
policy_mgr_err("Invalid entry_idx %d num_mlo_vdev %d vdev %d",
|
||||
entry_idx, num_mlo_vdev, vdev_id);
|
||||
continue;
|
||||
}
|
||||
req->param.vdev_bitmap[entry_idx] |= (1 << entry_offset);
|
||||
/* update entry number if entry index changed */
|
||||
if (req->param.num_vdev_bitmap < entry_idx + 1)
|
||||
req->param.num_vdev_bitmap = entry_idx + 1;
|
||||
}
|
||||
|
||||
policy_mgr_debug("num_vdev_bitmap %d vdev_bitmap[0] = 0x%x, vdev_bitmap[1] = 0x%x",
|
||||
req->param.num_vdev_bitmap, req->param.vdev_bitmap[0],
|
||||
req->param.vdev_bitmap[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* policy_mgr_mlo_sta_set_link() - Set links for MLO STA
|
||||
*
|
||||
* @vdev: vdev object
|
||||
* @reason: Reason for which link is forced
|
||||
* @mode: Force reason
|
||||
* @num_mlo_vdev: number of mlo vdev
|
||||
* @mlo_vdev_lst: MLO STA vdev list
|
||||
|
||||
* Interface manager Set links for MLO STA
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static void
|
||||
policy_mgr_mlo_sta_set_link(struct wlan_objmgr_vdev *vdev,
|
||||
enum mlo_link_force_reason reason,
|
||||
enum mlo_link_force_mode mode,
|
||||
uint8_t num_mlo_vdev, uint8_t *mlo_vdev_lst)
|
||||
{
|
||||
struct mlo_link_set_active_req *req;
|
||||
QDF_STATUS status;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
psoc = wlan_vdev_get_psoc(vdev);
|
||||
if (!psoc) {
|
||||
policy_mgr_err("Psoc is Null");
|
||||
return;
|
||||
}
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return;
|
||||
}
|
||||
|
||||
req = qdf_mem_malloc(sizeof(*req));
|
||||
if (!req)
|
||||
return;
|
||||
|
||||
policy_mgr_set_link_in_progress(pm_ctx, true);
|
||||
|
||||
policy_mgr_debug("vdev %d: mode %d num_mlo_vdev %d reason %d",
|
||||
wlan_vdev_get_id(vdev), mode, num_mlo_vdev, reason);
|
||||
|
||||
req->ctx.vdev = vdev;
|
||||
req->param.reason = reason;
|
||||
req->param.force_mode = mode;
|
||||
req->ctx.set_mlo_link_cb = policy_mgr_handle_link_enable_disable_resp;
|
||||
req->ctx.cb_arg = req;
|
||||
|
||||
/* set MLO vdev bit mask for all case */
|
||||
policy_mgr_fill_ml_active_link_vdev_bitmap(req, mlo_vdev_lst,
|
||||
num_mlo_vdev);
|
||||
|
||||
/* fill num of links for MLO_LINK_FORCE_MODE_ACTIVE_NUM */
|
||||
if (mode == MLO_LINK_FORCE_MODE_ACTIVE_NUM) {
|
||||
req->param.force_mode = MLO_LINK_FORCE_MODE_ACTIVE_NUM;
|
||||
req->param.num_link_entry = 1;
|
||||
req->param.link_num[0].num_of_link = num_mlo_vdev - 1;
|
||||
}
|
||||
|
||||
status = mlo_ser_set_link_req(req);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
policy_mgr_err("vdev %d: Failed to set link mode %d num_mlo_vdev %d reason %d",
|
||||
wlan_vdev_get_id(vdev), mode, num_mlo_vdev,
|
||||
reason);
|
||||
qdf_mem_free(req);
|
||||
policy_mgr_set_link_in_progress(pm_ctx, false);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t
|
||||
policy_mgr_get_conc_ext_flags(struct wlan_objmgr_vdev *vdev, bool force_mlo)
|
||||
{
|
||||
@@ -4775,10 +4916,8 @@ policy_mgr_ml_sta_concurency_on_connect(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
}
|
||||
|
||||
wlan_mlo_sta_mlo_concurency_set_link(vdev,
|
||||
MLO_LINK_FORCE_REASON_CONNECT,
|
||||
mode, affected_links,
|
||||
ml_vdev_lst);
|
||||
policy_mgr_mlo_sta_set_link(vdev, MLO_LINK_FORCE_REASON_CONNECT,
|
||||
mode, affected_links, ml_vdev_lst);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4808,10 +4947,9 @@ policy_mgr_ml_sta_concurency_on_disconnect(struct wlan_objmgr_vdev *vdev,
|
||||
i++;
|
||||
}
|
||||
|
||||
wlan_mlo_sta_mlo_concurency_set_link(vdev,
|
||||
MLO_LINK_FORCE_REASON_DISCONNECT,
|
||||
MLO_LINK_FORCE_MODE_NO_FORCE,
|
||||
num_ml, ml_vdev_list);
|
||||
policy_mgr_mlo_sta_set_link(vdev, MLO_LINK_FORCE_REASON_DISCONNECT,
|
||||
MLO_LINK_FORCE_MODE_NO_FORCE,
|
||||
num_ml, ml_vdev_list);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -5146,10 +5284,9 @@ policy_mgr_handle_sap_cli_go_ml_sta_up_csa(struct wlan_objmgr_psoc *psoc,
|
||||
return;
|
||||
}
|
||||
|
||||
wlan_mlo_sta_mlo_concurency_set_link(vdev,
|
||||
MLO_LINK_FORCE_REASON_CONNECT,
|
||||
MLO_LINK_FORCE_MODE_ACTIVE_NUM,
|
||||
num_ml_sta, ml_sta_vdev_lst);
|
||||
policy_mgr_mlo_sta_set_link(vdev, MLO_LINK_FORCE_REASON_CONNECT,
|
||||
MLO_LINK_FORCE_MODE_ACTIVE_NUM,
|
||||
num_ml_sta, ml_sta_vdev_lst);
|
||||
|
||||
return;
|
||||
enable_link:
|
||||
@@ -5161,10 +5298,10 @@ enable_link:
|
||||
if (policy_mgr_sta_ml_link_enable_allowed(psoc, num_disabled_ml_sta,
|
||||
num_ml_sta, ml_freq_lst,
|
||||
ml_sta_vdev_lst))
|
||||
wlan_mlo_sta_mlo_concurency_set_link(vdev,
|
||||
MLO_LINK_FORCE_REASON_DISCONNECT,
|
||||
MLO_LINK_FORCE_MODE_NO_FORCE,
|
||||
num_ml_sta, ml_sta_vdev_lst);
|
||||
policy_mgr_mlo_sta_set_link(vdev,
|
||||
MLO_LINK_FORCE_REASON_DISCONNECT,
|
||||
MLO_LINK_FORCE_MODE_NO_FORCE,
|
||||
num_ml_sta, ml_sta_vdev_lst);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -5190,6 +5327,50 @@ policy_mgr_handle_ml_sta_links_on_vdev_up_csa(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID);
|
||||
}
|
||||
|
||||
#define SET_LINK_TIMEOUT 6000
|
||||
static void
|
||||
policy_mgr_wait_for_set_link_update(struct policy_mgr_psoc_priv_obj *pm_ctx)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!policy_mgr_get_link_in_progress(pm_ctx))
|
||||
return;
|
||||
|
||||
status =
|
||||
qdf_wait_for_event_completion(&pm_ctx->set_link_update_done_evt,
|
||||
SET_LINK_TIMEOUT);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
policy_mgr_set_link_in_progress(pm_ctx, false);
|
||||
policy_mgr_err("wait for set_link_in_progress failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void policy_mgr_handle_ml_sta_link_on_traffic_type_change(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check if any set link is already progress and thus wait */
|
||||
policy_mgr_wait_for_set_link_update(pm_ctx);
|
||||
|
||||
policy_mgr_handle_sap_cli_go_ml_sta_up_csa(psoc, vdev);
|
||||
|
||||
/*
|
||||
* Check if traffic type change lead to set link is progress and
|
||||
* thus wait for it to complete.
|
||||
*/
|
||||
policy_mgr_wait_for_set_link_update(pm_ctx);
|
||||
}
|
||||
|
||||
/*
|
||||
* policy_mgr_re_enable_ml_sta_on_p2p_sap_down() - Handle enable
|
||||
* link on P2P/SAP/ML_STA vdev down
|
||||
@@ -5255,10 +5436,10 @@ void policy_mgr_re_enable_ml_sta_on_p2p_sap_down(struct wlan_objmgr_psoc *psoc,
|
||||
policy_mgr_debug("vdev %d: Affected link present, dont reanabe ML link",
|
||||
vdev_id);
|
||||
else
|
||||
wlan_mlo_sta_mlo_concurency_set_link(vdev,
|
||||
MLO_LINK_FORCE_REASON_DISCONNECT,
|
||||
MLO_LINK_FORCE_MODE_NO_FORCE,
|
||||
num_ml_sta, ml_sta_vdev_lst);
|
||||
policy_mgr_mlo_sta_set_link(vdev,
|
||||
MLO_LINK_FORCE_REASON_DISCONNECT,
|
||||
MLO_LINK_FORCE_MODE_NO_FORCE,
|
||||
num_ml_sta, ml_sta_vdev_lst);
|
||||
}
|
||||
|
||||
void policy_mgr_handle_ml_sta_links_on_vdev_down(struct wlan_objmgr_psoc *psoc,
|
||||
|
@@ -353,6 +353,8 @@ struct policy_mgr_cfg {
|
||||
* @cfg: Policy manager config data
|
||||
* @dynamic_mcc_adaptive_sched: disable/enable mcc adaptive scheduler feature
|
||||
* @dynamic_dfs_master_disabled: current state of dynamic dfs master
|
||||
* @set_link_in_progress: To track if set link is in progress
|
||||
* @set_link_update_done_evt: qdf event to synchronize set link
|
||||
*/
|
||||
struct policy_mgr_psoc_priv_obj {
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
@@ -395,6 +397,10 @@ struct policy_mgr_psoc_priv_obj {
|
||||
uint32_t valid_ch_freq_list_count;
|
||||
bool dynamic_mcc_adaptive_sched;
|
||||
bool dynamic_dfs_master_disabled;
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
bool set_link_in_progress;
|
||||
qdf_event_t set_link_update_done_evt;
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -429,8 +429,51 @@ static inline void policy_mgr_memzero_disabled_ml_list(void)
|
||||
{
|
||||
qdf_mem_zero(pm_disabled_ml_links, sizeof(pm_disabled_ml_links));
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
policy_mgr_init_ml_link_update(struct policy_mgr_psoc_priv_obj *pm_ctx)
|
||||
{
|
||||
QDF_STATUS qdf_status;
|
||||
|
||||
pm_ctx->set_link_in_progress = false;
|
||||
qdf_status = qdf_event_create(&pm_ctx->set_link_update_done_evt);
|
||||
if (QDF_IS_STATUS_ERROR(qdf_status)) {
|
||||
policy_mgr_err("init event failed for for set_link_update_done_evt");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
policy_mgr_deinit_ml_link_update(struct policy_mgr_psoc_priv_obj *pm_ctx)
|
||||
{
|
||||
QDF_STATUS qdf_status;
|
||||
|
||||
pm_ctx->set_link_in_progress = false;
|
||||
qdf_status = qdf_event_destroy(&pm_ctx->set_link_update_done_evt);
|
||||
if (QDF_IS_STATUS_ERROR(qdf_status)) {
|
||||
policy_mgr_err("deinit event failed for set_link_update_done_evt");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#else
|
||||
static inline void policy_mgr_memzero_disabled_ml_list(void) {}
|
||||
|
||||
static inline QDF_STATUS
|
||||
policy_mgr_init_ml_link_update(struct policy_mgr_psoc_priv_obj *pm_ctx)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static inline QDF_STATUS
|
||||
policy_mgr_deinit_ml_link_update(struct policy_mgr_psoc_priv_obj *pm_ctx)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS policy_mgr_psoc_enable(struct wlan_objmgr_psoc *psoc)
|
||||
@@ -461,6 +504,10 @@ QDF_STATUS policy_mgr_psoc_enable(struct wlan_objmgr_psoc *psoc)
|
||||
return status;
|
||||
}
|
||||
|
||||
status = policy_mgr_init_ml_link_update(pm_ctx);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
return status;
|
||||
|
||||
/* init connection_update_done_evt */
|
||||
status = policy_mgr_init_connection_update(pm_ctx);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
@@ -615,6 +662,11 @@ QDF_STATUS policy_mgr_psoc_disable(struct wlan_objmgr_psoc *psoc)
|
||||
QDF_ASSERT(0);
|
||||
}
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(policy_mgr_deinit_ml_link_update(pm_ctx))) {
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
QDF_ASSERT(0);
|
||||
}
|
||||
|
||||
/* deallocate dbs_opportunistic_timer */
|
||||
if (QDF_TIMER_STATE_RUNNING ==
|
||||
qdf_mc_timer_get_current_state(
|
||||
|
新增問題並參考
封鎖使用者