mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 15:49:17 -04:00
qcacld-3.0: Add host support to configure GCMP
Add an ini parameter for GCMP support. Send an indication to FW with the ini value. Change-Id: Ib24747ddb35593373ecc83d6c7f89866571c2421 CRs-Fixed: 2175104
This commit is contained in:
parent
00f8753685
commit
cb14b11324
4 changed files with 75 additions and 6 deletions
|
|
@ -14110,9 +14110,32 @@ enum hdd_external_acs_freq_band {
|
|||
#define CFG_BTM_STICKY_TIME_DEFAULT (300)
|
||||
|
||||
/*
|
||||
* Type declarations
|
||||
* <ini>
|
||||
* gcmp_enabled - ini to enable/disable GCMP
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 0
|
||||
*
|
||||
* Currently Firmware update the sequence number for each TID with 2^3
|
||||
* because of security issues. But with this PN mechanism, throughput drop
|
||||
* is observed. With this ini FW takes the decision to trade off between
|
||||
* security and throughput
|
||||
*
|
||||
* Supported Feature: STA/SAP/P2P
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
|
||||
#define CFG_ENABLE_GCMP_NAME "gcmp_enabled"
|
||||
#define CFG_ENABLE_GCMP_MIN (0)
|
||||
#define CFG_ENABLE_GCMP_MAX (1)
|
||||
#define CFG_ENABLE_GCMP_DEFAULT (0)
|
||||
|
||||
/*
|
||||
* Type declarations
|
||||
*/
|
||||
struct hdd_config {
|
||||
/* Bitmap to track what is explicitly configured */
|
||||
DECLARE_BITMAP(bExplicitCfg, MAX_CFG_INI_ITEMS);
|
||||
|
|
@ -15009,6 +15032,7 @@ struct hdd_config {
|
|||
uint32_t btm_solicited_timeout;
|
||||
uint32_t btm_max_attempt_cnt;
|
||||
uint32_t btm_sticky_time;
|
||||
bool gcmp_enabled;
|
||||
};
|
||||
|
||||
#define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var))
|
||||
|
|
|
|||
|
|
@ -5446,6 +5446,13 @@ struct reg_table_entry g_registry_table[] = {
|
|||
CFG_BTM_STICKY_TIME_DEFAULT,
|
||||
CFG_BTM_STICKY_TIME_MIN,
|
||||
CFG_BTM_STICKY_TIME_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_ENABLE_GCMP_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, gcmp_enabled,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_ENABLE_GCMP_DEFAULT,
|
||||
CFG_ENABLE_GCMP_MIN,
|
||||
CFG_ENABLE_GCMP_MAX),
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -7297,6 +7304,9 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx)
|
|||
hdd_ctx->config->btm_max_attempt_cnt);
|
||||
hdd_debug("Name = [btm_sticky_time] value = [0x%x]",
|
||||
hdd_ctx->config->btm_sticky_time);
|
||||
hdd_debug("Name = [%s] value = [%d]",
|
||||
CFG_ENABLE_GCMP_NAME,
|
||||
hdd_ctx->config->gcmp_enabled);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -182,6 +182,11 @@
|
|||
#define WLAN_CIPHER_SUITE_GCMP_256 0x000FAC09
|
||||
#endif
|
||||
|
||||
static const u32 hdd_gcmp_cipher_suits[] = {
|
||||
WLAN_CIPHER_SUITE_GCMP,
|
||||
WLAN_CIPHER_SUITE_GCMP_256,
|
||||
};
|
||||
|
||||
static const u32 hdd_cipher_suites[] = {
|
||||
WLAN_CIPHER_SUITE_WEP40,
|
||||
WLAN_CIPHER_SUITE_WEP104,
|
||||
|
|
@ -205,8 +210,6 @@ static const u32 hdd_cipher_suites[] = {
|
|||
WLAN_CIPHER_SUITE_BIP_GMAC_256,
|
||||
#endif
|
||||
#endif
|
||||
WLAN_CIPHER_SUITE_GCMP,
|
||||
WLAN_CIPHER_SUITE_GCMP_256,
|
||||
};
|
||||
|
||||
static const struct ieee80211_channel hdd_channels_2_4_ghz[] = {
|
||||
|
|
@ -14098,6 +14101,7 @@ int wlan_hdd_cfg80211_init(struct device *dev,
|
|||
int i, j;
|
||||
struct hdd_context *hdd_ctx = wiphy_priv(wiphy);
|
||||
int len = 0;
|
||||
uint32_t *cipher_suites;
|
||||
|
||||
ENTER();
|
||||
|
||||
|
|
@ -14287,9 +14291,32 @@ int wlan_hdd_cfg80211_init(struct device *dev,
|
|||
}
|
||||
}
|
||||
/*Initialise the supported cipher suite details */
|
||||
wiphy->cipher_suites = hdd_cipher_suites;
|
||||
wiphy->n_cipher_suites = ARRAY_SIZE(hdd_cipher_suites);
|
||||
|
||||
if (pCfg->gcmp_enabled) {
|
||||
cipher_suites = qdf_mem_malloc(sizeof(hdd_cipher_suites) +
|
||||
sizeof(hdd_gcmp_cipher_suits));
|
||||
if (cipher_suites == NULL) {
|
||||
hdd_err("Not enough memory for cipher suites");
|
||||
return -ENOMEM;
|
||||
}
|
||||
wiphy->n_cipher_suites = QDF_ARRAY_SIZE(hdd_cipher_suites) +
|
||||
QDF_ARRAY_SIZE(hdd_gcmp_cipher_suits);
|
||||
qdf_mem_copy(cipher_suites, &hdd_cipher_suites,
|
||||
sizeof(hdd_cipher_suites));
|
||||
qdf_mem_copy(cipher_suites + QDF_ARRAY_SIZE(hdd_cipher_suites),
|
||||
&hdd_gcmp_cipher_suits,
|
||||
sizeof(hdd_gcmp_cipher_suits));
|
||||
} else {
|
||||
cipher_suites = qdf_mem_malloc(sizeof(hdd_cipher_suites));
|
||||
if (cipher_suites == NULL) {
|
||||
hdd_err("Not enough memory for cipher suites");
|
||||
return -ENOMEM;
|
||||
}
|
||||
wiphy->n_cipher_suites = QDF_ARRAY_SIZE(hdd_cipher_suites);
|
||||
qdf_mem_copy(cipher_suites, &hdd_cipher_suites,
|
||||
sizeof(hdd_cipher_suites));
|
||||
}
|
||||
wiphy->cipher_suites = cipher_suites;
|
||||
cipher_suites = NULL;
|
||||
/*signal strength in mBm (100*dBm) */
|
||||
wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
|
||||
wiphy->max_remain_on_channel_duration = MAX_REMAIN_ON_CHANNEL_DURATION;
|
||||
|
|
@ -14351,6 +14378,7 @@ mem_fail:
|
|||
void wlan_hdd_cfg80211_deinit(struct wiphy *wiphy)
|
||||
{
|
||||
int i;
|
||||
const uint32_t *cipher_suites;
|
||||
|
||||
for (i = 0; i < HDD_NUM_NL80211_BANDS; i++) {
|
||||
if (NULL != wiphy->bands[i] &&
|
||||
|
|
@ -14360,6 +14388,11 @@ void wlan_hdd_cfg80211_deinit(struct wiphy *wiphy)
|
|||
}
|
||||
}
|
||||
|
||||
cipher_suites = wiphy->cipher_suites;
|
||||
wiphy->cipher_suites = NULL;
|
||||
wiphy->n_cipher_suites = 0;
|
||||
qdf_mem_free((uint32_t *)cipher_suites);
|
||||
cipher_suites = NULL;
|
||||
hdd_reset_global_reg_params();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9949,6 +9949,8 @@ int hdd_configure_cds(struct hdd_context *hdd_ctx, struct hdd_adapter *adapter)
|
|||
if (0 != wlan_hdd_set_wow_pulse(hdd_ctx, true))
|
||||
hdd_debug("Failed to set wow pulse");
|
||||
|
||||
sme_cli_set_command(0, WMI_PDEV_PARAM_GCMP_SUPPORT_ENABLE,
|
||||
hdd_ctx->config->gcmp_enabled, PDEV_CMD);
|
||||
sme_cli_set_command(0, WMI_PDEV_AUTO_DETECT_POWER_FAILURE,
|
||||
hdd_ctx->config->auto_pwr_save_fail_mode, PDEV_CMD);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue