From: Rakesh Kudurumalla <[email protected]> Add ROC APIs for Forward Error Correction (FEC) configuration: - roc_nix_mac_fec_set: Set FEC mode on the link - roc_nix_mac_fec_supported_get: Query supported FEC modes from firmware
These APIs use CGX mailbox messages to configure and query FEC parameters on PF interfaces. Signed-off-by: Rakesh Kudurumalla <[email protected]> --- drivers/common/cnxk/roc_nix.h | 2 + drivers/common/cnxk/roc_nix_mac.c | 51 +++++++++++++++++++ .../common/cnxk/roc_platform_base_symbols.c | 2 + 3 files changed, 55 insertions(+) diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h index 8ba8b3e0b6..6130e4c42b 100644 --- a/drivers/common/cnxk/roc_nix.h +++ b/drivers/common/cnxk/roc_nix.h @@ -975,6 +975,8 @@ int __roc_api roc_nix_mac_link_info_set(struct roc_nix *roc_nix, struct roc_nix_link_info *link_info); int __roc_api roc_nix_mac_link_info_get(struct roc_nix *roc_nix, struct roc_nix_link_info *link_info); +int __roc_api roc_nix_mac_fec_set(struct roc_nix *roc_nix, int fec); +int __roc_api roc_nix_mac_fec_supported_get(struct roc_nix *roc_nix, uint64_t *supported_fec); int __roc_api roc_nix_mac_mtu_set(struct roc_nix *roc_nix, uint16_t mtu); int __roc_api roc_nix_mac_max_rx_len_set(struct roc_nix *roc_nix, uint16_t maxlen); diff --git a/drivers/common/cnxk/roc_nix_mac.c b/drivers/common/cnxk/roc_nix_mac.c index 376ff48522..4f856677e0 100644 --- a/drivers/common/cnxk/roc_nix_mac.c +++ b/drivers/common/cnxk/roc_nix_mac.c @@ -257,6 +257,57 @@ roc_nix_mac_link_state_set(struct roc_nix *roc_nix, uint8_t up) return rc; } +int +roc_nix_mac_fec_set(struct roc_nix *roc_nix, int fec) +{ + struct nix *nix = roc_nix_to_nix_priv(roc_nix); + struct dev *dev = &nix->dev; + struct mbox *mbox = mbox_get(dev->mbox); + struct fec_mode *req; + int rc = -ENOSPC; + + if (roc_nix_is_vf_or_sdp(roc_nix)) { + rc = NIX_ERR_OP_NOTSUP; + goto exit; + } + + req = mbox_alloc_msg_cgx_set_fec_param(mbox); + if (req == NULL) + goto exit; + req->fec = fec; + + rc = mbox_process(mbox); +exit: + mbox_put(mbox); + return rc; +} + +int +roc_nix_mac_fec_supported_get(struct roc_nix *roc_nix, uint64_t *supported_fec) +{ + struct nix *nix = roc_nix_to_nix_priv(roc_nix); + struct dev *dev = &nix->dev; + struct mbox *mbox = mbox_get(dev->mbox); + struct cgx_fw_data *rsp = NULL; + int rc; + + if (roc_nix_is_vf_or_sdp(roc_nix)) { + rc = NIX_ERR_OP_NOTSUP; + goto exit; + } + + mbox_alloc_msg_cgx_get_aux_link_info(mbox); + rc = mbox_process_msg(mbox, (void *)&rsp); + if (rc) + goto exit; + + *supported_fec = rsp->fwdata.supported_fec; + rc = 0; +exit: + mbox_put(mbox); + return rc; +} + int roc_nix_mac_link_info_set(struct roc_nix *roc_nix, struct roc_nix_link_info *link_info) diff --git a/drivers/common/cnxk/roc_platform_base_symbols.c b/drivers/common/cnxk/roc_platform_base_symbols.c index cf080b1bdc..9584c1d259 100644 --- a/drivers/common/cnxk/roc_platform_base_symbols.c +++ b/drivers/common/cnxk/roc_platform_base_symbols.c @@ -304,6 +304,8 @@ RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_rxtx_start_stop) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_event_start_stop) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_loopback_enable) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_addr_set) +RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_fec_set) +RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_fec_supported_get) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_max_entries_get) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_addr_add) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_addr_del) -- 2.25.1

