ath9k: separate core driver and hw timer code
authorLuis R. Rodriguez <lrodriguez@atheros.com>
Sun, 13 Sep 2009 09:08:34 +0000 (02:08 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 7 Oct 2009 20:39:28 +0000 (16:39 -0400)
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/hw.c
drivers/net/wireless/ath/ath9k/hw.h
drivers/net/wireless/ath/ath9k/main.c

index 177244b2b6b9867696e06386976b60101c316b63..e6ca3158759bde409d6c750790bd8409f20e1bc8 100644 (file)
@@ -4136,9 +4136,10 @@ struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
        return timer;
 }
 
-void ath_gen_timer_start(struct ath_hw *ah,
-                        struct ath_gen_timer *timer,
-                        u32 timer_next, u32 timer_period)
+void ath9k_hw_gen_timer_start(struct ath_hw *ah,
+                             struct ath_gen_timer *timer,
+                             u32 timer_next,
+                             u32 timer_period)
 {
        struct ath_gen_timer_table *timer_table = &ah->hw_gen_timers;
        u32 tsf;
@@ -4173,15 +4174,9 @@ void ath_gen_timer_start(struct ath_hw *ah,
        REG_SET_BIT(ah, AR_IMR_S5,
                (SM(AR_GENTMR_BIT(timer->index), AR_IMR_S5_GENTIMER_THRESH) |
                SM(AR_GENTMR_BIT(timer->index), AR_IMR_S5_GENTIMER_TRIG)));
-
-       if ((ah->ah_sc->imask & ATH9K_INT_GENTIMER) == 0) {
-               ath9k_hw_set_interrupts(ah, 0);
-               ah->ah_sc->imask |= ATH9K_INT_GENTIMER;
-               ath9k_hw_set_interrupts(ah, ah->ah_sc->imask);
-       }
 }
 
-void ath_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
+void ath9k_hw_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
 {
        struct ath_gen_timer_table *timer_table = &ah->hw_gen_timers;
 
@@ -4200,13 +4195,6 @@ void ath_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
                SM(AR_GENTMR_BIT(timer->index), AR_IMR_S5_GENTIMER_TRIG)));
 
        clear_bit(timer->index, &timer_table->timer_mask.timer_bits);
-
-       /* if no timer is enabled, turn off interrupt mask */
-       if (timer_table->timer_mask.val == 0) {
-               ath9k_hw_set_interrupts(ah, 0);
-               ah->ah_sc->imask &= ~ATH9K_INT_GENTIMER;
-               ath9k_hw_set_interrupts(ah, ah->ah_sc->imask);
-       }
 }
 
 void ath_gen_timer_free(struct ath_hw *ah, struct ath_gen_timer *timer)
index 1f6dece9b0072cb9d4143eb4d628e328a11c2626..32401742751efb75614f9d38ac646e3c32cb7780 100644 (file)
@@ -682,9 +682,12 @@ struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
                                          void (*overflow)(void *),
                                          void *arg,
                                          u8 timer_index);
-void ath_gen_timer_start(struct ath_hw *ah, struct ath_gen_timer *timer,
-                        u32 timer_next, u32 timer_period);
-void ath_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer);
+void ath9k_hw_gen_timer_start(struct ath_hw *ah,
+                             struct ath_gen_timer *timer,
+                             u32 timer_next,
+                             u32 timer_period);
+void ath9k_hw_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer);
+
 void ath_gen_timer_free(struct ath_hw *ah, struct ath_gen_timer *timer);
 void ath_gen_timer_isr(struct ath_hw *hw);
 u32 ath9k_hw_gettsf32(struct ath_hw *ah);
index 693555728eaba48c958a393a8b35c6c3f5481c32..571a0d9c86058a924a1061f7f27eeddbed4acf67 100644 (file)
@@ -1408,6 +1408,34 @@ static void ath9k_btcoex_bt_stomp(struct ath_softc *sc,
        ath9k_hw_btcoex_enable(ah);
 }
 
+static void ath9k_gen_timer_start(struct ath_hw *ah,
+                                 struct ath_gen_timer *timer,
+                                 u32 timer_next,
+                                 u32 timer_period)
+{
+       ath9k_hw_gen_timer_start(ah, timer, timer_next, timer_period);
+
+       if ((ah->ah_sc->imask & ATH9K_INT_GENTIMER) == 0) {
+               ath9k_hw_set_interrupts(ah, 0);
+               ah->ah_sc->imask |= ATH9K_INT_GENTIMER;
+               ath9k_hw_set_interrupts(ah, ah->ah_sc->imask);
+       }
+}
+
+static void ath9k_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
+{
+       struct ath_gen_timer_table *timer_table = &ah->hw_gen_timers;
+
+       ath9k_hw_gen_timer_stop(ah, timer);
+
+       /* if no timer is enabled, turn off interrupt mask */
+       if (timer_table->timer_mask.val == 0) {
+               ath9k_hw_set_interrupts(ah, 0);
+               ah->ah_sc->imask &= ~ATH9K_INT_GENTIMER;
+               ath9k_hw_set_interrupts(ah, ah->ah_sc->imask);
+       }
+}
+
 /*
  * This is the master bt coex timer which runs for every
  * 45ms, bt traffic will be given priority during 55% of this
@@ -1429,13 +1457,13 @@ static void ath_btcoex_period_timer(unsigned long data)
 
        if (btcoex->btcoex_period != btcoex->btcoex_no_stomp) {
                if (btcoex->hw_timer_enabled)
-                       ath_gen_timer_stop(ah, btcoex->no_stomp_timer);
+                       ath9k_gen_timer_stop(ah, btcoex->no_stomp_timer);
 
-               ath_gen_timer_start(ah,
-                       btcoex->no_stomp_timer,
-                       (ath9k_hw_gettsf32(ah) +
-                               btcoex->btcoex_no_stomp),
-                               btcoex->btcoex_no_stomp * 10);
+               ath9k_gen_timer_start(ah,
+                                     btcoex->no_stomp_timer,
+                                     (ath9k_hw_gettsf32(ah) +
+                                      btcoex->btcoex_no_stomp),
+                                      btcoex->btcoex_no_stomp * 10);
                btcoex->hw_timer_enabled = true;
        }
 
@@ -2165,7 +2193,7 @@ static void ath9k_btcoex_timer_resume(struct ath_softc *sc)
 
        /* make sure duty cycle timer is also stopped when resuming */
        if (btcoex->hw_timer_enabled)
-               ath_gen_timer_stop(sc->sc_ah, btcoex->no_stomp_timer);
+               ath9k_gen_timer_stop(sc->sc_ah, btcoex->no_stomp_timer);
 
        btcoex->bt_priority_cnt = 0;
        btcoex->bt_priority_time = jiffies;
@@ -2407,7 +2435,7 @@ static void ath9k_btcoex_timer_pause(struct ath_softc *sc)
        del_timer_sync(&btcoex->period_timer);
 
        if (btcoex->hw_timer_enabled)
-               ath_gen_timer_stop(ah, btcoex->no_stomp_timer);
+               ath9k_gen_timer_stop(ah, btcoex->no_stomp_timer);
 
        btcoex->hw_timer_enabled = false;
 }