Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[pandora-kernel.git] / drivers / net / wireless / ath / ath9k / hif_usb.c
1 /*
2  * Copyright (c) 2010 Atheros Communications Inc.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 #include "htc.h"
18
19 /* identify firmware images */
20 #define FIRMWARE_AR7010         "ar7010.fw"
21 #define FIRMWARE_AR7010_1_1     "ar7010_1_1.fw"
22 #define FIRMWARE_AR9271         "ar9271.fw"
23
24 MODULE_FIRMWARE(FIRMWARE_AR7010);
25 MODULE_FIRMWARE(FIRMWARE_AR7010_1_1);
26 MODULE_FIRMWARE(FIRMWARE_AR9271);
27
28 static struct usb_device_id ath9k_hif_usb_ids[] = {
29         { USB_DEVICE(0x0cf3, 0x9271) }, /* Atheros */
30         { USB_DEVICE(0x0cf3, 0x1006) }, /* Atheros */
31         { USB_DEVICE(0x0846, 0x9030) }, /* Netgear N150 */
32         { USB_DEVICE(0x07D1, 0x3A10) }, /* Dlink Wireless 150 */
33         { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */
34         { USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */
35         { USB_DEVICE(0x13D3, 0x3346) }, /* IMC Networks */
36         { USB_DEVICE(0x13D3, 0x3348) }, /* Azurewave */
37         { USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */
38         { USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */
39         { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */
40         { USB_DEVICE(0x040D, 0x3801) }, /* VIA */
41         { USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */
42
43         { USB_DEVICE(0x0cf3, 0x7015),
44           .driver_info = AR9287_USB },  /* Atheros */
45         { USB_DEVICE(0x1668, 0x1200),
46           .driver_info = AR9287_USB },  /* Verizon */
47
48         { USB_DEVICE(0x0cf3, 0x7010),
49           .driver_info = AR9280_USB },  /* Atheros */
50         { USB_DEVICE(0x0846, 0x9018),
51           .driver_info = AR9280_USB },  /* Netgear WNDA3200 */
52         { USB_DEVICE(0x083A, 0xA704),
53           .driver_info = AR9280_USB },  /* SMC Networks */
54
55         { USB_DEVICE(0x0cf3, 0x20ff),
56           .driver_info = STORAGE_DEVICE },
57
58         { },
59 };
60
61 MODULE_DEVICE_TABLE(usb, ath9k_hif_usb_ids);
62
63 static int __hif_usb_tx(struct hif_device_usb *hif_dev);
64
65 static void hif_usb_regout_cb(struct urb *urb)
66 {
67         struct cmd_buf *cmd = (struct cmd_buf *)urb->context;
68
69         switch (urb->status) {
70         case 0:
71                 break;
72         case -ENOENT:
73         case -ECONNRESET:
74         case -ENODEV:
75         case -ESHUTDOWN:
76                 goto free;
77         default:
78                 break;
79         }
80
81         if (cmd) {
82                 ath9k_htc_txcompletion_cb(cmd->hif_dev->htc_handle,
83                                           cmd->skb, 1);
84                 kfree(cmd);
85         }
86
87         return;
88 free:
89         kfree_skb(cmd->skb);
90         kfree(cmd);
91 }
92
93 static int hif_usb_send_regout(struct hif_device_usb *hif_dev,
94                                struct sk_buff *skb)
95 {
96         struct urb *urb;
97         struct cmd_buf *cmd;
98         int ret = 0;
99
100         urb = usb_alloc_urb(0, GFP_KERNEL);
101         if (urb == NULL)
102                 return -ENOMEM;
103
104         cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
105         if (cmd == NULL) {
106                 usb_free_urb(urb);
107                 return -ENOMEM;
108         }
109
110         cmd->skb = skb;
111         cmd->hif_dev = hif_dev;
112
113         usb_fill_bulk_urb(urb, hif_dev->udev,
114                          usb_sndbulkpipe(hif_dev->udev, USB_REG_OUT_PIPE),
115                          skb->data, skb->len,
116                          hif_usb_regout_cb, cmd);
117
118         usb_anchor_urb(urb, &hif_dev->regout_submitted);
119         ret = usb_submit_urb(urb, GFP_KERNEL);
120         if (ret) {
121                 usb_unanchor_urb(urb);
122                 kfree(cmd);
123         }
124         usb_free_urb(urb);
125
126         return ret;
127 }
128
129 static inline void ath9k_skb_queue_purge(struct hif_device_usb *hif_dev,
130                                          struct sk_buff_head *list)
131 {
132         struct sk_buff *skb;
133
134         while ((skb = __skb_dequeue(list)) != NULL) {
135                 dev_kfree_skb_any(skb);
136                 TX_STAT_INC(skb_dropped);
137         }
138 }
139
140 static void hif_usb_tx_cb(struct urb *urb)
141 {
142         struct tx_buf *tx_buf = (struct tx_buf *) urb->context;
143         struct hif_device_usb *hif_dev;
144         struct sk_buff *skb;
145
146         if (!tx_buf || !tx_buf->hif_dev)
147                 return;
148
149         hif_dev = tx_buf->hif_dev;
150
151         switch (urb->status) {
152         case 0:
153                 break;
154         case -ENOENT:
155         case -ECONNRESET:
156         case -ENODEV:
157         case -ESHUTDOWN:
158                 /*
159                  * The URB has been killed, free the SKBs.
160                  */
161                 ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue);
162
163                 /*
164                  * If the URBs are being flushed, no need to add this
165                  * URB to the free list.
166                  */
167                 spin_lock(&hif_dev->tx.tx_lock);
168                 if (hif_dev->tx.flags & HIF_USB_TX_FLUSH) {
169                         spin_unlock(&hif_dev->tx.tx_lock);
170                         return;
171                 }
172                 spin_unlock(&hif_dev->tx.tx_lock);
173
174                 /*
175                  * In the stop() case, this URB has to be added to
176                  * the free list.
177                  */
178                 goto add_free;
179         default:
180                 break;
181         }
182
183         /*
184          * Check if TX has been stopped, this is needed because
185          * this CB could have been invoked just after the TX lock
186          * was released in hif_stop() and kill_urb() hasn't been
187          * called yet.
188          */
189         spin_lock(&hif_dev->tx.tx_lock);
190         if (hif_dev->tx.flags & HIF_USB_TX_STOP) {
191                 spin_unlock(&hif_dev->tx.tx_lock);
192                 ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue);
193                 goto add_free;
194         }
195         spin_unlock(&hif_dev->tx.tx_lock);
196
197         /* Complete the queued SKBs. */
198         while ((skb = __skb_dequeue(&tx_buf->skb_queue)) != NULL) {
199                 ath9k_htc_txcompletion_cb(hif_dev->htc_handle,
200                                           skb, 1);
201                 TX_STAT_INC(skb_completed);
202         }
203
204 add_free:
205         /* Re-initialize the SKB queue */
206         tx_buf->len = tx_buf->offset = 0;
207         __skb_queue_head_init(&tx_buf->skb_queue);
208
209         /* Add this TX buffer to the free list */
210         spin_lock(&hif_dev->tx.tx_lock);
211         list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
212         hif_dev->tx.tx_buf_cnt++;
213         if (!(hif_dev->tx.flags & HIF_USB_TX_STOP))
214                 __hif_usb_tx(hif_dev); /* Check for pending SKBs */
215         TX_STAT_INC(buf_completed);
216         spin_unlock(&hif_dev->tx.tx_lock);
217 }
218
219 /* TX lock has to be taken */
220 static int __hif_usb_tx(struct hif_device_usb *hif_dev)
221 {
222         struct tx_buf *tx_buf = NULL;
223         struct sk_buff *nskb = NULL;
224         int ret = 0, i;
225         u16 *hdr, tx_skb_cnt = 0;
226         u8 *buf;
227
228         if (hif_dev->tx.tx_skb_cnt == 0)
229                 return 0;
230
231         /* Check if a free TX buffer is available */
232         if (list_empty(&hif_dev->tx.tx_buf))
233                 return 0;
234
235         tx_buf = list_first_entry(&hif_dev->tx.tx_buf, struct tx_buf, list);
236         list_move_tail(&tx_buf->list, &hif_dev->tx.tx_pending);
237         hif_dev->tx.tx_buf_cnt--;
238
239         tx_skb_cnt = min_t(u16, hif_dev->tx.tx_skb_cnt, MAX_TX_AGGR_NUM);
240
241         for (i = 0; i < tx_skb_cnt; i++) {
242                 nskb = __skb_dequeue(&hif_dev->tx.tx_skb_queue);
243
244                 /* Should never be NULL */
245                 BUG_ON(!nskb);
246
247                 hif_dev->tx.tx_skb_cnt--;
248
249                 buf = tx_buf->buf;
250                 buf += tx_buf->offset;
251                 hdr = (u16 *)buf;
252                 *hdr++ = nskb->len;
253                 *hdr++ = ATH_USB_TX_STREAM_MODE_TAG;
254                 buf += 4;
255                 memcpy(buf, nskb->data, nskb->len);
256                 tx_buf->len = nskb->len + 4;
257
258                 if (i < (tx_skb_cnt - 1))
259                         tx_buf->offset += (((tx_buf->len - 1) / 4) + 1) * 4;
260
261                 if (i == (tx_skb_cnt - 1))
262                         tx_buf->len += tx_buf->offset;
263
264                 __skb_queue_tail(&tx_buf->skb_queue, nskb);
265                 TX_STAT_INC(skb_queued);
266         }
267
268         usb_fill_bulk_urb(tx_buf->urb, hif_dev->udev,
269                           usb_sndbulkpipe(hif_dev->udev, USB_WLAN_TX_PIPE),
270                           tx_buf->buf, tx_buf->len,
271                           hif_usb_tx_cb, tx_buf);
272
273         ret = usb_submit_urb(tx_buf->urb, GFP_ATOMIC);
274         if (ret) {
275                 tx_buf->len = tx_buf->offset = 0;
276                 ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue);
277                 __skb_queue_head_init(&tx_buf->skb_queue);
278                 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
279                 hif_dev->tx.tx_buf_cnt++;
280         }
281
282         if (!ret)
283                 TX_STAT_INC(buf_queued);
284
285         return ret;
286 }
287
288 static int hif_usb_send_tx(struct hif_device_usb *hif_dev, struct sk_buff *skb,
289                            struct ath9k_htc_tx_ctl *tx_ctl)
290 {
291         unsigned long flags;
292
293         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
294
295         if (hif_dev->tx.flags & HIF_USB_TX_STOP) {
296                 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
297                 return -ENODEV;
298         }
299
300         /* Check if the max queue count has been reached */
301         if (hif_dev->tx.tx_skb_cnt > MAX_TX_BUF_NUM) {
302                 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
303                 return -ENOMEM;
304         }
305
306         __skb_queue_tail(&hif_dev->tx.tx_skb_queue, skb);
307         hif_dev->tx.tx_skb_cnt++;
308
309         /* Send normal frames immediately */
310         if (!tx_ctl || (tx_ctl && (tx_ctl->type == ATH9K_HTC_NORMAL)))
311                 __hif_usb_tx(hif_dev);
312
313         /* Check if AMPDUs have to be sent immediately */
314         if (tx_ctl && (tx_ctl->type == ATH9K_HTC_AMPDU) &&
315             (hif_dev->tx.tx_buf_cnt == MAX_TX_URB_NUM) &&
316             (hif_dev->tx.tx_skb_cnt < 2)) {
317                 __hif_usb_tx(hif_dev);
318         }
319
320         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
321
322         return 0;
323 }
324
325 static void hif_usb_start(void *hif_handle, u8 pipe_id)
326 {
327         struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
328         unsigned long flags;
329
330         hif_dev->flags |= HIF_USB_START;
331
332         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
333         hif_dev->tx.flags &= ~HIF_USB_TX_STOP;
334         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
335 }
336
337 static void hif_usb_stop(void *hif_handle, u8 pipe_id)
338 {
339         struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
340         struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
341         unsigned long flags;
342
343         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
344         ath9k_skb_queue_purge(hif_dev, &hif_dev->tx.tx_skb_queue);
345         hif_dev->tx.tx_skb_cnt = 0;
346         hif_dev->tx.flags |= HIF_USB_TX_STOP;
347         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
348
349         /* The pending URBs have to be canceled. */
350         list_for_each_entry_safe(tx_buf, tx_buf_tmp,
351                                  &hif_dev->tx.tx_pending, list) {
352                 usb_kill_urb(tx_buf->urb);
353         }
354 }
355
356 static int hif_usb_send(void *hif_handle, u8 pipe_id, struct sk_buff *skb,
357                         struct ath9k_htc_tx_ctl *tx_ctl)
358 {
359         struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
360         int ret = 0;
361
362         switch (pipe_id) {
363         case USB_WLAN_TX_PIPE:
364                 ret = hif_usb_send_tx(hif_dev, skb, tx_ctl);
365                 break;
366         case USB_REG_OUT_PIPE:
367                 ret = hif_usb_send_regout(hif_dev, skb);
368                 break;
369         default:
370                 dev_err(&hif_dev->udev->dev,
371                         "ath9k_htc: Invalid TX pipe: %d\n", pipe_id);
372                 ret = -EINVAL;
373                 break;
374         }
375
376         return ret;
377 }
378
379 static struct ath9k_htc_hif hif_usb = {
380         .transport = ATH9K_HIF_USB,
381         .name = "ath9k_hif_usb",
382
383         .control_ul_pipe = USB_REG_OUT_PIPE,
384         .control_dl_pipe = USB_REG_IN_PIPE,
385
386         .start = hif_usb_start,
387         .stop = hif_usb_stop,
388         .send = hif_usb_send,
389 };
390
391 static void ath9k_hif_usb_rx_stream(struct hif_device_usb *hif_dev,
392                                     struct sk_buff *skb)
393 {
394         struct sk_buff *nskb, *skb_pool[MAX_PKT_NUM_IN_TRANSFER];
395         int index = 0, i = 0, len = skb->len;
396         int rx_remain_len, rx_pkt_len;
397         u16 pool_index = 0;
398         u8 *ptr;
399
400         spin_lock(&hif_dev->rx_lock);
401
402         rx_remain_len = hif_dev->rx_remain_len;
403         rx_pkt_len = hif_dev->rx_transfer_len;
404
405         if (rx_remain_len != 0) {
406                 struct sk_buff *remain_skb = hif_dev->remain_skb;
407
408                 if (remain_skb) {
409                         ptr = (u8 *) remain_skb->data;
410
411                         index = rx_remain_len;
412                         rx_remain_len -= hif_dev->rx_pad_len;
413                         ptr += rx_pkt_len;
414
415                         memcpy(ptr, skb->data, rx_remain_len);
416
417                         rx_pkt_len += rx_remain_len;
418                         hif_dev->rx_remain_len = 0;
419                         skb_put(remain_skb, rx_pkt_len);
420
421                         skb_pool[pool_index++] = remain_skb;
422
423                 } else {
424                         index = rx_remain_len;
425                 }
426         }
427
428         spin_unlock(&hif_dev->rx_lock);
429
430         while (index < len) {
431                 u16 pkt_len;
432                 u16 pkt_tag;
433                 u16 pad_len;
434                 int chk_idx;
435
436                 ptr = (u8 *) skb->data;
437
438                 pkt_len = ptr[index] + (ptr[index+1] << 8);
439                 pkt_tag = ptr[index+2] + (ptr[index+3] << 8);
440
441                 if (pkt_tag != ATH_USB_RX_STREAM_MODE_TAG) {
442                         RX_STAT_INC(skb_dropped);
443                         return;
444                 }
445
446                 pad_len = 4 - (pkt_len & 0x3);
447                 if (pad_len == 4)
448                         pad_len = 0;
449
450                 chk_idx = index;
451                 index = index + 4 + pkt_len + pad_len;
452
453                 if (index > MAX_RX_BUF_SIZE) {
454                         spin_lock(&hif_dev->rx_lock);
455                         hif_dev->rx_remain_len = index - MAX_RX_BUF_SIZE;
456                         hif_dev->rx_transfer_len =
457                                 MAX_RX_BUF_SIZE - chk_idx - 4;
458                         hif_dev->rx_pad_len = pad_len;
459
460                         nskb = __dev_alloc_skb(pkt_len + 32, GFP_ATOMIC);
461                         if (!nskb) {
462                                 dev_err(&hif_dev->udev->dev,
463                                         "ath9k_htc: RX memory allocation error\n");
464                                 spin_unlock(&hif_dev->rx_lock);
465                                 goto err;
466                         }
467                         skb_reserve(nskb, 32);
468                         RX_STAT_INC(skb_allocated);
469
470                         memcpy(nskb->data, &(skb->data[chk_idx+4]),
471                                hif_dev->rx_transfer_len);
472
473                         /* Record the buffer pointer */
474                         hif_dev->remain_skb = nskb;
475                         spin_unlock(&hif_dev->rx_lock);
476                 } else {
477                         nskb = __dev_alloc_skb(pkt_len + 32, GFP_ATOMIC);
478                         if (!nskb) {
479                                 dev_err(&hif_dev->udev->dev,
480                                         "ath9k_htc: RX memory allocation error\n");
481                                 goto err;
482                         }
483                         skb_reserve(nskb, 32);
484                         RX_STAT_INC(skb_allocated);
485
486                         memcpy(nskb->data, &(skb->data[chk_idx+4]), pkt_len);
487                         skb_put(nskb, pkt_len);
488                         skb_pool[pool_index++] = nskb;
489                 }
490         }
491
492 err:
493         for (i = 0; i < pool_index; i++) {
494                 ath9k_htc_rx_msg(hif_dev->htc_handle, skb_pool[i],
495                                  skb_pool[i]->len, USB_WLAN_RX_PIPE);
496                 RX_STAT_INC(skb_completed);
497         }
498 }
499
500 static void ath9k_hif_usb_rx_cb(struct urb *urb)
501 {
502         struct sk_buff *skb = (struct sk_buff *) urb->context;
503         struct hif_device_usb *hif_dev =
504                 usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
505         int ret;
506
507         if (!skb)
508                 return;
509
510         if (!hif_dev)
511                 goto free;
512
513         switch (urb->status) {
514         case 0:
515                 break;
516         case -ENOENT:
517         case -ECONNRESET:
518         case -ENODEV:
519         case -ESHUTDOWN:
520                 goto free;
521         default:
522                 goto resubmit;
523         }
524
525         if (likely(urb->actual_length != 0)) {
526                 skb_put(skb, urb->actual_length);
527                 ath9k_hif_usb_rx_stream(hif_dev, skb);
528         }
529
530 resubmit:
531         skb_reset_tail_pointer(skb);
532         skb_trim(skb, 0);
533
534         usb_anchor_urb(urb, &hif_dev->rx_submitted);
535         ret = usb_submit_urb(urb, GFP_ATOMIC);
536         if (ret) {
537                 usb_unanchor_urb(urb);
538                 goto free;
539         }
540
541         return;
542 free:
543         kfree_skb(skb);
544 }
545
546 static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
547 {
548         struct sk_buff *skb = (struct sk_buff *) urb->context;
549         struct sk_buff *nskb;
550         struct hif_device_usb *hif_dev =
551                 usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
552         int ret;
553
554         if (!skb)
555                 return;
556
557         if (!hif_dev)
558                 goto free;
559
560         switch (urb->status) {
561         case 0:
562                 break;
563         case -ENOENT:
564         case -ECONNRESET:
565         case -ENODEV:
566         case -ESHUTDOWN:
567                 goto free;
568         default:
569                 goto resubmit;
570         }
571
572         if (likely(urb->actual_length != 0)) {
573                 skb_put(skb, urb->actual_length);
574
575                 /* Process the command first */
576                 ath9k_htc_rx_msg(hif_dev->htc_handle, skb,
577                                  skb->len, USB_REG_IN_PIPE);
578
579
580                 nskb = alloc_skb(MAX_REG_IN_BUF_SIZE, GFP_ATOMIC);
581                 if (!nskb) {
582                         dev_err(&hif_dev->udev->dev,
583                                 "ath9k_htc: REG_IN memory allocation failure\n");
584                         urb->context = NULL;
585                         return;
586                 }
587
588                 usb_fill_bulk_urb(urb, hif_dev->udev,
589                                  usb_rcvbulkpipe(hif_dev->udev,
590                                                  USB_REG_IN_PIPE),
591                                  nskb->data, MAX_REG_IN_BUF_SIZE,
592                                  ath9k_hif_usb_reg_in_cb, nskb);
593
594                 ret = usb_submit_urb(urb, GFP_ATOMIC);
595                 if (ret) {
596                         kfree_skb(nskb);
597                         urb->context = NULL;
598                 }
599
600                 return;
601         }
602
603 resubmit:
604         skb_reset_tail_pointer(skb);
605         skb_trim(skb, 0);
606
607         ret = usb_submit_urb(urb, GFP_ATOMIC);
608         if (ret)
609                 goto free;
610
611         return;
612 free:
613         kfree_skb(skb);
614         urb->context = NULL;
615 }
616
617 static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev)
618 {
619         struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
620         unsigned long flags;
621
622         list_for_each_entry_safe(tx_buf, tx_buf_tmp,
623                                  &hif_dev->tx.tx_buf, list) {
624                 usb_kill_urb(tx_buf->urb);
625                 list_del(&tx_buf->list);
626                 usb_free_urb(tx_buf->urb);
627                 kfree(tx_buf->buf);
628                 kfree(tx_buf);
629         }
630
631         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
632         hif_dev->tx.flags |= HIF_USB_TX_FLUSH;
633         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
634
635         list_for_each_entry_safe(tx_buf, tx_buf_tmp,
636                                  &hif_dev->tx.tx_pending, list) {
637                 usb_kill_urb(tx_buf->urb);
638                 list_del(&tx_buf->list);
639                 usb_free_urb(tx_buf->urb);
640                 kfree(tx_buf->buf);
641                 kfree(tx_buf);
642         }
643 }
644
645 static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
646 {
647         struct tx_buf *tx_buf;
648         int i;
649
650         INIT_LIST_HEAD(&hif_dev->tx.tx_buf);
651         INIT_LIST_HEAD(&hif_dev->tx.tx_pending);
652         spin_lock_init(&hif_dev->tx.tx_lock);
653         __skb_queue_head_init(&hif_dev->tx.tx_skb_queue);
654
655         for (i = 0; i < MAX_TX_URB_NUM; i++) {
656                 tx_buf = kzalloc(sizeof(struct tx_buf), GFP_KERNEL);
657                 if (!tx_buf)
658                         goto err;
659
660                 tx_buf->buf = kzalloc(MAX_TX_BUF_SIZE, GFP_KERNEL);
661                 if (!tx_buf->buf)
662                         goto err;
663
664                 tx_buf->urb = usb_alloc_urb(0, GFP_KERNEL);
665                 if (!tx_buf->urb)
666                         goto err;
667
668                 tx_buf->hif_dev = hif_dev;
669                 __skb_queue_head_init(&tx_buf->skb_queue);
670
671                 list_add_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
672         }
673
674         hif_dev->tx.tx_buf_cnt = MAX_TX_URB_NUM;
675
676         return 0;
677 err:
678         if (tx_buf) {
679                 kfree(tx_buf->buf);
680                 kfree(tx_buf);
681         }
682         ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
683         return -ENOMEM;
684 }
685
686 static void ath9k_hif_usb_dealloc_rx_urbs(struct hif_device_usb *hif_dev)
687 {
688         usb_kill_anchored_urbs(&hif_dev->rx_submitted);
689 }
690
691 static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
692 {
693         struct urb *urb = NULL;
694         struct sk_buff *skb = NULL;
695         int i, ret;
696
697         init_usb_anchor(&hif_dev->rx_submitted);
698         spin_lock_init(&hif_dev->rx_lock);
699
700         for (i = 0; i < MAX_RX_URB_NUM; i++) {
701
702                 /* Allocate URB */
703                 urb = usb_alloc_urb(0, GFP_KERNEL);
704                 if (urb == NULL) {
705                         ret = -ENOMEM;
706                         goto err_urb;
707                 }
708
709                 /* Allocate buffer */
710                 skb = alloc_skb(MAX_RX_BUF_SIZE, GFP_KERNEL);
711                 if (!skb) {
712                         ret = -ENOMEM;
713                         goto err_skb;
714                 }
715
716                 usb_fill_bulk_urb(urb, hif_dev->udev,
717                                   usb_rcvbulkpipe(hif_dev->udev,
718                                                   USB_WLAN_RX_PIPE),
719                                   skb->data, MAX_RX_BUF_SIZE,
720                                   ath9k_hif_usb_rx_cb, skb);
721
722                 /* Anchor URB */
723                 usb_anchor_urb(urb, &hif_dev->rx_submitted);
724
725                 /* Submit URB */
726                 ret = usb_submit_urb(urb, GFP_KERNEL);
727                 if (ret) {
728                         usb_unanchor_urb(urb);
729                         goto err_submit;
730                 }
731
732                 /*
733                  * Drop reference count.
734                  * This ensures that the URB is freed when killing them.
735                  */
736                 usb_free_urb(urb);
737         }
738
739         return 0;
740
741 err_submit:
742         kfree_skb(skb);
743 err_skb:
744         usb_free_urb(urb);
745 err_urb:
746         ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
747         return ret;
748 }
749
750 static void ath9k_hif_usb_dealloc_reg_in_urb(struct hif_device_usb *hif_dev)
751 {
752         if (hif_dev->reg_in_urb) {
753                 usb_kill_urb(hif_dev->reg_in_urb);
754                 if (hif_dev->reg_in_urb->context)
755                         kfree_skb((void *)hif_dev->reg_in_urb->context);
756                 usb_free_urb(hif_dev->reg_in_urb);
757                 hif_dev->reg_in_urb = NULL;
758         }
759 }
760
761 static int ath9k_hif_usb_alloc_reg_in_urb(struct hif_device_usb *hif_dev)
762 {
763         struct sk_buff *skb;
764
765         hif_dev->reg_in_urb = usb_alloc_urb(0, GFP_KERNEL);
766         if (hif_dev->reg_in_urb == NULL)
767                 return -ENOMEM;
768
769         skb = alloc_skb(MAX_REG_IN_BUF_SIZE, GFP_KERNEL);
770         if (!skb)
771                 goto err;
772
773         usb_fill_bulk_urb(hif_dev->reg_in_urb, hif_dev->udev,
774                          usb_rcvbulkpipe(hif_dev->udev,
775                                          USB_REG_IN_PIPE),
776                          skb->data, MAX_REG_IN_BUF_SIZE,
777                          ath9k_hif_usb_reg_in_cb, skb);
778
779         if (usb_submit_urb(hif_dev->reg_in_urb, GFP_KERNEL) != 0)
780                 goto err;
781
782         return 0;
783
784 err:
785         ath9k_hif_usb_dealloc_reg_in_urb(hif_dev);
786         return -ENOMEM;
787 }
788
789 static int ath9k_hif_usb_alloc_urbs(struct hif_device_usb *hif_dev)
790 {
791         /* Register Write */
792         init_usb_anchor(&hif_dev->regout_submitted);
793
794         /* TX */
795         if (ath9k_hif_usb_alloc_tx_urbs(hif_dev) < 0)
796                 goto err;
797
798         /* RX */
799         if (ath9k_hif_usb_alloc_rx_urbs(hif_dev) < 0)
800                 goto err_rx;
801
802         /* Register Read */
803         if (ath9k_hif_usb_alloc_reg_in_urb(hif_dev) < 0)
804                 goto err_reg;
805
806         return 0;
807 err_reg:
808         ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
809 err_rx:
810         ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
811 err:
812         return -ENOMEM;
813 }
814
815 static void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev)
816 {
817         usb_kill_anchored_urbs(&hif_dev->regout_submitted);
818         ath9k_hif_usb_dealloc_reg_in_urb(hif_dev);
819         ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
820         ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
821 }
822
823 static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev,
824                                      u32 drv_info)
825 {
826         int transfer, err;
827         const void *data = hif_dev->firmware->data;
828         size_t len = hif_dev->firmware->size;
829         u32 addr = AR9271_FIRMWARE;
830         u8 *buf = kzalloc(4096, GFP_KERNEL);
831         u32 firm_offset;
832
833         if (!buf)
834                 return -ENOMEM;
835
836         while (len) {
837                 transfer = min_t(int, len, 4096);
838                 memcpy(buf, data, transfer);
839
840                 err = usb_control_msg(hif_dev->udev,
841                                       usb_sndctrlpipe(hif_dev->udev, 0),
842                                       FIRMWARE_DOWNLOAD, 0x40 | USB_DIR_OUT,
843                                       addr >> 8, 0, buf, transfer, HZ);
844                 if (err < 0) {
845                         kfree(buf);
846                         return err;
847                 }
848
849                 len -= transfer;
850                 data += transfer;
851                 addr += transfer;
852         }
853         kfree(buf);
854
855         if (IS_AR7010_DEVICE(drv_info))
856                 firm_offset = AR7010_FIRMWARE_TEXT;
857         else
858                 firm_offset = AR9271_FIRMWARE_TEXT;
859
860         /*
861          * Issue FW download complete command to firmware.
862          */
863         err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0),
864                               FIRMWARE_DOWNLOAD_COMP,
865                               0x40 | USB_DIR_OUT,
866                               firm_offset >> 8, 0, NULL, 0, HZ);
867         if (err)
868                 return -EIO;
869
870         dev_info(&hif_dev->udev->dev, "ath9k_htc: Transferred FW: %s, size: %ld\n",
871                  hif_dev->fw_name, (unsigned long) hif_dev->firmware->size);
872
873         return 0;
874 }
875
876 static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev, u32 drv_info)
877 {
878         int ret, idx;
879         struct usb_host_interface *alt = &hif_dev->interface->altsetting[0];
880         struct usb_endpoint_descriptor *endp;
881
882         /* Request firmware */
883         ret = request_firmware(&hif_dev->firmware, hif_dev->fw_name,
884                                &hif_dev->udev->dev);
885         if (ret) {
886                 dev_err(&hif_dev->udev->dev,
887                         "ath9k_htc: Firmware - %s not found\n", hif_dev->fw_name);
888                 goto err_fw_req;
889         }
890
891         /* Download firmware */
892         ret = ath9k_hif_usb_download_fw(hif_dev, drv_info);
893         if (ret) {
894                 dev_err(&hif_dev->udev->dev,
895                         "ath9k_htc: Firmware - %s download failed\n",
896                         hif_dev->fw_name);
897                 goto err_fw_download;
898         }
899
900         /* On downloading the firmware to the target, the USB descriptor of EP4
901          * is 'patched' to change the type of the endpoint to Bulk. This will
902          * bring down CPU usage during the scan period.
903          */
904         for (idx = 0; idx < alt->desc.bNumEndpoints; idx++) {
905                 endp = &alt->endpoint[idx].desc;
906                 if ((endp->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
907                                 == USB_ENDPOINT_XFER_INT) {
908                         endp->bmAttributes &= ~USB_ENDPOINT_XFERTYPE_MASK;
909                         endp->bmAttributes |= USB_ENDPOINT_XFER_BULK;
910                         endp->bInterval = 0;
911                 }
912         }
913
914         /* Alloc URBs */
915         ret = ath9k_hif_usb_alloc_urbs(hif_dev);
916         if (ret) {
917                 dev_err(&hif_dev->udev->dev,
918                         "ath9k_htc: Unable to allocate URBs\n");
919                 goto err_fw_download;
920         }
921
922         return 0;
923
924 err_fw_download:
925         release_firmware(hif_dev->firmware);
926 err_fw_req:
927         hif_dev->firmware = NULL;
928         return ret;
929 }
930
931 static void ath9k_hif_usb_dev_deinit(struct hif_device_usb *hif_dev)
932 {
933         ath9k_hif_usb_dealloc_urbs(hif_dev);
934         if (hif_dev->firmware)
935                 release_firmware(hif_dev->firmware);
936 }
937
938 /*
939  * An exact copy of the function from zd1211rw.
940  */
941 static int send_eject_command(struct usb_interface *interface)
942 {
943         struct usb_device *udev = interface_to_usbdev(interface);
944         struct usb_host_interface *iface_desc = &interface->altsetting[0];
945         struct usb_endpoint_descriptor *endpoint;
946         unsigned char *cmd;
947         u8 bulk_out_ep;
948         int r;
949
950         /* Find bulk out endpoint */
951         for (r = 1; r >= 0; r--) {
952                 endpoint = &iface_desc->endpoint[r].desc;
953                 if (usb_endpoint_dir_out(endpoint) &&
954                     usb_endpoint_xfer_bulk(endpoint)) {
955                         bulk_out_ep = endpoint->bEndpointAddress;
956                         break;
957                 }
958         }
959         if (r == -1) {
960                 dev_err(&udev->dev,
961                         "ath9k_htc: Could not find bulk out endpoint\n");
962                 return -ENODEV;
963         }
964
965         cmd = kzalloc(31, GFP_KERNEL);
966         if (cmd == NULL)
967                 return -ENODEV;
968
969         /* USB bulk command block */
970         cmd[0] = 0x55;  /* bulk command signature */
971         cmd[1] = 0x53;  /* bulk command signature */
972         cmd[2] = 0x42;  /* bulk command signature */
973         cmd[3] = 0x43;  /* bulk command signature */
974         cmd[14] = 6;    /* command length */
975
976         cmd[15] = 0x1b; /* SCSI command: START STOP UNIT */
977         cmd[19] = 0x2;  /* eject disc */
978
979         dev_info(&udev->dev, "Ejecting storage device...\n");
980         r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, bulk_out_ep),
981                 cmd, 31, NULL, 2000);
982         kfree(cmd);
983         if (r)
984                 return r;
985
986         /* At this point, the device disconnects and reconnects with the real
987          * ID numbers. */
988
989         usb_set_intfdata(interface, NULL);
990         return 0;
991 }
992
993 static int ath9k_hif_usb_probe(struct usb_interface *interface,
994                                const struct usb_device_id *id)
995 {
996         struct usb_device *udev = interface_to_usbdev(interface);
997         struct hif_device_usb *hif_dev;
998         int ret = 0;
999
1000         if (id->driver_info == STORAGE_DEVICE)
1001                 return send_eject_command(interface);
1002
1003         hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL);
1004         if (!hif_dev) {
1005                 ret = -ENOMEM;
1006                 goto err_alloc;
1007         }
1008
1009         usb_get_dev(udev);
1010         hif_dev->udev = udev;
1011         hif_dev->interface = interface;
1012         hif_dev->device_id = id->idProduct;
1013 #ifdef CONFIG_PM
1014         udev->reset_resume = 1;
1015 #endif
1016         usb_set_intfdata(interface, hif_dev);
1017
1018         hif_dev->htc_handle = ath9k_htc_hw_alloc(hif_dev, &hif_usb,
1019                                                  &hif_dev->udev->dev);
1020         if (hif_dev->htc_handle == NULL) {
1021                 ret = -ENOMEM;
1022                 goto err_htc_hw_alloc;
1023         }
1024
1025         /* Find out which firmware to load */
1026
1027         if (IS_AR7010_DEVICE(id->driver_info))
1028                 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202)
1029                         hif_dev->fw_name = FIRMWARE_AR7010_1_1;
1030                 else
1031                         hif_dev->fw_name = FIRMWARE_AR7010;
1032         else
1033                 hif_dev->fw_name = FIRMWARE_AR9271;
1034
1035         ret = ath9k_hif_usb_dev_init(hif_dev, id->driver_info);
1036         if (ret) {
1037                 ret = -EINVAL;
1038                 goto err_hif_init_usb;
1039         }
1040
1041         ret = ath9k_htc_hw_init(hif_dev->htc_handle,
1042                                 &hif_dev->udev->dev, hif_dev->device_id,
1043                                 hif_dev->udev->product, id->driver_info);
1044         if (ret) {
1045                 ret = -EINVAL;
1046                 goto err_htc_hw_init;
1047         }
1048
1049         dev_info(&hif_dev->udev->dev, "ath9k_htc: USB layer initialized\n");
1050
1051         return 0;
1052
1053 err_htc_hw_init:
1054         ath9k_hif_usb_dev_deinit(hif_dev);
1055 err_hif_init_usb:
1056         ath9k_htc_hw_free(hif_dev->htc_handle);
1057 err_htc_hw_alloc:
1058         usb_set_intfdata(interface, NULL);
1059         kfree(hif_dev);
1060         usb_put_dev(udev);
1061 err_alloc:
1062         return ret;
1063 }
1064
1065 static void ath9k_hif_usb_reboot(struct usb_device *udev)
1066 {
1067         u32 reboot_cmd = 0xffffffff;
1068         void *buf;
1069         int ret;
1070
1071         buf = kmemdup(&reboot_cmd, 4, GFP_KERNEL);
1072         if (!buf)
1073                 return;
1074
1075         ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, USB_REG_OUT_PIPE),
1076                            buf, 4, NULL, HZ);
1077         if (ret)
1078                 dev_err(&udev->dev, "ath9k_htc: USB reboot failed\n");
1079
1080         kfree(buf);
1081 }
1082
1083 static void ath9k_hif_usb_disconnect(struct usb_interface *interface)
1084 {
1085         struct usb_device *udev = interface_to_usbdev(interface);
1086         struct hif_device_usb *hif_dev = usb_get_intfdata(interface);
1087         bool unplugged = (udev->state == USB_STATE_NOTATTACHED) ? true : false;
1088
1089         if (!hif_dev)
1090                 return;
1091
1092         ath9k_htc_hw_deinit(hif_dev->htc_handle, unplugged);
1093         ath9k_htc_hw_free(hif_dev->htc_handle);
1094         ath9k_hif_usb_dev_deinit(hif_dev);
1095         usb_set_intfdata(interface, NULL);
1096
1097         if (!unplugged && (hif_dev->flags & HIF_USB_START))
1098                 ath9k_hif_usb_reboot(udev);
1099
1100         kfree(hif_dev);
1101         dev_info(&udev->dev, "ath9k_htc: USB layer deinitialized\n");
1102         usb_put_dev(udev);
1103 }
1104
1105 #ifdef CONFIG_PM
1106 static int ath9k_hif_usb_suspend(struct usb_interface *interface,
1107                                  pm_message_t message)
1108 {
1109         struct hif_device_usb *hif_dev = usb_get_intfdata(interface);
1110
1111         /*
1112          * The device has to be set to FULLSLEEP mode in case no
1113          * interface is up.
1114          */
1115         if (!(hif_dev->flags & HIF_USB_START))
1116                 ath9k_htc_suspend(hif_dev->htc_handle);
1117
1118         ath9k_hif_usb_dealloc_urbs(hif_dev);
1119
1120         return 0;
1121 }
1122
1123 static int ath9k_hif_usb_resume(struct usb_interface *interface)
1124 {
1125         struct hif_device_usb *hif_dev = usb_get_intfdata(interface);
1126         struct htc_target *htc_handle = hif_dev->htc_handle;
1127         int ret;
1128
1129         ret = ath9k_hif_usb_alloc_urbs(hif_dev);
1130         if (ret)
1131                 return ret;
1132
1133         if (hif_dev->firmware) {
1134                 ret = ath9k_hif_usb_download_fw(hif_dev,
1135                                 htc_handle->drv_priv->ah->hw_version.usbdev);
1136                 if (ret)
1137                         goto fail_resume;
1138         } else {
1139                 ath9k_hif_usb_dealloc_urbs(hif_dev);
1140                 return -EIO;
1141         }
1142
1143         mdelay(100);
1144
1145         ret = ath9k_htc_resume(htc_handle);
1146
1147         if (ret)
1148                 goto fail_resume;
1149
1150         return 0;
1151
1152 fail_resume:
1153         ath9k_hif_usb_dealloc_urbs(hif_dev);
1154
1155         return ret;
1156 }
1157 #endif
1158
1159 static struct usb_driver ath9k_hif_usb_driver = {
1160         .name = "ath9k_hif_usb",
1161         .probe = ath9k_hif_usb_probe,
1162         .disconnect = ath9k_hif_usb_disconnect,
1163 #ifdef CONFIG_PM
1164         .suspend = ath9k_hif_usb_suspend,
1165         .resume = ath9k_hif_usb_resume,
1166         .reset_resume = ath9k_hif_usb_resume,
1167 #endif
1168         .id_table = ath9k_hif_usb_ids,
1169         .soft_unbind = 1,
1170 };
1171
1172 int ath9k_hif_usb_init(void)
1173 {
1174         return usb_register(&ath9k_hif_usb_driver);
1175 }
1176
1177 void ath9k_hif_usb_exit(void)
1178 {
1179         usb_deregister(&ath9k_hif_usb_driver);
1180 }