]> git.karo-electronics.de Git - mv-sheeva.git/blob - drivers/net/wireless/ath/ath5k/base.c
Merge branch 'master' into for-davem
[mv-sheeva.git] / drivers / net / wireless / ath / ath5k / base.c
1 /*-
2  * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
3  * Copyright (c) 2004-2005 Atheros Communications, Inc.
4  * Copyright (c) 2006 Devicescape Software, Inc.
5  * Copyright (c) 2007 Jiri Slaby <jirislaby@gmail.com>
6  * Copyright (c) 2007 Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
7  *
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer,
15  *    without modification.
16  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
17  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
18  *    redistribution must be conditioned upon including a substantially
19  *    similar Disclaimer requirement for further binary redistribution.
20  * 3. Neither the names of the above-listed copyright holders nor the names
21  *    of any contributors may be used to endorse or promote products derived
22  *    from this software without specific prior written permission.
23  *
24  * Alternatively, this software may be distributed under the terms of the
25  * GNU General Public License ("GPL") version 2 as published by the Free
26  * Software Foundation.
27  *
28  * NO WARRANTY
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
32  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
33  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
34  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
35  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
36  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
37  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
39  * THE POSSIBILITY OF SUCH DAMAGES.
40  *
41  */
42
43 #include <linux/module.h>
44 #include <linux/delay.h>
45 #include <linux/hardirq.h>
46 #include <linux/if.h>
47 #include <linux/io.h>
48 #include <linux/netdevice.h>
49 #include <linux/cache.h>
50 #include <linux/pci.h>
51 #include <linux/ethtool.h>
52 #include <linux/uaccess.h>
53 #include <linux/slab.h>
54
55 #include <net/ieee80211_radiotap.h>
56
57 #include <asm/unaligned.h>
58
59 #include "base.h"
60 #include "reg.h"
61 #include "debug.h"
62 #include "ani.h"
63
64 static int modparam_nohwcrypt;
65 module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
66 MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
67
68 static int modparam_all_channels;
69 module_param_named(all_channels, modparam_all_channels, bool, S_IRUGO);
70 MODULE_PARM_DESC(all_channels, "Expose all channels the device can use.");
71
72
73 /******************\
74 * Internal defines *
75 \******************/
76
77 /* Module info */
78 MODULE_AUTHOR("Jiri Slaby");
79 MODULE_AUTHOR("Nick Kossifidis");
80 MODULE_DESCRIPTION("Support for 5xxx series of Atheros 802.11 wireless LAN cards.");
81 MODULE_SUPPORTED_DEVICE("Atheros 5xxx WLAN cards");
82 MODULE_LICENSE("Dual BSD/GPL");
83 MODULE_VERSION("0.6.0 (EXPERIMENTAL)");
84
85
86 /* Known PCI ids */
87 static DEFINE_PCI_DEVICE_TABLE(ath5k_pci_id_table) = {
88         { PCI_VDEVICE(ATHEROS, 0x0207) }, /* 5210 early */
89         { PCI_VDEVICE(ATHEROS, 0x0007) }, /* 5210 */
90         { PCI_VDEVICE(ATHEROS, 0x0011) }, /* 5311 - this is on AHB bus !*/
91         { PCI_VDEVICE(ATHEROS, 0x0012) }, /* 5211 */
92         { PCI_VDEVICE(ATHEROS, 0x0013) }, /* 5212 */
93         { PCI_VDEVICE(3COM_2,  0x0013) }, /* 3com 5212 */
94         { PCI_VDEVICE(3COM,    0x0013) }, /* 3com 3CRDAG675 5212 */
95         { PCI_VDEVICE(ATHEROS, 0x1014) }, /* IBM minipci 5212 */
96         { PCI_VDEVICE(ATHEROS, 0x0014) }, /* 5212 combatible */
97         { PCI_VDEVICE(ATHEROS, 0x0015) }, /* 5212 combatible */
98         { PCI_VDEVICE(ATHEROS, 0x0016) }, /* 5212 combatible */
99         { PCI_VDEVICE(ATHEROS, 0x0017) }, /* 5212 combatible */
100         { PCI_VDEVICE(ATHEROS, 0x0018) }, /* 5212 combatible */
101         { PCI_VDEVICE(ATHEROS, 0x0019) }, /* 5212 combatible */
102         { PCI_VDEVICE(ATHEROS, 0x001a) }, /* 2413 Griffin-lite */
103         { PCI_VDEVICE(ATHEROS, 0x001b) }, /* 5413 Eagle */
104         { PCI_VDEVICE(ATHEROS, 0x001c) }, /* PCI-E cards */
105         { PCI_VDEVICE(ATHEROS, 0x001d) }, /* 2417 Nala */
106         { 0 }
107 };
108 MODULE_DEVICE_TABLE(pci, ath5k_pci_id_table);
109
110 /* Known SREVs */
111 static const struct ath5k_srev_name srev_names[] = {
112         { "5210",       AR5K_VERSION_MAC,       AR5K_SREV_AR5210 },
113         { "5311",       AR5K_VERSION_MAC,       AR5K_SREV_AR5311 },
114         { "5311A",      AR5K_VERSION_MAC,       AR5K_SREV_AR5311A },
115         { "5311B",      AR5K_VERSION_MAC,       AR5K_SREV_AR5311B },
116         { "5211",       AR5K_VERSION_MAC,       AR5K_SREV_AR5211 },
117         { "5212",       AR5K_VERSION_MAC,       AR5K_SREV_AR5212 },
118         { "5213",       AR5K_VERSION_MAC,       AR5K_SREV_AR5213 },
119         { "5213A",      AR5K_VERSION_MAC,       AR5K_SREV_AR5213A },
120         { "2413",       AR5K_VERSION_MAC,       AR5K_SREV_AR2413 },
121         { "2414",       AR5K_VERSION_MAC,       AR5K_SREV_AR2414 },
122         { "5424",       AR5K_VERSION_MAC,       AR5K_SREV_AR5424 },
123         { "5413",       AR5K_VERSION_MAC,       AR5K_SREV_AR5413 },
124         { "5414",       AR5K_VERSION_MAC,       AR5K_SREV_AR5414 },
125         { "2415",       AR5K_VERSION_MAC,       AR5K_SREV_AR2415 },
126         { "5416",       AR5K_VERSION_MAC,       AR5K_SREV_AR5416 },
127         { "5418",       AR5K_VERSION_MAC,       AR5K_SREV_AR5418 },
128         { "2425",       AR5K_VERSION_MAC,       AR5K_SREV_AR2425 },
129         { "2417",       AR5K_VERSION_MAC,       AR5K_SREV_AR2417 },
130         { "xxxxx",      AR5K_VERSION_MAC,       AR5K_SREV_UNKNOWN },
131         { "5110",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_5110 },
132         { "5111",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_5111 },
133         { "5111A",      AR5K_VERSION_RAD,       AR5K_SREV_RAD_5111A },
134         { "2111",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_2111 },
135         { "5112",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_5112 },
136         { "5112A",      AR5K_VERSION_RAD,       AR5K_SREV_RAD_5112A },
137         { "5112B",      AR5K_VERSION_RAD,       AR5K_SREV_RAD_5112B },
138         { "2112",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_2112 },
139         { "2112A",      AR5K_VERSION_RAD,       AR5K_SREV_RAD_2112A },
140         { "2112B",      AR5K_VERSION_RAD,       AR5K_SREV_RAD_2112B },
141         { "2413",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_2413 },
142         { "5413",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_5413 },
143         { "2316",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_2316 },
144         { "2317",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_2317 },
145         { "5424",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_5424 },
146         { "5133",       AR5K_VERSION_RAD,       AR5K_SREV_RAD_5133 },
147         { "xxxxx",      AR5K_VERSION_RAD,       AR5K_SREV_UNKNOWN },
148 };
149
150 static const struct ieee80211_rate ath5k_rates[] = {
151         { .bitrate = 10,
152           .hw_value = ATH5K_RATE_CODE_1M, },
153         { .bitrate = 20,
154           .hw_value = ATH5K_RATE_CODE_2M,
155           .hw_value_short = ATH5K_RATE_CODE_2M | AR5K_SET_SHORT_PREAMBLE,
156           .flags = IEEE80211_RATE_SHORT_PREAMBLE },
157         { .bitrate = 55,
158           .hw_value = ATH5K_RATE_CODE_5_5M,
159           .hw_value_short = ATH5K_RATE_CODE_5_5M | AR5K_SET_SHORT_PREAMBLE,
160           .flags = IEEE80211_RATE_SHORT_PREAMBLE },
161         { .bitrate = 110,
162           .hw_value = ATH5K_RATE_CODE_11M,
163           .hw_value_short = ATH5K_RATE_CODE_11M | AR5K_SET_SHORT_PREAMBLE,
164           .flags = IEEE80211_RATE_SHORT_PREAMBLE },
165         { .bitrate = 60,
166           .hw_value = ATH5K_RATE_CODE_6M,
167           .flags = 0 },
168         { .bitrate = 90,
169           .hw_value = ATH5K_RATE_CODE_9M,
170           .flags = 0 },
171         { .bitrate = 120,
172           .hw_value = ATH5K_RATE_CODE_12M,
173           .flags = 0 },
174         { .bitrate = 180,
175           .hw_value = ATH5K_RATE_CODE_18M,
176           .flags = 0 },
177         { .bitrate = 240,
178           .hw_value = ATH5K_RATE_CODE_24M,
179           .flags = 0 },
180         { .bitrate = 360,
181           .hw_value = ATH5K_RATE_CODE_36M,
182           .flags = 0 },
183         { .bitrate = 480,
184           .hw_value = ATH5K_RATE_CODE_48M,
185           .flags = 0 },
186         { .bitrate = 540,
187           .hw_value = ATH5K_RATE_CODE_54M,
188           .flags = 0 },
189         /* XR missing */
190 };
191
192 /*
193  * Prototypes - PCI stack related functions
194  */
195 static int __devinit    ath5k_pci_probe(struct pci_dev *pdev,
196                                 const struct pci_device_id *id);
197 static void __devexit   ath5k_pci_remove(struct pci_dev *pdev);
198 #ifdef CONFIG_PM
199 static int              ath5k_pci_suspend(struct device *dev);
200 static int              ath5k_pci_resume(struct device *dev);
201
202 static SIMPLE_DEV_PM_OPS(ath5k_pm_ops, ath5k_pci_suspend, ath5k_pci_resume);
203 #define ATH5K_PM_OPS    (&ath5k_pm_ops)
204 #else
205 #define ATH5K_PM_OPS    NULL
206 #endif /* CONFIG_PM */
207
208 static struct pci_driver ath5k_pci_driver = {
209         .name           = KBUILD_MODNAME,
210         .id_table       = ath5k_pci_id_table,
211         .probe          = ath5k_pci_probe,
212         .remove         = __devexit_p(ath5k_pci_remove),
213         .driver.pm      = ATH5K_PM_OPS,
214 };
215
216
217
218 /*
219  * Prototypes - MAC 802.11 stack related functions
220  */
221 static int ath5k_tx(struct ieee80211_hw *hw, struct sk_buff *skb);
222 static int ath5k_tx_queue(struct ieee80211_hw *hw, struct sk_buff *skb,
223                 struct ath5k_txq *txq);
224 static int ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan);
225 static int ath5k_reset_wake(struct ath5k_softc *sc);
226 static int ath5k_start(struct ieee80211_hw *hw);
227 static void ath5k_stop(struct ieee80211_hw *hw);
228 static int ath5k_add_interface(struct ieee80211_hw *hw,
229                 struct ieee80211_vif *vif);
230 static void ath5k_remove_interface(struct ieee80211_hw *hw,
231                 struct ieee80211_vif *vif);
232 static int ath5k_config(struct ieee80211_hw *hw, u32 changed);
233 static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw,
234                                    struct netdev_hw_addr_list *mc_list);
235 static void ath5k_configure_filter(struct ieee80211_hw *hw,
236                 unsigned int changed_flags,
237                 unsigned int *new_flags,
238                 u64 multicast);
239 static int ath5k_set_key(struct ieee80211_hw *hw,
240                 enum set_key_cmd cmd,
241                 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
242                 struct ieee80211_key_conf *key);
243 static int ath5k_get_stats(struct ieee80211_hw *hw,
244                 struct ieee80211_low_level_stats *stats);
245 static int ath5k_get_survey(struct ieee80211_hw *hw,
246                 int idx, struct survey_info *survey);
247 static u64 ath5k_get_tsf(struct ieee80211_hw *hw);
248 static void ath5k_set_tsf(struct ieee80211_hw *hw, u64 tsf);
249 static void ath5k_reset_tsf(struct ieee80211_hw *hw);
250 static int ath5k_beacon_update(struct ieee80211_hw *hw,
251                 struct ieee80211_vif *vif);
252 static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
253                 struct ieee80211_vif *vif,
254                 struct ieee80211_bss_conf *bss_conf,
255                 u32 changes);
256 static void ath5k_sw_scan_start(struct ieee80211_hw *hw);
257 static void ath5k_sw_scan_complete(struct ieee80211_hw *hw);
258 static void ath5k_set_coverage_class(struct ieee80211_hw *hw,
259                 u8 coverage_class);
260
261 static const struct ieee80211_ops ath5k_hw_ops = {
262         .tx             = ath5k_tx,
263         .start          = ath5k_start,
264         .stop           = ath5k_stop,
265         .add_interface  = ath5k_add_interface,
266         .remove_interface = ath5k_remove_interface,
267         .config         = ath5k_config,
268         .prepare_multicast = ath5k_prepare_multicast,
269         .configure_filter = ath5k_configure_filter,
270         .set_key        = ath5k_set_key,
271         .get_stats      = ath5k_get_stats,
272         .get_survey     = ath5k_get_survey,
273         .conf_tx        = NULL,
274         .get_tsf        = ath5k_get_tsf,
275         .set_tsf        = ath5k_set_tsf,
276         .reset_tsf      = ath5k_reset_tsf,
277         .bss_info_changed = ath5k_bss_info_changed,
278         .sw_scan_start  = ath5k_sw_scan_start,
279         .sw_scan_complete = ath5k_sw_scan_complete,
280         .set_coverage_class = ath5k_set_coverage_class,
281 };
282
283 /*
284  * Prototypes - Internal functions
285  */
286 /* Attach detach */
287 static int      ath5k_attach(struct pci_dev *pdev,
288                         struct ieee80211_hw *hw);
289 static void     ath5k_detach(struct pci_dev *pdev,
290                         struct ieee80211_hw *hw);
291 /* Channel/mode setup */
292 static inline short ath5k_ieee2mhz(short chan);
293 static unsigned int ath5k_copy_channels(struct ath5k_hw *ah,
294                                 struct ieee80211_channel *channels,
295                                 unsigned int mode,
296                                 unsigned int max);
297 static int      ath5k_setup_bands(struct ieee80211_hw *hw);
298 static int      ath5k_chan_set(struct ath5k_softc *sc,
299                                 struct ieee80211_channel *chan);
300 static void     ath5k_setcurmode(struct ath5k_softc *sc,
301                                 unsigned int mode);
302 static void     ath5k_mode_setup(struct ath5k_softc *sc);
303
304 /* Descriptor setup */
305 static int      ath5k_desc_alloc(struct ath5k_softc *sc,
306                                 struct pci_dev *pdev);
307 static void     ath5k_desc_free(struct ath5k_softc *sc,
308                                 struct pci_dev *pdev);
309 /* Buffers setup */
310 static int      ath5k_rxbuf_setup(struct ath5k_softc *sc,
311                                 struct ath5k_buf *bf);
312 static int      ath5k_txbuf_setup(struct ath5k_softc *sc,
313                                 struct ath5k_buf *bf,
314                                 struct ath5k_txq *txq, int padsize);
315 static inline void ath5k_txbuf_free(struct ath5k_softc *sc,
316                                 struct ath5k_buf *bf)
317 {
318         BUG_ON(!bf);
319         if (!bf->skb)
320                 return;
321         pci_unmap_single(sc->pdev, bf->skbaddr, bf->skb->len,
322                         PCI_DMA_TODEVICE);
323         dev_kfree_skb_any(bf->skb);
324         bf->skb = NULL;
325 }
326
327 static inline void ath5k_rxbuf_free(struct ath5k_softc *sc,
328                                 struct ath5k_buf *bf)
329 {
330         struct ath5k_hw *ah = sc->ah;
331         struct ath_common *common = ath5k_hw_common(ah);
332
333         BUG_ON(!bf);
334         if (!bf->skb)
335                 return;
336         pci_unmap_single(sc->pdev, bf->skbaddr, common->rx_bufsize,
337                         PCI_DMA_FROMDEVICE);
338         dev_kfree_skb_any(bf->skb);
339         bf->skb = NULL;
340 }
341
342
343 /* Queues setup */
344 static struct   ath5k_txq *ath5k_txq_setup(struct ath5k_softc *sc,
345                                 int qtype, int subtype);
346 static int      ath5k_beaconq_setup(struct ath5k_hw *ah);
347 static int      ath5k_beaconq_config(struct ath5k_softc *sc);
348 static void     ath5k_txq_drainq(struct ath5k_softc *sc,
349                                 struct ath5k_txq *txq);
350 static void     ath5k_txq_cleanup(struct ath5k_softc *sc);
351 static void     ath5k_txq_release(struct ath5k_softc *sc);
352 /* Rx handling */
353 static int      ath5k_rx_start(struct ath5k_softc *sc);
354 static void     ath5k_rx_stop(struct ath5k_softc *sc);
355 static unsigned int ath5k_rx_decrypted(struct ath5k_softc *sc,
356                                         struct ath5k_desc *ds,
357                                         struct sk_buff *skb,
358                                         struct ath5k_rx_status *rs);
359 static void     ath5k_tasklet_rx(unsigned long data);
360 /* Tx handling */
361 static void     ath5k_tx_processq(struct ath5k_softc *sc,
362                                 struct ath5k_txq *txq);
363 static void     ath5k_tasklet_tx(unsigned long data);
364 /* Beacon handling */
365 static int      ath5k_beacon_setup(struct ath5k_softc *sc,
366                                         struct ath5k_buf *bf);
367 static void     ath5k_beacon_send(struct ath5k_softc *sc);
368 static void     ath5k_beacon_config(struct ath5k_softc *sc);
369 static void     ath5k_beacon_update_timers(struct ath5k_softc *sc, u64 bc_tsf);
370 static void     ath5k_tasklet_beacon(unsigned long data);
371 static void     ath5k_tasklet_ani(unsigned long data);
372
373 static inline u64 ath5k_extend_tsf(struct ath5k_hw *ah, u32 rstamp)
374 {
375         u64 tsf = ath5k_hw_get_tsf64(ah);
376
377         if ((tsf & 0x7fff) < rstamp)
378                 tsf -= 0x8000;
379
380         return (tsf & ~0x7fff) | rstamp;
381 }
382
383 /* Interrupt handling */
384 static int      ath5k_init(struct ath5k_softc *sc);
385 static int      ath5k_stop_locked(struct ath5k_softc *sc);
386 static int      ath5k_stop_hw(struct ath5k_softc *sc);
387 static irqreturn_t ath5k_intr(int irq, void *dev_id);
388 static void     ath5k_tasklet_reset(unsigned long data);
389
390 static void     ath5k_tasklet_calibrate(unsigned long data);
391
392 /*
393  * Module init/exit functions
394  */
395 static int __init
396 init_ath5k_pci(void)
397 {
398         int ret;
399
400         ath5k_debug_init();
401
402         ret = pci_register_driver(&ath5k_pci_driver);
403         if (ret) {
404                 printk(KERN_ERR "ath5k_pci: can't register pci driver\n");
405                 return ret;
406         }
407
408         return 0;
409 }
410
411 static void __exit
412 exit_ath5k_pci(void)
413 {
414         pci_unregister_driver(&ath5k_pci_driver);
415
416         ath5k_debug_finish();
417 }
418
419 module_init(init_ath5k_pci);
420 module_exit(exit_ath5k_pci);
421
422
423 /********************\
424 * PCI Initialization *
425 \********************/
426
427 static const char *
428 ath5k_chip_name(enum ath5k_srev_type type, u_int16_t val)
429 {
430         const char *name = "xxxxx";
431         unsigned int i;
432
433         for (i = 0; i < ARRAY_SIZE(srev_names); i++) {
434                 if (srev_names[i].sr_type != type)
435                         continue;
436
437                 if ((val & 0xf0) == srev_names[i].sr_val)
438                         name = srev_names[i].sr_name;
439
440                 if ((val & 0xff) == srev_names[i].sr_val) {
441                         name = srev_names[i].sr_name;
442                         break;
443                 }
444         }
445
446         return name;
447 }
448 static unsigned int ath5k_ioread32(void *hw_priv, u32 reg_offset)
449 {
450         struct ath5k_hw *ah = (struct ath5k_hw *) hw_priv;
451         return ath5k_hw_reg_read(ah, reg_offset);
452 }
453
454 static void ath5k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
455 {
456         struct ath5k_hw *ah = (struct ath5k_hw *) hw_priv;
457         ath5k_hw_reg_write(ah, val, reg_offset);
458 }
459
460 static const struct ath_ops ath5k_common_ops = {
461         .read = ath5k_ioread32,
462         .write = ath5k_iowrite32,
463 };
464
465 static int __devinit
466 ath5k_pci_probe(struct pci_dev *pdev,
467                 const struct pci_device_id *id)
468 {
469         void __iomem *mem;
470         struct ath5k_softc *sc;
471         struct ath_common *common;
472         struct ieee80211_hw *hw;
473         int ret;
474         u8 csz;
475
476         ret = pci_enable_device(pdev);
477         if (ret) {
478                 dev_err(&pdev->dev, "can't enable device\n");
479                 goto err;
480         }
481
482         /* XXX 32-bit addressing only */
483         ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
484         if (ret) {
485                 dev_err(&pdev->dev, "32-bit DMA not available\n");
486                 goto err_dis;
487         }
488
489         /*
490          * Cache line size is used to size and align various
491          * structures used to communicate with the hardware.
492          */
493         pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &csz);
494         if (csz == 0) {
495                 /*
496                  * Linux 2.4.18 (at least) writes the cache line size
497                  * register as a 16-bit wide register which is wrong.
498                  * We must have this setup properly for rx buffer
499                  * DMA to work so force a reasonable value here if it
500                  * comes up zero.
501                  */
502                 csz = L1_CACHE_BYTES >> 2;
503                 pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, csz);
504         }
505         /*
506          * The default setting of latency timer yields poor results,
507          * set it to the value used by other systems.  It may be worth
508          * tweaking this setting more.
509          */
510         pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xa8);
511
512         /* Enable bus mastering */
513         pci_set_master(pdev);
514
515         /*
516          * Disable the RETRY_TIMEOUT register (0x41) to keep
517          * PCI Tx retries from interfering with C3 CPU state.
518          */
519         pci_write_config_byte(pdev, 0x41, 0);
520
521         ret = pci_request_region(pdev, 0, "ath5k");
522         if (ret) {
523                 dev_err(&pdev->dev, "cannot reserve PCI memory region\n");
524                 goto err_dis;
525         }
526
527         mem = pci_iomap(pdev, 0, 0);
528         if (!mem) {
529                 dev_err(&pdev->dev, "cannot remap PCI memory region\n") ;
530                 ret = -EIO;
531                 goto err_reg;
532         }
533
534         /*
535          * Allocate hw (mac80211 main struct)
536          * and hw->priv (driver private data)
537          */
538         hw = ieee80211_alloc_hw(sizeof(*sc), &ath5k_hw_ops);
539         if (hw == NULL) {
540                 dev_err(&pdev->dev, "cannot allocate ieee80211_hw\n");
541                 ret = -ENOMEM;
542                 goto err_map;
543         }
544
545         dev_info(&pdev->dev, "registered as '%s'\n", wiphy_name(hw->wiphy));
546
547         /* Initialize driver private data */
548         SET_IEEE80211_DEV(hw, &pdev->dev);
549         hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
550                     IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
551                     IEEE80211_HW_SIGNAL_DBM |
552                     IEEE80211_HW_NOISE_DBM;
553
554         hw->wiphy->interface_modes =
555                 BIT(NL80211_IFTYPE_AP) |
556                 BIT(NL80211_IFTYPE_STATION) |
557                 BIT(NL80211_IFTYPE_ADHOC) |
558                 BIT(NL80211_IFTYPE_MESH_POINT);
559
560         hw->extra_tx_headroom = 2;
561         hw->channel_change_time = 5000;
562         sc = hw->priv;
563         sc->hw = hw;
564         sc->pdev = pdev;
565
566         ath5k_debug_init_device(sc);
567
568         /*
569          * Mark the device as detached to avoid processing
570          * interrupts until setup is complete.
571          */
572         __set_bit(ATH_STAT_INVALID, sc->status);
573
574         sc->iobase = mem; /* So we can unmap it on detach */
575         sc->opmode = NL80211_IFTYPE_STATION;
576         sc->bintval = 1000;
577         mutex_init(&sc->lock);
578         spin_lock_init(&sc->rxbuflock);
579         spin_lock_init(&sc->txbuflock);
580         spin_lock_init(&sc->block);
581
582         /* Set private data */
583         pci_set_drvdata(pdev, hw);
584
585         /* Setup interrupt handler */
586         ret = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
587         if (ret) {
588                 ATH5K_ERR(sc, "request_irq failed\n");
589                 goto err_free;
590         }
591
592         /*If we passed the test malloc a ath5k_hw struct*/
593         sc->ah = kzalloc(sizeof(struct ath5k_hw), GFP_KERNEL);
594         if (!sc->ah) {
595                 ret = -ENOMEM;
596                 ATH5K_ERR(sc, "out of memory\n");
597                 goto err_irq;
598         }
599
600         sc->ah->ah_sc = sc;
601         sc->ah->ah_iobase = sc->iobase;
602         common = ath5k_hw_common(sc->ah);
603         common->ops = &ath5k_common_ops;
604         common->ah = sc->ah;
605         common->hw = hw;
606         common->cachelsz = csz << 2; /* convert to bytes */
607
608         /* Initialize device */
609         ret = ath5k_hw_attach(sc);
610         if (ret) {
611                 goto err_free_ah;
612         }
613
614         /* set up multi-rate retry capabilities */
615         if (sc->ah->ah_version == AR5K_AR5212) {
616                 hw->max_rates = 4;
617                 hw->max_rate_tries = 11;
618         }
619
620         /* Finish private driver data initialization */
621         ret = ath5k_attach(pdev, hw);
622         if (ret)
623                 goto err_ah;
624
625         ATH5K_INFO(sc, "Atheros AR%s chip found (MAC: 0x%x, PHY: 0x%x)\n",
626                         ath5k_chip_name(AR5K_VERSION_MAC, sc->ah->ah_mac_srev),
627                                         sc->ah->ah_mac_srev,
628                                         sc->ah->ah_phy_revision);
629
630         if (!sc->ah->ah_single_chip) {
631                 /* Single chip radio (!RF5111) */
632                 if (sc->ah->ah_radio_5ghz_revision &&
633                         !sc->ah->ah_radio_2ghz_revision) {
634                         /* No 5GHz support -> report 2GHz radio */
635                         if (!test_bit(AR5K_MODE_11A,
636                                 sc->ah->ah_capabilities.cap_mode)) {
637                                 ATH5K_INFO(sc, "RF%s 2GHz radio found (0x%x)\n",
638                                         ath5k_chip_name(AR5K_VERSION_RAD,
639                                                 sc->ah->ah_radio_5ghz_revision),
640                                                 sc->ah->ah_radio_5ghz_revision);
641                         /* No 2GHz support (5110 and some
642                          * 5Ghz only cards) -> report 5Ghz radio */
643                         } else if (!test_bit(AR5K_MODE_11B,
644                                 sc->ah->ah_capabilities.cap_mode)) {
645                                 ATH5K_INFO(sc, "RF%s 5GHz radio found (0x%x)\n",
646                                         ath5k_chip_name(AR5K_VERSION_RAD,
647                                                 sc->ah->ah_radio_5ghz_revision),
648                                                 sc->ah->ah_radio_5ghz_revision);
649                         /* Multiband radio */
650                         } else {
651                                 ATH5K_INFO(sc, "RF%s multiband radio found"
652                                         " (0x%x)\n",
653                                         ath5k_chip_name(AR5K_VERSION_RAD,
654                                                 sc->ah->ah_radio_5ghz_revision),
655                                                 sc->ah->ah_radio_5ghz_revision);
656                         }
657                 }
658                 /* Multi chip radio (RF5111 - RF2111) ->
659                  * report both 2GHz/5GHz radios */
660                 else if (sc->ah->ah_radio_5ghz_revision &&
661                                 sc->ah->ah_radio_2ghz_revision){
662                         ATH5K_INFO(sc, "RF%s 5GHz radio found (0x%x)\n",
663                                 ath5k_chip_name(AR5K_VERSION_RAD,
664                                         sc->ah->ah_radio_5ghz_revision),
665                                         sc->ah->ah_radio_5ghz_revision);
666                         ATH5K_INFO(sc, "RF%s 2GHz radio found (0x%x)\n",
667                                 ath5k_chip_name(AR5K_VERSION_RAD,
668                                         sc->ah->ah_radio_2ghz_revision),
669                                         sc->ah->ah_radio_2ghz_revision);
670                 }
671         }
672
673
674         /* ready to process interrupts */
675         __clear_bit(ATH_STAT_INVALID, sc->status);
676
677         return 0;
678 err_ah:
679         ath5k_hw_detach(sc->ah);
680 err_irq:
681         free_irq(pdev->irq, sc);
682 err_free_ah:
683         kfree(sc->ah);
684 err_free:
685         ieee80211_free_hw(hw);
686 err_map:
687         pci_iounmap(pdev, mem);
688 err_reg:
689         pci_release_region(pdev, 0);
690 err_dis:
691         pci_disable_device(pdev);
692 err:
693         return ret;
694 }
695
696 static void __devexit
697 ath5k_pci_remove(struct pci_dev *pdev)
698 {
699         struct ieee80211_hw *hw = pci_get_drvdata(pdev);
700         struct ath5k_softc *sc = hw->priv;
701
702         ath5k_debug_finish_device(sc);
703         ath5k_detach(pdev, hw);
704         ath5k_hw_detach(sc->ah);
705         kfree(sc->ah);
706         free_irq(pdev->irq, sc);
707         pci_iounmap(pdev, sc->iobase);
708         pci_release_region(pdev, 0);
709         pci_disable_device(pdev);
710         ieee80211_free_hw(hw);
711 }
712
713 #ifdef CONFIG_PM
714 static int ath5k_pci_suspend(struct device *dev)
715 {
716         struct ieee80211_hw *hw = pci_get_drvdata(to_pci_dev(dev));
717         struct ath5k_softc *sc = hw->priv;
718
719         ath5k_led_off(sc);
720         return 0;
721 }
722
723 static int ath5k_pci_resume(struct device *dev)
724 {
725         struct pci_dev *pdev = to_pci_dev(dev);
726         struct ieee80211_hw *hw = pci_get_drvdata(pdev);
727         struct ath5k_softc *sc = hw->priv;
728
729         /*
730          * Suspend/Resume resets the PCI configuration space, so we have to
731          * re-disable the RETRY_TIMEOUT register (0x41) to keep
732          * PCI Tx retries from interfering with C3 CPU state
733          */
734         pci_write_config_byte(pdev, 0x41, 0);
735
736         ath5k_led_enable(sc);
737         return 0;
738 }
739 #endif /* CONFIG_PM */
740
741
742 /***********************\
743 * Driver Initialization *
744 \***********************/
745
746 static int ath5k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request)
747 {
748         struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
749         struct ath5k_softc *sc = hw->priv;
750         struct ath_regulatory *regulatory = ath5k_hw_regulatory(sc->ah);
751
752         return ath_reg_notifier_apply(wiphy, request, regulatory);
753 }
754
755 static int
756 ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
757 {
758         struct ath5k_softc *sc = hw->priv;
759         struct ath5k_hw *ah = sc->ah;
760         struct ath_regulatory *regulatory = ath5k_hw_regulatory(ah);
761         u8 mac[ETH_ALEN] = {};
762         int ret;
763
764         ATH5K_DBG(sc, ATH5K_DEBUG_ANY, "devid 0x%x\n", pdev->device);
765
766         /*
767          * Check if the MAC has multi-rate retry support.
768          * We do this by trying to setup a fake extended
769          * descriptor.  MAC's that don't have support will
770          * return false w/o doing anything.  MAC's that do
771          * support it will return true w/o doing anything.
772          */
773         ret = ah->ah_setup_mrr_tx_desc(ah, NULL, 0, 0, 0, 0, 0, 0);
774         if (ret < 0)
775                 goto err;
776         if (ret > 0)
777                 __set_bit(ATH_STAT_MRRETRY, sc->status);
778
779         /*
780          * Collect the channel list.  The 802.11 layer
781          * is resposible for filtering this list based
782          * on settings like the phy mode and regulatory
783          * domain restrictions.
784          */
785         ret = ath5k_setup_bands(hw);
786         if (ret) {
787                 ATH5K_ERR(sc, "can't get channels\n");
788                 goto err;
789         }
790
791         /* NB: setup here so ath5k_rate_update is happy */
792         if (test_bit(AR5K_MODE_11A, ah->ah_modes))
793                 ath5k_setcurmode(sc, AR5K_MODE_11A);
794         else
795                 ath5k_setcurmode(sc, AR5K_MODE_11B);
796
797         /*
798          * Allocate tx+rx descriptors and populate the lists.
799          */
800         ret = ath5k_desc_alloc(sc, pdev);
801         if (ret) {
802                 ATH5K_ERR(sc, "can't allocate descriptors\n");
803                 goto err;
804         }
805
806         /*
807          * Allocate hardware transmit queues: one queue for
808          * beacon frames and one data queue for each QoS
809          * priority.  Note that hw functions handle reseting
810          * these queues at the needed time.
811          */
812         ret = ath5k_beaconq_setup(ah);
813         if (ret < 0) {
814                 ATH5K_ERR(sc, "can't setup a beacon xmit queue\n");
815                 goto err_desc;
816         }
817         sc->bhalq = ret;
818         sc->cabq = ath5k_txq_setup(sc, AR5K_TX_QUEUE_CAB, 0);
819         if (IS_ERR(sc->cabq)) {
820                 ATH5K_ERR(sc, "can't setup cab queue\n");
821                 ret = PTR_ERR(sc->cabq);
822                 goto err_bhal;
823         }
824
825         sc->txq = ath5k_txq_setup(sc, AR5K_TX_QUEUE_DATA, AR5K_WME_AC_BK);
826         if (IS_ERR(sc->txq)) {
827                 ATH5K_ERR(sc, "can't setup xmit queue\n");
828                 ret = PTR_ERR(sc->txq);
829                 goto err_queues;
830         }
831
832         tasklet_init(&sc->rxtq, ath5k_tasklet_rx, (unsigned long)sc);
833         tasklet_init(&sc->txtq, ath5k_tasklet_tx, (unsigned long)sc);
834         tasklet_init(&sc->restq, ath5k_tasklet_reset, (unsigned long)sc);
835         tasklet_init(&sc->calib, ath5k_tasklet_calibrate, (unsigned long)sc);
836         tasklet_init(&sc->beacontq, ath5k_tasklet_beacon, (unsigned long)sc);
837         tasklet_init(&sc->ani_tasklet, ath5k_tasklet_ani, (unsigned long)sc);
838
839         ret = ath5k_eeprom_read_mac(ah, mac);
840         if (ret) {
841                 ATH5K_ERR(sc, "unable to read address from EEPROM: 0x%04x\n",
842                         sc->pdev->device);
843                 goto err_queues;
844         }
845
846         SET_IEEE80211_PERM_ADDR(hw, mac);
847         /* All MAC address bits matter for ACKs */
848         memcpy(sc->bssidmask, ath_bcast_mac, ETH_ALEN);
849         ath5k_hw_set_bssid_mask(sc->ah, sc->bssidmask);
850
851         regulatory->current_rd = ah->ah_capabilities.cap_eeprom.ee_regdomain;
852         ret = ath_regd_init(regulatory, hw->wiphy, ath5k_reg_notifier);
853         if (ret) {
854                 ATH5K_ERR(sc, "can't initialize regulatory system\n");
855                 goto err_queues;
856         }
857
858         ret = ieee80211_register_hw(hw);
859         if (ret) {
860                 ATH5K_ERR(sc, "can't register ieee80211 hw\n");
861                 goto err_queues;
862         }
863
864         if (!ath_is_world_regd(regulatory))
865                 regulatory_hint(hw->wiphy, regulatory->alpha2);
866
867         ath5k_init_leds(sc);
868
869         return 0;
870 err_queues:
871         ath5k_txq_release(sc);
872 err_bhal:
873         ath5k_hw_release_tx_queue(ah, sc->bhalq);
874 err_desc:
875         ath5k_desc_free(sc, pdev);
876 err:
877         return ret;
878 }
879
880 static void
881 ath5k_detach(struct pci_dev *pdev, struct ieee80211_hw *hw)
882 {
883         struct ath5k_softc *sc = hw->priv;
884
885         /*
886          * NB: the order of these is important:
887          * o call the 802.11 layer before detaching ath5k_hw to
888          *   insure callbacks into the driver to delete global
889          *   key cache entries can be handled
890          * o reclaim the tx queue data structures after calling
891          *   the 802.11 layer as we'll get called back to reclaim
892          *   node state and potentially want to use them
893          * o to cleanup the tx queues the hal is called, so detach
894          *   it last
895          * XXX: ??? detach ath5k_hw ???
896          * Other than that, it's straightforward...
897          */
898         ieee80211_unregister_hw(hw);
899         ath5k_desc_free(sc, pdev);
900         ath5k_txq_release(sc);
901         ath5k_hw_release_tx_queue(sc->ah, sc->bhalq);
902         ath5k_unregister_leds(sc);
903
904         /*
905          * NB: can't reclaim these until after ieee80211_ifdetach
906          * returns because we'll get called back to reclaim node
907          * state and potentially want to use them.
908          */
909 }
910
911
912
913
914 /********************\
915 * Channel/mode setup *
916 \********************/
917
918 /*
919  * Convert IEEE channel number to MHz frequency.
920  */
921 static inline short
922 ath5k_ieee2mhz(short chan)
923 {
924         if (chan <= 14 || chan >= 27)
925                 return ieee80211chan2mhz(chan);
926         else
927                 return 2212 + chan * 20;
928 }
929
930 /*
931  * Returns true for the channel numbers used without all_channels modparam.
932  */
933 static bool ath5k_is_standard_channel(short chan)
934 {
935         return ((chan <= 14) ||
936                 /* UNII 1,2 */
937                 ((chan & 3) == 0 && chan >= 36 && chan <= 64) ||
938                 /* midband */
939                 ((chan & 3) == 0 && chan >= 100 && chan <= 140) ||
940                 /* UNII-3 */
941                 ((chan & 3) == 1 && chan >= 149 && chan <= 165));
942 }
943
944 static unsigned int
945 ath5k_copy_channels(struct ath5k_hw *ah,
946                 struct ieee80211_channel *channels,
947                 unsigned int mode,
948                 unsigned int max)
949 {
950         unsigned int i, count, size, chfreq, freq, ch;
951
952         if (!test_bit(mode, ah->ah_modes))
953                 return 0;
954
955         switch (mode) {
956         case AR5K_MODE_11A:
957         case AR5K_MODE_11A_TURBO:
958                 /* 1..220, but 2GHz frequencies are filtered by check_channel */
959                 size = 220 ;
960                 chfreq = CHANNEL_5GHZ;
961                 break;
962         case AR5K_MODE_11B:
963         case AR5K_MODE_11G:
964         case AR5K_MODE_11G_TURBO:
965                 size = 26;
966                 chfreq = CHANNEL_2GHZ;
967                 break;
968         default:
969                 ATH5K_WARN(ah->ah_sc, "bad mode, not copying channels\n");
970                 return 0;
971         }
972
973         for (i = 0, count = 0; i < size && max > 0; i++) {
974                 ch = i + 1 ;
975                 freq = ath5k_ieee2mhz(ch);
976
977                 /* Check if channel is supported by the chipset */
978                 if (!ath5k_channel_ok(ah, freq, chfreq))
979                         continue;
980
981                 if (!modparam_all_channels && !ath5k_is_standard_channel(ch))
982                         continue;
983
984                 /* Write channel info and increment counter */
985                 channels[count].center_freq = freq;
986                 channels[count].band = (chfreq == CHANNEL_2GHZ) ?
987                         IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
988                 switch (mode) {
989                 case AR5K_MODE_11A:
990                 case AR5K_MODE_11G:
991                         channels[count].hw_value = chfreq | CHANNEL_OFDM;
992                         break;
993                 case AR5K_MODE_11A_TURBO:
994                 case AR5K_MODE_11G_TURBO:
995                         channels[count].hw_value = chfreq |
996                                 CHANNEL_OFDM | CHANNEL_TURBO;
997                         break;
998                 case AR5K_MODE_11B:
999                         channels[count].hw_value = CHANNEL_B;
1000                 }
1001
1002                 count++;
1003                 max--;
1004         }
1005
1006         return count;
1007 }
1008
1009 static void
1010 ath5k_setup_rate_idx(struct ath5k_softc *sc, struct ieee80211_supported_band *b)
1011 {
1012         u8 i;
1013
1014         for (i = 0; i < AR5K_MAX_RATES; i++)
1015                 sc->rate_idx[b->band][i] = -1;
1016
1017         for (i = 0; i < b->n_bitrates; i++) {
1018                 sc->rate_idx[b->band][b->bitrates[i].hw_value] = i;
1019                 if (b->bitrates[i].hw_value_short)
1020                         sc->rate_idx[b->band][b->bitrates[i].hw_value_short] = i;
1021         }
1022 }
1023
1024 static int
1025 ath5k_setup_bands(struct ieee80211_hw *hw)
1026 {
1027         struct ath5k_softc *sc = hw->priv;
1028         struct ath5k_hw *ah = sc->ah;
1029         struct ieee80211_supported_band *sband;
1030         int max_c, count_c = 0;
1031         int i;
1032
1033         BUILD_BUG_ON(ARRAY_SIZE(sc->sbands) < IEEE80211_NUM_BANDS);
1034         max_c = ARRAY_SIZE(sc->channels);
1035
1036         /* 2GHz band */
1037         sband = &sc->sbands[IEEE80211_BAND_2GHZ];
1038         sband->band = IEEE80211_BAND_2GHZ;
1039         sband->bitrates = &sc->rates[IEEE80211_BAND_2GHZ][0];
1040
1041         if (test_bit(AR5K_MODE_11G, sc->ah->ah_capabilities.cap_mode)) {
1042                 /* G mode */
1043                 memcpy(sband->bitrates, &ath5k_rates[0],
1044                        sizeof(struct ieee80211_rate) * 12);
1045                 sband->n_bitrates = 12;
1046
1047                 sband->channels = sc->channels;
1048                 sband->n_channels = ath5k_copy_channels(ah, sband->channels,
1049                                         AR5K_MODE_11G, max_c);
1050
1051                 hw->wiphy->bands[IEEE80211_BAND_2GHZ] = sband;
1052                 count_c = sband->n_channels;
1053                 max_c -= count_c;
1054         } else if (test_bit(AR5K_MODE_11B, sc->ah->ah_capabilities.cap_mode)) {
1055                 /* B mode */
1056                 memcpy(sband->bitrates, &ath5k_rates[0],
1057                        sizeof(struct ieee80211_rate) * 4);
1058                 sband->n_bitrates = 4;
1059
1060                 /* 5211 only supports B rates and uses 4bit rate codes
1061                  * (e.g normally we have 0x1B for 1M, but on 5211 we have 0x0B)
1062                  * fix them up here:
1063                  */
1064                 if (ah->ah_version == AR5K_AR5211) {
1065                         for (i = 0; i < 4; i++) {
1066                                 sband->bitrates[i].hw_value =
1067                                         sband->bitrates[i].hw_value & 0xF;
1068                                 sband->bitrates[i].hw_value_short =
1069                                         sband->bitrates[i].hw_value_short & 0xF;
1070                         }
1071                 }
1072
1073                 sband->channels = sc->channels;
1074                 sband->n_channels = ath5k_copy_channels(ah, sband->channels,
1075                                         AR5K_MODE_11B, max_c);
1076
1077                 hw->wiphy->bands[IEEE80211_BAND_2GHZ] = sband;
1078                 count_c = sband->n_channels;
1079                 max_c -= count_c;
1080         }
1081         ath5k_setup_rate_idx(sc, sband);
1082
1083         /* 5GHz band, A mode */
1084         if (test_bit(AR5K_MODE_11A, sc->ah->ah_capabilities.cap_mode)) {
1085                 sband = &sc->sbands[IEEE80211_BAND_5GHZ];
1086                 sband->band = IEEE80211_BAND_5GHZ;
1087                 sband->bitrates = &sc->rates[IEEE80211_BAND_5GHZ][0];
1088
1089                 memcpy(sband->bitrates, &ath5k_rates[4],
1090                        sizeof(struct ieee80211_rate) * 8);
1091                 sband->n_bitrates = 8;
1092
1093                 sband->channels = &sc->channels[count_c];
1094                 sband->n_channels = ath5k_copy_channels(ah, sband->channels,
1095                                         AR5K_MODE_11A, max_c);
1096
1097                 hw->wiphy->bands[IEEE80211_BAND_5GHZ] = sband;
1098         }
1099         ath5k_setup_rate_idx(sc, sband);
1100
1101         ath5k_debug_dump_bands(sc);
1102
1103         return 0;
1104 }
1105
1106 /*
1107  * Set/change channels. We always reset the chip.
1108  * To accomplish this we must first cleanup any pending DMA,
1109  * then restart stuff after a la  ath5k_init.
1110  *
1111  * Called with sc->lock.
1112  */
1113 static int
1114 ath5k_chan_set(struct ath5k_softc *sc, struct ieee80211_channel *chan)
1115 {
1116         ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "(%u MHz) -> (%u MHz)\n",
1117                 sc->curchan->center_freq, chan->center_freq);
1118
1119         /*
1120          * To switch channels clear any pending DMA operations;
1121          * wait long enough for the RX fifo to drain, reset the
1122          * hardware at the new frequency, and then re-enable
1123          * the relevant bits of the h/w.
1124          */
1125         return ath5k_reset(sc, chan);
1126 }
1127
1128 static void
1129 ath5k_setcurmode(struct ath5k_softc *sc, unsigned int mode)
1130 {
1131         sc->curmode = mode;
1132
1133         if (mode == AR5K_MODE_11A) {
1134                 sc->curband = &sc->sbands[IEEE80211_BAND_5GHZ];
1135         } else {
1136                 sc->curband = &sc->sbands[IEEE80211_BAND_2GHZ];
1137         }
1138 }
1139
1140 static void
1141 ath5k_mode_setup(struct ath5k_softc *sc)
1142 {
1143         struct ath5k_hw *ah = sc->ah;
1144         u32 rfilt;
1145
1146         /* configure rx filter */
1147         rfilt = sc->filter_flags;
1148         ath5k_hw_set_rx_filter(ah, rfilt);
1149
1150         if (ath5k_hw_hasbssidmask(ah))
1151                 ath5k_hw_set_bssid_mask(ah, sc->bssidmask);
1152
1153         /* configure operational mode */
1154         ath5k_hw_set_opmode(ah, sc->opmode);
1155
1156         ATH5K_DBG(sc, ATH5K_DEBUG_MODE, "mode setup opmode %d\n", sc->opmode);
1157         ATH5K_DBG(sc, ATH5K_DEBUG_MODE, "RX filter 0x%x\n", rfilt);
1158 }
1159
1160 static inline int
1161 ath5k_hw_to_driver_rix(struct ath5k_softc *sc, int hw_rix)
1162 {
1163         int rix;
1164
1165         /* return base rate on errors */
1166         if (WARN(hw_rix < 0 || hw_rix >= AR5K_MAX_RATES,
1167                         "hw_rix out of bounds: %x\n", hw_rix))
1168                 return 0;
1169
1170         rix = sc->rate_idx[sc->curband->band][hw_rix];
1171         if (WARN(rix < 0, "invalid hw_rix: %x\n", hw_rix))
1172                 rix = 0;
1173
1174         return rix;
1175 }
1176
1177 /***************\
1178 * Buffers setup *
1179 \***************/
1180
1181 static
1182 struct sk_buff *ath5k_rx_skb_alloc(struct ath5k_softc *sc, dma_addr_t *skb_addr)
1183 {
1184         struct ath_common *common = ath5k_hw_common(sc->ah);
1185         struct sk_buff *skb;
1186
1187         /*
1188          * Allocate buffer with headroom_needed space for the
1189          * fake physical layer header at the start.
1190          */
1191         skb = ath_rxbuf_alloc(common,
1192                               common->rx_bufsize,
1193                               GFP_ATOMIC);
1194
1195         if (!skb) {
1196                 ATH5K_ERR(sc, "can't alloc skbuff of size %u\n",
1197                                 common->rx_bufsize);
1198                 return NULL;
1199         }
1200
1201         *skb_addr = pci_map_single(sc->pdev,
1202                                    skb->data, common->rx_bufsize,
1203                                    PCI_DMA_FROMDEVICE);
1204         if (unlikely(pci_dma_mapping_error(sc->pdev, *skb_addr))) {
1205                 ATH5K_ERR(sc, "%s: DMA mapping failed\n", __func__);
1206                 dev_kfree_skb(skb);
1207                 return NULL;
1208         }
1209         return skb;
1210 }
1211
1212 static int
1213 ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
1214 {
1215         struct ath5k_hw *ah = sc->ah;
1216         struct sk_buff *skb = bf->skb;
1217         struct ath5k_desc *ds;
1218
1219         if (!skb) {
1220                 skb = ath5k_rx_skb_alloc(sc, &bf->skbaddr);
1221                 if (!skb)
1222                         return -ENOMEM;
1223                 bf->skb = skb;
1224         }
1225
1226         /*
1227          * Setup descriptors.  For receive we always terminate
1228          * the descriptor list with a self-linked entry so we'll
1229          * not get overrun under high load (as can happen with a
1230          * 5212 when ANI processing enables PHY error frames).
1231          *
1232          * To insure the last descriptor is self-linked we create
1233          * each descriptor as self-linked and add it to the end.  As
1234          * each additional descriptor is added the previous self-linked
1235          * entry is ``fixed'' naturally.  This should be safe even
1236          * if DMA is happening.  When processing RX interrupts we
1237          * never remove/process the last, self-linked, entry on the
1238          * descriptor list.  This insures the hardware always has
1239          * someplace to write a new frame.
1240          */
1241         ds = bf->desc;
1242         ds->ds_link = bf->daddr;        /* link to self */
1243         ds->ds_data = bf->skbaddr;
1244         ah->ah_setup_rx_desc(ah, ds,
1245                 skb_tailroom(skb),      /* buffer size */
1246                 0);
1247
1248         if (sc->rxlink != NULL)
1249                 *sc->rxlink = bf->daddr;
1250         sc->rxlink = &ds->ds_link;
1251         return 0;
1252 }
1253
1254 static enum ath5k_pkt_type get_hw_packet_type(struct sk_buff *skb)
1255 {
1256         struct ieee80211_hdr *hdr;
1257         enum ath5k_pkt_type htype;
1258         __le16 fc;
1259
1260         hdr = (struct ieee80211_hdr *)skb->data;
1261         fc = hdr->frame_control;
1262
1263         if (ieee80211_is_beacon(fc))
1264                 htype = AR5K_PKT_TYPE_BEACON;
1265         else if (ieee80211_is_probe_resp(fc))
1266                 htype = AR5K_PKT_TYPE_PROBE_RESP;
1267         else if (ieee80211_is_atim(fc))
1268                 htype = AR5K_PKT_TYPE_ATIM;
1269         else if (ieee80211_is_pspoll(fc))
1270                 htype = AR5K_PKT_TYPE_PSPOLL;
1271         else
1272                 htype = AR5K_PKT_TYPE_NORMAL;
1273
1274         return htype;
1275 }
1276
1277 static int
1278 ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
1279                   struct ath5k_txq *txq, int padsize)
1280 {
1281         struct ath5k_hw *ah = sc->ah;
1282         struct ath5k_desc *ds = bf->desc;
1283         struct sk_buff *skb = bf->skb;
1284         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1285         unsigned int pktlen, flags, keyidx = AR5K_TXKEYIX_INVALID;
1286         struct ieee80211_rate *rate;
1287         unsigned int mrr_rate[3], mrr_tries[3];
1288         int i, ret;
1289         u16 hw_rate;
1290         u16 cts_rate = 0;
1291         u16 duration = 0;
1292         u8 rc_flags;
1293
1294         flags = AR5K_TXDESC_INTREQ | AR5K_TXDESC_CLRDMASK;
1295
1296         /* XXX endianness */
1297         bf->skbaddr = pci_map_single(sc->pdev, skb->data, skb->len,
1298                         PCI_DMA_TODEVICE);
1299
1300         rate = ieee80211_get_tx_rate(sc->hw, info);
1301
1302         if (info->flags & IEEE80211_TX_CTL_NO_ACK)
1303                 flags |= AR5K_TXDESC_NOACK;
1304
1305         rc_flags = info->control.rates[0].flags;
1306         hw_rate = (rc_flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) ?
1307                 rate->hw_value_short : rate->hw_value;
1308
1309         pktlen = skb->len;
1310
1311         /* FIXME: If we are in g mode and rate is a CCK rate
1312          * subtract ah->ah_txpower.txp_cck_ofdm_pwr_delta
1313          * from tx power (value is in dB units already) */
1314         if (info->control.hw_key) {
1315                 keyidx = info->control.hw_key->hw_key_idx;
1316                 pktlen += info->control.hw_key->icv_len;
1317         }
1318         if (rc_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
1319                 flags |= AR5K_TXDESC_RTSENA;
1320                 cts_rate = ieee80211_get_rts_cts_rate(sc->hw, info)->hw_value;
1321                 duration = le16_to_cpu(ieee80211_rts_duration(sc->hw,
1322                         sc->vif, pktlen, info));
1323         }
1324         if (rc_flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
1325                 flags |= AR5K_TXDESC_CTSENA;
1326                 cts_rate = ieee80211_get_rts_cts_rate(sc->hw, info)->hw_value;
1327                 duration = le16_to_cpu(ieee80211_ctstoself_duration(sc->hw,
1328                         sc->vif, pktlen, info));
1329         }
1330         ret = ah->ah_setup_tx_desc(ah, ds, pktlen,
1331                 ieee80211_get_hdrlen_from_skb(skb), padsize,
1332                 get_hw_packet_type(skb),
1333                 (sc->power_level * 2),
1334                 hw_rate,
1335                 info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags,
1336                 cts_rate, duration);
1337         if (ret)
1338                 goto err_unmap;
1339
1340         memset(mrr_rate, 0, sizeof(mrr_rate));
1341         memset(mrr_tries, 0, sizeof(mrr_tries));
1342         for (i = 0; i < 3; i++) {
1343                 rate = ieee80211_get_alt_retry_rate(sc->hw, info, i);
1344                 if (!rate)
1345                         break;
1346
1347                 mrr_rate[i] = rate->hw_value;
1348                 mrr_tries[i] = info->control.rates[i + 1].count;
1349         }
1350
1351         ah->ah_setup_mrr_tx_desc(ah, ds,
1352                 mrr_rate[0], mrr_tries[0],
1353                 mrr_rate[1], mrr_tries[1],
1354                 mrr_rate[2], mrr_tries[2]);
1355
1356         ds->ds_link = 0;
1357         ds->ds_data = bf->skbaddr;
1358
1359         spin_lock_bh(&txq->lock);
1360         list_add_tail(&bf->list, &txq->q);
1361         if (txq->link == NULL) /* is this first packet? */
1362                 ath5k_hw_set_txdp(ah, txq->qnum, bf->daddr);
1363         else /* no, so only link it */
1364                 *txq->link = bf->daddr;
1365
1366         txq->link = &ds->ds_link;
1367         ath5k_hw_start_tx_dma(ah, txq->qnum);
1368         mmiowb();
1369         spin_unlock_bh(&txq->lock);
1370
1371         return 0;
1372 err_unmap:
1373         pci_unmap_single(sc->pdev, bf->skbaddr, skb->len, PCI_DMA_TODEVICE);
1374         return ret;
1375 }
1376
1377 /*******************\
1378 * Descriptors setup *
1379 \*******************/
1380
1381 static int
1382 ath5k_desc_alloc(struct ath5k_softc *sc, struct pci_dev *pdev)
1383 {
1384         struct ath5k_desc *ds;
1385         struct ath5k_buf *bf;
1386         dma_addr_t da;
1387         unsigned int i;
1388         int ret;
1389
1390         /* allocate descriptors */
1391         sc->desc_len = sizeof(struct ath5k_desc) *
1392                         (ATH_TXBUF + ATH_RXBUF + ATH_BCBUF + 1);
1393         sc->desc = pci_alloc_consistent(pdev, sc->desc_len, &sc->desc_daddr);
1394         if (sc->desc == NULL) {
1395                 ATH5K_ERR(sc, "can't allocate descriptors\n");
1396                 ret = -ENOMEM;
1397                 goto err;
1398         }
1399         ds = sc->desc;
1400         da = sc->desc_daddr;
1401         ATH5K_DBG(sc, ATH5K_DEBUG_ANY, "DMA map: %p (%zu) -> %llx\n",
1402                 ds, sc->desc_len, (unsigned long long)sc->desc_daddr);
1403
1404         bf = kcalloc(1 + ATH_TXBUF + ATH_RXBUF + ATH_BCBUF,
1405                         sizeof(struct ath5k_buf), GFP_KERNEL);
1406         if (bf == NULL) {
1407                 ATH5K_ERR(sc, "can't allocate bufptr\n");
1408                 ret = -ENOMEM;
1409                 goto err_free;
1410         }
1411         sc->bufptr = bf;
1412
1413         INIT_LIST_HEAD(&sc->rxbuf);
1414         for (i = 0; i < ATH_RXBUF; i++, bf++, ds++, da += sizeof(*ds)) {
1415                 bf->desc = ds;
1416                 bf->daddr = da;
1417                 list_add_tail(&bf->list, &sc->rxbuf);
1418         }
1419
1420         INIT_LIST_HEAD(&sc->txbuf);
1421         sc->txbuf_len = ATH_TXBUF;
1422         for (i = 0; i < ATH_TXBUF; i++, bf++, ds++,
1423                         da += sizeof(*ds)) {
1424                 bf->desc = ds;
1425                 bf->daddr = da;
1426                 list_add_tail(&bf->list, &sc->txbuf);
1427         }
1428
1429         /* beacon buffer */
1430         bf->desc = ds;
1431         bf->daddr = da;
1432         sc->bbuf = bf;
1433
1434         return 0;
1435 err_free:
1436         pci_free_consistent(pdev, sc->desc_len, sc->desc, sc->desc_daddr);
1437 err:
1438         sc->desc = NULL;
1439         return ret;
1440 }
1441
1442 static void
1443 ath5k_desc_free(struct ath5k_softc *sc, struct pci_dev *pdev)
1444 {
1445         struct ath5k_buf *bf;
1446
1447         ath5k_txbuf_free(sc, sc->bbuf);
1448         list_for_each_entry(bf, &sc->txbuf, list)
1449                 ath5k_txbuf_free(sc, bf);
1450         list_for_each_entry(bf, &sc->rxbuf, list)
1451                 ath5k_rxbuf_free(sc, bf);
1452
1453         /* Free memory associated with all descriptors */
1454         pci_free_consistent(pdev, sc->desc_len, sc->desc, sc->desc_daddr);
1455
1456         kfree(sc->bufptr);
1457         sc->bufptr = NULL;
1458 }
1459
1460
1461
1462
1463
1464 /**************\
1465 * Queues setup *
1466 \**************/
1467
1468 static struct ath5k_txq *
1469 ath5k_txq_setup(struct ath5k_softc *sc,
1470                 int qtype, int subtype)
1471 {
1472         struct ath5k_hw *ah = sc->ah;
1473         struct ath5k_txq *txq;
1474         struct ath5k_txq_info qi = {
1475                 .tqi_subtype = subtype,
1476                 .tqi_aifs = AR5K_TXQ_USEDEFAULT,
1477                 .tqi_cw_min = AR5K_TXQ_USEDEFAULT,
1478                 .tqi_cw_max = AR5K_TXQ_USEDEFAULT
1479         };
1480         int qnum;
1481
1482         /*
1483          * Enable interrupts only for EOL and DESC conditions.
1484          * We mark tx descriptors to receive a DESC interrupt
1485          * when a tx queue gets deep; otherwise waiting for the
1486          * EOL to reap descriptors.  Note that this is done to
1487          * reduce interrupt load and this only defers reaping
1488          * descriptors, never transmitting frames.  Aside from
1489          * reducing interrupts this also permits more concurrency.
1490          * The only potential downside is if the tx queue backs
1491          * up in which case the top half of the kernel may backup
1492          * due to a lack of tx descriptors.
1493          */
1494         qi.tqi_flags = AR5K_TXQ_FLAG_TXEOLINT_ENABLE |
1495                                 AR5K_TXQ_FLAG_TXDESCINT_ENABLE;
1496         qnum = ath5k_hw_setup_tx_queue(ah, qtype, &qi);
1497         if (qnum < 0) {
1498                 /*
1499                  * NB: don't print a message, this happens
1500                  * normally on parts with too few tx queues
1501                  */
1502                 return ERR_PTR(qnum);
1503         }
1504         if (qnum >= ARRAY_SIZE(sc->txqs)) {
1505                 ATH5K_ERR(sc, "hw qnum %u out of range, max %tu!\n",
1506                         qnum, ARRAY_SIZE(sc->txqs));
1507                 ath5k_hw_release_tx_queue(ah, qnum);
1508                 return ERR_PTR(-EINVAL);
1509         }
1510         txq = &sc->txqs[qnum];
1511         if (!txq->setup) {
1512                 txq->qnum = qnum;
1513                 txq->link = NULL;
1514                 INIT_LIST_HEAD(&txq->q);
1515                 spin_lock_init(&txq->lock);
1516                 txq->setup = true;
1517         }
1518         return &sc->txqs[qnum];
1519 }
1520
1521 static int
1522 ath5k_beaconq_setup(struct ath5k_hw *ah)
1523 {
1524         struct ath5k_txq_info qi = {
1525                 .tqi_aifs = AR5K_TXQ_USEDEFAULT,
1526                 .tqi_cw_min = AR5K_TXQ_USEDEFAULT,
1527                 .tqi_cw_max = AR5K_TXQ_USEDEFAULT,
1528                 /* NB: for dynamic turbo, don't enable any other interrupts */
1529                 .tqi_flags = AR5K_TXQ_FLAG_TXDESCINT_ENABLE
1530         };
1531
1532         return ath5k_hw_setup_tx_queue(ah, AR5K_TX_QUEUE_BEACON, &qi);
1533 }
1534
1535 static int
1536 ath5k_beaconq_config(struct ath5k_softc *sc)
1537 {
1538         struct ath5k_hw *ah = sc->ah;
1539         struct ath5k_txq_info qi;
1540         int ret;
1541
1542         ret = ath5k_hw_get_tx_queueprops(ah, sc->bhalq, &qi);
1543         if (ret)
1544                 goto err;
1545
1546         if (sc->opmode == NL80211_IFTYPE_AP ||
1547                 sc->opmode == NL80211_IFTYPE_MESH_POINT) {
1548                 /*
1549                  * Always burst out beacon and CAB traffic
1550                  * (aifs = cwmin = cwmax = 0)
1551                  */
1552                 qi.tqi_aifs = 0;
1553                 qi.tqi_cw_min = 0;
1554                 qi.tqi_cw_max = 0;
1555         } else if (sc->opmode == NL80211_IFTYPE_ADHOC) {
1556                 /*
1557                  * Adhoc mode; backoff between 0 and (2 * cw_min).
1558                  */
1559                 qi.tqi_aifs = 0;
1560                 qi.tqi_cw_min = 0;
1561                 qi.tqi_cw_max = 2 * ah->ah_cw_min;
1562         }
1563
1564         ATH5K_DBG(sc, ATH5K_DEBUG_BEACON,
1565                 "beacon queueprops tqi_aifs:%d tqi_cw_min:%d tqi_cw_max:%d\n",
1566                 qi.tqi_aifs, qi.tqi_cw_min, qi.tqi_cw_max);
1567
1568         ret = ath5k_hw_set_tx_queueprops(ah, sc->bhalq, &qi);
1569         if (ret) {
1570                 ATH5K_ERR(sc, "%s: unable to update parameters for beacon "
1571                         "hardware queue!\n", __func__);
1572                 goto err;
1573         }
1574         ret = ath5k_hw_reset_tx_queue(ah, sc->bhalq); /* push to h/w */
1575         if (ret)
1576                 goto err;
1577
1578         /* reconfigure cabq with ready time to 80% of beacon_interval */
1579         ret = ath5k_hw_get_tx_queueprops(ah, AR5K_TX_QUEUE_ID_CAB, &qi);
1580         if (ret)
1581                 goto err;
1582
1583         qi.tqi_ready_time = (sc->bintval * 80) / 100;
1584         ret = ath5k_hw_set_tx_queueprops(ah, AR5K_TX_QUEUE_ID_CAB, &qi);
1585         if (ret)
1586                 goto err;
1587
1588         ret = ath5k_hw_reset_tx_queue(ah, AR5K_TX_QUEUE_ID_CAB);
1589 err:
1590         return ret;
1591 }
1592
1593 static void
1594 ath5k_txq_drainq(struct ath5k_softc *sc, struct ath5k_txq *txq)
1595 {
1596         struct ath5k_buf *bf, *bf0;
1597
1598         /*
1599          * NB: this assumes output has been stopped and
1600          *     we do not need to block ath5k_tx_tasklet
1601          */
1602         spin_lock_bh(&txq->lock);
1603         list_for_each_entry_safe(bf, bf0, &txq->q, list) {
1604                 ath5k_debug_printtxbuf(sc, bf);
1605
1606                 ath5k_txbuf_free(sc, bf);
1607
1608                 spin_lock_bh(&sc->txbuflock);
1609                 list_move_tail(&bf->list, &sc->txbuf);
1610                 sc->txbuf_len++;
1611                 spin_unlock_bh(&sc->txbuflock);
1612         }
1613         txq->link = NULL;
1614         spin_unlock_bh(&txq->lock);
1615 }
1616
1617 /*
1618  * Drain the transmit queues and reclaim resources.
1619  */
1620 static void
1621 ath5k_txq_cleanup(struct ath5k_softc *sc)
1622 {
1623         struct ath5k_hw *ah = sc->ah;
1624         unsigned int i;
1625
1626         /* XXX return value */
1627         if (likely(!test_bit(ATH_STAT_INVALID, sc->status))) {
1628                 /* don't touch the hardware if marked invalid */
1629                 ath5k_hw_stop_tx_dma(ah, sc->bhalq);
1630                 ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "beacon queue %x\n",
1631                         ath5k_hw_get_txdp(ah, sc->bhalq));
1632                 for (i = 0; i < ARRAY_SIZE(sc->txqs); i++)
1633                         if (sc->txqs[i].setup) {
1634                                 ath5k_hw_stop_tx_dma(ah, sc->txqs[i].qnum);
1635                                 ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "txq [%u] %x, "
1636                                         "link %p\n",
1637                                         sc->txqs[i].qnum,
1638                                         ath5k_hw_get_txdp(ah,
1639                                                         sc->txqs[i].qnum),
1640                                         sc->txqs[i].link);
1641                         }
1642         }
1643
1644         for (i = 0; i < ARRAY_SIZE(sc->txqs); i++)
1645                 if (sc->txqs[i].setup)
1646                         ath5k_txq_drainq(sc, &sc->txqs[i]);
1647 }
1648
1649 static void
1650 ath5k_txq_release(struct ath5k_softc *sc)
1651 {
1652         struct ath5k_txq *txq = sc->txqs;
1653         unsigned int i;
1654
1655         for (i = 0; i < ARRAY_SIZE(sc->txqs); i++, txq++)
1656                 if (txq->setup) {
1657                         ath5k_hw_release_tx_queue(sc->ah, txq->qnum);
1658                         txq->setup = false;
1659                 }
1660 }
1661
1662
1663
1664
1665 /*************\
1666 * RX Handling *
1667 \*************/
1668
1669 /*
1670  * Enable the receive h/w following a reset.
1671  */
1672 static int
1673 ath5k_rx_start(struct ath5k_softc *sc)
1674 {
1675         struct ath5k_hw *ah = sc->ah;
1676         struct ath_common *common = ath5k_hw_common(ah);
1677         struct ath5k_buf *bf;
1678         int ret;
1679
1680         common->rx_bufsize = roundup(IEEE80211_MAX_LEN, common->cachelsz);
1681
1682         ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "cachelsz %u rx_bufsize %u\n",
1683                   common->cachelsz, common->rx_bufsize);
1684
1685         spin_lock_bh(&sc->rxbuflock);
1686         sc->rxlink = NULL;
1687         list_for_each_entry(bf, &sc->rxbuf, list) {
1688                 ret = ath5k_rxbuf_setup(sc, bf);
1689                 if (ret != 0) {
1690                         spin_unlock_bh(&sc->rxbuflock);
1691                         goto err;
1692                 }
1693         }
1694         bf = list_first_entry(&sc->rxbuf, struct ath5k_buf, list);
1695         ath5k_hw_set_rxdp(ah, bf->daddr);
1696         spin_unlock_bh(&sc->rxbuflock);
1697
1698         ath5k_hw_start_rx_dma(ah);      /* enable recv descriptors */
1699         ath5k_mode_setup(sc);           /* set filters, etc. */
1700         ath5k_hw_start_rx_pcu(ah);      /* re-enable PCU/DMA engine */
1701
1702         return 0;
1703 err:
1704         return ret;
1705 }
1706
1707 /*
1708  * Disable the receive h/w in preparation for a reset.
1709  */
1710 static void
1711 ath5k_rx_stop(struct ath5k_softc *sc)
1712 {
1713         struct ath5k_hw *ah = sc->ah;
1714
1715         ath5k_hw_stop_rx_pcu(ah);       /* disable PCU */
1716         ath5k_hw_set_rx_filter(ah, 0);  /* clear recv filter */
1717         ath5k_hw_stop_rx_dma(ah);       /* disable DMA engine */
1718
1719         ath5k_debug_printrxbuffs(sc, ah);
1720
1721         sc->rxlink = NULL;              /* just in case */
1722 }
1723
1724 static unsigned int
1725 ath5k_rx_decrypted(struct ath5k_softc *sc, struct ath5k_desc *ds,
1726                 struct sk_buff *skb, struct ath5k_rx_status *rs)
1727 {
1728         struct ath5k_hw *ah = sc->ah;
1729         struct ath_common *common = ath5k_hw_common(ah);
1730         struct ieee80211_hdr *hdr = (void *)skb->data;
1731         unsigned int keyix, hlen;
1732
1733         if (!(rs->rs_status & AR5K_RXERR_DECRYPT) &&
1734                         rs->rs_keyix != AR5K_RXKEYIX_INVALID)
1735                 return RX_FLAG_DECRYPTED;
1736
1737         /* Apparently when a default key is used to decrypt the packet
1738            the hw does not set the index used to decrypt.  In such cases
1739            get the index from the packet. */
1740         hlen = ieee80211_hdrlen(hdr->frame_control);
1741         if (ieee80211_has_protected(hdr->frame_control) &&
1742             !(rs->rs_status & AR5K_RXERR_DECRYPT) &&
1743             skb->len >= hlen + 4) {
1744                 keyix = skb->data[hlen + 3] >> 6;
1745
1746                 if (test_bit(keyix, common->keymap))
1747                         return RX_FLAG_DECRYPTED;
1748         }
1749
1750         return 0;
1751 }
1752
1753
1754 static void
1755 ath5k_check_ibss_tsf(struct ath5k_softc *sc, struct sk_buff *skb,
1756                      struct ieee80211_rx_status *rxs)
1757 {
1758         struct ath_common *common = ath5k_hw_common(sc->ah);
1759         u64 tsf, bc_tstamp;
1760         u32 hw_tu;
1761         struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
1762
1763         if (ieee80211_is_beacon(mgmt->frame_control) &&
1764             le16_to_cpu(mgmt->u.beacon.capab_info) & WLAN_CAPABILITY_IBSS &&
1765             memcmp(mgmt->bssid, common->curbssid, ETH_ALEN) == 0) {
1766                 /*
1767                  * Received an IBSS beacon with the same BSSID. Hardware *must*
1768                  * have updated the local TSF. We have to work around various
1769                  * hardware bugs, though...
1770                  */
1771                 tsf = ath5k_hw_get_tsf64(sc->ah);
1772                 bc_tstamp = le64_to_cpu(mgmt->u.beacon.timestamp);
1773                 hw_tu = TSF_TO_TU(tsf);
1774
1775                 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON,
1776                         "beacon %llx mactime %llx (diff %lld) tsf now %llx\n",
1777                         (unsigned long long)bc_tstamp,
1778                         (unsigned long long)rxs->mactime,
1779                         (unsigned long long)(rxs->mactime - bc_tstamp),
1780                         (unsigned long long)tsf);
1781
1782                 /*
1783                  * Sometimes the HW will give us a wrong tstamp in the rx
1784                  * status, causing the timestamp extension to go wrong.
1785                  * (This seems to happen especially with beacon frames bigger
1786                  * than 78 byte (incl. FCS))
1787                  * But we know that the receive timestamp must be later than the
1788                  * timestamp of the beacon since HW must have synced to that.
1789                  *
1790                  * NOTE: here we assume mactime to be after the frame was
1791                  * received, not like mac80211 which defines it at the start.
1792                  */
1793                 if (bc_tstamp > rxs->mactime) {
1794                         ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON,
1795                                 "fixing mactime from %llx to %llx\n",
1796                                 (unsigned long long)rxs->mactime,
1797                                 (unsigned long long)tsf);
1798                         rxs->mactime = tsf;
1799                 }
1800
1801                 /*
1802                  * Local TSF might have moved higher than our beacon timers,
1803                  * in that case we have to update them to continue sending
1804                  * beacons. This also takes care of synchronizing beacon sending
1805                  * times with other stations.
1806                  */
1807                 if (hw_tu >= sc->nexttbtt)
1808                         ath5k_beacon_update_timers(sc, bc_tstamp);
1809         }
1810 }
1811
1812 static void
1813 ath5k_update_beacon_rssi(struct ath5k_softc *sc, struct sk_buff *skb, int rssi)
1814 {
1815         struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
1816         struct ath5k_hw *ah = sc->ah;
1817         struct ath_common *common = ath5k_hw_common(ah);
1818
1819         /* only beacons from our BSSID */
1820         if (!ieee80211_is_beacon(mgmt->frame_control) ||
1821             memcmp(mgmt->bssid, common->curbssid, ETH_ALEN) != 0)
1822                 return;
1823
1824         ah->ah_beacon_rssi_avg = ath5k_moving_average(ah->ah_beacon_rssi_avg,
1825                                                       rssi);
1826
1827         /* in IBSS mode we should keep RSSI statistics per neighbour */
1828         /* le16_to_cpu(mgmt->u.beacon.capab_info) & WLAN_CAPABILITY_IBSS */
1829 }
1830
1831 /*
1832  * Compute padding position. skb must contains an IEEE 802.11 frame
1833  */
1834 static int ath5k_common_padpos(struct sk_buff *skb)
1835 {
1836         struct ieee80211_hdr * hdr = (struct ieee80211_hdr *)skb->data;
1837         __le16 frame_control = hdr->frame_control;
1838         int padpos = 24;
1839
1840         if (ieee80211_has_a4(frame_control)) {
1841                 padpos += ETH_ALEN;
1842         }
1843         if (ieee80211_is_data_qos(frame_control)) {
1844                 padpos += IEEE80211_QOS_CTL_LEN;
1845         }
1846
1847         return padpos;
1848 }
1849
1850 /*
1851  * This function expects a 802.11 frame and returns the number of
1852  * bytes added, or -1 if we don't have enought header room.
1853  */
1854
1855 static int ath5k_add_padding(struct sk_buff *skb)
1856 {
1857         int padpos = ath5k_common_padpos(skb);
1858         int padsize = padpos & 3;
1859
1860         if (padsize && skb->len>padpos) {
1861
1862                 if (skb_headroom(skb) < padsize)
1863                         return -1;
1864
1865                 skb_push(skb, padsize);
1866                 memmove(skb->data, skb->data+padsize, padpos);
1867                 return padsize;
1868         }
1869
1870         return 0;
1871 }
1872
1873 /*
1874  * This function expects a 802.11 frame and returns the number of
1875  * bytes removed
1876  */
1877
1878 static int ath5k_remove_padding(struct sk_buff *skb)
1879 {
1880         int padpos = ath5k_common_padpos(skb);
1881         int padsize = padpos & 3;
1882
1883         if (padsize && skb->len>=padpos+padsize) {
1884                 memmove(skb->data + padsize, skb->data, padpos);
1885                 skb_pull(skb, padsize);
1886                 return padsize;
1887         }
1888
1889         return 0;
1890 }
1891
1892 static void
1893 ath5k_tasklet_rx(unsigned long data)
1894 {
1895         struct ieee80211_rx_status *rxs;
1896         struct ath5k_rx_status rs = {};
1897         struct sk_buff *skb, *next_skb;
1898         dma_addr_t next_skb_addr;
1899         struct ath5k_softc *sc = (void *)data;
1900         struct ath5k_hw *ah = sc->ah;
1901         struct ath_common *common = ath5k_hw_common(ah);
1902         struct ath5k_buf *bf;
1903         struct ath5k_desc *ds;
1904         int ret;
1905         int rx_flag;
1906
1907         spin_lock(&sc->rxbuflock);
1908         if (list_empty(&sc->rxbuf)) {
1909                 ATH5K_WARN(sc, "empty rx buf pool\n");
1910                 goto unlock;
1911         }
1912         do {
1913                 rx_flag = 0;
1914
1915                 bf = list_first_entry(&sc->rxbuf, struct ath5k_buf, list);
1916                 BUG_ON(bf->skb == NULL);
1917                 skb = bf->skb;
1918                 ds = bf->desc;
1919
1920                 /* bail if HW is still using self-linked descriptor */
1921                 if (ath5k_hw_get_rxdp(sc->ah) == bf->daddr)
1922                         break;
1923
1924                 ret = sc->ah->ah_proc_rx_desc(sc->ah, ds, &rs);
1925                 if (unlikely(ret == -EINPROGRESS))
1926                         break;
1927                 else if (unlikely(ret)) {
1928                         ATH5K_ERR(sc, "error in processing rx descriptor\n");
1929                         sc->stats.rxerr_proc++;
1930                         spin_unlock(&sc->rxbuflock);
1931                         return;
1932                 }
1933
1934                 sc->stats.rx_all_count++;
1935
1936                 if (unlikely(rs.rs_more)) {
1937                         ATH5K_WARN(sc, "unsupported jumbo\n");
1938                         sc->stats.rxerr_jumbo++;
1939                         goto next;
1940                 }
1941
1942                 if (unlikely(rs.rs_status)) {
1943                         if (rs.rs_status & AR5K_RXERR_CRC)
1944                                 sc->stats.rxerr_crc++;
1945                         if (rs.rs_status & AR5K_RXERR_FIFO)
1946                                 sc->stats.rxerr_fifo++;
1947                         if (rs.rs_status & AR5K_RXERR_PHY) {
1948                                 sc->stats.rxerr_phy++;
1949                                 if (rs.rs_phyerr > 0 && rs.rs_phyerr < 32)
1950                                         sc->stats.rxerr_phy_code[rs.rs_phyerr]++;
1951                                 goto next;
1952                         }
1953                         if (rs.rs_status & AR5K_RXERR_DECRYPT) {
1954                                 /*
1955                                  * Decrypt error.  If the error occurred
1956                                  * because there was no hardware key, then
1957                                  * let the frame through so the upper layers
1958                                  * can process it.  This is necessary for 5210
1959                                  * parts which have no way to setup a ``clear''
1960                                  * key cache entry.
1961                                  *
1962                                  * XXX do key cache faulting
1963                                  */
1964                                 sc->stats.rxerr_decrypt++;
1965                                 if (rs.rs_keyix == AR5K_RXKEYIX_INVALID &&
1966                                     !(rs.rs_status & AR5K_RXERR_CRC))
1967                                         goto accept;
1968                         }
1969                         if (rs.rs_status & AR5K_RXERR_MIC) {
1970                                 rx_flag |= RX_FLAG_MMIC_ERROR;
1971                                 sc->stats.rxerr_mic++;
1972                                 goto accept;
1973                         }
1974
1975                         /* let crypto-error packets fall through in MNTR */
1976                         if ((rs.rs_status &
1977                                 ~(AR5K_RXERR_DECRYPT|AR5K_RXERR_MIC)) ||
1978                                         sc->opmode != NL80211_IFTYPE_MONITOR)
1979                                 goto next;
1980                 }
1981 accept:
1982                 next_skb = ath5k_rx_skb_alloc(sc, &next_skb_addr);
1983
1984                 /*
1985                  * If we can't replace bf->skb with a new skb under memory
1986                  * pressure, just skip this packet
1987                  */
1988                 if (!next_skb)
1989                         goto next;
1990
1991                 pci_unmap_single(sc->pdev, bf->skbaddr, common->rx_bufsize,
1992                                 PCI_DMA_FROMDEVICE);
1993                 skb_put(skb, rs.rs_datalen);
1994
1995                 /* The MAC header is padded to have 32-bit boundary if the
1996                  * packet payload is non-zero. The general calculation for
1997                  * padsize would take into account odd header lengths:
1998                  * padsize = (4 - hdrlen % 4) % 4; However, since only
1999                  * even-length headers are used, padding can only be 0 or 2
2000                  * bytes and we can optimize this a bit. In addition, we must
2001                  * not try to remove padding from short control frames that do
2002                  * not have payload. */
2003                 ath5k_remove_padding(skb);
2004
2005                 rxs = IEEE80211_SKB_RXCB(skb);
2006
2007                 /*
2008                  * always extend the mac timestamp, since this information is
2009                  * also needed for proper IBSS merging.
2010                  *
2011                  * XXX: it might be too late to do it here, since rs_tstamp is
2012                  * 15bit only. that means TSF extension has to be done within
2013                  * 32768usec (about 32ms). it might be necessary to move this to
2014                  * the interrupt handler, like it is done in madwifi.
2015                  *
2016                  * Unfortunately we don't know when the hardware takes the rx
2017                  * timestamp (beginning of phy frame, data frame, end of rx?).
2018                  * The only thing we know is that it is hardware specific...
2019                  * On AR5213 it seems the rx timestamp is at the end of the
2020                  * frame, but i'm not sure.
2021                  *
2022                  * NOTE: mac80211 defines mactime at the beginning of the first
2023                  * data symbol. Since we don't have any time references it's
2024                  * impossible to comply to that. This affects IBSS merge only
2025                  * right now, so it's not too bad...
2026                  */
2027                 rxs->mactime = ath5k_extend_tsf(sc->ah, rs.rs_tstamp);
2028                 rxs->flag = rx_flag | RX_FLAG_TSFT;
2029
2030                 rxs->freq = sc->curchan->center_freq;
2031                 rxs->band = sc->curband->band;
2032
2033                 rxs->noise = sc->ah->ah_noise_floor;
2034                 rxs->signal = rxs->noise + rs.rs_rssi;
2035
2036                 rxs->antenna = rs.rs_antenna;
2037
2038                 if (rs.rs_antenna > 0 && rs.rs_antenna < 5)
2039                         sc->stats.antenna_rx[rs.rs_antenna]++;
2040                 else
2041                         sc->stats.antenna_rx[0]++; /* invalid */
2042
2043                 rxs->rate_idx = ath5k_hw_to_driver_rix(sc, rs.rs_rate);
2044                 rxs->flag |= ath5k_rx_decrypted(sc, ds, skb, &rs);
2045
2046                 if (rxs->rate_idx >= 0 && rs.rs_rate ==
2047                     sc->curband->bitrates[rxs->rate_idx].hw_value_short)
2048                         rxs->flag |= RX_FLAG_SHORTPRE;
2049
2050                 ath5k_debug_dump_skb(sc, skb, "RX  ", 0);
2051
2052                 ath5k_update_beacon_rssi(sc, skb, rs.rs_rssi);
2053
2054                 /* check beacons in IBSS mode */
2055                 if (sc->opmode == NL80211_IFTYPE_ADHOC)
2056                         ath5k_check_ibss_tsf(sc, skb, rxs);
2057
2058                 ieee80211_rx(sc->hw, skb);
2059
2060                 bf->skb = next_skb;
2061                 bf->skbaddr = next_skb_addr;
2062 next:
2063                 list_move_tail(&bf->list, &sc->rxbuf);
2064         } while (ath5k_rxbuf_setup(sc, bf) == 0);
2065 unlock:
2066         spin_unlock(&sc->rxbuflock);
2067 }
2068
2069
2070
2071
2072 /*************\
2073 * TX Handling *
2074 \*************/
2075
2076 static void
2077 ath5k_tx_processq(struct ath5k_softc *sc, struct ath5k_txq *txq)
2078 {
2079         struct ath5k_tx_status ts = {};
2080         struct ath5k_buf *bf, *bf0;
2081         struct ath5k_desc *ds;
2082         struct sk_buff *skb;
2083         struct ieee80211_tx_info *info;
2084         int i, ret;
2085
2086         spin_lock(&txq->lock);
2087         list_for_each_entry_safe(bf, bf0, &txq->q, list) {
2088                 ds = bf->desc;
2089
2090                 /*
2091                  * It's possible that the hardware can say the buffer is
2092                  * completed when it hasn't yet loaded the ds_link from
2093                  * host memory and moved on.  If there are more TX
2094                  * descriptors in the queue, wait for TXDP to change
2095                  * before processing this one.
2096                  */
2097                 if (ath5k_hw_get_txdp(sc->ah, txq->qnum) == bf->daddr &&
2098                     !list_is_last(&bf->list, &txq->q))
2099                         break;
2100
2101                 ret = sc->ah->ah_proc_tx_desc(sc->ah, ds, &ts);
2102                 if (unlikely(ret == -EINPROGRESS))
2103                         break;
2104                 else if (unlikely(ret)) {
2105                         ATH5K_ERR(sc, "error %d while processing queue %u\n",
2106                                 ret, txq->qnum);
2107                         break;
2108                 }
2109
2110                 sc->stats.tx_all_count++;
2111                 skb = bf->skb;
2112                 info = IEEE80211_SKB_CB(skb);
2113                 bf->skb = NULL;
2114
2115                 pci_unmap_single(sc->pdev, bf->skbaddr, skb->len,
2116                                 PCI_DMA_TODEVICE);
2117
2118                 ieee80211_tx_info_clear_status(info);
2119                 for (i = 0; i < 4; i++) {
2120                         struct ieee80211_tx_rate *r =
2121                                 &info->status.rates[i];
2122
2123                         if (ts.ts_rate[i]) {
2124                                 r->idx = ath5k_hw_to_driver_rix(sc, ts.ts_rate[i]);
2125                                 r->count = ts.ts_retry[i];
2126                         } else {
2127                                 r->idx = -1;
2128                                 r->count = 0;
2129                         }
2130                 }
2131
2132                 /* count the successful attempt as well */
2133                 info->status.rates[ts.ts_final_idx].count++;
2134
2135                 if (unlikely(ts.ts_status)) {
2136                         sc->stats.ack_fail++;
2137                         if (ts.ts_status & AR5K_TXERR_FILT) {
2138                                 info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
2139                                 sc->stats.txerr_filt++;
2140                         }
2141                         if (ts.ts_status & AR5K_TXERR_XRETRY)
2142                                 sc->stats.txerr_retry++;
2143                         if (ts.ts_status & AR5K_TXERR_FIFO)
2144                                 sc->stats.txerr_fifo++;
2145                 } else {
2146                         info->flags |= IEEE80211_TX_STAT_ACK;
2147                         info->status.ack_signal = ts.ts_rssi;
2148                 }
2149
2150                 /*
2151                  * Remove MAC header padding before giving the frame
2152                  * back to mac80211.
2153                  */
2154                 ath5k_remove_padding(skb);
2155
2156                 if (ts.ts_antenna > 0 && ts.ts_antenna < 5)
2157                         sc->stats.antenna_tx[ts.ts_antenna]++;
2158                 else
2159                         sc->stats.antenna_tx[0]++; /* invalid */
2160
2161                 ieee80211_tx_status(sc->hw, skb);
2162
2163                 spin_lock(&sc->txbuflock);
2164                 list_move_tail(&bf->list, &sc->txbuf);
2165                 sc->txbuf_len++;
2166                 spin_unlock(&sc->txbuflock);
2167         }
2168         if (likely(list_empty(&txq->q)))
2169                 txq->link = NULL;
2170         spin_unlock(&txq->lock);
2171         if (sc->txbuf_len > ATH_TXBUF / 5)
2172                 ieee80211_wake_queues(sc->hw);
2173 }
2174
2175 static void
2176 ath5k_tasklet_tx(unsigned long data)
2177 {
2178         int i;
2179         struct ath5k_softc *sc = (void *)data;
2180
2181         for (i=0; i < AR5K_NUM_TX_QUEUES; i++)
2182                 if (sc->txqs[i].setup && (sc->ah->ah_txq_isr & BIT(i)))
2183                         ath5k_tx_processq(sc, &sc->txqs[i]);
2184 }
2185
2186
2187 /*****************\
2188 * Beacon handling *
2189 \*****************/
2190
2191 /*
2192  * Setup the beacon frame for transmit.
2193  */
2194 static int
2195 ath5k_beacon_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
2196 {
2197         struct sk_buff *skb = bf->skb;
2198         struct  ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2199         struct ath5k_hw *ah = sc->ah;
2200         struct ath5k_desc *ds;
2201         int ret = 0;
2202         u8 antenna;
2203         u32 flags;
2204         const int padsize = 0;
2205
2206         bf->skbaddr = pci_map_single(sc->pdev, skb->data, skb->len,
2207                         PCI_DMA_TODEVICE);
2208         ATH5K_DBG(sc, ATH5K_DEBUG_BEACON, "skb %p [data %p len %u] "
2209                         "skbaddr %llx\n", skb, skb->data, skb->len,
2210                         (unsigned long long)bf->skbaddr);
2211         if (pci_dma_mapping_error(sc->pdev, bf->skbaddr)) {
2212                 ATH5K_ERR(sc, "beacon DMA mapping failed\n");
2213                 return -EIO;
2214         }
2215
2216         ds = bf->desc;
2217         antenna = ah->ah_tx_ant;
2218
2219         flags = AR5K_TXDESC_NOACK;
2220         if (sc->opmode == NL80211_IFTYPE_ADHOC && ath5k_hw_hasveol(ah)) {
2221                 ds->ds_link = bf->daddr;        /* self-linked */
2222                 flags |= AR5K_TXDESC_VEOL;
2223         } else
2224                 ds->ds_link = 0;
2225
2226         /*
2227          * If we use multiple antennas on AP and use
2228          * the Sectored AP scenario, switch antenna every
2229          * 4 beacons to make sure everybody hears our AP.
2230          * When a client tries to associate, hw will keep
2231          * track of the tx antenna to be used for this client
2232          * automaticaly, based on ACKed packets.
2233          *
2234          * Note: AP still listens and transmits RTS on the
2235          * default antenna which is supposed to be an omni.
2236          *
2237          * Note2: On sectored scenarios it's possible to have
2238          * multiple antennas (1omni -the default- and 14 sectors)
2239          * so if we choose to actually support this mode we need
2240          * to allow user to set how many antennas we have and tweak
2241          * the code below to send beacons on all of them.
2242          */
2243         if (ah->ah_ant_mode == AR5K_ANTMODE_SECTOR_AP)
2244                 antenna = sc->bsent & 4 ? 2 : 1;
2245
2246
2247         /* FIXME: If we are in g mode and rate is a CCK rate
2248          * subtract ah->ah_txpower.txp_cck_ofdm_pwr_delta
2249          * from tx power (value is in dB units already) */
2250         ds->ds_data = bf->skbaddr;
2251         ret = ah->ah_setup_tx_desc(ah, ds, skb->len,
2252                         ieee80211_get_hdrlen_from_skb(skb), padsize,
2253                         AR5K_PKT_TYPE_BEACON, (sc->power_level * 2),
2254                         ieee80211_get_tx_rate(sc->hw, info)->hw_value,
2255                         1, AR5K_TXKEYIX_INVALID,
2256                         antenna, flags, 0, 0);
2257         if (ret)
2258                 goto err_unmap;
2259
2260         return 0;
2261 err_unmap:
2262         pci_unmap_single(sc->pdev, bf->skbaddr, skb->len, PCI_DMA_TODEVICE);
2263         return ret;
2264 }
2265
2266 /*
2267  * Transmit a beacon frame at SWBA.  Dynamic updates to the
2268  * frame contents are done as needed and the slot time is
2269  * also adjusted based on current state.
2270  *
2271  * This is called from software irq context (beacontq or restq
2272  * tasklets) or user context from ath5k_beacon_config.
2273  */
2274 static void
2275 ath5k_beacon_send(struct ath5k_softc *sc)
2276 {
2277         struct ath5k_buf *bf = sc->bbuf;
2278         struct ath5k_hw *ah = sc->ah;
2279         struct sk_buff *skb;
2280
2281         ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON, "in beacon_send\n");
2282
2283         if (unlikely(bf->skb == NULL || sc->opmode == NL80211_IFTYPE_STATION ||
2284                         sc->opmode == NL80211_IFTYPE_MONITOR)) {
2285                 ATH5K_WARN(sc, "bf=%p bf_skb=%p\n", bf, bf ? bf->skb : NULL);
2286                 return;
2287         }
2288         /*
2289          * Check if the previous beacon has gone out.  If
2290          * not don't don't try to post another, skip this
2291          * period and wait for the next.  Missed beacons
2292          * indicate a problem and should not occur.  If we
2293          * miss too many consecutive beacons reset the device.
2294          */
2295         if (unlikely(ath5k_hw_num_tx_pending(ah, sc->bhalq) != 0)) {
2296                 sc->bmisscount++;
2297                 ATH5K_DBG(sc, ATH5K_DEBUG_BEACON,
2298                         "missed %u consecutive beacons\n", sc->bmisscount);
2299                 if (sc->bmisscount > 10) {      /* NB: 10 is a guess */
2300                         ATH5K_DBG(sc, ATH5K_DEBUG_BEACON,
2301                                 "stuck beacon time (%u missed)\n",
2302                                 sc->bmisscount);
2303                         tasklet_schedule(&sc->restq);
2304                 }
2305                 return;
2306         }
2307         if (unlikely(sc->bmisscount != 0)) {
2308                 ATH5K_DBG(sc, ATH5K_DEBUG_BEACON,
2309                         "resume beacon xmit after %u misses\n",
2310                         sc->bmisscount);
2311                 sc->bmisscount = 0;
2312         }
2313
2314         /*
2315          * Stop any current dma and put the new frame on the queue.
2316          * This should never fail since we check above that no frames
2317          * are still pending on the queue.
2318          */
2319         if (unlikely(ath5k_hw_stop_tx_dma(ah, sc->bhalq))) {
2320                 ATH5K_WARN(sc, "beacon queue %u didn't start/stop ?\n", sc->bhalq);
2321                 /* NB: hw still stops DMA, so proceed */
2322         }
2323
2324         /* refresh the beacon for AP mode */
2325         if (sc->opmode == NL80211_IFTYPE_AP)
2326                 ath5k_beacon_update(sc->hw, sc->vif);
2327
2328         ath5k_hw_set_txdp(ah, sc->bhalq, bf->daddr);
2329         ath5k_hw_start_tx_dma(ah, sc->bhalq);
2330         ATH5K_DBG(sc, ATH5K_DEBUG_BEACON, "TXDP[%u] = %llx (%p)\n",
2331                 sc->bhalq, (unsigned long long)bf->daddr, bf->desc);
2332
2333         skb = ieee80211_get_buffered_bc(sc->hw, sc->vif);
2334         while (skb) {
2335                 ath5k_tx_queue(sc->hw, skb, sc->cabq);
2336                 skb = ieee80211_get_buffered_bc(sc->hw, sc->vif);
2337         }
2338
2339         sc->bsent++;
2340 }
2341
2342
2343 /**
2344  * ath5k_beacon_update_timers - update beacon timers
2345  *
2346  * @sc: struct ath5k_softc pointer we are operating on
2347  * @bc_tsf: the timestamp of the beacon. 0 to reset the TSF. -1 to perform a
2348  *          beacon timer update based on the current HW TSF.
2349  *
2350  * Calculate the next target beacon transmit time (TBTT) based on the timestamp
2351  * of a received beacon or the current local hardware TSF and write it to the
2352  * beacon timer registers.
2353  *
2354  * This is called in a variety of situations, e.g. when a beacon is received,
2355  * when a TSF update has been detected, but also when an new IBSS is created or
2356  * when we otherwise know we have to update the timers, but we keep it in this
2357  * function to have it all together in one place.
2358  */
2359 static void
2360 ath5k_beacon_update_timers(struct ath5k_softc *sc, u64 bc_tsf)
2361 {
2362         struct ath5k_hw *ah = sc->ah;
2363         u32 nexttbtt, intval, hw_tu, bc_tu;
2364         u64 hw_tsf;
2365
2366         intval = sc->bintval & AR5K_BEACON_PERIOD;
2367         if (WARN_ON(!intval))
2368                 return;
2369
2370         /* beacon TSF converted to TU */
2371         bc_tu = TSF_TO_TU(bc_tsf);
2372
2373         /* current TSF converted to TU */
2374         hw_tsf = ath5k_hw_get_tsf64(ah);
2375         hw_tu = TSF_TO_TU(hw_tsf);
2376
2377 #define FUDGE 3
2378         /* we use FUDGE to make sure the next TBTT is ahead of the current TU */
2379         if (bc_tsf == -1) {
2380                 /*
2381                  * no beacons received, called internally.
2382                  * just need to refresh timers based on HW TSF.
2383                  */
2384                 nexttbtt = roundup(hw_tu + FUDGE, intval);
2385         } else if (bc_tsf == 0) {
2386                 /*
2387                  * no beacon received, probably called by ath5k_reset_tsf().
2388                  * reset TSF to start with 0.
2389                  */
2390                 nexttbtt = intval;
2391                 intval |= AR5K_BEACON_RESET_TSF;
2392         } else if (bc_tsf > hw_tsf) {
2393                 /*
2394                  * beacon received, SW merge happend but HW TSF not yet updated.
2395                  * not possible to reconfigure timers yet, but next time we
2396                  * receive a beacon with the same BSSID, the hardware will
2397                  * automatically update the TSF and then we need to reconfigure
2398                  * the timers.
2399                  */
2400                 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON,
2401                         "need to wait for HW TSF sync\n");
2402                 return;
2403         } else {
2404                 /*
2405                  * most important case for beacon synchronization between STA.
2406                  *
2407                  * beacon received and HW TSF has been already updated by HW.
2408                  * update next TBTT based on the TSF of the beacon, but make
2409                  * sure it is ahead of our local TSF timer.
2410                  */
2411                 nexttbtt = bc_tu + roundup(hw_tu + FUDGE - bc_tu, intval);
2412         }
2413 #undef FUDGE
2414
2415         sc->nexttbtt = nexttbtt;
2416
2417         intval |= AR5K_BEACON_ENA;
2418         ath5k_hw_init_beacon(ah, nexttbtt, intval);
2419
2420         /*
2421          * debugging output last in order to preserve the time critical aspect
2422          * of this function
2423          */
2424         if (bc_tsf == -1)
2425                 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON,
2426                         "reconfigured timers based on HW TSF\n");
2427         else if (bc_tsf == 0)
2428                 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON,
2429                         "reset HW TSF and timers\n");
2430         else
2431                 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON,
2432                         "updated timers based on beacon TSF\n");
2433
2434         ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON,
2435                           "bc_tsf %llx hw_tsf %llx bc_tu %u hw_tu %u nexttbtt %u\n",
2436                           (unsigned long long) bc_tsf,
2437                           (unsigned long long) hw_tsf, bc_tu, hw_tu, nexttbtt);
2438         ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON, "intval %u %s %s\n",
2439                 intval & AR5K_BEACON_PERIOD,
2440                 intval & AR5K_BEACON_ENA ? "AR5K_BEACON_ENA" : "",
2441                 intval & AR5K_BEACON_RESET_TSF ? "AR5K_BEACON_RESET_TSF" : "");
2442 }
2443
2444
2445 /**
2446  * ath5k_beacon_config - Configure the beacon queues and interrupts
2447  *
2448  * @sc: struct ath5k_softc pointer we are operating on
2449  *
2450  * In IBSS mode we use a self-linked tx descriptor if possible. We enable SWBA
2451  * interrupts to detect TSF updates only.
2452  */
2453 static void
2454 ath5k_beacon_config(struct ath5k_softc *sc)
2455 {
2456         struct ath5k_hw *ah = sc->ah;
2457         unsigned long flags;
2458
2459         spin_lock_irqsave(&sc->block, flags);
2460         sc->bmisscount = 0;
2461         sc->imask &= ~(AR5K_INT_BMISS | AR5K_INT_SWBA);
2462
2463         if (sc->enable_beacon) {
2464                 /*
2465                  * In IBSS mode we use a self-linked tx descriptor and let the
2466                  * hardware send the beacons automatically. We have to load it
2467                  * only once here.
2468                  * We use the SWBA interrupt only to keep track of the beacon
2469                  * timers in order to detect automatic TSF updates.
2470                  */
2471                 ath5k_beaconq_config(sc);
2472
2473                 sc->imask |= AR5K_INT_SWBA;
2474
2475                 if (sc->opmode == NL80211_IFTYPE_ADHOC) {
2476                         if (ath5k_hw_hasveol(ah))
2477                                 ath5k_beacon_send(sc);
2478                 } else
2479                         ath5k_beacon_update_timers(sc, -1);
2480         } else {
2481                 ath5k_hw_stop_tx_dma(sc->ah, sc->bhalq);
2482         }
2483
2484         ath5k_hw_set_imr(ah, sc->imask);
2485         mmiowb();
2486         spin_unlock_irqrestore(&sc->block, flags);
2487 }
2488
2489 static void ath5k_tasklet_beacon(unsigned long data)
2490 {
2491         struct ath5k_softc *sc = (struct ath5k_softc *) data;
2492
2493         /*
2494          * Software beacon alert--time to send a beacon.
2495          *
2496          * In IBSS mode we use this interrupt just to
2497          * keep track of the next TBTT (target beacon
2498          * transmission time) in order to detect wether
2499          * automatic TSF updates happened.
2500          */
2501         if (sc->opmode == NL80211_IFTYPE_ADHOC) {
2502                 /* XXX: only if VEOL suppported */
2503                 u64 tsf = ath5k_hw_get_tsf64(sc->ah);
2504                 sc->nexttbtt += sc->bintval;
2505                 ATH5K_DBG(sc, ATH5K_DEBUG_BEACON,
2506                                 "SWBA nexttbtt: %x hw_tu: %x "
2507                                 "TSF: %llx\n",
2508                                 sc->nexttbtt,
2509                                 TSF_TO_TU(tsf),
2510                                 (unsigned long long) tsf);
2511         } else {
2512                 spin_lock(&sc->block);
2513                 ath5k_beacon_send(sc);
2514                 spin_unlock(&sc->block);
2515         }
2516 }
2517
2518
2519 /********************\
2520 * Interrupt handling *
2521 \********************/
2522
2523 static int
2524 ath5k_init(struct ath5k_softc *sc)
2525 {
2526         struct ath5k_hw *ah = sc->ah;
2527         int ret, i;
2528
2529         mutex_lock(&sc->lock);
2530
2531         ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "mode %d\n", sc->opmode);
2532
2533         /*
2534          * Stop anything previously setup.  This is safe
2535          * no matter this is the first time through or not.
2536          */
2537         ath5k_stop_locked(sc);
2538
2539         /*
2540          * The basic interface to setting the hardware in a good
2541          * state is ``reset''.  On return the hardware is known to
2542          * be powered up and with interrupts disabled.  This must
2543          * be followed by initialization of the appropriate bits
2544          * and then setup of the interrupt mask.
2545          */
2546         sc->curchan = sc->hw->conf.channel;
2547         sc->curband = &sc->sbands[sc->curchan->band];
2548         sc->imask = AR5K_INT_RXOK | AR5K_INT_RXERR | AR5K_INT_RXEOL |
2549                 AR5K_INT_RXORN | AR5K_INT_TXDESC | AR5K_INT_TXEOL |
2550                 AR5K_INT_FATAL | AR5K_INT_GLOBAL | AR5K_INT_MIB;
2551
2552         ret = ath5k_reset(sc, NULL);
2553         if (ret)
2554                 goto done;
2555
2556         ath5k_rfkill_hw_start(ah);
2557
2558         /*
2559          * Reset the key cache since some parts do not reset the
2560          * contents on initial power up or resume from suspend.
2561          */
2562         for (i = 0; i < AR5K_KEYTABLE_SIZE; i++)
2563                 ath5k_hw_reset_key(ah, i);
2564
2565         ath5k_hw_set_ack_bitrate_high(ah, true);
2566         ret = 0;
2567 done:
2568         mmiowb();
2569         mutex_unlock(&sc->lock);
2570         return ret;
2571 }
2572
2573 static int
2574 ath5k_stop_locked(struct ath5k_softc *sc)
2575 {
2576         struct ath5k_hw *ah = sc->ah;
2577
2578         ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "invalid %u\n",
2579                         test_bit(ATH_STAT_INVALID, sc->status));
2580
2581         /*
2582          * Shutdown the hardware and driver:
2583          *    stop output from above
2584          *    disable interrupts
2585          *    turn off timers
2586          *    turn off the radio
2587          *    clear transmit machinery
2588          *    clear receive machinery
2589          *    drain and release tx queues
2590          *    reclaim beacon resources
2591          *    power down hardware
2592          *
2593          * Note that some of this work is not possible if the
2594          * hardware is gone (invalid).
2595          */
2596         ieee80211_stop_queues(sc->hw);
2597
2598         if (!test_bit(ATH_STAT_INVALID, sc->status)) {
2599                 ath5k_led_off(sc);
2600                 ath5k_hw_set_imr(ah, 0);
2601                 synchronize_irq(sc->pdev->irq);
2602         }
2603         ath5k_txq_cleanup(sc);
2604         if (!test_bit(ATH_STAT_INVALID, sc->status)) {
2605                 ath5k_rx_stop(sc);
2606                 ath5k_hw_phy_disable(ah);
2607         } else
2608                 sc->rxlink = NULL;
2609
2610         return 0;
2611 }
2612
2613 /*
2614  * Stop the device, grabbing the top-level lock to protect
2615  * against concurrent entry through ath5k_init (which can happen
2616  * if another thread does a system call and the thread doing the
2617  * stop is preempted).
2618  */
2619 static int
2620 ath5k_stop_hw(struct ath5k_softc *sc)
2621 {
2622         int ret;
2623
2624         mutex_lock(&sc->lock);
2625         ret = ath5k_stop_locked(sc);
2626         if (ret == 0 && !test_bit(ATH_STAT_INVALID, sc->status)) {
2627                 /*
2628                  * Don't set the card in full sleep mode!
2629                  *
2630                  * a) When the device is in this state it must be carefully
2631                  * woken up or references to registers in the PCI clock
2632                  * domain may freeze the bus (and system).  This varies
2633                  * by chip and is mostly an issue with newer parts
2634                  * (madwifi sources mentioned srev >= 0x78) that go to
2635                  * sleep more quickly.
2636                  *
2637                  * b) On older chips full sleep results a weird behaviour
2638                  * during wakeup. I tested various cards with srev < 0x78
2639                  * and they don't wake up after module reload, a second
2640                  * module reload is needed to bring the card up again.
2641                  *
2642                  * Until we figure out what's going on don't enable
2643                  * full chip reset on any chip (this is what Legacy HAL
2644                  * and Sam's HAL do anyway). Instead Perform a full reset
2645                  * on the device (same as initial state after attach) and
2646                  * leave it idle (keep MAC/BB on warm reset) */
2647                 ret = ath5k_hw_on_hold(sc->ah);
2648
2649                 ATH5K_DBG(sc, ATH5K_DEBUG_RESET,
2650                                 "putting device to sleep\n");
2651         }
2652         ath5k_txbuf_free(sc, sc->bbuf);
2653
2654         mmiowb();
2655         mutex_unlock(&sc->lock);
2656
2657         tasklet_kill(&sc->rxtq);
2658         tasklet_kill(&sc->txtq);
2659         tasklet_kill(&sc->restq);
2660         tasklet_kill(&sc->calib);
2661         tasklet_kill(&sc->beacontq);
2662         tasklet_kill(&sc->ani_tasklet);
2663
2664         ath5k_rfkill_hw_stop(sc->ah);
2665
2666         return ret;
2667 }
2668
2669 static void
2670 ath5k_intr_calibration_poll(struct ath5k_hw *ah)
2671 {
2672         if (time_is_before_eq_jiffies(ah->ah_cal_next_ani) &&
2673             !(ah->ah_cal_mask & AR5K_CALIBRATION_FULL)) {
2674                 /* run ANI only when full calibration is not active */
2675                 ah->ah_cal_next_ani = jiffies +
2676                         msecs_to_jiffies(ATH5K_TUNE_CALIBRATION_INTERVAL_ANI);
2677                 tasklet_schedule(&ah->ah_sc->ani_tasklet);
2678
2679         } else if (time_is_before_eq_jiffies(ah->ah_cal_next_full)) {
2680                 ah->ah_cal_next_full = jiffies +
2681                         msecs_to_jiffies(ATH5K_TUNE_CALIBRATION_INTERVAL_FULL);
2682                 tasklet_schedule(&ah->ah_sc->calib);
2683         }
2684         /* we could use SWI to generate enough interrupts to meet our
2685          * calibration interval requirements, if necessary:
2686          * AR5K_REG_ENABLE_BITS(ah, AR5K_CR, AR5K_CR_SWI); */
2687 }
2688
2689 static irqreturn_t
2690 ath5k_intr(int irq, void *dev_id)
2691 {
2692         struct ath5k_softc *sc = dev_id;
2693         struct ath5k_hw *ah = sc->ah;
2694         enum ath5k_int status;
2695         unsigned int counter = 1000;
2696
2697         if (unlikely(test_bit(ATH_STAT_INVALID, sc->status) ||
2698                                 !ath5k_hw_is_intr_pending(ah)))
2699                 return IRQ_NONE;
2700
2701         do {
2702                 ath5k_hw_get_isr(ah, &status);          /* NB: clears IRQ too */
2703                 ATH5K_DBG(sc, ATH5K_DEBUG_INTR, "status 0x%x/0x%x\n",
2704                                 status, sc->imask);
2705                 if (unlikely(status & AR5K_INT_FATAL)) {
2706                         /*
2707                          * Fatal errors are unrecoverable.
2708                          * Typically these are caused by DMA errors.
2709                          */
2710                         tasklet_schedule(&sc->restq);
2711                 } else if (unlikely(status & AR5K_INT_RXORN)) {
2712                         /*
2713                          * Receive buffers are full. Either the bus is busy or
2714                          * the CPU is not fast enough to process all received
2715                          * frames.
2716                          * Older chipsets need a reset to come out of this
2717                          * condition, but we treat it as RX for newer chips.
2718                          * We don't know exactly which versions need a reset -
2719                          * this guess is copied from the HAL.
2720                          */
2721                         sc->stats.rxorn_intr++;
2722                         if (ah->ah_mac_srev < AR5K_SREV_AR5212)
2723                                 tasklet_schedule(&sc->restq);
2724                         else
2725                                 tasklet_schedule(&sc->rxtq);
2726                 } else {
2727                         if (status & AR5K_INT_SWBA) {
2728                                 tasklet_hi_schedule(&sc->beacontq);
2729                         }
2730                         if (status & AR5K_INT_RXEOL) {
2731                                 /*
2732                                 * NB: the hardware should re-read the link when
2733                                 *     RXE bit is written, but it doesn't work at
2734                                 *     least on older hardware revs.
2735                                 */
2736                                 sc->rxlink = NULL;
2737                         }
2738                         if (status & AR5K_INT_TXURN) {
2739                                 /* bump tx trigger level */
2740                                 ath5k_hw_update_tx_triglevel(ah, true);
2741                         }
2742                         if (status & (AR5K_INT_RXOK | AR5K_INT_RXERR))
2743                                 tasklet_schedule(&sc->rxtq);
2744                         if (status & (AR5K_INT_TXOK | AR5K_INT_TXDESC
2745                                         | AR5K_INT_TXERR | AR5K_INT_TXEOL))
2746                                 tasklet_schedule(&sc->txtq);
2747                         if (status & AR5K_INT_BMISS) {
2748                                 /* TODO */
2749                         }
2750                         if (status & AR5K_INT_MIB) {
2751                                 sc->stats.mib_intr++;
2752                                 ath5k_hw_update_mib_counters(ah);
2753                                 ath5k_ani_mib_intr(ah);
2754                         }
2755                         if (status & AR5K_INT_GPIO)
2756                                 tasklet_schedule(&sc->rf_kill.toggleq);
2757
2758                 }
2759         } while (ath5k_hw_is_intr_pending(ah) && --counter > 0);
2760
2761         if (unlikely(!counter))
2762                 ATH5K_WARN(sc, "too many interrupts, giving up for now\n");
2763
2764         ath5k_intr_calibration_poll(ah);
2765
2766         return IRQ_HANDLED;
2767 }
2768
2769 static void
2770 ath5k_tasklet_reset(unsigned long data)
2771 {
2772         struct ath5k_softc *sc = (void *)data;
2773
2774         ath5k_reset_wake(sc);
2775 }
2776
2777 /*
2778  * Periodically recalibrate the PHY to account
2779  * for temperature/environment changes.
2780  */
2781 static void
2782 ath5k_tasklet_calibrate(unsigned long data)
2783 {
2784         struct ath5k_softc *sc = (void *)data;
2785         struct ath5k_hw *ah = sc->ah;
2786
2787         /* Only full calibration for now */
2788         ah->ah_cal_mask |= AR5K_CALIBRATION_FULL;
2789
2790         /* Stop queues so that calibration
2791          * doesn't interfere with tx */
2792         ieee80211_stop_queues(sc->hw);
2793
2794         ATH5K_DBG(sc, ATH5K_DEBUG_CALIBRATE, "channel %u/%x\n",
2795                 ieee80211_frequency_to_channel(sc->curchan->center_freq),
2796                 sc->curchan->hw_value);
2797
2798         if (ath5k_hw_gainf_calibrate(ah) == AR5K_RFGAIN_NEED_CHANGE) {
2799                 /*
2800                  * Rfgain is out of bounds, reset the chip
2801                  * to load new gain values.
2802                  */
2803                 ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "calibration, resetting\n");
2804                 ath5k_reset(sc, sc->curchan);
2805         }
2806         if (ath5k_hw_phy_calibrate(ah, sc->curchan))
2807                 ATH5K_ERR(sc, "calibration of channel %u failed\n",
2808                         ieee80211_frequency_to_channel(
2809                                 sc->curchan->center_freq));
2810
2811         /* Wake queues */
2812         ieee80211_wake_queues(sc->hw);
2813
2814         ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL;
2815 }
2816
2817
2818 static void
2819 ath5k_tasklet_ani(unsigned long data)
2820 {
2821         struct ath5k_softc *sc = (void *)data;
2822         struct ath5k_hw *ah = sc->ah;
2823
2824         ah->ah_cal_mask |= AR5K_CALIBRATION_ANI;
2825         ath5k_ani_calibration(ah);
2826         ah->ah_cal_mask &= ~AR5K_CALIBRATION_ANI;
2827 }
2828
2829
2830 /********************\
2831 * Mac80211 functions *
2832 \********************/
2833
2834 static int
2835 ath5k_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
2836 {
2837         struct ath5k_softc *sc = hw->priv;
2838
2839         return ath5k_tx_queue(hw, skb, sc->txq);
2840 }
2841
2842 static int ath5k_tx_queue(struct ieee80211_hw *hw, struct sk_buff *skb,
2843                           struct ath5k_txq *txq)
2844 {
2845         struct ath5k_softc *sc = hw->priv;
2846         struct ath5k_buf *bf;
2847         unsigned long flags;
2848         int padsize;
2849
2850         ath5k_debug_dump_skb(sc, skb, "TX  ", 1);
2851
2852         if (sc->opmode == NL80211_IFTYPE_MONITOR)
2853                 ATH5K_DBG(sc, ATH5K_DEBUG_XMIT, "tx in monitor (scan?)\n");
2854
2855         /*
2856          * the hardware expects the header padded to 4 byte boundaries
2857          * if this is not the case we add the padding after the header
2858          */
2859         padsize = ath5k_add_padding(skb);
2860         if (padsize < 0) {
2861                 ATH5K_ERR(sc, "tx hdrlen not %%4: not enough"
2862                           " headroom to pad");
2863                 goto drop_packet;
2864         }
2865
2866         spin_lock_irqsave(&sc->txbuflock, flags);
2867         if (list_empty(&sc->txbuf)) {
2868                 ATH5K_ERR(sc, "no further txbuf available, dropping packet\n");
2869                 spin_unlock_irqrestore(&sc->txbuflock, flags);
2870                 ieee80211_stop_queue(hw, skb_get_queue_mapping(skb));
2871                 goto drop_packet;
2872         }
2873         bf = list_first_entry(&sc->txbuf, struct ath5k_buf, list);
2874         list_del(&bf->list);
2875         sc->txbuf_len--;
2876         if (list_empty(&sc->txbuf))
2877                 ieee80211_stop_queues(hw);
2878         spin_unlock_irqrestore(&sc->txbuflock, flags);
2879
2880         bf->skb = skb;
2881
2882         if (ath5k_txbuf_setup(sc, bf, txq, padsize)) {
2883                 bf->skb = NULL;
2884                 spin_lock_irqsave(&sc->txbuflock, flags);
2885                 list_add_tail(&bf->list, &sc->txbuf);
2886                 sc->txbuf_len++;
2887                 spin_unlock_irqrestore(&sc->txbuflock, flags);
2888                 goto drop_packet;
2889         }
2890         return NETDEV_TX_OK;
2891
2892 drop_packet:
2893         dev_kfree_skb_any(skb);
2894         return NETDEV_TX_OK;
2895 }
2896
2897 /*
2898  * Reset the hardware.  If chan is not NULL, then also pause rx/tx
2899  * and change to the given channel.
2900  */
2901 static int
2902 ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan)
2903 {
2904         struct ath5k_hw *ah = sc->ah;
2905         int ret;
2906
2907         ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
2908
2909         if (chan) {
2910                 ath5k_hw_set_imr(ah, 0);
2911                 ath5k_txq_cleanup(sc);
2912                 ath5k_rx_stop(sc);
2913
2914                 sc->curchan = chan;
2915                 sc->curband = &sc->sbands[chan->band];
2916         }
2917         ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, chan != NULL);
2918         if (ret) {
2919                 ATH5K_ERR(sc, "can't reset hardware (%d)\n", ret);
2920                 goto err;
2921         }
2922
2923         ret = ath5k_rx_start(sc);
2924         if (ret) {
2925                 ATH5K_ERR(sc, "can't start recv logic\n");
2926                 goto err;
2927         }
2928
2929         ath5k_ani_init(ah, ah->ah_sc->ani_state.ani_mode);
2930
2931         /*
2932          * Change channels and update the h/w rate map if we're switching;
2933          * e.g. 11a to 11b/g.
2934          *
2935          * We may be doing a reset in response to an ioctl that changes the
2936          * channel so update any state that might change as a result.
2937          *
2938          * XXX needed?
2939          */
2940 /*      ath5k_chan_change(sc, c); */
2941
2942         ath5k_beacon_config(sc);
2943         /* intrs are enabled by ath5k_beacon_config */
2944
2945         return 0;
2946 err:
2947         return ret;
2948 }
2949
2950 static int
2951 ath5k_reset_wake(struct ath5k_softc *sc)
2952 {
2953         int ret;
2954
2955         ret = ath5k_reset(sc, sc->curchan);
2956         if (!ret)
2957                 ieee80211_wake_queues(sc->hw);
2958
2959         return ret;
2960 }
2961
2962 static int ath5k_start(struct ieee80211_hw *hw)
2963 {
2964         return ath5k_init(hw->priv);
2965 }
2966
2967 static void ath5k_stop(struct ieee80211_hw *hw)
2968 {
2969         ath5k_stop_hw(hw->priv);
2970 }
2971
2972 static int ath5k_add_interface(struct ieee80211_hw *hw,
2973                 struct ieee80211_vif *vif)
2974 {
2975         struct ath5k_softc *sc = hw->priv;
2976         int ret;
2977
2978         mutex_lock(&sc->lock);
2979         if (sc->vif) {
2980                 ret = 0;
2981                 goto end;
2982         }
2983
2984         sc->vif = vif;
2985
2986         switch (vif->type) {
2987         case NL80211_IFTYPE_AP:
2988         case NL80211_IFTYPE_STATION:
2989         case NL80211_IFTYPE_ADHOC:
2990         case NL80211_IFTYPE_MESH_POINT:
2991         case NL80211_IFTYPE_MONITOR:
2992                 sc->opmode = vif->type;
2993                 break;
2994         default:
2995                 ret = -EOPNOTSUPP;
2996                 goto end;
2997         }
2998
2999         ATH5K_DBG(sc, ATH5K_DEBUG_MODE, "add interface mode %d\n", sc->opmode);
3000
3001         ath5k_hw_set_lladdr(sc->ah, vif->addr);
3002         ath5k_mode_setup(sc);
3003
3004         ret = 0;
3005 end:
3006         mutex_unlock(&sc->lock);
3007         return ret;
3008 }
3009
3010 static void
3011 ath5k_remove_interface(struct ieee80211_hw *hw,
3012                         struct ieee80211_vif *vif)
3013 {
3014         struct ath5k_softc *sc = hw->priv;
3015         u8 mac[ETH_ALEN] = {};
3016
3017         mutex_lock(&sc->lock);
3018         if (sc->vif != vif)
3019                 goto end;
3020
3021         ath5k_hw_set_lladdr(sc->ah, mac);
3022         sc->vif = NULL;
3023 end:
3024         mutex_unlock(&sc->lock);
3025 }
3026
3027 /*
3028  * TODO: Phy disable/diversity etc
3029  */
3030 static int
3031 ath5k_config(struct ieee80211_hw *hw, u32 changed)
3032 {
3033         struct ath5k_softc *sc = hw->priv;
3034         struct ath5k_hw *ah = sc->ah;
3035         struct ieee80211_conf *conf = &hw->conf;
3036         int ret = 0;
3037
3038         mutex_lock(&sc->lock);
3039
3040         if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
3041                 ret = ath5k_chan_set(sc, conf->channel);
3042                 if (ret < 0)
3043                         goto unlock;
3044         }
3045
3046         if ((changed & IEEE80211_CONF_CHANGE_POWER) &&
3047         (sc->power_level != conf->power_level)) {
3048                 sc->power_level = conf->power_level;
3049
3050                 /* Half dB steps */
3051                 ath5k_hw_set_txpower_limit(ah, (conf->power_level * 2));
3052         }
3053
3054         /* TODO:
3055          * 1) Move this on config_interface and handle each case
3056          * separately eg. when we have only one STA vif, use
3057          * AR5K_ANTMODE_SINGLE_AP
3058          *
3059          * 2) Allow the user to change antenna mode eg. when only
3060          * one antenna is present
3061          *
3062          * 3) Allow the user to set default/tx antenna when possible
3063          *
3064          * 4) Default mode should handle 90% of the cases, together
3065          * with fixed a/b and single AP modes we should be able to
3066          * handle 99%. Sectored modes are extreme cases and i still
3067          * haven't found a usage for them. If we decide to support them,
3068          * then we must allow the user to set how many tx antennas we
3069          * have available
3070          */
3071         ath5k_hw_set_antenna_mode(ah, ah->ah_ant_mode);
3072
3073 unlock:
3074         mutex_unlock(&sc->lock);
3075         return ret;
3076 }
3077
3078 static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw,
3079                                    struct netdev_hw_addr_list *mc_list)
3080 {
3081         u32 mfilt[2], val;
3082         u8 pos;
3083         struct netdev_hw_addr *ha;
3084
3085         mfilt[0] = 0;
3086         mfilt[1] = 1;
3087
3088         netdev_hw_addr_list_for_each(ha, mc_list) {
3089                 /* calculate XOR of eight 6-bit values */
3090                 val = get_unaligned_le32(ha->addr + 0);
3091                 pos = (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
3092                 val = get_unaligned_le32(ha->addr + 3);
3093                 pos ^= (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
3094                 pos &= 0x3f;
3095                 mfilt[pos / 32] |= (1 << (pos % 32));
3096                 /* XXX: we might be able to just do this instead,
3097                 * but not sure, needs testing, if we do use this we'd
3098                 * neet to inform below to not reset the mcast */
3099                 /* ath5k_hw_set_mcast_filterindex(ah,
3100                  *      ha->addr[5]); */
3101         }
3102
3103         return ((u64)(mfilt[1]) << 32) | mfilt[0];
3104 }
3105
3106 #define SUPPORTED_FIF_FLAGS \
3107         FIF_PROMISC_IN_BSS |  FIF_ALLMULTI | FIF_FCSFAIL | \
3108         FIF_PLCPFAIL | FIF_CONTROL | FIF_OTHER_BSS | \
3109         FIF_BCN_PRBRESP_PROMISC
3110 /*
3111  * o always accept unicast, broadcast, and multicast traffic
3112  * o multicast traffic for all BSSIDs will be enabled if mac80211
3113  *   says it should be
3114  * o maintain current state of phy ofdm or phy cck error reception.
3115  *   If the hardware detects any of these type of errors then
3116  *   ath5k_hw_get_rx_filter() will pass to us the respective
3117  *   hardware filters to be able to receive these type of frames.
3118  * o probe request frames are accepted only when operating in
3119  *   hostap, adhoc, or monitor modes
3120  * o enable promiscuous mode according to the interface state
3121  * o accept beacons:
3122  *   - when operating in adhoc mode so the 802.11 layer creates
3123  *     node table entries for peers,
3124  *   - when operating in station mode for collecting rssi data when
3125  *     the station is otherwise quiet, or
3126  *   - when scanning
3127  */
3128 static void ath5k_configure_filter(struct ieee80211_hw *hw,
3129                 unsigned int changed_flags,
3130                 unsigned int *new_flags,
3131                 u64 multicast)
3132 {
3133         struct ath5k_softc *sc = hw->priv;
3134         struct ath5k_hw *ah = sc->ah;
3135         u32 mfilt[2], rfilt;
3136
3137         mutex_lock(&sc->lock);
3138
3139         mfilt[0] = multicast;
3140         mfilt[1] = multicast >> 32;
3141
3142         /* Only deal with supported flags */
3143         changed_flags &= SUPPORTED_FIF_FLAGS;
3144         *new_flags &= SUPPORTED_FIF_FLAGS;
3145
3146         /* If HW detects any phy or radar errors, leave those filters on.
3147          * Also, always enable Unicast, Broadcasts and Multicast
3148          * XXX: move unicast, bssid broadcasts and multicast to mac80211 */
3149         rfilt = (ath5k_hw_get_rx_filter(ah) & (AR5K_RX_FILTER_PHYERR)) |
3150                 (AR5K_RX_FILTER_UCAST | AR5K_RX_FILTER_BCAST |
3151                 AR5K_RX_FILTER_MCAST);
3152
3153         if (changed_flags & (FIF_PROMISC_IN_BSS | FIF_OTHER_BSS)) {
3154                 if (*new_flags & FIF_PROMISC_IN_BSS) {
3155                         rfilt |= AR5K_RX_FILTER_PROM;
3156                         __set_bit(ATH_STAT_PROMISC, sc->status);
3157                 } else {
3158                         __clear_bit(ATH_STAT_PROMISC, sc->status);
3159                 }
3160         }
3161
3162         /* Note, AR5K_RX_FILTER_MCAST is already enabled */
3163         if (*new_flags & FIF_ALLMULTI) {
3164                 mfilt[0] =  ~0;
3165                 mfilt[1] =  ~0;
3166         }
3167
3168         /* This is the best we can do */
3169         if (*new_flags & (FIF_FCSFAIL | FIF_PLCPFAIL))
3170                 rfilt |= AR5K_RX_FILTER_PHYERR;
3171
3172         /* FIF_BCN_PRBRESP_PROMISC really means to enable beacons
3173         * and probes for any BSSID, this needs testing */
3174         if (*new_flags & FIF_BCN_PRBRESP_PROMISC)
3175                 rfilt |= AR5K_RX_FILTER_BEACON | AR5K_RX_FILTER_PROBEREQ;
3176
3177         /* FIF_CONTROL doc says that if FIF_PROMISC_IN_BSS is not
3178          * set we should only pass on control frames for this
3179          * station. This needs testing. I believe right now this
3180          * enables *all* control frames, which is OK.. but
3181          * but we should see if we can improve on granularity */
3182         if (*new_flags & FIF_CONTROL)
3183                 rfilt |= AR5K_RX_FILTER_CONTROL;
3184
3185         /* Additional settings per mode -- this is per ath5k */
3186
3187         /* XXX move these to mac80211, and add a beacon IFF flag to mac80211 */
3188
3189         switch (sc->opmode) {
3190         case NL80211_IFTYPE_MESH_POINT:
3191         case NL80211_IFTYPE_MONITOR:
3192                 rfilt |= AR5K_RX_FILTER_CONTROL |
3193                          AR5K_RX_FILTER_BEACON |
3194                          AR5K_RX_FILTER_PROBEREQ |
3195                          AR5K_RX_FILTER_PROM;
3196                 break;
3197         case NL80211_IFTYPE_AP:
3198         case NL80211_IFTYPE_ADHOC:
3199                 rfilt |= AR5K_RX_FILTER_PROBEREQ |
3200                          AR5K_RX_FILTER_BEACON;
3201                 break;
3202         case NL80211_IFTYPE_STATION:
3203                 if (sc->assoc)
3204                         rfilt |= AR5K_RX_FILTER_BEACON;
3205         default:
3206                 break;
3207         }
3208
3209         /* Set filters */
3210         ath5k_hw_set_rx_filter(ah, rfilt);
3211
3212         /* Set multicast bits */
3213         ath5k_hw_set_mcast_filter(ah, mfilt[0], mfilt[1]);
3214         /* Set the cached hw filter flags, this will alter actually
3215          * be set in HW */
3216         sc->filter_flags = rfilt;
3217
3218         mutex_unlock(&sc->lock);
3219 }
3220
3221 static int
3222 ath5k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3223               struct ieee80211_vif *vif, struct ieee80211_sta *sta,
3224               struct ieee80211_key_conf *key)
3225 {
3226         struct ath5k_softc *sc = hw->priv;
3227         struct ath5k_hw *ah = sc->ah;
3228         struct ath_common *common = ath5k_hw_common(ah);
3229         int ret = 0;
3230
3231         if (modparam_nohwcrypt)
3232                 return -EOPNOTSUPP;
3233
3234         if (sc->opmode == NL80211_IFTYPE_AP)
3235                 return -EOPNOTSUPP;
3236
3237         switch (key->alg) {
3238         case ALG_WEP:
3239         case ALG_TKIP:
3240                 break;
3241         case ALG_CCMP:
3242                 if (sc->ah->ah_aes_support)
3243                         break;
3244
3245                 return -EOPNOTSUPP;
3246         default:
3247                 WARN_ON(1);
3248                 return -EINVAL;
3249         }
3250
3251         mutex_lock(&sc->lock);
3252
3253         switch (cmd) {
3254         case SET_KEY:
3255                 ret = ath5k_hw_set_key(sc->ah, key->keyidx, key,
3256                                        sta ? sta->addr : NULL);
3257                 if (ret) {
3258                         ATH5K_ERR(sc, "can't set the key\n");
3259                         goto unlock;
3260                 }
3261                 __set_bit(key->keyidx, common->keymap);
3262                 key->hw_key_idx = key->keyidx;
3263                 key->flags |= (IEEE80211_KEY_FLAG_GENERATE_IV |
3264                                IEEE80211_KEY_FLAG_GENERATE_MMIC);
3265                 break;
3266         case DISABLE_KEY:
3267                 ath5k_hw_reset_key(sc->ah, key->keyidx);
3268                 __clear_bit(key->keyidx, common->keymap);
3269                 break;
3270         default:
3271                 ret = -EINVAL;
3272                 goto unlock;
3273         }
3274
3275 unlock:
3276         mmiowb();
3277         mutex_unlock(&sc->lock);
3278         return ret;
3279 }
3280
3281 static int
3282 ath5k_get_stats(struct ieee80211_hw *hw,
3283                 struct ieee80211_low_level_stats *stats)
3284 {
3285         struct ath5k_softc *sc = hw->priv;
3286
3287         /* Force update */
3288         ath5k_hw_update_mib_counters(sc->ah);
3289
3290         stats->dot11ACKFailureCount = sc->stats.ack_fail;
3291         stats->dot11RTSFailureCount = sc->stats.rts_fail;
3292         stats->dot11RTSSuccessCount = sc->stats.rts_ok;
3293         stats->dot11FCSErrorCount = sc->stats.fcs_error;
3294
3295         return 0;
3296 }
3297
3298 static int ath5k_get_survey(struct ieee80211_hw *hw, int idx,
3299                 struct survey_info *survey)
3300 {
3301         struct ath5k_softc *sc = hw->priv;
3302         struct ieee80211_conf *conf = &hw->conf;
3303
3304          if (idx != 0)
3305                 return -ENOENT;
3306
3307         survey->channel = conf->channel;
3308         survey->filled = SURVEY_INFO_NOISE_DBM;
3309         survey->noise = sc->ah->ah_noise_floor;
3310
3311         return 0;
3312 }
3313
3314 static u64
3315 ath5k_get_tsf(struct ieee80211_hw *hw)
3316 {
3317         struct ath5k_softc *sc = hw->priv;
3318
3319         return ath5k_hw_get_tsf64(sc->ah);
3320 }
3321
3322 static void
3323 ath5k_set_tsf(struct ieee80211_hw *hw, u64 tsf)
3324 {
3325         struct ath5k_softc *sc = hw->priv;
3326
3327         ath5k_hw_set_tsf64(sc->ah, tsf);
3328 }
3329
3330 static void
3331 ath5k_reset_tsf(struct ieee80211_hw *hw)
3332 {
3333         struct ath5k_softc *sc = hw->priv;
3334
3335         /*
3336          * in IBSS mode we need to update the beacon timers too.
3337          * this will also reset the TSF if we call it with 0
3338          */
3339         if (sc->opmode == NL80211_IFTYPE_ADHOC)
3340                 ath5k_beacon_update_timers(sc, 0);
3341         else
3342                 ath5k_hw_reset_tsf(sc->ah);
3343 }
3344
3345 /*
3346  * Updates the beacon that is sent by ath5k_beacon_send.  For adhoc,
3347  * this is called only once at config_bss time, for AP we do it every
3348  * SWBA interrupt so that the TIM will reflect buffered frames.
3349  *
3350  * Called with the beacon lock.
3351  */
3352 static int
3353 ath5k_beacon_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
3354 {
3355         int ret;
3356         struct ath5k_softc *sc = hw->priv;
3357         struct sk_buff *skb;
3358
3359         if (WARN_ON(!vif)) {
3360                 ret = -EINVAL;
3361                 goto out;
3362         }
3363
3364         skb = ieee80211_beacon_get(hw, vif);
3365
3366         if (!skb) {
3367                 ret = -ENOMEM;
3368                 goto out;
3369         }
3370
3371         ath5k_debug_dump_skb(sc, skb, "BC  ", 1);
3372
3373         ath5k_txbuf_free(sc, sc->bbuf);
3374         sc->bbuf->skb = skb;
3375         ret = ath5k_beacon_setup(sc, sc->bbuf);
3376         if (ret)
3377                 sc->bbuf->skb = NULL;
3378 out:
3379         return ret;
3380 }
3381
3382 static void
3383 set_beacon_filter(struct ieee80211_hw *hw, bool enable)
3384 {
3385         struct ath5k_softc *sc = hw->priv;
3386         struct ath5k_hw *ah = sc->ah;
3387         u32 rfilt;
3388         rfilt = ath5k_hw_get_rx_filter(ah);
3389         if (enable)
3390                 rfilt |= AR5K_RX_FILTER_BEACON;
3391         else
3392                 rfilt &= ~AR5K_RX_FILTER_BEACON;
3393         ath5k_hw_set_rx_filter(ah, rfilt);
3394         sc->filter_flags = rfilt;
3395 }
3396
3397 static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
3398                                     struct ieee80211_vif *vif,
3399                                     struct ieee80211_bss_conf *bss_conf,
3400                                     u32 changes)
3401 {
3402         struct ath5k_softc *sc = hw->priv;
3403         struct ath5k_hw *ah = sc->ah;
3404         struct ath_common *common = ath5k_hw_common(ah);
3405         unsigned long flags;
3406
3407         mutex_lock(&sc->lock);
3408         if (WARN_ON(sc->vif != vif))
3409                 goto unlock;
3410
3411         if (changes & BSS_CHANGED_BSSID) {
3412                 /* Cache for later use during resets */
3413                 memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
3414                 common->curaid = 0;
3415                 ath5k_hw_set_associd(ah);
3416                 mmiowb();
3417         }
3418
3419         if (changes & BSS_CHANGED_BEACON_INT)
3420                 sc->bintval = bss_conf->beacon_int;
3421
3422         if (changes & BSS_CHANGED_ASSOC) {
3423                 sc->assoc = bss_conf->assoc;
3424                 if (sc->opmode == NL80211_IFTYPE_STATION)
3425                         set_beacon_filter(hw, sc->assoc);
3426                 ath5k_hw_set_ledstate(sc->ah, sc->assoc ?
3427                         AR5K_LED_ASSOC : AR5K_LED_INIT);
3428                 if (bss_conf->assoc) {
3429                         ATH5K_DBG(sc, ATH5K_DEBUG_ANY,
3430                                   "Bss Info ASSOC %d, bssid: %pM\n",
3431                                   bss_conf->aid, common->curbssid);
3432                         common->curaid = bss_conf->aid;
3433                         ath5k_hw_set_associd(ah);
3434                         /* Once ANI is available you would start it here */
3435                 }
3436         }
3437
3438         if (changes & BSS_CHANGED_BEACON) {
3439                 spin_lock_irqsave(&sc->block, flags);
3440                 ath5k_beacon_update(hw, vif);
3441                 spin_unlock_irqrestore(&sc->block, flags);
3442         }
3443
3444         if (changes & BSS_CHANGED_BEACON_ENABLED)
3445                 sc->enable_beacon = bss_conf->enable_beacon;
3446
3447         if (changes & (BSS_CHANGED_BEACON | BSS_CHANGED_BEACON_ENABLED |
3448                        BSS_CHANGED_BEACON_INT))
3449                 ath5k_beacon_config(sc);
3450
3451  unlock:
3452         mutex_unlock(&sc->lock);
3453 }
3454
3455 static void ath5k_sw_scan_start(struct ieee80211_hw *hw)
3456 {
3457         struct ath5k_softc *sc = hw->priv;
3458         if (!sc->assoc)
3459                 ath5k_hw_set_ledstate(sc->ah, AR5K_LED_SCAN);
3460 }
3461
3462 static void ath5k_sw_scan_complete(struct ieee80211_hw *hw)
3463 {
3464         struct ath5k_softc *sc = hw->priv;
3465         ath5k_hw_set_ledstate(sc->ah, sc->assoc ?
3466                 AR5K_LED_ASSOC : AR5K_LED_INIT);
3467 }
3468
3469 /**
3470  * ath5k_set_coverage_class - Set IEEE 802.11 coverage class
3471  *
3472  * @hw: struct ieee80211_hw pointer
3473  * @coverage_class: IEEE 802.11 coverage class number
3474  *
3475  * Mac80211 callback. Sets slot time, ACK timeout and CTS timeout for given
3476  * coverage class. The values are persistent, they are restored after device
3477  * reset.
3478  */
3479 static void ath5k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class)
3480 {
3481         struct ath5k_softc *sc = hw->priv;
3482
3483         mutex_lock(&sc->lock);
3484         ath5k_hw_set_coverage_class(sc->ah, coverage_class);
3485         mutex_unlock(&sc->lock);
3486 }