Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c6ef985 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Felipe Balbi
Browse files

usb: gadget: renesas_usbhs: struct usbhs_pipe hold handler



packet handler had moved to struct usbhs_pipe from struct usbhsg_uep.
it is preparation of mod_host support

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 7fd097e7
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ static struct usbhs_pkt_handle usbhsf_null_handler = {
};

void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt,
		    struct usbhs_pkt_handle *handler,
		    void *buf, int len, int zero)
{
	struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
@@ -64,17 +63,22 @@ void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt,
	/********************  spin lock ********************/
	usbhs_lock(priv, flags);

	if (!handler) {
	if (!pipe->handler) {
		dev_err(dev, "no handler function\n");
		handler = &usbhsf_null_handler;
		pipe->handler = &usbhsf_null_handler;
	}

	list_del_init(&pkt->node);
	list_add_tail(&pkt->node, &pipe->list);

	/*
	 * each pkt must hold own handler.
	 * because handler might be changed by its situation.
	 * dma handler -> pio handler.
	 */
	pkt->pipe	= pipe;
	pkt->buf	= buf;
	pkt->handler	= handler;
	pkt->handler	= pipe->handler;
	pkt->length	= len;
	pkt->zero	= zero;
	pkt->actual	= 0;
+0 −1
Original line number Diff line number Diff line
@@ -86,7 +86,6 @@ extern struct usbhs_pkt_handle usbhs_fifo_dma_pop_handler;

void usbhs_pkt_init(struct usbhs_pkt *pkt);
void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt,
		    struct usbhs_pkt_handle *handler,
		    void *buf, int len, int zero);
struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt);
void usbhs_pkt_start(struct usbhs_pipe *pipe);
+6 −8
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ struct usbhsg_uep {
	char ep_name[EP_NAME_SIZE];

	struct usbhsg_gpriv *gpriv;
	struct usbhs_pkt_handle *handler;
};

struct usbhsg_gpriv {
@@ -139,8 +138,7 @@ static void usbhsg_queue_push(struct usbhsg_uep *uep,

	req->actual = 0;
	req->status = -EINPROGRESS;
	usbhs_pkt_push(pipe, pkt, uep->handler,
		       req->buf, req->length, req->zero);
	usbhs_pkt_push(pipe, pkt, req->buf, req->length, req->zero);

	dev_dbg(dev, "pipe %d : queue push (%d)\n",
		usbhs_pipe_number(pipe),
@@ -389,13 +387,13 @@ static int usbhsg_irq_ctrl_stage(struct usbhs_priv *priv,

	switch (stage) {
	case READ_DATA_STAGE:
		dcp->handler = &usbhs_fifo_pio_push_handler;
		pipe->handler = &usbhs_fifo_pio_push_handler;
		break;
	case WRITE_DATA_STAGE:
		dcp->handler = &usbhs_fifo_pio_pop_handler;
		pipe->handler = &usbhs_fifo_pio_pop_handler;
		break;
	case NODATA_STATUS_STAGE:
		dcp->handler = &usbhs_ctrl_stage_end_handler;
		pipe->handler = &usbhs_ctrl_stage_end_handler;
		break;
	default:
		return ret;
@@ -501,9 +499,9 @@ static int usbhsg_ep_enable(struct usb_ep *ep,
		 * It will use pio handler if impossible.
		 */
		if (usb_endpoint_dir_in(desc))
			uep->handler = &usbhs_fifo_dma_push_handler;
			pipe->handler = &usbhs_fifo_dma_push_handler;
		else
			uep->handler = &usbhs_fifo_dma_pop_handler;
			pipe->handler = &usbhs_fifo_dma_pop_handler;

		ret = 0;
	}
+2 −0
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ struct usbhs_pipe {
#define USBHS_PIPE_FLAGS_IS_DIR_IN		(1 << 1)
#define USBHS_PIPE_FLAGS_IS_DIR_HOST		(1 << 2)

	struct usbhs_pkt_handle *handler;

	void *mod_private;
};