mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 18:43:33 +02:00
Take advantage of all the newly added MAC counters available through the MC API and export them through the standard statistics structures - rmon, eth-ctrl, eth-mac and pause. A new version based feature is added into dpaa2-mac - DPAA2_MAC_FEATURE_STANDARD_STATS - and based on the two memory zones needed for gathering the MAC counters are setup for each statistics group. The dpmac_counter structure is extended with a new field - size_t offset - which is being used to instruct the dpaa2_mac_transfer_stats() function where exactly to store a counter value inside the standard statistics structure. The newly added support is used both in the dpaa2-eth driver as well as the dpaa2-switch one. Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Link: https://patch.msgid.link/20260323115039.3932600-4-ioana.ciornei@nxp.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
86 lines
2.1 KiB
C
86 lines
2.1 KiB
C
/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
|
|
/* Copyright 2019, 2024-2026 NXP */
|
|
#ifndef DPAA2_MAC_H
|
|
#define DPAA2_MAC_H
|
|
|
|
#include <linux/of.h>
|
|
#include <linux/of_mdio.h>
|
|
#include <linux/of_net.h>
|
|
#include <linux/phylink.h>
|
|
|
|
#include "dpmac.h"
|
|
#include "dpmac-cmd.h"
|
|
|
|
struct dpaa2_mac_stats {
|
|
__le32 *idx_dma_mem;
|
|
__le64 *values_dma_mem;
|
|
dma_addr_t idx_iova, values_iova;
|
|
};
|
|
|
|
struct dpaa2_mac {
|
|
struct fsl_mc_device *mc_dev;
|
|
struct dpmac_link_state state;
|
|
struct net_device *net_dev;
|
|
struct fsl_mc_io *mc_io;
|
|
struct dpmac_attr attr;
|
|
u16 ver_major, ver_minor;
|
|
unsigned long features;
|
|
|
|
struct phylink_config phylink_config;
|
|
struct phylink *phylink;
|
|
phy_interface_t if_mode;
|
|
enum dpmac_link_type if_link_type;
|
|
struct phylink_pcs *pcs;
|
|
struct fwnode_handle *fw_node;
|
|
|
|
struct phy *serdes_phy;
|
|
|
|
struct dpaa2_mac_stats ethtool_stats;
|
|
struct dpaa2_mac_stats rmon_stats;
|
|
struct dpaa2_mac_stats pause_stats;
|
|
struct dpaa2_mac_stats eth_ctrl_stats;
|
|
struct dpaa2_mac_stats eth_mac_stats;
|
|
};
|
|
|
|
static inline bool dpaa2_mac_is_type_phy(struct dpaa2_mac *mac)
|
|
{
|
|
if (!mac)
|
|
return false;
|
|
|
|
return mac->attr.link_type == DPMAC_LINK_TYPE_PHY ||
|
|
mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE;
|
|
}
|
|
|
|
int dpaa2_mac_open(struct dpaa2_mac *mac);
|
|
|
|
void dpaa2_mac_close(struct dpaa2_mac *mac);
|
|
|
|
int dpaa2_mac_connect(struct dpaa2_mac *mac);
|
|
|
|
void dpaa2_mac_disconnect(struct dpaa2_mac *mac);
|
|
|
|
int dpaa2_mac_get_sset_count(void);
|
|
|
|
void dpaa2_mac_get_strings(u8 **data);
|
|
|
|
void dpaa2_mac_get_ethtool_stats(struct dpaa2_mac *mac, u64 *data);
|
|
|
|
void dpaa2_mac_get_rmon_stats(struct dpaa2_mac *mac,
|
|
struct ethtool_rmon_stats *s,
|
|
const struct ethtool_rmon_hist_range **ranges);
|
|
|
|
void dpaa2_mac_get_pause_stats(struct dpaa2_mac *mac,
|
|
struct ethtool_pause_stats *s);
|
|
|
|
void dpaa2_mac_get_ctrl_stats(struct dpaa2_mac *mac,
|
|
struct ethtool_eth_ctrl_stats *s);
|
|
|
|
void dpaa2_mac_get_eth_mac_stats(struct dpaa2_mac *mac,
|
|
struct ethtool_eth_mac_stats *s);
|
|
|
|
void dpaa2_mac_start(struct dpaa2_mac *mac);
|
|
|
|
void dpaa2_mac_stop(struct dpaa2_mac *mac);
|
|
|
|
#endif /* DPAA2_MAC_H */
|