Merge branch 'x86-kbuild-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / drivers / net / wireless / ath / ar9170 / main.c
1 /*
2  * Atheros AR9170 driver
3  *
4  * mac80211 interaction code
5  *
6  * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
7  * Copyright 2009, Christian Lamparter <chunkeey@web.de>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; see the file COPYING.  If not, see
21  * http://www.gnu.org/licenses/.
22  *
23  * This file incorporates work covered by the following copyright and
24  * permission notice:
25  *    Copyright (c) 2007-2008 Atheros Communications, Inc.
26  *
27  *    Permission to use, copy, modify, and/or distribute this software for any
28  *    purpose with or without fee is hereby granted, provided that the above
29  *    copyright notice and this permission notice appear in all copies.
30  *
31  *    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
32  *    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
33  *    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
34  *    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
35  *    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
36  *    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
37  *    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
38  */
39
40 #include <linux/init.h>
41 #include <linux/module.h>
42 #include <linux/etherdevice.h>
43 #include <net/mac80211.h>
44 #include "ar9170.h"
45 #include "hw.h"
46 #include "cmd.h"
47
48 static int modparam_nohwcrypt;
49 module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
50 MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
51
52 #define RATE(_bitrate, _hw_rate, _txpidx, _flags) {     \
53         .bitrate        = (_bitrate),                   \
54         .flags          = (_flags),                     \
55         .hw_value       = (_hw_rate) | (_txpidx) << 4,  \
56 }
57
58 static struct ieee80211_rate __ar9170_ratetable[] = {
59         RATE(10, 0, 0, 0),
60         RATE(20, 1, 1, IEEE80211_RATE_SHORT_PREAMBLE),
61         RATE(55, 2, 2, IEEE80211_RATE_SHORT_PREAMBLE),
62         RATE(110, 3, 3, IEEE80211_RATE_SHORT_PREAMBLE),
63         RATE(60, 0xb, 0, 0),
64         RATE(90, 0xf, 0, 0),
65         RATE(120, 0xa, 0, 0),
66         RATE(180, 0xe, 0, 0),
67         RATE(240, 0x9, 0, 0),
68         RATE(360, 0xd, 1, 0),
69         RATE(480, 0x8, 2, 0),
70         RATE(540, 0xc, 3, 0),
71 };
72 #undef RATE
73
74 #define ar9170_g_ratetable      (__ar9170_ratetable + 0)
75 #define ar9170_g_ratetable_size 12
76 #define ar9170_a_ratetable      (__ar9170_ratetable + 4)
77 #define ar9170_a_ratetable_size 8
78
79 /*
80  * NB: The hw_value is used as an index into the ar9170_phy_freq_params
81  *     array in phy.c so that we don't have to do frequency lookups!
82  */
83 #define CHAN(_freq, _idx) {             \
84         .center_freq    = (_freq),      \
85         .hw_value       = (_idx),       \
86         .max_power      = 18, /* XXX */ \
87 }
88
89 static struct ieee80211_channel ar9170_2ghz_chantable[] = {
90         CHAN(2412,  0),
91         CHAN(2417,  1),
92         CHAN(2422,  2),
93         CHAN(2427,  3),
94         CHAN(2432,  4),
95         CHAN(2437,  5),
96         CHAN(2442,  6),
97         CHAN(2447,  7),
98         CHAN(2452,  8),
99         CHAN(2457,  9),
100         CHAN(2462, 10),
101         CHAN(2467, 11),
102         CHAN(2472, 12),
103         CHAN(2484, 13),
104 };
105
106 static struct ieee80211_channel ar9170_5ghz_chantable[] = {
107         CHAN(4920, 14),
108         CHAN(4940, 15),
109         CHAN(4960, 16),
110         CHAN(4980, 17),
111         CHAN(5040, 18),
112         CHAN(5060, 19),
113         CHAN(5080, 20),
114         CHAN(5180, 21),
115         CHAN(5200, 22),
116         CHAN(5220, 23),
117         CHAN(5240, 24),
118         CHAN(5260, 25),
119         CHAN(5280, 26),
120         CHAN(5300, 27),
121         CHAN(5320, 28),
122         CHAN(5500, 29),
123         CHAN(5520, 30),
124         CHAN(5540, 31),
125         CHAN(5560, 32),
126         CHAN(5580, 33),
127         CHAN(5600, 34),
128         CHAN(5620, 35),
129         CHAN(5640, 36),
130         CHAN(5660, 37),
131         CHAN(5680, 38),
132         CHAN(5700, 39),
133         CHAN(5745, 40),
134         CHAN(5765, 41),
135         CHAN(5785, 42),
136         CHAN(5805, 43),
137         CHAN(5825, 44),
138         CHAN(5170, 45),
139         CHAN(5190, 46),
140         CHAN(5210, 47),
141         CHAN(5230, 48),
142 };
143 #undef CHAN
144
145 #define AR9170_HT_CAP                                                   \
146 {                                                                       \
147         .ht_supported   = true,                                         \
148         .cap            = IEEE80211_HT_CAP_MAX_AMSDU |                  \
149                           IEEE80211_HT_CAP_SUP_WIDTH_20_40 |            \
150                           IEEE80211_HT_CAP_SGI_40 |                     \
151                           IEEE80211_HT_CAP_DSSSCCK40 |                  \
152                           IEEE80211_HT_CAP_SM_PS,                       \
153         .ampdu_factor   = 3,                                            \
154         .ampdu_density  = 6,                                            \
155         .mcs            = {                                             \
156                 .rx_mask = { 0xFF, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, },     \
157         },                                                              \
158 }
159
160 static struct ieee80211_supported_band ar9170_band_2GHz = {
161         .channels       = ar9170_2ghz_chantable,
162         .n_channels     = ARRAY_SIZE(ar9170_2ghz_chantable),
163         .bitrates       = ar9170_g_ratetable,
164         .n_bitrates     = ar9170_g_ratetable_size,
165         .ht_cap         = AR9170_HT_CAP,
166 };
167
168 static struct ieee80211_supported_band ar9170_band_5GHz = {
169         .channels       = ar9170_5ghz_chantable,
170         .n_channels     = ARRAY_SIZE(ar9170_5ghz_chantable),
171         .bitrates       = ar9170_a_ratetable,
172         .n_bitrates     = ar9170_a_ratetable_size,
173         .ht_cap         = AR9170_HT_CAP,
174 };
175
176 static void ar9170_tx(struct ar9170 *ar);
177
178 #ifdef AR9170_QUEUE_DEBUG
179 static void ar9170_print_txheader(struct ar9170 *ar, struct sk_buff *skb)
180 {
181         struct ar9170_tx_control *txc = (void *) skb->data;
182         struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
183         struct ar9170_tx_info *arinfo = (void *) txinfo->rate_driver_data;
184         struct ieee80211_hdr *hdr = (void *) txc->frame_data;
185
186         printk(KERN_DEBUG "%s: => FRAME [skb:%p, q:%d, DA:[%pM] flags:%x "
187                           "mac_ctrl:%04x, phy_ctrl:%08x, timeout:[%d ms]]\n",
188                wiphy_name(ar->hw->wiphy), skb, skb_get_queue_mapping(skb),
189                ieee80211_get_DA(hdr), arinfo->flags,
190                le16_to_cpu(txc->mac_control), le32_to_cpu(txc->phy_control),
191                jiffies_to_msecs(arinfo->timeout - jiffies));
192 }
193
194 static void __ar9170_dump_txqueue(struct ar9170 *ar,
195                                 struct sk_buff_head *queue)
196 {
197         struct sk_buff *skb;
198         int i = 0;
199
200         printk(KERN_DEBUG "---[ cut here ]---\n");
201         printk(KERN_DEBUG "%s: %d entries in queue.\n",
202                wiphy_name(ar->hw->wiphy), skb_queue_len(queue));
203
204         skb_queue_walk(queue, skb) {
205                 printk(KERN_DEBUG "index:%d => \n", i++);
206                 ar9170_print_txheader(ar, skb);
207         }
208         if (i != skb_queue_len(queue))
209                 printk(KERN_DEBUG "WARNING: queue frame counter "
210                        "mismatch %d != %d\n", skb_queue_len(queue), i);
211         printk(KERN_DEBUG "---[ end ]---\n");
212 }
213
214 static void ar9170_dump_txqueue(struct ar9170 *ar,
215                                 struct sk_buff_head *queue)
216 {
217         unsigned long flags;
218
219         spin_lock_irqsave(&queue->lock, flags);
220         __ar9170_dump_txqueue(ar, queue);
221         spin_unlock_irqrestore(&queue->lock, flags);
222 }
223
224 static void __ar9170_dump_txstats(struct ar9170 *ar)
225 {
226         int i;
227
228         printk(KERN_DEBUG "%s: QoS queue stats\n",
229                wiphy_name(ar->hw->wiphy));
230
231         for (i = 0; i < __AR9170_NUM_TXQ; i++)
232                 printk(KERN_DEBUG "%s: queue:%d limit:%d len:%d waitack:%d\n",
233                        wiphy_name(ar->hw->wiphy), i, ar->tx_stats[i].limit,
234                        ar->tx_stats[i].len, skb_queue_len(&ar->tx_status[i]));
235 }
236
237 static void ar9170_dump_txstats(struct ar9170 *ar)
238 {
239         unsigned long flags;
240
241         spin_lock_irqsave(&ar->tx_stats_lock, flags);
242         __ar9170_dump_txstats(ar);
243         spin_unlock_irqrestore(&ar->tx_stats_lock, flags);
244 }
245 #endif /* AR9170_QUEUE_DEBUG */
246
247 /* caller must guarantee exclusive access for _bin_ queue. */
248 static void ar9170_recycle_expired(struct ar9170 *ar,
249                                    struct sk_buff_head *queue,
250                                    struct sk_buff_head *bin)
251 {
252         struct sk_buff *skb, *old = NULL;
253         unsigned long flags;
254
255         spin_lock_irqsave(&queue->lock, flags);
256         while ((skb = skb_peek(queue))) {
257                 struct ieee80211_tx_info *txinfo;
258                 struct ar9170_tx_info *arinfo;
259
260                 txinfo = IEEE80211_SKB_CB(skb);
261                 arinfo = (void *) txinfo->rate_driver_data;
262
263                 if (time_is_before_jiffies(arinfo->timeout)) {
264 #ifdef AR9170_QUEUE_DEBUG
265                         printk(KERN_DEBUG "%s: [%ld > %ld] frame expired => "
266                                "recycle \n", wiphy_name(ar->hw->wiphy),
267                                jiffies, arinfo->timeout);
268                         ar9170_print_txheader(ar, skb);
269 #endif /* AR9170_QUEUE_DEBUG */
270                         __skb_unlink(skb, queue);
271                         __skb_queue_tail(bin, skb);
272                 } else {
273                         break;
274                 }
275
276                 if (unlikely(old == skb)) {
277                         /* bail out - queue is shot. */
278
279                         WARN_ON(1);
280                         break;
281                 }
282                 old = skb;
283         }
284         spin_unlock_irqrestore(&queue->lock, flags);
285 }
286
287 static void ar9170_tx_status(struct ar9170 *ar, struct sk_buff *skb,
288                                     u16 tx_status)
289 {
290         struct ieee80211_tx_info *txinfo;
291         unsigned int retries = 0;
292
293         txinfo = IEEE80211_SKB_CB(skb);
294         ieee80211_tx_info_clear_status(txinfo);
295
296         switch (tx_status) {
297         case AR9170_TX_STATUS_RETRY:
298                 retries = 2;
299         case AR9170_TX_STATUS_COMPLETE:
300                 txinfo->flags |= IEEE80211_TX_STAT_ACK;
301                 break;
302
303         case AR9170_TX_STATUS_FAILED:
304                 retries = ar->hw->conf.long_frame_max_tx_count;
305                 break;
306
307         default:
308                 printk(KERN_ERR "%s: invalid tx_status response (%x).\n",
309                        wiphy_name(ar->hw->wiphy), tx_status);
310                 break;
311         }
312
313         txinfo->status.rates[0].count = retries + 1;
314         skb_pull(skb, sizeof(struct ar9170_tx_control));
315         ieee80211_tx_status_irqsafe(ar->hw, skb);
316 }
317
318 void ar9170_tx_callback(struct ar9170 *ar, struct sk_buff *skb)
319 {
320         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
321         struct ar9170_tx_info *arinfo = (void *) info->rate_driver_data;
322         unsigned int queue = skb_get_queue_mapping(skb);
323         unsigned long flags;
324
325         spin_lock_irqsave(&ar->tx_stats_lock, flags);
326         ar->tx_stats[queue].len--;
327
328         if (skb_queue_empty(&ar->tx_pending[queue])) {
329 #ifdef AR9170_QUEUE_STOP_DEBUG
330                 printk(KERN_DEBUG "%s: wake queue %d\n",
331                        wiphy_name(ar->hw->wiphy), queue);
332                 __ar9170_dump_txstats(ar);
333 #endif /* AR9170_QUEUE_STOP_DEBUG */
334                 ieee80211_wake_queue(ar->hw, queue);
335         }
336         spin_unlock_irqrestore(&ar->tx_stats_lock, flags);
337
338         if (arinfo->flags & AR9170_TX_FLAG_BLOCK_ACK) {
339                 dev_kfree_skb_any(skb);
340         } else if (arinfo->flags & AR9170_TX_FLAG_WAIT_FOR_ACK) {
341                 arinfo->timeout = jiffies +
342                                   msecs_to_jiffies(AR9170_TX_TIMEOUT);
343
344                 skb_queue_tail(&ar->tx_status[queue], skb);
345         } else if (arinfo->flags & AR9170_TX_FLAG_NO_ACK) {
346                 ar9170_tx_status(ar, skb, AR9170_TX_STATUS_FAILED);
347         } else {
348 #ifdef AR9170_QUEUE_DEBUG
349                 printk(KERN_DEBUG "%s: unsupported frame flags!\n",
350                        wiphy_name(ar->hw->wiphy));
351                 ar9170_print_txheader(ar, skb);
352 #endif /* AR9170_QUEUE_DEBUG */
353                 dev_kfree_skb_any(skb);
354         }
355
356         if (!ar->tx_stats[queue].len &&
357             !skb_queue_empty(&ar->tx_pending[queue])) {
358                 ar9170_tx(ar);
359         }
360 }
361
362 static struct sk_buff *ar9170_get_queued_skb(struct ar9170 *ar,
363                                              const u8 *mac,
364                                              struct sk_buff_head *queue,
365                                              const u32 rate)
366 {
367         unsigned long flags;
368         struct sk_buff *skb;
369
370         /*
371          * Unfortunately, the firmware does not tell to which (queued) frame
372          * this transmission status report belongs to.
373          *
374          * So we have to make risky guesses - with the scarce information
375          * the firmware provided (-> destination MAC, and phy_control) -
376          * and hope that we picked the right one...
377          */
378
379         spin_lock_irqsave(&queue->lock, flags);
380         skb_queue_walk(queue, skb) {
381                 struct ar9170_tx_control *txc = (void *) skb->data;
382                 struct ieee80211_hdr *hdr = (void *) txc->frame_data;
383                 u32 r;
384
385                 if (mac && compare_ether_addr(ieee80211_get_DA(hdr), mac)) {
386 #ifdef AR9170_QUEUE_DEBUG
387                         printk(KERN_DEBUG "%s: skip frame => DA %pM != %pM\n",
388                                wiphy_name(ar->hw->wiphy), mac,
389                                ieee80211_get_DA(hdr));
390                         ar9170_print_txheader(ar, skb);
391 #endif /* AR9170_QUEUE_DEBUG */
392                         continue;
393                 }
394
395                 r = (le32_to_cpu(txc->phy_control) & AR9170_TX_PHY_MCS_MASK) >>
396                     AR9170_TX_PHY_MCS_SHIFT;
397
398                 if ((rate != AR9170_TX_INVALID_RATE) && (r != rate)) {
399 #ifdef AR9170_QUEUE_DEBUG
400                         printk(KERN_DEBUG "%s: skip frame => rate %d != %d\n",
401                                wiphy_name(ar->hw->wiphy), rate, r);
402                         ar9170_print_txheader(ar, skb);
403 #endif /* AR9170_QUEUE_DEBUG */
404                         continue;
405                 }
406
407                 __skb_unlink(skb, queue);
408                 spin_unlock_irqrestore(&queue->lock, flags);
409                 return skb;
410         }
411
412 #ifdef AR9170_QUEUE_DEBUG
413         printk(KERN_ERR "%s: ESS:[%pM] does not have any "
414                         "outstanding frames in queue.\n",
415                         wiphy_name(ar->hw->wiphy), mac);
416         __ar9170_dump_txqueue(ar, queue);
417 #endif /* AR9170_QUEUE_DEBUG */
418         spin_unlock_irqrestore(&queue->lock, flags);
419
420         return NULL;
421 }
422
423 /*
424  * This worker tries to keeps an maintain tx_status queues.
425  * So we can guarantee that incoming tx_status reports are
426  * actually for a pending frame.
427  */
428
429 static void ar9170_tx_janitor(struct work_struct *work)
430 {
431         struct ar9170 *ar = container_of(work, struct ar9170,
432                                          tx_janitor.work);
433         struct sk_buff_head waste;
434         unsigned int i;
435         bool resched = false;
436
437         if (unlikely(!IS_STARTED(ar)))
438                 return ;
439
440         skb_queue_head_init(&waste);
441
442         for (i = 0; i < __AR9170_NUM_TXQ; i++) {
443 #ifdef AR9170_QUEUE_DEBUG
444                 printk(KERN_DEBUG "%s: garbage collector scans queue:%d\n",
445                        wiphy_name(ar->hw->wiphy), i);
446                 ar9170_dump_txqueue(ar, &ar->tx_pending[i]);
447                 ar9170_dump_txqueue(ar, &ar->tx_status[i]);
448 #endif /* AR9170_QUEUE_DEBUG */
449
450                 ar9170_recycle_expired(ar, &ar->tx_status[i], &waste);
451                 ar9170_recycle_expired(ar, &ar->tx_pending[i], &waste);
452                 skb_queue_purge(&waste);
453
454                 if (!skb_queue_empty(&ar->tx_status[i]) ||
455                     !skb_queue_empty(&ar->tx_pending[i]))
456                         resched = true;
457         }
458
459         if (resched)
460                 queue_delayed_work(ar->hw->workqueue,
461                                    &ar->tx_janitor,
462                                    msecs_to_jiffies(AR9170_JANITOR_DELAY));
463 }
464
465 void ar9170_handle_command_response(struct ar9170 *ar, void *buf, u32 len)
466 {
467         struct ar9170_cmd_response *cmd = (void *) buf;
468
469         if ((cmd->type & 0xc0) != 0xc0) {
470                 ar->callback_cmd(ar, len, buf);
471                 return;
472         }
473
474         /* hardware event handlers */
475         switch (cmd->type) {
476         case 0xc1: {
477                 /*
478                  * TX status notification:
479                  * bytes: 0c c1 XX YY M1 M2 M3 M4 M5 M6 R4 R3 R2 R1 S2 S1
480                  *
481                  * XX always 81
482                  * YY always 00
483                  * M1-M6 is the MAC address
484                  * R1-R4 is the transmit rate
485                  * S1-S2 is the transmit status
486                  */
487
488                 struct sk_buff *skb;
489                 u32 phy = le32_to_cpu(cmd->tx_status.rate);
490                 u32 q = (phy & AR9170_TX_PHY_QOS_MASK) >>
491                         AR9170_TX_PHY_QOS_SHIFT;
492 #ifdef AR9170_QUEUE_DEBUG
493                 printk(KERN_DEBUG "%s: recv tx_status for %pM, p:%08x, q:%d\n",
494                        wiphy_name(ar->hw->wiphy), cmd->tx_status.dst, phy, q);
495 #endif /* AR9170_QUEUE_DEBUG */
496
497                 skb = ar9170_get_queued_skb(ar, cmd->tx_status.dst,
498                                             &ar->tx_status[q],
499                                             AR9170_TX_INVALID_RATE);
500                 if (unlikely(!skb))
501                         return ;
502
503                 ar9170_tx_status(ar, skb, le16_to_cpu(cmd->tx_status.status));
504                 break;
505                 }
506
507         case 0xc0:
508                 /*
509                  * pre-TBTT event
510                  */
511                 if (ar->vif && ar->vif->type == NL80211_IFTYPE_AP)
512                         queue_work(ar->hw->workqueue, &ar->beacon_work);
513                 break;
514
515         case 0xc2:
516                 /*
517                  * (IBSS) beacon send notification
518                  * bytes: 04 c2 XX YY B4 B3 B2 B1
519                  *
520                  * XX always 80
521                  * YY always 00
522                  * B1-B4 "should" be the number of send out beacons.
523                  */
524                 break;
525
526         case 0xc3:
527                 /* End of Atim Window */
528                 break;
529
530         case 0xc4:
531         case 0xc5:
532                 /* BlockACK events */
533                 break;
534
535         case 0xc6:
536                 /* Watchdog Interrupt */
537                 break;
538
539         case 0xc9:
540                 /* retransmission issue / SIFS/EIFS collision ?! */
541                 break;
542
543         /* firmware debug */
544         case 0xca:
545                 printk(KERN_DEBUG "ar9170 FW: %.*s\n", len - 4, (char *)buf + 4);
546                 break;
547         case 0xcb:
548                 len -= 4;
549
550                 switch (len) {
551                 case 1:
552                         printk(KERN_DEBUG "ar9170 FW: u8: %#.2x\n",
553                                 *((char *)buf + 4));
554                         break;
555                 case 2:
556                         printk(KERN_DEBUG "ar9170 FW: u8: %#.4x\n",
557                                 le16_to_cpup((__le16 *)((char *)buf + 4)));
558                         break;
559                 case 4:
560                         printk(KERN_DEBUG "ar9170 FW: u8: %#.8x\n",
561                                 le32_to_cpup((__le32 *)((char *)buf + 4)));
562                         break;
563                 case 8:
564                         printk(KERN_DEBUG "ar9170 FW: u8: %#.16lx\n",
565                                 (unsigned long)le64_to_cpup(
566                                                 (__le64 *)((char *)buf + 4)));
567                         break;
568                 }
569                 break;
570         case 0xcc:
571                 print_hex_dump_bytes("ar9170 FW:", DUMP_PREFIX_NONE,
572                                      (char *)buf + 4, len - 4);
573                 break;
574
575         default:
576                 printk(KERN_INFO "received unhandled event %x\n", cmd->type);
577                 print_hex_dump_bytes("dump:", DUMP_PREFIX_NONE, buf, len);
578                 break;
579         }
580 }
581
582 static void ar9170_rx_reset_rx_mpdu(struct ar9170 *ar)
583 {
584         memset(&ar->rx_mpdu.plcp, 0, sizeof(struct ar9170_rx_head));
585         ar->rx_mpdu.has_plcp = false;
586 }
587
588 int ar9170_nag_limiter(struct ar9170 *ar)
589 {
590         bool print_message;
591
592         /*
593          * we expect all sorts of errors in promiscuous mode.
594          * don't bother with it, it's OK!
595          */
596         if (ar->sniffer_enabled)
597                 return false;
598
599         /*
600          * only go for frequent errors! The hardware tends to
601          * do some stupid thing once in a while under load, in
602          * noisy environments or just for fun!
603          */
604         if (time_before(jiffies, ar->bad_hw_nagger) && net_ratelimit())
605                 print_message = true;
606         else
607                 print_message = false;
608
609         /* reset threshold for "once in a while" */
610         ar->bad_hw_nagger = jiffies + HZ / 4;
611         return print_message;
612 }
613
614 static int ar9170_rx_mac_status(struct ar9170 *ar,
615                                 struct ar9170_rx_head *head,
616                                 struct ar9170_rx_macstatus *mac,
617                                 struct ieee80211_rx_status *status)
618 {
619         u8 error, decrypt;
620
621         BUILD_BUG_ON(sizeof(struct ar9170_rx_head) != 12);
622         BUILD_BUG_ON(sizeof(struct ar9170_rx_macstatus) != 4);
623
624         error = mac->error;
625         if (error & AR9170_RX_ERROR_MMIC) {
626                 status->flag |= RX_FLAG_MMIC_ERROR;
627                 error &= ~AR9170_RX_ERROR_MMIC;
628         }
629
630         if (error & AR9170_RX_ERROR_PLCP) {
631                 status->flag |= RX_FLAG_FAILED_PLCP_CRC;
632                 error &= ~AR9170_RX_ERROR_PLCP;
633
634                 if (!(ar->filter_state & FIF_PLCPFAIL))
635                         return -EINVAL;
636         }
637
638         if (error & AR9170_RX_ERROR_FCS) {
639                 status->flag |= RX_FLAG_FAILED_FCS_CRC;
640                 error &= ~AR9170_RX_ERROR_FCS;
641
642                 if (!(ar->filter_state & FIF_FCSFAIL))
643                         return -EINVAL;
644         }
645
646         decrypt = ar9170_get_decrypt_type(mac);
647         if (!(decrypt & AR9170_RX_ENC_SOFTWARE) &&
648             decrypt != AR9170_ENC_ALG_NONE)
649                 status->flag |= RX_FLAG_DECRYPTED;
650
651         /* ignore wrong RA errors */
652         error &= ~AR9170_RX_ERROR_WRONG_RA;
653
654         if (error & AR9170_RX_ERROR_DECRYPT) {
655                 error &= ~AR9170_RX_ERROR_DECRYPT;
656                 /*
657                  * Rx decryption is done in place,
658                  * the original data is lost anyway.
659                  */
660
661                 return -EINVAL;
662         }
663
664         /* drop any other error frames */
665         if (unlikely(error)) {
666                 /* TODO: update netdevice's RX dropped/errors statistics */
667
668                 if (ar9170_nag_limiter(ar))
669                         printk(KERN_DEBUG "%s: received frame with "
670                                "suspicious error code (%#x).\n",
671                                wiphy_name(ar->hw->wiphy), error);
672
673                 return -EINVAL;
674         }
675
676         status->band = ar->channel->band;
677         status->freq = ar->channel->center_freq;
678
679         switch (mac->status & AR9170_RX_STATUS_MODULATION_MASK) {
680         case AR9170_RX_STATUS_MODULATION_CCK:
681                 if (mac->status & AR9170_RX_STATUS_SHORT_PREAMBLE)
682                         status->flag |= RX_FLAG_SHORTPRE;
683                 switch (head->plcp[0]) {
684                 case 0x0a:
685                         status->rate_idx = 0;
686                         break;
687                 case 0x14:
688                         status->rate_idx = 1;
689                         break;
690                 case 0x37:
691                         status->rate_idx = 2;
692                         break;
693                 case 0x6e:
694                         status->rate_idx = 3;
695                         break;
696                 default:
697                         if (ar9170_nag_limiter(ar))
698                                 printk(KERN_ERR "%s: invalid plcp cck rate "
699                                        "(%x).\n", wiphy_name(ar->hw->wiphy),
700                                        head->plcp[0]);
701                         return -EINVAL;
702                 }
703                 break;
704
705         case AR9170_RX_STATUS_MODULATION_OFDM:
706                 switch (head->plcp[0] & 0xf) {
707                 case 0xb:
708                         status->rate_idx = 0;
709                         break;
710                 case 0xf:
711                         status->rate_idx = 1;
712                         break;
713                 case 0xa:
714                         status->rate_idx = 2;
715                         break;
716                 case 0xe:
717                         status->rate_idx = 3;
718                         break;
719                 case 0x9:
720                         status->rate_idx = 4;
721                         break;
722                 case 0xd:
723                         status->rate_idx = 5;
724                         break;
725                 case 0x8:
726                         status->rate_idx = 6;
727                         break;
728                 case 0xc:
729                         status->rate_idx = 7;
730                         break;
731                 default:
732                         if (ar9170_nag_limiter(ar))
733                                 printk(KERN_ERR "%s: invalid plcp ofdm rate "
734                                        "(%x).\n", wiphy_name(ar->hw->wiphy),
735                                        head->plcp[0]);
736                         return -EINVAL;
737                 }
738                 if (status->band == IEEE80211_BAND_2GHZ)
739                         status->rate_idx += 4;
740                 break;
741
742         case AR9170_RX_STATUS_MODULATION_HT:
743                 if (head->plcp[3] & 0x80)
744                         status->flag |= RX_FLAG_40MHZ;
745                 if (head->plcp[6] & 0x80)
746                         status->flag |= RX_FLAG_SHORT_GI;
747
748                 status->rate_idx = clamp(0, 75, head->plcp[6] & 0x7f);
749                 status->flag |= RX_FLAG_HT;
750                 break;
751
752         case AR9170_RX_STATUS_MODULATION_DUPOFDM:
753                 /* XXX */
754                 if (ar9170_nag_limiter(ar))
755                         printk(KERN_ERR "%s: invalid modulation\n",
756                                wiphy_name(ar->hw->wiphy));
757                 return -EINVAL;
758         }
759
760         return 0;
761 }
762
763 static void ar9170_rx_phy_status(struct ar9170 *ar,
764                                  struct ar9170_rx_phystatus *phy,
765                                  struct ieee80211_rx_status *status)
766 {
767         int i;
768
769         BUILD_BUG_ON(sizeof(struct ar9170_rx_phystatus) != 20);
770
771         for (i = 0; i < 3; i++)
772                 if (phy->rssi[i] != 0x80)
773                         status->antenna |= BIT(i);
774
775         /* post-process RSSI */
776         for (i = 0; i < 7; i++)
777                 if (phy->rssi[i] & 0x80)
778                         phy->rssi[i] = ((phy->rssi[i] & 0x7f) + 1) & 0x7f;
779
780         /* TODO: we could do something with phy_errors */
781         status->signal = ar->noise[0] + phy->rssi_combined;
782         status->noise = ar->noise[0];
783 }
784
785 static struct sk_buff *ar9170_rx_copy_data(u8 *buf, int len)
786 {
787         struct sk_buff *skb;
788         int reserved = 0;
789         struct ieee80211_hdr *hdr = (void *) buf;
790
791         if (ieee80211_is_data_qos(hdr->frame_control)) {
792                 u8 *qc = ieee80211_get_qos_ctl(hdr);
793                 reserved += NET_IP_ALIGN;
794
795                 if (*qc & IEEE80211_QOS_CONTROL_A_MSDU_PRESENT)
796                         reserved += NET_IP_ALIGN;
797         }
798
799         if (ieee80211_has_a4(hdr->frame_control))
800                 reserved += NET_IP_ALIGN;
801
802         reserved = 32 + (reserved & NET_IP_ALIGN);
803
804         skb = dev_alloc_skb(len + reserved);
805         if (likely(skb)) {
806                 skb_reserve(skb, reserved);
807                 memcpy(skb_put(skb, len), buf, len);
808         }
809
810         return skb;
811 }
812
813 /*
814  * If the frame alignment is right (or the kernel has
815  * CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS), and there
816  * is only a single MPDU in the USB frame, then we could
817  * submit to mac80211 the SKB directly. However, since
818  * there may be multiple packets in one SKB in stream
819  * mode, and we need to observe the proper ordering,
820  * this is non-trivial.
821  */
822
823 static void ar9170_handle_mpdu(struct ar9170 *ar, u8 *buf, int len)
824 {
825         struct ar9170_rx_head *head;
826         struct ar9170_rx_macstatus *mac;
827         struct ar9170_rx_phystatus *phy = NULL;
828         struct ieee80211_rx_status status;
829         struct sk_buff *skb;
830         int mpdu_len;
831
832         if (unlikely(!IS_STARTED(ar) || len < (sizeof(*mac))))
833                 return ;
834
835         /* Received MPDU */
836         mpdu_len = len - sizeof(*mac);
837
838         mac = (void *)(buf + mpdu_len);
839         if (unlikely(mac->error & AR9170_RX_ERROR_FATAL)) {
840                 /* this frame is too damaged and can't be used - drop it */
841
842                 return ;
843         }
844
845         switch (mac->status & AR9170_RX_STATUS_MPDU_MASK) {
846         case AR9170_RX_STATUS_MPDU_FIRST:
847                 /* first mpdu packet has the plcp header */
848                 if (likely(mpdu_len >= sizeof(struct ar9170_rx_head))) {
849                         head = (void *) buf;
850                         memcpy(&ar->rx_mpdu.plcp, (void *) buf,
851                                sizeof(struct ar9170_rx_head));
852
853                         mpdu_len -= sizeof(struct ar9170_rx_head);
854                         buf += sizeof(struct ar9170_rx_head);
855                         ar->rx_mpdu.has_plcp = true;
856                 } else {
857                         if (ar9170_nag_limiter(ar))
858                                 printk(KERN_ERR "%s: plcp info is clipped.\n",
859                                        wiphy_name(ar->hw->wiphy));
860                         return ;
861                 }
862                 break;
863
864         case AR9170_RX_STATUS_MPDU_LAST:
865                 /* last mpdu has a extra tail with phy status information */
866
867                 if (likely(mpdu_len >= sizeof(struct ar9170_rx_phystatus))) {
868                         mpdu_len -= sizeof(struct ar9170_rx_phystatus);
869                         phy = (void *)(buf + mpdu_len);
870                 } else {
871                         if (ar9170_nag_limiter(ar))
872                                 printk(KERN_ERR "%s: frame tail is clipped.\n",
873                                        wiphy_name(ar->hw->wiphy));
874                         return ;
875                 }
876
877         case AR9170_RX_STATUS_MPDU_MIDDLE:
878                 /* middle mpdus are just data */
879                 if (unlikely(!ar->rx_mpdu.has_plcp)) {
880                         if (!ar9170_nag_limiter(ar))
881                                 return ;
882
883                         printk(KERN_ERR "%s: rx stream did not start "
884                                         "with a first_mpdu frame tag.\n",
885                                wiphy_name(ar->hw->wiphy));
886
887                         return ;
888                 }
889
890                 head = &ar->rx_mpdu.plcp;
891                 break;
892
893         case AR9170_RX_STATUS_MPDU_SINGLE:
894                 /* single mpdu - has plcp (head) and phy status (tail) */
895                 head = (void *) buf;
896
897                 mpdu_len -= sizeof(struct ar9170_rx_head);
898                 mpdu_len -= sizeof(struct ar9170_rx_phystatus);
899
900                 buf += sizeof(struct ar9170_rx_head);
901                 phy = (void *)(buf + mpdu_len);
902                 break;
903
904         default:
905                 BUG_ON(1);
906                 break;
907         }
908
909         if (unlikely(mpdu_len < FCS_LEN))
910                 return ;
911
912         memset(&status, 0, sizeof(status));
913         if (unlikely(ar9170_rx_mac_status(ar, head, mac, &status)))
914                 return ;
915
916         if (phy)
917                 ar9170_rx_phy_status(ar, phy, &status);
918
919         skb = ar9170_rx_copy_data(buf, mpdu_len);
920         if (likely(skb))
921                 ieee80211_rx_irqsafe(ar->hw, skb, &status);
922 }
923
924 void ar9170_rx(struct ar9170 *ar, struct sk_buff *skb)
925 {
926         unsigned int i, tlen, resplen, wlen = 0, clen = 0;
927         u8 *tbuf, *respbuf;
928
929         tbuf = skb->data;
930         tlen = skb->len;
931
932         while (tlen >= 4) {
933                 clen = tbuf[1] << 8 | tbuf[0];
934                 wlen = ALIGN(clen, 4);
935
936                 /* check if this is stream has a valid tag.*/
937                 if (tbuf[2] != 0 || tbuf[3] != 0x4e) {
938                         /*
939                          * TODO: handle the highly unlikely event that the
940                          * corrupted stream has the TAG at the right position.
941                          */
942
943                         /* check if the frame can be repaired. */
944                         if (!ar->rx_failover_missing) {
945                                 /* this is no "short read". */
946                                 if (ar9170_nag_limiter(ar)) {
947                                         printk(KERN_ERR "%s: missing tag!\n",
948                                                wiphy_name(ar->hw->wiphy));
949                                         goto err_telluser;
950                                 } else
951                                         goto err_silent;
952                         }
953
954                         if (ar->rx_failover_missing > tlen) {
955                                 if (ar9170_nag_limiter(ar)) {
956                                         printk(KERN_ERR "%s: possible multi "
957                                                "stream corruption!\n",
958                                                wiphy_name(ar->hw->wiphy));
959                                         goto err_telluser;
960                                 } else
961                                         goto err_silent;
962                         }
963
964                         memcpy(skb_put(ar->rx_failover, tlen), tbuf, tlen);
965                         ar->rx_failover_missing -= tlen;
966
967                         if (ar->rx_failover_missing <= 0) {
968                                 /*
969                                  * nested ar9170_rx call!
970                                  * termination is guranteed, even when the
971                                  * combined frame also have a element with
972                                  * a bad tag.
973                                  */
974
975                                 ar->rx_failover_missing = 0;
976                                 ar9170_rx(ar, ar->rx_failover);
977
978                                 skb_reset_tail_pointer(ar->rx_failover);
979                                 skb_trim(ar->rx_failover, 0);
980                         }
981
982                         return ;
983                 }
984
985                 /* check if stream is clipped */
986                 if (wlen > tlen - 4) {
987                         if (ar->rx_failover_missing) {
988                                 /* TODO: handle double stream corruption. */
989                                 if (ar9170_nag_limiter(ar)) {
990                                         printk(KERN_ERR "%s: double rx stream "
991                                                "corruption!\n",
992                                                 wiphy_name(ar->hw->wiphy));
993                                         goto err_telluser;
994                                 } else
995                                         goto err_silent;
996                         }
997
998                         /*
999                          * save incomplete data set.
1000                          * the firmware will resend the missing bits when
1001                          * the rx - descriptor comes round again.
1002                          */
1003
1004                         memcpy(skb_put(ar->rx_failover, tlen), tbuf, tlen);
1005                         ar->rx_failover_missing = clen - tlen;
1006                         return ;
1007                 }
1008                 resplen = clen;
1009                 respbuf = tbuf + 4;
1010                 tbuf += wlen + 4;
1011                 tlen -= wlen + 4;
1012
1013                 i = 0;
1014
1015                 /* weird thing, but this is the same in the original driver */
1016                 while (resplen > 2 && i < 12 &&
1017                        respbuf[0] == 0xff && respbuf[1] == 0xff) {
1018                         i += 2;
1019                         resplen -= 2;
1020                         respbuf += 2;
1021                 }
1022
1023                 if (resplen < 4)
1024                         continue;
1025
1026                 /* found the 6 * 0xffff marker? */
1027                 if (i == 12)
1028                         ar9170_handle_command_response(ar, respbuf, resplen);
1029                 else
1030                         ar9170_handle_mpdu(ar, respbuf, clen);
1031         }
1032
1033         if (tlen) {
1034                 if (net_ratelimit())
1035                         printk(KERN_ERR "%s: %d bytes of unprocessed "
1036                                         "data left in rx stream!\n",
1037                                wiphy_name(ar->hw->wiphy), tlen);
1038
1039                 goto err_telluser;
1040         }
1041
1042         return ;
1043
1044 err_telluser:
1045         printk(KERN_ERR "%s: damaged RX stream data [want:%d, "
1046                         "data:%d, rx:%d, pending:%d ]\n",
1047                wiphy_name(ar->hw->wiphy), clen, wlen, tlen,
1048                ar->rx_failover_missing);
1049
1050         if (ar->rx_failover_missing)
1051                 print_hex_dump_bytes("rxbuf:", DUMP_PREFIX_OFFSET,
1052                                      ar->rx_failover->data,
1053                                      ar->rx_failover->len);
1054
1055         print_hex_dump_bytes("stream:", DUMP_PREFIX_OFFSET,
1056                              skb->data, skb->len);
1057
1058         printk(KERN_ERR "%s: please check your hardware and cables, if "
1059                         "you see this message frequently.\n",
1060                wiphy_name(ar->hw->wiphy));
1061
1062 err_silent:
1063         if (ar->rx_failover_missing) {
1064                 skb_reset_tail_pointer(ar->rx_failover);
1065                 skb_trim(ar->rx_failover, 0);
1066                 ar->rx_failover_missing = 0;
1067         }
1068 }
1069
1070 #define AR9170_FILL_QUEUE(queue, ai_fs, cwmin, cwmax, _txop)            \
1071 do {                                                                    \
1072         queue.aifs = ai_fs;                                             \
1073         queue.cw_min = cwmin;                                           \
1074         queue.cw_max = cwmax;                                           \
1075         queue.txop = _txop;                                             \
1076 } while (0)
1077
1078 static int ar9170_op_start(struct ieee80211_hw *hw)
1079 {
1080         struct ar9170 *ar = hw->priv;
1081         int err, i;
1082
1083         mutex_lock(&ar->mutex);
1084
1085         ar->filter_changed = 0;
1086
1087         /* reinitialize queues statistics */
1088         memset(&ar->tx_stats, 0, sizeof(ar->tx_stats));
1089         for (i = 0; i < __AR9170_NUM_TXQ; i++)
1090                 ar->tx_stats[i].limit = AR9170_TXQ_DEPTH;
1091
1092         /* reset QoS defaults */
1093         AR9170_FILL_QUEUE(ar->edcf[0], 3, 15, 1023,  0); /* BEST EFFORT*/
1094         AR9170_FILL_QUEUE(ar->edcf[1], 7, 15, 1023,  0); /* BACKGROUND */
1095         AR9170_FILL_QUEUE(ar->edcf[2], 2, 7,    15, 94); /* VIDEO */
1096         AR9170_FILL_QUEUE(ar->edcf[3], 2, 3,     7, 47); /* VOICE */
1097         AR9170_FILL_QUEUE(ar->edcf[4], 2, 3,     7,  0); /* SPECIAL */
1098
1099         ar->bad_hw_nagger = jiffies;
1100
1101         err = ar->open(ar);
1102         if (err)
1103                 goto out;
1104
1105         err = ar9170_init_mac(ar);
1106         if (err)
1107                 goto out;
1108
1109         err = ar9170_set_qos(ar);
1110         if (err)
1111                 goto out;
1112
1113         err = ar9170_init_phy(ar, IEEE80211_BAND_2GHZ);
1114         if (err)
1115                 goto out;
1116
1117         err = ar9170_init_rf(ar);
1118         if (err)
1119                 goto out;
1120
1121         /* start DMA */
1122         err = ar9170_write_reg(ar, 0x1c3d30, 0x100);
1123         if (err)
1124                 goto out;
1125
1126         ar->state = AR9170_STARTED;
1127
1128 out:
1129         mutex_unlock(&ar->mutex);
1130         return err;
1131 }
1132
1133 static void ar9170_op_stop(struct ieee80211_hw *hw)
1134 {
1135         struct ar9170 *ar = hw->priv;
1136         unsigned int i;
1137
1138         if (IS_STARTED(ar))
1139                 ar->state = AR9170_IDLE;
1140
1141         flush_workqueue(ar->hw->workqueue);
1142
1143         cancel_delayed_work_sync(&ar->tx_janitor);
1144         cancel_work_sync(&ar->filter_config_work);
1145         cancel_work_sync(&ar->beacon_work);
1146         mutex_lock(&ar->mutex);
1147
1148         if (IS_ACCEPTING_CMD(ar)) {
1149                 ar9170_set_leds_state(ar, 0);
1150
1151                 /* stop DMA */
1152                 ar9170_write_reg(ar, 0x1c3d30, 0);
1153                 ar->stop(ar);
1154         }
1155
1156         for (i = 0; i < __AR9170_NUM_TXQ; i++) {
1157                 skb_queue_purge(&ar->tx_pending[i]);
1158                 skb_queue_purge(&ar->tx_status[i]);
1159         }
1160         mutex_unlock(&ar->mutex);
1161 }
1162
1163 static int ar9170_tx_prepare(struct ar9170 *ar, struct sk_buff *skb)
1164 {
1165         struct ieee80211_hdr *hdr;
1166         struct ar9170_tx_control *txc;
1167         struct ieee80211_tx_info *info;
1168         struct ieee80211_tx_rate *txrate;
1169         struct ar9170_tx_info *arinfo;
1170         unsigned int queue = skb_get_queue_mapping(skb);
1171         u16 keytype = 0;
1172         u16 len, icv = 0;
1173
1174         BUILD_BUG_ON(sizeof(*arinfo) > sizeof(info->rate_driver_data));
1175
1176         hdr = (void *)skb->data;
1177         info = IEEE80211_SKB_CB(skb);
1178         len = skb->len;
1179
1180         txc = (void *)skb_push(skb, sizeof(*txc));
1181
1182         if (info->control.hw_key) {
1183                 icv = info->control.hw_key->icv_len;
1184
1185                 switch (info->control.hw_key->alg) {
1186                 case ALG_WEP:
1187                         keytype = AR9170_TX_MAC_ENCR_RC4;
1188                         break;
1189                 case ALG_TKIP:
1190                         keytype = AR9170_TX_MAC_ENCR_RC4;
1191                         break;
1192                 case ALG_CCMP:
1193                         keytype = AR9170_TX_MAC_ENCR_AES;
1194                         break;
1195                 default:
1196                         WARN_ON(1);
1197                         goto err_out;
1198                 }
1199         }
1200
1201         /* Length */
1202         txc->length = cpu_to_le16(len + icv + 4);
1203
1204         txc->mac_control = cpu_to_le16(AR9170_TX_MAC_HW_DURATION |
1205                                        AR9170_TX_MAC_BACKOFF);
1206         txc->mac_control |= cpu_to_le16(ar9170_qos_hwmap[queue] <<
1207                                         AR9170_TX_MAC_QOS_SHIFT);
1208         txc->mac_control |= cpu_to_le16(keytype);
1209         txc->phy_control = cpu_to_le32(0);
1210
1211         if (info->flags & IEEE80211_TX_CTL_NO_ACK)
1212                 txc->mac_control |= cpu_to_le16(AR9170_TX_MAC_NO_ACK);
1213
1214         txrate = &info->control.rates[0];
1215         if (txrate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
1216                 txc->mac_control |= cpu_to_le16(AR9170_TX_MAC_PROT_CTS);
1217         else if (txrate->flags & IEEE80211_TX_RC_USE_RTS_CTS)
1218                 txc->mac_control |= cpu_to_le16(AR9170_TX_MAC_PROT_RTS);
1219
1220         arinfo = (void *)info->rate_driver_data;
1221         arinfo->timeout = jiffies + msecs_to_jiffies(AR9170_QUEUE_TIMEOUT);
1222
1223         if (!(info->flags & IEEE80211_TX_CTL_NO_ACK) &&
1224              (is_valid_ether_addr(ieee80211_get_DA(hdr)))) {
1225                 if (info->flags & IEEE80211_TX_CTL_AMPDU) {
1226                         if (unlikely(!info->control.sta))
1227                                 goto err_out;
1228
1229                         txc->mac_control |= cpu_to_le16(AR9170_TX_MAC_AGGR);
1230                         arinfo->flags = AR9170_TX_FLAG_BLOCK_ACK;
1231                         goto out;
1232                 }
1233
1234                 txc->mac_control |= cpu_to_le16(AR9170_TX_MAC_RATE_PROBE);
1235                 /*
1236                  * WARNING:
1237                  * Putting the QoS queue bits into an unexplored territory is
1238                  * certainly not elegant.
1239                  *
1240                  * In my defense: This idea provides a reasonable way to
1241                  * smuggle valuable information to the tx_status callback.
1242                  * Also, the idea behind this bit-abuse came straight from
1243                  * the original driver code.
1244                  */
1245
1246                 txc->phy_control |=
1247                         cpu_to_le32(queue << AR9170_TX_PHY_QOS_SHIFT);
1248                 arinfo->flags = AR9170_TX_FLAG_WAIT_FOR_ACK;
1249         } else {
1250                 arinfo->flags = AR9170_TX_FLAG_NO_ACK;
1251         }
1252
1253 out:
1254         return 0;
1255
1256 err_out:
1257         skb_pull(skb, sizeof(*txc));
1258         return -EINVAL;
1259 }
1260
1261 static void ar9170_tx_prepare_phy(struct ar9170 *ar, struct sk_buff *skb)
1262 {
1263         struct ar9170_tx_control *txc;
1264         struct ieee80211_tx_info *info;
1265         struct ieee80211_rate *rate = NULL;
1266         struct ieee80211_tx_rate *txrate;
1267         u32 power, chains;
1268
1269         txc = (void *) skb->data;
1270         info = IEEE80211_SKB_CB(skb);
1271         txrate = &info->control.rates[0];
1272
1273         if (txrate->flags & IEEE80211_TX_RC_GREEN_FIELD)
1274                 txc->phy_control |= cpu_to_le32(AR9170_TX_PHY_GREENFIELD);
1275
1276         if (txrate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
1277                 txc->phy_control |= cpu_to_le32(AR9170_TX_PHY_SHORT_PREAMBLE);
1278
1279         if (txrate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
1280                 txc->phy_control |= cpu_to_le32(AR9170_TX_PHY_BW_40MHZ);
1281         /* this works because 40 MHz is 2 and dup is 3 */
1282         if (txrate->flags & IEEE80211_TX_RC_DUP_DATA)
1283                 txc->phy_control |= cpu_to_le32(AR9170_TX_PHY_BW_40MHZ_DUP);
1284
1285         if (txrate->flags & IEEE80211_TX_RC_SHORT_GI)
1286                 txc->phy_control |= cpu_to_le32(AR9170_TX_PHY_SHORT_GI);
1287
1288         if (txrate->flags & IEEE80211_TX_RC_MCS) {
1289                 u32 r = txrate->idx;
1290                 u8 *txpower;
1291
1292                 /* heavy clip control */
1293                 txc->phy_control |= cpu_to_le32((r & 0x7) << 7);
1294
1295                 r <<= AR9170_TX_PHY_MCS_SHIFT;
1296                 BUG_ON(r & ~AR9170_TX_PHY_MCS_MASK);
1297
1298                 txc->phy_control |= cpu_to_le32(r & AR9170_TX_PHY_MCS_MASK);
1299                 txc->phy_control |= cpu_to_le32(AR9170_TX_PHY_MOD_HT);
1300
1301                 if (txrate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH) {
1302                         if (info->band == IEEE80211_BAND_5GHZ)
1303                                 txpower = ar->power_5G_ht40;
1304                         else
1305                                 txpower = ar->power_2G_ht40;
1306                 } else {
1307                         if (info->band == IEEE80211_BAND_5GHZ)
1308                                 txpower = ar->power_5G_ht20;
1309                         else
1310                                 txpower = ar->power_2G_ht20;
1311                 }
1312
1313                 power = txpower[(txrate->idx) & 7];
1314         } else {
1315                 u8 *txpower;
1316                 u32 mod;
1317                 u32 phyrate;
1318                 u8 idx = txrate->idx;
1319
1320                 if (info->band != IEEE80211_BAND_2GHZ) {
1321                         idx += 4;
1322                         txpower = ar->power_5G_leg;
1323                         mod = AR9170_TX_PHY_MOD_OFDM;
1324                 } else {
1325                         if (idx < 4) {
1326                                 txpower = ar->power_2G_cck;
1327                                 mod = AR9170_TX_PHY_MOD_CCK;
1328                         } else {
1329                                 mod = AR9170_TX_PHY_MOD_OFDM;
1330                                 txpower = ar->power_2G_ofdm;
1331                         }
1332                 }
1333
1334                 rate = &__ar9170_ratetable[idx];
1335
1336                 phyrate = rate->hw_value & 0xF;
1337                 power = txpower[(rate->hw_value & 0x30) >> 4];
1338                 phyrate <<= AR9170_TX_PHY_MCS_SHIFT;
1339
1340                 txc->phy_control |= cpu_to_le32(mod);
1341                 txc->phy_control |= cpu_to_le32(phyrate);
1342         }
1343
1344         power <<= AR9170_TX_PHY_TX_PWR_SHIFT;
1345         power &= AR9170_TX_PHY_TX_PWR_MASK;
1346         txc->phy_control |= cpu_to_le32(power);
1347
1348         /* set TX chains */
1349         if (ar->eeprom.tx_mask == 1) {
1350                 chains = AR9170_TX_PHY_TXCHAIN_1;
1351         } else {
1352                 chains = AR9170_TX_PHY_TXCHAIN_2;
1353
1354                 /* >= 36M legacy OFDM - use only one chain */
1355                 if (rate && rate->bitrate >= 360)
1356                         chains = AR9170_TX_PHY_TXCHAIN_1;
1357         }
1358         txc->phy_control |= cpu_to_le32(chains << AR9170_TX_PHY_TXCHAIN_SHIFT);
1359 }
1360
1361 static void ar9170_tx(struct ar9170 *ar)
1362 {
1363         struct sk_buff *skb;
1364         unsigned long flags;
1365         struct ieee80211_tx_info *info;
1366         struct ar9170_tx_info *arinfo;
1367         unsigned int i, frames, frames_failed, remaining_space;
1368         int err;
1369         bool schedule_garbagecollector = false;
1370
1371         BUILD_BUG_ON(sizeof(*arinfo) > sizeof(info->rate_driver_data));
1372
1373         if (unlikely(!IS_STARTED(ar)))
1374                 return ;
1375
1376         remaining_space = AR9170_TX_MAX_PENDING;
1377
1378         for (i = 0; i < __AR9170_NUM_TXQ; i++) {
1379                 spin_lock_irqsave(&ar->tx_stats_lock, flags);
1380                 if (ar->tx_stats[i].len >= ar->tx_stats[i].limit) {
1381 #ifdef AR9170_QUEUE_DEBUG
1382                         printk(KERN_DEBUG "%s: queue %d full\n",
1383                                wiphy_name(ar->hw->wiphy), i);
1384
1385                         __ar9170_dump_txstats(ar);
1386                         printk(KERN_DEBUG "stuck frames: ===> \n");
1387                         ar9170_dump_txqueue(ar, &ar->tx_pending[i]);
1388                         ar9170_dump_txqueue(ar, &ar->tx_status[i]);
1389 #endif /* AR9170_QUEUE_DEBUG */
1390                         ieee80211_stop_queue(ar->hw, i);
1391                         spin_unlock_irqrestore(&ar->tx_stats_lock, flags);
1392                         continue;
1393                 }
1394
1395                 frames = min(ar->tx_stats[i].limit - ar->tx_stats[i].len,
1396                              skb_queue_len(&ar->tx_pending[i]));
1397
1398                 if (remaining_space < frames) {
1399 #ifdef AR9170_QUEUE_DEBUG
1400                         printk(KERN_DEBUG "%s: tx quota reached queue:%d, "
1401                                "remaining slots:%d, needed:%d\n",
1402                                wiphy_name(ar->hw->wiphy), i, remaining_space,
1403                                frames);
1404
1405                         ar9170_dump_txstats(ar);
1406 #endif /* AR9170_QUEUE_DEBUG */
1407                         frames = remaining_space;
1408                 }
1409
1410                 ar->tx_stats[i].len += frames;
1411                 ar->tx_stats[i].count += frames;
1412                 spin_unlock_irqrestore(&ar->tx_stats_lock, flags);
1413
1414                 if (!frames)
1415                         continue;
1416
1417                 frames_failed = 0;
1418                 while (frames) {
1419                         skb = skb_dequeue(&ar->tx_pending[i]);
1420                         if (unlikely(!skb)) {
1421                                 frames_failed += frames;
1422                                 frames = 0;
1423                                 break;
1424                         }
1425
1426                         info = IEEE80211_SKB_CB(skb);
1427                         arinfo = (void *) info->rate_driver_data;
1428
1429                         /* TODO: cancel stuck frames */
1430                         arinfo->timeout = jiffies +
1431                                           msecs_to_jiffies(AR9170_TX_TIMEOUT);
1432
1433 #ifdef AR9170_QUEUE_DEBUG
1434                         printk(KERN_DEBUG "%s: send frame q:%d =>\n",
1435                                wiphy_name(ar->hw->wiphy), i);
1436                         ar9170_print_txheader(ar, skb);
1437 #endif /* AR9170_QUEUE_DEBUG */
1438
1439                         err = ar->tx(ar, skb);
1440                         if (unlikely(err)) {
1441                                 frames_failed++;
1442                                 dev_kfree_skb_any(skb);
1443                         } else {
1444                                 remaining_space--;
1445                                 schedule_garbagecollector = true;
1446                         }
1447
1448                         frames--;
1449                 }
1450
1451 #ifdef AR9170_QUEUE_DEBUG
1452                 printk(KERN_DEBUG "%s: ar9170_tx report for queue %d\n",
1453                        wiphy_name(ar->hw->wiphy), i);
1454
1455                 printk(KERN_DEBUG "%s: unprocessed pending frames left:\n",
1456                        wiphy_name(ar->hw->wiphy));
1457                 ar9170_dump_txqueue(ar, &ar->tx_pending[i]);
1458 #endif /* AR9170_QUEUE_DEBUG */
1459
1460                 if (unlikely(frames_failed)) {
1461 #ifdef AR9170_QUEUE_DEBUG
1462                         printk(KERN_DEBUG "%s: frames failed =>\n",
1463                                wiphy_name(ar->hw->wiphy), frames_failed);
1464 #endif /* AR9170_QUEUE_DEBUG */
1465
1466                         spin_lock_irqsave(&ar->tx_stats_lock, flags);
1467                         ar->tx_stats[i].len -= frames_failed;
1468                         ar->tx_stats[i].count -= frames_failed;
1469                         ieee80211_wake_queue(ar->hw, i);
1470                         spin_unlock_irqrestore(&ar->tx_stats_lock, flags);
1471                 }
1472         }
1473
1474         if (schedule_garbagecollector)
1475                 queue_delayed_work(ar->hw->workqueue,
1476                                    &ar->tx_janitor,
1477                                    msecs_to_jiffies(AR9170_JANITOR_DELAY));
1478 }
1479
1480 int ar9170_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1481 {
1482         struct ar9170 *ar = hw->priv;
1483         struct ieee80211_tx_info *info;
1484
1485         if (unlikely(!IS_STARTED(ar)))
1486                 goto err_free;
1487
1488         if (unlikely(ar9170_tx_prepare(ar, skb)))
1489                 goto err_free;
1490
1491         info = IEEE80211_SKB_CB(skb);
1492         if (info->flags & IEEE80211_TX_CTL_AMPDU) {
1493                 /* drop frame, we do not allow TX A-MPDU aggregation yet. */
1494                 goto err_free;
1495         } else {
1496                 unsigned int queue = skb_get_queue_mapping(skb);
1497
1498                 ar9170_tx_prepare_phy(ar, skb);
1499                 skb_queue_tail(&ar->tx_pending[queue], skb);
1500         }
1501
1502         ar9170_tx(ar);
1503         return NETDEV_TX_OK;
1504
1505 err_free:
1506         dev_kfree_skb_any(skb);
1507         return NETDEV_TX_OK;
1508 }
1509
1510 static int ar9170_op_add_interface(struct ieee80211_hw *hw,
1511                                    struct ieee80211_if_init_conf *conf)
1512 {
1513         struct ar9170 *ar = hw->priv;
1514         int err = 0;
1515
1516         mutex_lock(&ar->mutex);
1517
1518         if (ar->vif) {
1519                 err = -EBUSY;
1520                 goto unlock;
1521         }
1522
1523         ar->vif = conf->vif;
1524         memcpy(ar->mac_addr, conf->mac_addr, ETH_ALEN);
1525
1526         if (modparam_nohwcrypt || (ar->vif->type != NL80211_IFTYPE_STATION)) {
1527                 ar->rx_software_decryption = true;
1528                 ar->disable_offload = true;
1529         }
1530
1531         ar->cur_filter = 0;
1532         ar->want_filter = AR9170_MAC_REG_FTF_DEFAULTS;
1533         err = ar9170_update_frame_filter(ar);
1534         if (err)
1535                 goto unlock;
1536
1537         err = ar9170_set_operating_mode(ar);
1538
1539 unlock:
1540         mutex_unlock(&ar->mutex);
1541         return err;
1542 }
1543
1544 static void ar9170_op_remove_interface(struct ieee80211_hw *hw,
1545                                        struct ieee80211_if_init_conf *conf)
1546 {
1547         struct ar9170 *ar = hw->priv;
1548
1549         mutex_lock(&ar->mutex);
1550         ar->vif = NULL;
1551         ar->want_filter = 0;
1552         ar9170_update_frame_filter(ar);
1553         ar9170_set_beacon_timers(ar);
1554         dev_kfree_skb(ar->beacon);
1555         ar->beacon = NULL;
1556         ar->sniffer_enabled = false;
1557         ar->rx_software_decryption = false;
1558         ar9170_set_operating_mode(ar);
1559         mutex_unlock(&ar->mutex);
1560 }
1561
1562 static int ar9170_op_config(struct ieee80211_hw *hw, u32 changed)
1563 {
1564         struct ar9170 *ar = hw->priv;
1565         int err = 0;
1566
1567         mutex_lock(&ar->mutex);
1568
1569         if (changed & IEEE80211_CONF_CHANGE_LISTEN_INTERVAL) {
1570                 /* TODO */
1571                 err = 0;
1572         }
1573
1574         if (changed & IEEE80211_CONF_CHANGE_PS) {
1575                 /* TODO */
1576                 err = 0;
1577         }
1578
1579         if (changed & IEEE80211_CONF_CHANGE_POWER) {
1580                 /* TODO */
1581                 err = 0;
1582         }
1583
1584         if (changed & IEEE80211_CONF_CHANGE_RETRY_LIMITS) {
1585                 /*
1586                  * is it long_frame_max_tx_count or short_frame_max_tx_count?
1587                  */
1588
1589                 err = ar9170_set_hwretry_limit(ar,
1590                         ar->hw->conf.long_frame_max_tx_count);
1591                 if (err)
1592                         goto out;
1593         }
1594
1595         if (changed & BSS_CHANGED_BEACON_INT) {
1596                 err = ar9170_set_beacon_timers(ar);
1597                 if (err)
1598                         goto out;
1599         }
1600
1601         if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
1602
1603                 /* adjust slot time for 5 GHz */
1604                 err = ar9170_set_slot_time(ar);
1605                 if (err)
1606                         goto out;
1607
1608                 err = ar9170_set_dyn_sifs_ack(ar);
1609                 if (err)
1610                         goto out;
1611
1612                 err = ar9170_set_channel(ar, hw->conf.channel,
1613                                 AR9170_RFI_NONE,
1614                                 nl80211_to_ar9170(hw->conf.channel_type));
1615                 if (err)
1616                         goto out;
1617         }
1618
1619 out:
1620         mutex_unlock(&ar->mutex);
1621         return err;
1622 }
1623
1624 static void ar9170_set_filters(struct work_struct *work)
1625 {
1626         struct ar9170 *ar = container_of(work, struct ar9170,
1627                                          filter_config_work);
1628         int err;
1629
1630         if (unlikely(!IS_STARTED(ar)))
1631                 return ;
1632
1633         mutex_lock(&ar->mutex);
1634         if (test_and_clear_bit(AR9170_FILTER_CHANGED_MODE,
1635                                &ar->filter_changed)) {
1636                 err = ar9170_set_operating_mode(ar);
1637                 if (err)
1638                         goto unlock;
1639         }
1640
1641         if (test_and_clear_bit(AR9170_FILTER_CHANGED_MULTICAST,
1642                                &ar->filter_changed)) {
1643                 err = ar9170_update_multicast(ar);
1644                 if (err)
1645                         goto unlock;
1646         }
1647
1648         if (test_and_clear_bit(AR9170_FILTER_CHANGED_FRAMEFILTER,
1649                                &ar->filter_changed)) {
1650                 err = ar9170_update_frame_filter(ar);
1651                 if (err)
1652                         goto unlock;
1653         }
1654
1655 unlock:
1656         mutex_unlock(&ar->mutex);
1657 }
1658
1659 static void ar9170_op_configure_filter(struct ieee80211_hw *hw,
1660                                        unsigned int changed_flags,
1661                                        unsigned int *new_flags,
1662                                        int mc_count, struct dev_mc_list *mclist)
1663 {
1664         struct ar9170 *ar = hw->priv;
1665
1666         /* mask supported flags */
1667         *new_flags &= FIF_ALLMULTI | FIF_CONTROL | FIF_BCN_PRBRESP_PROMISC |
1668                       FIF_PROMISC_IN_BSS | FIF_FCSFAIL | FIF_PLCPFAIL;
1669         ar->filter_state = *new_flags;
1670         /*
1671          * We can support more by setting the sniffer bit and
1672          * then checking the error flags, later.
1673          */
1674
1675         if (changed_flags & FIF_ALLMULTI) {
1676                 if (*new_flags & FIF_ALLMULTI) {
1677                         ar->want_mc_hash = ~0ULL;
1678                 } else {
1679                         u64 mchash;
1680                         int i;
1681
1682                         /* always get broadcast frames */
1683                         mchash = 1ULL << (0xff >> 2);
1684
1685                         for (i = 0; i < mc_count; i++) {
1686                                 if (WARN_ON(!mclist))
1687                                         break;
1688                                 mchash |= 1ULL << (mclist->dmi_addr[5] >> 2);
1689                                 mclist = mclist->next;
1690                         }
1691                 ar->want_mc_hash = mchash;
1692                 }
1693                 set_bit(AR9170_FILTER_CHANGED_MULTICAST, &ar->filter_changed);
1694         }
1695
1696         if (changed_flags & FIF_CONTROL) {
1697                 u32 filter = AR9170_MAC_REG_FTF_PSPOLL |
1698                              AR9170_MAC_REG_FTF_RTS |
1699                              AR9170_MAC_REG_FTF_CTS |
1700                              AR9170_MAC_REG_FTF_ACK |
1701                              AR9170_MAC_REG_FTF_CFE |
1702                              AR9170_MAC_REG_FTF_CFE_ACK;
1703
1704                 if (*new_flags & FIF_CONTROL)
1705                         ar->want_filter = ar->cur_filter | filter;
1706                 else
1707                         ar->want_filter = ar->cur_filter & ~filter;
1708
1709                 set_bit(AR9170_FILTER_CHANGED_FRAMEFILTER,
1710                         &ar->filter_changed);
1711         }
1712
1713         if (changed_flags & FIF_PROMISC_IN_BSS) {
1714                 ar->sniffer_enabled = ((*new_flags) & FIF_PROMISC_IN_BSS) != 0;
1715                 set_bit(AR9170_FILTER_CHANGED_MODE,
1716                         &ar->filter_changed);
1717         }
1718
1719         if (likely(IS_STARTED(ar)))
1720                 queue_work(ar->hw->workqueue, &ar->filter_config_work);
1721 }
1722
1723 static void ar9170_op_bss_info_changed(struct ieee80211_hw *hw,
1724                                        struct ieee80211_vif *vif,
1725                                        struct ieee80211_bss_conf *bss_conf,
1726                                        u32 changed)
1727 {
1728         struct ar9170 *ar = hw->priv;
1729         int err = 0;
1730
1731         mutex_lock(&ar->mutex);
1732
1733         if (changed & BSS_CHANGED_BSSID) {
1734                 memcpy(ar->bssid, bss_conf->bssid, ETH_ALEN);
1735                 err = ar9170_set_operating_mode(ar);
1736                 if (err)
1737                         goto out;
1738         }
1739
1740         if (changed & (BSS_CHANGED_BEACON | BSS_CHANGED_BEACON_ENABLED)) {
1741                 err = ar9170_update_beacon(ar);
1742                 if (err)
1743                         goto out;
1744
1745                 err = ar9170_set_beacon_timers(ar);
1746                 if (err)
1747                         goto out;
1748         }
1749
1750         if (changed & BSS_CHANGED_ASSOC) {
1751 #ifndef CONFIG_AR9170_LEDS
1752                 /* enable assoc LED. */
1753                 err = ar9170_set_leds_state(ar, bss_conf->assoc ? 2 : 0);
1754 #endif /* CONFIG_AR9170_LEDS */
1755         }
1756
1757         if (changed & BSS_CHANGED_BEACON_INT) {
1758                 err = ar9170_set_beacon_timers(ar);
1759                 if (err)
1760                         goto out;
1761         }
1762
1763         if (changed & BSS_CHANGED_HT) {
1764                 /* TODO */
1765                 err = 0;
1766         }
1767
1768         if (changed & BSS_CHANGED_ERP_SLOT) {
1769                 err = ar9170_set_slot_time(ar);
1770                 if (err)
1771                         goto out;
1772         }
1773
1774         if (changed & BSS_CHANGED_BASIC_RATES) {
1775                 err = ar9170_set_basic_rates(ar);
1776                 if (err)
1777                         goto out;
1778         }
1779
1780 out:
1781         mutex_unlock(&ar->mutex);
1782 }
1783
1784 static u64 ar9170_op_get_tsf(struct ieee80211_hw *hw)
1785 {
1786         struct ar9170 *ar = hw->priv;
1787         int err;
1788         u32 tsf_low;
1789         u32 tsf_high;
1790         u64 tsf;
1791
1792         mutex_lock(&ar->mutex);
1793         err = ar9170_read_reg(ar, AR9170_MAC_REG_TSF_L, &tsf_low);
1794         if (!err)
1795                 err = ar9170_read_reg(ar, AR9170_MAC_REG_TSF_H, &tsf_high);
1796         mutex_unlock(&ar->mutex);
1797
1798         if (WARN_ON(err))
1799                 return 0;
1800
1801         tsf = tsf_high;
1802         tsf = (tsf << 32) | tsf_low;
1803         return tsf;
1804 }
1805
1806 static int ar9170_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1807                           struct ieee80211_vif *vif, struct ieee80211_sta *sta,
1808                           struct ieee80211_key_conf *key)
1809 {
1810         struct ar9170 *ar = hw->priv;
1811         int err = 0, i;
1812         u8 ktype;
1813
1814         if ((!ar->vif) || (ar->disable_offload))
1815                 return -EOPNOTSUPP;
1816
1817         switch (key->alg) {
1818         case ALG_WEP:
1819                 if (key->keylen == WLAN_KEY_LEN_WEP40)
1820                         ktype = AR9170_ENC_ALG_WEP64;
1821                 else
1822                         ktype = AR9170_ENC_ALG_WEP128;
1823                 break;
1824         case ALG_TKIP:
1825                 ktype = AR9170_ENC_ALG_TKIP;
1826                 break;
1827         case ALG_CCMP:
1828                 ktype = AR9170_ENC_ALG_AESCCMP;
1829                 break;
1830         default:
1831                 return -EOPNOTSUPP;
1832         }
1833
1834         mutex_lock(&ar->mutex);
1835         if (cmd == SET_KEY) {
1836                 if (unlikely(!IS_STARTED(ar))) {
1837                         err = -EOPNOTSUPP;
1838                         goto out;
1839                 }
1840
1841                 /* group keys need all-zeroes address */
1842                 if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
1843                         sta = NULL;
1844
1845                 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) {
1846                         for (i = 0; i < 64; i++)
1847                                 if (!(ar->usedkeys & BIT(i)))
1848                                         break;
1849                         if (i == 64) {
1850                                 ar->rx_software_decryption = true;
1851                                 ar9170_set_operating_mode(ar);
1852                                 err = -ENOSPC;
1853                                 goto out;
1854                         }
1855                 } else {
1856                         i = 64 + key->keyidx;
1857                 }
1858
1859                 key->hw_key_idx = i;
1860
1861                 err = ar9170_upload_key(ar, i, sta ? sta->addr : NULL, ktype, 0,
1862                                         key->key, min_t(u8, 16, key->keylen));
1863                 if (err)
1864                         goto out;
1865
1866                 if (key->alg == ALG_TKIP) {
1867                         err = ar9170_upload_key(ar, i, sta ? sta->addr : NULL,
1868                                                 ktype, 1, key->key + 16, 16);
1869                         if (err)
1870                                 goto out;
1871
1872                         /*
1873                          * hardware is not capable generating the MMIC
1874                          * for fragmented frames!
1875                          */
1876                         key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1877                 }
1878
1879                 if (i < 64)
1880                         ar->usedkeys |= BIT(i);
1881
1882                 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1883         } else {
1884                 if (unlikely(!IS_STARTED(ar))) {
1885                         /* The device is gone... together with the key ;-) */
1886                         err = 0;
1887                         goto out;
1888                 }
1889
1890                 err = ar9170_disable_key(ar, key->hw_key_idx);
1891                 if (err)
1892                         goto out;
1893
1894                 if (key->hw_key_idx < 64) {
1895                         ar->usedkeys &= ~BIT(key->hw_key_idx);
1896                 } else {
1897                         err = ar9170_upload_key(ar, key->hw_key_idx, NULL,
1898                                                 AR9170_ENC_ALG_NONE, 0,
1899                                                 NULL, 0);
1900                         if (err)
1901                                 goto out;
1902
1903                         if (key->alg == ALG_TKIP) {
1904                                 err = ar9170_upload_key(ar, key->hw_key_idx,
1905                                                         NULL,
1906                                                         AR9170_ENC_ALG_NONE, 1,
1907                                                         NULL, 0);
1908                                 if (err)
1909                                         goto out;
1910                         }
1911
1912                 }
1913         }
1914
1915         ar9170_regwrite_begin(ar);
1916         ar9170_regwrite(AR9170_MAC_REG_ROLL_CALL_TBL_L, ar->usedkeys);
1917         ar9170_regwrite(AR9170_MAC_REG_ROLL_CALL_TBL_H, ar->usedkeys >> 32);
1918         ar9170_regwrite_finish();
1919         err = ar9170_regwrite_result();
1920
1921 out:
1922         mutex_unlock(&ar->mutex);
1923
1924         return err;
1925 }
1926
1927 static void ar9170_sta_notify(struct ieee80211_hw *hw,
1928                               struct ieee80211_vif *vif,
1929                               enum sta_notify_cmd cmd,
1930                               struct ieee80211_sta *sta)
1931 {
1932 }
1933
1934 static int ar9170_get_stats(struct ieee80211_hw *hw,
1935                             struct ieee80211_low_level_stats *stats)
1936 {
1937         struct ar9170 *ar = hw->priv;
1938         u32 val;
1939         int err;
1940
1941         mutex_lock(&ar->mutex);
1942         err = ar9170_read_reg(ar, AR9170_MAC_REG_TX_RETRY, &val);
1943         ar->stats.dot11ACKFailureCount += val;
1944
1945         memcpy(stats, &ar->stats, sizeof(*stats));
1946         mutex_unlock(&ar->mutex);
1947
1948         return 0;
1949 }
1950
1951 static int ar9170_get_tx_stats(struct ieee80211_hw *hw,
1952                                struct ieee80211_tx_queue_stats *tx_stats)
1953 {
1954         struct ar9170 *ar = hw->priv;
1955
1956         spin_lock_bh(&ar->tx_stats_lock);
1957         memcpy(tx_stats, ar->tx_stats, sizeof(tx_stats[0]) * hw->queues);
1958         spin_unlock_bh(&ar->tx_stats_lock);
1959
1960         return 0;
1961 }
1962
1963 static int ar9170_conf_tx(struct ieee80211_hw *hw, u16 queue,
1964                           const struct ieee80211_tx_queue_params *param)
1965 {
1966         struct ar9170 *ar = hw->priv;
1967         int ret;
1968
1969         mutex_lock(&ar->mutex);
1970         if (queue < __AR9170_NUM_TXQ) {
1971                 memcpy(&ar->edcf[ar9170_qos_hwmap[queue]],
1972                        param, sizeof(*param));
1973
1974                 ret = ar9170_set_qos(ar);
1975         } else {
1976                 ret = -EINVAL;
1977         }
1978
1979         mutex_unlock(&ar->mutex);
1980         return ret;
1981 }
1982
1983 static int ar9170_ampdu_action(struct ieee80211_hw *hw,
1984                                enum ieee80211_ampdu_mlme_action action,
1985                                struct ieee80211_sta *sta, u16 tid, u16 *ssn)
1986 {
1987         switch (action) {
1988         case IEEE80211_AMPDU_RX_START:
1989         case IEEE80211_AMPDU_RX_STOP:
1990                 /*
1991                  * Something goes wrong -- RX locks up
1992                  * after a while of receiving aggregated
1993                  * frames -- not enabling for now.
1994                  */
1995                 return -EOPNOTSUPP;
1996         default:
1997                 return -EOPNOTSUPP;
1998         }
1999 }
2000
2001 static const struct ieee80211_ops ar9170_ops = {
2002         .start                  = ar9170_op_start,
2003         .stop                   = ar9170_op_stop,
2004         .tx                     = ar9170_op_tx,
2005         .add_interface          = ar9170_op_add_interface,
2006         .remove_interface       = ar9170_op_remove_interface,
2007         .config                 = ar9170_op_config,
2008         .configure_filter       = ar9170_op_configure_filter,
2009         .conf_tx                = ar9170_conf_tx,
2010         .bss_info_changed       = ar9170_op_bss_info_changed,
2011         .get_tsf                = ar9170_op_get_tsf,
2012         .set_key                = ar9170_set_key,
2013         .sta_notify             = ar9170_sta_notify,
2014         .get_stats              = ar9170_get_stats,
2015         .get_tx_stats           = ar9170_get_tx_stats,
2016         .ampdu_action           = ar9170_ampdu_action,
2017 };
2018
2019 void *ar9170_alloc(size_t priv_size)
2020 {
2021         struct ieee80211_hw *hw;
2022         struct ar9170 *ar;
2023         struct sk_buff *skb;
2024         int i;
2025
2026         /*
2027          * this buffer is used for rx stream reconstruction.
2028          * Under heavy load this device (or the transport layer?)
2029          * tends to split the streams into seperate rx descriptors.
2030          */
2031
2032         skb = __dev_alloc_skb(AR9170_MAX_RX_BUFFER_SIZE, GFP_KERNEL);
2033         if (!skb)
2034                 goto err_nomem;
2035
2036         hw = ieee80211_alloc_hw(priv_size, &ar9170_ops);
2037         if (!hw)
2038                 goto err_nomem;
2039
2040         ar = hw->priv;
2041         ar->hw = hw;
2042         ar->rx_failover = skb;
2043
2044         mutex_init(&ar->mutex);
2045         spin_lock_init(&ar->cmdlock);
2046         spin_lock_init(&ar->tx_stats_lock);
2047         for (i = 0; i < __AR9170_NUM_TXQ; i++) {
2048                 skb_queue_head_init(&ar->tx_status[i]);
2049                 skb_queue_head_init(&ar->tx_pending[i]);
2050         }
2051         ar9170_rx_reset_rx_mpdu(ar);
2052         INIT_WORK(&ar->filter_config_work, ar9170_set_filters);
2053         INIT_WORK(&ar->beacon_work, ar9170_new_beacon);
2054         INIT_DELAYED_WORK(&ar->tx_janitor, ar9170_tx_janitor);
2055
2056         /* all hw supports 2.4 GHz, so set channel to 1 by default */
2057         ar->channel = &ar9170_2ghz_chantable[0];
2058
2059         /* first part of wiphy init */
2060         ar->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2061                                          BIT(NL80211_IFTYPE_WDS) |
2062                                          BIT(NL80211_IFTYPE_ADHOC);
2063         ar->hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS |
2064                          IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
2065                          IEEE80211_HW_SIGNAL_DBM |
2066                          IEEE80211_HW_NOISE_DBM;
2067
2068         ar->hw->queues = __AR9170_NUM_TXQ;
2069         ar->hw->extra_tx_headroom = 8;
2070         ar->hw->sta_data_size = sizeof(struct ar9170_sta_info);
2071
2072         ar->hw->max_rates = 1;
2073         ar->hw->max_rate_tries = 3;
2074
2075         for (i = 0; i < ARRAY_SIZE(ar->noise); i++)
2076                 ar->noise[i] = -95; /* ATH_DEFAULT_NOISE_FLOOR */
2077
2078         return ar;
2079
2080 err_nomem:
2081         kfree_skb(skb);
2082         return ERR_PTR(-ENOMEM);
2083 }
2084
2085 static int ar9170_read_eeprom(struct ar9170 *ar)
2086 {
2087 #define RW      8       /* number of words to read at once */
2088 #define RB      (sizeof(u32) * RW)
2089         DECLARE_MAC_BUF(mbuf);
2090         u8 *eeprom = (void *)&ar->eeprom;
2091         u8 *addr = ar->eeprom.mac_address;
2092         __le32 offsets[RW];
2093         int i, j, err, bands = 0;
2094
2095         BUILD_BUG_ON(sizeof(ar->eeprom) & 3);
2096
2097         BUILD_BUG_ON(RB > AR9170_MAX_CMD_LEN - 4);
2098 #ifndef __CHECKER__
2099         /* don't want to handle trailing remains */
2100         BUILD_BUG_ON(sizeof(ar->eeprom) % RB);
2101 #endif
2102
2103         for (i = 0; i < sizeof(ar->eeprom)/RB; i++) {
2104                 for (j = 0; j < RW; j++)
2105                         offsets[j] = cpu_to_le32(AR9170_EEPROM_START +
2106                                                  RB * i + 4 * j);
2107
2108                 err = ar->exec_cmd(ar, AR9170_CMD_RREG,
2109                                    RB, (u8 *) &offsets,
2110                                    RB, eeprom + RB * i);
2111                 if (err)
2112                         return err;
2113         }
2114
2115 #undef RW
2116 #undef RB
2117
2118         if (ar->eeprom.length == cpu_to_le16(0xFFFF))
2119                 return -ENODATA;
2120
2121         if (ar->eeprom.operating_flags & AR9170_OPFLAG_2GHZ) {
2122                 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &ar9170_band_2GHz;
2123                 bands++;
2124         }
2125         if (ar->eeprom.operating_flags & AR9170_OPFLAG_5GHZ) {
2126                 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &ar9170_band_5GHz;
2127                 bands++;
2128         }
2129         /*
2130          * I measured this, a bandswitch takes roughly
2131          * 135 ms and a frequency switch about 80.
2132          *
2133          * FIXME: measure these values again once EEPROM settings
2134          *        are used, that will influence them!
2135          */
2136         if (bands == 2)
2137                 ar->hw->channel_change_time = 135 * 1000;
2138         else
2139                 ar->hw->channel_change_time = 80 * 1000;
2140
2141         ar->regulatory.current_rd = le16_to_cpu(ar->eeprom.reg_domain[0]);
2142         ar->regulatory.current_rd_ext = le16_to_cpu(ar->eeprom.reg_domain[1]);
2143
2144         /* second part of wiphy init */
2145         SET_IEEE80211_PERM_ADDR(ar->hw, addr);
2146
2147         return bands ? 0 : -EINVAL;
2148 }
2149
2150 static int ar9170_reg_notifier(struct wiphy *wiphy,
2151                         struct regulatory_request *request)
2152 {
2153         struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
2154         struct ar9170 *ar = hw->priv;
2155
2156         return ath_reg_notifier_apply(wiphy, request, &ar->regulatory);
2157 }
2158
2159 int ar9170_register(struct ar9170 *ar, struct device *pdev)
2160 {
2161         int err;
2162
2163         /* try to read EEPROM, init MAC addr */
2164         err = ar9170_read_eeprom(ar);
2165         if (err)
2166                 goto err_out;
2167
2168         err = ath_regd_init(&ar->regulatory, ar->hw->wiphy,
2169                             ar9170_reg_notifier);
2170         if (err)
2171                 goto err_out;
2172
2173         err = ieee80211_register_hw(ar->hw);
2174         if (err)
2175                 goto err_out;
2176
2177         if (!ath_is_world_regd(&ar->regulatory))
2178                 regulatory_hint(ar->hw->wiphy, ar->regulatory.alpha2);
2179
2180         err = ar9170_init_leds(ar);
2181         if (err)
2182                 goto err_unreg;
2183
2184 #ifdef CONFIG_AR9170_LEDS
2185         err = ar9170_register_leds(ar);
2186         if (err)
2187                 goto err_unreg;
2188 #endif /* CONFIG_AR9170_LEDS */
2189
2190         dev_info(pdev, "Atheros AR9170 is registered as '%s'\n",
2191                  wiphy_name(ar->hw->wiphy));
2192
2193         return err;
2194
2195 err_unreg:
2196         ieee80211_unregister_hw(ar->hw);
2197
2198 err_out:
2199         return err;
2200 }
2201
2202 void ar9170_unregister(struct ar9170 *ar)
2203 {
2204 #ifdef CONFIG_AR9170_LEDS
2205         ar9170_unregister_leds(ar);
2206 #endif /* CONFIG_AR9170_LEDS */
2207
2208         kfree_skb(ar->rx_failover);
2209         ieee80211_unregister_hw(ar->hw);
2210         mutex_destroy(&ar->mutex);
2211 }