File Index
Files and directories
Sign in
FILE

phylib_stubs.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/phylib_stubs.h C
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 * Stubs for the Network PHY library
  4 */
  5
  6#include <linux/rtnetlink.h>
  7
  8struct ethtool_eth_phy_stats;
  9struct ethtool_link_ext_stats;
 10struct ethtool_phy_stats;
 11struct kernel_hwtstamp_config;
 12struct netlink_ext_ack;
 13struct phy_device;
 14
 15#if IS_ENABLED(CONFIG_PHYLIB)
 16
 17extern const struct phylib_stubs *phylib_stubs;
 18
 19struct phylib_stubs {
 20	int (*hwtstamp_get)(struct phy_device *phydev,
 21			    struct kernel_hwtstamp_config *config);
 22	int (*hwtstamp_set)(struct phy_device *phydev,
 23			    struct kernel_hwtstamp_config *config,
 24			    struct netlink_ext_ack *extack);
 25	void (*get_phy_stats)(struct phy_device *phydev,
 26			      struct ethtool_eth_phy_stats *phy_stats,
 27			      struct ethtool_phy_stats *phydev_stats);
 28	void (*get_link_ext_stats)(struct phy_device *phydev,
 29				   struct ethtool_link_ext_stats *link_stats);
 30};
 31
 32static inline int phy_hwtstamp_get(struct phy_device *phydev,
 33				   struct kernel_hwtstamp_config *config)
 34{
 35	/* phylib_register_stubs() and phylib_unregister_stubs()
 36	 * also run under rtnl_lock().
 37	 */
 38	ASSERT_RTNL();
 39
 40	if (!phylib_stubs)
 41		return -EOPNOTSUPP;
 42
 43	return phylib_stubs->hwtstamp_get(phydev, config);
 44}
 45
 46static inline int phy_hwtstamp_set(struct phy_device *phydev,
 47				   struct kernel_hwtstamp_config *config,
 48				   struct netlink_ext_ack *extack)
 49{
 50	/* phylib_register_stubs() and phylib_unregister_stubs()
 51	 * also run under rtnl_lock().
 52	 */
 53	ASSERT_RTNL();
 54
 55	if (!phylib_stubs)
 56		return -EOPNOTSUPP;
 57
 58	return phylib_stubs->hwtstamp_set(phydev, config, extack);
 59}
 60
 61static inline void phy_ethtool_get_phy_stats(struct phy_device *phydev,
 62					struct ethtool_eth_phy_stats *phy_stats,
 63					struct ethtool_phy_stats *phydev_stats)
 64{
 65	ASSERT_RTNL();
 66
 67	if (!phylib_stubs)
 68		return;
 69
 70	phylib_stubs->get_phy_stats(phydev, phy_stats, phydev_stats);
 71}
 72
 73static inline void phy_ethtool_get_link_ext_stats(struct phy_device *phydev,
 74				    struct ethtool_link_ext_stats *link_stats)
 75{
 76	ASSERT_RTNL();
 77
 78	if (!phylib_stubs)
 79		return;
 80
 81	phylib_stubs->get_link_ext_stats(phydev, link_stats);
 82}
 83
 84#else
 85
 86static inline int phy_hwtstamp_get(struct phy_device *phydev,
 87				   struct kernel_hwtstamp_config *config)
 88{
 89	return -EOPNOTSUPP;
 90}
 91
 92static inline int phy_hwtstamp_set(struct phy_device *phydev,
 93				   struct kernel_hwtstamp_config *config,
 94				   struct netlink_ext_ack *extack)
 95{
 96	return -EOPNOTSUPP;
 97}
 98
 99static inline void phy_ethtool_get_phy_stats(struct phy_device *phydev,
100					struct ethtool_eth_phy_stats *phy_stats,
101					struct ethtool_phy_stats *phydev_stats)
102{
103}
104
105static inline void phy_ethtool_get_link_ext_stats(struct phy_device *phydev,
106				    struct ethtool_link_ext_stats *link_stats)
107{
108}
109
110#endif
~/ Read-only file preview.