Lines Matching refs:ipi
12 #include <linux/mailbox/zynqmp-ipi-message.h>
94 * @ipi: pointer to mailbox information
103 struct mbox_info *ipi;
150 struct mbox_info *ipi;
153 ipi = container_of(work, struct mbox_info, mbox_work);
154 rproc = ipi->r5_core->rproc;
171 * Receive data from ipi buffer, ack interrupt and then
177 struct mbox_info *ipi;
180 ipi = container_of(cl, struct mbox_info, mbox_cl);
182 /* copy data from ipi buffer to r5_core */
184 buf_msg = (struct zynqmp_ipi_message *)ipi->rx_mc_buf;
195 if (mbox_send_message(ipi->rx_chan, NULL) < 0)
198 schedule_work(&ipi->mbox_work);
213 struct mbox_info *ipi;
215 ipi = kzalloc(sizeof(*ipi), GFP_KERNEL);
216 if (!ipi)
219 mbox_cl = &ipi->mbox_cl;
227 ipi->tx_chan = mbox_request_channel_byname(mbox_cl, "tx");
228 if (IS_ERR(ipi->tx_chan)) {
229 ipi->tx_chan = NULL;
230 kfree(ipi);
235 ipi->rx_chan = mbox_request_channel_byname(mbox_cl, "rx");
236 if (IS_ERR(ipi->rx_chan)) {
237 mbox_free_channel(ipi->tx_chan);
238 ipi->rx_chan = NULL;
239 ipi->tx_chan = NULL;
240 kfree(ipi);
245 INIT_WORK(&ipi->mbox_work, handle_event_notified);
247 return ipi;
250 static void zynqmp_r5_free_mbox(struct mbox_info *ipi)
252 if (!ipi)
255 if (ipi->tx_chan) {
256 mbox_free_channel(ipi->tx_chan);
257 ipi->tx_chan = NULL;
260 if (ipi->rx_chan) {
261 mbox_free_channel(ipi->rx_chan);
262 ipi->rx_chan = NULL;
265 kfree(ipi);
278 struct mbox_info *ipi;
281 ipi = r5_core->ipi;
282 if (!ipi)
285 mb_msg = (struct zynqmp_ipi_message *)ipi->tx_mc_buf;
288 ret = mbox_send_message(ipi->tx_chan, mb_msg);
1005 struct mbox_info *ipi;
1089 ipi = zynqmp_r5_setup_mbox(&child_pdev->dev);
1090 if (ipi) {
1091 r5_cores[i]->ipi = ipi;
1092 ipi->r5_core = r5_cores[i];
1132 zynqmp_r5_free_mbox(r5_cores[i]->ipi);
1157 zynqmp_r5_free_mbox(r5_core->ipi);