qcacld-3.0: Add support to configure HE trigger frame MAC padding

Add support to configure HE trigger frame MAC padding and disable
the MU EDCA param update when user configures the padding.

Change-Id: Ief928c5421366b03ee6e1d6253963b10fd3b87b6
CRs-Fixed: 2265331
This commit is contained in:
Kiran Kumar Lokere 2018-07-10 00:53:38 -07:00 • committed by nshrivas
commit f54b85555f
5 changed files with 96 additions and 9 deletions

View file

@ -6329,6 +6329,8 @@ wlan_hdd_wifi_test_config_policy[
.type = NLA_U8},
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_TX_BEAMFORMEE_NSTS] = {
.type = NLA_U8},
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MAC_PADDING_DUR] = {
.type = NLA_U8},
};
/**
@ -7585,6 +7587,33 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
}
if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MAC_PADDING_DUR]) {
cfg_val = nla_get_u8(tb[
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MAC_PADDING_DUR]);
if (cfg_val) {
ret_val = sme_cli_set_command(adapter->session_id,
WMI_VDEV_PARAM_MU_EDCA_FW_UPDATE_EN,
0, VDEV_CMD);
if (ret_val)
hdd_err("MU_EDCA update disable failed");
sme_set_usr_cfg_mu_edca(hdd_ctx->mac_handle, true);
sme_set_he_mu_edca_def_cfg(hdd_ctx->mac_handle);
if (sme_update_mu_edca_params(hdd_ctx->mac_handle,
adapter->session_id))
hdd_err("Failed to send mu edca params");
} else {
ret_val = sme_cli_set_command(adapter->session_id,
WMI_VDEV_PARAM_MU_EDCA_FW_UPDATE_EN,
1, VDEV_CMD);
sme_set_usr_cfg_mu_edca(hdd_ctx->mac_handle, false);
}
ret_val = sme_update_he_trigger_frm_mac_pad(hdd_ctx->mac_handle,
adapter->session_id,
cfg_val);
if (ret_val)
hdd_err("Failed to set Trig frame mac padding cap");
}
if (update_sme_cfg)
sme_update_config(mac_handle, sme_config);

View file

@ -925,6 +925,7 @@ typedef struct sAniSirGlobal {
uint8_t usr_cfg_tx_bfee_nsts;
struct mgmt_beacon_probe_filter bcn_filter;
tSirMacEdcaParamRecord usr_mu_edca_params[MAX_NUM_AC];
bool usr_cfg_mu_edca_params;
#ifdef WLAN_FEATURE_11AX
tDot11fIEhe_cap he_cap_2g;
tDot11fIEhe_cap he_cap_5g;

View file

@ -996,15 +996,28 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
ie_len,
beacon);
if (lim_is_session_he_capable(session_entry) &&
assoc_rsp->mu_edca_present) {
pe_debug("Send MU EDCA params to FW");
mu_edca_set[EDCA_AC_BE] = assoc_rsp->mu_edca.acbe;
mu_edca_set[EDCA_AC_BK] = assoc_rsp->mu_edca.acbk;
mu_edca_set[EDCA_AC_VI] = assoc_rsp->mu_edca.acvi;
mu_edca_set[EDCA_AC_VO] = assoc_rsp->mu_edca.acvo;
lim_send_edca_params(mac_ctx, mu_edca_set,
sta_ds->bssId, true);
if (lim_is_session_he_capable(session_entry)) {
if (mac_ctx->usr_cfg_mu_edca_params) {
pe_debug("Send user cfg MU EDCA params to FW");
mu_edca_set[EDCA_AC_BE] =
mac_ctx->usr_mu_edca_params[EDCA_AC_BE];
mu_edca_set[EDCA_AC_BK] =
mac_ctx->usr_mu_edca_params[EDCA_AC_BK];
mu_edca_set[EDCA_AC_VI] =
mac_ctx->usr_mu_edca_params[EDCA_AC_VI];
mu_edca_set[EDCA_AC_VO] =
mac_ctx->usr_mu_edca_params[EDCA_AC_VO];
lim_send_edca_params(mac_ctx, mu_edca_set,
sta_ds->bssId, true);
} else if (assoc_rsp->mu_edca_present) {
pe_debug("Send MU EDCA params to FW");
mu_edca_set[EDCA_AC_BE] = assoc_rsp->mu_edca.acbe;
mu_edca_set[EDCA_AC_BK] = assoc_rsp->mu_edca.acbk;
mu_edca_set[EDCA_AC_VI] = assoc_rsp->mu_edca.acvi;
mu_edca_set[EDCA_AC_VO] = assoc_rsp->mu_edca.acvo;
lim_send_edca_params(mac_ctx, mu_edca_set,
sta_ds->bssId, true);
}
}

View file

@ -2392,6 +2392,25 @@ int sme_update_he_tx_bfee_nsts(mac_handle_t hal, uint8_t session_id,
*/
int sme_update_he_mcs(tHalHandle hal, uint8_t session_id, uint16_t he_mcs);
/**
* sme_update_he_trigger_frm_mac_pad() - sets the HE MAC padding capability
* @hal: Pointer to HAL
* @session_id: SME session id
* @cfg_val: HE MAC padding duration value
*
* Return: 0 on success else err code
*/
int sme_update_he_trigger_frm_mac_pad(mac_handle_t hal, uint8_t session_id,
uint8_t cfg_val);
/**
* sme_set_usr_cfg_mu_edca() - sets the user cfg MU EDCA params flag
* @hal: Pointer to HAL
* @val: value to be set
*
* Return: none
*/
void sme_set_usr_cfg_mu_edca(mac_handle_t hal, bool val);
/**
* sme_set_he_mu_edca_def_cfg() - sets the default MU EDCA params values
* @hal: Pointer to HAL
@ -2472,6 +2491,17 @@ static inline int sme_update_mu_edca_params(mac_handle_t hal,
{
return 0;
}
static inline int sme_update_he_trigger_frm_mac_pad(mac_handle_t hal,
uint8_t session_id,
uint8_t cfg_val)
{
return 0;
}
static inline void sme_set_usr_cfg_mu_edca(mac_handle_t hal, bool val)
{
}
static inline int sme_update_he_tx_stbc_cap(tHalHandle hal, uint8_t session_id,
int value)
{

View file

@ -12864,6 +12864,13 @@ static int sme_update_he_cap(tHalHandle hal, uint8_t session_id,
return 0;
}
void sme_set_usr_cfg_mu_edca(mac_handle_t hal, bool val)
{
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
mac_ctx->usr_cfg_mu_edca_params = val;
}
int sme_update_mu_edca_params(mac_handle_t hal, uint8_t session_id)
{
struct scheduler_msg msg = {0};
@ -12903,6 +12910,13 @@ int sme_update_he_tx_bfee_supp(tHalHandle hal, uint8_t session_id,
cfg_val);
}
int sme_update_he_trigger_frm_mac_pad(mac_handle_t hal, uint8_t session_id,
uint8_t cfg_val)
{
return sme_update_he_cap(hal, session_id, WNI_CFG_HE_TRIG_PAD,
cfg_val);
}
int sme_update_he_tx_bfee_nsts(mac_handle_t hal, uint8_t session_id,
uint8_t cfg_val)
{