1    	/* Copyright (C) 1995-2015 Free Software Foundation, Inc.
2    	   This file is part of the GNU C Library.
3    	
4    	   The GNU C Library is free software; you can redistribute it and/or
5    	   modify it under the terms of the GNU Lesser General Public
6    	   License as published by the Free Software Foundation; either
7    	   version 2.1 of the License, or (at your option) any later version.
8    	
9    	   The GNU C Library is distributed in the hope that it will be useful,
10   	   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   	   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   	   Lesser General Public License for more details.
13   	
14   	   You should have received a copy of the GNU Lesser General Public
15   	   License along with the GNU C Library; if not, see
16   	   <http://www.gnu.org/licenses/>.  */
17   	
18   	#ifndef	_BITS_TIMEX_H
19   	#define	_BITS_TIMEX_H	1
20   	
21   	#include <bits/types.h>
22   	
23   	/* These definitions from linux/timex.h as of 3.18.  */
24   	
25   	struct timex
26   	{
27   	  unsigned int modes;		/* mode selector */
28   	  __syscall_slong_t offset;	/* time offset (usec) */
29   	  __syscall_slong_t freq;	/* frequency offset (scaled ppm) */
30   	  __syscall_slong_t maxerror;	/* maximum error (usec) */
31   	  __syscall_slong_t esterror;	/* estimated error (usec) */
32   	  int status;			/* clock command/status */
33   	  __syscall_slong_t constant;	/* pll time constant */
34   	  __syscall_slong_t precision;	/* clock precision (usec) (ro) */
35   	  __syscall_slong_t tolerance;	/* clock frequency tolerance (ppm) (ro) */
36   	  struct timeval time;		/* (read only, except for ADJ_SETOFFSET) */
37   	  __syscall_slong_t tick;	/* (modified) usecs between clock ticks */
38   	  __syscall_slong_t ppsfreq;	/* pps frequency (scaled ppm) (ro) */
39   	  __syscall_slong_t jitter;	/* pps jitter (us) (ro) */
40   	  int shift;			/* interval duration (s) (shift) (ro) */
41   	  __syscall_slong_t stabil;	/* pps stability (scaled ppm) (ro) */
42   	  __syscall_slong_t jitcnt;	/* jitter limit exceeded (ro) */
43   	  __syscall_slong_t calcnt;	/* calibration intervals (ro) */
44   	  __syscall_slong_t errcnt;	/* calibration errors (ro) */
45   	  __syscall_slong_t stbcnt;	/* stability limit exceeded (ro) */
46   	
47   	  int tai;			/* TAI offset (ro) */
48   	
49   	  /* ??? */
50   	  int  :32; int  :32; int  :32; int  :32;
51   	  int  :32; int  :32; int  :32; int  :32;
52   	  int  :32; int  :32; int  :32;
53   	};
54   	
55   	/* Mode codes (timex.mode) */
56   	#define ADJ_OFFSET		0x0001	/* time offset */
57   	#define ADJ_FREQUENCY		0x0002	/* frequency offset */
58   	#define ADJ_MAXERROR		0x0004	/* maximum time error */
59   	#define ADJ_ESTERROR		0x0008	/* estimated time error */
60   	#define ADJ_STATUS		0x0010	/* clock status */
61   	#define ADJ_TIMECONST		0x0020	/* pll time constant */
62   	#define ADJ_TAI			0x0080	/* set TAI offset */
63   	#define ADJ_SETOFFSET		0x0100	/* add 'time' to current time */
64   	#define ADJ_MICRO		0x1000	/* select microsecond resolution */
65   	#define ADJ_NANO		0x2000	/* select nanosecond resolution */
66   	#define ADJ_TICK		0x4000	/* tick value */
67   	#define ADJ_OFFSET_SINGLESHOT	0x8001	/* old-fashioned adjtime */
68   	#define ADJ_OFFSET_SS_READ	0xa001	/* read-only adjtime */
69   	
70   	/* xntp 3.4 compatibility names */
71   	#define MOD_OFFSET	ADJ_OFFSET
72   	#define MOD_FREQUENCY	ADJ_FREQUENCY
73   	#define MOD_MAXERROR	ADJ_MAXERROR
74   	#define MOD_ESTERROR	ADJ_ESTERROR
75   	#define MOD_STATUS	ADJ_STATUS
76   	#define MOD_TIMECONST	ADJ_TIMECONST
77   	#define MOD_CLKB	ADJ_TICK
78   	#define MOD_CLKA	ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */
79   	#define MOD_TAI		ADJ_TAI
80   	#define MOD_MICRO	ADJ_MICRO
81   	#define MOD_NANO	ADJ_NANO
82   	
83   	
84   	/* Status codes (timex.status) */
85   	#define STA_PLL		0x0001	/* enable PLL updates (rw) */
86   	#define STA_PPSFREQ	0x0002	/* enable PPS freq discipline (rw) */
87   	#define STA_PPSTIME	0x0004	/* enable PPS time discipline (rw) */
88   	#define STA_FLL		0x0008	/* select frequency-lock mode (rw) */
89   	
90   	#define STA_INS		0x0010	/* insert leap (rw) */
91   	#define STA_DEL		0x0020	/* delete leap (rw) */
92   	#define STA_UNSYNC	0x0040	/* clock unsynchronized (rw) */
93   	#define STA_FREQHOLD	0x0080	/* hold frequency (rw) */
94   	
95   	#define STA_PPSSIGNAL	0x0100	/* PPS signal present (ro) */
96   	#define STA_PPSJITTER	0x0200	/* PPS signal jitter exceeded (ro) */
97   	#define STA_PPSWANDER	0x0400	/* PPS signal wander exceeded (ro) */
98   	#define STA_PPSERROR	0x0800	/* PPS signal calibration error (ro) */
99   	
100  	#define STA_CLOCKERR	0x1000	/* clock hardware fault (ro) */
101  	#define STA_NANO	0x2000	/* resolution (0 = us, 1 = ns) (ro) */
102  	#define STA_MODE	0x4000	/* mode (0 = PLL, 1 = FLL) (ro) */
103  	#define STA_CLK		0x8000	/* clock source (0 = A, 1 = B) (ro) */
104  	
105  	/* Read-only bits */
106  	#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \
107  	    STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
108  	
109  	#endif /* bits/timex.h */
110