0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #ifndef _PTP_CLOCK_H_
0023 #define _PTP_CLOCK_H_
0024
0025 #include <linux/ioctl.h>
0026 #include <linux/types.h>
0027
0028
0029
0030
0031 #define PTP_ENABLE_FEATURE (1<<0)
0032 #define PTP_RISING_EDGE (1<<1)
0033 #define PTP_FALLING_EDGE (1<<2)
0034 #define PTP_STRICT_FLAGS (1<<3)
0035 #define PTP_EXTTS_EDGES (PTP_RISING_EDGE | PTP_FALLING_EDGE)
0036
0037
0038
0039
0040 #define PTP_EXTTS_VALID_FLAGS (PTP_ENABLE_FEATURE | \
0041 PTP_RISING_EDGE | \
0042 PTP_FALLING_EDGE | \
0043 PTP_STRICT_FLAGS)
0044
0045
0046
0047
0048
0049 #define PTP_EXTTS_V1_VALID_FLAGS (PTP_ENABLE_FEATURE | \
0050 PTP_RISING_EDGE | \
0051 PTP_FALLING_EDGE)
0052
0053
0054
0055
0056 #define PTP_PEROUT_ONE_SHOT (1<<0)
0057 #define PTP_PEROUT_DUTY_CYCLE (1<<1)
0058 #define PTP_PEROUT_PHASE (1<<2)
0059
0060
0061
0062
0063 #define PTP_PEROUT_VALID_FLAGS (PTP_PEROUT_ONE_SHOT | \
0064 PTP_PEROUT_DUTY_CYCLE | \
0065 PTP_PEROUT_PHASE)
0066
0067
0068
0069
0070 #define PTP_PEROUT_V1_VALID_FLAGS (0)
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 struct ptp_clock_time {
0082 __s64 sec;
0083 __u32 nsec;
0084 __u32 reserved;
0085 };
0086
0087 struct ptp_clock_caps {
0088 int max_adj;
0089 int n_alarm;
0090 int n_ext_ts;
0091 int n_per_out;
0092 int pps;
0093 int n_pins;
0094
0095 int cross_timestamping;
0096
0097 int adjust_phase;
0098 int rsv[12];
0099 };
0100
0101 struct ptp_extts_request {
0102 unsigned int index;
0103 unsigned int flags;
0104 unsigned int rsv[2];
0105 };
0106
0107 struct ptp_perout_request {
0108 union {
0109
0110
0111
0112
0113 struct ptp_clock_time start;
0114
0115
0116
0117
0118
0119
0120 struct ptp_clock_time phase;
0121 };
0122 struct ptp_clock_time period;
0123 unsigned int index;
0124 unsigned int flags;
0125 union {
0126
0127
0128
0129
0130
0131 struct ptp_clock_time on;
0132
0133 unsigned int rsv[4];
0134 };
0135 };
0136
0137 #define PTP_MAX_SAMPLES 25
0138
0139 struct ptp_sys_offset {
0140 unsigned int n_samples;
0141 unsigned int rsv[3];
0142
0143
0144
0145
0146
0147 struct ptp_clock_time ts[2 * PTP_MAX_SAMPLES + 1];
0148 };
0149
0150 struct ptp_sys_offset_extended {
0151 unsigned int n_samples;
0152 unsigned int rsv[3];
0153
0154
0155
0156
0157 struct ptp_clock_time ts[PTP_MAX_SAMPLES][3];
0158 };
0159
0160 struct ptp_sys_offset_precise {
0161 struct ptp_clock_time device;
0162 struct ptp_clock_time sys_realtime;
0163 struct ptp_clock_time sys_monoraw;
0164 unsigned int rsv[4];
0165 };
0166
0167 enum ptp_pin_function {
0168 PTP_PF_NONE,
0169 PTP_PF_EXTTS,
0170 PTP_PF_PEROUT,
0171 PTP_PF_PHYSYNC,
0172 };
0173
0174 struct ptp_pin_desc {
0175
0176
0177
0178
0179
0180 char name[64];
0181
0182
0183
0184 unsigned int index;
0185
0186
0187
0188 unsigned int func;
0189
0190
0191
0192
0193
0194 unsigned int chan;
0195
0196
0197
0198 unsigned int rsv[5];
0199 };
0200
0201 #define PTP_CLK_MAGIC '='
0202
0203 #define PTP_CLOCK_GETCAPS _IOR(PTP_CLK_MAGIC, 1, struct ptp_clock_caps)
0204 #define PTP_EXTTS_REQUEST _IOW(PTP_CLK_MAGIC, 2, struct ptp_extts_request)
0205 #define PTP_PEROUT_REQUEST _IOW(PTP_CLK_MAGIC, 3, struct ptp_perout_request)
0206 #define PTP_ENABLE_PPS _IOW(PTP_CLK_MAGIC, 4, int)
0207 #define PTP_SYS_OFFSET _IOW(PTP_CLK_MAGIC, 5, struct ptp_sys_offset)
0208 #define PTP_PIN_GETFUNC _IOWR(PTP_CLK_MAGIC, 6, struct ptp_pin_desc)
0209 #define PTP_PIN_SETFUNC _IOW(PTP_CLK_MAGIC, 7, struct ptp_pin_desc)
0210 #define PTP_SYS_OFFSET_PRECISE \
0211 _IOWR(PTP_CLK_MAGIC, 8, struct ptp_sys_offset_precise)
0212 #define PTP_SYS_OFFSET_EXTENDED \
0213 _IOWR(PTP_CLK_MAGIC, 9, struct ptp_sys_offset_extended)
0214
0215 #define PTP_CLOCK_GETCAPS2 _IOR(PTP_CLK_MAGIC, 10, struct ptp_clock_caps)
0216 #define PTP_EXTTS_REQUEST2 _IOW(PTP_CLK_MAGIC, 11, struct ptp_extts_request)
0217 #define PTP_PEROUT_REQUEST2 _IOW(PTP_CLK_MAGIC, 12, struct ptp_perout_request)
0218 #define PTP_ENABLE_PPS2 _IOW(PTP_CLK_MAGIC, 13, int)
0219 #define PTP_SYS_OFFSET2 _IOW(PTP_CLK_MAGIC, 14, struct ptp_sys_offset)
0220 #define PTP_PIN_GETFUNC2 _IOWR(PTP_CLK_MAGIC, 15, struct ptp_pin_desc)
0221 #define PTP_PIN_SETFUNC2 _IOW(PTP_CLK_MAGIC, 16, struct ptp_pin_desc)
0222 #define PTP_SYS_OFFSET_PRECISE2 \
0223 _IOWR(PTP_CLK_MAGIC, 17, struct ptp_sys_offset_precise)
0224 #define PTP_SYS_OFFSET_EXTENDED2 \
0225 _IOWR(PTP_CLK_MAGIC, 18, struct ptp_sys_offset_extended)
0226
0227 struct ptp_extts_event {
0228 struct ptp_clock_time t;
0229 unsigned int index;
0230 unsigned int flags;
0231 unsigned int rsv[2];
0232 };
0233
0234 #endif