xref: /linux/include/linux/phylib_stubs.h (revision a1c613ae4c322ddd58d5a8539dbfba2a0380a8c0)
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 
8 struct kernel_hwtstamp_config;
9 struct netlink_ext_ack;
10 struct phy_device;
11 
12 #if IS_ENABLED(CONFIG_PHYLIB)
13 
14 extern const struct phylib_stubs *phylib_stubs;
15 
16 struct phylib_stubs {
17 	int (*hwtstamp_get)(struct phy_device *phydev,
18 			    struct kernel_hwtstamp_config *config);
19 	int (*hwtstamp_set)(struct phy_device *phydev,
20 			    struct kernel_hwtstamp_config *config,
21 			    struct netlink_ext_ack *extack);
22 };
23 
phy_hwtstamp_get(struct phy_device * phydev,struct kernel_hwtstamp_config * config)24 static inline int phy_hwtstamp_get(struct phy_device *phydev,
25 				   struct kernel_hwtstamp_config *config)
26 {
27 	/* phylib_register_stubs() and phylib_unregister_stubs()
28 	 * also run under rtnl_lock().
29 	 */
30 	ASSERT_RTNL();
31 
32 	if (!phylib_stubs)
33 		return -EOPNOTSUPP;
34 
35 	return phylib_stubs->hwtstamp_get(phydev, config);
36 }
37 
phy_hwtstamp_set(struct phy_device * phydev,struct kernel_hwtstamp_config * config,struct netlink_ext_ack * extack)38 static inline int phy_hwtstamp_set(struct phy_device *phydev,
39 				   struct kernel_hwtstamp_config *config,
40 				   struct netlink_ext_ack *extack)
41 {
42 	/* phylib_register_stubs() and phylib_unregister_stubs()
43 	 * also run under rtnl_lock().
44 	 */
45 	ASSERT_RTNL();
46 
47 	if (!phylib_stubs)
48 		return -EOPNOTSUPP;
49 
50 	return phylib_stubs->hwtstamp_set(phydev, config, extack);
51 }
52 
53 #else
54 
phy_hwtstamp_get(struct phy_device * phydev,struct kernel_hwtstamp_config * config)55 static inline int phy_hwtstamp_get(struct phy_device *phydev,
56 				   struct kernel_hwtstamp_config *config)
57 {
58 	return -EOPNOTSUPP;
59 }
60 
phy_hwtstamp_set(struct phy_device * phydev,struct kernel_hwtstamp_config * config,struct netlink_ext_ack * extack)61 static inline int phy_hwtstamp_set(struct phy_device *phydev,
62 				   struct kernel_hwtstamp_config *config,
63 				   struct netlink_ext_ack *extack)
64 {
65 	return -EOPNOTSUPP;
66 }
67 
68 #endif
69