FreeBSD/Linux Kernel Cross Reference
sys/sys/timepps.h
1 /* $NetBSD: timepps.h,v 1.8 2005/02/26 22:25:34 perry Exp $ */
2
3 /*
4 * Copyright (c) 1998 Jonathan Stone
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by Jonathan Stone for
18 * the NetBSD Project.
19 * 4. The name of the author may not be used to endorse or promote products
20 * derived from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34 #ifndef _SYS_TIMEPPS_H_
35 #define _SYS_TIMEPPS_H_
36
37 /*
38 * This header file complies with "Pulse-Per-Second API for UNIX-like
39 * Operating Systems, Version 1.0", draft-mogul-pps-api-05.txt
40 */
41
42 #include <sys/ioccom.h>
43
44 #define PPS_API_VERS_1 1 /* API version number */
45
46 /*
47 * PPSAPI type definitions
48 */
49 typedef int32_t pps_handle_t; /* represents a PPS source */
50 typedef u_int32_t pps_seq_t; /* sequence number, at least 32 bits */
51
52 typedef union pps_timeu {
53 struct timespec tspec;
54 struct { /* NTP long fixed-point format */
55 unsigned int integral;
56 unsigned int fractional;
57 } ntplfp;
58 unsigned long longpair[2];
59 } pps_timeu_t;
60
61
62 /*
63 * timestamp information
64 */
65 typedef struct {
66 pps_seq_t assert_sequence; /* assert event seq # */
67 pps_seq_t clear_sequence; /* clear event seq # */
68 pps_timeu_t assert_tu;
69 pps_timeu_t clear_tu;
70 int current_mode; /* current mode bits */
71 } pps_info_t;
72
73 #define assert_timestamp assert_tu.tspec
74 #define clear_timestamp clear_tu.tspec
75
76
77 /*
78 * Parameter structure
79 */
80 typedef struct {
81 int api_version; /* API version number */
82 int mode; /* mode bits */
83 pps_timeu_t assert_off_tu;
84 pps_timeu_t clear_off_tu;
85 } pps_params_t;
86 #define assert_offset assert_off_tu.tspec
87 #define clear_offset clear_off_tu.tspec
88
89
90 /*
91 * Device/implementation parameters (mode, edge bits)
92 */
93 #define PPS_CAPTUREASSERT 0x01
94 #define PPS_CAPTURECLEAR 0x02
95 #define PPS_CAPTUREBOTH 0x03
96 #define PPS_OFFSETASSERT 0x10
97 #define PPS_OFFSETCLEAR 0x20
98 #define PPS_CANWAIT 0x100
99 #define PPS_CANPOLL 0x200
100
101 /*
102 * Kernel actions
103 */
104 #define PPS_ECHOASSERT 0x40
105 #define PPS_ECHOCLEAR 0x80
106
107
108 /*
109 * timestamp formats (tsformat, mode)
110 */
111 #define PPS_TSFMT_TSPEC 0x1000
112 #define PPS_TSFMT_NTPLFP 0x2000
113
114 /*
115 * Kernel discipline actions (kernel_consumer)
116 */
117 #define PPS_KC_HARDPPS 0
118 #define PPS_KC_HARDPPS_PLL 1
119 #define PPS_KC_HARDPPS_FLL 2
120
121 /*
122 * IOCTL definitions
123 */
124 #define PPS_IOC_CREATE _IO('1', 1)
125 #define PPS_IOC_DESTROY _IO('1', 2)
126 #define PPS_IOC_SETPARAMS _IOW('1', 3, pps_params_t)
127 #define PPS_IOC_GETPARAMS _IOR('1', 4, pps_params_t)
128 #define PPS_IOC_GETCAP _IOR('1', 5, int)
129 #define PPS_IOC_FETCH _IOWR('1', 6, pps_info_t)
130 #define PPS_IOC_KCBIND _IOW('1', 7, int)
131
132 #ifndef _KERNEL
133
134 #include <sys/cdefs.h>
135 #include <sys/ioctl.h>
136
137 static __inline int time_pps_create(int, pps_handle_t *);
138 static __inline int time_pps_destroy(pps_handle_t);
139 static __inline int time_pps_setparams(pps_handle_t, const pps_params_t *);
140 static __inline int time_pps_getparams(pps_handle_t, pps_params_t *);
141 static __inline int time_pps_getcap(pps_handle_t, int *);
142 static __inline int time_pps_fetch(pps_handle_t, const int, pps_info_t *,
143 const struct timespec *);
144 #if 0
145 static __inline int time_pps_wait(pps_handle_t, const struct timespec *,
146 pps_info_t *);
147 #endif
148
149 static __inline int time_pps_kcbind(pps_handle_t, const int, const int,
150 const int);
151
152 static __inline int
153 time_pps_create(filedes, handle)
154 int filedes;
155 pps_handle_t *handle;
156 {
157 *handle = filedes;
158 return (0);
159 }
160
161 static __inline int
162 time_pps_destroy(handle)
163 pps_handle_t handle;
164 {
165 return (0);
166 }
167
168 static __inline int
169 time_pps_setparams(handle, ppsparams)
170 pps_handle_t handle;
171 const pps_params_t *ppsparams;
172 {
173 return (ioctl(handle, PPS_IOC_SETPARAMS, ppsparams));
174 }
175
176 static __inline int
177 time_pps_getparams(handle, ppsparams)
178 pps_handle_t handle;
179 pps_params_t *ppsparams;
180 {
181 return (ioctl(handle, PPS_IOC_GETPARAMS, ppsparams));
182 }
183
184 static __inline int
185 time_pps_getcap(handle, mode)
186 pps_handle_t handle;
187 int *mode;
188 {
189 return (ioctl(handle, PPS_IOC_GETCAP, mode));
190 }
191
192 static __inline int
193 time_pps_fetch(handle, tsformat, ppsinfobuf, timeout)
194 pps_handle_t handle;
195 const int tsformat;
196 pps_info_t *ppsinfobuf;
197 const struct timespec *timeout;
198 {
199 return (ioctl(handle, PPS_IOC_FETCH, ppsinfobuf));
200 }
201
202 static __inline int
203 time_pps_kcbind(handle, kernel_consumer, edge, tsformat)
204 pps_handle_t handle;
205 const int kernel_consumer;
206 const int edge;
207 const int tsformat;
208 {
209 return (ioctl(handle, PPS_IOC_KCBIND, &edge));
210 }
211 #endif /* !_KERNEL*/
212
213 #endif /* SYS_TIMEPPS_H_ */
Cache object: 6b250a34c66dd09b555094ae5a74f3a4
|