Skip to content

Commit

Permalink
brcmfmac: fix scheduled scan result handling for newer chips
Browse files Browse the repository at this point in the history
The scan results for scheduled scan as retrieved from the device
have changed. A field has been added which is not needed. However,
the appended info is. Luckily they are versioned so check that to
find out the location of the appended data.

Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  • Loading branch information
Arend Van Spriel authored and Kalle Valo committed Nov 29, 2016
1 parent c6989fd commit 53e3a80
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
24 changes: 23 additions & 1 deletion drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -3257,6 +3257,28 @@ static int brcmf_start_internal_escan(struct brcmf_if *ifp,
return 0;
}

static struct brcmf_pno_net_info_le *
brcmf_get_netinfo_array(struct brcmf_pno_scanresults_le *pfn_v1)
{
struct brcmf_pno_scanresults_v2_le *pfn_v2;
struct brcmf_pno_net_info_le *netinfo;

switch (pfn_v1->version) {
default:
WARN_ON(1);
/* fall-thru */
case cpu_to_le32(1):
netinfo = (struct brcmf_pno_net_info_le *)(pfn_v1 + 1);
break;
case cpu_to_le32(2):
pfn_v2 = (struct brcmf_pno_scanresults_v2_le *)pfn_v1;
netinfo = (struct brcmf_pno_net_info_le *)(pfn_v2 + 1);
break;
}

return netinfo;
}

/* PFN result doesn't have all the info which are required by the supplicant
* (For e.g IEs) Do a target Escan so that sched scan results are reported
* via wl_inform_single_bss in the required format. Escan does require the
Expand Down Expand Up @@ -3309,7 +3331,7 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
}

data += sizeof(struct brcmf_pno_scanresults_le);
netinfo_start = (struct brcmf_pno_net_info_le *)data;
netinfo_start = brcmf_get_netinfo_array(pfn_result);

for (i = 0; i < result_count; i++) {
netinfo = &netinfo_start[i];
Expand Down
7 changes: 7 additions & 0 deletions drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,13 @@ struct brcmf_pno_scanresults_le {
__le32 count;
};

struct brcmf_pno_scanresults_v2_le {
__le32 version;
__le32 status;
__le32 count;
__le32 scan_ch_bucket;
};

/**
* struct brcmf_pno_macaddr_le - to configure PNO macaddr randomization.
*
Expand Down

0 comments on commit 53e3a80

Please sign in to comment.