Lines Matching full:mbox
21 #include <mbox.h>
157 struct mbox { struct
158 struct otx2_mbox mbox; member
163 void *bbuf_base; /* Bounce buffer for mbox memory */ argument
165 int num_msgs; /* mbox number of messages */ argument
345 /* Mbox */
346 struct mbox mbox; member
347 struct mbox *mbox_pfvf;
495 /* Mbox bounce buffer APIs */
496 static inline int otx2_mbox_bbuf_init(struct mbox *mbox, struct pci_dev *pdev) in otx2_mbox_bbuf_init() argument
501 mbox->bbuf_base = devm_kmalloc(&pdev->dev, MBOX_SIZE, GFP_KERNEL); in otx2_mbox_bbuf_init()
502 if (!mbox->bbuf_base) in otx2_mbox_bbuf_init()
505 /* Overwrite mbox mbase to point to bounce buffer, so that PF/VF in otx2_mbox_bbuf_init()
506 * prepare all mbox messages in bounce buffer instead of directly in otx2_mbox_bbuf_init()
507 * in hw mbox memory. in otx2_mbox_bbuf_init()
509 otx2_mbox = &mbox->mbox; in otx2_mbox_bbuf_init()
511 mdev->mbase = mbox->bbuf_base; in otx2_mbox_bbuf_init()
513 otx2_mbox = &mbox->mbox_up; in otx2_mbox_bbuf_init()
515 mdev->mbase = mbox->bbuf_base; in otx2_mbox_bbuf_init()
519 static inline void otx2_sync_mbox_bbuf(struct otx2_mbox *mbox, int devid) in otx2_sync_mbox_bbuf() argument
522 void *hw_mbase = mbox->hwbase + (devid * MBOX_SIZE); in otx2_sync_mbox_bbuf()
523 struct otx2_mbox_dev *mdev = &mbox->dev[devid]; in otx2_sync_mbox_bbuf()
530 hdr = hw_mbase + mbox->rx_start; in otx2_sync_mbox_bbuf()
533 if (msg_size > mbox->rx_size - msgs_offset) in otx2_sync_mbox_bbuf()
534 msg_size = mbox->rx_size - msgs_offset; in otx2_sync_mbox_bbuf()
536 /* Copy mbox messages from mbox memory to bounce buffer */ in otx2_sync_mbox_bbuf()
537 memcpy(mdev->mbase + mbox->rx_start, in otx2_sync_mbox_bbuf()
538 hw_mbase + mbox->rx_start, msg_size + msgs_offset); in otx2_sync_mbox_bbuf()
637 /* Mbox APIs */
638 static inline int otx2_sync_mbox_msg(struct mbox *mbox) in otx2_sync_mbox_msg() argument
642 if (!otx2_mbox_nonempty(&mbox->mbox, 0)) in otx2_sync_mbox_msg()
644 otx2_mbox_msg_send(&mbox->mbox, 0); in otx2_sync_mbox_msg()
645 err = otx2_mbox_wait_for_rsp(&mbox->mbox, 0); in otx2_sync_mbox_msg()
649 return otx2_mbox_check_rsp_msgs(&mbox->mbox, 0); in otx2_sync_mbox_msg()
652 static inline int otx2_sync_mbox_up_msg(struct mbox *mbox, int devid) in otx2_sync_mbox_up_msg() argument
656 if (!otx2_mbox_nonempty(&mbox->mbox_up, devid)) in otx2_sync_mbox_up_msg()
658 otx2_mbox_msg_send(&mbox->mbox_up, devid); in otx2_sync_mbox_up_msg()
659 err = otx2_mbox_wait_for_rsp(&mbox->mbox_up, devid); in otx2_sync_mbox_up_msg()
663 return otx2_mbox_check_rsp_msgs(&mbox->mbox_up, devid); in otx2_sync_mbox_up_msg()
666 /* Use this API to send mbox msgs in atomic context
669 static inline int otx2_sync_mbox_msg_busy_poll(struct mbox *mbox) in otx2_sync_mbox_msg_busy_poll() argument
673 if (!otx2_mbox_nonempty(&mbox->mbox, 0)) in otx2_sync_mbox_msg_busy_poll()
675 otx2_mbox_msg_send(&mbox->mbox, 0); in otx2_sync_mbox_msg_busy_poll()
676 err = otx2_mbox_busy_poll_for_rsp(&mbox->mbox, 0); in otx2_sync_mbox_msg_busy_poll()
680 return otx2_mbox_check_rsp_msgs(&mbox->mbox, 0); in otx2_sync_mbox_msg_busy_poll()
685 *otx2_mbox_alloc_msg_ ## _fn_name(struct mbox *mbox) \
690 &mbox->mbox, 0, sizeof(struct _req_type), \
696 trace_otx2_msg_alloc(mbox->mbox.pdev, _id, sizeof(*req)); \
765 int otx2_detach_resources(struct mbox *mbox);
781 void otx2_ctx_disable(struct mbox *mbox, int type, bool npa);
796 /* Mbox handlers */