• Home
  • Raw
  • Download

Lines Matching refs:pipe

42 char *usbhs_pipe_name(struct usbhs_pipe *pipe)  in usbhs_pipe_name()  argument
44 return usbhsp_pipe_name[usbhs_pipe_type(pipe)]; in usbhs_pipe_name()
50 static void usbhsp_pipectrl_set(struct usbhs_pipe *pipe, u16 mask, u16 val) in usbhsp_pipectrl_set() argument
52 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsp_pipectrl_set()
53 int offset = usbhsp_addr_offset(pipe); in usbhsp_pipectrl_set()
55 if (usbhs_pipe_is_dcp(pipe)) in usbhsp_pipectrl_set()
61 static u16 usbhsp_pipectrl_get(struct usbhs_pipe *pipe) in usbhsp_pipectrl_get() argument
63 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsp_pipectrl_get()
64 int offset = usbhsp_addr_offset(pipe); in usbhsp_pipectrl_get()
66 if (usbhs_pipe_is_dcp(pipe)) in usbhsp_pipectrl_get()
75 static void __usbhsp_pipe_xxx_set(struct usbhs_pipe *pipe, in __usbhsp_pipe_xxx_set() argument
79 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in __usbhsp_pipe_xxx_set()
81 if (usbhs_pipe_is_dcp(pipe)) in __usbhsp_pipe_xxx_set()
90 static void usbhsp_pipe_cfg_set(struct usbhs_pipe *pipe, u16 mask, u16 val) in usbhsp_pipe_cfg_set() argument
92 __usbhsp_pipe_xxx_set(pipe, DCPCFG, PIPECFG, mask, val); in usbhsp_pipe_cfg_set()
98 static void usbhsp_pipe_trn_set(struct usbhs_pipe *pipe, u16 mask, u16 val) in usbhsp_pipe_trn_set() argument
100 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsp_pipe_trn_set()
102 int num = usbhs_pipe_number(pipe); in usbhsp_pipe_trn_set()
131 __usbhsp_pipe_xxx_set(pipe, 0, reg, mask, val); in usbhsp_pipe_trn_set()
134 static void usbhsp_pipe_tre_set(struct usbhs_pipe *pipe, u16 mask, u16 val) in usbhsp_pipe_tre_set() argument
136 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsp_pipe_tre_set()
138 int num = usbhs_pipe_number(pipe); in usbhsp_pipe_tre_set()
168 __usbhsp_pipe_xxx_set(pipe, 0, reg, mask, val); in usbhsp_pipe_tre_set()
174 static void usbhsp_pipe_buf_set(struct usbhs_pipe *pipe, u16 mask, u16 val) in usbhsp_pipe_buf_set() argument
176 if (usbhs_pipe_is_dcp(pipe)) in usbhsp_pipe_buf_set()
179 __usbhsp_pipe_xxx_set(pipe, 0, PIPEBUF, mask, val); in usbhsp_pipe_buf_set()
185 static void usbhsp_pipe_maxp_set(struct usbhs_pipe *pipe, u16 mask, u16 val) in usbhsp_pipe_maxp_set() argument
187 __usbhsp_pipe_xxx_set(pipe, DCPMAXP, PIPEMAXP, mask, val); in usbhsp_pipe_maxp_set()
193 static void usbhsp_pipe_select(struct usbhs_pipe *pipe) in usbhsp_pipe_select() argument
195 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsp_pipe_select()
212 usbhs_write(priv, PIPESEL, 0xF & usbhs_pipe_number(pipe)); in usbhsp_pipe_select()
215 static int usbhsp_pipe_barrier(struct usbhs_pipe *pipe) in usbhsp_pipe_barrier() argument
217 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsp_pipe_barrier()
240 usbhs_pipe_disable(pipe); in usbhsp_pipe_barrier()
243 val = usbhsp_pipectrl_get(pipe); in usbhsp_pipe_barrier()
255 int usbhs_pipe_is_accessible(struct usbhs_pipe *pipe) in usbhs_pipe_is_accessible() argument
259 val = usbhsp_pipectrl_get(pipe); in usbhs_pipe_is_accessible()
269 static void __usbhsp_pid_try_nak_if_stall(struct usbhs_pipe *pipe) in __usbhsp_pid_try_nak_if_stall() argument
271 u16 pid = usbhsp_pipectrl_get(pipe); in __usbhsp_pid_try_nak_if_stall()
281 usbhsp_pipectrl_set(pipe, PID_MASK, PID_STALL10); in __usbhsp_pid_try_nak_if_stall()
284 usbhsp_pipectrl_set(pipe, PID_MASK, PID_NAK); in __usbhsp_pid_try_nak_if_stall()
288 void usbhs_pipe_disable(struct usbhs_pipe *pipe) in usbhs_pipe_disable() argument
294 __usbhsp_pid_try_nak_if_stall(pipe); in usbhs_pipe_disable()
296 usbhsp_pipectrl_set(pipe, PID_MASK, PID_NAK); in usbhs_pipe_disable()
299 val = usbhsp_pipectrl_get(pipe); in usbhs_pipe_disable()
308 void usbhs_pipe_enable(struct usbhs_pipe *pipe) in usbhs_pipe_enable() argument
311 __usbhsp_pid_try_nak_if_stall(pipe); in usbhs_pipe_enable()
313 usbhsp_pipectrl_set(pipe, PID_MASK, PID_BUF); in usbhs_pipe_enable()
316 void usbhs_pipe_stall(struct usbhs_pipe *pipe) in usbhs_pipe_stall() argument
318 u16 pid = usbhsp_pipectrl_get(pipe); in usbhs_pipe_stall()
328 usbhsp_pipectrl_set(pipe, PID_MASK, PID_STALL10); in usbhs_pipe_stall()
331 usbhsp_pipectrl_set(pipe, PID_MASK, PID_STALL11); in usbhs_pipe_stall()
336 int usbhs_pipe_is_stall(struct usbhs_pipe *pipe) in usbhs_pipe_is_stall() argument
338 u16 pid = usbhsp_pipectrl_get(pipe) & PID_MASK; in usbhs_pipe_is_stall()
343 void usbhs_pipe_set_trans_count_if_bulk(struct usbhs_pipe *pipe, int len) in usbhs_pipe_set_trans_count_if_bulk() argument
345 if (!usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_BULK)) in usbhs_pipe_set_trans_count_if_bulk()
351 usbhsp_pipe_tre_set(pipe, TRCLR | TRENB, TRCLR); in usbhs_pipe_set_trans_count_if_bulk()
359 if (usbhs_pipe_is_dir_in(pipe)) { in usbhs_pipe_set_trans_count_if_bulk()
360 int maxp = usbhs_pipe_get_maxpacket(pipe); in usbhs_pipe_set_trans_count_if_bulk()
362 usbhsp_pipe_trn_set(pipe, 0xffff, DIV_ROUND_UP(len, maxp)); in usbhs_pipe_set_trans_count_if_bulk()
363 usbhsp_pipe_tre_set(pipe, TRENB, TRENB); /* enable */ in usbhs_pipe_set_trans_count_if_bulk()
371 static int usbhsp_possible_double_buffer(struct usbhs_pipe *pipe) in usbhsp_possible_double_buffer() argument
376 if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_BULK) || in usbhsp_possible_double_buffer()
377 usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_ISOC)) in usbhsp_possible_double_buffer()
383 static u16 usbhsp_setup_pipecfg(struct usbhs_pipe *pipe, in usbhsp_setup_pipecfg() argument
399 int is_double = usbhsp_possible_double_buffer(pipe); in usbhsp_setup_pipecfg()
401 if (usbhs_pipe_is_dcp(pipe)) in usbhsp_setup_pipecfg()
414 type = type_array[usbhs_pipe_type(pipe)]; in usbhsp_setup_pipecfg()
417 if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_ISOC) || in usbhsp_setup_pipecfg()
418 usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_BULK)) in usbhsp_setup_pipecfg()
422 if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_ISOC) || in usbhsp_setup_pipecfg()
423 usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_BULK)) in usbhsp_setup_pipecfg()
427 if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_BULK)) in usbhsp_setup_pipecfg()
432 usbhsp_flags_set(pipe, IS_DIR_HOST); in usbhsp_setup_pipecfg()
438 usbhsp_flags_set(pipe, IS_DIR_IN); in usbhsp_setup_pipecfg()
441 if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_BULK) && in usbhsp_setup_pipecfg()
457 static u16 usbhsp_setup_pipebuff(struct usbhs_pipe *pipe) in usbhsp_setup_pipebuff() argument
459 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhsp_setup_pipebuff()
462 int pipe_num = usbhs_pipe_number(pipe); in usbhsp_setup_pipebuff()
463 int is_double = usbhsp_possible_double_buffer(pipe); in usbhsp_setup_pipebuff()
501 if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_CONTROL)) in usbhsp_setup_pipebuff()
503 else if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_INT)) in usbhsp_setup_pipebuff()
513 if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_INT)) { in usbhsp_setup_pipebuff()
533 void usbhs_pipe_config_update(struct usbhs_pipe *pipe, u16 devsel, in usbhs_pipe_config_update() argument
537 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_pipe_config_update()
545 usbhsp_pipe_barrier(pipe); in usbhs_pipe_config_update()
547 pipe->maxp = maxp; in usbhs_pipe_config_update()
549 usbhsp_pipe_select(pipe); in usbhs_pipe_config_update()
550 usbhsp_pipe_maxp_set(pipe, 0xFFFF, in usbhs_pipe_config_update()
554 if (!usbhs_pipe_is_dcp(pipe)) in usbhs_pipe_config_update()
555 usbhsp_pipe_cfg_set(pipe, 0x000F, epnum); in usbhs_pipe_config_update()
561 int usbhs_pipe_get_maxpacket(struct usbhs_pipe *pipe) in usbhs_pipe_get_maxpacket() argument
568 return pipe->maxp; in usbhs_pipe_get_maxpacket()
571 int usbhs_pipe_is_dir_in(struct usbhs_pipe *pipe) in usbhs_pipe_is_dir_in() argument
573 return usbhsp_flags_has(pipe, IS_DIR_IN); in usbhs_pipe_is_dir_in()
576 int usbhs_pipe_is_dir_host(struct usbhs_pipe *pipe) in usbhs_pipe_is_dir_host() argument
578 return usbhsp_flags_has(pipe, IS_DIR_HOST); in usbhs_pipe_is_dir_host()
581 void usbhs_pipe_data_sequence(struct usbhs_pipe *pipe, int sequence) in usbhs_pipe_data_sequence() argument
603 usbhsp_pipectrl_set(pipe, mask, val); in usbhs_pipe_data_sequence()
606 void usbhs_pipe_clear(struct usbhs_pipe *pipe) in usbhs_pipe_clear() argument
608 usbhsp_pipectrl_set(pipe, ACLRM, ACLRM); in usbhs_pipe_clear()
609 usbhsp_pipectrl_set(pipe, ACLRM, 0); in usbhs_pipe_clear()
614 struct usbhs_pipe *pos, *pipe; in usbhsp_get_pipe() local
620 pipe = NULL; in usbhsp_get_pipe()
627 pipe = pos; in usbhsp_get_pipe()
631 if (!pipe) in usbhsp_get_pipe()
637 usbhsp_flags_init(pipe); in usbhsp_get_pipe()
638 usbhsp_flags_set(pipe, IS_USED); in usbhsp_get_pipe()
640 return pipe; in usbhsp_get_pipe()
647 struct usbhs_pipe *pipe; in usbhs_pipe_init() local
663 usbhs_for_each_pipe_with_dcp(pipe, priv, i) { in usbhs_pipe_init()
664 if (usbhs_pipe_type_is(pipe, USB_ENDPOINT_XFER_INT)) in usbhs_pipe_init()
667 usbhsp_flags_init(pipe); in usbhs_pipe_init()
668 pipe->fifo = NULL; in usbhs_pipe_init()
669 pipe->mod_private = NULL; in usbhs_pipe_init()
670 INIT_LIST_HEAD(&pipe->list); in usbhs_pipe_init()
673 usbhs_pipe_clear(pipe); in usbhs_pipe_init()
684 struct usbhs_pipe *pipe; in usbhs_pipe_malloc() local
689 pipe = usbhsp_get_pipe(priv, endpoint_type); in usbhs_pipe_malloc()
690 if (!pipe) { in usbhs_pipe_malloc()
696 INIT_LIST_HEAD(&pipe->list); in usbhs_pipe_malloc()
698 usbhs_pipe_disable(pipe); in usbhs_pipe_malloc()
701 ret = usbhsp_pipe_barrier(pipe); in usbhs_pipe_malloc()
703 dev_err(dev, "pipe setup failed %d\n", usbhs_pipe_number(pipe)); in usbhs_pipe_malloc()
707 pipecfg = usbhsp_setup_pipecfg(pipe, is_host, dir_in); in usbhs_pipe_malloc()
708 pipebuf = usbhsp_setup_pipebuff(pipe); in usbhs_pipe_malloc()
710 usbhsp_pipe_select(pipe); in usbhs_pipe_malloc()
711 usbhsp_pipe_cfg_set(pipe, 0xFFFF, pipecfg); in usbhs_pipe_malloc()
712 usbhsp_pipe_buf_set(pipe, 0xFFFF, pipebuf); in usbhs_pipe_malloc()
714 usbhs_pipe_sequence_data0(pipe); in usbhs_pipe_malloc()
717 usbhs_pipe_number(pipe), in usbhs_pipe_malloc()
718 usbhs_pipe_name(pipe), in usbhs_pipe_malloc()
719 usbhs_pipe_is_dir_in(pipe) ? "in" : "out"); in usbhs_pipe_malloc()
726 return pipe; in usbhs_pipe_malloc()
729 void usbhs_pipe_select_fifo(struct usbhs_pipe *pipe, struct usbhs_fifo *fifo) in usbhs_pipe_select_fifo() argument
731 if (pipe->fifo) in usbhs_pipe_select_fifo()
732 pipe->fifo->pipe = NULL; in usbhs_pipe_select_fifo()
734 pipe->fifo = fifo; in usbhs_pipe_select_fifo()
737 fifo->pipe = pipe; in usbhs_pipe_select_fifo()
746 struct usbhs_pipe *pipe; in usbhs_dcp_malloc() local
748 pipe = usbhsp_get_pipe(priv, USB_ENDPOINT_XFER_CONTROL); in usbhs_dcp_malloc()
749 if (!pipe) in usbhs_dcp_malloc()
752 INIT_LIST_HEAD(&pipe->list); in usbhs_dcp_malloc()
758 return pipe; in usbhs_dcp_malloc()
761 void usbhs_dcp_control_transfer_done(struct usbhs_pipe *pipe) in usbhs_dcp_control_transfer_done() argument
763 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); in usbhs_dcp_control_transfer_done()
765 WARN_ON(!usbhs_pipe_is_dcp(pipe)); in usbhs_dcp_control_transfer_done()
767 usbhs_pipe_enable(pipe); in usbhs_dcp_control_transfer_done()
770 usbhsp_pipectrl_set(pipe, CCPL, CCPL); in usbhs_dcp_control_transfer_done()
773 void usbhs_dcp_dir_for_host(struct usbhs_pipe *pipe, int dir_out) in usbhs_dcp_dir_for_host() argument
775 usbhsp_pipe_cfg_set(pipe, DIR_OUT, in usbhs_dcp_dir_for_host()
785 struct usbhs_pipe *pipe; in usbhs_pipe_probe() local
797 info->pipe = kzalloc(sizeof(struct usbhs_pipe) * pipe_size, GFP_KERNEL); in usbhs_pipe_probe()
798 if (!info->pipe) { in usbhs_pipe_probe()
808 usbhs_for_each_pipe_with_dcp(pipe, priv, i) { in usbhs_pipe_probe()
809 pipe->priv = priv; in usbhs_pipe_probe()
811 usbhs_pipe_type(pipe) = in usbhs_pipe_probe()
825 kfree(info->pipe); in usbhs_pipe_remove()