build: create pkginfo dir earlier to avoid build breakage
[openwrt.git] / package / madwifi / patches / 400-new_hal.patch
1 --- a/ath/if_ath.c
2 +++ b/ath/if_ath.c
3 @@ -606,6 +606,14 @@ ath_attach(u_int16_t devid, struct net_d
4         }
5         sc->sc_ah = ah;
6  
7 +       /* WAR for AR7100 PCI bug */
8 +#if defined(CONFIG_ATHEROS_AR71XX) || defined(CONFIG_ATH79)
9 +       if ((ar_device(sc->devid) >= 5210) && (ar_device(sc->devid) < 5416)) {
10 +               ath_hal_setcapability(ah, HAL_CAP_DMABURST_RX, 0, HAL_DMABURST_4B, NULL);
11 +               ath_hal_setcapability(ah, HAL_CAP_DMABURST_TX, 0, HAL_DMABURST_4B, NULL);
12 +       }
13 +#endif
14 +
15         /*
16          * Check if the MAC has multi-rate retry support.
17          * We do this by trying to setup a fake extended
18 @@ -7568,7 +7576,7 @@ ath_txq_setup(struct ath_softc *sc, int
19         if (qtype == HAL_TX_QUEUE_UAPSD)
20                 qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
21         else
22 -               qi.tqi_qflags = HAL_TXQ_TXEOLINT_ENABLE | 
23 +               qi.tqi_qflags = HAL_TXQ_TXEOLINT_ENABLE | HAL_TXQ_TXOKINT_ENABLE |
24                         HAL_TXQ_TXDESCINT_ENABLE;
25         qnum = ath_hal_setuptxqueue(ah, qtype, &qi);
26         if (qnum == -1) {
27 --- a/ath_hal/ah_os.c
28 +++ b/ath_hal/ah_os.c
29 @@ -126,6 +126,13 @@ ath_hal_printf(struct ath_hal *ah, const
30  }
31  EXPORT_SYMBOL(ath_hal_printf);
32  
33 +void __ahdecl
34 +ath_hal_printstr(struct ath_hal *ah, const char *str)
35 +{
36 +       printk("%s", str);
37 +}
38 +EXPORT_SYMBOL(ath_hal_printstr);
39 +
40  /*
41   * Format an Ethernet MAC for printing.
42   */
43 --- a/ath_hal/ah_os.h
44 +++ b/ath_hal/ah_os.h
45 @@ -156,69 +156,23 @@ extern u_int32_t __ahdecl ath_hal_getupt
46  #endif
47  #endif                         /* AH_BYTE_ORDER */
48  
49 -/*
50 - * Some big-endian architectures don't set CONFIG_GENERIC_IOMAP, but fail to
51 - * implement iowrite32be and ioread32be.  Provide compatibility macros when
52 - * it's needed.
53 - *
54 - * As of Linux 2.6.24, only MIPS, PARISC and PowerPC implement iowrite32be and
55 - * ioread32be as functions.
56 - *
57 - * The downside or the replacement macros it that we may be byte-swapping data
58 - * for the second time, so the native implementations should be preferred.
59 - */
60 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)) && \
61 -       !defined(CONFIG_GENERIC_IOMAP) && (AH_BYTE_ORDER == AH_BIG_ENDIAN) && \
62 -       !defined(__mips__) && !defined(__hppa__) && !defined(__powerpc__)
63 -# ifndef iowrite32be
64 -#  define iowrite32be(_val, _addr) iowrite32(swab32((_val)), (_addr))
65 -# endif
66 -# ifndef ioread32be
67 -#  define ioread32be(_addr) swab32(ioread32((_addr)))
68 -# endif
69 -#endif
70 +#define IS_SWAPPED(_ah, _reg) \
71 +       ((_ah)->ah_swapped && \
72 +               (((0x4000 <= (_reg)) && ((_reg) < 0x5000)) || \
73 +                ((0x7000 <= (_reg)) && ((_reg) < 0x8000))))
74 +
75 +#define SWAPREG(_ah, _reg, _val) \
76 +       (IS_SWAPPED(_ah, _reg) ? cpu_to_le32(_val) : (_val))
77  
78  /*
79   * The register accesses are done using target-specific functions when
80   * debugging is enabled (AH_DEBUG) or it's explicitly requested for the target.
81 - *
82 - * The hardware registers use little-endian byte order natively.  Big-endian
83 - * systems are configured by HAL to enable hardware byte-swap of register reads
84 - * and writes at reset.  This avoid the need to byte-swap the data in software.
85 - * However, the registers in a certain area from 0x4000 to 0x4fff (PCI clock
86 - * domain registers) are not byte swapped!
87 - *
88 - * Since Linux I/O primitives default to little-endian operations, we only
89 - * need to suppress byte-swapping on big-endian systems outside the area used
90 - * by the PCI clock domain registers.
91   */
92 -#if (AH_BYTE_ORDER == AH_BIG_ENDIAN)
93 -#define is_reg_le(__reg) ((0x4000 <= (__reg) && (__reg) < 0x5000))
94 -#else
95 -#define is_reg_le(__reg) 1
96 -#endif
97 -
98 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
99 -#define _OS_REG_WRITE(_ah, _reg, _val) do {                    \
100 -        is_reg_le(_reg) ?                                      \
101 -        iowrite32((_val), (_ah)->ah_sh + (_reg)) :             \
102 -        iowrite32be((_val), (_ah)->ah_sh + (_reg));            \
103 -       } while (0)
104 -#define _OS_REG_READ(_ah, _reg)                                        \
105 -       (is_reg_le(_reg) ?                                      \
106 -        ioread32((_ah)->ah_sh + (_reg)) :                      \
107 -        ioread32be((_ah)->ah_sh + (_reg)))
108 -#else
109  #define _OS_REG_WRITE(_ah, _reg, _val) do {                    \
110 -        writel(is_reg_le(_reg) ?                               \
111 -               (_val) : cpu_to_le32(_val),                     \
112 -               (_ah)->ah_sh + (_reg));                         \
113 -       } while (0)
114 +        __raw_writel(SWAPREG(_ah, _reg, _val), (_ah)->ah_sh + (_reg));         \
115 +} while (0)
116  #define _OS_REG_READ(_ah, _reg)                                        \
117 -       (is_reg_le(_reg) ?                                      \
118 -        readl((_ah)->ah_sh + (_reg)) :                         \
119 -        cpu_to_le32(readl((_ah)->ah_sh + (_reg))))
120 -#endif                         /* KERNEL_VERSION(2,6,12) */
121 +        SWAPREG(_ah, _reg, __raw_readl((_ah)->ah_sh + (_reg)))
122  
123  /*
124   * The functions in this section are not intended to be invoked by MadWifi
125 --- a/ath/if_ath_hal.h
126 +++ b/ath/if_ath_hal.h
127 @@ -778,17 +778,6 @@ static inline HAL_STATUS ath_hal_getcapa
128         return ret;
129  }
130  
131 -static inline HAL_BOOL ath_hal_radar_wait(struct ath_hal *ah, HAL_CHANNEL *a1)
132 -{
133 -       HAL_BOOL ret;
134 -       ATH_HAL_LOCK_IRQ(ah->ah_sc);
135 -       ath_hal_set_function(__func__);
136 -       ret = ah->ah_radarWait(ah, a1);
137 -       ath_hal_set_function(NULL);
138 -       ATH_HAL_UNLOCK_IRQ(ah->ah_sc);
139 -       return ret;
140 -}
141 -
142  static inline HAL_BOOL ath_hal_setmcastfilterindex(struct ath_hal *ah,
143                                                    u_int32_t index)
144  {
145 @@ -1268,8 +1257,6 @@ static inline void ath_hal_dump_map(stru
146         /* HAL_STATUS ah_getCapability(struct ath_hal *ah, HAL_CAPABILITY_TYPE a1, u_int32_t capability, u_int32_t *result) */
147         __print_symbol("%s=ah_getCapability\n",
148                        (unsigned long)ah->ah_getCapability);
149 -       /* HAL_BOOL ah_radarWait(struct ath_hal *ah, HAL_CHANNEL *a1) */
150 -       __print_symbol("%s=ah_radarWait\n", (unsigned long)ah->ah_radarWait);
151         /* HAL_BOOL ah_setMulticastFilterIndex(struct ath_hal *ah, u_int32_t index) */
152         __print_symbol("%s=ah_setMulticastFilterIndex\n",
153                        (unsigned long)ah->ah_setMulticastFilterIndex);