[package] uhttpd: finish inherited uloop in forked childs, fixes misdispatched events...
[openwrt.git] / package / mac80211 / patches / 576-ath9k_ani_remove_mib_int.patch
1 --- a/drivers/net/wireless/ath/ath9k/ani.c
2 +++ b/drivers/net/wireless/ath/ath9k/ani.c
3 @@ -490,46 +490,6 @@ void ath9k_hw_disable_mib_counters(struc
4  }
5  EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
6  
7 -/*
8 - * Process a MIB interrupt.  We may potentially be invoked because
9 - * any of the MIB counters overflow/trigger so don't assume we're
10 - * here because a PHY error counter triggered.
11 - */
12 -void ath9k_hw_proc_mib_event(struct ath_hw *ah)
13 -{
14 -       u32 phyCnt1, phyCnt2;
15 -
16 -       /* Reset these counters regardless */
17 -       REG_WRITE(ah, AR_FILT_OFDM, 0);
18 -       REG_WRITE(ah, AR_FILT_CCK, 0);
19 -       if (!(REG_READ(ah, AR_SLP_MIB_CTRL) & AR_SLP_MIB_PENDING))
20 -               REG_WRITE(ah, AR_SLP_MIB_CTRL, AR_SLP_MIB_CLEAR);
21 -
22 -       /* Clear the mib counters and save them in the stats */
23 -       ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
24 -
25 -       if (!DO_ANI(ah)) {
26 -               /*
27 -                * We must always clear the interrupt cause by
28 -                * resetting the phy error regs.
29 -                */
30 -               REG_WRITE(ah, AR_PHY_ERR_1, 0);
31 -               REG_WRITE(ah, AR_PHY_ERR_2, 0);
32 -               return;
33 -       }
34 -
35 -       /* NB: these are not reset-on-read */
36 -       phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
37 -       phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
38 -       if (((phyCnt1 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK) ||
39 -           ((phyCnt2 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK)) {
40 -
41 -               /* NB: always restart to insure the h/w counters are reset */
42 -               ath9k_ani_restart(ah);
43 -       }
44 -}
45 -EXPORT_SYMBOL(ath9k_hw_proc_mib_event);
46 -
47  void ath9k_hw_ani_setup(struct ath_hw *ah)
48  {
49         int i;
50 --- a/drivers/net/wireless/ath/ath9k/hw.h
51 +++ b/drivers/net/wireless/ath/ath9k/hw.h
52 @@ -1023,7 +1023,6 @@ void ar9003_hw_attach_ops(struct ath_hw 
53  void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan);
54  
55  void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning);
56 -void ath9k_hw_proc_mib_event(struct ath_hw *ah);
57  void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan);
58  
59  #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
60 --- a/drivers/net/wireless/ath/ath9k/main.c
61 +++ b/drivers/net/wireless/ath/ath9k/main.c
62 @@ -827,24 +827,6 @@ irqreturn_t ath_isr(int irq, void *dev)
63                 ath9k_hw_set_interrupts(ah);
64         }
65  
66 -       if (status & ATH9K_INT_MIB) {
67 -               /*
68 -                * Disable interrupts until we service the MIB
69 -                * interrupt; otherwise it will continue to
70 -                * fire.
71 -                */
72 -               ath9k_hw_disable_interrupts(ah);
73 -               /*
74 -                * Let the hal handle the event. We assume
75 -                * it will clear whatever condition caused
76 -                * the interrupt.
77 -                */
78 -               spin_lock(&common->cc_lock);
79 -               ath9k_hw_proc_mib_event(ah);
80 -               spin_unlock(&common->cc_lock);
81 -               ath9k_hw_enable_interrupts(ah);
82 -       }
83 -
84         if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
85                 if (status & ATH9K_INT_TIM_TIMER) {
86                         if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle))
87 @@ -1347,14 +1329,10 @@ static void ath9k_calculate_summary_stat
88         /*
89          * Enable MIB interrupts when there are hardware phy counters.
90          */
91 -       if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0) {
92 -               if (ah->config.enable_ani)
93 -                       ah->imask |= ATH9K_INT_MIB;
94 +       if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
95                 ah->imask |= ATH9K_INT_TSFOOR;
96 -       } else {
97 -               ah->imask &= ~ATH9K_INT_MIB;
98 +       else
99                 ah->imask &= ~ATH9K_INT_TSFOOR;
100 -       }
101  
102         ath9k_hw_set_interrupts(ah);
103  
104 --- a/drivers/net/wireless/ath/ath9k/debug.c
105 +++ b/drivers/net/wireless/ath/ath9k/debug.c
106 @@ -348,8 +348,6 @@ void ath_debug_stat_interrupt(struct ath
107                 sc->debug.stats.istats.txok++;
108         if (status & ATH9K_INT_TXURN)
109                 sc->debug.stats.istats.txurn++;
110 -       if (status & ATH9K_INT_MIB)
111 -               sc->debug.stats.istats.mib++;
112         if (status & ATH9K_INT_RXPHY)
113                 sc->debug.stats.istats.rxphyerr++;
114         if (status & ATH9K_INT_RXKCM)