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