mirror of https://gitee.com/openkylin/linux.git
mwifiex: fix AP unable to start in VHT40 problem
This patch populates secondary channel offset and downloads it to firmware to fix the problem. Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Cathy Luo <cluo@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
437322ea2a
commit
568fb26ec8
|
@ -83,6 +83,8 @@ struct wep_key {
|
||||||
#define MWIFIEX_AUTH_MODE_AUTO 0xFF
|
#define MWIFIEX_AUTH_MODE_AUTO 0xFF
|
||||||
#define BAND_CONFIG_BG 0x00
|
#define BAND_CONFIG_BG 0x00
|
||||||
#define BAND_CONFIG_A 0x01
|
#define BAND_CONFIG_A 0x01
|
||||||
|
#define MWIFIEX_SEC_CHAN_BELOW 0x30
|
||||||
|
#define MWIFIEX_SEC_CHAN_ABOVE 0x10
|
||||||
#define MWIFIEX_SUPPORTED_RATES 14
|
#define MWIFIEX_SUPPORTED_RATES 14
|
||||||
#define MWIFIEX_SUPPORTED_RATES_EXT 32
|
#define MWIFIEX_SUPPORTED_RATES_EXT 32
|
||||||
#define MWIFIEX_TDLS_SUPPORTED_RATES 8
|
#define MWIFIEX_TDLS_SUPPORTED_RATES 8
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "11ac.h"
|
#include "11ac.h"
|
||||||
|
#include "11n.h"
|
||||||
|
|
||||||
/* This function parses security related parameters from cfg80211_ap_settings
|
/* This function parses security related parameters from cfg80211_ap_settings
|
||||||
* and sets into FW understandable bss_config structure.
|
* and sets into FW understandable bss_config structure.
|
||||||
|
@ -521,9 +522,9 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
|
||||||
tlv += sizeof(struct host_cmd_tlv_rates) + i;
|
tlv += sizeof(struct host_cmd_tlv_rates) + i;
|
||||||
}
|
}
|
||||||
if (bss_cfg->channel &&
|
if (bss_cfg->channel &&
|
||||||
((bss_cfg->band_cfg == BAND_CONFIG_BG &&
|
(((bss_cfg->band_cfg & BIT(0)) == BAND_CONFIG_BG &&
|
||||||
bss_cfg->channel <= MAX_CHANNEL_BAND_BG) ||
|
bss_cfg->channel <= MAX_CHANNEL_BAND_BG) ||
|
||||||
(bss_cfg->band_cfg == BAND_CONFIG_A &&
|
((bss_cfg->band_cfg & BIT(0)) == BAND_CONFIG_A &&
|
||||||
bss_cfg->channel <= MAX_CHANNEL_BAND_A))) {
|
bss_cfg->channel <= MAX_CHANNEL_BAND_A))) {
|
||||||
chan_band = (struct host_cmd_tlv_channel_band *)tlv;
|
chan_band = (struct host_cmd_tlv_channel_band *)tlv;
|
||||||
chan_band->header.type = cpu_to_le16(TLV_TYPE_CHANNELBANDLIST);
|
chan_band->header.type = cpu_to_le16(TLV_TYPE_CHANNELBANDLIST);
|
||||||
|
@ -833,6 +834,31 @@ void mwifiex_uap_set_channel(struct mwifiex_private *priv,
|
||||||
config_bands |= BAND_AAC;
|
config_bands |= BAND_AAC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (chandef.width) {
|
||||||
|
case NL80211_CHAN_WIDTH_5:
|
||||||
|
case NL80211_CHAN_WIDTH_10:
|
||||||
|
case NL80211_CHAN_WIDTH_20_NOHT:
|
||||||
|
case NL80211_CHAN_WIDTH_20:
|
||||||
|
break;
|
||||||
|
case NL80211_CHAN_WIDTH_40:
|
||||||
|
if (chandef.center_freq1 < chandef.chan->center_freq)
|
||||||
|
bss_cfg->band_cfg |= MWIFIEX_SEC_CHAN_BELOW;
|
||||||
|
else
|
||||||
|
bss_cfg->band_cfg |= MWIFIEX_SEC_CHAN_ABOVE;
|
||||||
|
break;
|
||||||
|
case NL80211_CHAN_WIDTH_80:
|
||||||
|
case NL80211_CHAN_WIDTH_80P80:
|
||||||
|
case NL80211_CHAN_WIDTH_160:
|
||||||
|
bss_cfg->band_cfg |=
|
||||||
|
mwifiex_get_sec_chan_offset(bss_cfg->channel) << 4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mwifiex_dbg(priv->adapter,
|
||||||
|
WARN, "Unknown channel width: %d\n",
|
||||||
|
chandef.width);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
priv->adapter->config_bands = config_bands;
|
priv->adapter->config_bands = config_bands;
|
||||||
|
|
||||||
if (old_bands != config_bands) {
|
if (old_bands != config_bands) {
|
||||||
|
|
Loading…
Reference in New Issue