| /* SPDX-License-Identifier: GPL-2.0 */ |
| |
| #ifndef _LINUX_NET_TIMESTAMPING_H_ |
| #define _LINUX_NET_TIMESTAMPING_H_ |
| |
| #include <uapi/linux/net_tstamp.h> |
| |
| #define SOF_TIMESTAMPING_SOFTWARE_MASK (SOF_TIMESTAMPING_RX_SOFTWARE | \ |
| SOF_TIMESTAMPING_TX_SOFTWARE | \ |
| SOF_TIMESTAMPING_SOFTWARE) |
| |
| #define SOF_TIMESTAMPING_HARDWARE_MASK (SOF_TIMESTAMPING_RX_HARDWARE | \ |
| SOF_TIMESTAMPING_TX_HARDWARE | \ |
| SOF_TIMESTAMPING_RAW_HARDWARE) |
| |
| enum hwtstamp_source { |
| HWTSTAMP_SOURCE_UNSPEC, |
| HWTSTAMP_SOURCE_NETDEV, |
| HWTSTAMP_SOURCE_PHYLIB, |
| }; |
| |
| /** |
| * struct hwtstamp_provider_desc - hwtstamp provider description |
| * |
| * @index: index of the hwtstamp provider. |
| * @qualifier: hwtstamp provider qualifier. |
| */ |
| struct hwtstamp_provider_desc { |
| int index; |
| enum hwtstamp_provider_qualifier qualifier; |
| }; |
| |
| /** |
| * struct hwtstamp_provider - hwtstamp provider object |
| * |
| * @rcu_head: RCU callback used to free the struct. |
| * @source: source of the hwtstamp provider. |
| * @phydev: pointer of the phydev source in case a PTP coming from phylib |
| * @desc: hwtstamp provider description. |
| */ |
| |
| struct hwtstamp_provider { |
| struct rcu_head rcu_head; |
| enum hwtstamp_source source; |
| struct phy_device *phydev; |
| struct hwtstamp_provider_desc desc; |
| }; |
| |
| /** |
| * struct kernel_hwtstamp_config - Kernel copy of struct hwtstamp_config |
| * |
| * @flags: see struct hwtstamp_config |
| * @tx_type: see struct hwtstamp_config |
| * @rx_filter: see struct hwtstamp_config |
| * @ifr: pointer to ifreq structure from the original ioctl request, to pass to |
| * a legacy implementation of a lower driver |
| * @copied_to_user: request was passed to a legacy implementation which already |
| * copied the ioctl request back to user space |
| * @source: indication whether timestamps should come from the netdev or from |
| * an attached phylib PHY |
| * @qualifier: qualifier of the hwtstamp provider |
| * |
| * Prefer using this structure for in-kernel processing of hardware |
| * timestamping configuration, over the inextensible struct hwtstamp_config |
| * exposed to the %SIOCGHWTSTAMP and %SIOCSHWTSTAMP ioctl UAPI. |
| */ |
| struct kernel_hwtstamp_config { |
| int flags; |
| int tx_type; |
| int rx_filter; |
| struct ifreq *ifr; |
| bool copied_to_user; |
| enum hwtstamp_source source; |
| enum hwtstamp_provider_qualifier qualifier; |
| }; |
| |
| static inline void hwtstamp_config_to_kernel(struct kernel_hwtstamp_config *kernel_cfg, |
| const struct hwtstamp_config *cfg) |
| { |
| kernel_cfg->flags = cfg->flags; |
| kernel_cfg->tx_type = cfg->tx_type; |
| kernel_cfg->rx_filter = cfg->rx_filter; |
| } |
| |
| static inline void hwtstamp_config_from_kernel(struct hwtstamp_config *cfg, |
| const struct kernel_hwtstamp_config *kernel_cfg) |
| { |
| cfg->flags = kernel_cfg->flags; |
| cfg->tx_type = kernel_cfg->tx_type; |
| cfg->rx_filter = kernel_cfg->rx_filter; |
| } |
| |
| static inline bool kernel_hwtstamp_config_changed(const struct kernel_hwtstamp_config *a, |
| const struct kernel_hwtstamp_config *b) |
| { |
| return a->flags != b->flags || |
| a->tx_type != b->tx_type || |
| a->rx_filter != b->rx_filter; |
| } |
| |
| #endif /* _LINUX_NET_TIMESTAMPING_H_ */ |