Lines Matching refs:hif_dev

71 static int __hif_usb_tx(struct hif_device_usb *hif_dev);
90 ath9k_htc_txcompletion_cb(cmd->hif_dev->htc_handle, in hif_usb_regout_cb()
101 static int hif_usb_send_regout(struct hif_device_usb *hif_dev, in hif_usb_send_regout() argument
119 cmd->hif_dev = hif_dev; in hif_usb_send_regout()
121 usb_fill_int_urb(urb, hif_dev->udev, in hif_usb_send_regout()
122 usb_sndintpipe(hif_dev->udev, USB_REG_OUT_PIPE), in hif_usb_send_regout()
126 usb_anchor_urb(urb, &hif_dev->regout_submitted); in hif_usb_send_regout()
140 struct hif_device_usb *hif_dev; in hif_usb_mgmt_cb() local
144 if (!cmd || !cmd->skb || !cmd->hif_dev) in hif_usb_mgmt_cb()
147 hif_dev = cmd->hif_dev; in hif_usb_mgmt_cb()
162 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_mgmt_cb()
163 if (hif_dev->tx.flags & HIF_USB_TX_FLUSH) { in hif_usb_mgmt_cb()
164 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_mgmt_cb()
169 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_mgmt_cb()
178 ath9k_htc_txcompletion_cb(cmd->hif_dev->htc_handle, in hif_usb_mgmt_cb()
183 static int hif_usb_send_mgmt(struct hif_device_usb *hif_dev, in hif_usb_send_mgmt() argument
202 cmd->hif_dev = hif_dev; in hif_usb_send_mgmt()
208 usb_fill_bulk_urb(urb, hif_dev->udev, in hif_usb_send_mgmt()
209 usb_sndbulkpipe(hif_dev->udev, USB_WLAN_TX_PIPE), in hif_usb_send_mgmt()
213 usb_anchor_urb(urb, &hif_dev->mgmt_submitted); in hif_usb_send_mgmt()
224 static inline void ath9k_skb_queue_purge(struct hif_device_usb *hif_dev, in ath9k_skb_queue_purge() argument
234 static inline void ath9k_skb_queue_complete(struct hif_device_usb *hif_dev, in ath9k_skb_queue_complete() argument
244 ath9k_htc_txcompletion_cb(hif_dev->htc_handle, in ath9k_skb_queue_complete()
247 TX_STAT_INC(hif_dev, skb_success); in ath9k_skb_queue_complete()
248 TX_STAT_ADD(hif_dev, skb_success_bytes, ln); in ath9k_skb_queue_complete()
251 TX_STAT_INC(hif_dev, skb_failed); in ath9k_skb_queue_complete()
258 struct hif_device_usb *hif_dev; in hif_usb_tx_cb() local
261 if (!tx_buf || !tx_buf->hif_dev) in hif_usb_tx_cb()
264 hif_dev = tx_buf->hif_dev; in hif_usb_tx_cb()
279 spin_lock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
280 if (hif_dev->tx.flags & HIF_USB_TX_FLUSH) { in hif_usb_tx_cb()
281 spin_unlock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
282 ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue); in hif_usb_tx_cb()
285 spin_unlock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
293 ath9k_skb_queue_complete(hif_dev, &tx_buf->skb_queue, txok); in hif_usb_tx_cb()
300 spin_lock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
301 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf); in hif_usb_tx_cb()
302 hif_dev->tx.tx_buf_cnt++; in hif_usb_tx_cb()
303 if (!(hif_dev->tx.flags & HIF_USB_TX_STOP)) in hif_usb_tx_cb()
304 __hif_usb_tx(hif_dev); /* Check for pending SKBs */ in hif_usb_tx_cb()
305 TX_STAT_INC(hif_dev, buf_completed); in hif_usb_tx_cb()
306 spin_unlock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
310 static int __hif_usb_tx(struct hif_device_usb *hif_dev) in __hif_usb_tx() argument
319 if (hif_dev->tx.tx_skb_cnt == 0) in __hif_usb_tx()
323 if (list_empty(&hif_dev->tx.tx_buf)) in __hif_usb_tx()
326 tx_buf = list_first_entry(&hif_dev->tx.tx_buf, struct tx_buf, list); in __hif_usb_tx()
327 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_pending); in __hif_usb_tx()
328 hif_dev->tx.tx_buf_cnt--; in __hif_usb_tx()
330 tx_skb_cnt = min_t(u16, hif_dev->tx.tx_skb_cnt, MAX_TX_AGGR_NUM); in __hif_usb_tx()
333 nskb = __skb_dequeue(&hif_dev->tx.tx_skb_queue); in __hif_usb_tx()
338 hif_dev->tx.tx_skb_cnt--; in __hif_usb_tx()
356 TX_STAT_INC(hif_dev, skb_queued); in __hif_usb_tx()
359 usb_fill_bulk_urb(tx_buf->urb, hif_dev->udev, in __hif_usb_tx()
360 usb_sndbulkpipe(hif_dev->udev, USB_WLAN_TX_PIPE), in __hif_usb_tx()
367 ath9k_skb_queue_complete(hif_dev, &tx_buf->skb_queue, false); in __hif_usb_tx()
369 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf); in __hif_usb_tx()
370 hif_dev->tx.tx_buf_cnt++; in __hif_usb_tx()
372 TX_STAT_INC(hif_dev, buf_queued); in __hif_usb_tx()
378 static int hif_usb_send_tx(struct hif_device_usb *hif_dev, struct sk_buff *skb) in hif_usb_send_tx() argument
384 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
386 if (hif_dev->tx.flags & HIF_USB_TX_STOP) { in hif_usb_send_tx()
387 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
392 if (hif_dev->tx.tx_skb_cnt > MAX_TX_BUF_NUM) { in hif_usb_send_tx()
393 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
397 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
404 ret = hif_usb_send_mgmt(hif_dev, skb); in hif_usb_send_tx()
407 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
411 __skb_queue_tail(&hif_dev->tx.tx_skb_queue, skb); in hif_usb_send_tx()
412 hif_dev->tx.tx_skb_cnt++; in hif_usb_send_tx()
416 if ((hif_dev->tx.tx_buf_cnt == MAX_TX_URB_NUM) && in hif_usb_send_tx()
417 (hif_dev->tx.tx_skb_cnt < 2)) { in hif_usb_send_tx()
418 __hif_usb_tx(hif_dev); in hif_usb_send_tx()
421 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
428 struct hif_device_usb *hif_dev = hif_handle; in hif_usb_start() local
431 hif_dev->flags |= HIF_USB_START; in hif_usb_start()
433 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_start()
434 hif_dev->tx.flags &= ~HIF_USB_TX_STOP; in hif_usb_start()
435 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_start()
440 struct hif_device_usb *hif_dev = hif_handle; in hif_usb_stop() local
444 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_stop()
445 ath9k_skb_queue_complete(hif_dev, &hif_dev->tx.tx_skb_queue, false); in hif_usb_stop()
446 hif_dev->tx.tx_skb_cnt = 0; in hif_usb_stop()
447 hif_dev->tx.flags |= HIF_USB_TX_STOP; in hif_usb_stop()
448 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_stop()
451 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_stop()
453 &hif_dev->tx.tx_pending, list) { in hif_usb_stop()
455 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_stop()
461 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_stop()
463 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_stop()
465 usb_kill_anchored_urbs(&hif_dev->mgmt_submitted); in hif_usb_stop()
470 struct hif_device_usb *hif_dev = hif_handle; in hif_usb_send() local
475 ret = hif_usb_send_tx(hif_dev, skb); in hif_usb_send()
478 ret = hif_usb_send_regout(hif_dev, skb); in hif_usb_send()
481 dev_err(&hif_dev->udev->dev, in hif_usb_send()
505 struct hif_device_usb *hif_dev = hif_handle; in hif_usb_sta_drain() local
509 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_sta_drain()
511 skb_queue_walk_safe(&hif_dev->tx.tx_skb_queue, skb, tmp) { in hif_usb_sta_drain()
513 __skb_unlink(skb, &hif_dev->tx.tx_skb_queue); in hif_usb_sta_drain()
514 ath9k_htc_txcompletion_cb(hif_dev->htc_handle, in hif_usb_sta_drain()
516 hif_dev->tx.tx_skb_cnt--; in hif_usb_sta_drain()
517 TX_STAT_INC(hif_dev, skb_failed); in hif_usb_sta_drain()
521 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_sta_drain()
537 static void ath9k_hif_usb_rx_stream(struct hif_device_usb *hif_dev, in ath9k_hif_usb_rx_stream() argument
546 spin_lock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
548 rx_remain_len = hif_dev->rx_remain_len; in ath9k_hif_usb_rx_stream()
549 rx_pkt_len = hif_dev->rx_transfer_len; in ath9k_hif_usb_rx_stream()
552 struct sk_buff *remain_skb = hif_dev->remain_skb; in ath9k_hif_usb_rx_stream()
558 rx_remain_len -= hif_dev->rx_pad_len; in ath9k_hif_usb_rx_stream()
564 hif_dev->rx_remain_len = 0; in ath9k_hif_usb_rx_stream()
574 spin_unlock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
588 RX_STAT_INC(hif_dev, skb_dropped); in ath9k_hif_usb_rx_stream()
593 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_rx_stream()
595 RX_STAT_INC(hif_dev, skb_dropped); in ath9k_hif_usb_rx_stream()
607 spin_lock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
608 hif_dev->rx_remain_len = index - MAX_RX_BUF_SIZE; in ath9k_hif_usb_rx_stream()
609 hif_dev->rx_transfer_len = in ath9k_hif_usb_rx_stream()
611 hif_dev->rx_pad_len = pad_len; in ath9k_hif_usb_rx_stream()
615 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_rx_stream()
617 spin_unlock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
621 RX_STAT_INC(hif_dev, skb_allocated); in ath9k_hif_usb_rx_stream()
624 hif_dev->rx_transfer_len); in ath9k_hif_usb_rx_stream()
627 hif_dev->remain_skb = nskb; in ath9k_hif_usb_rx_stream()
628 spin_unlock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
631 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_rx_stream()
637 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_rx_stream()
642 RX_STAT_INC(hif_dev, skb_allocated); in ath9k_hif_usb_rx_stream()
652 RX_STAT_ADD(hif_dev, skb_completed_bytes, skb_pool[i]->len); in ath9k_hif_usb_rx_stream()
653 ath9k_htc_rx_msg(hif_dev->htc_handle, skb_pool[i], in ath9k_hif_usb_rx_stream()
655 RX_STAT_INC(hif_dev, skb_completed); in ath9k_hif_usb_rx_stream()
662 struct hif_device_usb *hif_dev = rx_buf->hif_dev; in ath9k_hif_usb_rx_cb() local
669 if (!hif_dev) in ath9k_hif_usb_rx_cb()
686 ath9k_hif_usb_rx_stream(hif_dev, skb); in ath9k_hif_usb_rx_cb()
693 usb_anchor_urb(urb, &hif_dev->rx_submitted); in ath9k_hif_usb_rx_cb()
709 struct hif_device_usb *hif_dev = rx_buf->hif_dev; in ath9k_hif_usb_reg_in_cb() local
717 if (!hif_dev) in ath9k_hif_usb_reg_in_cb()
739 ath9k_htc_rx_msg(hif_dev->htc_handle, skb, in ath9k_hif_usb_reg_in_cb()
745 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_reg_in_cb()
753 usb_fill_int_urb(urb, hif_dev->udev, in ath9k_hif_usb_reg_in_cb()
754 usb_rcvintpipe(hif_dev->udev, in ath9k_hif_usb_reg_in_cb()
761 usb_anchor_urb(urb, &hif_dev->reg_in_submitted); in ath9k_hif_usb_reg_in_cb()
775 static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dealloc_tx_urbs() argument
780 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
782 &hif_dev->tx.tx_buf, list) { in ath9k_hif_usb_dealloc_tx_urbs()
784 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
790 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
792 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
794 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
795 hif_dev->tx.flags |= HIF_USB_TX_FLUSH; in ath9k_hif_usb_dealloc_tx_urbs()
796 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
798 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
800 &hif_dev->tx.tx_pending, list) { in ath9k_hif_usb_dealloc_tx_urbs()
802 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
808 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
810 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
812 usb_kill_anchored_urbs(&hif_dev->mgmt_submitted); in ath9k_hif_usb_dealloc_tx_urbs()
815 static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_alloc_tx_urbs() argument
820 INIT_LIST_HEAD(&hif_dev->tx.tx_buf); in ath9k_hif_usb_alloc_tx_urbs()
821 INIT_LIST_HEAD(&hif_dev->tx.tx_pending); in ath9k_hif_usb_alloc_tx_urbs()
822 spin_lock_init(&hif_dev->tx.tx_lock); in ath9k_hif_usb_alloc_tx_urbs()
823 __skb_queue_head_init(&hif_dev->tx.tx_skb_queue); in ath9k_hif_usb_alloc_tx_urbs()
824 init_usb_anchor(&hif_dev->mgmt_submitted); in ath9k_hif_usb_alloc_tx_urbs()
839 tx_buf->hif_dev = hif_dev; in ath9k_hif_usb_alloc_tx_urbs()
842 list_add_tail(&tx_buf->list, &hif_dev->tx.tx_buf); in ath9k_hif_usb_alloc_tx_urbs()
845 hif_dev->tx.tx_buf_cnt = MAX_TX_URB_NUM; in ath9k_hif_usb_alloc_tx_urbs()
853 ath9k_hif_usb_dealloc_tx_urbs(hif_dev); in ath9k_hif_usb_alloc_tx_urbs()
857 static void ath9k_hif_usb_dealloc_rx_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dealloc_rx_urbs() argument
859 usb_kill_anchored_urbs(&hif_dev->rx_submitted); in ath9k_hif_usb_dealloc_rx_urbs()
862 static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_alloc_rx_urbs() argument
869 init_usb_anchor(&hif_dev->rx_submitted); in ath9k_hif_usb_alloc_rx_urbs()
870 spin_lock_init(&hif_dev->rx_lock); in ath9k_hif_usb_alloc_rx_urbs()
894 rx_buf->hif_dev = hif_dev; in ath9k_hif_usb_alloc_rx_urbs()
897 usb_fill_bulk_urb(urb, hif_dev->udev, in ath9k_hif_usb_alloc_rx_urbs()
898 usb_rcvbulkpipe(hif_dev->udev, in ath9k_hif_usb_alloc_rx_urbs()
904 usb_anchor_urb(urb, &hif_dev->rx_submitted); in ath9k_hif_usb_alloc_rx_urbs()
929 ath9k_hif_usb_dealloc_rx_urbs(hif_dev); in ath9k_hif_usb_alloc_rx_urbs()
933 static void ath9k_hif_usb_dealloc_reg_in_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dealloc_reg_in_urbs() argument
935 usb_kill_anchored_urbs(&hif_dev->reg_in_submitted); in ath9k_hif_usb_dealloc_reg_in_urbs()
938 static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_alloc_reg_in_urbs() argument
945 init_usb_anchor(&hif_dev->reg_in_submitted); in ath9k_hif_usb_alloc_reg_in_urbs()
969 rx_buf->hif_dev = hif_dev; in ath9k_hif_usb_alloc_reg_in_urbs()
972 usb_fill_int_urb(urb, hif_dev->udev, in ath9k_hif_usb_alloc_reg_in_urbs()
973 usb_rcvintpipe(hif_dev->udev, in ath9k_hif_usb_alloc_reg_in_urbs()
979 usb_anchor_urb(urb, &hif_dev->reg_in_submitted); in ath9k_hif_usb_alloc_reg_in_urbs()
1004 ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev); in ath9k_hif_usb_alloc_reg_in_urbs()
1008 static int ath9k_hif_usb_alloc_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_alloc_urbs() argument
1011 init_usb_anchor(&hif_dev->regout_submitted); in ath9k_hif_usb_alloc_urbs()
1014 if (ath9k_hif_usb_alloc_tx_urbs(hif_dev) < 0) in ath9k_hif_usb_alloc_urbs()
1018 if (ath9k_hif_usb_alloc_rx_urbs(hif_dev) < 0) in ath9k_hif_usb_alloc_urbs()
1022 if (ath9k_hif_usb_alloc_reg_in_urbs(hif_dev) < 0) in ath9k_hif_usb_alloc_urbs()
1027 ath9k_hif_usb_dealloc_rx_urbs(hif_dev); in ath9k_hif_usb_alloc_urbs()
1029 ath9k_hif_usb_dealloc_tx_urbs(hif_dev); in ath9k_hif_usb_alloc_urbs()
1034 void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dealloc_urbs() argument
1036 usb_kill_anchored_urbs(&hif_dev->regout_submitted); in ath9k_hif_usb_dealloc_urbs()
1037 ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev); in ath9k_hif_usb_dealloc_urbs()
1038 ath9k_hif_usb_dealloc_tx_urbs(hif_dev); in ath9k_hif_usb_dealloc_urbs()
1039 ath9k_hif_usb_dealloc_rx_urbs(hif_dev); in ath9k_hif_usb_dealloc_urbs()
1042 static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev) in ath9k_hif_usb_download_fw() argument
1045 const void *data = hif_dev->fw_data; in ath9k_hif_usb_download_fw()
1046 size_t len = hif_dev->fw_size; in ath9k_hif_usb_download_fw()
1058 err = usb_control_msg(hif_dev->udev, in ath9k_hif_usb_download_fw()
1059 usb_sndctrlpipe(hif_dev->udev, 0), in ath9k_hif_usb_download_fw()
1074 if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info)) in ath9k_hif_usb_download_fw()
1082 err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0), in ath9k_hif_usb_download_fw()
1089 dev_info(&hif_dev->udev->dev, "ath9k_htc: Transferred FW: %s, size: %ld\n", in ath9k_hif_usb_download_fw()
1090 hif_dev->fw_name, (unsigned long) hif_dev->fw_size); in ath9k_hif_usb_download_fw()
1095 static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dev_init() argument
1099 ret = ath9k_hif_usb_download_fw(hif_dev); in ath9k_hif_usb_dev_init()
1101 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_dev_init()
1103 hif_dev->fw_name); in ath9k_hif_usb_dev_init()
1108 ret = ath9k_hif_usb_alloc_urbs(hif_dev); in ath9k_hif_usb_dev_init()
1110 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_dev_init()
1118 static void ath9k_hif_usb_dev_deinit(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dev_deinit() argument
1120 ath9k_hif_usb_dealloc_urbs(hif_dev); in ath9k_hif_usb_dev_deinit()
1127 static void ath9k_hif_usb_firmware_fail(struct hif_device_usb *hif_dev) in ath9k_hif_usb_firmware_fail() argument
1129 struct device *dev = &hif_dev->udev->dev; in ath9k_hif_usb_firmware_fail()
1132 complete_all(&hif_dev->fw_done); in ath9k_hif_usb_firmware_fail()
1146 static int ath9k_hif_request_firmware(struct hif_device_usb *hif_dev, in ath9k_hif_request_firmware() argument
1154 hif_dev->fw_minor_index = FIRMWARE_MINOR_IDX_MAX + 1; in ath9k_hif_request_firmware()
1157 hif_dev->fw_minor_index = FIRMWARE_MINOR_IDX_MAX; in ath9k_hif_request_firmware()
1158 sprintf(index, "%d", hif_dev->fw_minor_index); in ath9k_hif_request_firmware()
1161 hif_dev->fw_minor_index--; in ath9k_hif_request_firmware()
1162 sprintf(index, "%d", hif_dev->fw_minor_index); in ath9k_hif_request_firmware()
1166 if (MAJOR_VERSION_REQ == 1 && hif_dev->fw_minor_index == 3) { in ath9k_hif_request_firmware()
1169 if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info)) in ath9k_hif_request_firmware()
1177 snprintf(hif_dev->fw_name, sizeof(hif_dev->fw_name), in ath9k_hif_request_firmware()
1180 } else if (hif_dev->fw_minor_index < FIRMWARE_MINOR_IDX_MIN) { in ath9k_hif_request_firmware()
1181 dev_err(&hif_dev->udev->dev, "no suitable firmware found!\n"); in ath9k_hif_request_firmware()
1185 if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info)) in ath9k_hif_request_firmware()
1194 snprintf(hif_dev->fw_name, sizeof(hif_dev->fw_name), in ath9k_hif_request_firmware()
1199 ret = request_firmware_nowait(THIS_MODULE, true, hif_dev->fw_name, in ath9k_hif_request_firmware()
1200 &hif_dev->udev->dev, GFP_KERNEL, in ath9k_hif_request_firmware()
1201 hif_dev, ath9k_hif_usb_firmware_cb); in ath9k_hif_request_firmware()
1203 dev_err(&hif_dev->udev->dev, in ath9k_hif_request_firmware()
1205 hif_dev->fw_name); in ath9k_hif_request_firmware()
1209 dev_info(&hif_dev->udev->dev, "ath9k_htc: Firmware %s requested\n", in ath9k_hif_request_firmware()
1210 hif_dev->fw_name); in ath9k_hif_request_firmware()
1217 struct hif_device_usb *hif_dev = context; in ath9k_hif_usb_firmware_cb() local
1221 ret = ath9k_hif_request_firmware(hif_dev, false); in ath9k_hif_usb_firmware_cb()
1225 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_firmware_cb()
1227 hif_dev->fw_name); in ath9k_hif_usb_firmware_cb()
1231 hif_dev->htc_handle = ath9k_htc_hw_alloc(hif_dev, &hif_usb, in ath9k_hif_usb_firmware_cb()
1232 &hif_dev->udev->dev); in ath9k_hif_usb_firmware_cb()
1233 if (hif_dev->htc_handle == NULL) in ath9k_hif_usb_firmware_cb()
1236 hif_dev->fw_data = fw->data; in ath9k_hif_usb_firmware_cb()
1237 hif_dev->fw_size = fw->size; in ath9k_hif_usb_firmware_cb()
1241 ret = ath9k_hif_usb_dev_init(hif_dev); in ath9k_hif_usb_firmware_cb()
1245 ret = ath9k_htc_hw_init(hif_dev->htc_handle, in ath9k_hif_usb_firmware_cb()
1246 &hif_dev->interface->dev, in ath9k_hif_usb_firmware_cb()
1247 hif_dev->usb_device_id->idProduct, in ath9k_hif_usb_firmware_cb()
1248 hif_dev->udev->product, in ath9k_hif_usb_firmware_cb()
1249 hif_dev->usb_device_id->driver_info); in ath9k_hif_usb_firmware_cb()
1256 hif_dev->flags |= HIF_USB_READY; in ath9k_hif_usb_firmware_cb()
1257 complete_all(&hif_dev->fw_done); in ath9k_hif_usb_firmware_cb()
1262 ath9k_hif_usb_dev_deinit(hif_dev); in ath9k_hif_usb_firmware_cb()
1264 ath9k_htc_hw_free(hif_dev->htc_handle); in ath9k_hif_usb_firmware_cb()
1268 ath9k_hif_usb_firmware_fail(hif_dev); in ath9k_hif_usb_firmware_cb()
1333 struct hif_device_usb *hif_dev; in ath9k_hif_usb_probe() local
1339 hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL); in ath9k_hif_usb_probe()
1340 if (!hif_dev) { in ath9k_hif_usb_probe()
1347 hif_dev->udev = udev; in ath9k_hif_usb_probe()
1348 hif_dev->interface = interface; in ath9k_hif_usb_probe()
1349 hif_dev->usb_device_id = id; in ath9k_hif_usb_probe()
1353 usb_set_intfdata(interface, hif_dev); in ath9k_hif_usb_probe()
1355 init_completion(&hif_dev->fw_done); in ath9k_hif_usb_probe()
1357 ret = ath9k_hif_request_firmware(hif_dev, true); in ath9k_hif_usb_probe()
1365 kfree(hif_dev); in ath9k_hif_usb_probe()
1392 struct hif_device_usb *hif_dev = usb_get_intfdata(interface); in ath9k_hif_usb_disconnect() local
1395 if (!hif_dev) in ath9k_hif_usb_disconnect()
1398 wait_for_completion(&hif_dev->fw_done); in ath9k_hif_usb_disconnect()
1400 if (hif_dev->flags & HIF_USB_READY) { in ath9k_hif_usb_disconnect()
1401 ath9k_htc_hw_deinit(hif_dev->htc_handle, unplugged); in ath9k_hif_usb_disconnect()
1402 ath9k_hif_usb_dev_deinit(hif_dev); in ath9k_hif_usb_disconnect()
1403 ath9k_destroy_wmi(hif_dev->htc_handle->drv_priv); in ath9k_hif_usb_disconnect()
1404 ath9k_htc_hw_free(hif_dev->htc_handle); in ath9k_hif_usb_disconnect()
1411 if (!unplugged && (hif_dev->flags & HIF_USB_READY)) in ath9k_hif_usb_disconnect()
1414 kfree(hif_dev); in ath9k_hif_usb_disconnect()
1423 struct hif_device_usb *hif_dev = usb_get_intfdata(interface); in ath9k_hif_usb_suspend() local
1429 if (!(hif_dev->flags & HIF_USB_START)) in ath9k_hif_usb_suspend()
1430 ath9k_htc_suspend(hif_dev->htc_handle); in ath9k_hif_usb_suspend()
1432 wait_for_completion(&hif_dev->fw_done); in ath9k_hif_usb_suspend()
1434 if (hif_dev->flags & HIF_USB_READY) in ath9k_hif_usb_suspend()
1435 ath9k_hif_usb_dealloc_urbs(hif_dev); in ath9k_hif_usb_suspend()
1442 struct hif_device_usb *hif_dev = usb_get_intfdata(interface); in ath9k_hif_usb_resume() local
1443 struct htc_target *htc_handle = hif_dev->htc_handle; in ath9k_hif_usb_resume()
1447 ret = ath9k_hif_usb_alloc_urbs(hif_dev); in ath9k_hif_usb_resume()
1451 if (hif_dev->flags & HIF_USB_READY) { in ath9k_hif_usb_resume()
1453 ret = request_firmware(&fw, hif_dev->fw_name, in ath9k_hif_usb_resume()
1454 &hif_dev->udev->dev); in ath9k_hif_usb_resume()
1458 hif_dev->fw_data = fw->data; in ath9k_hif_usb_resume()
1459 hif_dev->fw_size = fw->size; in ath9k_hif_usb_resume()
1460 ret = ath9k_hif_usb_download_fw(hif_dev); in ath9k_hif_usb_resume()
1465 ath9k_hif_usb_dealloc_urbs(hif_dev); in ath9k_hif_usb_resume()
1479 ath9k_hif_usb_dealloc_urbs(hif_dev); in ath9k_hif_usb_resume()