Lines Matching refs:fifo

98 				 struct usbhs_fifo *fifo);
99 static struct dma_chan *usbhsf_dma_chan_get(struct usbhs_fifo *fifo,
109 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe);
123 if (fifo)
124 chan = usbhsf_dma_chan_get(fifo, pkt);
141 if (fifo)
142 usbhsf_fifo_unselect(pipe, fifo);
256 struct usbhs_fifo *fifo)
260 usbhs_bset(priv, fifo->ctr, BVAL, BVAL);
264 struct usbhs_fifo *fifo)
267 if (usbhs_read(priv, fifo->ctr) & FRDY)
274 struct usbhs_fifo *fifo)
288 ret = usbhsf_fifo_barrier(priv, fifo);
296 usbhs_write(priv, fifo->ctr, BCLR);
300 struct usbhs_fifo *fifo)
302 return usbhs_read(priv, fifo->ctr) & DTLN_MASK;
306 struct usbhs_fifo *fifo)
311 usbhs_write(priv, fifo->sel, 0);
315 struct usbhs_fifo *fifo,
325 usbhsf_fifo_is_busy(fifo))
336 usbhs_write(priv, fifo->sel, base | MBW_32);
340 if (base == (mask & usbhs_read(priv, fifo->sel))) {
341 usbhs_pipe_select_fifo(pipe, fifo);
347 dev_err(dev, "fifo select error\n");
359 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
365 ret = usbhsf_fifo_select(pipe, fifo, 1);
373 usbhsf_fifo_clear(pipe, fifo);
374 usbhsf_send_terminator(pipe, fifo);
376 usbhsf_fifo_unselect(pipe, fifo);
388 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
394 ret = usbhsf_fifo_select(pipe, fifo, 0);
401 usbhsf_fifo_clear(pipe, fifo);
403 usbhsf_fifo_unselect(pipe, fifo);
466 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv);
474 * - clear fifo
481 usbhsf_fifo_select(pipe, fifo, 0);
482 usbhsf_fifo_clear(pipe, fifo);
483 usbhsf_fifo_unselect(pipe, fifo);
505 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
506 void __iomem *addr = priv->base + fifo->port;
518 ret = usbhsf_fifo_select(pipe, fifo, 1);
529 ret = usbhsf_fifo_barrier(priv, fifo);
575 usbhsf_send_terminator(pipe, fifo);
585 usbhsf_fifo_unselect(pipe, fifo);
590 usbhsf_fifo_unselect(pipe, fifo);
622 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv);
637 usbhsf_fifo_clear(pipe, fifo);
652 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
653 void __iomem *addr = priv->base + fifo->port;
661 ret = usbhsf_fifo_select(pipe, fifo, 0);
665 ret = usbhsf_fifo_barrier(priv, fifo);
669 rcv_len = usbhsf_fifo_rcv_len(priv, fifo);
706 usbhsf_fifo_clear(pipe, fifo);
735 usbhsf_fifo_unselect(pipe, fifo);
763 * DMA fifo functions
765 static struct dma_chan *usbhsf_dma_chan_get(struct usbhs_fifo *fifo,
769 return fifo->tx_chan;
772 return fifo->rx_chan;
780 struct usbhs_fifo *fifo;
783 usbhs_for_each_dfifo(priv, fifo, i) {
784 if (usbhsf_dma_chan_get(fifo, pkt) &&
785 !usbhsf_fifo_is_busy(fifo))
786 return fifo;
795 struct usbhs_fifo *fifo,
800 usbhs_bset(priv, fifo->sel, DREQE, dreqe);
808 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe);
809 struct dma_chan *chan = usbhsf_dma_chan_get(fifo, pkt);
819 struct usbhs_fifo *fifo;
827 fifo = usbhs_pipe_to_fifo(pipe);
828 if (!fifo)
831 chan = usbhsf_dma_chan_get(fifo, pkt);
850 fifo->name, usbhs_pipe_number(pipe), pkt->length, pkt->zero);
855 usbhsf_dma_start(pipe, fifo);
878 struct usbhs_fifo *fifo;
905 /* get enable DMA fifo */
906 fifo = usbhsf_get_dma_fifo(priv, pkt);
907 if (!fifo)
910 ret = usbhsf_fifo_select(pipe, fifo, 0);
931 usbhsf_fifo_unselect(pipe, fifo);
957 usbhsf_dma_stop(pipe, pipe->fifo);
959 usbhsf_fifo_unselect(pipe, pipe->fifo);
990 struct usbhs_fifo *fifo;
1001 fifo = usbhsf_get_dma_fifo(priv, pkt);
1002 if (!fifo)
1014 ret = usbhsf_fifo_select(pipe, fifo, 0);
1037 usbhsf_fifo_unselect(pipe, fifo);
1063 struct usbhs_fifo *fifo;
1072 /* get enable DMA fifo */
1073 fifo = usbhsf_get_dma_fifo(priv, pkt);
1074 if (!fifo)
1080 ret = usbhsf_fifo_select(pipe, fifo, 0);
1085 len = usbhsf_fifo_rcv_len(priv, fifo);
1093 ret = usbhsf_fifo_barrier(priv, fifo);
1117 usbhsf_fifo_unselect(pipe, fifo);
1142 usbhsf_dma_stop(pipe, pipe->fifo);
1144 usbhsf_fifo_unselect(pipe, pipe->fifo);
1184 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe);
1185 struct dma_chan *chan = usbhsf_dma_chan_get(fifo, pkt);
1195 rcv_len = usbhsf_fifo_rcv_len(priv, fifo);
1196 usbhsf_fifo_clear(pipe, fifo);
1200 usbhsf_dma_stop(pipe, fifo);
1202 usbhsf_fifo_unselect(pipe, pipe->fifo);
1246 static void usbhsf_dma_quit(struct usbhs_priv *priv, struct usbhs_fifo *fifo)
1248 if (fifo->tx_chan)
1249 dma_release_channel(fifo->tx_chan);
1250 if (fifo->rx_chan)
1251 dma_release_channel(fifo->rx_chan);
1253 fifo->tx_chan = NULL;
1254 fifo->rx_chan = NULL;
1257 static void usbhsf_dma_init_pdev(struct usbhs_fifo *fifo)
1263 fifo->tx_chan = dma_request_channel(mask, usbhsf_dma_filter,
1264 &fifo->tx_slave);
1268 fifo->rx_chan = dma_request_channel(mask, usbhsf_dma_filter,
1269 &fifo->rx_slave);
1272 static void usbhsf_dma_init_dt(struct device *dev, struct usbhs_fifo *fifo,
1284 fifo->tx_chan = dma_request_chan(dev, name);
1285 if (IS_ERR(fifo->tx_chan))
1286 fifo->tx_chan = NULL;
1288 fifo->rx_chan = dma_request_chan(dev, name);
1289 if (IS_ERR(fifo->rx_chan))
1290 fifo->rx_chan = NULL;
1294 static void usbhsf_dma_init(struct usbhs_priv *priv, struct usbhs_fifo *fifo,
1300 usbhsf_dma_init_dt(dev, fifo, channel);
1302 usbhsf_dma_init_pdev(fifo);
1304 if (fifo->tx_chan || fifo->rx_chan)
1306 fifo->name,
1307 fifo->tx_chan ? "[TX]" : " ",
1308 fifo->rx_chan ? "[RX]" : " ");
1393 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
1396 if (usbhsf_fifo_select(pipe, fifo, 1) < 0)
1398 usbhsf_fifo_clear(pipe, fifo);
1399 usbhsf_fifo_unselect(pipe, fifo);
1402 if (usbhsf_fifo_select(pipe, fifo, 0) < 0)
1404 usbhsf_fifo_clear(pipe, fifo);
1405 usbhsf_fifo_unselect(pipe, fifo);
1409 * fifo init
1438 #define __USBHS_DFIFO_INIT(priv, fifo, channel, fifo_port) \
1440 fifo = usbhsf_get_dnfifo(priv, channel); \
1441 fifo->name = "D"#channel"FIFO"; \
1442 fifo->port = fifo_port; \
1443 fifo->sel = D##channel##FIFOSEL; \
1444 fifo->ctr = D##channel##FIFOCTR; \
1445 fifo->tx_slave.shdma_slave.slave_id = \
1447 fifo->rx_slave.shdma_slave.slave_id = \
1449 usbhsf_dma_init(priv, fifo, channel); \
1452 #define USBHS_DFIFO_INIT(priv, fifo, channel) \
1453 __USBHS_DFIFO_INIT(priv, fifo, channel, D##channel##FIFO)
1454 #define USBHS_DFIFO_INIT_NO_PORT(priv, fifo, channel) \
1455 __USBHS_DFIFO_INIT(priv, fifo, channel, 0)
1459 struct usbhs_fifo *fifo;
1462 fifo = usbhsf_get_cfifo(priv);
1463 fifo->name = "CFIFO";
1464 fifo->port = CFIFO;
1465 fifo->sel = CFIFOSEL;
1466 fifo->ctr = CFIFOCTR;
1469 USBHS_DFIFO_INIT(priv, fifo, 0);
1470 USBHS_DFIFO_INIT(priv, fifo, 1);
1471 USBHS_DFIFO_INIT_NO_PORT(priv, fifo, 2);
1472 USBHS_DFIFO_INIT_NO_PORT(priv, fifo, 3);
1479 struct usbhs_fifo *fifo;
1482 usbhs_for_each_dfifo(priv, fifo, i)
1483 usbhsf_dma_quit(priv, fifo);