49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* include/net/dsa_stubs.h - Stubs for the Distributed Switch Architecture framework
|
|
*/
|
|
|
|
#include <linux/mutex.h>
|
|
#include <linux/netdevice.h>
|
|
#include <linux/net_tstamp.h>
|
|
#include <net/dsa.h>
|
|
|
|
#if IS_ENABLED(CONFIG_NET_DSA)
|
|
|
|
extern const struct dsa_stubs *dsa_stubs;
|
|
|
|
struct dsa_stubs {
|
|
int (*master_hwtstamp_validate)(struct net_device *dev,
|
|
const struct kernel_hwtstamp_config *config,
|
|
struct netlink_ext_ack *extack);
|
|
};
|
|
|
|
static inline int dsa_master_hwtstamp_validate(struct net_device *dev,
|
|
const struct kernel_hwtstamp_config *config,
|
|
struct netlink_ext_ack *extack)
|
|
{
|
|
if (!netdev_uses_dsa(dev))
|
|
return 0;
|
|
|
|
/* rtnl_lock() is a sufficient guarantee, because as long as
|
|
* netdev_uses_dsa() returns true, the dsa_core module is still
|
|
* registered, and so, dsa_unregister_stubs() couldn't have run.
|
|
* For netdev_uses_dsa() to start returning false, it would imply that
|
|
* dsa_master_teardown() has executed, which requires rtnl_lock().
|
|
*/
|
|
ASSERT_RTNL();
|
|
|
|
return dsa_stubs->master_hwtstamp_validate(dev, config, extack);
|
|
}
|
|
|
|
#else
|
|
|
|
static inline int dsa_master_hwtstamp_validate(struct net_device *dev,
|
|
const struct kernel_hwtstamp_config *config,
|
|
struct netlink_ext_ack *extack)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#endif
|