~ubuntu-branches/ubuntu/utopic/xen/utopic

« back to all changes in this revision

Viewing changes to xen/include/xeno/timex.h

  • Committer: Bazaar Package Importer
  • Author(s): Bastian Blank
  • Date: 2010-05-06 15:47:38 UTC
  • mto: (1.3.1) (15.1.1 sid) (4.1.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20100506154738-agoz0rlafrh1fnq7
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
 *                                                                           *
3
 
 * Copyright (c) David L. Mills 1993                                         *
4
 
 *                                                                           *
5
 
 * Permission to use, copy, modify, and distribute this software and its     *
6
 
 * documentation for any purpose and without fee is hereby granted, provided *
7
 
 * that the above copyright notice appears in all copies and that both the   *
8
 
 * copyright notice and this permission notice appear in supporting          *
9
 
 * documentation, and that the name University of Delaware not be used in    *
10
 
 * advertising or publicity pertaining to distribution of the software       *
11
 
 * without specific, written prior permission.  The University of Delaware   *
12
 
 * makes no representations about the suitability this software for any      *
13
 
 * purpose.  It is provided "as is" without express or implied warranty.     *
14
 
 *                                                                           *
15
 
 *****************************************************************************/
16
 
 
17
 
/*
18
 
 * Modification history timex.h
19
 
 *
20
 
 * 29 Dec 97    Russell King
21
 
 *      Moved CLOCK_TICK_RATE, CLOCK_TICK_FACTOR and FINETUNE to asm/timex.h
22
 
 *      for ARM machines
23
 
 *
24
 
 *  9 Jan 97    Adrian Sun
25
 
 *      Shifted LATCH define to allow access to alpha machines.
26
 
 *
27
 
 * 26 Sep 94    David L. Mills
28
 
 *      Added defines for hybrid phase/frequency-lock loop.
29
 
 *
30
 
 * 19 Mar 94    David L. Mills
31
 
 *      Moved defines from kernel routines to header file and added new
32
 
 *      defines for PPS phase-lock loop.
33
 
 *
34
 
 * 20 Feb 94    David L. Mills
35
 
 *      Revised status codes and structures for external clock and PPS
36
 
 *      signal discipline.
37
 
 *
38
 
 * 28 Nov 93    David L. Mills
39
 
 *      Adjusted parameters to improve stability and increase poll
40
 
 *      interval.
41
 
 *
42
 
 * 17 Sep 93    David L. Mills
43
 
 *      Created file $NTP/include/sys/timex.h
44
 
 * 07 Oct 93    Torsten Duwe
45
 
 *      Derived linux/timex.h
46
 
 * 1995-08-13    Torsten Duwe
47
 
 *      kernel PLL updated to 1994-12-13 specs (rfc-1589)
48
 
 * 1997-08-30    Ulrich Windl
49
 
 *      Added new constant NTP_PHASE_LIMIT
50
 
 */
51
 
#ifndef _LINUX_TIMEX_H
52
 
#define _LINUX_TIMEX_H
53
 
 
54
 
#include <asm/param.h>
55
 
 
56
 
/*
57
 
 * The following defines establish the engineering parameters of the PLL
58
 
 * model. The HZ variable establishes the timer interrupt frequency, 100 Hz
59
 
 * for the SunOS kernel, 256 Hz for the Ultrix kernel and 1024 Hz for the
60
 
 * OSF/1 kernel. The SHIFT_HZ define expresses the same value as the
61
 
 * nearest power of two in order to avoid hardware multiply operations.
62
 
 */
63
 
#if HZ >= 12 && HZ < 24
64
 
# define SHIFT_HZ       4
65
 
#elif HZ >= 24 && HZ < 48
66
 
# define SHIFT_HZ       5
67
 
#elif HZ >= 48 && HZ < 96
68
 
# define SHIFT_HZ       6
69
 
#elif HZ >= 96 && HZ < 192
70
 
# define SHIFT_HZ       7
71
 
#elif HZ >= 192 && HZ < 384
72
 
# define SHIFT_HZ       8
73
 
#elif HZ >= 384 && HZ < 768
74
 
# define SHIFT_HZ       9
75
 
#elif HZ >= 768 && HZ < 1536
76
 
# define SHIFT_HZ       10
77
 
#else
78
 
# error You lose.
79
 
#endif
80
 
 
81
 
/*
82
 
 * SHIFT_KG and SHIFT_KF establish the damping of the PLL and are chosen
83
 
 * for a slightly underdamped convergence characteristic. SHIFT_KH
84
 
 * establishes the damping of the FLL and is chosen by wisdom and black
85
 
 * art.
86
 
 *
87
 
 * MAXTC establishes the maximum time constant of the PLL. With the
88
 
 * SHIFT_KG and SHIFT_KF values given and a time constant range from
89
 
 * zero to MAXTC, the PLL will converge in 15 minutes to 16 hours,
90
 
 * respectively.
91
 
 */
92
 
#define SHIFT_KG 6              /* phase factor (shift) */
93
 
#define SHIFT_KF 16             /* PLL frequency factor (shift) */
94
 
#define SHIFT_KH 2              /* FLL frequency factor (shift) */
95
 
#define MAXTC 6                 /* maximum time constant (shift) */
96
 
 
97
 
/*
98
 
 * The SHIFT_SCALE define establishes the decimal point of the time_phase
99
 
 * variable which serves as an extension to the low-order bits of the
100
 
 * system clock variable. The SHIFT_UPDATE define establishes the decimal
101
 
 * point of the time_offset variable which represents the current offset
102
 
 * with respect to standard time. The FINEUSEC define represents 1 usec in
103
 
 * scaled units.
104
 
 *
105
 
 * SHIFT_USEC defines the scaling (shift) of the time_freq and
106
 
 * time_tolerance variables, which represent the current frequency
107
 
 * offset and maximum frequency tolerance.
108
 
 *
109
 
 * FINEUSEC is 1 us in SHIFT_UPDATE units of the time_phase variable.
110
 
 */
111
 
#define SHIFT_SCALE 22          /* phase scale (shift) */
112
 
#define SHIFT_UPDATE (SHIFT_KG + MAXTC) /* time offset scale (shift) */
113
 
#define SHIFT_USEC 16           /* frequency offset scale (shift) */
114
 
#define FINEUSEC (1L << SHIFT_SCALE) /* 1 us in phase units */
115
 
 
116
 
#define MAXPHASE 512000L        /* max phase error (us) */
117
 
#define MAXFREQ (512L << SHIFT_USEC)  /* max frequency error (ppm) */
118
 
#define MAXTIME (200L << PPS_AVG) /* max PPS error (jitter) (200 us) */
119
 
#define MINSEC 16L              /* min interval between updates (s) */
120
 
#define MAXSEC 1200L            /* max interval between updates (s) */
121
 
#define NTP_PHASE_LIMIT (MAXPHASE << 5) /* beyond max. dispersion */
122
 
 
123
 
/*
124
 
 * The following defines are used only if a pulse-per-second (PPS)
125
 
 * signal is available and connected via a modem control lead, such as
126
 
 * produced by the optional ppsclock feature incorporated in the Sun
127
 
 * asynch driver. They establish the design parameters of the frequency-
128
 
 * lock loop used to discipline the CPU clock oscillator to the PPS
129
 
 * signal.
130
 
 *
131
 
 * PPS_AVG is the averaging factor for the frequency loop, as well as
132
 
 * the time and frequency dispersion.
133
 
 *
134
 
 * PPS_SHIFT and PPS_SHIFTMAX specify the minimum and maximum
135
 
 * calibration intervals, respectively, in seconds as a power of two.
136
 
 *
137
 
 * PPS_VALID is the maximum interval before the PPS signal is considered
138
 
 * invalid and protocol updates used directly instead.
139
 
 *
140
 
 * MAXGLITCH is the maximum interval before a time offset of more than
141
 
 * MAXTIME is believed.
142
 
 */
143
 
#define PPS_AVG 2               /* pps averaging constant (shift) */
144
 
#define PPS_SHIFT 2             /* min interval duration (s) (shift) */
145
 
#define PPS_SHIFTMAX 8          /* max interval duration (s) (shift) */
146
 
#define PPS_VALID 120           /* pps signal watchdog max (s) */
147
 
#define MAXGLITCH 30            /* pps signal glitch max (s) */
148
 
 
149
 
/*
150
 
 * Pick up the architecture specific timex specifications
151
 
 */
152
 
#include <asm/timex.h>
153
 
 
154
 
/* LATCH is used in the interval timer and ftape setup. */
155
 
#define LATCH  ((CLOCK_TICK_RATE + HZ/2) / HZ)  /* For divider */
156
 
 
157
 
/*
158
 
 * syscall interface - used (mainly by NTP daemon)
159
 
 * to discipline kernel clock oscillator
160
 
 */
161
 
struct timex {
162
 
        unsigned int modes;     /* mode selector */
163
 
        long offset;            /* time offset (usec) */
164
 
        long freq;              /* frequency offset (scaled ppm) */
165
 
        long maxerror;          /* maximum error (usec) */
166
 
        long esterror;          /* estimated error (usec) */
167
 
        int status;             /* clock command/status */
168
 
        long constant;          /* pll time constant */
169
 
        long precision;         /* clock precision (usec) (read only) */
170
 
        long tolerance;         /* clock frequency tolerance (ppm)
171
 
                                 * (read only)
172
 
                                 */
173
 
        struct timeval time;    /* (read only) */
174
 
        long tick;              /* (modified) usecs between clock ticks */
175
 
 
176
 
        long ppsfreq;           /* pps frequency (scaled ppm) (ro) */
177
 
        long jitter;            /* pps jitter (us) (ro) */
178
 
        int shift;              /* interval duration (s) (shift) (ro) */
179
 
        long stabil;            /* pps stability (scaled ppm) (ro) */
180
 
        long jitcnt;            /* jitter limit exceeded (ro) */
181
 
        long calcnt;            /* calibration intervals (ro) */
182
 
        long errcnt;            /* calibration errors (ro) */
183
 
        long stbcnt;            /* stability limit exceeded (ro) */
184
 
 
185
 
        int  :32; int  :32; int  :32; int  :32;
186
 
        int  :32; int  :32; int  :32; int  :32;
187
 
        int  :32; int  :32; int  :32; int  :32;
188
 
};
189
 
 
190
 
/*
191
 
 * Mode codes (timex.mode)
192
 
 */
193
 
#define ADJ_OFFSET              0x0001  /* time offset */
194
 
#define ADJ_FREQUENCY           0x0002  /* frequency offset */
195
 
#define ADJ_MAXERROR            0x0004  /* maximum time error */
196
 
#define ADJ_ESTERROR            0x0008  /* estimated time error */
197
 
#define ADJ_STATUS              0x0010  /* clock status */
198
 
#define ADJ_TIMECONST           0x0020  /* pll time constant */
199
 
#define ADJ_TICK                0x4000  /* tick value */
200
 
#define ADJ_OFFSET_SINGLESHOT   0x8001  /* old-fashioned adjtime */
201
 
 
202
 
/* xntp 3.4 compatibility names */
203
 
#define MOD_OFFSET      ADJ_OFFSET
204
 
#define MOD_FREQUENCY   ADJ_FREQUENCY
205
 
#define MOD_MAXERROR    ADJ_MAXERROR
206
 
#define MOD_ESTERROR    ADJ_ESTERROR
207
 
#define MOD_STATUS      ADJ_STATUS
208
 
#define MOD_TIMECONST   ADJ_TIMECONST
209
 
#define MOD_CLKB        ADJ_TICK
210
 
#define MOD_CLKA        ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */
211
 
 
212
 
 
213
 
/*
214
 
 * Status codes (timex.status)
215
 
 */
216
 
#define STA_PLL         0x0001  /* enable PLL updates (rw) */
217
 
#define STA_PPSFREQ     0x0002  /* enable PPS freq discipline (rw) */
218
 
#define STA_PPSTIME     0x0004  /* enable PPS time discipline (rw) */
219
 
#define STA_FLL         0x0008  /* select frequency-lock mode (rw) */
220
 
 
221
 
#define STA_INS         0x0010  /* insert leap (rw) */
222
 
#define STA_DEL         0x0020  /* delete leap (rw) */
223
 
#define STA_UNSYNC      0x0040  /* clock unsynchronized (rw) */
224
 
#define STA_FREQHOLD    0x0080  /* hold frequency (rw) */
225
 
 
226
 
#define STA_PPSSIGNAL   0x0100  /* PPS signal present (ro) */
227
 
#define STA_PPSJITTER   0x0200  /* PPS signal jitter exceeded (ro) */
228
 
#define STA_PPSWANDER   0x0400  /* PPS signal wander exceeded (ro) */
229
 
#define STA_PPSERROR    0x0800  /* PPS signal calibration error (ro) */
230
 
 
231
 
#define STA_CLOCKERR    0x1000  /* clock hardware fault (ro) */
232
 
 
233
 
#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \
234
 
    STA_PPSERROR | STA_CLOCKERR) /* read-only bits */
235
 
 
236
 
/*
237
 
 * Clock states (time_state)
238
 
 */
239
 
#define TIME_OK         0       /* clock synchronized, no leap second */
240
 
#define TIME_INS        1       /* insert leap second */
241
 
#define TIME_DEL        2       /* delete leap second */
242
 
#define TIME_OOP        3       /* leap second in progress */
243
 
#define TIME_WAIT       4       /* leap second has occurred */
244
 
#define TIME_ERROR      5       /* clock not synchronized */
245
 
#define TIME_BAD        TIME_ERROR /* bw compat */
246
 
 
247
 
#ifdef __KERNEL__
248
 
/*
249
 
 * kernel variables
250
 
 * Note: maximum error = NTP synch distance = dispersion + delay / 2;
251
 
 * estimated error = NTP dispersion.
252
 
 */
253
 
extern long tick;                      /* timer interrupt period */
254
 
extern int tickadj;                     /* amount of adjustment per tick */
255
 
 
256
 
/*
257
 
 * phase-lock loop variables
258
 
 */
259
 
extern int time_state;          /* clock status */
260
 
extern int time_status;         /* clock synchronization status bits */
261
 
extern long time_offset;        /* time adjustment (us) */
262
 
extern long time_constant;      /* pll time constant */
263
 
extern long time_tolerance;     /* frequency tolerance (ppm) */
264
 
extern long time_precision;     /* clock precision (us) */
265
 
extern long time_maxerror;      /* maximum error */
266
 
extern long time_esterror;      /* estimated error */
267
 
 
268
 
extern long time_phase;         /* phase offset (scaled us) */
269
 
extern long time_freq;          /* frequency offset (scaled ppm) */
270
 
extern long time_adj;           /* tick adjust (scaled 1 / HZ) */
271
 
extern long time_reftime;       /* time at last adjustment (s) */
272
 
 
273
 
extern long time_adjust;        /* The amount of adjtime left */
274
 
 
275
 
/* interface variables pps->timer interrupt */
276
 
extern long pps_offset;         /* pps time offset (us) */
277
 
extern long pps_jitter;         /* time dispersion (jitter) (us) */
278
 
extern long pps_freq;           /* frequency offset (scaled ppm) */
279
 
extern long pps_stabil;         /* frequency dispersion (scaled ppm) */
280
 
extern long pps_valid;          /* pps signal watchdog counter */
281
 
 
282
 
/* interface variables pps->adjtimex */
283
 
extern int pps_shift;           /* interval duration (s) (shift) */
284
 
extern long pps_jitcnt;         /* jitter limit exceeded */
285
 
extern long pps_calcnt;         /* calibration intervals */
286
 
extern long pps_errcnt;         /* calibration errors */
287
 
extern long pps_stbcnt;         /* stability limit exceeded */
288
 
 
289
 
#endif /* KERNEL */
290
 
 
291
 
#endif /* LINUX_TIMEX_H */