Lines Matching refs:mbox

78 	err = chan->mbox->ops->send_data(chan, data);
88 spin_lock_irqsave(&chan->mbox->poll_hrt_lock, flags);
89 hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
90 spin_unlock_irqrestore(&chan->mbox->poll_hrt_lock, flags);
120 struct mbox_controller *mbox =
126 for (i = 0; i < mbox->num_chans; i++) {
127 struct mbox_chan *chan = &mbox->chans[i];
130 txdone = chan->mbox->ops->last_tx_done(chan);
139 spin_lock_irqsave(&mbox->poll_hrt_lock, flags);
141 hrtimer_forward_now(hrtimer, ms_to_ktime(mbox->txpoll_period));
142 spin_unlock_irqrestore(&mbox->poll_hrt_lock, flags);
180 dev_err(chan->mbox->dev,
201 dev_err(chan->mbox->dev, "Client can't run the TX ticker\n");
226 if (chan->mbox->ops->peek_data)
227 return chan->mbox->ops->peek_data(chan);
266 dev_err(chan->mbox->dev, "Try increasing MBOX_TX_QUEUE_LEN\n");
310 if (!chan->mbox->ops->flush)
313 ret = chan->mbox->ops->flush(chan, timeout);
327 if (chan->cl || !try_module_get(chan->mbox->dev->driver->owner)) {
344 if (chan->mbox->ops->startup) {
345 ret = chan->mbox->ops->startup(chan);
406 struct mbox_controller *mbox;
419 "#mbox-cells", index, &spec)) {
426 list_for_each_entry(mbox, &mbox_cons, node)
427 if (mbox->dev->of_node == spec.np) {
428 chan = mbox->of_xlate(mbox, &spec);
462 if (!of_get_property(np, "mbox-names", NULL)) {
464 "%s() requires an \"mbox-names\" property\n", __func__);
468 of_property_for_each_string(np, "mbox-names", prop, mbox_name) {
492 if (chan->mbox->ops->shutdown)
493 chan->mbox->ops->shutdown(chan);
502 module_put(chan->mbox->dev->driver->owner);
508 of_mbox_index_xlate(struct mbox_controller *mbox,
513 if (ind >= mbox->num_chans)
516 return &mbox->chans[ind];
521 * @mbox: Pointer to the mailbox controller.
525 int mbox_controller_register(struct mbox_controller *mbox)
530 if (!mbox || !mbox->dev || !mbox->ops || !mbox->num_chans)
533 if (mbox->txdone_irq)
535 else if (mbox->txdone_poll)
542 if (!mbox->ops->last_tx_done) {
543 dev_err(mbox->dev, "last_tx_done method is absent\n");
547 hrtimer_init(&mbox->poll_hrt, CLOCK_MONOTONIC,
549 mbox->poll_hrt.function = txdone_hrtimer;
550 spin_lock_init(&mbox->poll_hrt_lock);
553 for (i = 0; i < mbox->num_chans; i++) {
554 struct mbox_chan *chan = &mbox->chans[i];
557 chan->mbox = mbox;
562 if (!mbox->of_xlate)
563 mbox->of_xlate = of_mbox_index_xlate;
566 list_add_tail(&mbox->node, &mbox_cons);
575 * @mbox: Pointer to the mailbox controller.
577 void mbox_controller_unregister(struct mbox_controller *mbox)
581 if (!mbox)
586 list_del(&mbox->node);
588 for (i = 0; i < mbox->num_chans; i++)
589 mbox_free_channel(&mbox->chans[i]);
591 if (mbox->txdone_poll)
592 hrtimer_cancel(&mbox->poll_hrt);
600 struct mbox_controller **mbox = res;
602 mbox_controller_unregister(*mbox);
607 struct mbox_controller **mbox = res;
609 if (WARN_ON(!mbox || !*mbox))
612 return *mbox == data;
618 * @mbox: mailbox controller being registered
628 struct mbox_controller *mbox)
638 err = mbox_controller_register(mbox);
645 *ptr = mbox;
654 * @mbox: mailbox controller being unregistered
661 void devm_mbox_controller_unregister(struct device *dev, struct mbox_controller *mbox)
664 devm_mbox_controller_match, mbox));