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 
24 MODULE_FIRMWARE(FIRMWARE_AR7010_1_1);
25 MODULE_FIRMWARE(FIRMWARE_AR9271);
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);
202 	*hdr++ = cpu_to_le16(ATH_USB_TX_STREAM_MODE_TAG);
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) {
237 		ath9k_htc_txcompletion_cb(hif_dev->htc_handle,
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);
335 		*hdr++ = cpu_to_le16(ATH_USB_TX_STREAM_MODE_TAG);
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 
448 	usb_kill_anchored_urbs(&hif_dev->mgmt_submitted);
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);
497 			ath9k_htc_txcompletion_cb(hif_dev->htc_handle,
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,
722 						 USB_REG_IN_PIPE),
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 
768 	usb_kill_anchored_urbs(&hif_dev->mgmt_submitted);
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 {
815 	usb_kill_anchored_urbs(&hif_dev->rx_submitted);
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,
845 						  USB_WLAN_RX_PIPE),
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 {
879 	usb_kill_anchored_urbs(&hif_dev->reg_in_submitted);
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,
908 						  USB_REG_IN_PIPE),
909 				  skb->data, MAX_REG_IN_BUF_SIZE,
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 {
968 	usb_kill_anchored_urbs(&hif_dev->regout_submitted);
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;
979 	u32 addr = AR9271_FIRMWARE;
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),
992 				      FIRMWARE_DOWNLOAD, 0x40 | USB_DIR_OUT,
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),
1014 			      FIRMWARE_DOWNLOAD_COMP,
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;
1046 		if ((endp->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
1047 				== USB_ENDPOINT_XFER_INT) {
1048 			endp->bmAttributes &= ~USB_ENDPOINT_XFERTYPE_MASK;
1049 			endp->bmAttributes |= USB_ENDPOINT_XFER_BULK;
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];
1149 	struct usb_endpoint_descriptor *endpoint;
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,
1302 				 pm_message_t message)
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 
1377 int ath9k_hif_usb_init(void)
1378 {
1379 	return usb_register(&ath9k_hif_usb_driver);
1380 }
1381 
1382 void ath9k_hif_usb_exit(void)
1383 {
1384 	usb_deregister(&ath9k_hif_usb_driver);
1385 }
1386