Skip to content

Commit

Permalink
ath: use PRI value given by spec for fixed PRI
Browse files Browse the repository at this point in the history
PRI value is used as divider when DFS detector analyzes candidate
radar pulses.
If PRI deviation is big from its origin PRI, DFS detector could miss
valid radar reports since HW often misses detecting radar pulses and
causes long interval value of pulses.

For instance from practical results, if runtime PRI is calculated as
1431 for fixed PRI value of 1428 and delta timestamp logs 15719,
the modular remainder will be 1409 and the delta between the remainder
and runtime PRI is 22 that is bigger than PRI tolerance which is 16.
As a result this radar report will be ignored even though it's valid.

By using spec defined PRI for fixed PRI, we can correct this error.

Signed-off-by: Peter Oh <poh@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
  • Loading branch information
Peter Oh authored and Kalle Valo committed Sep 27, 2015
1 parent b0b2522 commit 44acedb
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 7 deletions.
6 changes: 0 additions & 6 deletions drivers/net/wireless/ath/dfs_pattern_detector.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,6 @@
#include "dfs_pri_detector.h"
#include "ath.h"

/*
* tolerated deviation of radar time stamp in usecs on both sides
* TODO: this might need to be HW-dependent
*/
#define PRI_TOLERANCE 16

/**
* struct radar_types - contains array of patterns defined for one DFS domain
* @domain: DFS regulatory domain
Expand Down
5 changes: 5 additions & 0 deletions drivers/net/wireless/ath/dfs_pattern_detector.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@
#include <linux/list.h>
#include <linux/nl80211.h>

/* tolerated deviation of radar time stamp in usecs on both sides
* TODO: this might need to be HW-dependent
*/
#define PRI_TOLERANCE 16

/**
* struct ath_dfs_pool_stats - DFS Statistics for global pools
*/
Expand Down
6 changes: 5 additions & 1 deletion drivers/net/wireless/ath/dfs_pri_detector.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ struct ath_dfs_pool_stats global_dfs_pool_stats = {};

#define DFS_POOL_STAT_INC(c) (global_dfs_pool_stats.c++)
#define DFS_POOL_STAT_DEC(c) (global_dfs_pool_stats.c--)
#define GET_PRI_TO_USE(MIN, MAX, RUNTIME) \
(MIN + PRI_TOLERANCE == MAX - PRI_TOLERANCE ? \
MIN + PRI_TOLERANCE : RUNTIME)

/**
* struct pulse_elem - elements in pulse queue
Expand Down Expand Up @@ -243,7 +246,8 @@ static bool pseq_handler_create_sequences(struct pri_detector *pde,
ps.count_falses = 0;
ps.first_ts = p->ts;
ps.last_ts = ts;
ps.pri = ts - p->ts;
ps.pri = GET_PRI_TO_USE(pde->rs->pri_min,
pde->rs->pri_max, ts - p->ts);
ps.dur = ps.pri * (pde->rs->ppb - 1)
+ 2 * pde->rs->max_pri_tolerance;

Expand Down

0 comments on commit 44acedb

Please sign in to comment.