diff options
Diffstat (limited to 'include/linux/ptp_clock_kernel.h')
| -rw-r--r-- | include/linux/ptp_clock_kernel.h | 33 | 
1 files changed, 33 insertions, 0 deletions
| diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h index 51349d124ee5..7121bbe76979 100644 --- a/include/linux/ptp_clock_kernel.h +++ b/include/linux/ptp_clock_kernel.h @@ -39,6 +39,15 @@ struct ptp_clock_request {  };  struct system_device_crosststamp; + +/** + * struct ptp_system_timestamp - system time corresponding to a PHC timestamp + */ +struct ptp_system_timestamp { +	struct timespec64 pre_ts; +	struct timespec64 post_ts; +}; +  /**   * struct ptp_clock_info - decribes a PTP hardware clock   * @@ -73,8 +82,18 @@ struct system_device_crosststamp;   *            parameter delta: Desired change in nanoseconds.   *   * @gettime64:  Reads the current time from the hardware clock. + *              This method is deprecated.  New drivers should implement + *              the @gettimex64 method instead.   *              parameter ts: Holds the result.   * + * @gettimex64:  Reads the current time from the hardware clock and optionally + *               also the system clock. + *               parameter ts: Holds the PHC timestamp. + *               parameter sts: If not NULL, it holds a pair of timestamps from + *               the system clock. The first reading is made right before + *               reading the lowest bits of the PHC timestamp and the second + *               reading immediately follows that. + *   * @getcrosststamp:  Reads the current time from the hardware clock and   *                   system clock simultaneously.   *                   parameter cts: Contains timestamp (device,system) pair, @@ -124,6 +143,8 @@ struct ptp_clock_info {  	int (*adjfreq)(struct ptp_clock_info *ptp, s32 delta);  	int (*adjtime)(struct ptp_clock_info *ptp, s64 delta);  	int (*gettime64)(struct ptp_clock_info *ptp, struct timespec64 *ts); +	int (*gettimex64)(struct ptp_clock_info *ptp, struct timespec64 *ts, +			  struct ptp_system_timestamp *sts);  	int (*getcrosststamp)(struct ptp_clock_info *ptp,  			      struct system_device_crosststamp *cts);  	int (*settime64)(struct ptp_clock_info *p, const struct timespec64 *ts); @@ -247,4 +268,16 @@ static inline int ptp_schedule_worker(struct ptp_clock *ptp,  #endif +static inline void ptp_read_system_prets(struct ptp_system_timestamp *sts) +{ +	if (sts) +		ktime_get_real_ts64(&sts->pre_ts); +} + +static inline void ptp_read_system_postts(struct ptp_system_timestamp *sts) +{ +	if (sts) +		ktime_get_real_ts64(&sts->post_ts); +} +  #endif | 
