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]> --- Changes in v2: No change. drivers/common/cnxk/roc_nix.h | 2 + drivers/common/cnxk/roc_nix_mac.c | 52 ++++++++++++++++++- .../common/cnxk/roc_platform_base_symbols.c | 2 + 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h index 49ede85f9a..802519f5e8 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..9440cad33d 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) @@ -283,7 +334,6 @@ roc_nix_mac_link_info_set(struct roc_nix *roc_nix, exit: mbox_put(mbox); return rc; - } int diff --git a/drivers/common/cnxk/roc_platform_base_symbols.c b/drivers/common/cnxk/roc_platform_base_symbols.c index d1c9f2304d..ffae154788 100644 --- a/drivers/common/cnxk/roc_platform_base_symbols.c +++ b/drivers/common/cnxk/roc_platform_base_symbols.c @@ -316,6 +316,8 @@ RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_state_set) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_info_set) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_mtu_set) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_max_rx_len_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_stats_reset) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_fwdata_get) RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_cb_register) -- 2.34.1

