Loading drivers/ptp/ptp_vclock.c +34 −0 Original line number Diff line number Diff line Loading @@ -183,3 +183,37 @@ int ptp_get_vclocks_index(int pclock_index, int **vclock_index) return num; } EXPORT_SYMBOL(ptp_get_vclocks_index); void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps, int vclock_index) { char name[PTP_CLOCK_NAME_LEN] = ""; struct ptp_vclock *vclock; struct ptp_clock *ptp; unsigned long flags; struct device *dev; u64 ns; snprintf(name, PTP_CLOCK_NAME_LEN, "ptp%d", vclock_index); dev = class_find_device_by_name(ptp_class, name); if (!dev) return; ptp = dev_get_drvdata(dev); if (!ptp->is_virtual_clock) { put_device(dev); return; } vclock = info_to_vclock(ptp->info); ns = ktime_to_ns(hwtstamps->hwtstamp); spin_lock_irqsave(&vclock->lock, flags); ns = timecounter_cyc2time(&vclock->tc, ns); spin_unlock_irqrestore(&vclock->lock, flags); put_device(dev); hwtstamps->hwtstamp = ns_to_ktime(ns); } EXPORT_SYMBOL(ptp_convert_timestamp); include/linux/ptp_clock_kernel.h +13 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ #include <linux/pps_kernel.h> #include <linux/ptp_clock.h> #include <linux/timecounter.h> #include <linux/skbuff.h> #define PTP_CLOCK_NAME_LEN 32 /** Loading Loading @@ -318,6 +319,15 @@ void ptp_cancel_worker_sync(struct ptp_clock *ptp); */ int ptp_get_vclocks_index(int pclock_index, int **vclock_index); /** * ptp_convert_timestamp() - convert timestamp to a ptp vclock time * * @hwtstamps: skb_shared_hwtstamps structure pointer * @vclock_index: phc index of ptp vclock. */ void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps, int vclock_index); #else static inline struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, struct device *parent) Loading @@ -339,6 +349,9 @@ static inline void ptp_cancel_worker_sync(struct ptp_clock *ptp) { } static inline int ptp_get_vclocks_index(int pclock_index, int **vclock_index) { return 0; } static inline void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps, int vclock_index) { } #endif Loading Loading
drivers/ptp/ptp_vclock.c +34 −0 Original line number Diff line number Diff line Loading @@ -183,3 +183,37 @@ int ptp_get_vclocks_index(int pclock_index, int **vclock_index) return num; } EXPORT_SYMBOL(ptp_get_vclocks_index); void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps, int vclock_index) { char name[PTP_CLOCK_NAME_LEN] = ""; struct ptp_vclock *vclock; struct ptp_clock *ptp; unsigned long flags; struct device *dev; u64 ns; snprintf(name, PTP_CLOCK_NAME_LEN, "ptp%d", vclock_index); dev = class_find_device_by_name(ptp_class, name); if (!dev) return; ptp = dev_get_drvdata(dev); if (!ptp->is_virtual_clock) { put_device(dev); return; } vclock = info_to_vclock(ptp->info); ns = ktime_to_ns(hwtstamps->hwtstamp); spin_lock_irqsave(&vclock->lock, flags); ns = timecounter_cyc2time(&vclock->tc, ns); spin_unlock_irqrestore(&vclock->lock, flags); put_device(dev); hwtstamps->hwtstamp = ns_to_ktime(ns); } EXPORT_SYMBOL(ptp_convert_timestamp);
include/linux/ptp_clock_kernel.h +13 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ #include <linux/pps_kernel.h> #include <linux/ptp_clock.h> #include <linux/timecounter.h> #include <linux/skbuff.h> #define PTP_CLOCK_NAME_LEN 32 /** Loading Loading @@ -318,6 +319,15 @@ void ptp_cancel_worker_sync(struct ptp_clock *ptp); */ int ptp_get_vclocks_index(int pclock_index, int **vclock_index); /** * ptp_convert_timestamp() - convert timestamp to a ptp vclock time * * @hwtstamps: skb_shared_hwtstamps structure pointer * @vclock_index: phc index of ptp vclock. */ void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps, int vclock_index); #else static inline struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, struct device *parent) Loading @@ -339,6 +349,9 @@ static inline void ptp_cancel_worker_sync(struct ptp_clock *ptp) { } static inline int ptp_get_vclocks_index(int pclock_index, int **vclock_index) { return 0; } static inline void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps, int vclock_index) { } #endif Loading