Merge tag 'wireless-drivers-next-for-davem-2018-02-08' of git://git.kernel.org/pub...
[sfrench/cifs-2.6.git] / drivers / net / wireless / ath / ath9k / hif_usb.c
1 /*
2  * Copyright (c) 2010-2011 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 <asm/unaligned.h>
18 #include "htc.h"
19
20 MODULE_FIRMWARE(HTC_7010_MODULE_FW);
21 MODULE_FIRMWARE(HTC_9271_MODULE_FW);
22
23 static const struct usb_device_id ath9k_hif_usb_ids[] = {
24         { USB_DEVICE(0x0cf3, 0x9271) }, /* Atheros */
25         { USB_DEVICE(0x0cf3, 0x1006) }, /* Atheros */
26         { USB_DEVICE(0x0846, 0x9030) }, /* Netgear N150 */
27         { USB_DEVICE(0x07b8, 0x9271) }, /* Altai WA1011N-GU */
28         { USB_DEVICE(0x07D1, 0x3A10) }, /* Dlink Wireless 150 */
29         { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */
30         { USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */
31         { USB_DEVICE(0x13D3, 0x3346) }, /* IMC Networks */
32         { USB_DEVICE(0x13D3, 0x3348) }, /* Azurewave */
33         { USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */
34         { USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */
35         { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */
36         { USB_DEVICE(0x040D, 0x3801) }, /* VIA */
37         { USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */
38         { USB_DEVICE(0x0cf3, 0xb002) }, /* Ubiquiti WifiStation */
39         { USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */
40         { USB_DEVICE(0x0471, 0x209e) }, /* Philips (or NXP) PTA01 */
41         { USB_DEVICE(0x1eda, 0x2315) }, /* AirTies */
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         { USB_DEVICE(0x0411, 0x017f),
55           .driver_info = AR9280_USB },  /* Sony UWA-BR100 */
56         { USB_DEVICE(0x0411, 0x0197),
57           .driver_info = AR9280_USB },  /* Buffalo WLI-UV-AG300P */
58         { USB_DEVICE(0x04da, 0x3904),
59           .driver_info = AR9280_USB },
60         { USB_DEVICE(0x0930, 0x0a08),
61           .driver_info = AR9280_USB },  /* Toshiba WLM-20U2 and GN-1080 */
62
63         { USB_DEVICE(0x0cf3, 0x20ff),
64           .driver_info = STORAGE_DEVICE },
65
66         { },
67 };
68
69 MODULE_DEVICE_TABLE(usb, ath9k_hif_usb_ids);
70
71 static int __hif_usb_tx(struct hif_device_usb *hif_dev);
72
73 static void hif_usb_regout_cb(struct urb *urb)
74 {
75         struct cmd_buf *cmd = (struct cmd_buf *)urb->context;
76
77         switch (urb->status) {
78         case 0:
79                 break;
80         case -ENOENT:
81         case -ECONNRESET:
82         case -ENODEV:
83         case -ESHUTDOWN:
84                 goto free;
85         default:
86                 break;
87         }
88
89         if (cmd) {
90                 ath9k_htc_txcompletion_cb(cmd->hif_dev->htc_handle,
91                                           cmd->skb, true);
92                 kfree(cmd);
93         }
94
95         return;
96 free:
97         kfree_skb(cmd->skb);
98         kfree(cmd);
99 }
100
101 static int hif_usb_send_regout(struct hif_device_usb *hif_dev,
102                                struct sk_buff *skb)
103 {
104         struct urb *urb;
105         struct cmd_buf *cmd;
106         int ret = 0;
107
108         urb = usb_alloc_urb(0, GFP_KERNEL);
109         if (urb == NULL)
110                 return -ENOMEM;
111
112         cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
113         if (cmd == NULL) {
114                 usb_free_urb(urb);
115                 return -ENOMEM;
116         }
117
118         cmd->skb = skb;
119         cmd->hif_dev = hif_dev;
120
121         usb_fill_int_urb(urb, hif_dev->udev,
122                          usb_sndintpipe(hif_dev->udev, USB_REG_OUT_PIPE),
123                          skb->data, skb->len,
124                          hif_usb_regout_cb, cmd, 1);
125
126         usb_anchor_urb(urb, &hif_dev->regout_submitted);
127         ret = usb_submit_urb(urb, GFP_KERNEL);
128         if (ret) {
129                 usb_unanchor_urb(urb);
130                 kfree(cmd);
131         }
132         usb_free_urb(urb);
133
134         return ret;
135 }
136
137 static void hif_usb_mgmt_cb(struct urb *urb)
138 {
139         struct cmd_buf *cmd = (struct cmd_buf *)urb->context;
140         struct hif_device_usb *hif_dev;
141         bool txok = true;
142
143         if (!cmd || !cmd->skb || !cmd->hif_dev)
144                 return;
145
146         hif_dev = cmd->hif_dev;
147
148         switch (urb->status) {
149         case 0:
150                 break;
151         case -ENOENT:
152         case -ECONNRESET:
153         case -ENODEV:
154         case -ESHUTDOWN:
155                 txok = false;
156
157                 /*
158                  * If the URBs are being flushed, no need to complete
159                  * this packet.
160                  */
161                 spin_lock(&hif_dev->tx.tx_lock);
162                 if (hif_dev->tx.flags & HIF_USB_TX_FLUSH) {
163                         spin_unlock(&hif_dev->tx.tx_lock);
164                         dev_kfree_skb_any(cmd->skb);
165                         kfree(cmd);
166                         return;
167                 }
168                 spin_unlock(&hif_dev->tx.tx_lock);
169
170                 break;
171         default:
172                 txok = false;
173                 break;
174         }
175
176         skb_pull(cmd->skb, 4);
177         ath9k_htc_txcompletion_cb(cmd->hif_dev->htc_handle,
178                                   cmd->skb, txok);
179         kfree(cmd);
180 }
181
182 static int hif_usb_send_mgmt(struct hif_device_usb *hif_dev,
183                              struct sk_buff *skb)
184 {
185         struct urb *urb;
186         struct cmd_buf *cmd;
187         int ret = 0;
188         __le16 *hdr;
189
190         urb = usb_alloc_urb(0, GFP_ATOMIC);
191         if (urb == NULL)
192                 return -ENOMEM;
193
194         cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
195         if (cmd == NULL) {
196                 usb_free_urb(urb);
197                 return -ENOMEM;
198         }
199
200         cmd->skb = skb;
201         cmd->hif_dev = hif_dev;
202
203         hdr = skb_push(skb, 4);
204         *hdr++ = cpu_to_le16(skb->len - 4);
205         *hdr++ = cpu_to_le16(ATH_USB_TX_STREAM_MODE_TAG);
206
207         usb_fill_bulk_urb(urb, hif_dev->udev,
208                          usb_sndbulkpipe(hif_dev->udev, USB_WLAN_TX_PIPE),
209                          skb->data, skb->len,
210                          hif_usb_mgmt_cb, cmd);
211
212         usb_anchor_urb(urb, &hif_dev->mgmt_submitted);
213         ret = usb_submit_urb(urb, GFP_ATOMIC);
214         if (ret) {
215                 usb_unanchor_urb(urb);
216                 kfree(cmd);
217         }
218         usb_free_urb(urb);
219
220         return ret;
221 }
222
223 static inline void ath9k_skb_queue_purge(struct hif_device_usb *hif_dev,
224                                          struct sk_buff_head *list)
225 {
226         struct sk_buff *skb;
227
228         while ((skb = __skb_dequeue(list)) != NULL) {
229                 dev_kfree_skb_any(skb);
230         }
231 }
232
233 static inline void ath9k_skb_queue_complete(struct hif_device_usb *hif_dev,
234                                             struct sk_buff_head *queue,
235                                             bool txok)
236 {
237         struct sk_buff *skb;
238
239         while ((skb = __skb_dequeue(queue)) != NULL) {
240 #ifdef CONFIG_ATH9K_HTC_DEBUGFS
241                 int ln = skb->len;
242 #endif
243                 ath9k_htc_txcompletion_cb(hif_dev->htc_handle,
244                                           skb, txok);
245                 if (txok) {
246                         TX_STAT_INC(skb_success);
247                         TX_STAT_ADD(skb_success_bytes, ln);
248                 }
249                 else
250                         TX_STAT_INC(skb_failed);
251         }
252 }
253
254 static void hif_usb_tx_cb(struct urb *urb)
255 {
256         struct tx_buf *tx_buf = (struct tx_buf *) urb->context;
257         struct hif_device_usb *hif_dev;
258         bool txok = true;
259
260         if (!tx_buf || !tx_buf->hif_dev)
261                 return;
262
263         hif_dev = tx_buf->hif_dev;
264
265         switch (urb->status) {
266         case 0:
267                 break;
268         case -ENOENT:
269         case -ECONNRESET:
270         case -ENODEV:
271         case -ESHUTDOWN:
272                 txok = false;
273
274                 /*
275                  * If the URBs are being flushed, no need to add this
276                  * URB to the free list.
277                  */
278                 spin_lock(&hif_dev->tx.tx_lock);
279                 if (hif_dev->tx.flags & HIF_USB_TX_FLUSH) {
280                         spin_unlock(&hif_dev->tx.tx_lock);
281                         ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue);
282                         return;
283                 }
284                 spin_unlock(&hif_dev->tx.tx_lock);
285
286                 break;
287         default:
288                 txok = false;
289                 break;
290         }
291
292         ath9k_skb_queue_complete(hif_dev, &tx_buf->skb_queue, txok);
293
294         /* Re-initialize the SKB queue */
295         tx_buf->len = tx_buf->offset = 0;
296         __skb_queue_head_init(&tx_buf->skb_queue);
297
298         /* Add this TX buffer to the free list */
299         spin_lock(&hif_dev->tx.tx_lock);
300         list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
301         hif_dev->tx.tx_buf_cnt++;
302         if (!(hif_dev->tx.flags & HIF_USB_TX_STOP))
303                 __hif_usb_tx(hif_dev); /* Check for pending SKBs */
304         TX_STAT_INC(buf_completed);
305         spin_unlock(&hif_dev->tx.tx_lock);
306 }
307
308 /* TX lock has to be taken */
309 static int __hif_usb_tx(struct hif_device_usb *hif_dev)
310 {
311         struct tx_buf *tx_buf = NULL;
312         struct sk_buff *nskb = NULL;
313         int ret = 0, i;
314         u16 tx_skb_cnt = 0;
315         u8 *buf;
316         __le16 *hdr;
317
318         if (hif_dev->tx.tx_skb_cnt == 0)
319                 return 0;
320
321         /* Check if a free TX buffer is available */
322         if (list_empty(&hif_dev->tx.tx_buf))
323                 return 0;
324
325         tx_buf = list_first_entry(&hif_dev->tx.tx_buf, struct tx_buf, list);
326         list_move_tail(&tx_buf->list, &hif_dev->tx.tx_pending);
327         hif_dev->tx.tx_buf_cnt--;
328
329         tx_skb_cnt = min_t(u16, hif_dev->tx.tx_skb_cnt, MAX_TX_AGGR_NUM);
330
331         for (i = 0; i < tx_skb_cnt; i++) {
332                 nskb = __skb_dequeue(&hif_dev->tx.tx_skb_queue);
333
334                 /* Should never be NULL */
335                 BUG_ON(!nskb);
336
337                 hif_dev->tx.tx_skb_cnt--;
338
339                 buf = tx_buf->buf;
340                 buf += tx_buf->offset;
341                 hdr = (__le16 *)buf;
342                 *hdr++ = cpu_to_le16(nskb->len);
343                 *hdr++ = cpu_to_le16(ATH_USB_TX_STREAM_MODE_TAG);
344                 buf += 4;
345                 memcpy(buf, nskb->data, nskb->len);
346                 tx_buf->len = nskb->len + 4;
347
348                 if (i < (tx_skb_cnt - 1))
349                         tx_buf->offset += (((tx_buf->len - 1) / 4) + 1) * 4;
350
351                 if (i == (tx_skb_cnt - 1))
352                         tx_buf->len += tx_buf->offset;
353
354                 __skb_queue_tail(&tx_buf->skb_queue, nskb);
355                 TX_STAT_INC(skb_queued);
356         }
357
358         usb_fill_bulk_urb(tx_buf->urb, hif_dev->udev,
359                           usb_sndbulkpipe(hif_dev->udev, USB_WLAN_TX_PIPE),
360                           tx_buf->buf, tx_buf->len,
361                           hif_usb_tx_cb, tx_buf);
362
363         ret = usb_submit_urb(tx_buf->urb, GFP_ATOMIC);
364         if (ret) {
365                 tx_buf->len = tx_buf->offset = 0;
366                 ath9k_skb_queue_complete(hif_dev, &tx_buf->skb_queue, false);
367                 __skb_queue_head_init(&tx_buf->skb_queue);
368                 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
369                 hif_dev->tx.tx_buf_cnt++;
370         }
371
372         if (!ret)
373                 TX_STAT_INC(buf_queued);
374
375         return ret;
376 }
377
378 static int hif_usb_send_tx(struct hif_device_usb *hif_dev, struct sk_buff *skb)
379 {
380         struct ath9k_htc_tx_ctl *tx_ctl;
381         unsigned long flags;
382         int ret = 0;
383
384         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
385
386         if (hif_dev->tx.flags & HIF_USB_TX_STOP) {
387                 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
388                 return -ENODEV;
389         }
390
391         /* Check if the max queue count has been reached */
392         if (hif_dev->tx.tx_skb_cnt > MAX_TX_BUF_NUM) {
393                 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
394                 return -ENOMEM;
395         }
396
397         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
398
399         tx_ctl = HTC_SKB_CB(skb);
400
401         /* Mgmt/Beacon frames don't use the TX buffer pool */
402         if ((tx_ctl->type == ATH9K_HTC_MGMT) ||
403             (tx_ctl->type == ATH9K_HTC_BEACON)) {
404                 ret = hif_usb_send_mgmt(hif_dev, skb);
405         }
406
407         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
408
409         if ((tx_ctl->type == ATH9K_HTC_NORMAL) ||
410             (tx_ctl->type == ATH9K_HTC_AMPDU)) {
411                 __skb_queue_tail(&hif_dev->tx.tx_skb_queue, skb);
412                 hif_dev->tx.tx_skb_cnt++;
413         }
414
415         /* Check if AMPDUs have to be sent immediately */
416         if ((hif_dev->tx.tx_buf_cnt == MAX_TX_URB_NUM) &&
417             (hif_dev->tx.tx_skb_cnt < 2)) {
418                 __hif_usb_tx(hif_dev);
419         }
420
421         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
422
423         return ret;
424 }
425
426 static void hif_usb_start(void *hif_handle)
427 {
428         struct hif_device_usb *hif_dev = hif_handle;
429         unsigned long flags;
430
431         hif_dev->flags |= HIF_USB_START;
432
433         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
434         hif_dev->tx.flags &= ~HIF_USB_TX_STOP;
435         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
436 }
437
438 static void hif_usb_stop(void *hif_handle)
439 {
440         struct hif_device_usb *hif_dev = hif_handle;
441         struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
442         unsigned long flags;
443
444         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
445         ath9k_skb_queue_complete(hif_dev, &hif_dev->tx.tx_skb_queue, false);
446         hif_dev->tx.tx_skb_cnt = 0;
447         hif_dev->tx.flags |= HIF_USB_TX_STOP;
448         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
449
450         /* The pending URBs have to be canceled. */
451         list_for_each_entry_safe(tx_buf, tx_buf_tmp,
452                                  &hif_dev->tx.tx_pending, list) {
453                 usb_kill_urb(tx_buf->urb);
454         }
455
456         usb_kill_anchored_urbs(&hif_dev->mgmt_submitted);
457 }
458
459 static int hif_usb_send(void *hif_handle, u8 pipe_id, struct sk_buff *skb)
460 {
461         struct hif_device_usb *hif_dev = hif_handle;
462         int ret = 0;
463
464         switch (pipe_id) {
465         case USB_WLAN_TX_PIPE:
466                 ret = hif_usb_send_tx(hif_dev, skb);
467                 break;
468         case USB_REG_OUT_PIPE:
469                 ret = hif_usb_send_regout(hif_dev, skb);
470                 break;
471         default:
472                 dev_err(&hif_dev->udev->dev,
473                         "ath9k_htc: Invalid TX pipe: %d\n", pipe_id);
474                 ret = -EINVAL;
475                 break;
476         }
477
478         return ret;
479 }
480
481 static inline bool check_index(struct sk_buff *skb, u8 idx)
482 {
483         struct ath9k_htc_tx_ctl *tx_ctl;
484
485         tx_ctl = HTC_SKB_CB(skb);
486
487         if ((tx_ctl->type == ATH9K_HTC_AMPDU) &&
488             (tx_ctl->sta_idx == idx))
489                 return true;
490
491         return false;
492 }
493
494 static void hif_usb_sta_drain(void *hif_handle, u8 idx)
495 {
496         struct hif_device_usb *hif_dev = hif_handle;
497         struct sk_buff *skb, *tmp;
498         unsigned long flags;
499
500         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
501
502         skb_queue_walk_safe(&hif_dev->tx.tx_skb_queue, skb, tmp) {
503                 if (check_index(skb, idx)) {
504                         __skb_unlink(skb, &hif_dev->tx.tx_skb_queue);
505                         ath9k_htc_txcompletion_cb(hif_dev->htc_handle,
506                                                   skb, false);
507                         hif_dev->tx.tx_skb_cnt--;
508                         TX_STAT_INC(skb_failed);
509                 }
510         }
511
512         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
513 }
514
515 static struct ath9k_htc_hif hif_usb = {
516         .transport = ATH9K_HIF_USB,
517         .name = "ath9k_hif_usb",
518
519         .control_ul_pipe = USB_REG_OUT_PIPE,
520         .control_dl_pipe = USB_REG_IN_PIPE,
521
522         .start = hif_usb_start,
523         .stop = hif_usb_stop,
524         .sta_drain = hif_usb_sta_drain,
525         .send = hif_usb_send,
526 };
527
528 static void ath9k_hif_usb_rx_stream(struct hif_device_usb *hif_dev,
529                                     struct sk_buff *skb)
530 {
531         struct sk_buff *nskb, *skb_pool[MAX_PKT_NUM_IN_TRANSFER];
532         int index = 0, i, len = skb->len;
533         int rx_remain_len, rx_pkt_len;
534         u16 pool_index = 0;
535         u8 *ptr;
536
537         spin_lock(&hif_dev->rx_lock);
538
539         rx_remain_len = hif_dev->rx_remain_len;
540         rx_pkt_len = hif_dev->rx_transfer_len;
541
542         if (rx_remain_len != 0) {
543                 struct sk_buff *remain_skb = hif_dev->remain_skb;
544
545                 if (remain_skb) {
546                         ptr = (u8 *) remain_skb->data;
547
548                         index = rx_remain_len;
549                         rx_remain_len -= hif_dev->rx_pad_len;
550                         ptr += rx_pkt_len;
551
552                         memcpy(ptr, skb->data, rx_remain_len);
553
554                         rx_pkt_len += rx_remain_len;
555                         hif_dev->rx_remain_len = 0;
556                         skb_put(remain_skb, rx_pkt_len);
557
558                         skb_pool[pool_index++] = remain_skb;
559
560                 } else {
561                         index = rx_remain_len;
562                 }
563         }
564
565         spin_unlock(&hif_dev->rx_lock);
566
567         while (index < len) {
568                 u16 pkt_len;
569                 u16 pkt_tag;
570                 u16 pad_len;
571                 int chk_idx;
572
573                 ptr = (u8 *) skb->data;
574
575                 pkt_len = get_unaligned_le16(ptr + index);
576                 pkt_tag = get_unaligned_le16(ptr + index + 2);
577
578                 if (pkt_tag != ATH_USB_RX_STREAM_MODE_TAG) {
579                         RX_STAT_INC(skb_dropped);
580                         return;
581                 }
582
583                 pad_len = 4 - (pkt_len & 0x3);
584                 if (pad_len == 4)
585                         pad_len = 0;
586
587                 chk_idx = index;
588                 index = index + 4 + pkt_len + pad_len;
589
590                 if (index > MAX_RX_BUF_SIZE) {
591                         spin_lock(&hif_dev->rx_lock);
592                         hif_dev->rx_remain_len = index - MAX_RX_BUF_SIZE;
593                         hif_dev->rx_transfer_len =
594                                 MAX_RX_BUF_SIZE - chk_idx - 4;
595                         hif_dev->rx_pad_len = pad_len;
596
597                         nskb = __dev_alloc_skb(pkt_len + 32, GFP_ATOMIC);
598                         if (!nskb) {
599                                 dev_err(&hif_dev->udev->dev,
600                                         "ath9k_htc: RX memory allocation error\n");
601                                 spin_unlock(&hif_dev->rx_lock);
602                                 goto err;
603                         }
604                         skb_reserve(nskb, 32);
605                         RX_STAT_INC(skb_allocated);
606
607                         memcpy(nskb->data, &(skb->data[chk_idx+4]),
608                                hif_dev->rx_transfer_len);
609
610                         /* Record the buffer pointer */
611                         hif_dev->remain_skb = nskb;
612                         spin_unlock(&hif_dev->rx_lock);
613                 } else {
614                         nskb = __dev_alloc_skb(pkt_len + 32, GFP_ATOMIC);
615                         if (!nskb) {
616                                 dev_err(&hif_dev->udev->dev,
617                                         "ath9k_htc: RX memory allocation error\n");
618                                 goto err;
619                         }
620                         skb_reserve(nskb, 32);
621                         RX_STAT_INC(skb_allocated);
622
623                         memcpy(nskb->data, &(skb->data[chk_idx+4]), pkt_len);
624                         skb_put(nskb, pkt_len);
625                         skb_pool[pool_index++] = nskb;
626                 }
627         }
628
629 err:
630         for (i = 0; i < pool_index; i++) {
631                 RX_STAT_ADD(skb_completed_bytes, skb_pool[i]->len);
632                 ath9k_htc_rx_msg(hif_dev->htc_handle, skb_pool[i],
633                                  skb_pool[i]->len, USB_WLAN_RX_PIPE);
634                 RX_STAT_INC(skb_completed);
635         }
636 }
637
638 static void ath9k_hif_usb_rx_cb(struct urb *urb)
639 {
640         struct sk_buff *skb = (struct sk_buff *) urb->context;
641         struct hif_device_usb *hif_dev =
642                 usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
643         int ret;
644
645         if (!skb)
646                 return;
647
648         if (!hif_dev)
649                 goto free;
650
651         switch (urb->status) {
652         case 0:
653                 break;
654         case -ENOENT:
655         case -ECONNRESET:
656         case -ENODEV:
657         case -ESHUTDOWN:
658                 goto free;
659         default:
660                 goto resubmit;
661         }
662
663         if (likely(urb->actual_length != 0)) {
664                 skb_put(skb, urb->actual_length);
665                 ath9k_hif_usb_rx_stream(hif_dev, skb);
666         }
667
668 resubmit:
669         skb_reset_tail_pointer(skb);
670         skb_trim(skb, 0);
671
672         usb_anchor_urb(urb, &hif_dev->rx_submitted);
673         ret = usb_submit_urb(urb, GFP_ATOMIC);
674         if (ret) {
675                 usb_unanchor_urb(urb);
676                 goto free;
677         }
678
679         return;
680 free:
681         kfree_skb(skb);
682 }
683
684 static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
685 {
686         struct sk_buff *skb = (struct sk_buff *) urb->context;
687         struct sk_buff *nskb;
688         struct hif_device_usb *hif_dev =
689                 usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
690         int ret;
691
692         if (!skb)
693                 return;
694
695         if (!hif_dev)
696                 goto free;
697
698         switch (urb->status) {
699         case 0:
700                 break;
701         case -ENOENT:
702         case -ECONNRESET:
703         case -ENODEV:
704         case -ESHUTDOWN:
705                 goto free;
706         default:
707                 skb_reset_tail_pointer(skb);
708                 skb_trim(skb, 0);
709
710                 goto resubmit;
711         }
712
713         if (likely(urb->actual_length != 0)) {
714                 skb_put(skb, urb->actual_length);
715
716                 /* Process the command first */
717                 ath9k_htc_rx_msg(hif_dev->htc_handle, skb,
718                                  skb->len, USB_REG_IN_PIPE);
719
720
721                 nskb = alloc_skb(MAX_REG_IN_BUF_SIZE, GFP_ATOMIC);
722                 if (!nskb) {
723                         dev_err(&hif_dev->udev->dev,
724                                 "ath9k_htc: REG_IN memory allocation failure\n");
725                         urb->context = NULL;
726                         return;
727                 }
728
729                 usb_fill_int_urb(urb, hif_dev->udev,
730                                  usb_rcvintpipe(hif_dev->udev,
731                                                  USB_REG_IN_PIPE),
732                                  nskb->data, MAX_REG_IN_BUF_SIZE,
733                                  ath9k_hif_usb_reg_in_cb, nskb, 1);
734         }
735
736 resubmit:
737         usb_anchor_urb(urb, &hif_dev->reg_in_submitted);
738         ret = usb_submit_urb(urb, GFP_ATOMIC);
739         if (ret) {
740                 usb_unanchor_urb(urb);
741                 goto free;
742         }
743
744         return;
745 free:
746         kfree_skb(skb);
747         urb->context = NULL;
748 }
749
750 static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev)
751 {
752         struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
753         unsigned long flags;
754
755         list_for_each_entry_safe(tx_buf, tx_buf_tmp,
756                                  &hif_dev->tx.tx_buf, list) {
757                 usb_kill_urb(tx_buf->urb);
758                 list_del(&tx_buf->list);
759                 usb_free_urb(tx_buf->urb);
760                 kfree(tx_buf->buf);
761                 kfree(tx_buf);
762         }
763
764         spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
765         hif_dev->tx.flags |= HIF_USB_TX_FLUSH;
766         spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
767
768         list_for_each_entry_safe(tx_buf, tx_buf_tmp,
769                                  &hif_dev->tx.tx_pending, list) {
770                 usb_kill_urb(tx_buf->urb);
771                 list_del(&tx_buf->list);
772                 usb_free_urb(tx_buf->urb);
773                 kfree(tx_buf->buf);
774                 kfree(tx_buf);
775         }
776
777         usb_kill_anchored_urbs(&hif_dev->mgmt_submitted);
778 }
779
780 static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
781 {
782         struct tx_buf *tx_buf;
783         int i;
784
785         INIT_LIST_HEAD(&hif_dev->tx.tx_buf);
786         INIT_LIST_HEAD(&hif_dev->tx.tx_pending);
787         spin_lock_init(&hif_dev->tx.tx_lock);
788         __skb_queue_head_init(&hif_dev->tx.tx_skb_queue);
789         init_usb_anchor(&hif_dev->mgmt_submitted);
790
791         for (i = 0; i < MAX_TX_URB_NUM; i++) {
792                 tx_buf = kzalloc(sizeof(struct tx_buf), GFP_KERNEL);
793                 if (!tx_buf)
794                         goto err;
795
796                 tx_buf->buf = kzalloc(MAX_TX_BUF_SIZE, GFP_KERNEL);
797                 if (!tx_buf->buf)
798                         goto err;
799
800                 tx_buf->urb = usb_alloc_urb(0, GFP_KERNEL);
801                 if (!tx_buf->urb)
802                         goto err;
803
804                 tx_buf->hif_dev = hif_dev;
805                 __skb_queue_head_init(&tx_buf->skb_queue);
806
807                 list_add_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
808         }
809
810         hif_dev->tx.tx_buf_cnt = MAX_TX_URB_NUM;
811
812         return 0;
813 err:
814         if (tx_buf) {
815                 kfree(tx_buf->buf);
816                 kfree(tx_buf);
817         }
818         ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
819         return -ENOMEM;
820 }
821
822 static void ath9k_hif_usb_dealloc_rx_urbs(struct hif_device_usb *hif_dev)
823 {
824         usb_kill_anchored_urbs(&hif_dev->rx_submitted);
825 }
826
827 static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
828 {
829         struct urb *urb = NULL;
830         struct sk_buff *skb = NULL;
831         int i, ret;
832
833         init_usb_anchor(&hif_dev->rx_submitted);
834         spin_lock_init(&hif_dev->rx_lock);
835
836         for (i = 0; i < MAX_RX_URB_NUM; i++) {
837
838                 /* Allocate URB */
839                 urb = usb_alloc_urb(0, GFP_KERNEL);
840                 if (urb == NULL) {
841                         ret = -ENOMEM;
842                         goto err_urb;
843                 }
844
845                 /* Allocate buffer */
846                 skb = alloc_skb(MAX_RX_BUF_SIZE, GFP_KERNEL);
847                 if (!skb) {
848                         ret = -ENOMEM;
849                         goto err_skb;
850                 }
851
852                 usb_fill_bulk_urb(urb, hif_dev->udev,
853                                   usb_rcvbulkpipe(hif_dev->udev,
854                                                   USB_WLAN_RX_PIPE),
855                                   skb->data, MAX_RX_BUF_SIZE,
856                                   ath9k_hif_usb_rx_cb, skb);
857
858                 /* Anchor URB */
859                 usb_anchor_urb(urb, &hif_dev->rx_submitted);
860
861                 /* Submit URB */
862                 ret = usb_submit_urb(urb, GFP_KERNEL);
863                 if (ret) {
864                         usb_unanchor_urb(urb);
865                         goto err_submit;
866                 }
867
868                 /*
869                  * Drop reference count.
870                  * This ensures that the URB is freed when killing them.
871                  */
872                 usb_free_urb(urb);
873         }
874
875         return 0;
876
877 err_submit:
878         kfree_skb(skb);
879 err_skb:
880         usb_free_urb(urb);
881 err_urb:
882         ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
883         return ret;
884 }
885
886 static void ath9k_hif_usb_dealloc_reg_in_urbs(struct hif_device_usb *hif_dev)
887 {
888         usb_kill_anchored_urbs(&hif_dev->reg_in_submitted);
889 }
890
891 static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev)
892 {
893         struct urb *urb = NULL;
894         struct sk_buff *skb = NULL;
895         int i, ret;
896
897         init_usb_anchor(&hif_dev->reg_in_submitted);
898
899         for (i = 0; i < MAX_REG_IN_URB_NUM; i++) {
900
901                 /* Allocate URB */
902                 urb = usb_alloc_urb(0, GFP_KERNEL);
903                 if (urb == NULL) {
904                         ret = -ENOMEM;
905                         goto err_urb;
906                 }
907
908                 /* Allocate buffer */
909                 skb = alloc_skb(MAX_REG_IN_BUF_SIZE, GFP_KERNEL);
910                 if (!skb) {
911                         ret = -ENOMEM;
912                         goto err_skb;
913                 }
914
915                 usb_fill_int_urb(urb, hif_dev->udev,
916                                   usb_rcvintpipe(hif_dev->udev,
917                                                   USB_REG_IN_PIPE),
918                                   skb->data, MAX_REG_IN_BUF_SIZE,
919                                   ath9k_hif_usb_reg_in_cb, skb, 1);
920
921                 /* Anchor URB */
922                 usb_anchor_urb(urb, &hif_dev->reg_in_submitted);
923
924                 /* Submit URB */
925                 ret = usb_submit_urb(urb, GFP_KERNEL);
926                 if (ret) {
927                         usb_unanchor_urb(urb);
928                         goto err_submit;
929                 }
930
931                 /*
932                  * Drop reference count.
933                  * This ensures that the URB is freed when killing them.
934                  */
935                 usb_free_urb(urb);
936         }
937
938         return 0;
939
940 err_submit:
941         kfree_skb(skb);
942 err_skb:
943         usb_free_urb(urb);
944 err_urb:
945         ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev);
946         return ret;
947 }
948
949 static int ath9k_hif_usb_alloc_urbs(struct hif_device_usb *hif_dev)
950 {
951         /* Register Write */
952         init_usb_anchor(&hif_dev->regout_submitted);
953
954         /* TX */
955         if (ath9k_hif_usb_alloc_tx_urbs(hif_dev) < 0)
956                 goto err;
957
958         /* RX */
959         if (ath9k_hif_usb_alloc_rx_urbs(hif_dev) < 0)
960                 goto err_rx;
961
962         /* Register Read */
963         if (ath9k_hif_usb_alloc_reg_in_urbs(hif_dev) < 0)
964                 goto err_reg;
965
966         return 0;
967 err_reg:
968         ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
969 err_rx:
970         ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
971 err:
972         return -ENOMEM;
973 }
974
975 static void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev)
976 {
977         usb_kill_anchored_urbs(&hif_dev->regout_submitted);
978         ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev);
979         ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
980         ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
981 }
982
983 static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
984 {
985         int transfer, err;
986         const void *data = hif_dev->fw_data;
987         size_t len = hif_dev->fw_size;
988         u32 addr = AR9271_FIRMWARE;
989         u8 *buf = kzalloc(4096, GFP_KERNEL);
990         u32 firm_offset;
991
992         if (!buf)
993                 return -ENOMEM;
994
995         while (len) {
996                 transfer = min_t(size_t, len, 4096);
997                 memcpy(buf, data, transfer);
998
999                 err = usb_control_msg(hif_dev->udev,
1000                                       usb_sndctrlpipe(hif_dev->udev, 0),
1001                                       FIRMWARE_DOWNLOAD, 0x40 | USB_DIR_OUT,
1002                                       addr >> 8, 0, buf, transfer,
1003                                       USB_MSG_TIMEOUT);
1004                 if (err < 0) {
1005                         kfree(buf);
1006                         return err;
1007                 }
1008
1009                 len -= transfer;
1010                 data += transfer;
1011                 addr += transfer;
1012         }
1013         kfree(buf);
1014
1015         if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info))
1016                 firm_offset = AR7010_FIRMWARE_TEXT;
1017         else
1018                 firm_offset = AR9271_FIRMWARE_TEXT;
1019
1020         /*
1021          * Issue FW download complete command to firmware.
1022          */
1023         err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0),
1024                               FIRMWARE_DOWNLOAD_COMP,
1025                               0x40 | USB_DIR_OUT,
1026                               firm_offset >> 8, 0, NULL, 0, USB_MSG_TIMEOUT);
1027         if (err)
1028                 return -EIO;
1029
1030         dev_info(&hif_dev->udev->dev, "ath9k_htc: Transferred FW: %s, size: %ld\n",
1031                  hif_dev->fw_name, (unsigned long) hif_dev->fw_size);
1032
1033         return 0;
1034 }
1035
1036 static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
1037 {
1038         int ret;
1039
1040         ret = ath9k_hif_usb_download_fw(hif_dev);
1041         if (ret) {
1042                 dev_err(&hif_dev->udev->dev,
1043                         "ath9k_htc: Firmware - %s download failed\n",
1044                         hif_dev->fw_name);
1045                 return ret;
1046         }
1047
1048         /* Alloc URBs */
1049         ret = ath9k_hif_usb_alloc_urbs(hif_dev);
1050         if (ret) {
1051                 dev_err(&hif_dev->udev->dev,
1052                         "ath9k_htc: Unable to allocate URBs\n");
1053                 return ret;
1054         }
1055
1056         return 0;
1057 }
1058
1059 static void ath9k_hif_usb_dev_deinit(struct hif_device_usb *hif_dev)
1060 {
1061         ath9k_hif_usb_dealloc_urbs(hif_dev);
1062 }
1063
1064 /*
1065  * If initialization fails or the FW cannot be retrieved,
1066  * detach the device.
1067  */
1068 static void ath9k_hif_usb_firmware_fail(struct hif_device_usb *hif_dev)
1069 {
1070         struct device *dev = &hif_dev->udev->dev;
1071         struct device *parent = dev->parent;
1072
1073         complete_all(&hif_dev->fw_done);
1074
1075         if (parent)
1076                 device_lock(parent);
1077
1078         device_release_driver(dev);
1079
1080         if (parent)
1081                 device_unlock(parent);
1082 }
1083
1084 static void ath9k_hif_usb_firmware_cb(const struct firmware *fw, void *context);
1085
1086 /* taken from iwlwifi */
1087 static int ath9k_hif_request_firmware(struct hif_device_usb *hif_dev,
1088                                       bool first)
1089 {
1090         char index[8], *chip;
1091         int ret;
1092
1093         if (first) {
1094                 if (htc_use_dev_fw) {
1095                         hif_dev->fw_minor_index = FIRMWARE_MINOR_IDX_MAX + 1;
1096                         sprintf(index, "%s", "dev");
1097                 } else {
1098                         hif_dev->fw_minor_index = FIRMWARE_MINOR_IDX_MAX;
1099                         sprintf(index, "%d", hif_dev->fw_minor_index);
1100                 }
1101         } else {
1102                 hif_dev->fw_minor_index--;
1103                 sprintf(index, "%d", hif_dev->fw_minor_index);
1104         }
1105
1106         /* test for FW 1.3 */
1107         if (MAJOR_VERSION_REQ == 1 && hif_dev->fw_minor_index == 3) {
1108                 const char *filename;
1109
1110                 if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info))
1111                         filename = FIRMWARE_AR7010_1_1;
1112                 else
1113                         filename = FIRMWARE_AR9271;
1114
1115                 /* expected fw locations:
1116                  * - htc_9271.fw   (stable version 1.3, depricated)
1117                  */
1118                 snprintf(hif_dev->fw_name, sizeof(hif_dev->fw_name),
1119                          "%s", filename);
1120
1121         } else if (hif_dev->fw_minor_index < FIRMWARE_MINOR_IDX_MIN) {
1122                 dev_err(&hif_dev->udev->dev, "no suitable firmware found!\n");
1123
1124                 return -ENOENT;
1125         } else {
1126                 if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info))
1127                         chip = "7010";
1128                 else
1129                         chip = "9271";
1130
1131                 /* expected fw locations:
1132                  * - ath9k_htc/htc_9271-1.dev.0.fw (development version)
1133                  * - ath9k_htc/htc_9271-1.4.0.fw   (stable version)
1134                  */
1135                 snprintf(hif_dev->fw_name, sizeof(hif_dev->fw_name),
1136                          "%s/htc_%s-%d.%s.0.fw", HTC_FW_PATH,
1137                          chip, MAJOR_VERSION_REQ, index);
1138         }
1139
1140         ret = request_firmware_nowait(THIS_MODULE, true, hif_dev->fw_name,
1141                                       &hif_dev->udev->dev, GFP_KERNEL,
1142                                       hif_dev, ath9k_hif_usb_firmware_cb);
1143         if (ret) {
1144                 dev_err(&hif_dev->udev->dev,
1145                         "ath9k_htc: Async request for firmware %s failed\n",
1146                         hif_dev->fw_name);
1147                 return ret;
1148         }
1149
1150         dev_info(&hif_dev->udev->dev, "ath9k_htc: Firmware %s requested\n",
1151                  hif_dev->fw_name);
1152
1153         return ret;
1154 }
1155
1156 static void ath9k_hif_usb_firmware_cb(const struct firmware *fw, void *context)
1157 {
1158         struct hif_device_usb *hif_dev = context;
1159         int ret;
1160
1161         if (!fw) {
1162                 ret = ath9k_hif_request_firmware(hif_dev, false);
1163                 if (!ret)
1164                         return;
1165
1166                 dev_err(&hif_dev->udev->dev,
1167                         "ath9k_htc: Failed to get firmware %s\n",
1168                         hif_dev->fw_name);
1169                 goto err_fw;
1170         }
1171
1172         hif_dev->htc_handle = ath9k_htc_hw_alloc(hif_dev, &hif_usb,
1173                                                  &hif_dev->udev->dev);
1174         if (hif_dev->htc_handle == NULL)
1175                 goto err_dev_alloc;
1176
1177         hif_dev->fw_data = fw->data;
1178         hif_dev->fw_size = fw->size;
1179
1180         /* Proceed with initialization */
1181
1182         ret = ath9k_hif_usb_dev_init(hif_dev);
1183         if (ret)
1184                 goto err_dev_init;
1185
1186         ret = ath9k_htc_hw_init(hif_dev->htc_handle,
1187                                 &hif_dev->interface->dev,
1188                                 hif_dev->usb_device_id->idProduct,
1189                                 hif_dev->udev->product,
1190                                 hif_dev->usb_device_id->driver_info);
1191         if (ret) {
1192                 ret = -EINVAL;
1193                 goto err_htc_hw_init;
1194         }
1195
1196         release_firmware(fw);
1197         hif_dev->flags |= HIF_USB_READY;
1198         complete_all(&hif_dev->fw_done);
1199
1200         return;
1201
1202 err_htc_hw_init:
1203         ath9k_hif_usb_dev_deinit(hif_dev);
1204 err_dev_init:
1205         ath9k_htc_hw_free(hif_dev->htc_handle);
1206 err_dev_alloc:
1207         release_firmware(fw);
1208 err_fw:
1209         ath9k_hif_usb_firmware_fail(hif_dev);
1210 }
1211
1212 /*
1213  * An exact copy of the function from zd1211rw.
1214  */
1215 static int send_eject_command(struct usb_interface *interface)
1216 {
1217         struct usb_device *udev = interface_to_usbdev(interface);
1218         struct usb_host_interface *iface_desc = &interface->altsetting[0];
1219         struct usb_endpoint_descriptor *endpoint;
1220         unsigned char *cmd;
1221         u8 bulk_out_ep;
1222         int r;
1223
1224         if (iface_desc->desc.bNumEndpoints < 2)
1225                 return -ENODEV;
1226
1227         /* Find bulk out endpoint */
1228         for (r = 1; r >= 0; r--) {
1229                 endpoint = &iface_desc->endpoint[r].desc;
1230                 if (usb_endpoint_dir_out(endpoint) &&
1231                     usb_endpoint_xfer_bulk(endpoint)) {
1232                         bulk_out_ep = endpoint->bEndpointAddress;
1233                         break;
1234                 }
1235         }
1236         if (r == -1) {
1237                 dev_err(&udev->dev,
1238                         "ath9k_htc: Could not find bulk out endpoint\n");
1239                 return -ENODEV;
1240         }
1241
1242         cmd = kzalloc(31, GFP_KERNEL);
1243         if (cmd == NULL)
1244                 return -ENODEV;
1245
1246         /* USB bulk command block */
1247         cmd[0] = 0x55;  /* bulk command signature */
1248         cmd[1] = 0x53;  /* bulk command signature */
1249         cmd[2] = 0x42;  /* bulk command signature */
1250         cmd[3] = 0x43;  /* bulk command signature */
1251         cmd[14] = 6;    /* command length */
1252
1253         cmd[15] = 0x1b; /* SCSI command: START STOP UNIT */
1254         cmd[19] = 0x2;  /* eject disc */
1255
1256         dev_info(&udev->dev, "Ejecting storage device...\n");
1257         r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, bulk_out_ep),
1258                 cmd, 31, NULL, 2 * USB_MSG_TIMEOUT);
1259         kfree(cmd);
1260         if (r)
1261                 return r;
1262
1263         /* At this point, the device disconnects and reconnects with the real
1264          * ID numbers. */
1265
1266         usb_set_intfdata(interface, NULL);
1267         return 0;
1268 }
1269
1270 static int ath9k_hif_usb_probe(struct usb_interface *interface,
1271                                const struct usb_device_id *id)
1272 {
1273         struct usb_device *udev = interface_to_usbdev(interface);
1274         struct hif_device_usb *hif_dev;
1275         int ret = 0;
1276
1277         if (id->driver_info == STORAGE_DEVICE)
1278                 return send_eject_command(interface);
1279
1280         hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL);
1281         if (!hif_dev) {
1282                 ret = -ENOMEM;
1283                 goto err_alloc;
1284         }
1285
1286         usb_get_dev(udev);
1287
1288         hif_dev->udev = udev;
1289         hif_dev->interface = interface;
1290         hif_dev->usb_device_id = id;
1291 #ifdef CONFIG_PM
1292         udev->reset_resume = 1;
1293 #endif
1294         usb_set_intfdata(interface, hif_dev);
1295
1296         init_completion(&hif_dev->fw_done);
1297
1298         ret = ath9k_hif_request_firmware(hif_dev, true);
1299         if (ret)
1300                 goto err_fw_req;
1301
1302         return ret;
1303
1304 err_fw_req:
1305         usb_set_intfdata(interface, NULL);
1306         kfree(hif_dev);
1307         usb_put_dev(udev);
1308 err_alloc:
1309         return ret;
1310 }
1311
1312 static void ath9k_hif_usb_reboot(struct usb_device *udev)
1313 {
1314         u32 reboot_cmd = 0xffffffff;
1315         void *buf;
1316         int ret;
1317
1318         buf = kmemdup(&reboot_cmd, 4, GFP_KERNEL);
1319         if (!buf)
1320                 return;
1321
1322         ret = usb_interrupt_msg(udev, usb_sndintpipe(udev, USB_REG_OUT_PIPE),
1323                            buf, 4, NULL, USB_MSG_TIMEOUT);
1324         if (ret)
1325                 dev_err(&udev->dev, "ath9k_htc: USB reboot failed\n");
1326
1327         kfree(buf);
1328 }
1329
1330 static void ath9k_hif_usb_disconnect(struct usb_interface *interface)
1331 {
1332         struct usb_device *udev = interface_to_usbdev(interface);
1333         struct hif_device_usb *hif_dev = usb_get_intfdata(interface);
1334         bool unplugged = (udev->state == USB_STATE_NOTATTACHED) ? true : false;
1335
1336         if (!hif_dev)
1337                 return;
1338
1339         wait_for_completion(&hif_dev->fw_done);
1340
1341         if (hif_dev->flags & HIF_USB_READY) {
1342                 ath9k_htc_hw_deinit(hif_dev->htc_handle, unplugged);
1343                 ath9k_htc_hw_free(hif_dev->htc_handle);
1344                 ath9k_hif_usb_dev_deinit(hif_dev);
1345         }
1346
1347         usb_set_intfdata(interface, NULL);
1348
1349         /* If firmware was loaded we should drop it
1350          * go back to first stage bootloader. */
1351         if (!unplugged && (hif_dev->flags & HIF_USB_READY))
1352                 ath9k_hif_usb_reboot(udev);
1353
1354         kfree(hif_dev);
1355         dev_info(&udev->dev, "ath9k_htc: USB layer deinitialized\n");
1356         usb_put_dev(udev);
1357 }
1358
1359 #ifdef CONFIG_PM
1360 static int ath9k_hif_usb_suspend(struct usb_interface *interface,
1361                                  pm_message_t message)
1362 {
1363         struct hif_device_usb *hif_dev = usb_get_intfdata(interface);
1364
1365         /*
1366          * The device has to be set to FULLSLEEP mode in case no
1367          * interface is up.
1368          */
1369         if (!(hif_dev->flags & HIF_USB_START))
1370                 ath9k_htc_suspend(hif_dev->htc_handle);
1371
1372         wait_for_completion(&hif_dev->fw_done);
1373
1374         if (hif_dev->flags & HIF_USB_READY)
1375                 ath9k_hif_usb_dealloc_urbs(hif_dev);
1376
1377         return 0;
1378 }
1379
1380 static int ath9k_hif_usb_resume(struct usb_interface *interface)
1381 {
1382         struct hif_device_usb *hif_dev = usb_get_intfdata(interface);
1383         struct htc_target *htc_handle = hif_dev->htc_handle;
1384         int ret;
1385         const struct firmware *fw;
1386
1387         ret = ath9k_hif_usb_alloc_urbs(hif_dev);
1388         if (ret)
1389                 return ret;
1390
1391         if (hif_dev->flags & HIF_USB_READY) {
1392                 /* request cached firmware during suspend/resume cycle */
1393                 ret = request_firmware(&fw, hif_dev->fw_name,
1394                                        &hif_dev->udev->dev);
1395                 if (ret)
1396                         goto fail_resume;
1397
1398                 hif_dev->fw_data = fw->data;
1399                 hif_dev->fw_size = fw->size;
1400                 ret = ath9k_hif_usb_download_fw(hif_dev);
1401                 release_firmware(fw);
1402                 if (ret)
1403                         goto fail_resume;
1404         } else {
1405                 ath9k_hif_usb_dealloc_urbs(hif_dev);
1406                 return -EIO;
1407         }
1408
1409         mdelay(100);
1410
1411         ret = ath9k_htc_resume(htc_handle);
1412
1413         if (ret)
1414                 goto fail_resume;
1415
1416         return 0;
1417
1418 fail_resume:
1419         ath9k_hif_usb_dealloc_urbs(hif_dev);
1420
1421         return ret;
1422 }
1423 #endif
1424
1425 static struct usb_driver ath9k_hif_usb_driver = {
1426         .name = KBUILD_MODNAME,
1427         .probe = ath9k_hif_usb_probe,
1428         .disconnect = ath9k_hif_usb_disconnect,
1429 #ifdef CONFIG_PM
1430         .suspend = ath9k_hif_usb_suspend,
1431         .resume = ath9k_hif_usb_resume,
1432         .reset_resume = ath9k_hif_usb_resume,
1433 #endif
1434         .id_table = ath9k_hif_usb_ids,
1435         .soft_unbind = 1,
1436         .disable_hub_initiated_lpm = 1,
1437 };
1438
1439 int ath9k_hif_usb_init(void)
1440 {
1441         return usb_register(&ath9k_hif_usb_driver);
1442 }
1443
1444 void ath9k_hif_usb_exit(void)
1445 {
1446         usb_deregister(&ath9k_hif_usb_driver);
1447 }