Lines Matching refs:hif_dev
67 static int __hif_usb_tx(struct hif_device_usb *hif_dev);
86 ath9k_htc_txcompletion_cb(cmd->hif_dev->htc_handle, in hif_usb_regout_cb()
97 static int hif_usb_send_regout(struct hif_device_usb *hif_dev, in hif_usb_send_regout() argument
115 cmd->hif_dev = hif_dev; in hif_usb_send_regout()
117 usb_fill_int_urb(urb, hif_dev->udev, in hif_usb_send_regout()
118 usb_sndintpipe(hif_dev->udev, USB_REG_OUT_PIPE), in hif_usb_send_regout()
122 usb_anchor_urb(urb, &hif_dev->regout_submitted); in hif_usb_send_regout()
136 struct hif_device_usb *hif_dev; in hif_usb_mgmt_cb() local
139 if (!cmd || !cmd->skb || !cmd->hif_dev) in hif_usb_mgmt_cb()
142 hif_dev = cmd->hif_dev; in hif_usb_mgmt_cb()
157 spin_lock(&hif_dev->tx.tx_lock); in hif_usb_mgmt_cb()
158 if (hif_dev->tx.flags & HIF_USB_TX_FLUSH) { in hif_usb_mgmt_cb()
159 spin_unlock(&hif_dev->tx.tx_lock); in hif_usb_mgmt_cb()
164 spin_unlock(&hif_dev->tx.tx_lock); in hif_usb_mgmt_cb()
173 ath9k_htc_txcompletion_cb(cmd->hif_dev->htc_handle, in hif_usb_mgmt_cb()
178 static int hif_usb_send_mgmt(struct hif_device_usb *hif_dev, in hif_usb_send_mgmt() argument
197 cmd->hif_dev = hif_dev; in hif_usb_send_mgmt()
203 usb_fill_bulk_urb(urb, hif_dev->udev, in hif_usb_send_mgmt()
204 usb_sndbulkpipe(hif_dev->udev, USB_WLAN_TX_PIPE), in hif_usb_send_mgmt()
208 usb_anchor_urb(urb, &hif_dev->mgmt_submitted); in hif_usb_send_mgmt()
219 static inline void ath9k_skb_queue_purge(struct hif_device_usb *hif_dev, in ath9k_skb_queue_purge() argument
229 static inline void ath9k_skb_queue_complete(struct hif_device_usb *hif_dev, in ath9k_skb_queue_complete() argument
239 ath9k_htc_txcompletion_cb(hif_dev->htc_handle, in ath9k_skb_queue_complete()
253 struct hif_device_usb *hif_dev; in hif_usb_tx_cb() local
256 if (!tx_buf || !tx_buf->hif_dev) in hif_usb_tx_cb()
259 hif_dev = tx_buf->hif_dev; in hif_usb_tx_cb()
274 spin_lock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
275 if (hif_dev->tx.flags & HIF_USB_TX_FLUSH) { in hif_usb_tx_cb()
276 spin_unlock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
277 ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue); in hif_usb_tx_cb()
280 spin_unlock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
288 ath9k_skb_queue_complete(hif_dev, &tx_buf->skb_queue, txok); in hif_usb_tx_cb()
295 spin_lock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
296 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf); in hif_usb_tx_cb()
297 hif_dev->tx.tx_buf_cnt++; in hif_usb_tx_cb()
298 if (!(hif_dev->tx.flags & HIF_USB_TX_STOP)) in hif_usb_tx_cb()
299 __hif_usb_tx(hif_dev); /* Check for pending SKBs */ in hif_usb_tx_cb()
301 spin_unlock(&hif_dev->tx.tx_lock); in hif_usb_tx_cb()
305 static int __hif_usb_tx(struct hif_device_usb *hif_dev) in __hif_usb_tx() argument
314 if (hif_dev->tx.tx_skb_cnt == 0) in __hif_usb_tx()
318 if (list_empty(&hif_dev->tx.tx_buf)) in __hif_usb_tx()
321 tx_buf = list_first_entry(&hif_dev->tx.tx_buf, struct tx_buf, list); in __hif_usb_tx()
322 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_pending); in __hif_usb_tx()
323 hif_dev->tx.tx_buf_cnt--; in __hif_usb_tx()
325 tx_skb_cnt = min_t(u16, hif_dev->tx.tx_skb_cnt, MAX_TX_AGGR_NUM); in __hif_usb_tx()
328 nskb = __skb_dequeue(&hif_dev->tx.tx_skb_queue); in __hif_usb_tx()
333 hif_dev->tx.tx_skb_cnt--; in __hif_usb_tx()
354 usb_fill_bulk_urb(tx_buf->urb, hif_dev->udev, in __hif_usb_tx()
355 usb_sndbulkpipe(hif_dev->udev, USB_WLAN_TX_PIPE), in __hif_usb_tx()
362 ath9k_skb_queue_complete(hif_dev, &tx_buf->skb_queue, false); in __hif_usb_tx()
364 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf); in __hif_usb_tx()
365 hif_dev->tx.tx_buf_cnt++; in __hif_usb_tx()
374 static int hif_usb_send_tx(struct hif_device_usb *hif_dev, struct sk_buff *skb) in hif_usb_send_tx() argument
380 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
382 if (hif_dev->tx.flags & HIF_USB_TX_STOP) { in hif_usb_send_tx()
383 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
388 if (hif_dev->tx.tx_skb_cnt > MAX_TX_BUF_NUM) { in hif_usb_send_tx()
389 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
393 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
400 ret = hif_usb_send_mgmt(hif_dev, skb); in hif_usb_send_tx()
403 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
407 __skb_queue_tail(&hif_dev->tx.tx_skb_queue, skb); in hif_usb_send_tx()
408 hif_dev->tx.tx_skb_cnt++; in hif_usb_send_tx()
412 if ((hif_dev->tx.tx_buf_cnt == MAX_TX_URB_NUM) && in hif_usb_send_tx()
413 (hif_dev->tx.tx_skb_cnt < 2)) { in hif_usb_send_tx()
414 __hif_usb_tx(hif_dev); in hif_usb_send_tx()
417 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_send_tx()
424 struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle; in hif_usb_start() local
427 hif_dev->flags |= HIF_USB_START; in hif_usb_start()
429 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_start()
430 hif_dev->tx.flags &= ~HIF_USB_TX_STOP; in hif_usb_start()
431 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_start()
436 struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle; in hif_usb_stop() local
440 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_stop()
441 ath9k_skb_queue_complete(hif_dev, &hif_dev->tx.tx_skb_queue, false); in hif_usb_stop()
442 hif_dev->tx.tx_skb_cnt = 0; in hif_usb_stop()
443 hif_dev->tx.flags |= HIF_USB_TX_STOP; in hif_usb_stop()
444 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_stop()
448 &hif_dev->tx.tx_pending, list) { in hif_usb_stop()
452 usb_kill_anchored_urbs(&hif_dev->mgmt_submitted); in hif_usb_stop()
457 struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle; in hif_usb_send() local
462 ret = hif_usb_send_tx(hif_dev, skb); in hif_usb_send()
465 ret = hif_usb_send_regout(hif_dev, skb); in hif_usb_send()
468 dev_err(&hif_dev->udev->dev, in hif_usb_send()
492 struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle; in hif_usb_sta_drain() local
496 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in hif_usb_sta_drain()
498 skb_queue_walk_safe(&hif_dev->tx.tx_skb_queue, skb, tmp) { in hif_usb_sta_drain()
500 __skb_unlink(skb, &hif_dev->tx.tx_skb_queue); in hif_usb_sta_drain()
501 ath9k_htc_txcompletion_cb(hif_dev->htc_handle, in hif_usb_sta_drain()
503 hif_dev->tx.tx_skb_cnt--; in hif_usb_sta_drain()
508 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in hif_usb_sta_drain()
524 static void ath9k_hif_usb_rx_stream(struct hif_device_usb *hif_dev, in ath9k_hif_usb_rx_stream() argument
533 spin_lock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
535 rx_remain_len = hif_dev->rx_remain_len; in ath9k_hif_usb_rx_stream()
536 rx_pkt_len = hif_dev->rx_transfer_len; in ath9k_hif_usb_rx_stream()
539 struct sk_buff *remain_skb = hif_dev->remain_skb; in ath9k_hif_usb_rx_stream()
545 rx_remain_len -= hif_dev->rx_pad_len; in ath9k_hif_usb_rx_stream()
551 hif_dev->rx_remain_len = 0; in ath9k_hif_usb_rx_stream()
561 spin_unlock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
587 spin_lock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
588 hif_dev->rx_remain_len = index - MAX_RX_BUF_SIZE; in ath9k_hif_usb_rx_stream()
589 hif_dev->rx_transfer_len = in ath9k_hif_usb_rx_stream()
591 hif_dev->rx_pad_len = pad_len; in ath9k_hif_usb_rx_stream()
595 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_rx_stream()
597 spin_unlock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
604 hif_dev->rx_transfer_len); in ath9k_hif_usb_rx_stream()
607 hif_dev->remain_skb = nskb; in ath9k_hif_usb_rx_stream()
608 spin_unlock(&hif_dev->rx_lock); in ath9k_hif_usb_rx_stream()
612 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_rx_stream()
628 ath9k_htc_rx_msg(hif_dev->htc_handle, skb_pool[i], in ath9k_hif_usb_rx_stream()
637 struct hif_device_usb *hif_dev = in ath9k_hif_usb_rx_cb() local
644 if (!hif_dev) in ath9k_hif_usb_rx_cb()
661 ath9k_hif_usb_rx_stream(hif_dev, skb); in ath9k_hif_usb_rx_cb()
668 usb_anchor_urb(urb, &hif_dev->rx_submitted); in ath9k_hif_usb_rx_cb()
684 struct hif_device_usb *hif_dev = in ath9k_hif_usb_reg_in_cb() local
691 if (!hif_dev) in ath9k_hif_usb_reg_in_cb()
713 ath9k_htc_rx_msg(hif_dev->htc_handle, skb, in ath9k_hif_usb_reg_in_cb()
719 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_reg_in_cb()
725 usb_fill_int_urb(urb, hif_dev->udev, in ath9k_hif_usb_reg_in_cb()
726 usb_rcvintpipe(hif_dev->udev, in ath9k_hif_usb_reg_in_cb()
733 usb_anchor_urb(urb, &hif_dev->reg_in_submitted); in ath9k_hif_usb_reg_in_cb()
746 static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dealloc_tx_urbs() argument
752 &hif_dev->tx.tx_buf, list) { in ath9k_hif_usb_dealloc_tx_urbs()
760 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
761 hif_dev->tx.flags |= HIF_USB_TX_FLUSH; in ath9k_hif_usb_dealloc_tx_urbs()
762 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); in ath9k_hif_usb_dealloc_tx_urbs()
765 &hif_dev->tx.tx_pending, list) { in ath9k_hif_usb_dealloc_tx_urbs()
773 usb_kill_anchored_urbs(&hif_dev->mgmt_submitted); in ath9k_hif_usb_dealloc_tx_urbs()
776 static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_alloc_tx_urbs() argument
781 INIT_LIST_HEAD(&hif_dev->tx.tx_buf); in ath9k_hif_usb_alloc_tx_urbs()
782 INIT_LIST_HEAD(&hif_dev->tx.tx_pending); in ath9k_hif_usb_alloc_tx_urbs()
783 spin_lock_init(&hif_dev->tx.tx_lock); in ath9k_hif_usb_alloc_tx_urbs()
784 __skb_queue_head_init(&hif_dev->tx.tx_skb_queue); in ath9k_hif_usb_alloc_tx_urbs()
785 init_usb_anchor(&hif_dev->mgmt_submitted); in ath9k_hif_usb_alloc_tx_urbs()
800 tx_buf->hif_dev = hif_dev; in ath9k_hif_usb_alloc_tx_urbs()
803 list_add_tail(&tx_buf->list, &hif_dev->tx.tx_buf); in ath9k_hif_usb_alloc_tx_urbs()
806 hif_dev->tx.tx_buf_cnt = MAX_TX_URB_NUM; in ath9k_hif_usb_alloc_tx_urbs()
814 ath9k_hif_usb_dealloc_tx_urbs(hif_dev); in ath9k_hif_usb_alloc_tx_urbs()
818 static void ath9k_hif_usb_dealloc_rx_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dealloc_rx_urbs() argument
820 usb_kill_anchored_urbs(&hif_dev->rx_submitted); in ath9k_hif_usb_dealloc_rx_urbs()
823 static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_alloc_rx_urbs() argument
829 init_usb_anchor(&hif_dev->rx_submitted); in ath9k_hif_usb_alloc_rx_urbs()
830 spin_lock_init(&hif_dev->rx_lock); in ath9k_hif_usb_alloc_rx_urbs()
848 usb_fill_bulk_urb(urb, hif_dev->udev, in ath9k_hif_usb_alloc_rx_urbs()
849 usb_rcvbulkpipe(hif_dev->udev, in ath9k_hif_usb_alloc_rx_urbs()
855 usb_anchor_urb(urb, &hif_dev->rx_submitted); in ath9k_hif_usb_alloc_rx_urbs()
878 ath9k_hif_usb_dealloc_rx_urbs(hif_dev); in ath9k_hif_usb_alloc_rx_urbs()
882 static void ath9k_hif_usb_dealloc_reg_in_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dealloc_reg_in_urbs() argument
884 usb_kill_anchored_urbs(&hif_dev->reg_in_submitted); in ath9k_hif_usb_dealloc_reg_in_urbs()
887 static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_alloc_reg_in_urbs() argument
893 init_usb_anchor(&hif_dev->reg_in_submitted); in ath9k_hif_usb_alloc_reg_in_urbs()
911 usb_fill_int_urb(urb, hif_dev->udev, in ath9k_hif_usb_alloc_reg_in_urbs()
912 usb_rcvintpipe(hif_dev->udev, in ath9k_hif_usb_alloc_reg_in_urbs()
918 usb_anchor_urb(urb, &hif_dev->reg_in_submitted); in ath9k_hif_usb_alloc_reg_in_urbs()
941 ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev); in ath9k_hif_usb_alloc_reg_in_urbs()
945 static int ath9k_hif_usb_alloc_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_alloc_urbs() argument
948 init_usb_anchor(&hif_dev->regout_submitted); in ath9k_hif_usb_alloc_urbs()
951 if (ath9k_hif_usb_alloc_tx_urbs(hif_dev) < 0) in ath9k_hif_usb_alloc_urbs()
955 if (ath9k_hif_usb_alloc_rx_urbs(hif_dev) < 0) in ath9k_hif_usb_alloc_urbs()
959 if (ath9k_hif_usb_alloc_reg_in_urbs(hif_dev) < 0) in ath9k_hif_usb_alloc_urbs()
964 ath9k_hif_usb_dealloc_rx_urbs(hif_dev); in ath9k_hif_usb_alloc_urbs()
966 ath9k_hif_usb_dealloc_tx_urbs(hif_dev); in ath9k_hif_usb_alloc_urbs()
971 static void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dealloc_urbs() argument
973 usb_kill_anchored_urbs(&hif_dev->regout_submitted); in ath9k_hif_usb_dealloc_urbs()
974 ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev); in ath9k_hif_usb_dealloc_urbs()
975 ath9k_hif_usb_dealloc_tx_urbs(hif_dev); in ath9k_hif_usb_dealloc_urbs()
976 ath9k_hif_usb_dealloc_rx_urbs(hif_dev); in ath9k_hif_usb_dealloc_urbs()
979 static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev) in ath9k_hif_usb_download_fw() argument
982 const void *data = hif_dev->fw_data; in ath9k_hif_usb_download_fw()
983 size_t len = hif_dev->fw_size; in ath9k_hif_usb_download_fw()
995 err = usb_control_msg(hif_dev->udev, in ath9k_hif_usb_download_fw()
996 usb_sndctrlpipe(hif_dev->udev, 0), in ath9k_hif_usb_download_fw()
1010 if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info)) in ath9k_hif_usb_download_fw()
1018 err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0), in ath9k_hif_usb_download_fw()
1025 dev_info(&hif_dev->udev->dev, "ath9k_htc: Transferred FW: %s, size: %ld\n", in ath9k_hif_usb_download_fw()
1026 hif_dev->fw_name, (unsigned long) hif_dev->fw_size); in ath9k_hif_usb_download_fw()
1031 static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dev_init() argument
1035 ret = ath9k_hif_usb_download_fw(hif_dev); in ath9k_hif_usb_dev_init()
1037 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_dev_init()
1039 hif_dev->fw_name); in ath9k_hif_usb_dev_init()
1044 ret = ath9k_hif_usb_alloc_urbs(hif_dev); in ath9k_hif_usb_dev_init()
1046 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_dev_init()
1054 static void ath9k_hif_usb_dev_deinit(struct hif_device_usb *hif_dev) in ath9k_hif_usb_dev_deinit() argument
1056 ath9k_hif_usb_dealloc_urbs(hif_dev); in ath9k_hif_usb_dev_deinit()
1063 static void ath9k_hif_usb_firmware_fail(struct hif_device_usb *hif_dev) in ath9k_hif_usb_firmware_fail() argument
1065 struct device *dev = &hif_dev->udev->dev; in ath9k_hif_usb_firmware_fail()
1068 complete_all(&hif_dev->fw_done); in ath9k_hif_usb_firmware_fail()
1082 static int ath9k_hif_request_firmware(struct hif_device_usb *hif_dev, in ath9k_hif_request_firmware() argument
1090 hif_dev->fw_minor_index = FIRMWARE_MINOR_IDX_MAX + 1; in ath9k_hif_request_firmware()
1093 hif_dev->fw_minor_index = FIRMWARE_MINOR_IDX_MAX; in ath9k_hif_request_firmware()
1094 sprintf(index, "%d", hif_dev->fw_minor_index); in ath9k_hif_request_firmware()
1097 hif_dev->fw_minor_index--; in ath9k_hif_request_firmware()
1098 sprintf(index, "%d", hif_dev->fw_minor_index); in ath9k_hif_request_firmware()
1102 if (MAJOR_VERSION_REQ == 1 && hif_dev->fw_minor_index == 3) { in ath9k_hif_request_firmware()
1105 if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info)) in ath9k_hif_request_firmware()
1113 snprintf(hif_dev->fw_name, sizeof(hif_dev->fw_name), in ath9k_hif_request_firmware()
1116 } else if (hif_dev->fw_minor_index < FIRMWARE_MINOR_IDX_MIN) { in ath9k_hif_request_firmware()
1117 dev_err(&hif_dev->udev->dev, "no suitable firmware found!\n"); in ath9k_hif_request_firmware()
1121 if (IS_AR7010_DEVICE(hif_dev->usb_device_id->driver_info)) in ath9k_hif_request_firmware()
1130 snprintf(hif_dev->fw_name, sizeof(hif_dev->fw_name), in ath9k_hif_request_firmware()
1135 ret = request_firmware_nowait(THIS_MODULE, true, hif_dev->fw_name, in ath9k_hif_request_firmware()
1136 &hif_dev->udev->dev, GFP_KERNEL, in ath9k_hif_request_firmware()
1137 hif_dev, ath9k_hif_usb_firmware_cb); in ath9k_hif_request_firmware()
1139 dev_err(&hif_dev->udev->dev, in ath9k_hif_request_firmware()
1141 hif_dev->fw_name); in ath9k_hif_request_firmware()
1145 dev_info(&hif_dev->udev->dev, "ath9k_htc: Firmware %s requested\n", in ath9k_hif_request_firmware()
1146 hif_dev->fw_name); in ath9k_hif_request_firmware()
1153 struct hif_device_usb *hif_dev = context; in ath9k_hif_usb_firmware_cb() local
1157 ret = ath9k_hif_request_firmware(hif_dev, false); in ath9k_hif_usb_firmware_cb()
1161 dev_err(&hif_dev->udev->dev, in ath9k_hif_usb_firmware_cb()
1163 hif_dev->fw_name); in ath9k_hif_usb_firmware_cb()
1167 hif_dev->htc_handle = ath9k_htc_hw_alloc(hif_dev, &hif_usb, in ath9k_hif_usb_firmware_cb()
1168 &hif_dev->udev->dev); in ath9k_hif_usb_firmware_cb()
1169 if (hif_dev->htc_handle == NULL) in ath9k_hif_usb_firmware_cb()
1172 hif_dev->fw_data = fw->data; in ath9k_hif_usb_firmware_cb()
1173 hif_dev->fw_size = fw->size; in ath9k_hif_usb_firmware_cb()
1177 ret = ath9k_hif_usb_dev_init(hif_dev); in ath9k_hif_usb_firmware_cb()
1181 ret = ath9k_htc_hw_init(hif_dev->htc_handle, in ath9k_hif_usb_firmware_cb()
1182 &hif_dev->interface->dev, in ath9k_hif_usb_firmware_cb()
1183 hif_dev->usb_device_id->idProduct, in ath9k_hif_usb_firmware_cb()
1184 hif_dev->udev->product, in ath9k_hif_usb_firmware_cb()
1185 hif_dev->usb_device_id->driver_info); in ath9k_hif_usb_firmware_cb()
1192 hif_dev->flags |= HIF_USB_READY; in ath9k_hif_usb_firmware_cb()
1193 complete_all(&hif_dev->fw_done); in ath9k_hif_usb_firmware_cb()
1198 ath9k_hif_usb_dev_deinit(hif_dev); in ath9k_hif_usb_firmware_cb()
1200 ath9k_htc_hw_free(hif_dev->htc_handle); in ath9k_hif_usb_firmware_cb()
1204 ath9k_hif_usb_firmware_fail(hif_dev); in ath9k_hif_usb_firmware_cb()
1266 struct hif_device_usb *hif_dev; in ath9k_hif_usb_probe() local
1272 hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL); in ath9k_hif_usb_probe()
1273 if (!hif_dev) { in ath9k_hif_usb_probe()
1280 hif_dev->udev = udev; in ath9k_hif_usb_probe()
1281 hif_dev->interface = interface; in ath9k_hif_usb_probe()
1282 hif_dev->usb_device_id = id; in ath9k_hif_usb_probe()
1286 usb_set_intfdata(interface, hif_dev); in ath9k_hif_usb_probe()
1288 init_completion(&hif_dev->fw_done); in ath9k_hif_usb_probe()
1290 ret = ath9k_hif_request_firmware(hif_dev, true); in ath9k_hif_usb_probe()
1298 kfree(hif_dev); in ath9k_hif_usb_probe()
1325 struct hif_device_usb *hif_dev = usb_get_intfdata(interface); in ath9k_hif_usb_disconnect() local
1328 if (!hif_dev) in ath9k_hif_usb_disconnect()
1331 wait_for_completion(&hif_dev->fw_done); in ath9k_hif_usb_disconnect()
1333 if (hif_dev->flags & HIF_USB_READY) { in ath9k_hif_usb_disconnect()
1334 ath9k_htc_hw_deinit(hif_dev->htc_handle, unplugged); in ath9k_hif_usb_disconnect()
1335 ath9k_htc_hw_free(hif_dev->htc_handle); in ath9k_hif_usb_disconnect()
1336 ath9k_hif_usb_dev_deinit(hif_dev); in ath9k_hif_usb_disconnect()
1343 if (!unplugged && (hif_dev->flags & HIF_USB_READY)) in ath9k_hif_usb_disconnect()
1346 kfree(hif_dev); in ath9k_hif_usb_disconnect()
1355 struct hif_device_usb *hif_dev = usb_get_intfdata(interface); in ath9k_hif_usb_suspend() local
1361 if (!(hif_dev->flags & HIF_USB_START)) in ath9k_hif_usb_suspend()
1362 ath9k_htc_suspend(hif_dev->htc_handle); in ath9k_hif_usb_suspend()
1364 wait_for_completion(&hif_dev->fw_done); in ath9k_hif_usb_suspend()
1366 if (hif_dev->flags & HIF_USB_READY) in ath9k_hif_usb_suspend()
1367 ath9k_hif_usb_dealloc_urbs(hif_dev); in ath9k_hif_usb_suspend()
1374 struct hif_device_usb *hif_dev = usb_get_intfdata(interface); in ath9k_hif_usb_resume() local
1375 struct htc_target *htc_handle = hif_dev->htc_handle; in ath9k_hif_usb_resume()
1379 ret = ath9k_hif_usb_alloc_urbs(hif_dev); in ath9k_hif_usb_resume()
1383 if (hif_dev->flags & HIF_USB_READY) { in ath9k_hif_usb_resume()
1385 ret = request_firmware(&fw, hif_dev->fw_name, in ath9k_hif_usb_resume()
1386 &hif_dev->udev->dev); in ath9k_hif_usb_resume()
1390 hif_dev->fw_data = fw->data; in ath9k_hif_usb_resume()
1391 hif_dev->fw_size = fw->size; in ath9k_hif_usb_resume()
1392 ret = ath9k_hif_usb_download_fw(hif_dev); in ath9k_hif_usb_resume()
1397 ath9k_hif_usb_dealloc_urbs(hif_dev); in ath9k_hif_usb_resume()
1411 ath9k_hif_usb_dealloc_urbs(hif_dev); in ath9k_hif_usb_resume()