Lines Matching refs:mbox
80 err = chan->mbox->ops->send_data(chan, data); in msg_submit()
90 hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL); in msg_submit()
119 struct mbox_controller *mbox = in txdone_hrtimer() local
124 for (i = 0; i < mbox->num_chans; i++) { in txdone_hrtimer()
125 struct mbox_chan *chan = &mbox->chans[i]; in txdone_hrtimer()
128 txdone = chan->mbox->ops->last_tx_done(chan); in txdone_hrtimer()
137 hrtimer_forward_now(hrtimer, ms_to_ktime(mbox->txpoll_period)); in txdone_hrtimer()
174 dev_err(chan->mbox->dev, in mbox_chan_txdone()
195 dev_err(chan->mbox->dev, "Client can't run the TX ticker\n"); in mbox_client_txdone()
220 if (chan->mbox->ops->peek_data) in mbox_client_peek_data()
221 return chan->mbox->ops->peek_data(chan); in mbox_client_peek_data()
260 dev_err(chan->mbox->dev, "Try increasing MBOX_TX_QUEUE_LEN\n"); in mbox_send_message()
306 struct mbox_controller *mbox; in mbox_request_channel() local
327 list_for_each_entry(mbox, &mbox_cons, node) in mbox_request_channel()
328 if (mbox->dev->of_node == spec.np) { in mbox_request_channel()
329 chan = mbox->of_xlate(mbox, &spec); in mbox_request_channel()
340 if (chan->cl || !try_module_get(mbox->dev->driver->owner)) { in mbox_request_channel()
358 if (chan->mbox->ops->startup) { in mbox_request_channel()
359 ret = chan->mbox->ops->startup(chan); in mbox_request_channel()
414 if (chan->mbox->ops->shutdown) in mbox_free_channel()
415 chan->mbox->ops->shutdown(chan); in mbox_free_channel()
424 module_put(chan->mbox->dev->driver->owner); in mbox_free_channel()
430 of_mbox_index_xlate(struct mbox_controller *mbox, in of_mbox_index_xlate() argument
435 if (ind >= mbox->num_chans) in of_mbox_index_xlate()
438 return &mbox->chans[ind]; in of_mbox_index_xlate()
447 int mbox_controller_register(struct mbox_controller *mbox) in mbox_controller_register() argument
452 if (!mbox || !mbox->dev || !mbox->ops || !mbox->num_chans) in mbox_controller_register()
455 if (mbox->txdone_irq) in mbox_controller_register()
457 else if (mbox->txdone_poll) in mbox_controller_register()
464 if (!mbox->ops->last_tx_done) { in mbox_controller_register()
465 dev_err(mbox->dev, "last_tx_done method is absent\n"); in mbox_controller_register()
469 hrtimer_init(&mbox->poll_hrt, CLOCK_MONOTONIC, in mbox_controller_register()
471 mbox->poll_hrt.function = txdone_hrtimer; in mbox_controller_register()
474 for (i = 0; i < mbox->num_chans; i++) { in mbox_controller_register()
475 struct mbox_chan *chan = &mbox->chans[i]; in mbox_controller_register()
478 chan->mbox = mbox; in mbox_controller_register()
483 if (!mbox->of_xlate) in mbox_controller_register()
484 mbox->of_xlate = of_mbox_index_xlate; in mbox_controller_register()
487 list_add_tail(&mbox->node, &mbox_cons); in mbox_controller_register()
498 void mbox_controller_unregister(struct mbox_controller *mbox) in mbox_controller_unregister() argument
502 if (!mbox) in mbox_controller_unregister()
507 list_del(&mbox->node); in mbox_controller_unregister()
509 for (i = 0; i < mbox->num_chans; i++) in mbox_controller_unregister()
510 mbox_free_channel(&mbox->chans[i]); in mbox_controller_unregister()
512 if (mbox->txdone_poll) in mbox_controller_unregister()
513 hrtimer_cancel(&mbox->poll_hrt); in mbox_controller_unregister()