Mailbox is a communication channel between driver and firmware. Signed-off-by: WanRenyong <wa...@yunsilicon.com> --- drivers/net/xsc/xsc_ctrl.c | 8 ++++++++ drivers/net/xsc/xsc_ctrl.h | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+)
diff --git a/drivers/net/xsc/xsc_ctrl.c b/drivers/net/xsc/xsc_ctrl.c index 3e37bd914e..4d5e4b4d07 100644 --- a/drivers/net/xsc/xsc_ctrl.c +++ b/drivers/net/xsc/xsc_ctrl.c @@ -54,3 +54,11 @@ xsc_ioctl(struct xsc_dev *dev, int cmd, int opcode, rte_free(hdr); return ret; } + +int +xsc_mailbox_exec(struct xsc_dev *dev, void *data_in, + int in_len, void *data_out, int out_len) +{ + /* ignore opcode in hdr->attr when cmd = XSC_IOCTL_CMDQ_RAW */ + return xsc_ioctl(dev, XSC_IOCTL_CMDQ_RAW, 0, data_in, in_len, data_out, out_len); +} diff --git a/drivers/net/xsc/xsc_ctrl.h b/drivers/net/xsc/xsc_ctrl.h index d343e1b1a7..a7259c5fcb 100644 --- a/drivers/net/xsc/xsc_ctrl.h +++ b/drivers/net/xsc/xsc_ctrl.h @@ -40,6 +40,35 @@ struct xsc_ioctl_hdr { struct xsc_ioctl_attr attr; }; +/* ioctl */ +struct xsc_inbox_hdr { + __be16 opcode; + uint8_t rsvd[4]; + __be16 opmod; +}; + +struct xsc_outbox_hdr { + uint8_t status; + uint8_t rsvd[3]; + __be32 syndrome; +}; + +/* ioctl mbox */ +struct xsc_ioctl_mbox_in { + struct xsc_inbox_hdr hdr; + __be16 len; + __be16 rsvd; + uint8_t data[]; +}; + +struct xsc_ioctl_mbox_out { + struct xsc_outbox_hdr hdr; + __be32 error; + __be16 len; + __be16 rsvd; + uint8_t data[]; +}; + struct xsc_ioctl_data_tl { uint16_t table; uint16_t opmod; @@ -82,5 +111,7 @@ struct xsc_ioctl_get_hwinfo { int xsc_ioctl(struct xsc_dev *dev, int cmd, int opcode, void *data_in, int in_len, void *data_out, int out_len); +int xsc_mailbox_exec(struct xsc_dev *dev, void *data_in, + int in_len, void *data_out, int out_len); #endif /* _XSC_CTRL_H_ */ -- 2.25.1