1 /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ 2 /* Copyright 2019, 2024-2026 NXP */ 3 #ifndef DPAA2_MAC_H 4 #define DPAA2_MAC_H 5 6 #include <linux/of.h> 7 #include <linux/of_mdio.h> 8 #include <linux/of_net.h> 9 #include <linux/phylink.h> 10 11 #include "dpmac.h" 12 #include "dpmac-cmd.h" 13 14 struct dpaa2_mac_stats { 15 __le32 *idx_dma_mem; 16 __le64 *values_dma_mem; 17 dma_addr_t idx_iova, values_iova; 18 }; 19 20 struct dpaa2_mac { 21 struct fsl_mc_device *mc_dev; 22 struct dpmac_link_state state; 23 struct net_device *net_dev; 24 struct fsl_mc_io *mc_io; 25 struct dpmac_attr attr; 26 u16 ver_major, ver_minor; 27 unsigned long features; 28 29 struct phylink_config phylink_config; 30 struct phylink *phylink; 31 phy_interface_t if_mode; 32 enum dpmac_link_type if_link_type; 33 struct phylink_pcs *pcs; 34 struct fwnode_handle *fw_node; 35 36 struct phy *serdes_phy; 37 38 struct dpaa2_mac_stats ethtool_stats; 39 struct dpaa2_mac_stats rmon_stats; 40 struct dpaa2_mac_stats pause_stats; 41 struct dpaa2_mac_stats eth_ctrl_stats; 42 struct dpaa2_mac_stats eth_mac_stats; 43 }; 44 45 static inline bool dpaa2_mac_is_type_phy(struct dpaa2_mac *mac) 46 { 47 if (!mac) 48 return false; 49 50 return mac->attr.link_type == DPMAC_LINK_TYPE_PHY || 51 mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE; 52 } 53 54 int dpaa2_mac_open(struct dpaa2_mac *mac); 55 56 void dpaa2_mac_close(struct dpaa2_mac *mac); 57 58 int dpaa2_mac_connect(struct dpaa2_mac *mac); 59 60 void dpaa2_mac_disconnect(struct dpaa2_mac *mac); 61 62 int dpaa2_mac_get_sset_count(void); 63 64 void dpaa2_mac_get_strings(u8 **data); 65 66 void dpaa2_mac_get_ethtool_stats(struct dpaa2_mac *mac, u64 *data); 67 68 void dpaa2_mac_get_rmon_stats(struct dpaa2_mac *mac, 69 struct ethtool_rmon_stats *s, 70 const struct ethtool_rmon_hist_range **ranges); 71 72 void dpaa2_mac_get_pause_stats(struct dpaa2_mac *mac, 73 struct ethtool_pause_stats *s); 74 75 void dpaa2_mac_get_ctrl_stats(struct dpaa2_mac *mac, 76 struct ethtool_eth_ctrl_stats *s); 77 78 void dpaa2_mac_get_eth_mac_stats(struct dpaa2_mac *mac, 79 struct ethtool_eth_mac_stats *s); 80 81 void dpaa2_mac_start(struct dpaa2_mac *mac); 82 83 void dpaa2_mac_stop(struct dpaa2_mac *mac); 84 85 #endif /* DPAA2_MAC_H */ 86