Lines Matching defs:apple_mbox

94 struct apple_mbox {
110 static bool apple_mbox_hw_can_send(struct apple_mbox *apple_mbox)
113 readl_relaxed(apple_mbox->regs + apple_mbox->hw->a2i_control);
115 return !(mbox_ctrl & apple_mbox->hw->control_full);
118 static bool apple_mbox_hw_send_empty(struct apple_mbox *apple_mbox)
121 readl_relaxed(apple_mbox->regs + apple_mbox->hw->a2i_control);
123 return mbox_ctrl & apple_mbox->hw->control_empty;
126 static int apple_mbox_hw_send(struct apple_mbox *apple_mbox,
129 if (!apple_mbox_hw_can_send(apple_mbox))
132 dev_dbg(apple_mbox->dev, "> TX %016llx %08x\n", msg->msg0, msg->msg1);
134 writeq_relaxed(msg->msg0, apple_mbox->regs + apple_mbox->hw->a2i_send0);
136 apple_mbox->regs + apple_mbox->hw->a2i_send1);
141 static bool apple_mbox_hw_can_recv(struct apple_mbox *apple_mbox)
144 readl_relaxed(apple_mbox->regs + apple_mbox->hw->i2a_control);
146 return !(mbox_ctrl & apple_mbox->hw->control_empty);
149 static int apple_mbox_hw_recv(struct apple_mbox *apple_mbox,
152 if (!apple_mbox_hw_can_recv(apple_mbox))
155 msg->msg0 = readq_relaxed(apple_mbox->regs + apple_mbox->hw->i2a_recv0);
158 readq_relaxed(apple_mbox->regs + apple_mbox->hw->i2a_recv1));
160 dev_dbg(apple_mbox->dev, "< RX %016llx %08x\n", msg->msg0, msg->msg1);
167 struct apple_mbox *apple_mbox = chan->con_priv;
171 ret = apple_mbox_hw_send(apple_mbox, msg);
184 if (apple_mbox->hw->has_irq_controls) {
185 writel_relaxed(apple_mbox->hw->irq_bit_send_empty,
186 apple_mbox->regs + apple_mbox->hw->irq_ack);
188 enable_irq(apple_mbox->irq_send_empty);
195 struct apple_mbox *apple_mbox = data;
204 disable_irq_nosync(apple_mbox->irq_send_empty);
205 mbox_chan_txdone(&apple_mbox->chan, 0);
209 static int apple_mbox_poll(struct apple_mbox *apple_mbox)
214 while (apple_mbox_hw_recv(apple_mbox, &msg) == 0) {
215 mbox_chan_received_data(&apple_mbox->chan, (void *)&msg);
227 if (apple_mbox->hw->has_irq_controls) {
228 writel_relaxed(apple_mbox->hw->irq_bit_recv_not_empty,
229 apple_mbox->regs + apple_mbox->hw->irq_ack);
237 struct apple_mbox *apple_mbox = data;
239 spin_lock(&apple_mbox->rx_lock);
240 apple_mbox_poll(apple_mbox);
241 spin_unlock(&apple_mbox->rx_lock);
248 struct apple_mbox *apple_mbox = chan->con_priv;
252 spin_lock_irqsave(&apple_mbox->rx_lock, flags);
253 ret = apple_mbox_poll(apple_mbox);
254 spin_unlock_irqrestore(&apple_mbox->rx_lock, flags);
261 struct apple_mbox *apple_mbox = chan->con_priv;
265 if (apple_mbox_hw_send_empty(apple_mbox)) {
266 mbox_chan_txdone(&apple_mbox->chan, 0);
278 struct apple_mbox *apple_mbox = chan->con_priv;
288 if (apple_mbox->hw->has_irq_controls) {
289 writel_relaxed(apple_mbox->hw->irq_bit_recv_not_empty |
290 apple_mbox->hw->irq_bit_send_empty,
291 apple_mbox->regs + apple_mbox->hw->irq_enable);
294 enable_irq(apple_mbox->irq_recv_not_empty);
300 struct apple_mbox *apple_mbox = chan->con_priv;
302 disable_irq(apple_mbox->irq_recv_not_empty);
327 struct apple_mbox *mbox;