diff options
author | David S. Miller <davem@davemloft.net> | 2010-11-29 14:19:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-11-29 14:19:09 -0500 |
commit | 77148625e10d0fda50d05e92d199c0df17b66e9a (patch) | |
tree | fdb5bb1e06933dc8891a3c4d3c93c371801d8b37 /drivers/net/wireless/ath/ath9k/ar5008_phy.c | |
parent | a41778694806ac1ccd4b1dafed1abef8d5ba98ac (diff) | |
parent | 51cce8a590c4696d62bfacc63378d1036084cef7 (diff) |
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar5008_phy.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar5008_phy.c | 79 |
1 files changed, 64 insertions, 15 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c index c83a22cfbe1e..06e34d293dc8 100644 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c | |||
@@ -244,13 +244,15 @@ static void ar5008_hw_spur_mitigate(struct ath_hw *ah, | |||
244 | int upper, lower, cur_vit_mask; | 244 | int upper, lower, cur_vit_mask; |
245 | int tmp, new; | 245 | int tmp, new; |
246 | int i; | 246 | int i; |
247 | int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8, | 247 | static int pilot_mask_reg[4] = { |
248 | AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60 | 248 | AR_PHY_TIMING7, AR_PHY_TIMING8, |
249 | AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60 | ||
249 | }; | 250 | }; |
250 | int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10, | 251 | static int chan_mask_reg[4] = { |
251 | AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60 | 252 | AR_PHY_TIMING9, AR_PHY_TIMING10, |
253 | AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60 | ||
252 | }; | 254 | }; |
253 | int inc[4] = { 0, 100, 0, 0 }; | 255 | static int inc[4] = { 0, 100, 0, 0 }; |
254 | 256 | ||
255 | int8_t mask_m[123]; | 257 | int8_t mask_m[123]; |
256 | int8_t mask_p[123]; | 258 | int8_t mask_p[123]; |
@@ -1084,12 +1086,12 @@ static bool ar5008_hw_ani_control_old(struct ath_hw *ah, | |||
1084 | break; | 1086 | break; |
1085 | } | 1087 | } |
1086 | case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{ | 1088 | case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{ |
1087 | const int m1ThreshLow[] = { 127, 50 }; | 1089 | static const int m1ThreshLow[] = { 127, 50 }; |
1088 | const int m2ThreshLow[] = { 127, 40 }; | 1090 | static const int m2ThreshLow[] = { 127, 40 }; |
1089 | const int m1Thresh[] = { 127, 0x4d }; | 1091 | static const int m1Thresh[] = { 127, 0x4d }; |
1090 | const int m2Thresh[] = { 127, 0x40 }; | 1092 | static const int m2Thresh[] = { 127, 0x40 }; |
1091 | const int m2CountThr[] = { 31, 16 }; | 1093 | static const int m2CountThr[] = { 31, 16 }; |
1092 | const int m2CountThrLow[] = { 63, 48 }; | 1094 | static const int m2CountThrLow[] = { 63, 48 }; |
1093 | u32 on = param ? 1 : 0; | 1095 | u32 on = param ? 1 : 0; |
1094 | 1096 | ||
1095 | REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, | 1097 | REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, |
@@ -1141,7 +1143,7 @@ static bool ar5008_hw_ani_control_old(struct ath_hw *ah, | |||
1141 | break; | 1143 | break; |
1142 | } | 1144 | } |
1143 | case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{ | 1145 | case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{ |
1144 | const int weakSigThrCck[] = { 8, 6 }; | 1146 | static const int weakSigThrCck[] = { 8, 6 }; |
1145 | u32 high = param ? 1 : 0; | 1147 | u32 high = param ? 1 : 0; |
1146 | 1148 | ||
1147 | REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT, | 1149 | REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT, |
@@ -1157,7 +1159,7 @@ static bool ar5008_hw_ani_control_old(struct ath_hw *ah, | |||
1157 | break; | 1159 | break; |
1158 | } | 1160 | } |
1159 | case ATH9K_ANI_FIRSTEP_LEVEL:{ | 1161 | case ATH9K_ANI_FIRSTEP_LEVEL:{ |
1160 | const int firstep[] = { 0, 4, 8 }; | 1162 | static const int firstep[] = { 0, 4, 8 }; |
1161 | u32 level = param; | 1163 | u32 level = param; |
1162 | 1164 | ||
1163 | if (level >= ARRAY_SIZE(firstep)) { | 1165 | if (level >= ARRAY_SIZE(firstep)) { |
@@ -1178,7 +1180,7 @@ static bool ar5008_hw_ani_control_old(struct ath_hw *ah, | |||
1178 | break; | 1180 | break; |
1179 | } | 1181 | } |
1180 | case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{ | 1182 | case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{ |
1181 | const int cycpwrThr1[] = { 2, 4, 6, 8, 10, 12, 14, 16 }; | 1183 | static const int cycpwrThr1[] = { 2, 4, 6, 8, 10, 12, 14, 16 }; |
1182 | u32 level = param; | 1184 | u32 level = param; |
1183 | 1185 | ||
1184 | if (level >= ARRAY_SIZE(cycpwrThr1)) { | 1186 | if (level >= ARRAY_SIZE(cycpwrThr1)) { |
@@ -1579,10 +1581,55 @@ static void ar5008_hw_set_nf_limits(struct ath_hw *ah) | |||
1579 | ah->nf_5g.nominal = AR_PHY_CCA_NOM_VAL_5416_5GHZ; | 1581 | ah->nf_5g.nominal = AR_PHY_CCA_NOM_VAL_5416_5GHZ; |
1580 | } | 1582 | } |
1581 | 1583 | ||
1584 | static void ar5008_hw_set_radar_params(struct ath_hw *ah, | ||
1585 | struct ath_hw_radar_conf *conf) | ||
1586 | { | ||
1587 | u32 radar_0 = 0, radar_1 = 0; | ||
1588 | |||
1589 | if (!conf) { | ||
1590 | REG_CLR_BIT(ah, AR_PHY_RADAR_0, AR_PHY_RADAR_0_ENA); | ||
1591 | return; | ||
1592 | } | ||
1593 | |||
1594 | radar_0 |= AR_PHY_RADAR_0_ENA | AR_PHY_RADAR_0_FFT_ENA; | ||
1595 | radar_0 |= SM(conf->fir_power, AR_PHY_RADAR_0_FIRPWR); | ||
1596 | radar_0 |= SM(conf->radar_rssi, AR_PHY_RADAR_0_RRSSI); | ||
1597 | radar_0 |= SM(conf->pulse_height, AR_PHY_RADAR_0_HEIGHT); | ||
1598 | radar_0 |= SM(conf->pulse_rssi, AR_PHY_RADAR_0_PRSSI); | ||
1599 | radar_0 |= SM(conf->pulse_inband, AR_PHY_RADAR_0_INBAND); | ||
1600 | |||
1601 | radar_1 |= AR_PHY_RADAR_1_MAX_RRSSI; | ||
1602 | radar_1 |= AR_PHY_RADAR_1_BLOCK_CHECK; | ||
1603 | radar_1 |= SM(conf->pulse_maxlen, AR_PHY_RADAR_1_MAXLEN); | ||
1604 | radar_1 |= SM(conf->pulse_inband_step, AR_PHY_RADAR_1_RELSTEP_THRESH); | ||
1605 | radar_1 |= SM(conf->radar_inband, AR_PHY_RADAR_1_RELPWR_THRESH); | ||
1606 | |||
1607 | REG_WRITE(ah, AR_PHY_RADAR_0, radar_0); | ||
1608 | REG_WRITE(ah, AR_PHY_RADAR_1, radar_1); | ||
1609 | if (conf->ext_channel) | ||
1610 | REG_SET_BIT(ah, AR_PHY_RADAR_EXT, AR_PHY_RADAR_EXT_ENA); | ||
1611 | else | ||
1612 | REG_CLR_BIT(ah, AR_PHY_RADAR_EXT, AR_PHY_RADAR_EXT_ENA); | ||
1613 | } | ||
1614 | |||
1615 | static void ar5008_hw_set_radar_conf(struct ath_hw *ah) | ||
1616 | { | ||
1617 | struct ath_hw_radar_conf *conf = &ah->radar_conf; | ||
1618 | |||
1619 | conf->fir_power = -33; | ||
1620 | conf->radar_rssi = 20; | ||
1621 | conf->pulse_height = 10; | ||
1622 | conf->pulse_rssi = 24; | ||
1623 | conf->pulse_inband = 15; | ||
1624 | conf->pulse_maxlen = 255; | ||
1625 | conf->pulse_inband_step = 12; | ||
1626 | conf->radar_inband = 8; | ||
1627 | } | ||
1628 | |||
1582 | void ar5008_hw_attach_phy_ops(struct ath_hw *ah) | 1629 | void ar5008_hw_attach_phy_ops(struct ath_hw *ah) |
1583 | { | 1630 | { |
1584 | struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah); | 1631 | struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah); |
1585 | const u32 ar5416_cca_regs[6] = { | 1632 | static const u32 ar5416_cca_regs[6] = { |
1586 | AR_PHY_CCA, | 1633 | AR_PHY_CCA, |
1587 | AR_PHY_CH1_CCA, | 1634 | AR_PHY_CH1_CCA, |
1588 | AR_PHY_CH2_CCA, | 1635 | AR_PHY_CH2_CCA, |
@@ -1609,6 +1656,7 @@ void ar5008_hw_attach_phy_ops(struct ath_hw *ah) | |||
1609 | priv_ops->restore_chainmask = ar5008_restore_chainmask; | 1656 | priv_ops->restore_chainmask = ar5008_restore_chainmask; |
1610 | priv_ops->set_diversity = ar5008_set_diversity; | 1657 | priv_ops->set_diversity = ar5008_set_diversity; |
1611 | priv_ops->do_getnf = ar5008_hw_do_getnf; | 1658 | priv_ops->do_getnf = ar5008_hw_do_getnf; |
1659 | priv_ops->set_radar_params = ar5008_hw_set_radar_params; | ||
1612 | 1660 | ||
1613 | if (modparam_force_new_ani) { | 1661 | if (modparam_force_new_ani) { |
1614 | priv_ops->ani_control = ar5008_hw_ani_control_new; | 1662 | priv_ops->ani_control = ar5008_hw_ani_control_new; |
@@ -1624,5 +1672,6 @@ void ar5008_hw_attach_phy_ops(struct ath_hw *ah) | |||
1624 | priv_ops->compute_pll_control = ar5008_hw_compute_pll_control; | 1672 | priv_ops->compute_pll_control = ar5008_hw_compute_pll_control; |
1625 | 1673 | ||
1626 | ar5008_hw_set_nf_limits(ah); | 1674 | ar5008_hw_set_nf_limits(ah); |
1675 | ar5008_hw_set_radar_conf(ah); | ||
1627 | memcpy(ah->nf_regs, ar5416_cca_regs, sizeof(ah->nf_regs)); | 1676 | memcpy(ah->nf_regs, ar5416_cca_regs, sizeof(ah->nf_regs)); |
1628 | } | 1677 | } |