Let client drivers know which MAC statistics can be accessed.

Signed-off-by: Ivan Malov <ivan.ma...@arknetworks.am>
Reviewed-by: Andy Moreton <andy.more...@amd.com>
Reviewed-by: Pieter Jansen Van Vuuren <pieter.jansen-van-vuu...@amd.com>
---
 drivers/common/sfc_efx/base/efx_mac.c       |  2 +-
 drivers/common/sfc_efx/base/medford4_impl.h |  9 ++++++
 drivers/common/sfc_efx/base/medford4_mac.c  | 31 +++++++++++++++++++++
 3 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/drivers/common/sfc_efx/base/efx_mac.c 
b/drivers/common/sfc_efx/base/efx_mac.c
index 3c29db0016..6abe2046e8 100644
--- a/drivers/common/sfc_efx/base/efx_mac.c
+++ b/drivers/common/sfc_efx/base/efx_mac.c
@@ -105,7 +105,7 @@ static const efx_mac_ops_t  __efx_mac_medford4_ops = {
        ef10_mac_loopback_set,                  /* emo_loopback_set */
 #endif /* EFSYS_OPT_LOOPBACK */
 #if EFSYS_OPT_MAC_STATS
-       ef10_mac_stats_get_mask,                /* emo_stats_get_mask */
+       medford4_mac_stats_get_mask,            /* emo_stats_get_mask */
        efx_mcdi_mac_stats_clear,               /* emo_stats_clear */
        efx_mcdi_mac_stats_upload,              /* emo_stats_upload */
        efx_mcdi_mac_stats_periodic,            /* emo_stats_periodic */
diff --git a/drivers/common/sfc_efx/base/medford4_impl.h 
b/drivers/common/sfc_efx/base/medford4_impl.h
index 8b232c516a..2fbf1495d1 100644
--- a/drivers/common/sfc_efx/base/medford4_impl.h
+++ b/drivers/common/sfc_efx/base/medford4_impl.h
@@ -56,6 +56,15 @@ extern       __checkReturn           efx_rc_t
 medford4_mac_reconfigure(
        __in                    efx_nic_t *enp);
 
+#if EFSYS_OPT_MAC_STATS
+LIBEFX_INTERNAL
+extern __checkReturn           efx_rc_t
+medford4_mac_stats_get_mask(
+       __in                    efx_nic_t *enp,
+       __inout_bcount(sz)      uint32_t *maskp,
+       __in                    size_t sz);
+#endif /* EFSYS_OPT_MAC_STATS */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/drivers/common/sfc_efx/base/medford4_mac.c 
b/drivers/common/sfc_efx/base/medford4_mac.c
index ade4379a19..23c59f18ed 100644
--- a/drivers/common/sfc_efx/base/medford4_mac.c
+++ b/drivers/common/sfc_efx/base/medford4_mac.c
@@ -89,4 +89,35 @@ medford4_mac_reconfigure(
        EFSYS_PROBE1(fail1, efx_rc_t, rc);
        return (rc);
 }
+
+#if EFSYS_OPT_MAC_STATS
+       __checkReturn           efx_rc_t
+medford4_mac_stats_get_mask(
+       __in                    efx_nic_t *enp,
+       __inout_bcount(sz)      uint32_t *maskp,
+       __in                    size_t sz)
+{
+       efx_port_t *epp = &(enp->en_port);
+       unsigned int i;
+       efx_rc_t rc;
+
+       for (i = 0; i < EFX_ARRAY_SIZE(epp->ep_np_mac_stat_lut); ++i) {
+               const struct efx_mac_stats_range rng[] = { { i, i } };
+
+               if (epp->ep_np_mac_stat_lut[i].ens_valid == B_FALSE)
+                       continue;
+
+               rc = efx_mac_stats_mask_add_ranges(maskp, sz, rng, 1);
+               if (rc != 0)
+                       goto fail1;
+       }
+
+       /* TODO: care about VADAPTOR statistics when VF support arrives */
+       return (0);
+
+fail1:
+       EFSYS_PROBE1(fail1, efx_rc_t, rc);
+       return (rc);
+}
+#endif /* EFSYS_OPT_MAC_STATS */
 #endif /* EFSYS_OPT_MEDFORD4 */
-- 
2.39.5

Reply via email to