Lines Matching defs:ar

131 static void carl9170_usb_submit_data_urb(struct ar9170 *ar)
136 if (atomic_inc_return(&ar->tx_anch_urbs) > AR9170_NUM_TX_URBS)
139 urb = usb_get_from_anchor(&ar->tx_wait);
143 usb_anchor_urb(urb, &ar->tx_anch);
148 dev_err(&ar->udev->dev, "tx submit failed (%d)\n",
153 usb_anchor_urb(urb, &ar->tx_err);
162 atomic_dec(&ar->tx_anch_urbs);
167 struct ar9170 *ar = usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
169 if (WARN_ON_ONCE(!ar)) {
174 atomic_dec(&ar->tx_anch_urbs);
179 carl9170_tx_callback(ar, (void *)urb->context);
192 usb_anchor_urb(urb, &ar->tx_err);
198 dev_err(&ar->udev->dev, "tx failed (%d)\n",
202 usb_anchor_urb(urb, &ar->tx_err);
206 if (likely(IS_STARTED(ar)))
207 carl9170_usb_submit_data_urb(ar);
210 static int carl9170_usb_submit_cmd_urb(struct ar9170 *ar)
215 if (atomic_inc_return(&ar->tx_cmd_urbs) != 1) {
216 atomic_dec(&ar->tx_cmd_urbs);
220 urb = usb_get_from_anchor(&ar->tx_cmd);
222 atomic_dec(&ar->tx_cmd_urbs);
226 usb_anchor_urb(urb, &ar->tx_anch);
230 atomic_dec(&ar->tx_cmd_urbs);
239 struct ar9170 *ar = urb->context;
242 if (WARN_ON_ONCE(!ar))
245 atomic_dec(&ar->tx_cmd_urbs);
264 if (!IS_INITIALIZED(ar))
268 dev_err(&ar->udev->dev, "submit cmd cb failed (%d).\n", err);
270 err = carl9170_usb_submit_cmd_urb(ar);
272 dev_err(&ar->udev->dev, "submit cmd failed (%d).\n", err);
277 struct ar9170 *ar = urb->context;
279 if (WARN_ON_ONCE(!ar))
298 carl9170_handle_command_response(ar, urb->transfer_buffer,
302 usb_anchor_urb(urb, &ar->rx_anch);
307 static int carl9170_usb_submit_rx_urb(struct ar9170 *ar, gfp_t gfp)
312 while ((atomic_read(&ar->rx_anch_urbs) < AR9170_NUM_RX_URBS) &&
315 urb = usb_get_from_anchor(&ar->rx_pool);
317 usb_anchor_urb(urb, &ar->rx_anch);
321 usb_anchor_urb(urb, &ar->rx_pool);
323 atomic_dec(&ar->rx_pool_urbs);
324 atomic_inc(&ar->rx_anch_urbs);
333 static void carl9170_usb_rx_work(struct ar9170 *ar)
339 urb = usb_get_from_anchor(&ar->rx_work);
343 atomic_dec(&ar->rx_work_urbs);
344 if (IS_INITIALIZED(ar)) {
345 carl9170_rx(ar, urb->transfer_buffer,
349 usb_anchor_urb(urb, &ar->rx_pool);
350 atomic_inc(&ar->rx_pool_urbs);
354 carl9170_usb_submit_rx_urb(ar, GFP_ATOMIC);
358 void carl9170_usb_handle_tx_err(struct ar9170 *ar)
362 while ((urb = usb_get_from_anchor(&ar->tx_err))) {
365 carl9170_tx_drop(ar, skb);
366 carl9170_tx_callback(ar, skb);
373 struct ar9170 *ar = (struct ar9170 *) data;
375 if (!IS_INITIALIZED(ar))
378 carl9170_usb_rx_work(ar);
385 if (IS_STARTED(ar))
386 carl9170_tx_scheduler(ar);
391 struct ar9170 *ar = (struct ar9170 *)urb->context;
394 if (WARN_ON_ONCE(!ar))
397 atomic_dec(&ar->rx_anch_urbs);
402 usb_anchor_urb(urb, &ar->rx_work);
403 atomic_inc(&ar->rx_work_urbs);
415 usb_anchor_urb(urb, &ar->rx_pool);
416 atomic_inc(&ar->rx_pool_urbs);
420 err = carl9170_usb_submit_rx_urb(ar, GFP_ATOMIC);
428 tasklet_hi_schedule(&ar->usb_tasklet);
430 if (atomic_read(&ar->rx_anch_urbs) == 0) {
439 ieee80211_queue_work(ar->hw, &ar->ping_work);
446 tasklet_hi_schedule(&ar->usb_tasklet);
450 static struct urb *carl9170_usb_alloc_rx_urb(struct ar9170 *ar, gfp_t gfp)
455 buf = kmalloc(ar->fw.rx_size, gfp);
465 usb_fill_bulk_urb(urb, ar->udev, usb_rcvbulkpipe(ar->udev,
466 AR9170_USB_EP_RX), buf, ar->fw.rx_size,
467 carl9170_usb_rx_complete, ar);
474 static int carl9170_usb_send_rx_irq_urb(struct ar9170 *ar)
488 usb_fill_int_urb(urb, ar->udev, usb_rcvintpipe(ar->udev,
490 carl9170_usb_rx_irq_complete, ar, 1);
494 usb_anchor_urb(urb, &ar->rx_anch);
504 static int carl9170_usb_init_rx_bulk_urbs(struct ar9170 *ar)
520 urb = carl9170_usb_alloc_rx_urb(ar, GFP_KERNEL);
526 usb_anchor_urb(urb, &ar->rx_pool);
527 atomic_inc(&ar->rx_pool_urbs);
531 err = carl9170_usb_submit_rx_urb(ar, GFP_KERNEL);
536 carl9170_set_state_when(ar, CARL9170_STOPPED, CARL9170_IDLE);
541 usb_scuttle_anchored_urbs(&ar->rx_pool);
542 usb_scuttle_anchored_urbs(&ar->rx_work);
543 usb_kill_anchored_urbs(&ar->rx_anch);
547 static int carl9170_usb_flush(struct ar9170 *ar)
552 while ((urb = usb_get_from_anchor(&ar->tx_wait))) {
554 carl9170_tx_drop(ar, skb);
555 carl9170_tx_callback(ar, skb);
559 ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, 1000);
564 ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, 1000);
568 usb_kill_anchored_urbs(&ar->tx_anch);
569 carl9170_usb_handle_tx_err(ar);
574 static void carl9170_usb_cancel_urbs(struct ar9170 *ar)
578 carl9170_set_state(ar, CARL9170_UNKNOWN_STATE);
580 err = carl9170_usb_flush(ar);
582 dev_err(&ar->udev->dev, "stuck tx urbs!\n");
584 usb_poison_anchored_urbs(&ar->tx_anch);
585 carl9170_usb_handle_tx_err(ar);
586 usb_poison_anchored_urbs(&ar->rx_anch);
588 tasklet_kill(&ar->usb_tasklet);
590 usb_scuttle_anchored_urbs(&ar->rx_work);
591 usb_scuttle_anchored_urbs(&ar->rx_pool);
592 usb_scuttle_anchored_urbs(&ar->tx_cmd);
595 int __carl9170_exec_cmd(struct ar9170 *ar, struct carl9170_cmd *cmd,
601 if (!IS_INITIALIZED(ar)) {
617 usb_fill_int_urb(urb, ar->udev, usb_sndintpipe(ar->udev,
619 carl9170_usb_cmd_complete, ar, 1);
624 usb_anchor_urb(urb, &ar->tx_cmd);
627 return carl9170_usb_submit_cmd_urb(ar);
636 int carl9170_exec_cmd(struct ar9170 *ar, const enum carl9170_cmd_oids cmd,
641 if (!IS_ACCEPTING_CMD(ar))
647 ar->cmd.hdr.len = plen;
648 ar->cmd.hdr.cmd = cmd;
650 if (plen && payload != (u8 *)(ar->cmd.data))
651 memcpy(ar->cmd.data, payload, plen);
653 spin_lock_bh(&ar->cmd_lock);
654 ar->readbuf = (u8 *)out;
655 ar->readlen = outlen;
656 spin_unlock_bh(&ar->cmd_lock);
658 err = __carl9170_exec_cmd(ar, &ar->cmd, false);
661 err = wait_for_completion_timeout(&ar->cmd_wait, HZ);
667 if (ar->readlen != outlen) {
677 if (IS_STARTED(ar)) {
678 dev_err(&ar->udev->dev, "no command feedback "
683 &ar->cmd, plen + 4);
685 carl9170_restart(ar, CARL9170_RR_COMMAND_TIMEOUT);
689 spin_lock_bh(&ar->cmd_lock);
690 ar->readbuf = NULL;
691 ar->readlen = 0;
692 spin_unlock_bh(&ar->cmd_lock);
697 void carl9170_usb_tx(struct ar9170 *ar, struct sk_buff *skb)
704 if (!IS_STARTED(ar))
711 if (ar->fw.tx_stream) {
723 usb_fill_bulk_urb(urb, ar->udev, usb_sndbulkpipe(ar->udev,
729 usb_anchor_urb(urb, &ar->tx_wait);
733 carl9170_usb_submit_data_urb(ar);
737 carl9170_tx_drop(ar, skb);
738 carl9170_tx_callback(ar, skb);
741 static void carl9170_release_firmware(struct ar9170 *ar)
743 if (ar->fw.fw) {
744 release_firmware(ar->fw.fw);
745 memset(&ar->fw, 0, sizeof(ar->fw));
749 void carl9170_usb_stop(struct ar9170 *ar)
753 carl9170_set_state_when(ar, CARL9170_IDLE, CARL9170_STOPPED);
755 ret = carl9170_usb_flush(ar);
757 dev_err(&ar->udev->dev, "kill pending tx urbs.\n");
759 usb_poison_anchored_urbs(&ar->tx_anch);
760 carl9170_usb_handle_tx_err(ar);
763 spin_lock_bh(&ar->cmd_lock);
764 ar->readlen = 0;
765 spin_unlock_bh(&ar->cmd_lock);
766 complete_all(&ar->cmd_wait);
769 INIT_COMPLETION(ar->cmd_wait);
778 int carl9170_usb_open(struct ar9170 *ar)
780 usb_unpoison_anchored_urbs(&ar->tx_anch);
782 carl9170_set_state_when(ar, CARL9170_STOPPED, CARL9170_IDLE);
786 static int carl9170_usb_load_firmware(struct ar9170 *ar)
801 data = ar->fw.fw->data;
802 len = ar->fw.fw->size;
803 addr = ar->fw.address;
806 data += ar->fw.offset;
807 len -= ar->fw.offset;
813 err = usb_control_msg(ar->udev, usb_sndctrlpipe(ar->udev, 0),
828 err = usb_control_msg(ar->udev, usb_sndctrlpipe(ar->udev, 0),
832 if (wait_for_completion_timeout(&ar->fw_boot_wait, HZ) == 0) {
837 err = carl9170_echo_test(ar, 0x4a110123);
842 ar->cmd_seq = -1;
847 dev_err(&ar->udev->dev, "firmware upload failed (%d).\n", err);
851 int carl9170_usb_restart(struct ar9170 *ar)
855 if (ar->intf->condition != USB_INTERFACE_BOUND)
864 ar->cmd_seq = -2;
866 err = carl9170_reboot(ar);
868 carl9170_usb_stop(ar);
873 tasklet_schedule(&ar->usb_tasklet);
878 err = carl9170_usb_open(ar);
882 err = carl9170_usb_load_firmware(ar);
889 carl9170_usb_cancel_urbs(ar);
893 void carl9170_usb_reset(struct ar9170 *ar)
904 carl9170_usb_cancel_urbs(ar);
906 carl9170_usb_stop(ar);
908 usb_queue_reset_device(ar->intf);
911 static int carl9170_usb_init_device(struct ar9170 *ar)
922 ar->cmd_seq = -2;
924 err = carl9170_usb_send_rx_irq_urb(ar);
928 err = carl9170_usb_init_rx_bulk_urbs(ar);
932 err = carl9170_usb_open(ar);
936 mutex_lock(&ar->mutex);
937 err = carl9170_usb_load_firmware(ar);
938 mutex_unlock(&ar->mutex);
945 carl9170_usb_stop(ar);
948 carl9170_usb_cancel_urbs(ar);
954 static void carl9170_usb_firmware_failed(struct ar9170 *ar)
956 struct device *parent = ar->udev->dev.parent;
963 * driver context (ar).
965 udev = ar->udev;
967 complete(&ar->fw_load_wait);
980 static void carl9170_usb_firmware_finish(struct ar9170 *ar)
984 err = carl9170_parse_firmware(ar);
988 err = carl9170_usb_init_device(ar);
992 err = carl9170_register(ar);
994 carl9170_usb_stop(ar);
998 complete(&ar->fw_load_wait);
999 usb_put_dev(ar->udev);
1003 carl9170_usb_cancel_urbs(ar);
1006 carl9170_release_firmware(ar);
1007 carl9170_usb_firmware_failed(ar);
1013 struct ar9170 *ar = context;
1016 ar->fw.fw = fw;
1017 carl9170_usb_firmware_finish(ar);
1021 dev_err(&ar->udev->dev, "firmware not found.\n");
1022 carl9170_usb_firmware_failed(ar);
1028 struct ar9170 *ar;
1036 ar = carl9170_alloc(sizeof(*ar));
1037 if (IS_ERR(ar))
1038 return PTR_ERR(ar);
1042 ar->udev = udev;
1043 ar->intf = intf;
1044 ar->features = id->driver_info;
1046 usb_set_intfdata(intf, ar);
1047 SET_IEEE80211_DEV(ar->hw, &intf->dev);
1049 init_usb_anchor(&ar->rx_anch);
1050 init_usb_anchor(&ar->rx_pool);
1051 init_usb_anchor(&ar->rx_work);
1052 init_usb_anchor(&ar->tx_wait);
1053 init_usb_anchor(&ar->tx_anch);
1054 init_usb_anchor(&ar->tx_cmd);
1055 init_usb_anchor(&ar->tx_err);
1056 init_completion(&ar->cmd_wait);
1057 init_completion(&ar->fw_boot_wait);
1058 init_completion(&ar->fw_load_wait);
1059 tasklet_init(&ar->usb_tasklet, carl9170_usb_tasklet,
1060 (unsigned long)ar);
1062 atomic_set(&ar->tx_cmd_urbs, 0);
1063 atomic_set(&ar->tx_anch_urbs, 0);
1064 atomic_set(&ar->rx_work_urbs, 0);
1065 atomic_set(&ar->rx_anch_urbs, 0);
1066 atomic_set(&ar->rx_pool_urbs, 0);
1068 usb_get_dev(ar->udev);
1070 carl9170_set_state(ar, CARL9170_STOPPED);
1073 &ar->udev->dev, GFP_KERNEL, ar, carl9170_usb_firmware_step2);
1078 struct ar9170 *ar = usb_get_intfdata(intf);
1081 if (WARN_ON(!ar))
1084 udev = ar->udev;
1085 wait_for_completion(&ar->fw_load_wait);
1087 if (IS_INITIALIZED(ar)) {
1088 carl9170_reboot(ar);
1089 carl9170_usb_stop(ar);
1092 carl9170_usb_cancel_urbs(ar);
1093 carl9170_unregister(ar);
1097 carl9170_release_firmware(ar);
1098 carl9170_free(ar);
1106 struct ar9170 *ar = usb_get_intfdata(intf);
1108 if (!ar)
1111 carl9170_usb_cancel_urbs(ar);
1118 struct ar9170 *ar = usb_get_intfdata(intf);
1121 if (!ar)
1124 usb_unpoison_anchored_urbs(&ar->rx_anch);
1125 carl9170_set_state(ar, CARL9170_STOPPED);
1138 err = carl9170_usb_init_device(ar);
1145 carl9170_usb_cancel_urbs(ar);