1/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
2/* Copyright 2019 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
14struct dpaa2_mac {
15	struct fsl_mc_device *mc_dev;
16	struct dpmac_link_state state;
17	struct net_device *net_dev;
18	struct fsl_mc_io *mc_io;
19	struct dpmac_attr attr;
20	u16 ver_major, ver_minor;
21	unsigned long features;
22
23	struct phylink_config phylink_config;
24	struct phylink *phylink;
25	phy_interface_t if_mode;
26	enum dpmac_link_type if_link_type;
27	struct phylink_pcs *pcs;
28	struct fwnode_handle *fw_node;
29
30	struct phy *serdes_phy;
31};
32
33static inline bool dpaa2_mac_is_type_phy(struct dpaa2_mac *mac)
34{
35	if (!mac)
36		return false;
37
38	return mac->attr.link_type == DPMAC_LINK_TYPE_PHY ||
39	       mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE;
40}
41
42int dpaa2_mac_open(struct dpaa2_mac *mac);
43
44void dpaa2_mac_close(struct dpaa2_mac *mac);
45
46int dpaa2_mac_connect(struct dpaa2_mac *mac);
47
48void dpaa2_mac_disconnect(struct dpaa2_mac *mac);
49
50int dpaa2_mac_get_sset_count(void);
51
52void dpaa2_mac_get_strings(u8 *data);
53
54void dpaa2_mac_get_ethtool_stats(struct dpaa2_mac *mac, u64 *data);
55
56void dpaa2_mac_start(struct dpaa2_mac *mac);
57
58void dpaa2_mac_stop(struct dpaa2_mac *mac);
59
60#endif /* DPAA2_MAC_H */
61