@@ -39,11 +39,17 @@ typedef void (*link_status_get_t)(void *roc_nix,
/* Representee notification callback */
typedef int (*repte_notify_t)(void *roc_nix, void *notify_msg);
+/* RVU Message process callback */
+typedef int (*msg_process_cb_t)(uint16_t vf, uint16_t msg_id,
+ void *req, uint16_t req_len,
+ void **rsp, uint16_t *rsp_len);
+
struct dev_ops {
link_info_t link_status_update;
ptp_info_t ptp_info_update;
link_status_get_t link_status_get;
q_err_cb_t q_err_cb;
+ msg_process_cb_t msg_process_cb;
repte_notify_t repte_notify;
};
@@ -87,3 +87,28 @@ roc_rvu_lf_irq_unregister(struct roc_rvu_lf *roc_rvu_lf, unsigned int irq,
return 0;
}
+
+int
+roc_rvu_lf_msg_handler_register(struct roc_rvu_lf *roc_rvu_lf, roc_rvu_lf_msg_handler_cb_fn cb)
+{
+ struct rvu_lf *rvu = roc_rvu_lf_to_rvu_priv(roc_rvu_lf);
+ struct dev *dev = &rvu->dev;
+
+ if (cb == NULL)
+ return -EINVAL;
+
+ dev->ops->msg_process_cb = (msg_process_cb_t)cb;
+
+ return 0;
+}
+
+int
+roc_rvu_lf_msg_handler_unregister(struct roc_rvu_lf *roc_rvu_lf)
+{
+ struct rvu_lf *rvu = roc_rvu_lf_to_rvu_priv(roc_rvu_lf);
+ struct dev *dev = &rvu->dev;
+
+ dev->ops->msg_process_cb = NULL;
+
+ return 0;
+}
@@ -22,8 +22,15 @@ int __roc_api roc_rvu_lf_dev_init(struct roc_rvu_lf *roc_rvu_lf);
int __roc_api roc_rvu_lf_dev_fini(struct roc_rvu_lf *roc_rvu_lf);
typedef void (*roc_rvu_lf_intr_cb_fn)(void *cb_arg);
+typedef int (*roc_rvu_lf_msg_handler_cb_fn)(uint16_t vf, uint16_t msg_id,
+ void *req, uint16_t req_len,
+ void **rsp, uint16_t *rsp_len);
+
int __roc_api roc_rvu_lf_irq_register(struct roc_rvu_lf *roc_rvu_lf, unsigned int irq,
roc_rvu_lf_intr_cb_fn cb, void *cb_arg);
int __roc_api roc_rvu_lf_irq_unregister(struct roc_rvu_lf *roc_rvu_lf, unsigned int irq,
roc_rvu_lf_intr_cb_fn cb, void *cb_arg);
+int __roc_api roc_rvu_lf_msg_handler_register(struct roc_rvu_lf *roc_rvu_lf,
+ roc_rvu_lf_msg_handler_cb_fn cb);
+int __roc_api roc_rvu_lf_msg_handler_unregister(struct roc_rvu_lf *roc_rvu_lf);
#endif /* _ROC_RVU_LF_H_ */
@@ -550,5 +550,7 @@ INTERNAL {
roc_rvu_lf_dev_init;
roc_rvu_lf_irq_register;
roc_rvu_lf_irq_unregister;
+ roc_rvu_lf_msg_handler_register;
+ roc_rvu_lf_msg_handler_unregister;
local: *;
};
@@ -15,6 +15,34 @@
#include "rte_pmd_rvu_lf.h"
+int
+rte_pmd_rvu_lf_msg_handler_register(uint8_t dev_id, rte_pmd_rvu_lf_msg_handler_cb_fn cb)
+{
+ struct rte_rawdev *rawdev = rte_rawdev_pmd_get_dev(dev_id);
+ struct roc_rvu_lf *roc_rvu_lf;
+
+ if (rawdev == NULL)
+ return -EINVAL;
+
+ roc_rvu_lf = (struct roc_rvu_lf *)rawdev->dev_private;
+
+ return roc_rvu_lf_msg_handler_register(roc_rvu_lf, (roc_rvu_lf_msg_handler_cb_fn)cb);
+}
+
+int
+rte_pmd_rvu_lf_msg_handler_unregister(uint8_t dev_id)
+{
+ struct rte_rawdev *rawdev = rte_rawdev_pmd_get_dev(dev_id);
+ struct roc_rvu_lf *roc_rvu_lf;
+
+ if (rawdev == NULL)
+ return -EINVAL;
+
+ roc_rvu_lf = (struct roc_rvu_lf *)rawdev->dev_private;
+
+ return roc_rvu_lf_msg_handler_unregister(roc_rvu_lf);
+}
+
int
rte_pmd_rvu_lf_irq_register(uint8_t dev_id, unsigned int irq,
rte_pmd_rvu_lf_intr_callback_fn cb, void *data)
@@ -32,6 +32,55 @@ extern int cnxk_logtype_rvu_lf;
rte_log(RTE_LOG_ ## level, cnxk_logtype_rvu_lf, \
"%s(): " fmt "\n", __func__, ## args)
+/**
+ * Signature of callback function called when a message process handler is called
+ * on RVU LF device.
+ *
+ * @param vf
+ * VF number(0 to N) from which message is received (ignored in case of PF)
+ * @param msg_id
+ * message id
+ * @param req
+ * pointer to message request
+ * @param req_len
+ * pointer to message request
+ * @param[out] rsp
+ * pointer to message response
+ * @param[out] rsp_len
+ * length of message response
+ *
+ * @return 0 when response is set, negative value otherwise
+ */
+typedef int (*rte_pmd_rvu_lf_msg_handler_cb_fn)(uint16_t vf, uint16_t msg_id,
+ void *req, uint16_t req_len,
+ void **rsp, uint16_t *rsp_len);
+
+/**
+ * Register message handler callback
+ *
+ * Registers message handler callback to be executed when the message is received from peer.
+ *
+ * @param dev_id
+ * device id of RVU LF device
+ * @param cb
+ * callback function to be executed
+ *
+ * @return 0 on success, negative value otherwise
+ */
+__rte_experimental
+int rte_pmd_rvu_lf_msg_handler_register(uint8_t dev_id, rte_pmd_rvu_lf_msg_handler_cb_fn cb);
+
+/**
+ * Unregister message handler callback
+ *
+ * @param dev_id
+ * device id of RVU LF device
+ *
+ * @return 0 on success, negative value otherwise
+ */
+__rte_experimental
+int rte_pmd_rvu_lf_msg_handler_unregister(uint8_t dev_id);
+
/**
* Signature of callback function called when an interrupt is received on RVU LF device.
*