summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2011-07-21 14:16:42 +0000
committeradrian <adrian@FreeBSD.org>2011-07-21 14:16:42 +0000
commitd54d0f83bc4c56dc528afad78cb1f337073490e9 (patch)
tree5875765f87a53ccac8c2cbd864d0bbcbba61c01a
parent062c2f0752ba33071432c160cb4bcef98d877452 (diff)
downloadFreeBSD-src-d54d0f83bc4c56dc528afad78cb1f337073490e9.zip
FreeBSD-src-d54d0f83bc4c56dc528afad78cb1f337073490e9.tar.gz
Modify the radar API a little to be easier to "change" via run-time
tools. * introduce pe_enabled, which (will) indicate whether the radar detection stuff is enabled or not. Right now it's incorrectly set, based on something previously written. I'll sort it out later. * Don't set HAL_PHYERR_PARAM_ENABLE in pe_relstep to say whether radar detection is on. * Return whether blockradar, fir128 and enmaxrssi is enabled. * Change some of the phyerr params to be integers rather than HAL_BOOL so they can be set to the NOPARAM value when the setup function is called. This is in line with other radar parameters. * Add new configuration parameters for fir128, blockradar and enmaxrssi, rather than defaulting to off, on and on respectively. Approved by: re (kib)
-rw-r--r--sys/dev/ath/ath_hal/ah.h9
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_misc.c32
2 files changed, 32 insertions, 9 deletions
diff --git a/sys/dev/ath/ath_hal/ah.h b/sys/dev/ath/ath_hal/ah.h
index f81e6aa..cbf9d16 100644
--- a/sys/dev/ath/ath_hal/ah.h
+++ b/sys/dev/ath/ath_hal/ah.h
@@ -718,17 +718,18 @@ typedef struct {
u_int32_t pe_relpwr; /* Relative power threshold in 0.5dB steps */
u_int32_t pe_relstep; /* Pulse Relative step threshold in 0.5dB steps */
u_int32_t pe_maxlen; /* Max length of radar sign in 0.8us units */
- HAL_BOOL pe_usefir128; /* Use the average in-band power measured over 128 cycles */
- HAL_BOOL pe_blockradar; /*
+ int32_t pe_usefir128; /* Use the average in-band power measured over 128 cycles */
+ int32_t pe_blockradar; /*
* Enable to block radar check if pkt detect is done via OFDM
* weak signal detect or pkt is detected immediately after tx
* to rx transition
*/
- HAL_BOOL pe_enmaxrssi; /*
+ int32_t pe_enmaxrssi; /*
* Enable to use the max rssi instead of the last rssi during
* fine gain changes for radar detection
*/
- HAL_BOOL pe_extchannel; /* Enable DFS on ext channel */
+ int32_t pe_extchannel; /* Enable DFS on ext channel */
+ int32_t pe_enabled; /* Whether radar detection is enabled */
} HAL_PHYERR_PARAM;
#define HAL_PHYERR_PARAM_NOVAL 65535
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c b/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
index 6266b58..e44fd9f 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
@@ -617,10 +617,20 @@ ar5416GetDfsThresh(struct ath_hal *ah, HAL_PHYERR_PARAM *pe)
temp = val & AR_PHY_RADAR_1_RELSTEP_CHECK;
pe->pe_relstep = MS(val, AR_PHY_RADAR_1_RELSTEP_THRESH);
if (temp)
- pe->pe_relstep |= HAL_PHYERR_PARAM_ENABLE;
+ pe->pe_enabled = 1;
+ else
+ pe->pe_enabled = 0;
+
pe->pe_maxlen = MS(val, AR_PHY_RADAR_1_MAXLEN);
pe->pe_extchannel = !! (OS_REG_READ(ah, AR_PHY_RADAR_EXT) &
AR_PHY_RADAR_EXT_ENA);
+
+ pe->pe_usefir128 = !! (OS_REG_READ(ah, AR_PHY_RADAR_1) &
+ AR_PHY_RADAR_1_USE_FIR128);
+ pe->pe_blockradar = !! (OS_REG_READ(ah, AR_PHY_RADAR_1) &
+ AR_PHY_RADAR_1_BLOCK_CHECK);
+ pe->pe_enmaxrssi = !! (OS_REG_READ(ah, AR_PHY_RADAR_1) &
+ AR_PHY_RADAR_1_MAX_RRSSI);
}
/*
@@ -660,8 +670,20 @@ ar5416EnableDfs(struct ath_hal *ah, HAL_PHYERR_PARAM *pe)
OS_REG_WRITE(ah, AR_PHY_RADAR_0, val | AR_PHY_RADAR_0_ENA);
- val = OS_REG_READ(ah, AR_PHY_RADAR_1);
- val |= (AR_PHY_RADAR_1_MAX_RRSSI | AR_PHY_RADAR_1_BLOCK_CHECK);
+ if (pe->pe_usefir128 == 0)
+ OS_REG_SET_BIT(ah, AR_PHY_RADAR_1, AR_PHY_RADAR_1_USE_FIR128);
+ else if (pe->pe_usefir128 == 1)
+ OS_REG_CLR_BIT(ah, AR_PHY_RADAR_1, AR_PHY_RADAR_1_USE_FIR128);
+
+ if (pe->pe_enmaxrssi == 0)
+ OS_REG_SET_BIT(ah, AR_PHY_RADAR_1, AR_PHY_RADAR_1_MAX_RRSSI);
+ else if (pe->pe_enmaxrssi == 1)
+ OS_REG_CLR_BIT(ah, AR_PHY_RADAR_1, AR_PHY_RADAR_1_MAX_RRSSI);
+
+ if (pe->pe_blockradar == 0)
+ OS_REG_SET_BIT(ah, AR_PHY_RADAR_1, AR_PHY_RADAR_1_BLOCK_CHECK);
+ else if (pe->pe_blockradar == 1)
+ OS_REG_CLR_BIT(ah, AR_PHY_RADAR_1, AR_PHY_RADAR_1_BLOCK_CHECK);
if (pe->pe_maxlen != HAL_PHYERR_PARAM_NOVAL) {
val &= ~AR_PHY_RADAR_1_MAXLEN;
@@ -674,9 +696,9 @@ ar5416EnableDfs(struct ath_hal *ah, HAL_PHYERR_PARAM *pe)
* it should check the channel is HT/40 and HAL_CAP_EXT_CHAN_DFS
* is available.
*/
- if (pe->pe_extchannel)
+ if (pe->pe_extchannel == 1)
OS_REG_SET_BIT(ah, AR_PHY_RADAR_EXT, AR_PHY_RADAR_EXT_ENA);
- else
+ else if (pe->pe_extchannel == 0)
OS_REG_CLR_BIT(ah, AR_PHY_RADAR_EXT, AR_PHY_RADAR_EXT_ENA);
if (pe->pe_relstep != HAL_PHYERR_PARAM_NOVAL) {
OpenPOWER on IntegriCloud