FreeBSD/Linux Kernel Cross Reference
sys/sys/timepps.h
1 /* $NetBSD: timepps.h,v 1.6 2004/01/23 05:01:19 simonb 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 __P((int, pps_handle_t *));
138 static __inline int time_pps_destroy __P((pps_handle_t));
139 static __inline int time_pps_setparams __P((pps_handle_t,
140 const pps_params_t *));
141 static __inline int time_pps_getparams __P((pps_handle_t, pps_params_t *));
142 static __inline int time_pps_getcap __P((pps_handle_t, int *));
143 static __inline int time_pps_fetch __P((pps_handle_t, const int, pps_info_t *,
144 const struct timespec *));
145 #if 0
146 static __inline int time_pps_wait __P((pps_handle_t, const struct timespec *,
147 pps_info_t *));
148 #endif
149
150 static __inline int time_pps_kcbind __P((pps_handle_t, const int, const int,
151 const int));
152
153 static __inline int
154 time_pps_create(filedes, handle)
155 int filedes;
156 pps_handle_t *handle;
157 {
158 *handle = filedes;
159 return (0);
160 }
161
162 static __inline int
163 time_pps_destroy(handle)
164 pps_handle_t handle;
165 {
166 return (0);
167 }
168
169 static __inline int
170 time_pps_setparams(handle, ppsparams)
171 pps_handle_t handle;
172 const pps_params_t *ppsparams;
173 {
174 return (ioctl(handle, PPS_IOC_SETPARAMS, ppsparams));
175 }
176
177 static __inline int
178 time_pps_getparams(handle, ppsparams)
179 pps_handle_t handle;
180 pps_params_t *ppsparams;
181 {
182 return (ioctl(handle, PPS_IOC_GETPARAMS, ppsparams));
183 }
184
185 static __inline int
186 time_pps_getcap(handle, mode)
187 pps_handle_t handle;
188 int *mode;
189 {
190 return (ioctl(handle, PPS_IOC_GETCAP, mode));
191 }
192
193 static __inline int
194 time_pps_fetch(handle, tsformat, ppsinfobuf, timeout)
195 pps_handle_t handle;
196 const int tsformat;
197 pps_info_t *ppsinfobuf;
198 const struct timespec *timeout;
199 {
200 return (ioctl(handle, PPS_IOC_FETCH, ppsinfobuf));
201 }
202
203 static __inline int
204 time_pps_kcbind(handle, kernel_consumer, edge, tsformat)
205 pps_handle_t handle;
206 const int kernel_consumer;
207 const int edge;
208 const int tsformat;
209 {
210 return (ioctl(handle, PPS_IOC_KCBIND, &edge));
211 }
212 #endif /* !_KERNEL*/
213
214 #endif /* SYS_TIMEPPS_H_ */
Cache object: 6216b08fd3de661f32aa5070e13d9a50
|