Lines Matching full:pipe
65 /* protects pipe->urb_list_head and pipe->urb_cnt */
79 struct ath6kl_usb_pipe *pipe; member
128 /* pipe/urb operations */
130 ath6kl_usb_alloc_urb_from_pipe(struct ath6kl_usb_pipe *pipe) in ath6kl_usb_alloc_urb_from_pipe() argument
135 /* bail if this pipe is not initialized */ in ath6kl_usb_alloc_urb_from_pipe()
136 if (!pipe->ar_usb) in ath6kl_usb_alloc_urb_from_pipe()
139 spin_lock_irqsave(&pipe->ar_usb->cs_lock, flags); in ath6kl_usb_alloc_urb_from_pipe()
140 if (!list_empty(&pipe->urb_list_head)) { in ath6kl_usb_alloc_urb_from_pipe()
142 list_first_entry(&pipe->urb_list_head, in ath6kl_usb_alloc_urb_from_pipe()
145 pipe->urb_cnt--; in ath6kl_usb_alloc_urb_from_pipe()
147 spin_unlock_irqrestore(&pipe->ar_usb->cs_lock, flags); in ath6kl_usb_alloc_urb_from_pipe()
152 static void ath6kl_usb_free_urb_to_pipe(struct ath6kl_usb_pipe *pipe, in ath6kl_usb_free_urb_to_pipe() argument
157 /* bail if this pipe is not initialized */ in ath6kl_usb_free_urb_to_pipe()
158 if (!pipe->ar_usb) in ath6kl_usb_free_urb_to_pipe()
161 spin_lock_irqsave(&pipe->ar_usb->cs_lock, flags); in ath6kl_usb_free_urb_to_pipe()
162 pipe->urb_cnt++; in ath6kl_usb_free_urb_to_pipe()
164 list_add(&urb_context->link, &pipe->urb_list_head); in ath6kl_usb_free_urb_to_pipe()
165 spin_unlock_irqrestore(&pipe->ar_usb->cs_lock, flags); in ath6kl_usb_free_urb_to_pipe()
173 ath6kl_usb_free_urb_to_pipe(urb_context->pipe, urb_context); in ath6kl_usb_cleanup_recv_urb()
181 /* pipe resource allocation/cleanup */
182 static int ath6kl_usb_alloc_pipe_resources(struct ath6kl_usb_pipe *pipe, in ath6kl_usb_alloc_pipe_resources() argument
188 INIT_LIST_HEAD(&pipe->urb_list_head); in ath6kl_usb_alloc_pipe_resources()
189 init_usb_anchor(&pipe->urb_submitted); in ath6kl_usb_alloc_pipe_resources()
199 urb_context->pipe = pipe; in ath6kl_usb_alloc_pipe_resources()
205 pipe->urb_alloc++; in ath6kl_usb_alloc_pipe_resources()
206 ath6kl_usb_free_urb_to_pipe(pipe, urb_context); in ath6kl_usb_alloc_pipe_resources()
211 pipe->logical_pipe_num, pipe->usb_pipe_handle, in ath6kl_usb_alloc_pipe_resources()
212 pipe->urb_alloc); in ath6kl_usb_alloc_pipe_resources()
218 static void ath6kl_usb_free_pipe_resources(struct ath6kl_usb_pipe *pipe) in ath6kl_usb_free_pipe_resources() argument
222 if (pipe->ar_usb == NULL) { in ath6kl_usb_free_pipe_resources()
223 /* nothing allocated for this pipe */ in ath6kl_usb_free_pipe_resources()
230 pipe->logical_pipe_num, pipe->usb_pipe_handle, in ath6kl_usb_free_pipe_resources()
231 pipe->urb_alloc, pipe->urb_cnt); in ath6kl_usb_free_pipe_resources()
233 if (pipe->urb_alloc != pipe->urb_cnt) { in ath6kl_usb_free_pipe_resources()
237 pipe->logical_pipe_num, pipe->usb_pipe_handle, in ath6kl_usb_free_pipe_resources()
238 pipe->urb_alloc, pipe->urb_cnt); in ath6kl_usb_free_pipe_resources()
242 urb_context = ath6kl_usb_alloc_urb_from_pipe(pipe); in ath6kl_usb_free_pipe_resources()
308 struct ath6kl_usb_pipe *pipe; in ath6kl_usb_setup_pipe_resources() local
352 pipe = &ar_usb->pipes[pipe_num]; in ath6kl_usb_setup_pipe_resources()
353 if (pipe->ar_usb != NULL) { in ath6kl_usb_setup_pipe_resources()
354 /* hmmm..pipe was already setup */ in ath6kl_usb_setup_pipe_resources()
358 pipe->ar_usb = ar_usb; in ath6kl_usb_setup_pipe_resources()
359 pipe->logical_pipe_num = pipe_num; in ath6kl_usb_setup_pipe_resources()
360 pipe->ep_address = endpoint->bEndpointAddress; in ath6kl_usb_setup_pipe_resources()
361 pipe->max_packet_size = le16_to_cpu(endpoint->wMaxPacketSize); in ath6kl_usb_setup_pipe_resources()
364 if (ATH6KL_USB_IS_DIR_IN(pipe->ep_address)) { in ath6kl_usb_setup_pipe_resources()
365 pipe->usb_pipe_handle = in ath6kl_usb_setup_pipe_resources()
367 pipe->ep_address); in ath6kl_usb_setup_pipe_resources()
369 pipe->usb_pipe_handle = in ath6kl_usb_setup_pipe_resources()
371 pipe->ep_address); in ath6kl_usb_setup_pipe_resources()
374 if (ATH6KL_USB_IS_DIR_IN(pipe->ep_address)) { in ath6kl_usb_setup_pipe_resources()
375 pipe->usb_pipe_handle = in ath6kl_usb_setup_pipe_resources()
377 pipe->ep_address); in ath6kl_usb_setup_pipe_resources()
379 pipe->usb_pipe_handle = in ath6kl_usb_setup_pipe_resources()
381 pipe->ep_address); in ath6kl_usb_setup_pipe_resources()
385 if (ATH6KL_USB_IS_DIR_IN(pipe->ep_address)) { in ath6kl_usb_setup_pipe_resources()
386 pipe->usb_pipe_handle = in ath6kl_usb_setup_pipe_resources()
388 pipe->ep_address); in ath6kl_usb_setup_pipe_resources()
390 pipe->usb_pipe_handle = in ath6kl_usb_setup_pipe_resources()
392 pipe->ep_address); in ath6kl_usb_setup_pipe_resources()
396 pipe->ep_desc = endpoint; in ath6kl_usb_setup_pipe_resources()
398 if (!ATH6KL_USB_IS_DIR_IN(pipe->ep_address)) in ath6kl_usb_setup_pipe_resources()
399 pipe->flags |= ATH6KL_USB_PIPE_FLAG_TX; in ath6kl_usb_setup_pipe_resources()
401 status = ath6kl_usb_alloc_pipe_resources(pipe, urbcount); in ath6kl_usb_setup_pipe_resources()
409 /* pipe operations */
482 * note: control pipe is no longer used in ath6kl_usb_start_recv_pipes()
500 struct ath6kl_usb_pipe *pipe = urb_context->pipe; in ath6kl_usb_recv_complete() local
505 "%s: recv pipe: %d, stat:%d, len:%d urb:0x%p\n", __func__, in ath6kl_usb_recv_complete()
506 pipe->logical_pipe_num, urb->status, urb->actual_length, in ath6kl_usb_recv_complete()
523 "%s recv pipe: %d (ep:0x%2.2X), failed:%d\n", in ath6kl_usb_recv_complete()
524 __func__, pipe->logical_pipe_num, in ath6kl_usb_recv_complete()
525 pipe->ep_address, urb->status); in ath6kl_usb_recv_complete()
541 skb_queue_tail(&pipe->io_comp_queue, skb); in ath6kl_usb_recv_complete()
542 schedule_work(&pipe->io_complete_work); in ath6kl_usb_recv_complete()
548 pipe->urb_cnt >= pipe->urb_cnt_thresh) { in ath6kl_usb_recv_complete()
550 ath6kl_usb_post_recv_transfers(pipe, ATH6KL_USB_RX_BUFFER_SIZE); in ath6kl_usb_recv_complete()
557 struct ath6kl_usb_pipe *pipe = urb_context->pipe; in ath6kl_usb_usb_transmit_complete() local
561 "%s: pipe: %d, stat:%d, len:%d\n", in ath6kl_usb_usb_transmit_complete()
562 __func__, pipe->logical_pipe_num, urb->status, in ath6kl_usb_usb_transmit_complete()
567 "%s: pipe: %d, failed:%d\n", in ath6kl_usb_usb_transmit_complete()
568 __func__, pipe->logical_pipe_num, urb->status); in ath6kl_usb_usb_transmit_complete()
573 ath6kl_usb_free_urb_to_pipe(urb_context->pipe, urb_context); in ath6kl_usb_usb_transmit_complete()
576 skb_queue_tail(&pipe->io_comp_queue, skb); in ath6kl_usb_usb_transmit_complete()
577 schedule_work(&pipe->io_complete_work); in ath6kl_usb_usb_transmit_complete()
582 struct ath6kl_usb_pipe *pipe = container_of(work, in ath6kl_usb_io_comp_work() local
588 ar_usb = pipe->ar_usb; in ath6kl_usb_io_comp_work()
590 while ((skb = skb_dequeue(&pipe->io_comp_queue))) { in ath6kl_usb_io_comp_work()
591 if (pipe->flags & ATH6KL_USB_PIPE_FLAG_TX) { in ath6kl_usb_io_comp_work()
599 pipe->logical_pipe_num); in ath6kl_usb_io_comp_work()
625 struct ath6kl_usb_pipe *pipe; in ath6kl_usb_create() local
639 pipe = &ar_usb->pipes[i]; in ath6kl_usb_create()
640 INIT_WORK(&pipe->io_complete_work, in ath6kl_usb_create()
642 skb_queue_head_init(&pipe->io_comp_queue); in ath6kl_usb_create()
684 /* exported hif usb APIs for htc pipe */
692 /* set the TX resource avail threshold for each TX pipe */ in hif_start()
704 struct ath6kl_usb_pipe *pipe = &device->pipes[PipeID]; in ath6kl_usb_send() local
711 ath6kl_dbg(ATH6KL_DBG_USB_BULK, "+%s pipe : %d, buf:0x%p\n", in ath6kl_usb_send()
714 urb_context = ath6kl_usb_alloc_urb_from_pipe(pipe); in ath6kl_usb_send()
719 * 2 endpoints map to the same pipe ID in ath6kl_usb_send()
722 "%s pipe:%d no urbs left. URB Cnt : %d\n", in ath6kl_usb_send()
723 __func__, PipeID, pipe->urb_cnt); in ath6kl_usb_send()
736 ath6kl_usb_free_urb_to_pipe(urb_context->pipe, in ath6kl_usb_send()
743 pipe->usb_pipe_handle, in ath6kl_usb_send()
748 if ((len % pipe->max_packet_size) == 0) { in ath6kl_usb_send()
749 /* hit a max packet boundary on this pipe */ in ath6kl_usb_send()
755 pipe->logical_pipe_num, pipe->usb_pipe_handle, in ath6kl_usb_send()
756 pipe->ep_address, len); in ath6kl_usb_send()
758 usb_anchor_urb(urb, &pipe->urb_submitted); in ath6kl_usb_send()
766 ath6kl_usb_free_urb_to_pipe(urb_context->pipe, in ath6kl_usb_send()
799 /* due to large control packets, shift to data pipe */ in ath6kl_usb_map_service_pipe()