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", 0444, in dev_debugfs_add()
254 cfspi->dbgfs_dir, cfspi, in dev_debugfs_add()
256 cfspi->dbgfs_frame = debugfs_create_file("frame", 0444, 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
547 skb = netdev_alloc_skb(cfspi->ndev, pkt_len + 1); in cfspi_rxfrm()
562 res = cfspi_xmit(skb, cfspi->ndev); in cfspi_rxfrm()
565 cfspi->ndev->stats.rx_packets++; in cfspi_rxfrm()
566 cfspi->ndev->stats.rx_bytes += pkt_len; in cfspi_rxfrm()
568 cfspi->ndev->stats.rx_dropped++; in cfspi_rxfrm()
596 struct cfspi *cfspi = netdev_priv(dev); in cfspi_init() local
599 cfspi->flow_off_sent = 0; in cfspi_init()
600 cfspi->qd_low_mark = LOW_WATER_MARK; in cfspi_init()
601 cfspi->qd_high_mark = HIGH_WATER_MARK; in cfspi_init()
605 cfspi->slave = true; in cfspi_init()
606 cfspi->slave_talked = false; in cfspi_init()
608 cfspi->slave = false; in cfspi_init()
609 cfspi->slave_talked = false; in cfspi_init()
613 cfspi->xfer.va_tx[0] = dma_alloc(&cfspi->xfer.pa_tx[0]); in cfspi_init()
614 if (!cfspi->xfer.va_tx[0]) { in cfspi_init()
619 cfspi->xfer.va_rx = dma_alloc(&cfspi->xfer.pa_rx); in cfspi_init()
621 if (!cfspi->xfer.va_rx) { in cfspi_init()
627 INIT_WORK(&cfspi->work, cfspi_xfer); in cfspi_init()
630 spin_lock_init(&cfspi->lock); in cfspi_init()
633 cfspi->flow_stop = false; in cfspi_init()
636 init_waitqueue_head(&cfspi->wait); in cfspi_init()
639 cfspi->wq = create_singlethread_workqueue(dev->name); in cfspi_init()
640 if (!cfspi->wq) { in cfspi_init()
647 init_completion(&cfspi->comp); in cfspi_init()
650 dev_debugfs_add(cfspi); in cfspi_init()
653 cfspi->ifc.ss_cb = cfspi_ss_cb; in cfspi_init()
654 cfspi->ifc.xfer_done_cb = cfspi_xfer_done_cb; in cfspi_init()
655 cfspi->ifc.priv = cfspi; in cfspi_init()
659 list_add_tail(&cfspi->list, &cfspi_list); in cfspi_init()
663 queue_work(cfspi->wq, &cfspi->work); in cfspi_init()
668 dma_free(cfspi->xfer.va_rx, cfspi->xfer.pa_rx); in cfspi_init()
670 dma_free(cfspi->xfer.va_tx[0], cfspi->xfer.pa_tx[0]); in cfspi_init()
677 struct cfspi *cfspi = netdev_priv(dev); in cfspi_uninit() local
681 list_del(&cfspi->list); in cfspi_uninit()
684 cfspi->ndev = NULL; in cfspi_uninit()
686 dma_free(cfspi->xfer.va_rx, cfspi->xfer.pa_rx); in cfspi_uninit()
687 dma_free(cfspi->xfer.va_tx[0], cfspi->xfer.pa_tx[0]); in cfspi_uninit()
688 set_bit(SPI_TERMINATE, &cfspi->state); in cfspi_uninit()
689 wake_up_interruptible(&cfspi->wait); in cfspi_uninit()
690 destroy_workqueue(cfspi->wq); in cfspi_uninit()
692 dev_debugfs_rem(cfspi); in cfspi_uninit()
706 struct cfspi *cfspi = netdev_priv(dev); in cfspi_setup() local
714 skb_queue_head_init(&cfspi->qhead); in cfspi_setup()
715 skb_queue_head_init(&cfspi->chead); in cfspi_setup()
716 cfspi->cfdev.link_select = CAIF_LINK_HIGH_BANDW; in cfspi_setup()
717 cfspi->cfdev.use_frag = false; in cfspi_setup()
718 cfspi->cfdev.use_stx = false; in cfspi_setup()
719 cfspi->cfdev.use_fcs = false; in cfspi_setup()
720 cfspi->ndev = dev; in cfspi_setup()
725 struct cfspi *cfspi = NULL; in cfspi_spi_probe() local
734 ndev = alloc_netdev(sizeof(struct cfspi), "cfspi%d", in cfspi_spi_probe()
739 cfspi = netdev_priv(ndev); in cfspi_spi_probe()
741 cfspi->ndev = ndev; in cfspi_spi_probe()
742 cfspi->pdev = pdev; in cfspi_spi_probe()
745 cfspi->dev = dev; in cfspi_spi_probe()
747 dev->ifc = &cfspi->ifc; in cfspi_spi_probe()
773 struct cfspi *cfspi = NULL; in cfspi_exit_module() local
776 cfspi = list_entry(list_node, struct cfspi, list); in cfspi_exit_module()
777 unregister_netdev(cfspi->ndev); in cfspi_exit_module()