Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v6.14 101 lines 3.0 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2 3#ifndef _LINUX_NET_TIMESTAMPING_H_ 4#define _LINUX_NET_TIMESTAMPING_H_ 5 6#include <uapi/linux/net_tstamp.h> 7 8#define SOF_TIMESTAMPING_SOFTWARE_MASK (SOF_TIMESTAMPING_RX_SOFTWARE | \ 9 SOF_TIMESTAMPING_TX_SOFTWARE | \ 10 SOF_TIMESTAMPING_SOFTWARE) 11 12#define SOF_TIMESTAMPING_HARDWARE_MASK (SOF_TIMESTAMPING_RX_HARDWARE | \ 13 SOF_TIMESTAMPING_TX_HARDWARE | \ 14 SOF_TIMESTAMPING_RAW_HARDWARE) 15 16enum hwtstamp_source { 17 HWTSTAMP_SOURCE_UNSPEC, 18 HWTSTAMP_SOURCE_NETDEV, 19 HWTSTAMP_SOURCE_PHYLIB, 20}; 21 22/** 23 * struct hwtstamp_provider_desc - hwtstamp provider description 24 * 25 * @index: index of the hwtstamp provider. 26 * @qualifier: hwtstamp provider qualifier. 27 */ 28struct hwtstamp_provider_desc { 29 int index; 30 enum hwtstamp_provider_qualifier qualifier; 31}; 32 33/** 34 * struct hwtstamp_provider - hwtstamp provider object 35 * 36 * @rcu_head: RCU callback used to free the struct. 37 * @source: source of the hwtstamp provider. 38 * @phydev: pointer of the phydev source in case a PTP coming from phylib 39 * @desc: hwtstamp provider description. 40 */ 41 42struct hwtstamp_provider { 43 struct rcu_head rcu_head; 44 enum hwtstamp_source source; 45 struct phy_device *phydev; 46 struct hwtstamp_provider_desc desc; 47}; 48 49/** 50 * struct kernel_hwtstamp_config - Kernel copy of struct hwtstamp_config 51 * 52 * @flags: see struct hwtstamp_config 53 * @tx_type: see struct hwtstamp_config 54 * @rx_filter: see struct hwtstamp_config 55 * @ifr: pointer to ifreq structure from the original ioctl request, to pass to 56 * a legacy implementation of a lower driver 57 * @copied_to_user: request was passed to a legacy implementation which already 58 * copied the ioctl request back to user space 59 * @source: indication whether timestamps should come from the netdev or from 60 * an attached phylib PHY 61 * @qualifier: qualifier of the hwtstamp provider 62 * 63 * Prefer using this structure for in-kernel processing of hardware 64 * timestamping configuration, over the inextensible struct hwtstamp_config 65 * exposed to the %SIOCGHWTSTAMP and %SIOCSHWTSTAMP ioctl UAPI. 66 */ 67struct kernel_hwtstamp_config { 68 int flags; 69 int tx_type; 70 int rx_filter; 71 struct ifreq *ifr; 72 bool copied_to_user; 73 enum hwtstamp_source source; 74 enum hwtstamp_provider_qualifier qualifier; 75}; 76 77static inline void hwtstamp_config_to_kernel(struct kernel_hwtstamp_config *kernel_cfg, 78 const struct hwtstamp_config *cfg) 79{ 80 kernel_cfg->flags = cfg->flags; 81 kernel_cfg->tx_type = cfg->tx_type; 82 kernel_cfg->rx_filter = cfg->rx_filter; 83} 84 85static inline void hwtstamp_config_from_kernel(struct hwtstamp_config *cfg, 86 const struct kernel_hwtstamp_config *kernel_cfg) 87{ 88 cfg->flags = kernel_cfg->flags; 89 cfg->tx_type = kernel_cfg->tx_type; 90 cfg->rx_filter = kernel_cfg->rx_filter; 91} 92 93static inline bool kernel_hwtstamp_config_changed(const struct kernel_hwtstamp_config *a, 94 const struct kernel_hwtstamp_config *b) 95{ 96 return a->flags != b->flags || 97 a->tx_type != b->tx_type || 98 a->rx_filter != b->rx_filter; 99} 100 101#endif /* _LINUX_NET_TIMESTAMPING_H_ */