• Home
  • Raw
  • Download

Lines Matching refs:pipe

17 #define usbhsf_fifo_is_busy(f)	((f)->pipe) /* see usbhs_pipe_select_fifo */
32 struct usbhs_priv *priv = usbhs_pipe_to_priv(pkt->pipe); in usbhsf_null_handle()
45 void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt, in usbhs_pkt_push() argument
50 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_pkt_push()
62 if (!pipe->handler) { in usbhs_pkt_push()
64 pipe->handler = &usbhsf_null_handler; in usbhs_pkt_push()
67 list_move_tail(&pkt->node, &pipe->list); in usbhs_pkt_push()
74 pkt->pipe = pipe; in usbhs_pkt_push()
76 pkt->handler = pipe->handler; in usbhs_pkt_push()
92 struct usbhs_pkt *__usbhsf_pkt_get(struct usbhs_pipe *pipe) in __usbhsf_pkt_get() argument
94 return list_first_entry_or_null(&pipe->list, struct usbhs_pkt, node); in __usbhsf_pkt_get()
97 static void usbhsf_fifo_unselect(struct usbhs_pipe *pipe,
104 static void usbhsf_tx_irq_ctrl(struct usbhs_pipe *pipe, int enable);
105 static void usbhsf_rx_irq_ctrl(struct usbhs_pipe *pipe, int enable);
106 struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt) in usbhs_pkt_pop() argument
108 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_pkt_pop()
109 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in usbhs_pkt_pop()
115 usbhs_pipe_disable(pipe); in usbhs_pkt_pop()
118 pkt = __usbhsf_pkt_get(pipe); in usbhs_pkt_pop()
129 if (usbhs_pipe_is_dir_in(pipe)) in usbhs_pkt_pop()
130 usbhsf_rx_irq_ctrl(pipe, 0); in usbhs_pkt_pop()
132 usbhsf_tx_irq_ctrl(pipe, 0); in usbhs_pkt_pop()
135 usbhs_pipe_clear_without_sequence(pipe, 0, 0); in usbhs_pkt_pop()
136 usbhs_pipe_running(pipe, 0); in usbhs_pkt_pop()
142 usbhsf_fifo_unselect(pipe, fifo); in usbhs_pkt_pop()
156 static int usbhsf_pkt_handler(struct usbhs_pipe *pipe, int type) in usbhsf_pkt_handler() argument
158 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_pkt_handler()
169 pkt = __usbhsf_pkt_get(pipe); in usbhsf_pkt_handler()
200 usbhs_pkt_start(pipe); in usbhsf_pkt_handler()
206 void usbhs_pkt_start(struct usbhs_pipe *pipe) in usbhs_pkt_start() argument
208 usbhsf_pkt_handler(pipe, USBHSF_PKT_PREPARE); in usbhs_pkt_start()
216 #define usbhsf_irq_callback_ctrl(pipe, status, enable) \ argument
218 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); \
220 u16 status = (1 << usbhs_pipe_number(pipe)); \
230 static void usbhsf_tx_irq_ctrl(struct usbhs_pipe *pipe, int enable) in usbhsf_tx_irq_ctrl() argument
241 if (usbhs_pipe_is_dcp(pipe)) in usbhsf_tx_irq_ctrl()
242 usbhsf_irq_empty_ctrl(pipe, enable); in usbhsf_tx_irq_ctrl()
244 usbhsf_irq_ready_ctrl(pipe, enable); in usbhsf_tx_irq_ctrl()
247 static void usbhsf_rx_irq_ctrl(struct usbhs_pipe *pipe, int enable) in usbhsf_rx_irq_ctrl() argument
249 usbhsf_irq_ready_ctrl(pipe, enable); in usbhsf_rx_irq_ctrl()
255 static void usbhsf_send_terminator(struct usbhs_pipe *pipe, in usbhsf_send_terminator() argument
258 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_send_terminator()
273 static void usbhsf_fifo_clear(struct usbhs_pipe *pipe, in usbhsf_fifo_clear() argument
276 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_fifo_clear()
279 if (!usbhs_pipe_is_dcp(pipe)) { in usbhsf_fifo_clear()
285 if (usbhs_pipe_is_dir_in(pipe)) in usbhsf_fifo_clear()
286 ret = usbhs_pipe_is_accessible(pipe); in usbhsf_fifo_clear()
305 static void usbhsf_fifo_unselect(struct usbhs_pipe *pipe, in usbhsf_fifo_unselect() argument
308 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_fifo_unselect()
310 usbhs_pipe_select_fifo(pipe, NULL); in usbhsf_fifo_unselect()
314 static int usbhsf_fifo_select(struct usbhs_pipe *pipe, in usbhsf_fifo_select() argument
318 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_fifo_select()
322 u16 base = usbhs_pipe_number(pipe); /* CURPIPE */ in usbhsf_fifo_select()
324 if (usbhs_pipe_is_busy(pipe) || in usbhsf_fifo_select()
328 if (usbhs_pipe_is_dcp(pipe)) { in usbhsf_fifo_select()
332 usbhs_dcp_dir_for_host(pipe, write); in usbhsf_fifo_select()
341 usbhs_pipe_select_fifo(pipe, fifo); in usbhsf_fifo_select()
357 struct usbhs_pipe *pipe = pkt->pipe; in usbhs_dcp_dir_switch_to_write() local
358 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_dcp_dir_switch_to_write()
363 usbhs_pipe_disable(pipe); in usbhs_dcp_dir_switch_to_write()
365 ret = usbhsf_fifo_select(pipe, fifo, 1); in usbhs_dcp_dir_switch_to_write()
371 usbhs_pipe_sequence_data1(pipe); /* DATA1 */ in usbhs_dcp_dir_switch_to_write()
373 usbhsf_fifo_clear(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
374 usbhsf_send_terminator(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
376 usbhsf_fifo_unselect(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
378 usbhsf_tx_irq_ctrl(pipe, 1); in usbhs_dcp_dir_switch_to_write()
379 usbhs_pipe_enable(pipe); in usbhs_dcp_dir_switch_to_write()
386 struct usbhs_pipe *pipe = pkt->pipe; in usbhs_dcp_dir_switch_to_read() local
387 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_dcp_dir_switch_to_read()
392 usbhs_pipe_disable(pipe); in usbhs_dcp_dir_switch_to_read()
394 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhs_dcp_dir_switch_to_read()
400 usbhs_pipe_sequence_data1(pipe); /* DATA1 */ in usbhs_dcp_dir_switch_to_read()
401 usbhsf_fifo_clear(pipe, fifo); in usbhs_dcp_dir_switch_to_read()
403 usbhsf_fifo_unselect(pipe, fifo); in usbhs_dcp_dir_switch_to_read()
405 usbhsf_rx_irq_ctrl(pipe, 1); in usbhs_dcp_dir_switch_to_read()
406 usbhs_pipe_enable(pipe); in usbhs_dcp_dir_switch_to_read()
414 struct usbhs_pipe *pipe = pkt->pipe; in usbhs_dcp_dir_switch_done() local
417 usbhsf_tx_irq_ctrl(pipe, 0); in usbhs_dcp_dir_switch_done()
419 usbhsf_rx_irq_ctrl(pipe, 0); in usbhs_dcp_dir_switch_done()
442 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dcp_data_stage_try_push() local
444 usbhs_pipe_sequence_data1(pipe); /* DATA1 */ in usbhsf_dcp_data_stage_try_push()
464 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dcp_data_stage_prepare_pop() local
465 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dcp_data_stage_prepare_pop()
468 if (usbhs_pipe_is_busy(pipe)) in usbhsf_dcp_data_stage_prepare_pop()
477 usbhs_pipe_disable(pipe); in usbhsf_dcp_data_stage_prepare_pop()
479 usbhs_pipe_sequence_data1(pipe); /* DATA1 */ in usbhsf_dcp_data_stage_prepare_pop()
481 usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dcp_data_stage_prepare_pop()
482 usbhsf_fifo_clear(pipe, fifo); in usbhsf_dcp_data_stage_prepare_pop()
483 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dcp_data_stage_prepare_pop()
502 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_pio_try_push() local
503 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_pio_try_push()
508 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhsf_pio_try_push()
513 usbhs_pipe_data_sequence(pipe, pkt->sequence); in usbhsf_pio_try_push()
516 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->length); in usbhsf_pio_try_push()
518 ret = usbhsf_fifo_select(pipe, fifo, 1); in usbhsf_pio_try_push()
522 ret = usbhs_pipe_is_accessible(pipe); in usbhsf_pio_try_push()
575 usbhsf_send_terminator(pipe, fifo); in usbhsf_pio_try_push()
577 usbhsf_tx_irq_ctrl(pipe, !*is_done); in usbhsf_pio_try_push()
578 usbhs_pipe_running(pipe, !*is_done); in usbhsf_pio_try_push()
579 usbhs_pipe_enable(pipe); in usbhsf_pio_try_push()
582 usbhs_pipe_number(pipe), in usbhsf_pio_try_push()
585 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_push()
590 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_push()
596 usbhsf_tx_irq_ctrl(pipe, 1); in usbhsf_pio_try_push()
597 usbhs_pipe_running(pipe, 1); in usbhsf_pio_try_push()
604 if (usbhs_pipe_is_running(pkt->pipe)) in usbhsf_pio_prepare_push()
620 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_prepare_pop() local
621 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_prepare_pop()
624 if (usbhs_pipe_is_busy(pipe)) in usbhsf_prepare_pop()
627 if (usbhs_pipe_is_running(pipe)) in usbhsf_prepare_pop()
633 usbhs_pipe_data_sequence(pipe, pkt->sequence); in usbhsf_prepare_pop()
636 if (usbhs_pipe_is_dcp(pipe)) in usbhsf_prepare_pop()
637 usbhsf_fifo_clear(pipe, fifo); in usbhsf_prepare_pop()
639 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->length); in usbhsf_prepare_pop()
640 usbhs_pipe_enable(pipe); in usbhsf_prepare_pop()
641 usbhs_pipe_running(pipe, 1); in usbhsf_prepare_pop()
642 usbhsf_rx_irq_ctrl(pipe, 1); in usbhsf_prepare_pop()
649 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_pio_try_pop() local
650 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_pio_try_pop()
656 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhsf_pio_try_pop()
661 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_pio_try_pop()
686 usbhsf_rx_irq_ctrl(pipe, 0); in usbhsf_pio_try_pop()
687 usbhs_pipe_running(pipe, 0); in usbhsf_pio_try_pop()
694 if (!usbhs_mod_is_host(priv) && !usbhs_pipe_is_dcp(pipe)) in usbhsf_pio_try_pop()
695 usbhs_pipe_disable(pipe); /* disable pipe first */ in usbhsf_pio_try_pop()
706 usbhsf_fifo_clear(pipe, fifo); in usbhsf_pio_try_pop()
731 usbhs_pipe_number(pipe), in usbhsf_pio_try_pop()
735 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_pop()
750 usbhs_dcp_control_transfer_done(pkt->pipe); in usbhsf_ctrl_stage_end()
794 static void __usbhsf_dma_ctrl(struct usbhs_pipe *pipe, in __usbhsf_dma_ctrl() argument
798 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in __usbhsf_dma_ctrl()
805 struct usbhs_pipe *pipe = pkt->pipe; in __usbhsf_dma_map_ctrl() local
806 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in __usbhsf_dma_map_ctrl()
808 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in __usbhsf_dma_map_ctrl()
818 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_xfer_preparing() local
820 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_xfer_preparing()
827 fifo = usbhs_pipe_to_fifo(pipe); in usbhsf_dma_xfer_preparing()
832 dir = usbhs_pipe_is_dir_in(pipe) ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV; in usbhsf_dma_xfer_preparing()
850 fifo->name, usbhs_pipe_number(pipe), pkt->length, pkt->zero); in usbhsf_dma_xfer_preparing()
852 usbhs_pipe_running(pipe, 1); in usbhsf_dma_xfer_preparing()
853 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->trans); in usbhsf_dma_xfer_preparing()
855 usbhsf_dma_start(pipe, fifo); in usbhsf_dma_xfer_preparing()
856 usbhs_pipe_enable(pipe); in usbhsf_dma_xfer_preparing()
862 struct usbhs_pipe *pipe = pkt->pipe; in xfer_work() local
863 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in xfer_work()
876 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_prepare_push() local
877 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_prepare_push()
883 if (usbhs_pipe_is_busy(pipe)) in usbhsf_dma_prepare_push()
888 usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_ISOC)) in usbhsf_dma_prepare_push()
902 if (usbhs_pipe_is_running(pipe)) in usbhsf_dma_prepare_push()
910 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_prepare_push()
919 usbhsf_tx_irq_ctrl(pipe, 0); in usbhsf_dma_prepare_push()
931 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_prepare_push()
943 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_push_done() local
944 int is_short = pkt->trans % usbhs_pipe_get_maxpacket(pipe); in usbhsf_dma_push_done()
955 usbhs_pipe_running(pipe, !*is_done); in usbhsf_dma_push_done()
957 usbhsf_dma_stop(pipe, pipe->fifo); in usbhsf_dma_push_done()
959 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_push_done()
988 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_prepare_pop_with_usb_dmac() local
989 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_prepare_pop_with_usb_dmac()
993 if (usbhs_pipe_is_busy(pipe)) in usbhsf_dma_prepare_pop_with_usb_dmac()
998 usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_ISOC)) in usbhsf_dma_prepare_pop_with_usb_dmac()
1009 if (usbhs_pipe_is_running(pipe)) in usbhsf_dma_prepare_pop_with_usb_dmac()
1012 usbhs_pipe_config_change_bfre(pipe, 1); in usbhsf_dma_prepare_pop_with_usb_dmac()
1014 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_prepare_pop_with_usb_dmac()
1028 usbhsf_rx_irq_ctrl(pipe, 0); in usbhsf_dma_prepare_pop_with_usb_dmac()
1037 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_prepare_pop_with_usb_dmac()
1044 usbhs_pipe_config_change_bfre(pipe, 0); in usbhsf_dma_prepare_pop_with_usb_dmac()
1051 struct usbhs_priv *priv = usbhs_pipe_to_priv(pkt->pipe); in usbhsf_dma_prepare_pop()
1061 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_try_pop_with_rx_irq() local
1062 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_try_pop_with_rx_irq()
1066 if (usbhs_pipe_is_busy(pipe)) in usbhsf_dma_try_pop_with_rx_irq()
1069 if (usbhs_pipe_is_dcp(pipe)) in usbhsf_dma_try_pop_with_rx_irq()
1080 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_try_pop_with_rx_irq()
1107 usbhsf_rx_irq_ctrl(pipe, 0); in usbhsf_dma_try_pop_with_rx_irq()
1117 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_try_pop_with_rx_irq()
1130 struct usbhs_priv *priv = usbhs_pipe_to_priv(pkt->pipe); in usbhsf_dma_try_pop()
1139 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_pop_done_with_rx_irq() local
1140 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhsf_dma_pop_done_with_rx_irq()
1142 usbhsf_dma_stop(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_rx_irq()
1144 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_rx_irq()
1151 usbhs_pipe_running(pipe, 0); in usbhsf_dma_pop_done_with_rx_irq()
1154 usbhs_pipe_running(pipe, 0); in usbhsf_dma_pop_done_with_rx_irq()
1164 struct usbhs_pipe *pipe = pkt->pipe; in usbhs_dma_calc_received_size() local
1166 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhs_dma_calc_received_size()
1182 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_pop_done_with_usb_dmac() local
1183 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_pop_done_with_usb_dmac()
1184 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in usbhsf_dma_pop_done_with_usb_dmac()
1193 usbhs_xxxsts_clear(priv, BRDYSTS, usbhs_pipe_number(pipe)); in usbhsf_dma_pop_done_with_usb_dmac()
1196 usbhsf_fifo_clear(pipe, fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1199 usbhs_pipe_running(pipe, 0); in usbhsf_dma_pop_done_with_usb_dmac()
1200 usbhsf_dma_stop(pipe, fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1202 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1212 struct usbhs_priv *priv = usbhs_pipe_to_priv(pkt->pipe); in usbhsf_dma_pop_done()
1317 struct usbhs_pipe *pipe; in usbhsf_irq_empty() local
1332 usbhs_for_each_pipe_with_dcp(pipe, priv, i) { in usbhsf_irq_empty()
1336 ret = usbhsf_pkt_handler(pipe, USBHSF_PKT_TRY_RUN); in usbhsf_irq_empty()
1347 struct usbhs_pipe *pipe; in usbhsf_irq_ready() local
1362 usbhs_for_each_pipe_with_dcp(pipe, priv, i) { in usbhsf_irq_ready()
1366 ret = usbhsf_pkt_handler(pipe, USBHSF_PKT_TRY_RUN); in usbhsf_irq_ready()
1378 struct usbhs_pipe *pipe = pkt->pipe; in usbhsf_dma_complete() local
1379 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsf_dma_complete()
1384 ret = usbhsf_pkt_handler(pipe, USBHSF_PKT_DMA_DONE); in usbhsf_dma_complete()
1387 usbhs_pipe_number(pipe), ret); in usbhsf_dma_complete()
1390 void usbhs_fifo_clear_dcp(struct usbhs_pipe *pipe) in usbhs_fifo_clear_dcp() argument
1392 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_fifo_clear_dcp()
1396 if (usbhsf_fifo_select(pipe, fifo, 1) < 0) in usbhs_fifo_clear_dcp()
1398 usbhsf_fifo_clear(pipe, fifo); in usbhs_fifo_clear_dcp()
1399 usbhsf_fifo_unselect(pipe, fifo); in usbhs_fifo_clear_dcp()
1402 if (usbhsf_fifo_select(pipe, fifo, 0) < 0) in usbhs_fifo_clear_dcp()
1404 usbhsf_fifo_clear(pipe, fifo); in usbhs_fifo_clear_dcp()
1405 usbhsf_fifo_unselect(pipe, fifo); in usbhs_fifo_clear_dcp()
1423 cfifo->pipe = NULL; in usbhs_fifo_init()
1425 dfifo->pipe = NULL; in usbhs_fifo_init()