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
        }
 
        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];