Lines Matching full:pipe

34 /* pipe/urb operations */
36 ath10k_usb_alloc_urb_from_pipe(struct ath10k_usb_pipe *pipe) in ath10k_usb_alloc_urb_from_pipe() argument
41 /* bail if this pipe is not initialized */ in ath10k_usb_alloc_urb_from_pipe()
42 if (!pipe->ar_usb) in ath10k_usb_alloc_urb_from_pipe()
45 spin_lock_irqsave(&pipe->ar_usb->cs_lock, flags); in ath10k_usb_alloc_urb_from_pipe()
46 if (!list_empty(&pipe->urb_list_head)) { in ath10k_usb_alloc_urb_from_pipe()
47 urb_context = list_first_entry(&pipe->urb_list_head, in ath10k_usb_alloc_urb_from_pipe()
50 pipe->urb_cnt--; in ath10k_usb_alloc_urb_from_pipe()
52 spin_unlock_irqrestore(&pipe->ar_usb->cs_lock, flags); in ath10k_usb_alloc_urb_from_pipe()
57 static void ath10k_usb_free_urb_to_pipe(struct ath10k_usb_pipe *pipe, in ath10k_usb_free_urb_to_pipe() argument
62 /* bail if this pipe is not initialized */ in ath10k_usb_free_urb_to_pipe()
63 if (!pipe->ar_usb) in ath10k_usb_free_urb_to_pipe()
66 spin_lock_irqsave(&pipe->ar_usb->cs_lock, flags); in ath10k_usb_free_urb_to_pipe()
68 pipe->urb_cnt++; in ath10k_usb_free_urb_to_pipe()
69 list_add(&urb_context->link, &pipe->urb_list_head); in ath10k_usb_free_urb_to_pipe()
71 spin_unlock_irqrestore(&pipe->ar_usb->cs_lock, flags); in ath10k_usb_free_urb_to_pipe()
79 ath10k_usb_free_urb_to_pipe(urb_context->pipe, urb_context); in ath10k_usb_cleanup_recv_urb()
83 struct ath10k_usb_pipe *pipe) in ath10k_usb_free_pipe_resources() argument
87 if (!pipe->ar_usb) { in ath10k_usb_free_pipe_resources()
88 /* nothing allocated for this pipe */ in ath10k_usb_free_pipe_resources()
94 pipe->logical_pipe_num, pipe->usb_pipe_handle, in ath10k_usb_free_pipe_resources()
95 pipe->urb_alloc, pipe->urb_cnt); in ath10k_usb_free_pipe_resources()
97 if (pipe->urb_alloc != pipe->urb_cnt) { in ath10k_usb_free_pipe_resources()
100 pipe->logical_pipe_num, pipe->usb_pipe_handle, in ath10k_usb_free_pipe_resources()
101 pipe->urb_alloc, pipe->urb_cnt); in ath10k_usb_free_pipe_resources()
105 urb_context = ath10k_usb_alloc_urb_from_pipe(pipe); in ath10k_usb_free_pipe_resources()
128 struct ath10k_usb_pipe *pipe = urb_context->pipe; in ath10k_usb_recv_complete() local
129 struct ath10k *ar = pipe->ar_usb->ar; in ath10k_usb_recv_complete()
134 "usb recv pipe %d stat %d len %d urb 0x%pK\n", in ath10k_usb_recv_complete()
135 pipe->logical_pipe_num, urb->status, urb->actual_length, in ath10k_usb_recv_complete()
151 "usb recv pipe %d ep 0x%2.2x failed: %d\n", in ath10k_usb_recv_complete()
152 pipe->logical_pipe_num, in ath10k_usb_recv_complete()
153 pipe->ep_address, urb->status); in ath10k_usb_recv_complete()
169 skb_queue_tail(&pipe->io_comp_queue, skb); in ath10k_usb_recv_complete()
170 schedule_work(&pipe->io_complete_work); in ath10k_usb_recv_complete()
176 pipe->urb_cnt >= pipe->urb_cnt_thresh) { in ath10k_usb_recv_complete()
178 ath10k_usb_post_recv_transfers(ar, pipe); in ath10k_usb_recv_complete()
185 struct ath10k_usb_pipe *pipe = urb_context->pipe; in ath10k_usb_transmit_complete() local
186 struct ath10k *ar = pipe->ar_usb->ar; in ath10k_usb_transmit_complete()
191 "pipe: %d, failed:%d\n", in ath10k_usb_transmit_complete()
192 pipe->logical_pipe_num, urb->status); in ath10k_usb_transmit_complete()
197 ath10k_usb_free_urb_to_pipe(urb_context->pipe, urb_context); in ath10k_usb_transmit_complete()
200 skb_queue_tail(&pipe->io_comp_queue, skb); in ath10k_usb_transmit_complete()
201 schedule_work(&pipe->io_complete_work); in ath10k_usb_transmit_complete()
204 /* pipe operations */
362 struct ath10k_usb_pipe *pipe = container_of(work, in ath10k_usb_io_comp_work() local
365 struct ath10k *ar = pipe->ar_usb->ar; in ath10k_usb_io_comp_work()
368 while ((skb = skb_dequeue(&pipe->io_comp_queue))) { in ath10k_usb_io_comp_work()
369 if (pipe->flags & ATH10K_USB_PIPE_FLAG_TX) in ath10k_usb_io_comp_work()
399 /* set the TX resource avail threshold for each TX pipe */ in ath10k_usb_hif_start()
413 struct ath10k_usb_pipe *pipe = &ar_usb->pipes[pipe_id]; in ath10k_usb_hif_tx_sg() local
420 urb_context = ath10k_usb_alloc_urb_from_pipe(pipe); in ath10k_usb_hif_tx_sg()
437 pipe->usb_pipe_handle, in ath10k_usb_hif_tx_sg()
442 if (!(skb->len % pipe->max_packet_size)) { in ath10k_usb_hif_tx_sg()
443 /* hit a max packet boundary on this pipe */ in ath10k_usb_hif_tx_sg()
447 usb_anchor_urb(urb, &pipe->urb_submitted); in ath10k_usb_hif_tx_sg()
464 ath10k_usb_free_urb_to_pipe(urb_context->pipe, urb_context); in ath10k_usb_hif_tx_sg()
687 /* due to large control packets, shift to data pipe */ in ath10k_usb_hif_map_service_to_pipe()
792 struct ath10k_usb_pipe *pipe, in ath10k_usb_alloc_pipe_resources() argument
798 INIT_LIST_HEAD(&pipe->urb_list_head); in ath10k_usb_alloc_pipe_resources()
799 init_usb_anchor(&pipe->urb_submitted); in ath10k_usb_alloc_pipe_resources()
806 urb_context->pipe = pipe; in ath10k_usb_alloc_pipe_resources()
811 pipe->urb_alloc++; in ath10k_usb_alloc_pipe_resources()
812 ath10k_usb_free_urb_to_pipe(pipe, urb_context); in ath10k_usb_alloc_pipe_resources()
817 pipe->logical_pipe_num, pipe->usb_pipe_handle, in ath10k_usb_alloc_pipe_resources()
818 pipe->urb_alloc); in ath10k_usb_alloc_pipe_resources()
829 struct ath10k_usb_pipe *pipe; in ath10k_usb_setup_pipe_resources() local
877 pipe = &ar_usb->pipes[pipe_num]; in ath10k_usb_setup_pipe_resources()
878 if (pipe->ar_usb) in ath10k_usb_setup_pipe_resources()
879 /* hmmm..pipe was already setup */ in ath10k_usb_setup_pipe_resources()
882 pipe->ar_usb = ar_usb; in ath10k_usb_setup_pipe_resources()
883 pipe->logical_pipe_num = pipe_num; in ath10k_usb_setup_pipe_resources()
884 pipe->ep_address = endpoint->bEndpointAddress; in ath10k_usb_setup_pipe_resources()
885 pipe->max_packet_size = le16_to_cpu(endpoint->wMaxPacketSize); in ath10k_usb_setup_pipe_resources()
888 if (ATH10K_USB_IS_DIR_IN(pipe->ep_address)) { in ath10k_usb_setup_pipe_resources()
889 pipe->usb_pipe_handle = in ath10k_usb_setup_pipe_resources()
891 pipe->ep_address); in ath10k_usb_setup_pipe_resources()
893 pipe->usb_pipe_handle = in ath10k_usb_setup_pipe_resources()
895 pipe->ep_address); in ath10k_usb_setup_pipe_resources()
898 if (ATH10K_USB_IS_DIR_IN(pipe->ep_address)) { in ath10k_usb_setup_pipe_resources()
899 pipe->usb_pipe_handle = in ath10k_usb_setup_pipe_resources()
901 pipe->ep_address); in ath10k_usb_setup_pipe_resources()
903 pipe->usb_pipe_handle = in ath10k_usb_setup_pipe_resources()
905 pipe->ep_address); in ath10k_usb_setup_pipe_resources()
909 if (ATH10K_USB_IS_DIR_IN(pipe->ep_address)) { in ath10k_usb_setup_pipe_resources()
910 pipe->usb_pipe_handle = in ath10k_usb_setup_pipe_resources()
912 pipe->ep_address); in ath10k_usb_setup_pipe_resources()
914 pipe->usb_pipe_handle = in ath10k_usb_setup_pipe_resources()
916 pipe->ep_address); in ath10k_usb_setup_pipe_resources()
920 pipe->ep_desc = endpoint; in ath10k_usb_setup_pipe_resources()
922 if (!ATH10K_USB_IS_DIR_IN(pipe->ep_address)) in ath10k_usb_setup_pipe_resources()
923 pipe->flags |= ATH10K_USB_PIPE_FLAG_TX; in ath10k_usb_setup_pipe_resources()
925 ret = ath10k_usb_alloc_pipe_resources(ar, pipe, urbcount); in ath10k_usb_setup_pipe_resources()
938 struct ath10k_usb_pipe *pipe; in ath10k_usb_create() local
947 pipe = &ar_usb->pipes[i]; in ath10k_usb_create()
948 INIT_WORK(&pipe->io_complete_work, in ath10k_usb_create()
950 skb_queue_head_init(&pipe->io_comp_queue); in ath10k_usb_create()