Lines Matching refs:cp
116 int (*tx)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data);
117 int (*rx)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp);
118 int (*rxdb)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp);
224 struct imx_mu_con_priv *cp, in imx_mu_generic_tx() argument
231 switch (cp->type) { in imx_mu_generic_tx()
233 imx_mu_write(priv, *arg, priv->dcfg->xTR + cp->idx * 4); in imx_mu_generic_tx()
234 imx_mu_xcr_rmw(priv, IMX_MU_TCR, IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx), 0); in imx_mu_generic_tx()
237 imx_mu_xcr_rmw(priv, IMX_MU_GCR, IMX_MU_xCR_GIRn(priv->dcfg->type, cp->idx), 0); in imx_mu_generic_tx()
238 queue_work(system_bh_wq, &cp->txdb_work); in imx_mu_generic_tx()
241 imx_mu_write(priv, IMX_MU_xCR_GIRn(priv->dcfg->type, cp->idx), in imx_mu_generic_tx()
248 !(val & IMX_MU_xCR_GIRn(priv->dcfg->type, cp->idx)), in imx_mu_generic_tx()
254 cp->type, ++count); in imx_mu_generic_tx()
259 dev_warn_ratelimited(priv->dev, "Send data on wrong channel type: %d\n", cp->type); in imx_mu_generic_tx()
267 struct imx_mu_con_priv *cp) in imx_mu_generic_rx() argument
271 dat = imx_mu_read(priv, priv->dcfg->xRR + (cp->idx) * 4); in imx_mu_generic_rx()
272 mbox_chan_received_data(cp->chan, (void *)&dat); in imx_mu_generic_rx()
278 struct imx_mu_con_priv *cp) in imx_mu_generic_rxdb() argument
280 imx_mu_write(priv, IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx), in imx_mu_generic_rxdb()
282 mbox_chan_received_data(cp->chan, NULL); in imx_mu_generic_rxdb()
287 static int imx_mu_specific_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data) in imx_mu_specific_tx() argument
303 switch (cp->type) { in imx_mu_specific_tx()
333 imx_mu_xcr_rmw(priv, IMX_MU_TCR, IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx), 0); in imx_mu_specific_tx()
336 dev_warn_ratelimited(priv->dev, "Send data on wrong channel type: %d\n", cp->type); in imx_mu_specific_tx()
343 static int imx_mu_specific_rx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp) in imx_mu_specific_rx() argument
381 mbox_chan_received_data(cp->chan, (void *)priv->msg); in imx_mu_specific_rx()
386 static int imx_mu_seco_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, in imx_mu_seco_tx() argument
397 switch (cp->type) { in imx_mu_seco_tx()
421 IMX_MU_xCR_GIRn(priv->dcfg->type, cp->idx), 0); in imx_mu_seco_tx()
441 queue_work(system_bh_wq, &cp->txdb_work); in imx_mu_seco_tx()
447 cp->type); in imx_mu_seco_tx()
454 static int imx_mu_seco_rxdb(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp) in imx_mu_seco_rxdb() argument
486 imx_mu_write(priv, IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx), in imx_mu_seco_rxdb()
494 mbox_chan_received_data(cp->chan, (void *)&msg); in imx_mu_seco_rxdb()
499 mbox_chan_received_data(cp->chan, ERR_PTR(err)); in imx_mu_seco_rxdb()
507 struct imx_mu_con_priv *cp = from_work(cp, t, txdb_work); in imx_mu_txdb_work() local
509 mbox_chan_txdone(cp->chan, 0); in imx_mu_txdb_work()
516 struct imx_mu_con_priv *cp = chan->con_priv; in imx_mu_isr() local
519 switch (cp->type) { in imx_mu_isr()
523 val &= IMX_MU_xSR_TEn(priv->dcfg->type, cp->idx) & in imx_mu_isr()
524 (ctrl & IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx)); in imx_mu_isr()
529 val &= IMX_MU_xSR_RFn(priv->dcfg->type, cp->idx) & in imx_mu_isr()
530 (ctrl & IMX_MU_xCR_RIEn(priv->dcfg->type, cp->idx)); in imx_mu_isr()
535 val &= IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx) & in imx_mu_isr()
536 (ctrl & IMX_MU_xCR_GIEn(priv->dcfg->type, cp->idx)); in imx_mu_isr()
542 cp->type); in imx_mu_isr()
549 if ((val == IMX_MU_xSR_TEn(priv->dcfg->type, cp->idx)) && in imx_mu_isr()
550 (cp->type == IMX_MU_TYPE_TX)) { in imx_mu_isr()
551 imx_mu_xcr_rmw(priv, IMX_MU_TCR, 0, IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx)); in imx_mu_isr()
553 } else if ((val == IMX_MU_xSR_RFn(priv->dcfg->type, cp->idx)) && in imx_mu_isr()
554 (cp->type == IMX_MU_TYPE_RX)) { in imx_mu_isr()
555 priv->dcfg->rx(priv, cp); in imx_mu_isr()
556 } else if ((val == IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx)) && in imx_mu_isr()
557 (cp->type == IMX_MU_TYPE_RXDB)) { in imx_mu_isr()
558 priv->dcfg->rxdb(priv, cp); in imx_mu_isr()
573 struct imx_mu_con_priv *cp = chan->con_priv; in imx_mu_send_data() local
575 return priv->dcfg->tx(priv, cp, data); in imx_mu_send_data()
581 struct imx_mu_con_priv *cp = chan->con_priv; in imx_mu_startup() local
586 if (cp->type == IMX_MU_TYPE_TXDB_V2) in imx_mu_startup()
589 if (cp->type == IMX_MU_TYPE_TXDB) { in imx_mu_startup()
591 INIT_WORK(&cp->txdb_work, imx_mu_txdb_work); in imx_mu_startup()
602 ret = request_irq(priv->irq[cp->type], imx_mu_isr, irq_flag, cp->irq_desc, chan); in imx_mu_startup()
604 dev_err(priv->dev, "Unable to acquire IRQ %d\n", priv->irq[cp->type]); in imx_mu_startup()
608 switch (cp->type) { in imx_mu_startup()
610 imx_mu_xcr_rmw(priv, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type, cp->idx), 0); in imx_mu_startup()
613 imx_mu_xcr_rmw(priv, IMX_MU_GIER, IMX_MU_xCR_GIEn(priv->dcfg->type, cp->idx), 0); in imx_mu_startup()
625 struct imx_mu_con_priv *cp = chan->con_priv; in imx_mu_shutdown() local
629 if (cp->type == IMX_MU_TYPE_TXDB_V2) { in imx_mu_shutdown()
634 if (cp->type == IMX_MU_TYPE_TXDB) { in imx_mu_shutdown()
635 cancel_work_sync(&cp->txdb_work); in imx_mu_shutdown()
640 switch (cp->type) { in imx_mu_shutdown()
642 imx_mu_xcr_rmw(priv, IMX_MU_TCR, 0, IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx)); in imx_mu_shutdown()
645 imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_MU_xCR_RIEn(priv->dcfg->type, cp->idx)); in imx_mu_shutdown()
648 imx_mu_xcr_rmw(priv, IMX_MU_GIER, 0, IMX_MU_xCR_GIEn(priv->dcfg->type, cp->idx)); in imx_mu_shutdown()
661 free_irq(priv->irq[cp->type], chan); in imx_mu_shutdown()
787 struct imx_mu_con_priv *cp = &priv->con_priv[i]; in imx_mu_init_generic() local
789 cp->idx = i % 4; in imx_mu_init_generic()
790 cp->type = i >> 2; in imx_mu_init_generic()
791 cp->chan = &priv->mbox_chans[i]; in imx_mu_init_generic()
792 priv->mbox_chans[i].con_priv = cp; in imx_mu_init_generic()
793 snprintf(cp->irq_desc, sizeof(cp->irq_desc), in imx_mu_init_generic()
794 "%s[%i-%u]", dev_name(priv->dev), cp->type, cp->idx); in imx_mu_init_generic()
824 struct imx_mu_con_priv *cp = &priv->con_priv[i]; in imx_mu_init_specific() local
826 cp->idx = i < 2 ? 0 : i - 2; in imx_mu_init_specific()
827 cp->type = i < 2 ? i : IMX_MU_TYPE_RXDB; in imx_mu_init_specific()
828 cp->chan = &priv->mbox_chans[i]; in imx_mu_init_specific()
829 priv->mbox_chans[i].con_priv = cp; in imx_mu_init_specific()
830 snprintf(cp->irq_desc, sizeof(cp->irq_desc), in imx_mu_init_specific()
831 "%s[%i-%u]", dev_name(priv->dev), cp->type, cp->idx); in imx_mu_init_specific()