1/*	$NetBSD: ntp_syscall.h,v 1.5 2020/05/25 20:47:20 christos Exp $	*/
2
3/*
4 * ntp_syscall.h - various ways to perform the ntp_adjtime() and ntp_gettime()
5 * 		   system calls.
6 */
7
8#ifndef NTP_SYSCALL_H
9#define NTP_SYSCALL_H
10
11#ifdef HAVE_SYS_TIMEX_H
12# include <sys/timex.h>
13#endif
14
15#ifndef NTP_SYSCALLS_LIBC
16# ifdef NTP_SYSCALLS_STD
17#  define ntp_adjtime(t)	syscall(SYS_ntp_adjtime, (t))
18#  define ntp_gettime(t)	syscall(SYS_ntp_gettime, (t))
19# else /* !NTP_SYSCALLS_STD */
20#  ifdef HAVE_NTP_ADJTIME
21extern	int	ntp_adjtime	(struct timex *);
22
23#   ifndef HAVE_STRUCT_NTPTIMEVAL
24struct ntptimeval
25{
26	struct timeval	time;		/* current time (ro) */
27	long int	maxerror;	/* maximum error (us) (ro) */
28	long int	esterror;	/* estimated error (us) (ro) */
29};
30#   endif
31
32#   ifndef HAVE_NTP_GETTIME
33static inline int
34ntp_gettime(
35	struct ntptimeval *ntv
36	)
37{
38	struct timex tntx;
39	int result;
40
41	ZERO(tntx);
42	result = ntp_adjtime(&tntx);
43	ntv->time = tntx.time;
44	ntv->maxerror = tntx.maxerror;
45	ntv->esterror = tntx.esterror;
46#    ifdef NTP_API
47#     if NTP_API > 3
48	ntv->tai = tntx.tai;
49#     endif
50#    endif
51	return result;
52}
53#   endif	/* !HAVE_NTP_GETTIME */
54#  endif	/* !HAVE_NTP_ADJTIME */
55# endif	/* !NTP_SYSCALLS_STD */
56#endif	/* !NTP_SYSCALLS_LIBC */
57
58#endif	/* NTP_SYSCALL_H */
59