diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/uap_cmd.c')
| -rw-r--r-- | drivers/net/wireless/mwifiex/uap_cmd.c | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/drivers/net/wireless/mwifiex/uap_cmd.c b/drivers/net/wireless/mwifiex/uap_cmd.c index 6e76a15a895..b04b1db2910 100644 --- a/drivers/net/wireless/mwifiex/uap_cmd.c +++ b/drivers/net/wireless/mwifiex/uap_cmd.c @@ -18,6 +18,7 @@   */  #include "main.h" +#include "11ac.h"  /* This function parses security related parameters from cfg80211_ap_settings   * and sets into FW understandable bss_config structure. @@ -177,6 +178,60 @@ mwifiex_set_ht_params(struct mwifiex_private *priv,  	return;  } +/* This function updates 11ac related parameters from IE + * and sets them into bss_config structure. + */ +void mwifiex_set_vht_params(struct mwifiex_private *priv, +			    struct mwifiex_uap_bss_param *bss_cfg, +			    struct cfg80211_ap_settings *params) +{ +	const u8 *vht_ie; + +	vht_ie = cfg80211_find_ie(WLAN_EID_VHT_CAPABILITY, params->beacon.tail, +				  params->beacon.tail_len); +	if (vht_ie) { +		memcpy(&bss_cfg->vht_cap, vht_ie + 2, +		       sizeof(struct ieee80211_vht_cap)); +		priv->ap_11ac_enabled = 1; +	} else { +		priv->ap_11ac_enabled = 0; +	} + +	return; +} + +/* Enable VHT only when cfg80211_ap_settings has VHT IE. + * Otherwise disable VHT. + */ +void mwifiex_set_vht_width(struct mwifiex_private *priv, +			   enum nl80211_chan_width width, +			   bool ap_11ac_enable) +{ +	struct mwifiex_adapter *adapter = priv->adapter; +	struct mwifiex_11ac_vht_cfg vht_cfg; + +	vht_cfg.band_config = VHT_CFG_5GHZ; +	vht_cfg.cap_info = adapter->hw_dot_11ac_dev_cap; + +	if (!ap_11ac_enable) { +		vht_cfg.mcs_tx_set = DISABLE_VHT_MCS_SET; +		vht_cfg.mcs_rx_set = DISABLE_VHT_MCS_SET; +	} else { +		vht_cfg.mcs_tx_set = DEFAULT_VHT_MCS_SET; +		vht_cfg.mcs_rx_set = DEFAULT_VHT_MCS_SET; +	} + +	vht_cfg.misc_config  = VHT_CAP_UAP_ONLY; + +	if (ap_11ac_enable && width >= NL80211_CHAN_WIDTH_80) +		vht_cfg.misc_config |= VHT_BW_80_160_80P80; + +	mwifiex_send_cmd_sync(priv, HostCmd_CMD_11AC_CFG, +			      HostCmd_ACT_GEN_SET, 0, &vht_cfg); + +	return; +} +  /* This function finds supported rates IE from beacon parameter and sets   * these rates into bss_config structure.   */  |