mwifiex: parse power constraint IE from Tail
This patch adds support to parse power constraint IEs from Tail buffer. This power constraint is then set to FW during bss_config download. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Cathy Luo <cluo@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
8baca1a34d
commit
8a73dd6398
|
@ -1867,6 +1867,9 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy,
|
|||
|
||||
mwifiex_set_wmm_params(priv, bss_cfg, params);
|
||||
|
||||
if (mwifiex_is_11h_active(priv))
|
||||
mwifiex_set_tpc_params(priv, bss_cfg, params);
|
||||
|
||||
if (mwifiex_is_11h_active(priv) &&
|
||||
!cfg80211_chandef_dfs_required(wiphy, ¶ms->chandef,
|
||||
priv->bss_mode)) {
|
||||
|
|
|
@ -128,6 +128,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
|
|||
|
||||
#define TLV_TYPE_UAP_SSID 0x0000
|
||||
#define TLV_TYPE_UAP_RATES 0x0001
|
||||
#define TLV_TYPE_PWR_CONSTRAINT 0x0020
|
||||
|
||||
#define PROPRIETARY_TLV_BASE_ID 0x0100
|
||||
#define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0)
|
||||
|
@ -1780,6 +1781,11 @@ struct host_cmd_tlv_ageout_timer {
|
|||
__le32 sta_ao_timer;
|
||||
} __packed;
|
||||
|
||||
struct host_cmd_tlv_power_constraint {
|
||||
struct mwifiex_ie_types_header header;
|
||||
u8 constraint;
|
||||
} __packed;
|
||||
|
||||
struct host_cmd_ds_version_ext {
|
||||
u8 version_str_sel;
|
||||
char version_str[128];
|
||||
|
|
|
@ -113,6 +113,7 @@ struct mwifiex_uap_bss_param {
|
|||
u32 sta_ao_timer;
|
||||
u32 ps_sta_ao_timer;
|
||||
u8 qos_info;
|
||||
u8 power_constraint;
|
||||
struct mwifiex_types_wmm_info wmm_info;
|
||||
};
|
||||
|
||||
|
|
|
@ -1149,6 +1149,9 @@ void mwifiex_set_ht_params(struct mwifiex_private *priv,
|
|||
void mwifiex_set_vht_params(struct mwifiex_private *priv,
|
||||
struct mwifiex_uap_bss_param *bss_cfg,
|
||||
struct cfg80211_ap_settings *params);
|
||||
void mwifiex_set_tpc_params(struct mwifiex_private *priv,
|
||||
struct mwifiex_uap_bss_param *bss_cfg,
|
||||
struct cfg80211_ap_settings *params);
|
||||
void mwifiex_set_uap_rates(struct mwifiex_uap_bss_param *bss_cfg,
|
||||
struct cfg80211_ap_settings *params);
|
||||
void mwifiex_set_vht_width(struct mwifiex_private *priv,
|
||||
|
|
|
@ -222,6 +222,23 @@ void mwifiex_set_vht_params(struct mwifiex_private *priv,
|
|||
return;
|
||||
}
|
||||
|
||||
/* This function updates 11ac related parameters from IE
|
||||
* and sets them into bss_config structure.
|
||||
*/
|
||||
void mwifiex_set_tpc_params(struct mwifiex_private *priv,
|
||||
struct mwifiex_uap_bss_param *bss_cfg,
|
||||
struct cfg80211_ap_settings *params)
|
||||
{
|
||||
const u8 *tpc_ie;
|
||||
|
||||
tpc_ie = cfg80211_find_ie(WLAN_EID_TPC_REQUEST, params->beacon.tail,
|
||||
params->beacon.tail_len);
|
||||
if (tpc_ie)
|
||||
bss_cfg->power_constraint = *(tpc_ie + 2);
|
||||
else
|
||||
bss_cfg->power_constraint = 0;
|
||||
}
|
||||
|
||||
/* Enable VHT only when cfg80211_ap_settings has VHT IE.
|
||||
* Otherwise disable VHT.
|
||||
*/
|
||||
|
@ -466,6 +483,7 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
|
|||
struct host_cmd_tlv_auth_type *auth_type;
|
||||
struct host_cmd_tlv_rates *tlv_rates;
|
||||
struct host_cmd_tlv_ageout_timer *ao_timer, *ps_ao_timer;
|
||||
struct host_cmd_tlv_power_constraint *pwr_ct;
|
||||
struct mwifiex_ie_types_htcap *htcap;
|
||||
struct mwifiex_ie_types_wmmcap *wmm_cap;
|
||||
struct mwifiex_uap_bss_param *bss_cfg = cmd_buf;
|
||||
|
@ -644,6 +662,15 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
|
|||
tlv += sizeof(*ao_timer);
|
||||
}
|
||||
|
||||
if (bss_cfg->power_constraint) {
|
||||
pwr_ct = (void *)tlv;
|
||||
pwr_ct->header.type = cpu_to_le16(TLV_TYPE_PWR_CONSTRAINT);
|
||||
pwr_ct->header.len = cpu_to_le16(sizeof(u8));
|
||||
pwr_ct->constraint = bss_cfg->power_constraint;
|
||||
cmd_size += sizeof(*pwr_ct);
|
||||
tlv += sizeof(*pwr_ct);
|
||||
}
|
||||
|
||||
if (bss_cfg->ps_sta_ao_timer) {
|
||||
ps_ao_timer = (struct host_cmd_tlv_ageout_timer *)tlv;
|
||||
ps_ao_timer->header.type =
|
||||
|
|
Loading…
Reference in New Issue