1d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran/* 2d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * PTP 1588 clock support - user space interface 3d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * 4d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * Copyright (C) 2010 OMICRON electronics GmbH 5d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * 6d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * This program is free software; you can redistribute it and/or modify 7d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * it under the terms of the GNU General Public License as published by 8d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * the Free Software Foundation; either version 2 of the License, or 9d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * (at your option) any later version. 10d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * 11d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * This program is distributed in the hope that it will be useful, 12d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * but WITHOUT ANY WARRANTY; without even the implied warranty of 13d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * GNU General Public License for more details. 15d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * 16d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * You should have received a copy of the GNU General Public License 17d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * along with this program; if not, write to the Free Software 18d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran */ 20d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 21d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#ifndef _PTP_CLOCK_H_ 22d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define _PTP_CLOCK_H_ 23d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 24d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#include <linux/ioctl.h> 25d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#include <linux/types.h> 26d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 27d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran/* PTP_xxx bits, for the flags field within the request structures. */ 28d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define PTP_ENABLE_FEATURE (1<<0) 29d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define PTP_RISING_EDGE (1<<1) 30d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define PTP_FALLING_EDGE (1<<2) 31d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 32d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran/* 33d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * struct ptp_clock_time - represents a time value 34d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * 35d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * The sign of the seconds field applies to the whole value. The 36d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * nanoseconds field is always unsigned. The reserved field is 37d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * included for sub-nanosecond resolution, should the demand for 38d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * this ever appear. 39d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran * 40d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran */ 41d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochranstruct ptp_clock_time { 42d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran __s64 sec; /* seconds */ 43d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran __u32 nsec; /* nanoseconds */ 44d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran __u32 reserved; 45d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran}; 46d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 47d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochranstruct ptp_clock_caps { 48d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran int max_adj; /* Maximum frequency adjustment in parts per billon. */ 49d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran int n_alarm; /* Number of programmable alarms. */ 50d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran int n_ext_ts; /* Number of external time stamp channels. */ 51d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran int n_per_out; /* Number of programmable periodic signals. */ 52d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran int pps; /* Whether the clock supports a PPS callback. */ 53d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran int rsv[15]; /* Reserved for future use. */ 54d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran}; 55d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 56d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochranstruct ptp_extts_request { 57d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int index; /* Which channel to configure. */ 58d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int flags; /* Bit field for PTP_xxx flags. */ 59d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int rsv[2]; /* Reserved for future use. */ 60d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran}; 61d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 62d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochranstruct ptp_perout_request { 63d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran struct ptp_clock_time start; /* Absolute start time. */ 64d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran struct ptp_clock_time period; /* Desired period, zero means disable. */ 65d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int index; /* Which channel to configure. */ 66d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int flags; /* Reserved for future use. */ 67d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int rsv[4]; /* Reserved for future use. */ 68d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran}; 69d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 70d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define PTP_CLK_MAGIC '=' 71d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 72d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define PTP_CLOCK_GETCAPS _IOR(PTP_CLK_MAGIC, 1, struct ptp_clock_caps) 73d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define PTP_EXTTS_REQUEST _IOW(PTP_CLK_MAGIC, 2, struct ptp_extts_request) 74d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define PTP_PEROUT_REQUEST _IOW(PTP_CLK_MAGIC, 3, struct ptp_perout_request) 75d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#define PTP_ENABLE_PPS _IOW(PTP_CLK_MAGIC, 4, int) 76d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 77d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochranstruct ptp_extts_event { 78d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran struct ptp_clock_time t; /* Time event occured. */ 79d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int index; /* Which channel produced the event. */ 80d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int flags; /* Reserved for future use. */ 81d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran unsigned int rsv[2]; /* Reserved for future use. */ 82d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran}; 83d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran 84d94ba80ebbea17f036cecb104398fbcd788aa742Richard Cochran#endif 85