|
@@ -47,6 +47,7 @@
|
|
|
#define IS_P2P_SOCIAL_CHANNEL(channel) ((channel == SOCIAL_CHAN_1) || \
|
|
|
(channel == SOCIAL_CHAN_2) || \
|
|
|
(channel == SOCIAL_CHAN_3))
|
|
|
+#define BRCMF_P2P_TEMP_CHAN SOCIAL_CHAN_3
|
|
|
#define SOCIAL_CHAN_CNT 3
|
|
|
#define AF_PEER_SEARCH_CNT 2
|
|
|
|
|
@@ -2013,17 +2014,30 @@ static void brcmf_p2p_get_current_chanspec(struct brcmf_p2p_info *p2p,
|
|
|
u16 *chanspec)
|
|
|
{
|
|
|
struct brcmf_if *ifp;
|
|
|
- struct brcmf_fil_chan_info_le ci;
|
|
|
+ u8 mac_addr[ETH_ALEN];
|
|
|
struct brcmu_chan ch;
|
|
|
- s32 err;
|
|
|
+ struct brcmf_bss_info_le *bi;
|
|
|
+ u8 *buf;
|
|
|
|
|
|
ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp;
|
|
|
|
|
|
- ch.chnum = 11;
|
|
|
-
|
|
|
- err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_CHANNEL, &ci, sizeof(ci));
|
|
|
- if (!err)
|
|
|
- ch.chnum = le32_to_cpu(ci.hw_channel);
|
|
|
+ if (brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSSID, mac_addr,
|
|
|
+ ETH_ALEN) == 0) {
|
|
|
+ buf = kzalloc(WL_BSS_INFO_MAX, GFP_KERNEL);
|
|
|
+ if (buf != NULL) {
|
|
|
+ *(__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;
|
|
|
p2p->cfg->d11inf.encchspec(&ch);
|
|
|
*chanspec = ch.chspec;
|