qcacld-3.0: enable legacy coex feature

Because newest firmware codes already been changed, the previous
coex configure command are invalid. Firmware need host driver
to enable WMI_SERVICE_THREE_WAY_COEX_CONFIG_LEGACY service during
wlan init. Add a new parameter "gThreeWayCoexConfigLegacyEnable" to
initial config file. If this parameter value is zero,set coex
priorities command will return error.

Change-Id: Ief1617e2ba5363e276c55135198613a0e54b71d5
CRs-Fixed: 2482734
This commit is contained in:
guangde 2019-07-02 15:51:15 +08:00 committed by nshrivas
parent a17a11619e
commit 963710d6e8
5 changed files with 107 additions and 2 deletions

View File

@ -62,6 +62,8 @@
* @btc_mpta_helper_enable: Enable/Disable tri-radio MPTA helper
* @bt_sco_allow_wlan_2g_scan: Enable/Disble wlan 2g scan when
* BT SCO connection is on
* @btc_three_way_coex_config_legacy_enable: Enable/Disable tri-radio coex
* config legacy feature
*/
struct wlan_fwol_coex_config {
uint8_t btc_mode;
@ -79,6 +81,9 @@ struct wlan_fwol_coex_config {
bool btc_mpta_helper_enable;
#endif
bool bt_sco_allow_wlan_2g_scan;
#ifdef FEATURE_COEX_CONFIG
bool btc_three_way_coex_config_legacy_enable;
#endif
};
#define FWOL_THERMAL_LEVEL_MAX 4

View File

@ -52,6 +52,32 @@ fwol_mpta_helper_config_get(struct wlan_objmgr_psoc *psoc,
}
#endif
/**
* fwol_three_way_coex_config_legacy_config_get: Populate
* btc_three_way_coex_config_legacy_enable from cfg
* @psoc: The global psoc handler
* @coex_config: The cfg structure
*
* Return: none
*/
#ifdef FEATURE_COEX_CONFIG
static void
fwol_three_way_coex_config_legacy_config_get(
struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_coex_config *coex_config)
{
coex_config->btc_three_way_coex_config_legacy_enable =
cfg_get(psoc, CFG_THREE_WAY_COEX_CONFIG_LEGACY);
}
#else
static void
fwol_three_way_coex_config_legacy_config_get(
struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_coex_config *coex_config)
{
}
#endif
static void
fwol_init_coex_config_in_cfg(struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_coex_config *coex_config)
@ -79,6 +105,7 @@ fwol_init_coex_config_in_cfg(struct wlan_objmgr_psoc *psoc,
fwol_mpta_helper_config_get(psoc, coex_config);
coex_config->bt_sco_allow_wlan_2g_scan =
cfg_get(psoc, CFG_BT_SCO_ALLOW_WLAN_2G_SCAN);
fwol_three_way_coex_config_legacy_config_get(psoc, coex_config);
}
static void

View File

@ -273,7 +273,6 @@
* This ini is used to enable or disable wlan 2g scan
* when BT SCO connection is on.
*
*
* Usage: External
*
* </ini>
@ -283,6 +282,37 @@
1, \
"Bt Sco Allow Wlan 2G Scan")
#ifdef FEATURE_COEX_CONFIG
/*
* <ini>
* gThreeWayCoexConfigLegacyEnable - Enable coex config legacy feature
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable or disable three way coex config legacy feature.
* This feature is designed only for non-mobile solution.
* When the feature is disabled, Firmware use the default configuration to
* set the coex priority of three antenna(WLAN, BT, ZIGBEE).
* when enable this feature, customer can use the vendor command to set antenna
* coex priority dynamically.
*
* Supported Feature: three way coex config
*
* Usage: External
*
* </ini>
*/
#define CFG_THREE_WAY_COEX_CONFIG_LEGACY CFG_INI_BOOL( \
"gThreeWayCoexConfigLegacyEnable", \
0, \
"Enable/Disable COEX Config Legacy")
#define THREE_WAY_COEX_CONFIG_LEGACY_CFG CFG(CFG_THREE_WAY_COEX_CONFIG_LEGACY)
#else
#define THREE_WAY_COEX_CONFIG_LEGACY_CFG
#endif
#define CFG_COEX_ALL \
CFG(CFG_BTC_MODE) \
CFG(CFG_ANTENNA_ISOLATION) \
@ -296,5 +326,6 @@
CFG(CFG_BT_INTERFERENCE_HIGH_LL) \
CFG(CFG_BT_INTERFERENCE_HIGH_UL) \
COEX_MPTA_HELPER_CFG \
CFG(CFG_BT_SCO_ALLOW_WLAN_2G_SCAN)
CFG(CFG_BT_SCO_ALLOW_WLAN_2G_SCAN) \
THREE_WAY_COEX_CONFIG_LEGACY_CFG
#endif

View File

@ -29,6 +29,7 @@
#include "qca_vendor.h"
#include "wlan_osif_request_manager.h"
#include "osif_sync.h"
#include "wlan_fwol_ucfg_api.h"
static const struct nla_policy
coex_config_three_way_policy[QCA_VENDOR_ATTR_COEX_CONFIG_THREE_WAY_MAX + 1] = {
@ -67,6 +68,7 @@ static int __wlan_hdd_cfg80211_set_coex_config(struct wiphy *wiphy,
struct nlattr *tb[QCA_VENDOR_ATTR_COEX_CONFIG_THREE_WAY_MAX + 1];
uint32_t config_type;
struct coex_config_params coex_cfg_params = {0};
struct wlan_fwol_coex_config config = {0};
int errno;
QDF_STATUS status;
@ -76,6 +78,16 @@ static int __wlan_hdd_cfg80211_set_coex_config(struct wiphy *wiphy,
if (errno != 0)
return errno;
status = ucfg_fwol_get_coex_config_params(hdd_ctx->psoc, &config);
if (QDF_IS_STATUS_ERROR(status)) {
hdd_err("Unable to get coex config params");
return -EINVAL;
}
if (!config.btc_three_way_coex_config_legacy_enable) {
hdd_err("Coex legacy feature should be enable first");
return -EINVAL;
}
if (wlan_cfg80211_nla_parse(tb,
QCA_VENDOR_ATTR_COEX_CONFIG_THREE_WAY_MAX,
data, data_len,

View File

@ -6757,6 +6757,34 @@ static inline void wma_init_dbr_params(t_wma_handle *wma_handle)
}
#endif
/**
* wma_set_coex_res_cfg() - Set target COEX resource configuration.
* @wma_handle: pointer to wma global structure
* @wlan_res_cfg: Pointer to target resource configuration
*
* Return: none
*/
#ifdef FEATURE_COEX_CONFIG
static void wma_set_coex_res_cfg(t_wma_handle *wma_handle,
struct wmi_unified *wmi_handle,
target_resource_config *wlan_res_cfg)
{
if (cfg_get(wma_handle->psoc, CFG_THREE_WAY_COEX_CONFIG_LEGACY) &&
wmi_service_enabled(wmi_handle,
wmi_service_three_way_coex_config_legacy)) {
wlan_res_cfg->three_way_coex_config_legacy_en = true;
} else {
wlan_res_cfg->three_way_coex_config_legacy_en = false;
}
}
#else
static void wma_set_coex_res_cfg(t_wma_handle *wma_handle,
struct wmi_unified *wmi_handle,
target_resource_config *wlan_res_cfg)
{
}
#endif
/**
* wma_rx_service_ready_ext_event() - evt handler for sevice ready ext event.
* @handle: wma handle
@ -6865,6 +6893,8 @@ int wma_rx_service_ready_ext_event(void *handle, uint8_t *event,
wma_init_dbr_params(wma_handle);
wma_set_coex_res_cfg(wma_handle, wmi_handle, wlan_res_cfg);
return 0;
}