diff --git a/drivers/net/wireless/bcmdhd/dhd_pno.c b/drivers/net/wireless/bcmdhd/dhd_pno.c index adca6843b415c7a9d0776e1bb8cb85d385ca4210..33c570045167431d99abe5d3b10a3b36c8b6678c 100644 --- a/drivers/net/wireless/bcmdhd/dhd_pno.c +++ b/drivers/net/wireless/bcmdhd/dhd_pno.c @@ -2088,7 +2088,7 @@ static int dhd_pno_set_for_gscan(dhd_pub_t *dhd, struct dhd_pno_gscan_params *gscan_params) { int err = BCME_OK; - int mode, i = 0, k; + int mode, i = 0; uint16 _chan_list[WL_NUMCHANNELS]; int tot_nchan = 0; int num_buckets_to_fw, tot_num_buckets, gscan_param_size; @@ -2202,20 +2202,17 @@ dhd_pno_set_for_gscan(dhd_pub_t *dhd, struct dhd_pno_gscan_params *gscan_params) pfn_gscan_cfg_t->count_of_channel_buckets = num_buckets_to_fw; pfn_gscan_cfg_t->retry_threshold = GSCAN_RETRY_THRESHOLD; - for (i = 0, k = 0; i < tot_num_buckets; i++) { - if (ch_bucket[i].bucket_end_index != CHANNEL_BUCKET_EMPTY_INDEX) { - pfn_gscan_cfg_t->channel_bucket[k].bucket_end_index = - ch_bucket[i].bucket_end_index; - pfn_gscan_cfg_t->channel_bucket[k].bucket_freq_multiple = - ch_bucket[i].bucket_freq_multiple; - pfn_gscan_cfg_t->channel_bucket[k].max_freq_multiple = - ch_bucket[i].max_freq_multiple; - pfn_gscan_cfg_t->channel_bucket[k].repeat = - ch_bucket[i].repeat; - pfn_gscan_cfg_t->channel_bucket[k].flag = - ch_bucket[i].flag; - k++; - } + for (i = 0; i < num_buckets_to_fw; i++) { + pfn_gscan_cfg_t->channel_bucket[i].bucket_end_index = + ch_bucket[i].bucket_end_index; + pfn_gscan_cfg_t->channel_bucket[i].bucket_freq_multiple = + ch_bucket[i].bucket_freq_multiple; + pfn_gscan_cfg_t->channel_bucket[i].max_freq_multiple = + ch_bucket[i].max_freq_multiple; + pfn_gscan_cfg_t->channel_bucket[i].repeat = + ch_bucket[i].repeat; + pfn_gscan_cfg_t->channel_bucket[i].flag = + ch_bucket[i].flag; } tot_nchan = pfn_gscan_cfg_t->channel_bucket[num_buckets_to_fw - 1].bucket_end_index + 1; @@ -2736,7 +2733,7 @@ static int _dhd_pno_get_gscan_batch_from_fw(dhd_pub_t *dhd) /* Unlikely to happen, but just in case the results from * FW doesnt make sense..... Assume its part of one single scan */ - if (num_scans_in_cur_iter > gscan_params->mscan) { + if (num_scans_in_cur_iter >= gscan_params->mscan) { num_scans_in_cur_iter = 0; count = plbestnet->count; break; @@ -2748,8 +2745,10 @@ static int _dhd_pno_get_gscan_batch_from_fw(dhd_pub_t *dhd) } timestamp = plnetinfo->timestamp; } - nAPs_per_scan[num_scans_in_cur_iter] = count; - num_scans_in_cur_iter++; + if (num_scans_in_cur_iter < gscan_params->mscan) { + nAPs_per_scan[num_scans_in_cur_iter] = count; + num_scans_in_cur_iter++; + } DHD_PNO(("num_scans_in_cur_iter %d\n", num_scans_in_cur_iter)); plnetinfo = &plbestnet->netinfo[0];