|
@@ -1113,6 +1113,37 @@ static void ar9003_hw_ani_cache_ini_regs(struct ath_hw *ah)
|
|
|
aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
|
|
|
}
|
|
|
|
|
|
+static void ar9003_hw_set_radar_params(struct ath_hw *ah,
|
|
|
+ struct ath_hw_radar_conf *conf)
|
|
|
+{
|
|
|
+ u32 radar_0 = 0, radar_1 = 0;
|
|
|
+
|
|
|
+ if (!conf) {
|
|
|
+ REG_CLR_BIT(ah, AR_PHY_RADAR_0, AR_PHY_RADAR_0_ENA);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ radar_0 |= AR_PHY_RADAR_0_ENA | AR_PHY_RADAR_0_FFT_ENA;
|
|
|
+ radar_0 |= SM(conf->fir_power, AR_PHY_RADAR_0_FIRPWR);
|
|
|
+ radar_0 |= SM(conf->radar_rssi, AR_PHY_RADAR_0_RRSSI);
|
|
|
+ radar_0 |= SM(conf->pulse_height, AR_PHY_RADAR_0_HEIGHT);
|
|
|
+ radar_0 |= SM(conf->pulse_rssi, AR_PHY_RADAR_0_PRSSI);
|
|
|
+ radar_0 |= SM(conf->pulse_inband, AR_PHY_RADAR_0_INBAND);
|
|
|
+
|
|
|
+ radar_1 |= AR_PHY_RADAR_1_MAX_RRSSI;
|
|
|
+ radar_1 |= AR_PHY_RADAR_1_BLOCK_CHECK;
|
|
|
+ radar_1 |= SM(conf->pulse_maxlen, AR_PHY_RADAR_1_MAXLEN);
|
|
|
+ radar_1 |= SM(conf->pulse_inband_step, AR_PHY_RADAR_1_RELSTEP_THRESH);
|
|
|
+ radar_1 |= SM(conf->radar_inband, AR_PHY_RADAR_1_RELPWR_THRESH);
|
|
|
+
|
|
|
+ REG_WRITE(ah, AR_PHY_RADAR_0, radar_0);
|
|
|
+ REG_WRITE(ah, AR_PHY_RADAR_1, radar_1);
|
|
|
+ if (conf->ext_channel)
|
|
|
+ REG_SET_BIT(ah, AR_PHY_RADAR_EXT, AR_PHY_RADAR_EXT_ENA);
|
|
|
+ else
|
|
|
+ REG_CLR_BIT(ah, AR_PHY_RADAR_EXT, AR_PHY_RADAR_EXT_ENA);
|
|
|
+}
|
|
|
+
|
|
|
void ar9003_hw_attach_phy_ops(struct ath_hw *ah)
|
|
|
{
|
|
|
struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
|
|
@@ -1141,6 +1172,7 @@ void ar9003_hw_attach_phy_ops(struct ath_hw *ah)
|
|
|
priv_ops->ani_control = ar9003_hw_ani_control;
|
|
|
priv_ops->do_getnf = ar9003_hw_do_getnf;
|
|
|
priv_ops->ani_cache_ini_regs = ar9003_hw_ani_cache_ini_regs;
|
|
|
+ priv_ops->set_radar_params = ar9003_hw_set_radar_params;
|
|
|
|
|
|
ar9003_hw_set_nf_limits(ah);
|
|
|
memcpy(ah->nf_regs, ar9300_cca_regs, sizeof(ah->nf_regs));
|