Lines Matching defs:mbox

60 static inline int altera_mbox_full(struct altera_mbox *mbox)
64 status = readl_relaxed(mbox->mbox_base + MAILBOX_STS_REG);
68 static inline int altera_mbox_pending(struct altera_mbox *mbox)
72 status = readl_relaxed(mbox->mbox_base + MAILBOX_STS_REG);
76 static void altera_mbox_rx_intmask(struct altera_mbox *mbox, bool enable)
80 mask = readl_relaxed(mbox->mbox_base + MAILBOX_INTMASK_REG);
85 writel_relaxed(mask, mbox->mbox_base + MAILBOX_INTMASK_REG);
88 static void altera_mbox_tx_intmask(struct altera_mbox *mbox, bool enable)
92 mask = readl_relaxed(mbox->mbox_base + MAILBOX_INTMASK_REG);
97 writel_relaxed(mask, mbox->mbox_base + MAILBOX_INTMASK_REG);
100 static bool altera_mbox_is_sender(struct altera_mbox *mbox)
107 writel_relaxed(MBOX_MAGIC, mbox->mbox_base + MAILBOX_PTR_REG);
108 reg = readl_relaxed(mbox->mbox_base + MAILBOX_PTR_REG);
111 writel_relaxed(0, mbox->mbox_base + MAILBOX_PTR_REG);
119 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
122 if (altera_mbox_pending(mbox)) {
124 readl_relaxed(mbox->mbox_base + MAILBOX_PTR_REG);
126 readl_relaxed(mbox->mbox_base + MAILBOX_CMD_REG);
133 struct altera_mbox *mbox = from_timer(mbox, t, rxpoll_timer);
135 altera_mbox_rx_data(mbox->chan);
137 mod_timer(&mbox->rxpoll_timer,
144 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
146 altera_mbox_tx_intmask(mbox, false);
163 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
165 if (mbox->intr_mode) {
166 ret = request_irq(mbox->irq, altera_mbox_tx_interrupt, 0,
169 dev_err(mbox->dev,
182 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
184 if (mbox->intr_mode) {
185 ret = request_irq(mbox->irq, altera_mbox_rx_interrupt, 0,
188 mbox->intr_mode = false;
192 altera_mbox_rx_intmask(mbox, true);
198 mbox->chan = chan;
199 timer_setup(&mbox->rxpoll_timer, altera_mbox_poll_rx, 0);
200 mod_timer(&mbox->rxpoll_timer,
208 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
211 if (!mbox || !data)
213 if (!mbox->is_sender) {
214 dev_warn(mbox->dev,
219 if (altera_mbox_full(mbox))
223 if (mbox->intr_mode)
224 altera_mbox_tx_intmask(mbox, true);
227 writel_relaxed(udata[MBOX_PTR], mbox->mbox_base + MAILBOX_PTR_REG);
228 writel_relaxed(udata[MBOX_CMD], mbox->mbox_base + MAILBOX_CMD_REG);
235 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
238 return altera_mbox_full(mbox) ? false : true;
243 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
245 return altera_mbox_pending(mbox) ? true : false;
250 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
253 if (!mbox)
256 if (mbox->is_sender)
266 struct altera_mbox *mbox = mbox_chan_to_altera_mbox(chan);
268 if (mbox->intr_mode) {
270 writel_relaxed(~0, mbox->mbox_base + MAILBOX_INTMASK_REG);
271 free_irq(mbox->irq, chan);
272 } else if (!mbox->is_sender) {
273 del_timer_sync(&mbox->rxpoll_timer);
287 struct altera_mbox *mbox;
291 mbox = devm_kzalloc(&pdev->dev, sizeof(*mbox),
293 if (!mbox)
301 mbox->mbox_base = devm_platform_ioremap_resource(pdev, 0);
302 if (IS_ERR(mbox->mbox_base))
303 return PTR_ERR(mbox->mbox_base);
306 mbox->is_sender = altera_mbox_is_sender(mbox);
308 mbox->irq = platform_get_irq(pdev, 0);
309 if (mbox->irq >= 0)
310 mbox->intr_mode = true;
312 mbox->dev = &pdev->dev;
315 chans[0].con_priv = mbox;
316 mbox->controller.dev = mbox->dev;
317 mbox->controller.num_chans = 1;
318 mbox->controller.chans = chans;
319 mbox->controller.ops = &altera_mbox_ops;
321 if (mbox->is_sender) {
322 if (mbox->intr_mode) {
323 mbox->controller.txdone_irq = true;
325 mbox->controller.txdone_poll = true;
326 mbox->controller.txpoll_period = MBOX_POLLING_MS;
330 ret = devm_mbox_controller_register(&pdev->dev, &mbox->controller);
336 platform_set_drvdata(pdev, mbox);