qcacld-3.0: Add support to send MWS-COEX configurations to FW

Add support to send below two MWS-COEX configurations to FW
1. Enable/disable MWS-COEX 4G (LTE) Quick FTDM
2. Set MWS-COEX 5G-NR power limit

Change-Id: I14656ced91c9dec2be85590e6f6c1e7497505a28
CRs-Fixed: 2265352
This commit is contained in:
Dundi Raviteja 2018-07-17 18:10:41 +05:30 • committed by nshrivas
commit eab3b8d472
4 changed files with 119 additions and 0 deletions

3
Kbuild
View file

@ -1881,6 +1881,9 @@ cppflags-y += -DANI_BIG_BYTE_ENDIAN
cppflags-y += -DBIG_ENDIAN_HOST
endif
#Enable MWS COEX support for 4G quick TDM and 5G NR pwr limit
cppflags-y += -DMWS_COEX
#Enable TX reclaim support
cppflags-$(CONFIG_TX_CREDIT_RECLAIM_SUPPORT) += -DTX_CREDIT_RECLAIM_SUPPORT

View file

@ -13894,6 +13894,58 @@ enum hdd_external_acs_policy {
#define CFG_NUM_VDEV_ENABLE_MAX (0x4)
#define CFG_NUM_VDEV_ENABLE_DEFAULT (CFG_TGT_NUM_VDEV)
#ifdef MWS_COEX
/*
* <ini>
* gMwsCoex4gQuickTdm - Bitmap to control MWS-COEX 4G quick FTDM policy
* @Min: 0x00000000
* @Max: 0xFFFFFFFF
* @Default: 0x00000000
*
* It is a 32 bit value such that the various bits represent as below:
* Bit-0 : 0 - Don't allow quick FTDM policy (Default)
* 1 - Allow quick FTDM policy
* Bit 1-31 : reserved for future use
*
* It is used to enable or disable MWS-COEX 4G (LTE) Quick FTDM
*
* Usage: Internal
*
* </ini>
*/
#define CFG_MWS_COEX_4G_QUICK_FTDM_NAME "gMwsCoex4gQuickTdm"
#define CFG_MWS_COEX_4G_QUICK_FTDM_MIN (0x00000000)
#define CFG_MWS_COEX_4G_QUICK_FTDM_MAX (0xFFFFFFFF)
#define CFG_MWS_COEX_4G_QUICK_FTDM_DEFAULT (0x00000000)
/*
* <ini>
* gMwsCoex5gnrPwrLimit - Bitmap to set MWS-COEX 5G-NR power limit
* @Min: 0x00000000
* @Max: 0xFFFFFFFF
* @Default: 0x00000000
*
* It is a 32 bit value such that the various bits represent as below:
* Bit-0 : Don't apply user specific power limit,
* use internal power limit (Default)
* Bit 1-2 : Invalid value (Ignored)
* Bit 3-21 : Apply the specified value as the external power limit, in dBm
* Bit 22-31 : Invalid value (Ignored)
*
* It is used to set MWS-COEX 5G-NR power limit
*
* Usage: Internal
*
* </ini>
*/
#define CFG_MWS_COEX_5G_NR_PWR_LIMIT_NAME "gMwsCoex5gnrPwrLimit"
#define CFG_MWS_COEX_5G_NR_PWR_LIMIT_MIN (0x00000000)
#define CFG_MWS_COEX_5G_NR_PWR_LIMIT_MAX (0xFFFFFFFF)
#define CFG_MWS_COEX_5G_NR_PWR_LIMIT_DEFAULT (0x00000000)
#endif
/*
* <ini>
* gEnableChangeChannelBandWidth - Enable/Disable change
@ -13983,6 +14035,14 @@ struct hdd_config {
/* Bitmap for operating voltage corner mode */
uint32_t vc_mode_cfg_bitmap;
#ifdef MWS_COEX
/* Bitmap for MWS-COEX 4G Quick FTDM */
uint32_t mws_coex_4g_quick_tdm;
/* Bitmap for MWS-COEX 5G-NR power limit */
uint32_t mws_coex_5g_nr_pwr_limit;
#endif
uint16_t nNeighborScanPeriod;
uint16_t neighbor_scan_min_period;
uint8_t nNeighborLookupRssiThreshold;

View file

@ -5301,6 +5301,20 @@ struct reg_table_entry g_registry_table[] = {
CFG_CHANGE_CHANNEL_BANDWIDTH_DEFAULT,
CFG_CHANGE_CHANNEL_BANDWIDTH_MIN,
CFG_CHANGE_CHANNEL_BANDWIDTH_MAX),
#ifdef MWS_COEX
REG_VARIABLE(CFG_MWS_COEX_4G_QUICK_FTDM_NAME, WLAN_PARAM_HexInteger,
struct hdd_config, mws_coex_4g_quick_tdm,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_MWS_COEX_4G_QUICK_FTDM_DEFAULT,
CFG_MWS_COEX_4G_QUICK_FTDM_MIN,
CFG_MWS_COEX_4G_QUICK_FTDM_MAX),
REG_VARIABLE(CFG_MWS_COEX_5G_NR_PWR_LIMIT_NAME, WLAN_PARAM_HexInteger,
struct hdd_config, mws_coex_5g_nr_pwr_limit,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_MWS_COEX_5G_NR_PWR_LIMIT_DEFAULT,
CFG_MWS_COEX_5G_NR_PWR_LIMIT_MIN,
CFG_MWS_COEX_5G_NR_PWR_LIMIT_MAX),
#endif
};

View file

@ -10256,6 +10256,44 @@ static int hdd_set_auto_shutdown_cb(struct hdd_context *hdd_ctx)
}
#endif
#ifdef MWS_COEX
/**
* hdd_set_mws_coex() - Set MWS coex configurations
* @hdd_ctx: HDD context
*
* This function sends MWS-COEX 4G quick FTDM and
* MWS-COEX 5G-NR power limit to FW
*
* Return: 0 on success and errno on failure.
*/
static int hdd_init_mws_coex(struct hdd_context *hdd_ctx)
{
int ret = 0;
ret = sme_cli_set_command(0, WMI_PDEV_PARAM_MWSCOEX_4G_ALLOW_QUICK_FTDM,
hdd_ctx->config->mws_coex_4g_quick_tdm,
PDEV_CMD);
if (ret) {
hdd_warn("Unable to send MWS-COEX 4G quick FTDM policy");
return ret;
}
ret = sme_cli_set_command(0, WMI_PDEV_PARAM_MWSCOEX_SET_5GNR_PWR_LIMIT,
hdd_ctx->config->mws_coex_5g_nr_pwr_limit,
PDEV_CMD);
if (ret) {
hdd_warn("Unable to send MWS-COEX 4G quick FTDM policy");
return ret;
}
return ret;
}
#else
static int hdd_init_mws_coex(struct hdd_context *hdd_ctx)
{
return 0;
}
#endif
/**
* hdd_features_init() - Init features
* @hdd_ctx: HDD context
@ -10275,6 +10313,10 @@ static int hdd_features_init(struct hdd_context *hdd_ctx)
hdd_enter();
ret = hdd_init_mws_coex(hdd_ctx);
if (ret)
hdd_warn("Error initializing mws-coex");
cfg = hdd_ctx->config;
/* FW capabilities received, Set the Dot11 mode */
mac_handle = hdd_ctx->mac_handle;