diff options
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ani.c | 30 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ani.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_hw.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_hw.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw-ops.h | 16 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 29 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/mac.c | 1 |
7 files changed, 73 insertions, 11 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ani.c b/drivers/net/wireless/ath/ath9k/ani.c index 66d0b8846a0e..28a1dc375171 100644 --- a/drivers/net/wireless/ath/ath9k/ani.c +++ b/drivers/net/wireless/ath/ath9k/ani.c | |||
@@ -17,6 +17,12 @@ | |||
17 | #include "hw.h" | 17 | #include "hw.h" |
18 | #include "hw-ops.h" | 18 | #include "hw-ops.h" |
19 | 19 | ||
20 | /* Private to ani.c */ | ||
21 | static inline void ath9k_hw_ani_lower_immunity(struct ath_hw *ah) | ||
22 | { | ||
23 | ath9k_hw_private_ops(ah)->ani_lower_immunity(ah); | ||
24 | } | ||
25 | |||
20 | static int ath9k_hw_get_ani_channel_idx(struct ath_hw *ah, | 26 | static int ath9k_hw_get_ani_channel_idx(struct ath_hw *ah, |
21 | struct ath9k_channel *chan) | 27 | struct ath9k_channel *chan) |
22 | { | 28 | { |
@@ -206,7 +212,7 @@ static void ath9k_hw_ani_cck_err_trigger(struct ath_hw *ah) | |||
206 | } | 212 | } |
207 | } | 213 | } |
208 | 214 | ||
209 | static void ath9k_hw_ani_lower_immunity(struct ath_hw *ah) | 215 | static void ath9k_hw_ani_lower_immunity_old(struct ath_hw *ah) |
210 | { | 216 | { |
211 | struct ar5416AniState *aniState; | 217 | struct ar5416AniState *aniState; |
212 | int32_t rssi; | 218 | int32_t rssi; |
@@ -316,7 +322,7 @@ static int32_t ath9k_hw_ani_get_listen_time(struct ath_hw *ah) | |||
316 | return listenTime; | 322 | return listenTime; |
317 | } | 323 | } |
318 | 324 | ||
319 | void ath9k_ani_reset(struct ath_hw *ah) | 325 | static void ath9k_ani_reset_old(struct ath_hw *ah) |
320 | { | 326 | { |
321 | struct ar5416AniState *aniState; | 327 | struct ar5416AniState *aniState; |
322 | struct ath9k_channel *chan = ah->curchan; | 328 | struct ath9k_channel *chan = ah->curchan; |
@@ -402,8 +408,8 @@ void ath9k_ani_reset(struct ath_hw *ah) | |||
402 | DISABLE_REGWRITE_BUFFER(ah); | 408 | DISABLE_REGWRITE_BUFFER(ah); |
403 | } | 409 | } |
404 | 410 | ||
405 | void ath9k_hw_ani_monitor(struct ath_hw *ah, | 411 | static void ath9k_hw_ani_monitor_old(struct ath_hw *ah, |
406 | struct ath9k_channel *chan) | 412 | struct ath9k_channel *chan) |
407 | { | 413 | { |
408 | struct ar5416AniState *aniState; | 414 | struct ar5416AniState *aniState; |
409 | struct ath_common *common = ath9k_hw_common(ah); | 415 | struct ath_common *common = ath9k_hw_common(ah); |
@@ -487,7 +493,6 @@ void ath9k_hw_ani_monitor(struct ath_hw *ah, | |||
487 | } | 493 | } |
488 | } | 494 | } |
489 | } | 495 | } |
490 | EXPORT_SYMBOL(ath9k_hw_ani_monitor); | ||
491 | 496 | ||
492 | void ath9k_enable_mib_counters(struct ath_hw *ah) | 497 | void ath9k_enable_mib_counters(struct ath_hw *ah) |
493 | { | 498 | { |
@@ -572,7 +577,7 @@ u32 ath9k_hw_GetMibCycleCountsPct(struct ath_hw *ah, | |||
572 | * any of the MIB counters overflow/trigger so don't assume we're | 577 | * any of the MIB counters overflow/trigger so don't assume we're |
573 | * here because a PHY error counter triggered. | 578 | * here because a PHY error counter triggered. |
574 | */ | 579 | */ |
575 | void ath9k_hw_procmibevent(struct ath_hw *ah) | 580 | static void ath9k_hw_proc_mib_event_old(struct ath_hw *ah) |
576 | { | 581 | { |
577 | u32 phyCnt1, phyCnt2; | 582 | u32 phyCnt1, phyCnt2; |
578 | 583 | ||
@@ -628,7 +633,6 @@ void ath9k_hw_procmibevent(struct ath_hw *ah) | |||
628 | ath9k_ani_restart(ah); | 633 | ath9k_ani_restart(ah); |
629 | } | 634 | } |
630 | } | 635 | } |
631 | EXPORT_SYMBOL(ath9k_hw_procmibevent); | ||
632 | 636 | ||
633 | void ath9k_hw_ani_setup(struct ath_hw *ah) | 637 | void ath9k_hw_ani_setup(struct ath_hw *ah) |
634 | { | 638 | { |
@@ -694,3 +698,15 @@ void ath9k_hw_ani_init(struct ath_hw *ah) | |||
694 | if (ah->config.enable_ani) | 698 | if (ah->config.enable_ani) |
695 | ah->proc_phyerr |= HAL_PROCESS_ANI; | 699 | ah->proc_phyerr |= HAL_PROCESS_ANI; |
696 | } | 700 | } |
701 | |||
702 | void ath9k_hw_attach_ani_ops_old(struct ath_hw *ah) | ||
703 | { | ||
704 | struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah); | ||
705 | struct ath_hw_ops *ops = ath9k_hw_ops(ah); | ||
706 | |||
707 | priv_ops->ani_reset = ath9k_ani_reset_old; | ||
708 | priv_ops->ani_lower_immunity = ath9k_hw_ani_lower_immunity_old; | ||
709 | |||
710 | ops->ani_proc_mib_event = ath9k_hw_proc_mib_event_old; | ||
711 | ops->ani_monitor = ath9k_hw_ani_monitor_old; | ||
712 | } | ||
diff --git a/drivers/net/wireless/ath/ath9k/ani.h b/drivers/net/wireless/ath/ath9k/ani.h index 3356762ea384..4631ab269697 100644 --- a/drivers/net/wireless/ath/ath9k/ani.h +++ b/drivers/net/wireless/ath/ath9k/ani.h | |||
@@ -108,14 +108,10 @@ struct ar5416Stats { | |||
108 | }; | 108 | }; |
109 | #define ah_mibStats stats.ast_mibstats | 109 | #define ah_mibStats stats.ast_mibstats |
110 | 110 | ||
111 | void ath9k_ani_reset(struct ath_hw *ah); | ||
112 | void ath9k_hw_ani_monitor(struct ath_hw *ah, | ||
113 | struct ath9k_channel *chan); | ||
114 | void ath9k_enable_mib_counters(struct ath_hw *ah); | 111 | void ath9k_enable_mib_counters(struct ath_hw *ah); |
115 | void ath9k_hw_disable_mib_counters(struct ath_hw *ah); | 112 | void ath9k_hw_disable_mib_counters(struct ath_hw *ah); |
116 | u32 ath9k_hw_GetMibCycleCountsPct(struct ath_hw *ah, u32 *rxc_pcnt, | 113 | u32 ath9k_hw_GetMibCycleCountsPct(struct ath_hw *ah, u32 *rxc_pcnt, |
117 | u32 *rxf_pcnt, u32 *txf_pcnt); | 114 | u32 *rxf_pcnt, u32 *txf_pcnt); |
118 | void ath9k_hw_procmibevent(struct ath_hw *ah); | ||
119 | void ath9k_hw_ani_setup(struct ath_hw *ah); | 115 | void ath9k_hw_ani_setup(struct ath_hw *ah); |
120 | void ath9k_hw_ani_init(struct ath_hw *ah); | 116 | void ath9k_hw_ani_init(struct ath_hw *ah); |
121 | 117 | ||
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c index 7ba9dd68cc05..917eae02acda 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c | |||
@@ -636,4 +636,6 @@ void ar9002_hw_attach_ops(struct ath_hw *ah) | |||
636 | 636 | ||
637 | ar9002_hw_attach_calib_ops(ah); | 637 | ar9002_hw_attach_calib_ops(ah); |
638 | ar9002_hw_attach_mac_ops(ah); | 638 | ar9002_hw_attach_mac_ops(ah); |
639 | |||
640 | ath9k_hw_attach_ani_ops_old(ah); | ||
639 | } | 641 | } |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c index 863f61e3a16f..b7574704f677 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c | |||
@@ -313,4 +313,6 @@ void ar9003_hw_attach_ops(struct ath_hw *ah) | |||
313 | ar9003_hw_attach_phy_ops(ah); | 313 | ar9003_hw_attach_phy_ops(ah); |
314 | ar9003_hw_attach_calib_ops(ah); | 314 | ar9003_hw_attach_calib_ops(ah); |
315 | ar9003_hw_attach_mac_ops(ah); | 315 | ar9003_hw_attach_mac_ops(ah); |
316 | |||
317 | ath9k_hw_attach_ani_ops_old(ah); | ||
316 | } | 318 | } |
diff --git a/drivers/net/wireless/ath/ath9k/hw-ops.h b/drivers/net/wireless/ath/ath9k/hw-ops.h index 624422a8169e..65d2c661efb0 100644 --- a/drivers/net/wireless/ath/ath9k/hw-ops.h +++ b/drivers/net/wireless/ath/ath9k/hw-ops.h | |||
@@ -128,6 +128,17 @@ static inline void ath9k_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds, | |||
128 | ath9k_hw_ops(ah)->set11n_virtualmorefrag(ah, ds, vmf); | 128 | ath9k_hw_ops(ah)->set11n_virtualmorefrag(ah, ds, vmf); |
129 | } | 129 | } |
130 | 130 | ||
131 | static inline void ath9k_hw_procmibevent(struct ath_hw *ah) | ||
132 | { | ||
133 | ath9k_hw_ops(ah)->ani_proc_mib_event(ah); | ||
134 | } | ||
135 | |||
136 | static inline void ath9k_hw_ani_monitor(struct ath_hw *ah, | ||
137 | struct ath9k_channel *chan) | ||
138 | { | ||
139 | ath9k_hw_ops(ah)->ani_monitor(ah, chan); | ||
140 | } | ||
141 | |||
131 | /* Private hardware call ops */ | 142 | /* Private hardware call ops */ |
132 | 143 | ||
133 | /* PHY ops */ | 144 | /* PHY ops */ |
@@ -277,4 +288,9 @@ static inline bool ath9k_hw_iscal_supported(struct ath_hw *ah, | |||
277 | return ath9k_hw_private_ops(ah)->iscal_supported(ah, calType); | 288 | return ath9k_hw_private_ops(ah)->iscal_supported(ah, calType); |
278 | } | 289 | } |
279 | 290 | ||
291 | static inline void ath9k_ani_reset(struct ath_hw *ah) | ||
292 | { | ||
293 | ath9k_hw_private_ops(ah)->ani_reset(ah); | ||
294 | } | ||
295 | |||
280 | #endif /* ATH9K_HW_OPS_H */ | 296 | #endif /* ATH9K_HW_OPS_H */ |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 3a28cdc19484..a207a70224c0 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -511,6 +511,15 @@ struct ath_gen_timer_table { | |||
511 | * @setup_calibration: set up calibration | 511 | * @setup_calibration: set up calibration |
512 | * @iscal_supported: used to query if a type of calibration is supported | 512 | * @iscal_supported: used to query if a type of calibration is supported |
513 | * @loadnf: load noise floor read from each chain on the CCA registers | 513 | * @loadnf: load noise floor read from each chain on the CCA registers |
514 | * | ||
515 | * @ani_reset: reset ANI parameters to default values | ||
516 | * @ani_lower_immunity: lower the noise immunity level. The level controls | ||
517 | * the power-based packet detection on hardware. If a power jump is | ||
518 | * detected the adapter takes it as an indication that a packet has | ||
519 | * arrived. The level ranges from 0-5. Each level corresponds to a | ||
520 | * few dB more of noise immunity. If you have a strong time-varying | ||
521 | * interference that is causing false detections (OFDM timing errors or | ||
522 | * CCK timing errors) the level can be increased. | ||
514 | */ | 523 | */ |
515 | struct ath_hw_private_ops { | 524 | struct ath_hw_private_ops { |
516 | /* Calibration ops */ | 525 | /* Calibration ops */ |
@@ -554,6 +563,10 @@ struct ath_hw_private_ops { | |||
554 | int param); | 563 | int param); |
555 | void (*do_getnf)(struct ath_hw *ah, int16_t nfarray[NUM_NF_READINGS]); | 564 | void (*do_getnf)(struct ath_hw *ah, int16_t nfarray[NUM_NF_READINGS]); |
556 | void (*loadnf)(struct ath_hw *ah, struct ath9k_channel *chan); | 565 | void (*loadnf)(struct ath_hw *ah, struct ath9k_channel *chan); |
566 | |||
567 | /* ANI */ | ||
568 | void (*ani_reset)(struct ath_hw *ah); | ||
569 | void (*ani_lower_immunity)(struct ath_hw *ah); | ||
557 | }; | 570 | }; |
558 | 571 | ||
559 | /** | 572 | /** |
@@ -564,6 +577,11 @@ struct ath_hw_private_ops { | |||
564 | * | 577 | * |
565 | * @config_pci_powersave: | 578 | * @config_pci_powersave: |
566 | * @calibrate: periodic calibration for NF, ANI, IQ, ADC gain, ADC-DC | 579 | * @calibrate: periodic calibration for NF, ANI, IQ, ADC gain, ADC-DC |
580 | * | ||
581 | * @ani_proc_mib_event: process MIB events, this would happen upon specific ANI | ||
582 | * thresholds being reached or having overflowed. | ||
583 | * @ani_monitor: called periodically by the core driver to collect | ||
584 | * MIB stats and adjust ANI if specific thresholds have been reached. | ||
567 | */ | 585 | */ |
568 | struct ath_hw_ops { | 586 | struct ath_hw_ops { |
569 | void (*config_pci_powersave)(struct ath_hw *ah, | 587 | void (*config_pci_powersave)(struct ath_hw *ah, |
@@ -604,6 +622,9 @@ struct ath_hw_ops { | |||
604 | u32 burstDuration); | 622 | u32 burstDuration); |
605 | void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds, | 623 | void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds, |
606 | u32 vmf); | 624 | u32 vmf); |
625 | |||
626 | void (*ani_proc_mib_event)(struct ath_hw *ah); | ||
627 | void (*ani_monitor)(struct ath_hw *ah, struct ath9k_channel *chan); | ||
607 | }; | 628 | }; |
608 | 629 | ||
609 | struct ath_hw { | 630 | struct ath_hw { |
@@ -934,6 +955,14 @@ void ar9003_hw_attach_calib_ops(struct ath_hw *ah); | |||
934 | void ar9002_hw_attach_ops(struct ath_hw *ah); | 955 | void ar9002_hw_attach_ops(struct ath_hw *ah); |
935 | void ar9003_hw_attach_ops(struct ath_hw *ah); | 956 | void ar9003_hw_attach_ops(struct ath_hw *ah); |
936 | 957 | ||
958 | /* | ||
959 | * ANI work can be shared between all families but a next | ||
960 | * generation implementation of ANI will be used only for AR9003 only | ||
961 | * for now as the other families still need to be tested with the same | ||
962 | * next generation ANI. | ||
963 | */ | ||
964 | void ath9k_hw_attach_ani_ops_old(struct ath_hw *ah); | ||
965 | |||
937 | #define ATH_PCIE_CAP_LINK_CTRL 0x70 | 966 | #define ATH_PCIE_CAP_LINK_CTRL 0x70 |
938 | #define ATH_PCIE_CAP_LINK_L0S 1 | 967 | #define ATH_PCIE_CAP_LINK_L0S 1 |
939 | #define ATH_PCIE_CAP_LINK_L1 2 | 968 | #define ATH_PCIE_CAP_LINK_L1 2 |
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c index 0e425cb4bbb1..b4d01983e7e1 100644 --- a/drivers/net/wireless/ath/ath9k/mac.c +++ b/drivers/net/wireless/ath/ath9k/mac.c | |||
@@ -15,6 +15,7 @@ | |||
15 | */ | 15 | */ |
16 | 16 | ||
17 | #include "hw.h" | 17 | #include "hw.h" |
18 | #include "hw-ops.h" | ||
18 | 19 | ||
19 | static void ath9k_hw_set_txq_interrupts(struct ath_hw *ah, | 20 | static void ath9k_hw_set_txq_interrupts(struct ath_hw *ah, |
20 | struct ath9k_tx_queue_info *qi) | 21 | struct ath9k_tx_queue_info *qi) |