Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53e3a80d authored by Arend Van Spriel's avatar Arend Van Spriel Committed by Kalle Valo
Browse files

brcmfmac: fix scheduled scan result handling for newer chips



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: default avatarHante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: default avatarFranky Lin <franky.lin@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent c6989fd5
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -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
@@ -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];
+7 −0
Original line number Diff line number Diff line
@@ -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.
 *