• Home
  • Raw
  • Download

Lines Matching refs:cp

106 	int (*tx)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data);
107 int (*rx)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp);
108 int (*rxdb)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp);
214 struct imx_mu_con_priv *cp, in imx_mu_generic_tx() argument
219 switch (cp->type) { in imx_mu_generic_tx()
221 imx_mu_write(priv, *arg, priv->dcfg->xTR + cp->idx * 4); in imx_mu_generic_tx()
222 imx_mu_xcr_rmw(priv, IMX_MU_TCR, IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx), 0); in imx_mu_generic_tx()
225 imx_mu_xcr_rmw(priv, IMX_MU_GCR, IMX_MU_xCR_GIRn(priv->dcfg->type, cp->idx), 0); in imx_mu_generic_tx()
226 tasklet_schedule(&cp->txdb_tasklet); in imx_mu_generic_tx()
229 dev_warn_ratelimited(priv->dev, "Send data on wrong channel type: %d\n", cp->type); in imx_mu_generic_tx()
237 struct imx_mu_con_priv *cp) in imx_mu_generic_rx() argument
241 dat = imx_mu_read(priv, priv->dcfg->xRR + (cp->idx) * 4); in imx_mu_generic_rx()
242 mbox_chan_received_data(cp->chan, (void *)&dat); in imx_mu_generic_rx()
248 struct imx_mu_con_priv *cp) in imx_mu_generic_rxdb() argument
250 imx_mu_write(priv, IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx), in imx_mu_generic_rxdb()
252 mbox_chan_received_data(cp->chan, NULL); in imx_mu_generic_rxdb()
257 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
274 switch (cp->type) { in imx_mu_specific_tx()
304 imx_mu_xcr_rmw(priv, IMX_MU_TCR, IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx), 0); in imx_mu_specific_tx()
307 dev_warn_ratelimited(priv->dev, "Send data on wrong channel type: %d\n", cp->type); in imx_mu_specific_tx()
314 static int imx_mu_specific_rx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp) in imx_mu_specific_rx() argument
351 mbox_chan_received_data(cp->chan, (void *)priv->msg); in imx_mu_specific_rx()
356 static int imx_mu_seco_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, in imx_mu_seco_tx() argument
367 switch (cp->type) { in imx_mu_seco_tx()
391 IMX_MU_xCR_GIRn(priv->dcfg->type, cp->idx), 0); in imx_mu_seco_tx()
411 tasklet_schedule(&cp->txdb_tasklet); in imx_mu_seco_tx()
417 cp->type); in imx_mu_seco_tx()
424 static int imx_mu_seco_rxdb(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp) in imx_mu_seco_rxdb() argument
456 imx_mu_write(priv, IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx), in imx_mu_seco_rxdb()
464 mbox_chan_received_data(cp->chan, (void *)&msg); in imx_mu_seco_rxdb()
469 mbox_chan_received_data(cp->chan, ERR_PTR(err)); in imx_mu_seco_rxdb()
477 struct imx_mu_con_priv *cp = (struct imx_mu_con_priv *)data; in imx_mu_txdb_tasklet() local
479 mbox_chan_txdone(cp->chan, 0); in imx_mu_txdb_tasklet()
486 struct imx_mu_con_priv *cp = chan->con_priv; in imx_mu_isr() local
489 switch (cp->type) { in imx_mu_isr()
493 val &= IMX_MU_xSR_TEn(priv->dcfg->type, cp->idx) & in imx_mu_isr()
494 (ctrl & IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx)); in imx_mu_isr()
499 val &= IMX_MU_xSR_RFn(priv->dcfg->type, cp->idx) & in imx_mu_isr()
500 (ctrl & IMX_MU_xCR_RIEn(priv->dcfg->type, cp->idx)); in imx_mu_isr()
505 val &= IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx) & in imx_mu_isr()
506 (ctrl & IMX_MU_xCR_GIEn(priv->dcfg->type, cp->idx)); in imx_mu_isr()
512 cp->type); in imx_mu_isr()
519 if ((val == IMX_MU_xSR_TEn(priv->dcfg->type, cp->idx)) && in imx_mu_isr()
520 (cp->type == IMX_MU_TYPE_TX)) { in imx_mu_isr()
521 imx_mu_xcr_rmw(priv, IMX_MU_TCR, 0, IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx)); in imx_mu_isr()
523 } else if ((val == IMX_MU_xSR_RFn(priv->dcfg->type, cp->idx)) && in imx_mu_isr()
524 (cp->type == IMX_MU_TYPE_RX)) { in imx_mu_isr()
525 priv->dcfg->rx(priv, cp); in imx_mu_isr()
526 } else if ((val == IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx)) && in imx_mu_isr()
527 (cp->type == IMX_MU_TYPE_RXDB)) { in imx_mu_isr()
528 priv->dcfg->rxdb(priv, cp); in imx_mu_isr()
543 struct imx_mu_con_priv *cp = chan->con_priv; in imx_mu_send_data() local
545 return priv->dcfg->tx(priv, cp, data); in imx_mu_send_data()
551 struct imx_mu_con_priv *cp = chan->con_priv; in imx_mu_startup() local
556 if (cp->type == IMX_MU_TYPE_TXDB) { in imx_mu_startup()
558 tasklet_init(&cp->txdb_tasklet, imx_mu_txdb_tasklet, in imx_mu_startup()
559 (unsigned long)cp); in imx_mu_startup()
570 ret = request_irq(priv->irq[cp->type], imx_mu_isr, irq_flag, cp->irq_desc, chan); in imx_mu_startup()
572 dev_err(priv->dev, "Unable to acquire IRQ %d\n", priv->irq[cp->type]); in imx_mu_startup()
576 switch (cp->type) { in imx_mu_startup()
578 imx_mu_xcr_rmw(priv, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type, cp->idx), 0); in imx_mu_startup()
581 imx_mu_xcr_rmw(priv, IMX_MU_GIER, IMX_MU_xCR_GIEn(priv->dcfg->type, cp->idx), 0); in imx_mu_startup()
593 struct imx_mu_con_priv *cp = chan->con_priv; in imx_mu_shutdown() local
597 if (cp->type == IMX_MU_TYPE_TXDB) { in imx_mu_shutdown()
598 tasklet_kill(&cp->txdb_tasklet); in imx_mu_shutdown()
603 switch (cp->type) { in imx_mu_shutdown()
605 imx_mu_xcr_rmw(priv, IMX_MU_TCR, 0, IMX_MU_xCR_TIEn(priv->dcfg->type, cp->idx)); in imx_mu_shutdown()
608 imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_MU_xCR_RIEn(priv->dcfg->type, cp->idx)); in imx_mu_shutdown()
611 imx_mu_xcr_rmw(priv, IMX_MU_GIER, 0, IMX_MU_xCR_GIEn(priv->dcfg->type, cp->idx)); in imx_mu_shutdown()
624 free_irq(priv->irq[cp->type], chan); in imx_mu_shutdown()
719 struct imx_mu_con_priv *cp = &priv->con_priv[i]; in imx_mu_init_generic() local
721 cp->idx = i % 4; in imx_mu_init_generic()
722 cp->type = i >> 2; in imx_mu_init_generic()
723 cp->chan = &priv->mbox_chans[i]; in imx_mu_init_generic()
724 priv->mbox_chans[i].con_priv = cp; in imx_mu_init_generic()
725 snprintf(cp->irq_desc, sizeof(cp->irq_desc), in imx_mu_init_generic()
726 "imx_mu_chan[%i-%i]", cp->type, cp->idx); in imx_mu_init_generic()
754 struct imx_mu_con_priv *cp = &priv->con_priv[i]; in imx_mu_init_specific() local
756 cp->idx = i < 2 ? 0 : i - 2; in imx_mu_init_specific()
757 cp->type = i < 2 ? i : IMX_MU_TYPE_RXDB; in imx_mu_init_specific()
758 cp->chan = &priv->mbox_chans[i]; in imx_mu_init_specific()
759 priv->mbox_chans[i].con_priv = cp; in imx_mu_init_specific()
760 snprintf(cp->irq_desc, sizeof(cp->irq_desc), in imx_mu_init_specific()
761 "imx_mu_chan[%i-%i]", cp->type, cp->idx); in imx_mu_init_specific()