Commit d2353679 authored by Daniel Kim's avatar Daniel Kim Committed by John W. Linville

brcmfmac: Enable 40MHz bandwidth in 2GHz band and OBSS scanning operations

This patch enables 40MHz bandwidth in 2GHz band after checking whether
cfg80211 allows it or not, and enables OBSS scanning operations to
to support 20/40 BSS coexistence.
Reviewed-by: default avatarArend Van Spriel <arend@broadcom.com>
Reviewed-by: default avatarHante Meuleman <meuleman@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: default avatarDaniel Kim <dekim@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 370c5ace
...@@ -48,6 +48,11 @@ ...@@ -48,6 +48,11 @@
#define BRCMF_MAXRATES_IN_SET 16 /* max # of rates in rateset */ #define BRCMF_MAXRATES_IN_SET 16 /* max # of rates in rateset */
/* OBSS Coex Auto/On/Off */
#define BRCMF_OBSS_COEX_AUTO (-1)
#define BRCMF_OBSS_COEX_OFF 0
#define BRCMF_OBSS_COEX_ON 1
enum brcmf_fil_p2p_if_types { enum brcmf_fil_p2p_if_types {
BRCMF_FIL_P2P_IF_CLIENT, BRCMF_FIL_P2P_IF_CLIENT,
BRCMF_FIL_P2P_IF_GO, BRCMF_FIL_P2P_IF_GO,
...@@ -87,6 +92,11 @@ struct brcmf_fil_bss_enable_le { ...@@ -87,6 +92,11 @@ struct brcmf_fil_bss_enable_le {
__le32 enable; __le32 enable;
}; };
struct brcmf_fil_bwcap_le {
__le32 band;
__le32 bw_cap;
};
/** /**
* struct tdls_iovar - common structure for tdls iovars. * struct tdls_iovar - common structure for tdls iovars.
* *
......
...@@ -191,6 +191,7 @@ static struct ieee80211_supported_band __wl_band_2ghz = { ...@@ -191,6 +191,7 @@ static struct ieee80211_supported_band __wl_band_2ghz = {
.n_channels = ARRAY_SIZE(__wl_2ghz_channels), .n_channels = ARRAY_SIZE(__wl_2ghz_channels),
.bitrates = wl_g_rates, .bitrates = wl_g_rates,
.n_bitrates = wl_g_rates_size, .n_bitrates = wl_g_rates_size,
.ht_cap = {IEEE80211_HT_CAP_SUP_WIDTH_20_40, true},
}; };
static struct ieee80211_supported_band __wl_band_5ghz_a = { static struct ieee80211_supported_band __wl_band_5ghz_a = {
...@@ -4929,6 +4930,19 @@ static void init_vif_event(struct brcmf_cfg80211_vif_event *event) ...@@ -4929,6 +4930,19 @@ static void init_vif_event(struct brcmf_cfg80211_vif_event *event)
mutex_init(&event->vif_event_lock); mutex_init(&event->vif_event_lock);
} }
static int brcmf_set_bwcap(struct brcmf_if *ifp, u32 band, u32 bw_cap)
{
struct brcmf_fil_bwcap_le band_bwcap;
int err;
band_bwcap.band = cpu_to_le32(band);
band_bwcap.bw_cap = cpu_to_le32(bw_cap);
err = brcmf_fil_iovar_data_set(ifp, "bw_cap", &band_bwcap,
sizeof(band_bwcap));
return err;
}
struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr, struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
struct device *busdev) struct device *busdev)
{ {
...@@ -4986,6 +5000,18 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr, ...@@ -4986,6 +5000,18 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
goto cfg80211_p2p_attach_out; goto cfg80211_p2p_attach_out;
} }
/* If cfg80211 didn't disable 40MHz HT CAP in wiphy_register(),
* setup 40MHz in 2GHz band and enable OBSS scanning.
*/
if (wiphy->bands[IEEE80211_BAND_2GHZ]->ht_cap.cap &
IEEE80211_HT_CAP_SUP_WIDTH_20_40) {
err = brcmf_set_bwcap(ifp, WLC_BAND_2G, WLC_BW_CAP_40MHZ);
if (!err) {
err = brcmf_fil_iovar_int_set(ifp, "obss_coex",
BRCMF_OBSS_COEX_AUTO);
}
}
err = brcmf_fil_iovar_int_set(ifp, "tdls_enable", 1); err = brcmf_fil_iovar_int_set(ifp, "tdls_enable", 1);
if (err) { if (err) {
brcmf_dbg(INFO, "TDLS not enabled (%d)\n", err); brcmf_dbg(INFO, "TDLS not enabled (%d)\n", err);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment