• Home
  • Raw
  • Download

Lines Matching refs:pipe

26 #define usbhsf_fifo_is_busy(f)	((f)->pipe) /* see usbhs_pipe_select_fifo */
41 struct usbhs_priv *priv = usbhs_pipe_to_priv(pkt->pipe); in usbhsf_null_handle()
54 void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt, in usbhs_pkt_push() argument
59 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_pkt_push()
71 if (!pipe->handler) { in usbhs_pkt_push()
73 pipe->handler = &usbhsf_null_handler; in usbhs_pkt_push()
76 list_move_tail(&pkt->node, &pipe->list); in usbhs_pkt_push()
83 pkt->pipe = pipe; in usbhs_pkt_push()
85 pkt->handler = pipe->handler; in usbhs_pkt_push()
101 struct usbhs_pkt *__usbhsf_pkt_get(struct usbhs_pipe *pipe) in __usbhsf_pkt_get() argument
103 return list_first_entry_or_null(&pipe->list, struct usbhs_pkt, node); in __usbhsf_pkt_get()
106 static void usbhsf_fifo_clear(struct usbhs_pipe *pipe,
108 static void usbhsf_fifo_unselect(struct usbhs_pipe *pipe,
115 struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt) in usbhs_pkt_pop() argument
117 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_pkt_pop()
118 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in usbhs_pkt_pop()
124 usbhs_pipe_disable(pipe); in usbhs_pkt_pop()
127 pkt = __usbhsf_pkt_get(pipe); in usbhs_pkt_pop()
136 usbhsf_fifo_clear(pipe, fifo); in usbhs_pkt_pop()
144 usbhsf_fifo_unselect(pipe, fifo); in usbhs_pkt_pop()
158 static int usbhsf_pkt_handler(struct usbhs_pipe *pipe, int type) in usbhsf_pkt_handler() argument
160 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_pkt_handler()
171 pkt = __usbhsf_pkt_get(pipe); in usbhsf_pkt_handler()
202 usbhs_pkt_start(pipe); in usbhsf_pkt_handler()
208 void usbhs_pkt_start(struct usbhs_pipe *pipe) in usbhs_pkt_start() argument
210 usbhsf_pkt_handler(pipe, USBHSF_PKT_PREPARE); in usbhs_pkt_start()
218 #define usbhsf_irq_callback_ctrl(pipe, status, enable) \ argument
220 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); \
222 u16 status = (1 << usbhs_pipe_number(pipe)); \
232 static void usbhsf_tx_irq_ctrl(struct usbhs_pipe *pipe, int enable) in usbhsf_tx_irq_ctrl() argument
243 if (usbhs_pipe_is_dcp(pipe)) in usbhsf_tx_irq_ctrl()
244 usbhsf_irq_empty_ctrl(pipe, enable); in usbhsf_tx_irq_ctrl()
246 usbhsf_irq_ready_ctrl(pipe, enable); in usbhsf_tx_irq_ctrl()
249 static void usbhsf_rx_irq_ctrl(struct usbhs_pipe *pipe, int enable) in usbhsf_rx_irq_ctrl() argument
251 usbhsf_irq_ready_ctrl(pipe, enable); in usbhsf_rx_irq_ctrl()
257 static void usbhsf_send_terminator(struct usbhs_pipe *pipe, in usbhsf_send_terminator() argument
260 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_send_terminator()
281 static void usbhsf_fifo_clear(struct usbhs_pipe *pipe, in usbhsf_fifo_clear() argument
284 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_fifo_clear()
287 if (!usbhs_pipe_is_dcp(pipe)) { in usbhsf_fifo_clear()
293 if (usbhs_pipe_is_dir_in(pipe)) in usbhsf_fifo_clear()
294 ret = usbhs_pipe_is_accessible(pipe); in usbhsf_fifo_clear()
313 static void usbhsf_fifo_unselect(struct usbhs_pipe *pipe, in usbhsf_fifo_unselect() argument
316 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_fifo_unselect()
318 usbhs_pipe_select_fifo(pipe, NULL); in usbhsf_fifo_unselect()
322 static int usbhsf_fifo_select(struct usbhs_pipe *pipe, in usbhsf_fifo_select() argument
326 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_fifo_select()
330 u16 base = usbhs_pipe_number(pipe); /* CURPIPE */ in usbhsf_fifo_select()
332 if (usbhs_pipe_is_busy(pipe) || in usbhsf_fifo_select()
336 if (usbhs_pipe_is_dcp(pipe)) { in usbhsf_fifo_select()
340 usbhs_dcp_dir_for_host(pipe, write); in usbhsf_fifo_select()
352 usbhs_pipe_select_fifo(pipe, fifo); in usbhsf_fifo_select()
368 struct usbhs_pipe *pipe = pkt->pipe; in usbhs_dcp_dir_switch_to_write() local
369 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_dcp_dir_switch_to_write()
374 usbhs_pipe_disable(pipe); in usbhs_dcp_dir_switch_to_write()
376 ret = usbhsf_fifo_select(pipe, fifo, 1); in usbhs_dcp_dir_switch_to_write()
382 usbhs_pipe_sequence_data1(pipe); /* DATA1 */ in usbhs_dcp_dir_switch_to_write()
384 usbhsf_fifo_clear(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
385 usbhsf_send_terminator(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
387 usbhsf_fifo_unselect(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
389 usbhsf_tx_irq_ctrl(pipe, 1); in usbhs_dcp_dir_switch_to_write()
390 usbhs_pipe_enable(pipe); in usbhs_dcp_dir_switch_to_write()
397 struct usbhs_pipe *pipe = pkt->pipe; in usbhs_dcp_dir_switch_to_read() local
398 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_dcp_dir_switch_to_read()
403 usbhs_pipe_disable(pipe); in usbhs_dcp_dir_switch_to_read()
405 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhs_dcp_dir_switch_to_read()
411 usbhs_pipe_sequence_data1(pipe); /* DATA1 */ in usbhs_dcp_dir_switch_to_read()
412 usbhsf_fifo_clear(pipe, fifo); in usbhs_dcp_dir_switch_to_read()
414 usbhsf_fifo_unselect(pipe, fifo); in usbhs_dcp_dir_switch_to_read()
416 usbhsf_rx_irq_ctrl(pipe, 1); in usbhs_dcp_dir_switch_to_read()
417 usbhs_pipe_enable(pipe); in usbhs_dcp_dir_switch_to_read()
425 struct usbhs_pipe *pipe = pkt->pipe; in usbhs_dcp_dir_switch_done() local
428 usbhsf_tx_irq_ctrl(pipe, 0); in usbhs_dcp_dir_switch_done()
430 usbhsf_rx_irq_ctrl(pipe, 0); in usbhs_dcp_dir_switch_done()
453 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dcp_data_stage_try_push() local
455 usbhs_pipe_sequence_data1(pipe); /* DATA1 */ in usbhsf_dcp_data_stage_try_push()
475 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dcp_data_stage_prepare_pop() local
476 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dcp_data_stage_prepare_pop()
479 if (usbhs_pipe_is_busy(pipe)) in usbhsf_dcp_data_stage_prepare_pop()
488 usbhs_pipe_disable(pipe); in usbhsf_dcp_data_stage_prepare_pop()
490 usbhs_pipe_sequence_data1(pipe); /* DATA1 */ in usbhsf_dcp_data_stage_prepare_pop()
492 usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dcp_data_stage_prepare_pop()
493 usbhsf_fifo_clear(pipe, fifo); in usbhsf_dcp_data_stage_prepare_pop()
494 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dcp_data_stage_prepare_pop()
513 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_pio_try_push() local
514 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_pio_try_push()
519 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhsf_pio_try_push()
524 usbhs_pipe_data_sequence(pipe, pkt->sequence); in usbhsf_pio_try_push()
527 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->length); in usbhsf_pio_try_push()
529 ret = usbhsf_fifo_select(pipe, fifo, 1); in usbhsf_pio_try_push()
533 ret = usbhs_pipe_is_accessible(pipe); in usbhsf_pio_try_push()
581 usbhsf_send_terminator(pipe, fifo); in usbhsf_pio_try_push()
583 usbhsf_tx_irq_ctrl(pipe, !*is_done); in usbhsf_pio_try_push()
584 usbhs_pipe_running(pipe, !*is_done); in usbhsf_pio_try_push()
585 usbhs_pipe_enable(pipe); in usbhsf_pio_try_push()
588 usbhs_pipe_number(pipe), in usbhsf_pio_try_push()
591 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_push()
596 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_push()
602 usbhsf_tx_irq_ctrl(pipe, 1); in usbhsf_pio_try_push()
603 usbhs_pipe_running(pipe, 1); in usbhsf_pio_try_push()
610 if (usbhs_pipe_is_running(pkt->pipe)) in usbhsf_pio_prepare_push()
626 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_prepare_pop() local
627 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_prepare_pop()
630 if (usbhs_pipe_is_busy(pipe)) in usbhsf_prepare_pop()
633 if (usbhs_pipe_is_running(pipe)) in usbhsf_prepare_pop()
639 usbhs_pipe_data_sequence(pipe, pkt->sequence); in usbhsf_prepare_pop()
642 if (usbhs_pipe_is_dcp(pipe)) in usbhsf_prepare_pop()
643 usbhsf_fifo_clear(pipe, fifo); in usbhsf_prepare_pop()
645 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->length); in usbhsf_prepare_pop()
646 usbhs_pipe_enable(pipe); in usbhsf_prepare_pop()
647 usbhs_pipe_running(pipe, 1); in usbhsf_prepare_pop()
648 usbhsf_rx_irq_ctrl(pipe, 1); in usbhsf_prepare_pop()
655 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_pio_try_pop() local
656 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_pio_try_pop()
662 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhsf_pio_try_pop()
667 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_pio_try_pop()
692 usbhsf_rx_irq_ctrl(pipe, 0); in usbhsf_pio_try_pop()
693 usbhs_pipe_running(pipe, 0); in usbhsf_pio_try_pop()
700 if (!usbhs_mod_is_host(priv) && !usbhs_pipe_is_dcp(pipe)) in usbhsf_pio_try_pop()
701 usbhs_pipe_disable(pipe); /* disable pipe first */ in usbhsf_pio_try_pop()
712 usbhsf_fifo_clear(pipe, fifo); in usbhsf_pio_try_pop()
737 usbhs_pipe_number(pipe), in usbhsf_pio_try_pop()
741 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_pop()
756 usbhs_dcp_control_transfer_done(pkt->pipe); in usbhsf_ctrl_stage_end()
800 static void __usbhsf_dma_ctrl(struct usbhs_pipe *pipe, in __usbhsf_dma_ctrl() argument
804 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in __usbhsf_dma_ctrl()
811 struct usbhs_pipe *pipe = pkt->pipe; in __usbhsf_dma_map_ctrl() local
812 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in __usbhsf_dma_map_ctrl()
814 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in __usbhsf_dma_map_ctrl()
823 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_xfer_preparing() local
825 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_xfer_preparing()
831 fifo = usbhs_pipe_to_fifo(pipe); in usbhsf_dma_xfer_preparing()
836 dir = usbhs_pipe_is_dir_in(pipe) ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV; in usbhsf_dma_xfer_preparing()
845 desc->callback_param = pipe; in usbhsf_dma_xfer_preparing()
854 fifo->name, usbhs_pipe_number(pipe), pkt->length, pkt->zero); in usbhsf_dma_xfer_preparing()
856 usbhs_pipe_running(pipe, 1); in usbhsf_dma_xfer_preparing()
857 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->trans); in usbhsf_dma_xfer_preparing()
859 usbhsf_dma_start(pipe, fifo); in usbhsf_dma_xfer_preparing()
860 usbhs_pipe_enable(pipe); in usbhsf_dma_xfer_preparing()
866 struct usbhs_pipe *pipe = pkt->pipe; in xfer_work() local
867 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in xfer_work()
880 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_prepare_push() local
881 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_prepare_push()
887 if (usbhs_pipe_is_busy(pipe)) in usbhsf_dma_prepare_push()
892 usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_ISOC)) in usbhsf_dma_prepare_push()
906 if (usbhs_pipe_is_running(pipe)) in usbhsf_dma_prepare_push()
914 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_prepare_push()
923 usbhsf_tx_irq_ctrl(pipe, 0); in usbhsf_dma_prepare_push()
935 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_prepare_push()
947 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_push_done() local
948 int is_short = pkt->trans % usbhs_pipe_get_maxpacket(pipe); in usbhsf_dma_push_done()
959 usbhs_pipe_running(pipe, !*is_done); in usbhsf_dma_push_done()
961 usbhsf_dma_stop(pipe, pipe->fifo); in usbhsf_dma_push_done()
963 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_push_done()
992 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_prepare_pop_with_usb_dmac() local
993 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_prepare_pop_with_usb_dmac()
997 if (usbhs_pipe_is_busy(pipe)) in usbhsf_dma_prepare_pop_with_usb_dmac()
1002 usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_ISOC)) in usbhsf_dma_prepare_pop_with_usb_dmac()
1013 if (usbhs_pipe_is_running(pipe)) in usbhsf_dma_prepare_pop_with_usb_dmac()
1016 usbhs_pipe_config_change_bfre(pipe, 1); in usbhsf_dma_prepare_pop_with_usb_dmac()
1018 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_prepare_pop_with_usb_dmac()
1032 usbhsf_rx_irq_ctrl(pipe, 0); in usbhsf_dma_prepare_pop_with_usb_dmac()
1041 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_prepare_pop_with_usb_dmac()
1048 usbhs_pipe_config_change_bfre(pipe, 0); in usbhsf_dma_prepare_pop_with_usb_dmac()
1055 struct usbhs_priv *priv = usbhs_pipe_to_priv(pkt->pipe); in usbhsf_dma_prepare_pop()
1065 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_try_pop_with_rx_irq() local
1066 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_try_pop_with_rx_irq()
1070 if (usbhs_pipe_is_busy(pipe)) in usbhsf_dma_try_pop_with_rx_irq()
1073 if (usbhs_pipe_is_dcp(pipe)) in usbhsf_dma_try_pop_with_rx_irq()
1084 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_try_pop_with_rx_irq()
1111 usbhsf_rx_irq_ctrl(pipe, 0); in usbhsf_dma_try_pop_with_rx_irq()
1121 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_try_pop_with_rx_irq()
1134 struct usbhs_priv *priv = usbhs_pipe_to_priv(pkt->pipe); in usbhsf_dma_try_pop()
1143 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_pop_done_with_rx_irq() local
1144 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhsf_dma_pop_done_with_rx_irq()
1146 usbhsf_dma_stop(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_rx_irq()
1148 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_rx_irq()
1155 usbhs_pipe_running(pipe, 0); in usbhsf_dma_pop_done_with_rx_irq()
1158 usbhs_pipe_running(pipe, 0); in usbhsf_dma_pop_done_with_rx_irq()
1168 struct usbhs_pipe *pipe = pkt->pipe; in usbhs_dma_calc_received_size() local
1171 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhs_dma_calc_received_size()
1188 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_pop_done_with_usb_dmac() local
1189 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_pop_done_with_usb_dmac()
1190 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in usbhsf_dma_pop_done_with_usb_dmac()
1199 usbhs_xxxsts_clear(priv, BRDYSTS, usbhs_pipe_number(pipe)); in usbhsf_dma_pop_done_with_usb_dmac()
1202 usbhsf_fifo_clear(pipe, fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1205 usbhs_pipe_running(pipe, 0); in usbhsf_dma_pop_done_with_usb_dmac()
1206 usbhsf_dma_stop(pipe, fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1208 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1218 struct usbhs_priv *priv = usbhs_pipe_to_priv(pkt->pipe); in usbhsf_dma_pop_done()
1323 struct usbhs_pipe *pipe; in usbhsf_irq_empty() local
1338 usbhs_for_each_pipe_with_dcp(pipe, priv, i) { in usbhsf_irq_empty()
1342 ret = usbhsf_pkt_handler(pipe, USBHSF_PKT_TRY_RUN); in usbhsf_irq_empty()
1353 struct usbhs_pipe *pipe; in usbhsf_irq_ready() local
1368 usbhs_for_each_pipe_with_dcp(pipe, priv, i) { in usbhsf_irq_ready()
1372 ret = usbhsf_pkt_handler(pipe, USBHSF_PKT_TRY_RUN); in usbhsf_irq_ready()
1382 struct usbhs_pipe *pipe = arg; in usbhsf_dma_complete() local
1383 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_complete()
1387 ret = usbhsf_pkt_handler(pipe, USBHSF_PKT_DMA_DONE); in usbhsf_dma_complete()
1390 usbhs_pipe_number(pipe), ret); in usbhsf_dma_complete()
1393 void usbhs_fifo_clear_dcp(struct usbhs_pipe *pipe) in usbhs_fifo_clear_dcp() argument
1395 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_fifo_clear_dcp()
1399 if (usbhsf_fifo_select(pipe, fifo, 1) < 0) in usbhs_fifo_clear_dcp()
1401 usbhsf_fifo_clear(pipe, fifo); in usbhs_fifo_clear_dcp()
1402 usbhsf_fifo_unselect(pipe, fifo); in usbhs_fifo_clear_dcp()
1405 if (usbhsf_fifo_select(pipe, fifo, 0) < 0) in usbhs_fifo_clear_dcp()
1407 usbhsf_fifo_clear(pipe, fifo); in usbhs_fifo_clear_dcp()
1408 usbhsf_fifo_unselect(pipe, fifo); in usbhs_fifo_clear_dcp()
1426 cfifo->pipe = NULL; in usbhs_fifo_init()
1428 dfifo->pipe = NULL; in usbhs_fifo_init()