Lines Matching refs:mbox

70 static inline int altera_mbox_full(struct altera_mbox *mbox)  in altera_mbox_full()  argument
74 status = readl_relaxed(mbox->mbox_base + MAILBOX_STS_REG); in altera_mbox_full()
78 static inline int altera_mbox_pending(struct altera_mbox *mbox) in altera_mbox_pending() argument
82 status = readl_relaxed(mbox->mbox_base + MAILBOX_STS_REG); in altera_mbox_pending()
86 static void altera_mbox_rx_intmask(struct altera_mbox *mbox, bool enable) in altera_mbox_rx_intmask() argument
90 mask = readl_relaxed(mbox->mbox_base + MAILBOX_INTMASK_REG); in altera_mbox_rx_intmask()
95 writel_relaxed(mask, mbox->mbox_base + MAILBOX_INTMASK_REG); in altera_mbox_rx_intmask()
98 static void altera_mbox_tx_intmask(struct altera_mbox *mbox, bool enable) in altera_mbox_tx_intmask() argument
102 mask = readl_relaxed(mbox->mbox_base + MAILBOX_INTMASK_REG); in altera_mbox_tx_intmask()
107 writel_relaxed(mask, mbox->mbox_base + MAILBOX_INTMASK_REG); in altera_mbox_tx_intmask()
110 static bool altera_mbox_is_sender(struct altera_mbox *mbox) in altera_mbox_is_sender() argument
117 writel_relaxed(MBOX_MAGIC, mbox->mbox_base + MAILBOX_PTR_REG); in altera_mbox_is_sender()
118 reg = readl_relaxed(mbox->mbox_base + MAILBOX_PTR_REG); in altera_mbox_is_sender()
121 writel_relaxed(0, mbox->mbox_base + MAILBOX_PTR_REG); in altera_mbox_is_sender()
129 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_rx_data() local
132 if (altera_mbox_pending(mbox)) { in altera_mbox_rx_data()
134 readl_relaxed(mbox->mbox_base + MAILBOX_PTR_REG); in altera_mbox_rx_data()
136 readl_relaxed(mbox->mbox_base + MAILBOX_CMD_REG); in altera_mbox_rx_data()
144 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_poll_rx() local
148 mod_timer(&mbox->rxpoll_timer, in altera_mbox_poll_rx()
155 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_tx_interrupt() local
157 altera_mbox_tx_intmask(mbox, false); in altera_mbox_tx_interrupt()
174 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_startup_sender() local
176 if (mbox->intr_mode) { in altera_mbox_startup_sender()
177 ret = request_irq(mbox->irq, altera_mbox_tx_interrupt, 0, in altera_mbox_startup_sender()
180 dev_err(mbox->dev, in altera_mbox_startup_sender()
193 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_startup_receiver() local
195 if (mbox->intr_mode) { in altera_mbox_startup_receiver()
196 ret = request_irq(mbox->irq, altera_mbox_rx_interrupt, 0, in altera_mbox_startup_receiver()
199 mbox->intr_mode = false; in altera_mbox_startup_receiver()
203 altera_mbox_rx_intmask(mbox, true); in altera_mbox_startup_receiver()
209 setup_timer(&mbox->rxpoll_timer, altera_mbox_poll_rx, in altera_mbox_startup_receiver()
211 mod_timer(&mbox->rxpoll_timer, in altera_mbox_startup_receiver()
219 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_send_data() local
222 if (!mbox || !data) in altera_mbox_send_data()
224 if (!mbox->is_sender) { in altera_mbox_send_data()
225 dev_warn(mbox->dev, in altera_mbox_send_data()
230 if (altera_mbox_full(mbox)) in altera_mbox_send_data()
234 if (mbox->intr_mode) in altera_mbox_send_data()
235 altera_mbox_tx_intmask(mbox, true); in altera_mbox_send_data()
238 writel_relaxed(udata[MBOX_PTR], mbox->mbox_base + MAILBOX_PTR_REG); in altera_mbox_send_data()
239 writel_relaxed(udata[MBOX_CMD], mbox->mbox_base + MAILBOX_CMD_REG); in altera_mbox_send_data()
246 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_last_tx_done() local
249 return altera_mbox_full(mbox) ? false : true; in altera_mbox_last_tx_done()
254 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_peek_data() local
256 return altera_mbox_pending(mbox) ? true : false; in altera_mbox_peek_data()
261 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_startup() local
264 if (!mbox) in altera_mbox_startup()
267 if (mbox->is_sender) in altera_mbox_startup()
277 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan); in altera_mbox_shutdown() local
279 if (mbox->intr_mode) { in altera_mbox_shutdown()
281 writel_relaxed(~0, mbox->mbox_base + MAILBOX_INTMASK_REG); in altera_mbox_shutdown()
282 free_irq(mbox->irq, chan); in altera_mbox_shutdown()
283 } else if (!mbox->is_sender) { in altera_mbox_shutdown()
284 del_timer_sync(&mbox->rxpoll_timer); in altera_mbox_shutdown()
298 struct altera_mbox *mbox; in altera_mbox_probe() local
303 mbox = devm_kzalloc(&pdev->dev, sizeof(*mbox), in altera_mbox_probe()
305 if (!mbox) in altera_mbox_probe()
315 mbox->mbox_base = devm_ioremap_resource(&pdev->dev, regs); in altera_mbox_probe()
316 if (IS_ERR(mbox->mbox_base)) in altera_mbox_probe()
317 return PTR_ERR(mbox->mbox_base); in altera_mbox_probe()
320 mbox->is_sender = altera_mbox_is_sender(mbox); in altera_mbox_probe()
322 mbox->irq = platform_get_irq(pdev, 0); in altera_mbox_probe()
323 if (mbox->irq >= 0) in altera_mbox_probe()
324 mbox->intr_mode = true; in altera_mbox_probe()
326 mbox->dev = &pdev->dev; in altera_mbox_probe()
329 chans[0].con_priv = mbox; in altera_mbox_probe()
330 mbox->controller.dev = mbox->dev; in altera_mbox_probe()
331 mbox->controller.num_chans = 1; in altera_mbox_probe()
332 mbox->controller.chans = chans; in altera_mbox_probe()
333 mbox->controller.ops = &altera_mbox_ops; in altera_mbox_probe()
335 if (mbox->is_sender) { in altera_mbox_probe()
336 if (mbox->intr_mode) { in altera_mbox_probe()
337 mbox->controller.txdone_irq = true; in altera_mbox_probe()
339 mbox->controller.txdone_poll = true; in altera_mbox_probe()
340 mbox->controller.txpoll_period = MBOX_POLLING_MS; in altera_mbox_probe()
344 ret = mbox_controller_register(&mbox->controller); in altera_mbox_probe()
350 platform_set_drvdata(pdev, mbox); in altera_mbox_probe()
357 struct altera_mbox *mbox = platform_get_drvdata(pdev); in altera_mbox_remove() local
359 if (!mbox) in altera_mbox_remove()
362 mbox_controller_unregister(&mbox->controller); in altera_mbox_remove()