Commit 15a953d0 authored by Hante Meuleman's avatar Hante Meuleman Committed by John W. Linville

brcmfmac: Fix p2p setup when connected to ap on 5G.

The firmware requires that on p2p setup when net interfaces
are created or updated that they start initially with the same
channel as the channel in use for the current connection
(if any). If none exists take default channel 11.
Reviewed-by: default avatarArend Van Spriel <arend@broadcom.com>
Reviewed-by: default avatarFranky (Zhenhui) Lin <frankyl@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: default avatarHante Meuleman <meuleman@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent b3657453
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#define IS_P2P_SOCIAL_CHANNEL(channel) ((channel == SOCIAL_CHAN_1) || \ #define IS_P2P_SOCIAL_CHANNEL(channel) ((channel == SOCIAL_CHAN_1) || \
(channel == SOCIAL_CHAN_2) || \ (channel == SOCIAL_CHAN_2) || \
(channel == SOCIAL_CHAN_3)) (channel == SOCIAL_CHAN_3))
#define BRCMF_P2P_TEMP_CHAN SOCIAL_CHAN_3
#define SOCIAL_CHAN_CNT 3 #define SOCIAL_CHAN_CNT 3
#define AF_PEER_SEARCH_CNT 2 #define AF_PEER_SEARCH_CNT 2
...@@ -2013,17 +2014,30 @@ static void brcmf_p2p_get_current_chanspec(struct brcmf_p2p_info *p2p, ...@@ -2013,17 +2014,30 @@ static void brcmf_p2p_get_current_chanspec(struct brcmf_p2p_info *p2p,
u16 *chanspec) u16 *chanspec)
{ {
struct brcmf_if *ifp; struct brcmf_if *ifp;
struct brcmf_fil_chan_info_le ci; u8 mac_addr[ETH_ALEN];
struct brcmu_chan ch; struct brcmu_chan ch;
s32 err; struct brcmf_bss_info_le *bi;
u8 *buf;
ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp; ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp;
ch.chnum = 11; if (brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSSID, mac_addr,
ETH_ALEN) == 0) {
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_CHANNEL, &ci, sizeof(ci)); buf = kzalloc(WL_BSS_INFO_MAX, GFP_KERNEL);
if (!err) if (buf != NULL) {
ch.chnum = le32_to_cpu(ci.hw_channel); *(__le32 *)buf = cpu_to_le32(WL_BSS_INFO_MAX);
if (brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSS_INFO,
buf, WL_BSS_INFO_MAX) == 0) {
bi = (struct brcmf_bss_info_le *)(buf + 4);
*chanspec = le16_to_cpu(bi->chanspec);
kfree(buf);
return;
}
kfree(buf);
}
}
/* Use default channel for P2P */
ch.chnum = BRCMF_P2P_TEMP_CHAN;
ch.bw = BRCMU_CHAN_BW_20; ch.bw = BRCMU_CHAN_BW_20;
p2p->cfg->d11inf.encchspec(&ch); p2p->cfg->d11inf.encchspec(&ch);
*chanspec = ch.chspec; *chanspec = ch.chspec;
......
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