mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 00:00:00 -04:00
qcacld-3.0: Add support to configure HE MCS using ioctl
Add support to configure HE MCS using ioctl Change-Id: Idcff05dd090a601e1603d60f55a38424d2f124d8 CRs-Fixed: 2181112
This commit is contained in:
parent
08195ef17d
commit
96246e5cfb
3 changed files with 89 additions and 0 deletions
|
|
@ -6253,6 +6253,8 @@ wlan_hdd_wifi_test_config_policy[
|
|||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ACCEPT_ADDBA_REQ] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MCS] = {
|
||||
.type = NLA_U8},
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -7265,6 +7267,16 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
|||
return ret_val;
|
||||
}
|
||||
|
||||
if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MCS]) {
|
||||
cfg_val = nla_get_u8(tb[
|
||||
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MCS]);
|
||||
hdd_debug("set HE MCS value 0x%0X", cfg_val);
|
||||
ret_val = sme_update_he_mcs(hdd_ctx->hHal, adapter->session_id,
|
||||
cfg_val);
|
||||
if (ret_val)
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2118,10 +2118,25 @@ static inline QDF_STATUS sme_handle_sae_msg(tHalHandle hal, uint8_t session_id,
|
|||
*/
|
||||
void sme_update_he_cap_nss(tHalHandle hal, uint8_t session_id,
|
||||
uint8_t nss);
|
||||
|
||||
/**
|
||||
* sme_update_he_mcs() - sets the HE MCS based on user request
|
||||
* @hal: Pointer to HAL
|
||||
* @session_id: SME session id
|
||||
* @he_mcs: HE MCS value
|
||||
*
|
||||
* Return: 0 on success else err code
|
||||
*/
|
||||
int sme_update_he_mcs(tHalHandle hal, uint8_t session_id, uint16_t he_mcs);
|
||||
#else
|
||||
static inline void sme_update_he_cap_nss(tHalHandle hal, uint8_t session_id,
|
||||
uint8_t nss)
|
||||
{}
|
||||
static inline int sme_update_he_mcs(tHalHandle hal, uint8_t session_id,
|
||||
uint16_t he_mcs)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* #if !defined( __SME_API_H ) */
|
||||
|
|
|
|||
|
|
@ -13181,6 +13181,68 @@ void sme_update_he_cap_nss(tHalHandle hal, uint8_t session_id,
|
|||
csr_update_session_he_cap(mac_ctx, csr_session);
|
||||
|
||||
}
|
||||
|
||||
int sme_update_he_mcs(tHalHandle hal, uint8_t session_id, uint16_t he_mcs)
|
||||
{
|
||||
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
|
||||
struct csr_roam_session *csr_session;
|
||||
uint16_t mcs_val = 0;
|
||||
uint16_t mcs_map = HE_MCS_ALL_DISABLED;
|
||||
uint32_t wni_cfg_tx_param = 0;
|
||||
uint32_t wni_cfg_rx_param = 0;
|
||||
|
||||
csr_session = CSR_GET_SESSION(mac_ctx, session_id);
|
||||
if (!csr_session) {
|
||||
sme_err("No session for id %d", session_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
if ((he_mcs & 0x3) == HE_MCS_DISABLE) {
|
||||
sme_err("Invalid HE MCS 0x%0x, can't disable 0-7 for 1ss",
|
||||
he_mcs);
|
||||
return -EINVAL;
|
||||
}
|
||||
mcs_val = he_mcs & 0x3;
|
||||
switch (he_mcs) {
|
||||
case HE_80_MCS0_7:
|
||||
case HE_80_MCS0_9:
|
||||
case HE_80_MCS0_11:
|
||||
if (mac_ctx->roam.configParam.enable2x2) {
|
||||
mcs_map = HE_SET_MCS_4_NSS(mcs_map, mcs_val, 1);
|
||||
mcs_map = HE_SET_MCS_4_NSS(mcs_map, mcs_val, 2);
|
||||
} else {
|
||||
mcs_map = HE_SET_MCS_4_NSS(mcs_map, mcs_val, 1);
|
||||
}
|
||||
wni_cfg_tx_param = WNI_CFG_HE_TX_MCS_MAP_LT_80;
|
||||
wni_cfg_rx_param = WNI_CFG_HE_RX_MCS_MAP_LT_80;
|
||||
break;
|
||||
|
||||
case HE_160_MCS0_7:
|
||||
case HE_160_MCS0_9:
|
||||
case HE_160_MCS0_11:
|
||||
mcs_map = HE_SET_MCS_4_NSS(mcs_map, mcs_val, 1);
|
||||
wni_cfg_tx_param = WNI_CFG_HE_TX_MCS_MAP_160;
|
||||
wni_cfg_rx_param = WNI_CFG_HE_RX_MCS_MAP_160;
|
||||
break;
|
||||
|
||||
case HE_80p80_MCS0_7:
|
||||
case HE_80p80_MCS0_9:
|
||||
case HE_80p80_MCS0_11:
|
||||
mcs_map = HE_SET_MCS_4_NSS(mcs_map, mcs_val, 1);
|
||||
wni_cfg_tx_param = WNI_CFG_HE_TX_MCS_MAP_80_80;
|
||||
wni_cfg_rx_param = WNI_CFG_HE_RX_MCS_MAP_80_80;
|
||||
break;
|
||||
|
||||
default:
|
||||
sme_err("Invalid HE MCS 0x%0x", he_mcs);
|
||||
return -EINVAL;
|
||||
}
|
||||
sme_info("new HE MCS 0x%0x", mcs_map);
|
||||
sme_cfg_set_int(mac_ctx, wni_cfg_tx_param, mcs_map);
|
||||
sme_cfg_set_int(mac_ctx, wni_cfg_rx_param, mcs_map);
|
||||
csr_update_session_he_cap(mac_ctx, csr_session);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue