xref: /linux/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.h (revision dbc2bb4e8742068d3d3dc8ebb46d874e5fd953b8)
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