ptp_clock.h revision dc75b01004a0588c1eb3bc26d7248a6e473b2cdd
15dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes/* 25dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * PTP 1588 clock support - user space interface 35dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 4dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes * Copyright (c) 2010 OMICRON electronics GmbH 539bac055674d23770b9a724221b728e443196ea7Elliott Hughes * Copyright (c) 2010-2017 The strace developers. 65dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 75dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * This program is free software; you can redistribute it and/or modify 85dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * it under the terms of the GNU General Public License as published by 95dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * the Free Software Foundation; either version 2 of the License, or 105dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * (at your option) any later version. 115dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 125dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * This program is distributed in the hope that it will be useful, 135dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * but WITHOUT ANY WARRANTY; without even the implied warranty of 145dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 155dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * GNU General Public License for more details. 165dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 175dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * You should have received a copy of the GNU General Public License 185dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * along with this program; if not, write to the Free Software 195dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 205dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes */ 215dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 225dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#ifndef _PTP_CLOCK_H_ 235dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define _PTP_CLOCK_H_ 245dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 255dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#include <linux/ioctl.h> 265dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#include <linux/types.h> 275dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 285dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes/* PTP_xxx bits, for the flags field within the request structures. */ 295dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_ENABLE_FEATURE (1<<0) 305dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_RISING_EDGE (1<<1) 315dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_FALLING_EDGE (1<<2) 325dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 335dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes/* 345dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * struct ptp_clock_time - represents a time value 355dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 365dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * The sign of the seconds field applies to the whole value. The 375dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * nanoseconds field is always unsigned. The reserved field is 385dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * included for sub-nanosecond resolution, should the demand for 395dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * this ever appear. 405dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * 415dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes */ 425dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesstruct ptp_clock_time { 435dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes __s64 sec; /* seconds */ 445dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes __u32 nsec; /* nanoseconds */ 455dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes __u32 reserved; 465dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes}; 475dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 485dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesstruct ptp_clock_caps { 495dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes int max_adj; /* Maximum frequency adjustment in parts per billon. */ 505dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes int n_alarm; /* Number of programmable alarms. */ 515dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes int n_ext_ts; /* Number of external time stamp channels. */ 525dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes int n_per_out; /* Number of programmable periodic signals. */ 535dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes int pps; /* Whether the clock supports a PPS callback. */ 545dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes int rsv[15]; /* Reserved for future use. */ 555dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes}; 565dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 575dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesstruct ptp_extts_request { 585dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int index; /* Which channel to configure. */ 595dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int flags; /* Bit field for PTP_xxx flags. */ 605dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int rsv[2]; /* Reserved for future use. */ 615dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes}; 625dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 635dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesstruct ptp_perout_request { 645dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes struct ptp_clock_time start; /* Absolute start time. */ 655dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes struct ptp_clock_time period; /* Desired period, zero means disable. */ 665dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int index; /* Which channel to configure. */ 675dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int flags; /* Reserved for future use. */ 685dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int rsv[4]; /* Reserved for future use. */ 695dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes}; 705dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 715dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_MAX_SAMPLES 25 /* Maximum allowed offset measurement samples. */ 725dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 735dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesstruct ptp_sys_offset { 745dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int n_samples; /* Desired number of measurements. */ 755dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int rsv[3]; /* Reserved for future use. */ 765dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes /* 775dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * Array of interleaved system/phc time stamps. The kernel 785dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * will provide 2*n_samples + 1 time stamps, with the last 795dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes * one as a system time stamp. 805dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes */ 815dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes struct ptp_clock_time ts[2 * PTP_MAX_SAMPLES + 1]; 825dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes}; 835dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 845dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_CLK_MAGIC '=' 855dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 865dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_CLOCK_GETCAPS _IOR(PTP_CLK_MAGIC, 1, struct ptp_clock_caps) 875dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_EXTTS_REQUEST _IOW(PTP_CLK_MAGIC, 2, struct ptp_extts_request) 885dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_PEROUT_REQUEST _IOW(PTP_CLK_MAGIC, 3, struct ptp_perout_request) 895dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_ENABLE_PPS _IOW(PTP_CLK_MAGIC, 4, int) 905dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#define PTP_SYS_OFFSET _IOW(PTP_CLK_MAGIC, 5, struct ptp_sys_offset) 915dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 925dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesstruct ptp_extts_event { 93dc75b01004a0588c1eb3bc26d7248a6e473b2cddElliott Hughes struct ptp_clock_time t; /* Time event occurred. */ 945dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int index; /* Which channel produced the event. */ 955dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int flags; /* Reserved for future use. */ 965dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes unsigned int rsv[2]; /* Reserved for future use. */ 975dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes}; 985dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 995dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#endif 100