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);
258 struct usbhs_fifo *fifo)
262 usbhs_bset(priv, fifo->ctr, BVAL, BVAL);
266 struct usbhs_fifo *fifo)
269 if (usbhs_read(priv, fifo->ctr) & FRDY)
276 struct usbhs_fifo *fifo)
290 ret = usbhsf_fifo_barrier(priv, fifo);
298 usbhs_write(priv, fifo->ctr, BCLR);
302 struct usbhs_fifo *fifo)
304 return usbhs_read(priv, fifo->ctr) & DTLN_MASK;
308 struct usbhs_fifo *fifo)
313 usbhs_write(priv, fifo->sel, 0);
317 struct usbhs_fifo *fifo,
327 usbhsf_fifo_is_busy(fifo))
338 usbhs_write(priv, fifo->sel, base | MBW_32);
342 if (base == (mask & usbhs_read(priv, fifo->sel))) {
343 usbhs_pipe_select_fifo(pipe, fifo);
349 dev_err(dev, "fifo select error\n");
361 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
367 ret = usbhsf_fifo_select(pipe, fifo, 1);
375 usbhsf_fifo_clear(pipe, fifo);
376 usbhsf_send_terminator(pipe, fifo);
378 usbhsf_fifo_unselect(pipe, fifo);
390 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
396 ret = usbhsf_fifo_select(pipe, fifo, 0);
403 usbhsf_fifo_clear(pipe, fifo);
405 usbhsf_fifo_unselect(pipe, fifo);
468 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv);
476 * - clear fifo
483 usbhsf_fifo_select(pipe, fifo, 0);
484 usbhsf_fifo_clear(pipe, fifo);
485 usbhsf_fifo_unselect(pipe, fifo);
507 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
508 void __iomem *addr = priv->base + fifo->port;
520 ret = usbhsf_fifo_select(pipe, fifo, 1);
531 ret = usbhsf_fifo_barrier(priv, fifo);
577 usbhsf_send_terminator(pipe, fifo);
587 usbhsf_fifo_unselect(pipe, fifo);
592 usbhsf_fifo_unselect(pipe, fifo);
624 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv);
639 usbhsf_fifo_clear(pipe, fifo);
654 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
655 void __iomem *addr = priv->base + fifo->port;
663 ret = usbhsf_fifo_select(pipe, fifo, 0);
667 ret = usbhsf_fifo_barrier(priv, fifo);
671 rcv_len = usbhsf_fifo_rcv_len(priv, fifo);
708 usbhsf_fifo_clear(pipe, fifo);
737 usbhsf_fifo_unselect(pipe, fifo);
765 * DMA fifo functions
767 static struct dma_chan *usbhsf_dma_chan_get(struct usbhs_fifo *fifo,
771 return fifo->tx_chan;
774 return fifo->rx_chan;
782 struct usbhs_fifo *fifo;
785 usbhs_for_each_dfifo(priv, fifo, i) {
786 if (usbhsf_dma_chan_get(fifo, pkt) &&
787 !usbhsf_fifo_is_busy(fifo))
788 return fifo;
797 struct usbhs_fifo *fifo,
802 usbhs_bset(priv, fifo->sel, DREQE, dreqe);
810 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe);
811 struct dma_chan *chan = usbhsf_dma_chan_get(fifo, pkt);
821 struct usbhs_fifo *fifo;
829 fifo = usbhs_pipe_to_fifo(pipe);
830 if (!fifo)
833 chan = usbhsf_dma_chan_get(fifo, pkt);
852 fifo->name, usbhs_pipe_number(pipe), pkt->length, pkt->zero);
857 usbhsf_dma_start(pipe, fifo);
880 struct usbhs_fifo *fifo;
907 /* get enable DMA fifo */
908 fifo = usbhsf_get_dma_fifo(priv, pkt);
909 if (!fifo)
912 ret = usbhsf_fifo_select(pipe, fifo, 0);
933 usbhsf_fifo_unselect(pipe, fifo);
959 usbhsf_dma_stop(pipe, pipe->fifo);
961 usbhsf_fifo_unselect(pipe, pipe->fifo);
992 struct usbhs_fifo *fifo;
1003 fifo = usbhsf_get_dma_fifo(priv, pkt);
1004 if (!fifo)
1016 ret = usbhsf_fifo_select(pipe, fifo, 0);
1039 usbhsf_fifo_unselect(pipe, fifo);
1065 struct usbhs_fifo *fifo;
1074 /* get enable DMA fifo */
1075 fifo = usbhsf_get_dma_fifo(priv, pkt);
1076 if (!fifo)
1082 ret = usbhsf_fifo_select(pipe, fifo, 0);
1087 len = usbhsf_fifo_rcv_len(priv, fifo);
1095 ret = usbhsf_fifo_barrier(priv, fifo);
1119 usbhsf_fifo_unselect(pipe, fifo);
1144 usbhsf_dma_stop(pipe, pipe->fifo);
1146 usbhsf_fifo_unselect(pipe, pipe->fifo);
1186 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe);
1187 struct dma_chan *chan = usbhsf_dma_chan_get(fifo, pkt);
1197 rcv_len = usbhsf_fifo_rcv_len(priv, fifo);
1198 usbhsf_fifo_clear(pipe, fifo);
1202 usbhsf_dma_stop(pipe, fifo);
1204 usbhsf_fifo_unselect(pipe, pipe->fifo);
1248 static void usbhsf_dma_quit(struct usbhs_priv *priv, struct usbhs_fifo *fifo)
1250 if (fifo->tx_chan)
1251 dma_release_channel(fifo->tx_chan);
1252 if (fifo->rx_chan)
1253 dma_release_channel(fifo->rx_chan);
1255 fifo->tx_chan = NULL;
1256 fifo->rx_chan = NULL;
1259 static void usbhsf_dma_init_pdev(struct usbhs_fifo *fifo)
1265 fifo->tx_chan = dma_request_channel(mask, usbhsf_dma_filter,
1266 &fifo->tx_slave);
1270 fifo->rx_chan = dma_request_channel(mask, usbhsf_dma_filter,
1271 &fifo->rx_slave);
1274 static void usbhsf_dma_init_dt(struct device *dev, struct usbhs_fifo *fifo,
1286 fifo->tx_chan = dma_request_chan(dev, name);
1287 if (IS_ERR(fifo->tx_chan))
1288 fifo->tx_chan = NULL;
1290 fifo->rx_chan = dma_request_chan(dev, name);
1291 if (IS_ERR(fifo->rx_chan))
1292 fifo->rx_chan = NULL;
1296 static void usbhsf_dma_init(struct usbhs_priv *priv, struct usbhs_fifo *fifo,
1302 usbhsf_dma_init_dt(dev, fifo, channel);
1304 usbhsf_dma_init_pdev(fifo);
1306 if (fifo->tx_chan || fifo->rx_chan)
1308 fifo->name,
1309 fifo->tx_chan ? "[TX]" : " ",
1310 fifo->rx_chan ? "[RX]" : " ");
1395 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
1398 if (usbhsf_fifo_select(pipe, fifo, 1) < 0)
1400 usbhsf_fifo_clear(pipe, fifo);
1401 usbhsf_fifo_unselect(pipe, fifo);
1404 if (usbhsf_fifo_select(pipe, fifo, 0) < 0)
1406 usbhsf_fifo_clear(pipe, fifo);
1407 usbhsf_fifo_unselect(pipe, fifo);
1411 * fifo init
1440 #define __USBHS_DFIFO_INIT(priv, fifo, channel, fifo_port) \
1442 fifo = usbhsf_get_dnfifo(priv, channel); \
1443 fifo->name = "D"#channel"FIFO"; \
1444 fifo->port = fifo_port; \
1445 fifo->sel = D##channel##FIFOSEL; \
1446 fifo->ctr = D##channel##FIFOCTR; \
1447 fifo->tx_slave.shdma_slave.slave_id = \
1449 fifo->rx_slave.shdma_slave.slave_id = \
1451 usbhsf_dma_init(priv, fifo, channel); \
1454 #define USBHS_DFIFO_INIT(priv, fifo, channel) \
1455 __USBHS_DFIFO_INIT(priv, fifo, channel, D##channel##FIFO)
1456 #define USBHS_DFIFO_INIT_NO_PORT(priv, fifo, channel) \
1457 __USBHS_DFIFO_INIT(priv, fifo, channel, 0)
1461 struct usbhs_fifo *fifo;
1464 fifo = usbhsf_get_cfifo(priv);
1465 fifo->name = "CFIFO";
1466 fifo->port = CFIFO;
1467 fifo->sel = CFIFOSEL;
1468 fifo->ctr = CFIFOCTR;
1471 USBHS_DFIFO_INIT(priv, fifo, 0);
1472 USBHS_DFIFO_INIT(priv, fifo, 1);
1473 USBHS_DFIFO_INIT_NO_PORT(priv, fifo, 2);
1474 USBHS_DFIFO_INIT_NO_PORT(priv, fifo, 3);
1481 struct usbhs_fifo *fifo;
1484 usbhs_for_each_dfifo(priv, fifo, i)
1485 usbhsf_dma_quit(priv, fifo);