qcacld-3.0: Add support to configure HE fragmentaion

Add support to configure HE fragmentation support using NL
command.

Change-Id: I49b81df96a9c8199a1cc5994762aeba0ed9676b0
CRs-Fixed: 2166782
This commit is contained in:
Kiran Kumar Lokere 2018-02-08 17:10:05 -08:00 • committed by snandini
commit 5cc2f0da1f
4 changed files with 52 additions and 8 deletions

View file

@ -15120,11 +15120,11 @@ struct hdd_config {
enum active_bpf_mode active_uc_bpf_mode;
enum active_bpf_mode active_mc_bc_bpf_mode;
bool enable_bcast_probe_rsp;
uint8_t he_dynamic_frag_support;
#ifdef WLAN_FEATURE_11AX
bool enable_ul_mimo;
bool enable_ul_ofdma;
uint32_t he_sta_obsspd;
uint8_t he_dynamic_frag_support;
#endif
enum l1ss_sleep_allowed l1ss_sleep_allowed;
uint32_t arp_ac_category;

View file

@ -6272,6 +6272,8 @@ wlan_hdd_wifi_test_config_policy[
.type = NLA_U8},
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_SEND_ADDBA_REQ] = {
.type = NLA_U8},
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_FRAGMENTATION] = {
.type = NLA_U8},
};
/**
@ -7336,6 +7338,20 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
WMI_VDEV_PARAM_BA_MODE, set_val, VDEV_CMD);
}
if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_FRAGMENTATION]) {
cfg_val = nla_get_u8(tb[
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_FRAGMENTATION]
);
if (cfg_val > HE_FRAG_LEVEL1)
set_val = HE_FRAG_LEVEL1;
else
set_val = cfg_val;
hdd_debug("set HE fragmention to %d", set_val);
ret_val = sme_update_he_frag_supp(hdd_ctx->hHal,
adapter->session_id, set_val);
}
return ret_val;
}

View file

@ -2145,6 +2145,17 @@ int sme_update_he_tx_stbc_cap(tHalHandle hal, uint8_t session_id, int value);
* Return: 0 on success else err code
*/
int sme_update_he_rx_stbc_cap(tHalHandle hal, uint8_t session_id, int value);
/**
* sme_update_he_frag_supp() - sets the HE fragmentation support
* @hal: Pointer to HAL
* @session_id: SME session id
* @he_frag: HE fragmention support value
*
* Return: 0 on success else err code
*/
int sme_update_he_frag_supp(tHalHandle hal, uint8_t session_id,
uint16_t he_frag);
#else
static inline void sme_update_he_cap_nss(tHalHandle hal, uint8_t session_id,
uint8_t nss)
@ -2165,6 +2176,12 @@ static inline int sme_update_he_rx_stbc_cap(tHalHandle hal, uint8_t session_id,
{
return 0;
}
static inline int sme_update_he_frag_supp(tHalHandle hal, uint8_t session_id,
uint16_t he_frag)
{
return 0;
}
#endif
/**

View file

@ -13235,15 +13235,13 @@ static int sme_update_he_cap(tHalHandle hal, uint8_t session_id,
{
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
struct csr_roam_session *session;
uint32_t he_cap_val = 0;
session = CSR_GET_SESSION(mac_ctx, session_id);
if (!session) {
sme_err("No session for id %d", session_id);
return -EINVAL;
}
he_cap_val = value ? 1 : 0;
sme_cfg_set_int(mac_ctx, he_cap, he_cap_val);
sme_cfg_set_int(mac_ctx, he_cap, value);
csr_update_session_he_cap(mac_ctx, session);
return 0;
@ -13252,27 +13250,40 @@ static int sme_update_he_cap(tHalHandle hal, uint8_t session_id,
int sme_update_he_tx_stbc_cap(tHalHandle hal, uint8_t session_id, int value)
{
int ret;
uint32_t he_cap_val = 0;
he_cap_val = value ? 1 : 0;
ret = sme_update_he_cap(hal, session_id,
WNI_CFG_HE_TX_STBC_LT80, value);
WNI_CFG_HE_TX_STBC_LT80, he_cap_val);
if (ret)
return ret;
return sme_update_he_cap(hal, session_id,
WNI_CFG_HE_TX_STBC_GT80, value);
WNI_CFG_HE_TX_STBC_GT80, he_cap_val);
}
int sme_update_he_rx_stbc_cap(tHalHandle hal, uint8_t session_id, int value)
{
int ret;
uint32_t he_cap_val = 0;
he_cap_val = value ? 1 : 0;
ret = sme_update_he_cap(hal, session_id,
WNI_CFG_HE_RX_STBC_LT80, value);
WNI_CFG_HE_RX_STBC_LT80, he_cap_val);
if (ret)
return ret;
return sme_update_he_cap(hal, session_id,
WNI_CFG_HE_RX_STBC_GT80, value);
WNI_CFG_HE_RX_STBC_GT80, he_cap_val);
}
int sme_update_he_frag_supp(tHalHandle hal, uint8_t session_id,
uint16_t he_frag)
{
return sme_update_he_cap(hal, session_id,
WNI_CFG_HE_FRAGMENTATION, he_frag);
}
#endif