From 88486ab463a9d89283f66302ba314ee6c77e4cc5 Mon Sep 17 00:00:00 2001 From: bings Date: Wed, 10 Jan 2018 10:16:48 +0800 Subject: [PATCH] qcacmn: Fix delta peak number counting for DFS Every time when dfs_count_the_other_delay_elements is called, delta_peak_match_count is set to 1, which is not correct. delta_peak_match_count should be initialized once like numpulses in dfs_bin_pri_check. Change-Id: I9cf432cbe7b0ddb42a0c33adcbef07d0c48f42f8 CRs-Fixed: 2165538 --- umac/dfs/core/src/filtering/dfs_bindetects.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/umac/dfs/core/src/filtering/dfs_bindetects.c b/umac/dfs/core/src/filtering/dfs_bindetects.c index ccf098aac9..8750858a59 100644 --- a/umac/dfs/core/src/filtering/dfs_bindetects.c +++ b/umac/dfs/core/src/filtering/dfs_bindetects.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. * Copyright (c) 2002-2010, Atheros Communications Inc. * * Permission to use, copy, modify, and/or distribute this software for any @@ -760,6 +760,7 @@ static inline void dfs_check_pulses_for_delta_variance( * @primargin: Primary margin. * @durmargin: Duration margin. * @numpulses: Number of pulses. + * @delta_peak_match_count: Pointer to delta_peak_match_count. * @prev_good_timestamp: Previous good timestamp. * @fundamentalpri: Highest PRI. */ @@ -773,6 +774,7 @@ static void dfs_count_the_other_delay_elements( uint32_t primargin, uint32_t durmargin, int *numpulses, + uint8_t *delta_peak_match_count, uint32_t *prev_good_timestamp, int fundamentalpri) { @@ -782,7 +784,6 @@ static void dfs_count_the_other_delay_elements( int dindex, primatch, numpulsetochk = 2; int32_t sidx_min = DFS_BIG_SIDX; int32_t sidx_max = -DFS_BIG_SIDX; - uint8_t delta_peak_match_count = 1; delayindex = (dl->dl_firstelem + i) & DFS_MAX_DL_MASK; searchpri = dl->dl_elems[delayindex].de_time; @@ -820,7 +821,7 @@ static void dfs_count_the_other_delay_elements( dl->dl_elems[delayindex].de_seq_num; dfs_update_min_and_max_sidx(dl, delayindex, &sidx_min, &sidx_max, - &delta_peak_match_count, + delta_peak_match_count, rf); (*numpulses)++; } else { @@ -840,19 +841,19 @@ static void dfs_count_the_other_delay_elements( delta_time_stamps, fundamentalpri, primargin, numpulses, delayindex, &sidx_min, &sidx_max, - &delta_peak_match_count, + delta_peak_match_count, dl); } *prev_good_timestamp = dl->dl_elems[delayindex].de_ts; dl->dl_search_pri = searchpri; dl->dl_min_sidx = sidx_min; dl->dl_max_sidx = sidx_max; - dl->dl_delta_peak_match_count = delta_peak_match_count; + dl->dl_delta_peak_match_count = *delta_peak_match_count; dfs_debug(dfs, WLAN_DEBUG_DFS2, - "rf->minpri=%d rf->maxpri=%d searchpri = %d index = %d numpulses = %d deltapri=%d j=%d", - rf->rf_minpri, rf->rf_maxpri, searchpri, - i, *numpulses, deltapri, j); + "rf->minpri=%d rf->maxpri=%d searchpri = %d index = %d numpulses = %d delta peak match count = %d deltapri=%d j=%d", + rf->rf_minpri, rf->rf_maxpri, searchpri, i, + *numpulses, *delta_peak_match_count, deltapri, j); } } @@ -877,6 +878,7 @@ int dfs_bin_pri_check( * maxfilterlen. */ int numpulses = 1; + uint8_t delta_peak_match_count = 1; int priscorechk = 1; /* Use the adjusted PRI margin to reduce false alarms @@ -937,6 +939,7 @@ int dfs_bin_pri_check( for (i = 0; i < dl->dl_numelems; i++) dfs_count_the_other_delay_elements(dfs, rf, dl, i, refpri, refdur, primargin, durmargin, &numpulses, + &delta_peak_match_count, &prev_good_timestamp, fundamentalpri); return numpulses;