qcacmn: Refactor the code to update the conc_system_pref

Refactor the code to dynamically change the conc_system_pref.
Whenever user changes conc_system_pref from application,
driver is overwriting the conc_system_pref which is getting
populated from ini file. Once it is overwritten there is no way
to get the configured value for this setting. So add a new
variable to hold the value of conc_system_pref without disturbing
default value read from ini file.

CRs-Fixed: 2082073
Change-Id: Icfb245c7a8872885332ec222780c911d08521d46
This commit is contained in:
Ganesh Kondabattini 2017-07-10 17:34:36 +05:30 • committed by snandini
commit c2cce632c8
4 changed files with 59 additions and 6 deletions

View file

@ -2085,4 +2085,24 @@ void policy_mgr_init_sap_mandatory_2g_chan(struct wlan_objmgr_psoc *psoc);
*/
void policy_mgr_remove_sap_mandatory_chan(struct wlan_objmgr_psoc *psoc,
uint8_t chan);
/*
* policy_set_cur_conc_system_pref - set current conc_system_pref
* @psoc: soc pointer
*
* Set the current concurrency system preference.
*
* Return: None
*/
void policy_mgr_set_cur_conc_system_pref(struct wlan_objmgr_psoc *psoc,
uint8_t conc_system_pref);
/**
* policy_mgr_get_cur_conc_system_pref - Get current conc_system_pref
* @psoc: soc pointer
*
* Get the current concurrent system preference.
*
* Return: conc_system_pref
*/
uint8_t policy_mgr_get_cur_conc_system_pref(struct wlan_objmgr_psoc *psoc);
#endif /* __WLAN_POLICY_MGR_API_H */

View file

@ -1768,6 +1768,8 @@ QDF_STATUS policy_mgr_set_user_cfg(struct wlan_objmgr_psoc *psoc,
pm_ctx->user_cfg = *user_cfg;
pm_ctx->cur_conc_system_pref = pm_ctx->user_cfg.conc_system_pref;
return QDF_STATUS_SUCCESS;
}
@ -2588,6 +2590,36 @@ bool policy_mgr_is_scan_simultaneous_capable(struct wlan_objmgr_psoc *psoc)
return false;
}
void policy_mgr_set_cur_conc_system_pref(struct wlan_objmgr_psoc *psoc,
uint8_t conc_system_pref)
{
struct policy_mgr_psoc_priv_obj *pm_ctx;
pm_ctx = policy_mgr_get_context(psoc);
if (!pm_ctx) {
policy_mgr_err("Invalid Context");
return;
}
policy_mgr_debug("conc_system_pref %hu", conc_system_pref);
pm_ctx->cur_conc_system_pref = conc_system_pref;
}
uint8_t policy_mgr_get_cur_conc_system_pref(struct wlan_objmgr_psoc *psoc)
{
struct policy_mgr_psoc_priv_obj *pm_ctx;
pm_ctx = policy_mgr_get_context(psoc);
if (!pm_ctx) {
policy_mgr_err("Invalid Context");
return PM_THROUGHPUT;
}
policy_mgr_debug("conc_system_pref %hu", pm_ctx->cur_conc_system_pref);
return pm_ctx->cur_conc_system_pref;
}
QDF_STATUS policy_mgr_get_updated_scan_and_fw_mode_config(
struct wlan_objmgr_psoc *psoc, uint32_t *scan_config,
uint32_t *fw_mode_config, uint32_t dual_mac_disable_ini)

View file

@ -269,6 +269,7 @@ struct policy_mgr_psoc_priv_obj {
uint16_t unsafe_channel_list[QDF_MAX_NUM_CHAN];
uint16_t unsafe_channel_count;
struct sta_ap_intf_check_work_ctx *sta_ap_intf_check_work_info;
uint8_t cur_conc_system_pref;
};
/**

View file

@ -489,9 +489,9 @@ QDF_STATUS policy_mgr_get_pcl(struct wlan_objmgr_psoc *psoc,
/* find the current connection state from pm_conc_connection_list*/
num_connections = policy_mgr_get_connection_count(psoc);
policy_mgr_debug("connections:%d pref:%d requested mode:%d",
num_connections, pm_ctx->user_cfg.conc_system_pref, mode);
num_connections, pm_ctx->cur_conc_system_pref, mode);
switch (pm_ctx->user_cfg.conc_system_pref) {
switch (pm_ctx->cur_conc_system_pref) {
case 0:
conc_system_pref = PM_THROUGHPUT;
break;
@ -502,8 +502,8 @@ QDF_STATUS policy_mgr_get_pcl(struct wlan_objmgr_psoc *psoc,
conc_system_pref = PM_LATENCY;
break;
default:
policy_mgr_err("unknown conc_system_pref value %d",
pm_ctx->user_cfg.conc_system_pref);
policy_mgr_err("unknown cur_conc_system_pref value %d",
pm_ctx->cur_conc_system_pref);
break;
}
@ -596,10 +596,10 @@ enum policy_mgr_conc_priority_mode
return PM_THROUGHPUT;
}
if (pm_ctx->user_cfg.conc_system_pref >= PM_MAX_CONC_PRIORITY_MODE)
if (pm_ctx->cur_conc_system_pref >= PM_MAX_CONC_PRIORITY_MODE)
return PM_THROUGHPUT;
return pm_ctx->user_cfg.conc_system_pref;
return pm_ctx->cur_conc_system_pref;
}
enum policy_mgr_one_connection_mode