Lines Matching refs:cfspi

122 static inline void dev_debugfs_rem(struct cfspi *cfspi)  in dev_debugfs_rem()  argument
124 debugfs_remove(cfspi->dbgfs_frame); in dev_debugfs_rem()
125 debugfs_remove(cfspi->dbgfs_state); in dev_debugfs_rem()
126 debugfs_remove(cfspi->dbgfs_dir); in dev_debugfs_rem()
135 struct cfspi *cfspi = file->private_data; in dbgfs_state() local
148 "STATE: %d\n", cfspi->dbg_state); in dbgfs_state()
150 "Previous CMD: 0x%x\n", cfspi->pcmd); in dbgfs_state()
152 "Current CMD: 0x%x\n", cfspi->cmd); in dbgfs_state()
154 "Previous TX len: %d\n", cfspi->tx_ppck_len); in dbgfs_state()
156 "Previous RX len: %d\n", cfspi->rx_ppck_len); in dbgfs_state()
158 "Current TX len: %d\n", cfspi->tx_cpck_len); in dbgfs_state()
160 "Current RX len: %d\n", cfspi->rx_cpck_len); in dbgfs_state()
162 "Next TX len: %d\n", cfspi->tx_npck_len); in dbgfs_state()
164 "Next RX len: %d\n", cfspi->rx_npck_len); in dbgfs_state()
207 struct cfspi *cfspi; in dbgfs_frame() local
209 cfspi = file->private_data; in dbgfs_frame()
219 "Tx data (Len: %d):\n", cfspi->tx_cpck_len); in dbgfs_frame()
222 cfspi->xfer.va_tx[0], in dbgfs_frame()
223 (cfspi->tx_cpck_len + SPI_CMD_SZ), 100); in dbgfs_frame()
226 "Rx data (Len: %d):\n", cfspi->rx_cpck_len); in dbgfs_frame()
229 cfspi->xfer.va_rx, in dbgfs_frame()
230 (cfspi->rx_cpck_len + SPI_CMD_SZ), 100); in dbgfs_frame()
250 static inline void dev_debugfs_add(struct cfspi *cfspi) in dev_debugfs_add() argument
252 cfspi->dbgfs_dir = debugfs_create_dir(cfspi->pdev->name, dbgfs_root); in dev_debugfs_add()
253 cfspi->dbgfs_state = debugfs_create_file("state", S_IRUGO, in dev_debugfs_add()
254 cfspi->dbgfs_dir, cfspi, in dev_debugfs_add()
256 cfspi->dbgfs_frame = debugfs_create_file("frame", S_IRUGO, in dev_debugfs_add()
257 cfspi->dbgfs_dir, cfspi, in dev_debugfs_add()
261 inline void cfspi_dbg_state(struct cfspi *cfspi, int state) in cfspi_dbg_state() argument
263 cfspi->dbg_state = state; in cfspi_dbg_state()
275 static inline void dev_debugfs_add(struct cfspi *cfspi) in dev_debugfs_add() argument
279 static inline void dev_debugfs_rem(struct cfspi *cfspi) in dev_debugfs_rem() argument
283 inline void cfspi_dbg_state(struct cfspi *cfspi, int state) in cfspi_dbg_state() argument
331 int cfspi_xmitfrm(struct cfspi *cfspi, u8 *buf, size_t len) in cfspi_xmitfrm() argument
336 if (cfspi->slave && !cfspi->slave_talked) in cfspi_xmitfrm()
337 cfspi->slave_talked = true; in cfspi_xmitfrm()
345 skb = skb_dequeue(&cfspi->chead); in cfspi_xmitfrm()
368 cfspi->ndev->stats.tx_packets++; in cfspi_xmitfrm()
369 cfspi->ndev->stats.tx_bytes += skb->len; in cfspi_xmitfrm()
385 int cfspi_xmitlen(struct cfspi *cfspi) in cfspi_xmitlen() argument
395 while (skb_peek(&cfspi->chead)) { in cfspi_xmitlen()
396 skb = skb_dequeue_tail(&cfspi->chead); in cfspi_xmitlen()
397 skb_queue_head(&cfspi->qhead, skb); in cfspi_xmitlen()
405 skb = skb_dequeue(&cfspi->qhead); in cfspi_xmitlen()
429 skb_queue_tail(&cfspi->chead, skb); in cfspi_xmitlen()
434 skb_queue_head(&cfspi->qhead, skb); in cfspi_xmitlen()
443 if (cfspi->flow_off_sent && cfspi->qhead.qlen < cfspi->qd_low_mark && in cfspi_xmitlen()
444 cfspi->cfdev.flowctrl) { in cfspi_xmitlen()
445 cfspi->flow_off_sent = 0; in cfspi_xmitlen()
446 cfspi->cfdev.flowctrl(cfspi->ndev, 1); in cfspi_xmitlen()
454 struct cfspi *cfspi = (struct cfspi *)ifc->priv; in cfspi_ss_cb() local
460 if (cfspi->slave && !cfspi->slave_talked) { in cfspi_ss_cb()
466 spin_lock(&cfspi->lock); in cfspi_ss_cb()
468 set_bit(SPI_SS_ON, &cfspi->state); in cfspi_ss_cb()
469 set_bit(SPI_XFER, &cfspi->state); in cfspi_ss_cb()
471 set_bit(SPI_SS_OFF, &cfspi->state); in cfspi_ss_cb()
474 spin_unlock(&cfspi->lock); in cfspi_ss_cb()
478 wake_up_interruptible(&cfspi->wait); in cfspi_ss_cb()
483 struct cfspi *cfspi = (struct cfspi *)ifc->priv; in cfspi_xfer_done_cb() local
486 complete(&cfspi->comp); in cfspi_xfer_done_cb()
491 struct cfspi *cfspi = NULL; in cfspi_xmit() local
496 cfspi = netdev_priv(dev); in cfspi_xmit()
498 skb_queue_tail(&cfspi->qhead, skb); in cfspi_xmit()
500 spin_lock_irqsave(&cfspi->lock, flags); in cfspi_xmit()
501 if (!test_and_set_bit(SPI_XFER, &cfspi->state)) { in cfspi_xmit()
503 wake_up_interruptible(&cfspi->wait); in cfspi_xmit()
505 spin_unlock_irqrestore(&cfspi->lock, flags); in cfspi_xmit()
508 if (!cfspi->flow_off_sent && in cfspi_xmit()
509 cfspi->qhead.qlen > cfspi->qd_high_mark && in cfspi_xmit()
510 cfspi->cfdev.flowctrl) { in cfspi_xmit()
511 cfspi->flow_off_sent = 1; in cfspi_xmit()
512 cfspi->cfdev.flowctrl(cfspi->ndev, 0); in cfspi_xmit()
518 int cfspi_rxfrm(struct cfspi *cfspi, u8 *buf, size_t len) in cfspi_rxfrm() argument
548 skb = netdev_alloc_skb(cfspi->ndev, pkt_len + 1); in cfspi_rxfrm()
564 res = cfspi_xmit(skb, cfspi->ndev); in cfspi_rxfrm()
567 cfspi->ndev->stats.rx_packets++; in cfspi_rxfrm()
568 cfspi->ndev->stats.rx_bytes += pkt_len; in cfspi_rxfrm()
570 cfspi->ndev->stats.rx_dropped++; in cfspi_rxfrm()
598 struct cfspi *cfspi = netdev_priv(dev); in cfspi_init() local
601 cfspi->flow_off_sent = 0; in cfspi_init()
602 cfspi->qd_low_mark = LOW_WATER_MARK; in cfspi_init()
603 cfspi->qd_high_mark = HIGH_WATER_MARK; in cfspi_init()
607 cfspi->slave = true; in cfspi_init()
608 cfspi->slave_talked = false; in cfspi_init()
610 cfspi->slave = false; in cfspi_init()
611 cfspi->slave_talked = false; in cfspi_init()
615 cfspi->xfer.va_tx[0] = dma_alloc(&cfspi->xfer.pa_tx[0]); in cfspi_init()
616 if (!cfspi->xfer.va_tx[0]) { in cfspi_init()
621 cfspi->xfer.va_rx = dma_alloc(&cfspi->xfer.pa_rx); in cfspi_init()
623 if (!cfspi->xfer.va_rx) { in cfspi_init()
629 INIT_WORK(&cfspi->work, cfspi_xfer); in cfspi_init()
632 spin_lock_init(&cfspi->lock); in cfspi_init()
635 cfspi->flow_stop = false; in cfspi_init()
638 init_waitqueue_head(&cfspi->wait); in cfspi_init()
641 cfspi->wq = create_singlethread_workqueue(dev->name); in cfspi_init()
642 if (!cfspi->wq) { in cfspi_init()
649 init_completion(&cfspi->comp); in cfspi_init()
652 dev_debugfs_add(cfspi); in cfspi_init()
655 cfspi->ifc.ss_cb = cfspi_ss_cb; in cfspi_init()
656 cfspi->ifc.xfer_done_cb = cfspi_xfer_done_cb; in cfspi_init()
657 cfspi->ifc.priv = cfspi; in cfspi_init()
661 list_add_tail(&cfspi->list, &cfspi_list); in cfspi_init()
665 queue_work(cfspi->wq, &cfspi->work); in cfspi_init()
670 dma_free(cfspi->xfer.va_rx, cfspi->xfer.pa_rx); in cfspi_init()
672 dma_free(cfspi->xfer.va_tx[0], cfspi->xfer.pa_tx[0]); in cfspi_init()
679 struct cfspi *cfspi = netdev_priv(dev); in cfspi_uninit() local
683 list_del(&cfspi->list); in cfspi_uninit()
686 cfspi->ndev = NULL; in cfspi_uninit()
688 dma_free(cfspi->xfer.va_rx, cfspi->xfer.pa_rx); in cfspi_uninit()
689 dma_free(cfspi->xfer.va_tx[0], cfspi->xfer.pa_tx[0]); in cfspi_uninit()
690 set_bit(SPI_TERMINATE, &cfspi->state); in cfspi_uninit()
691 wake_up_interruptible(&cfspi->wait); in cfspi_uninit()
692 destroy_workqueue(cfspi->wq); in cfspi_uninit()
694 dev_debugfs_rem(cfspi); in cfspi_uninit()
708 struct cfspi *cfspi = netdev_priv(dev); in cfspi_setup() local
716 skb_queue_head_init(&cfspi->qhead); in cfspi_setup()
717 skb_queue_head_init(&cfspi->chead); in cfspi_setup()
718 cfspi->cfdev.link_select = CAIF_LINK_HIGH_BANDW; in cfspi_setup()
719 cfspi->cfdev.use_frag = false; in cfspi_setup()
720 cfspi->cfdev.use_stx = false; in cfspi_setup()
721 cfspi->cfdev.use_fcs = false; in cfspi_setup()
722 cfspi->ndev = dev; in cfspi_setup()
727 struct cfspi *cfspi = NULL; in cfspi_spi_probe() local
736 ndev = alloc_netdev(sizeof(struct cfspi), "cfspi%d", in cfspi_spi_probe()
741 cfspi = netdev_priv(ndev); in cfspi_spi_probe()
743 cfspi->ndev = ndev; in cfspi_spi_probe()
744 cfspi->pdev = pdev; in cfspi_spi_probe()
747 cfspi->dev = dev; in cfspi_spi_probe()
749 dev->ifc = &cfspi->ifc; in cfspi_spi_probe()
775 struct cfspi *cfspi = NULL; in cfspi_exit_module() local
778 cfspi = list_entry(list_node, struct cfspi, list); in cfspi_exit_module()
779 unregister_netdev(cfspi->ndev); in cfspi_exit_module()