net/sfc/base: add MCDI agnostic wrapper for MAC stats clear
If a libefx-based driver needs some way to clear port statistics, then an MCDI agnostic method is required. Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
This commit is contained in:
parent
740e0ec32d
commit
b5c94823dc
@ -559,6 +559,10 @@ efx_mac_stats_get_mask(
|
||||
|
||||
#define EFX_MAC_STATS_SIZE 0x400
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_mac_stats_clear(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
/*
|
||||
* Upload mac statistics supported by the hardware into the given buffer.
|
||||
*
|
||||
|
@ -198,6 +198,7 @@ typedef struct efx_mac_ops_s {
|
||||
#endif /* EFSYS_OPT_LOOPBACK */
|
||||
#if EFSYS_OPT_MAC_STATS
|
||||
efx_rc_t (*emo_stats_get_mask)(efx_nic_t *, uint32_t *, size_t);
|
||||
efx_rc_t (*emo_stats_clear)(efx_nic_t *);
|
||||
efx_rc_t (*emo_stats_upload)(efx_nic_t *, efsys_mem_t *);
|
||||
efx_rc_t (*emo_stats_periodic)(efx_nic_t *, efsys_mem_t *,
|
||||
uint16_t, boolean_t);
|
||||
|
@ -55,6 +55,7 @@ static const efx_mac_ops_t __efx_siena_mac_ops = {
|
||||
#endif /* EFSYS_OPT_LOOPBACK */
|
||||
#if EFSYS_OPT_MAC_STATS
|
||||
siena_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 */
|
||||
siena_mac_stats_update /* emo_stats_update */
|
||||
@ -79,6 +80,7 @@ static const efx_mac_ops_t __efx_ef10_mac_ops = {
|
||||
#endif /* EFSYS_OPT_LOOPBACK */
|
||||
#if EFSYS_OPT_MAC_STATS
|
||||
ef10_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 */
|
||||
ef10_mac_stats_update /* emo_stats_update */
|
||||
@ -707,6 +709,29 @@ efx_mac_stats_get_mask(
|
||||
|
||||
return (0);
|
||||
|
||||
fail1:
|
||||
EFSYS_PROBE1(fail1, efx_rc_t, rc);
|
||||
|
||||
return (rc);
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_mac_stats_clear(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
efx_port_t *epp = &(enp->en_port);
|
||||
const efx_mac_ops_t *emop = epp->ep_emop;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
|
||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PORT);
|
||||
EFSYS_ASSERT(emop != NULL);
|
||||
|
||||
if ((rc = emop->emo_stats_clear(enp)) != 0)
|
||||
goto fail1;
|
||||
|
||||
return (0);
|
||||
|
||||
fail1:
|
||||
EFSYS_PROBE1(fail1, efx_rc_t, rc);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user