119370Spst/* SPDX-License-Identifier: GPL-2.0-or-later */
219370Spst/*
3130803Smarcel * Stubs for the Network PHY library
4130803Smarcel */
5130803Smarcel
698944Sobrien#include <linux/rtnetlink.h>
719370Spst
898944Sobrienstruct kernel_hwtstamp_config;
998944Sobrienstruct netlink_ext_ack;
1098944Sobrienstruct phy_device;
1198944Sobrien
1219370Spst#if IS_ENABLED(CONFIG_PHYLIB)
1398944Sobrien
1498944Sobrienextern const struct phylib_stubs *phylib_stubs;
1598944Sobrien
1698944Sobrienstruct phylib_stubs {
1719370Spst	int (*hwtstamp_get)(struct phy_device *phydev,
1898944Sobrien			    struct kernel_hwtstamp_config *config);
1998944Sobrien	int (*hwtstamp_set)(struct phy_device *phydev,
2098944Sobrien			    struct kernel_hwtstamp_config *config,
2198944Sobrien			    struct netlink_ext_ack *extack);
2219370Spst};
2319370Spst
2419370Spststatic inline int phy_hwtstamp_get(struct phy_device *phydev,
25130803Smarcel				   struct kernel_hwtstamp_config *config)
26130803Smarcel{
2719370Spst	/* phylib_register_stubs() and phylib_unregister_stubs()
2819370Spst	 * also run under rtnl_lock().
2998944Sobrien	 */
3098944Sobrien	ASSERT_RTNL();
31130803Smarcel
32130803Smarcel	if (!phylib_stubs)
33130803Smarcel		return -EOPNOTSUPP;
34130803Smarcel
35130803Smarcel	return phylib_stubs->hwtstamp_get(phydev, config);
36130803Smarcel}
37130803Smarcel
38130803Smarcelstatic inline int phy_hwtstamp_set(struct phy_device *phydev,
39130803Smarcel				   struct kernel_hwtstamp_config *config,
40130803Smarcel				   struct netlink_ext_ack *extack)
41130803Smarcel{
42130803Smarcel	/* phylib_register_stubs() and phylib_unregister_stubs()
43130803Smarcel	 * also run under rtnl_lock().
44130803Smarcel	 */
45130803Smarcel	ASSERT_RTNL();
46130803Smarcel
47130803Smarcel	if (!phylib_stubs)
48130803Smarcel		return -EOPNOTSUPP;
49130803Smarcel
50130803Smarcel	return phylib_stubs->hwtstamp_set(phydev, config, extack);
51130803Smarcel}
5219370Spst
5319370Spst#else
54130803Smarcel
5598944Sobrienstatic inline int phy_hwtstamp_get(struct phy_device *phydev,
56130803Smarcel				   struct kernel_hwtstamp_config *config)
57130803Smarcel{
58130803Smarcel	return -EOPNOTSUPP;
59130803Smarcel}
60130803Smarcel
6119370Spststatic inline int phy_hwtstamp_set(struct phy_device *phydev,
6219370Spst				   struct kernel_hwtstamp_config *config,
63130803Smarcel				   struct netlink_ext_ack *extack)
64130803Smarcel{
65130803Smarcel	return -EOPNOTSUPP;
66130803Smarcel}
67130803Smarcel
68130803Smarcel#endif
69130803Smarcel