@@ -537,6 +537,75 @@ pf_vf_mbox_send_up_msg(struct dev *dev, void *rec_msg)
}
}
+static int
+mbox_up_handler_rep_repte_notify(struct dev *dev, struct rep_repte_req *req, struct msg_rsp *rsp)
+{
+ struct roc_eswitch_repte_notify_msg *notify_msg;
+ int rc = 0;
+
+ plt_base_dbg("pf:%d/vf:%d msg id 0x%x (%s) from: pf:%d/vf:%d", dev_get_pf(dev->pf_func),
+ dev_get_vf(dev->pf_func), req->hdr.id, mbox_id2name(req->hdr.id),
+ dev_get_pf(req->hdr.pcifunc), dev_get_vf(req->hdr.pcifunc));
+
+ plt_base_dbg("repte pcifunc %x, enable %d", req->repte_pcifunc, req->enable);
+ if (dev->ops && dev->ops->repte_notify) {
+ notify_msg = plt_zmalloc(sizeof(struct roc_eswitch_repte_notify_msg), 0);
+ if (!notify_msg) {
+ plt_err("Failed to allocate memory");
+ rc = -ENOMEM;
+ goto fail;
+ }
+ notify_msg->type = ROC_ESWITCH_REPTE_STATE;
+ notify_msg->state.hw_func = req->repte_pcifunc;
+ notify_msg->state.enable = req->enable;
+
+ rc = dev->ops->repte_notify(dev->roc_nix, (void *)notify_msg);
+ if (rc < 0)
+ plt_err("Failed to sent new representee %x notification to %s",
+ req->repte_pcifunc, (req->enable == true) ? "enable" : "disable");
+
+ plt_free(notify_msg);
+ }
+fail:
+ rsp->hdr.rc = rc;
+ return rc;
+}
+
+static int
+mbox_up_handler_rep_set_mtu(struct dev *dev, struct rep_mtu *req, struct msg_rsp *rsp)
+{
+ struct roc_eswitch_repte_notify_msg *notify_msg;
+ int rc = 0;
+
+ plt_base_dbg("pf:%d/vf:%d msg id 0x%x (%s) from: pf:%d/vf:%d", dev_get_pf(dev->pf_func),
+ dev_get_vf(dev->pf_func), req->hdr.id, mbox_id2name(req->hdr.id),
+ dev_get_pf(req->hdr.pcifunc), dev_get_vf(req->hdr.pcifunc));
+
+ plt_base_dbg("rep pcifunc %x, rep id %d mtu %d", req->rep_pcifunc, req->rep_id, req->mtu);
+ if (dev->ops && dev->ops->repte_notify) {
+ notify_msg = plt_zmalloc(sizeof(struct roc_eswitch_repte_notify_msg), 0);
+ if (!notify_msg) {
+ plt_err("Failed to allocate memory");
+ rc = -ENOMEM;
+ goto fail;
+ }
+ notify_msg->type = ROC_ESWITCH_REPTE_MTU;
+ notify_msg->mtu.hw_func = req->rep_pcifunc;
+ notify_msg->mtu.rep_id = req->rep_id;
+ notify_msg->mtu.mtu = req->mtu;
+
+ rc = dev->ops->repte_notify(dev->roc_nix, (void *)notify_msg);
+ if (rc < 0)
+ plt_err("Failed to send new mtu notification for representee %x ",
+ req->rep_pcifunc);
+
+ plt_free(notify_msg);
+ }
+fail:
+ rsp->hdr.rc = rc;
+ return rc;
+}
+
static int
mbox_up_handler_mcs_intr_notify(struct dev *dev, struct mcs_intr_info *info, struct msg_rsp *rsp)
{
@@ -711,6 +780,7 @@ mbox_process_msgs_up(struct dev *dev, struct mbox_msghdr *req)
}
MBOX_UP_CGX_MESSAGES
MBOX_UP_MCS_MESSAGES
+ MBOX_UP_REP_MESSAGES
#undef M
}
@@ -36,12 +36,15 @@ typedef void (*q_err_cb_t)(void *roc_nix, void *data);
/* Link status get callback */
typedef void (*link_status_get_t)(void *roc_nix,
struct cgx_link_user_info *link);
+/* Representee notification callback */
+typedef int (*repte_notify_t)(void *roc_nix, void *notify_msg);
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;
+ repte_notify_t repte_notify;
};
#define dev_is_vf(dev) ((dev)->hwcap & DEV_HWCAP_F_VF)
@@ -319,3 +319,26 @@ roc_eswitch_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t type, uint16_t t
return rc;
}
+
+int
+roc_eswitch_nix_process_repte_notify_cb_register(struct roc_nix *roc_nix,
+ process_repte_notify_t proc_repte_nt)
+{
+ struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+ struct dev *dev = &nix->dev;
+
+ if (proc_repte_nt == NULL)
+ return NIX_ERR_PARAM;
+
+ dev->ops->repte_notify = (repte_notify_t)proc_repte_nt;
+ return 0;
+}
+
+void
+roc_eswitch_nix_process_repte_notify_cb_unregister(struct roc_nix *roc_nix)
+{
+ struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+ struct dev *dev = &nix->dev;
+
+ dev->ops->repte_notify = NULL;
+}
@@ -8,6 +8,34 @@
#define ROC_ESWITCH_VLAN_TPID 0x8100
#define ROC_ESWITCH_LBK_CHAN 63
+typedef enum roc_eswitch_repte_notify_msg_type {
+ ROC_ESWITCH_REPTE_STATE = 0,
+ ROC_ESWITCH_REPTE_MTU,
+} roc_eswitch_repte_notify_msg_type_t;
+
+struct roc_eswitch_repte_state {
+ bool enable;
+ uint16_t hw_func;
+};
+
+struct roc_eswitch_repte_mtu {
+ uint16_t mtu;
+ uint16_t rep_id;
+ uint16_t hw_func;
+};
+
+struct roc_eswitch_repte_notify_msg {
+ roc_eswitch_repte_notify_msg_type_t type;
+ union {
+ struct roc_eswitch_repte_state state;
+ struct roc_eswitch_repte_mtu mtu;
+ };
+};
+
+/* Process representee notification callback */
+typedef int (*process_repte_notify_t)(void *roc_nix,
+ struct roc_eswitch_repte_notify_msg *notify_msg);
+
/* NPC */
int __roc_api roc_eswitch_npc_mcam_rx_rule(struct roc_npc *roc_npc, struct roc_npc_flow *flow,
uint16_t pcifunc, uint16_t vlan_tci,
@@ -23,4 +51,7 @@ int __roc_api roc_eswitch_npc_rss_action_configure(struct roc_npc *roc_npc,
/* NIX */
int __roc_api roc_eswitch_nix_vlan_tpid_set(struct roc_nix *nix, uint32_t type, uint16_t tpid,
bool is_vf);
+int __roc_api roc_eswitch_nix_process_repte_notify_cb_register(struct roc_nix *roc_nix,
+ process_repte_notify_t proc_repte_nt);
+void __roc_api roc_eswitch_nix_process_repte_notify_cb_unregister(struct roc_nix *roc_nix);
#endif /* __ROC_ESWITCH_H__ */
@@ -499,6 +499,7 @@ mbox_id2name(uint16_t id)
return #_name;
MBOX_MESSAGES
MBOX_UP_CGX_MESSAGES
+ MBOX_UP_REP_MESSAGES
#undef M
}
}
@@ -514,6 +515,7 @@ mbox_id2size(uint16_t id)
return sizeof(struct _req_type);
MBOX_MESSAGES
MBOX_UP_CGX_MESSAGES
+ MBOX_UP_REP_MESSAGES
#undef M
}
}
@@ -357,9 +357,13 @@ struct mbox_msghdr {
#define MBOX_UP_MCS_MESSAGES M(MCS_INTR_NOTIFY, 0xE00, mcs_intr_notify, mcs_intr_info, msg_rsp)
+#define MBOX_UP_REP_MESSAGES \
+M(REP_REPTE_NOTIFY, 0xEF1, rep_repte_notify, rep_repte_req, msg_rsp) \
+M(REP_SET_MTU, 0xEF2, rep_set_mtu, rep_mtu, msg_rsp)
+
enum {
#define M(_name, _id, _1, _2, _3) MBOX_MSG_##_name = _id,
- MBOX_MESSAGES MBOX_UP_CGX_MESSAGES MBOX_UP_MCS_MESSAGES
+ MBOX_MESSAGES MBOX_UP_CGX_MESSAGES MBOX_UP_MCS_MESSAGES MBOX_UP_REP_MESSAGES
#undef M
};
@@ -2799,4 +2803,17 @@ struct nix_spi_to_sa_delete_req {
uint16_t __io hash_index;
uint8_t __io way;
};
+
+struct rep_repte_req {
+ struct mbox_msghdr hdr;
+ uint16_t __io repte_pcifunc;
+ bool __io enable;
+};
+
+struct rep_mtu {
+ struct mbox_msghdr hdr;
+ uint16_t __io rep_pcifunc;
+ uint16_t __io rep_id;
+ uint16_t __io mtu;
+};
#endif /* __ROC_MBOX_H__ */
@@ -87,6 +87,8 @@ INTERNAL {
roc_dpi_disable;
roc_dpi_enable;
roc_error_msg_get;
+ roc_eswitch_nix_process_repte_notify_cb_register;
+ roc_eswitch_nix_process_repte_notify_cb_unregister;
roc_eswitch_nix_vlan_tpid_set;
roc_eswitch_npc_mcam_delete_rule;
roc_eswitch_npc_mcam_rx_rule;