|
@@ -5019,6 +5019,7 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc,
|
|
|
QDF_STATUS qdf_status;
|
|
|
bool mcc_mode;
|
|
|
uint32_t session_count, cur_freq;
|
|
|
+ enum hw_mode_bandwidth max_bw;
|
|
|
|
|
|
pm_ctx = policy_mgr_get_context(psoc);
|
|
|
if (!pm_ctx) {
|
|
@@ -5116,6 +5117,13 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc,
|
|
|
|
|
|
if (pm_ctx->dp_cbacks.hdd_ipa_set_mcc_mode_cb)
|
|
|
pm_ctx->dp_cbacks.hdd_ipa_set_mcc_mode_cb(mcc_mode);
|
|
|
+
|
|
|
+ if (pm_ctx->dp_cbacks.hdd_ipa_set_perf_level_bw) {
|
|
|
+ max_bw = policy_mgr_get_connection_max_channel_width(
|
|
|
+ psoc);
|
|
|
+ policy_mgr_debug("max channel width %d", max_bw);
|
|
|
+ pm_ctx->dp_cbacks.hdd_ipa_set_perf_level_bw(max_bw);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (mode == QDF_SAP_MODE || mode == QDF_P2P_GO_MODE ||
|
|
@@ -12396,3 +12404,30 @@ bool policy_mgr_get_vdev_diff_freq_new_conn(struct wlan_objmgr_psoc *psoc,
|
|
|
return match;
|
|
|
}
|
|
|
|
|
|
+enum hw_mode_bandwidth
|
|
|
+policy_mgr_get_connection_max_channel_width(struct wlan_objmgr_psoc *psoc)
|
|
|
+{
|
|
|
+ enum hw_mode_bandwidth bw = HW_MODE_20_MHZ;
|
|
|
+ struct policy_mgr_psoc_priv_obj *pm_ctx;
|
|
|
+ uint32_t conn_index = 0;
|
|
|
+
|
|
|
+ pm_ctx = policy_mgr_get_context(psoc);
|
|
|
+ if (!pm_ctx) {
|
|
|
+ policy_mgr_err("pm_ctx is NULL");
|
|
|
+ return HW_MODE_20_MHZ;
|
|
|
+ }
|
|
|
+
|
|
|
+ qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
|
|
|
+
|
|
|
+ for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
|
|
|
+ conn_index++) {
|
|
|
+ if (pm_conc_connection_list[conn_index].in_use &&
|
|
|
+ pm_conc_connection_list[conn_index].bw > bw)
|
|
|
+ bw = pm_conc_connection_list[conn_index].bw;
|
|
|
+ }
|
|
|
+
|
|
|
+ qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
|
|
+
|
|
|
+ return bw;
|
|
|
+}
|
|
|
+
|