1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef ATH_H
18#define ATH_H
19
20#include <linux/skbuff.h>
21#include <linux/if_ether.h>
22#include <linux/spinlock.h>
23#include <net/mac80211.h>
24
25
26
27
28
29
30
31
32
33#define ATH_KEYMAX 128
34
35static const u8 ath_bcast_mac[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
36
37struct ath_ani {
38 bool caldone;
39 unsigned int longcal_timer;
40 unsigned int shortcal_timer;
41 unsigned int resetcal_timer;
42 unsigned int checkani_timer;
43 struct timer_list timer;
44};
45
46struct ath_cycle_counters {
47 u32 cycles;
48 u32 rx_busy;
49 u32 rx_frame;
50 u32 tx_frame;
51};
52
53enum ath_device_state {
54 ATH_HW_UNAVAILABLE,
55 ATH_HW_INITIALIZED,
56};
57
58enum ath_bus_type {
59 ATH_PCI,
60 ATH_AHB,
61 ATH_USB,
62};
63
64struct reg_dmn_pair_mapping {
65 u16 regDmnEnum;
66 u16 reg_5ghz_ctl;
67 u16 reg_2ghz_ctl;
68};
69
70struct ath_regulatory {
71 char alpha2[2];
72 u16 country_code;
73 u16 max_power_level;
74 u16 current_rd;
75 int16_t power_limit;
76 struct reg_dmn_pair_mapping *regpair;
77};
78
79enum ath_crypt_caps {
80 ATH_CRYPT_CAP_CIPHER_AESCCM = BIT(0),
81 ATH_CRYPT_CAP_MIC_COMBINED = BIT(1),
82};
83
84struct ath_keyval {
85 u8 kv_type;
86 u8 kv_pad;
87 u16 kv_len;
88 u8 kv_val[16];
89 u8 kv_mic[8];
90 u8 kv_txmic[8];
91
92
93};
94
95enum ath_cipher {
96 ATH_CIPHER_WEP = 0,
97 ATH_CIPHER_AES_OCB = 1,
98 ATH_CIPHER_AES_CCM = 2,
99 ATH_CIPHER_CKIP = 3,
100 ATH_CIPHER_TKIP = 4,
101 ATH_CIPHER_CLR = 5,
102 ATH_CIPHER_MIC = 127
103};
104
105
106
107
108
109
110
111
112
113
114struct ath_ops {
115 unsigned int (*read)(void *, u32 reg_offset);
116 void (*multi_read)(void *, u32 *addr, u32 *val, u16 count);
117 void (*write)(void *, u32 val, u32 reg_offset);
118 void (*enable_write_buffer)(void *);
119 void (*write_flush) (void *);
120 u32 (*rmw)(void *, u32 reg_offset, u32 set, u32 clr);
121};
122
123struct ath_common;
124struct ath_bus_ops;
125
126struct ath_common {
127 void *ah;
128 void *priv;
129 struct ieee80211_hw *hw;
130 int debug_mask;
131 enum ath_device_state state;
132
133 struct ath_ani ani;
134
135 u16 cachelsz;
136 u16 curaid;
137 u8 macaddr[ETH_ALEN];
138 u8 curbssid[ETH_ALEN];
139 u8 bssidmask[ETH_ALEN];
140
141 u32 rx_bufsize;
142
143 u32 keymax;
144 DECLARE_BITMAP(keymap, ATH_KEYMAX);
145 DECLARE_BITMAP(tkip_keymap, ATH_KEYMAX);
146 DECLARE_BITMAP(ccmp_keymap, ATH_KEYMAX);
147 enum ath_crypt_caps crypt_caps;
148
149 unsigned int clockrate;
150
151 spinlock_t cc_lock;
152 struct ath_cycle_counters cc_ani;
153 struct ath_cycle_counters cc_survey;
154
155 struct ath_regulatory regulatory;
156 struct ath_regulatory reg_world_copy;
157 const struct ath_ops *ops;
158 const struct ath_bus_ops *bus_ops;
159
160 bool btcoex_enabled;
161 bool disable_ani;
162 bool antenna_diversity;
163};
164
165struct sk_buff *ath_rxbuf_alloc(struct ath_common *common,
166 u32 len,
167 gfp_t gfp_mask);
168
169void ath_hw_setbssidmask(struct ath_common *common);
170void ath_key_delete(struct ath_common *common, struct ieee80211_key_conf *key);
171int ath_key_config(struct ath_common *common,
172 struct ieee80211_vif *vif,
173 struct ieee80211_sta *sta,
174 struct ieee80211_key_conf *key);
175bool ath_hw_keyreset(struct ath_common *common, u16 entry);
176void ath_hw_cycle_counters_update(struct ath_common *common);
177int32_t ath_hw_get_listen_time(struct ath_common *common);
178
179__printf(3, 4)
180void ath_printk(const char *level, const struct ath_common *common,
181 const char *fmt, ...);
182
183#define ath_emerg(common, fmt, ...) \
184 ath_printk(KERN_EMERG, common, fmt, ##__VA_ARGS__)
185#define ath_alert(common, fmt, ...) \
186 ath_printk(KERN_ALERT, common, fmt, ##__VA_ARGS__)
187#define ath_crit(common, fmt, ...) \
188 ath_printk(KERN_CRIT, common, fmt, ##__VA_ARGS__)
189#define ath_err(common, fmt, ...) \
190 ath_printk(KERN_ERR, common, fmt, ##__VA_ARGS__)
191#define ath_warn(common, fmt, ...) \
192 ath_printk(KERN_WARNING, common, fmt, ##__VA_ARGS__)
193#define ath_notice(common, fmt, ...) \
194 ath_printk(KERN_NOTICE, common, fmt, ##__VA_ARGS__)
195#define ath_info(common, fmt, ...) \
196 ath_printk(KERN_INFO, common, fmt, ##__VA_ARGS__)
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229enum ATH_DEBUG {
230 ATH_DBG_RESET = 0x00000001,
231 ATH_DBG_QUEUE = 0x00000002,
232 ATH_DBG_EEPROM = 0x00000004,
233 ATH_DBG_CALIBRATE = 0x00000008,
234 ATH_DBG_INTERRUPT = 0x00000010,
235 ATH_DBG_REGULATORY = 0x00000020,
236 ATH_DBG_ANI = 0x00000040,
237 ATH_DBG_XMIT = 0x00000080,
238 ATH_DBG_BEACON = 0x00000100,
239 ATH_DBG_CONFIG = 0x00000200,
240 ATH_DBG_FATAL = 0x00000400,
241 ATH_DBG_PS = 0x00000800,
242 ATH_DBG_HWTIMER = 0x00001000,
243 ATH_DBG_BTCOEX = 0x00002000,
244 ATH_DBG_WMI = 0x00004000,
245 ATH_DBG_BSTUCK = 0x00008000,
246 ATH_DBG_MCI = 0x00010000,
247 ATH_DBG_DFS = 0x00020000,
248 ATH_DBG_WOW = 0x00040000,
249 ATH_DBG_ANY = 0xffffffff
250};
251
252#define ATH_DBG_DEFAULT (ATH_DBG_FATAL)
253
254#ifdef CONFIG_ATH_DEBUG
255
256#define ath_dbg(common, dbg_mask, fmt, ...) \
257do { \
258 if ((common)->debug_mask & ATH_DBG_##dbg_mask) \
259 ath_printk(KERN_DEBUG, common, fmt, ##__VA_ARGS__); \
260} while (0)
261
262#define ATH_DBG_WARN(foo, arg...) WARN(foo, arg)
263#define ATH_DBG_WARN_ON_ONCE(foo) WARN_ON_ONCE(foo)
264
265#else
266
267static inline __attribute__ ((format (printf, 3, 4)))
268void _ath_dbg(struct ath_common *common, enum ATH_DEBUG dbg_mask,
269 const char *fmt, ...)
270{
271}
272#define ath_dbg(common, dbg_mask, fmt, ...) \
273 _ath_dbg(common, ATH_DBG_##dbg_mask, fmt, ##__VA_ARGS__)
274
275#define ATH_DBG_WARN(foo, arg...) do {} while (0)
276#define ATH_DBG_WARN_ON_ONCE(foo) ({ \
277 int __ret_warn_once = !!(foo); \
278 unlikely(__ret_warn_once); \
279})
280
281#endif
282
283
284#ifdef CONFIG_ATH_DEBUG
285const char *ath_opmode_to_string(enum nl80211_iftype opmode);
286#else
287static inline const char *ath_opmode_to_string(enum nl80211_iftype opmode)
288{
289 return "UNKNOWN";
290}
291#endif
292
293#endif
294