xref: /dragonfly/sys/platform/pc64/include/clock.h (revision 9e6611d4)
1 /*
2  * Kernel interface to machine-dependent clock driver.
3  * Garrett Wollman, September 1994.
4  * This file is in the public domain.
5  *
6  * $FreeBSD: src/sys/i386/include/clock.h,v 1.38.2.1 2002/11/02 04:41:50 iwasaki Exp $
7  */
8 
9 #ifndef _MACHINE_CLOCK_H_
10 #define	_MACHINE_CLOCK_H_
11 
12 #ifndef _SYS_TYPES_H_
13 #include <sys/types.h>
14 #endif
15 
16 #ifdef _KERNEL
17 
18 #ifndef _SYS_SYSTIMER_H_
19 #include <sys/systimer.h>
20 #endif
21 
22 typedef struct TOTALDELAY {
23 	int		us;
24 	int		started;
25 	sysclock_t	last_clock;
26 } TOTALDELAY;
27 
28 #endif
29 
30 typedef uint64_t tsc_uclock_t;
31 typedef int64_t	tsc_sclock_t;
32 
33 #ifdef _KERNEL
34 
35 /*
36  * x86 to clock driver interface.
37  * XXX large parts of the driver and its interface are misplaced.
38  */
39 extern int	adjkerntz;
40 extern int	disable_rtc_set;
41 extern u_int	timer_freq;
42 extern int	timer0_max_count;
43 extern int	tsc_present;
44 extern int	tsc_invariant;
45 extern int	tsc_mpsync;
46 extern int	tsc_is_broken;
47 extern int	wall_cmos_clock;
48 extern tsc_uclock_t tsc_frequency;
49 extern tsc_uclock_t tsc_oneus_approx;	/* do not use for fine calc, min 1 */
50 
51 /*
52  * Driver to clock driver interface.
53  */
54 
55 int	CHECKTIMEOUT(TOTALDELAY *);
56 int	rtcin (int val);
57 int	acquire_timer2 (int mode);
58 int	release_timer2 (void);
59 int	sysbeep (int pitch, int period);
60 void	timer_restore (void);
61 
62 /*
63  * Allow registering timecounter initialization code.
64  */
65 typedef struct timecounter_init {
66 	char *name;
67 	void (*configure)(void);
68 } timecounter_init_t;
69 
70 #define TIMECOUNTER_INIT(name, config)			\
71 	static struct timecounter_init name##_timer = {	\
72 		#name, config				\
73 	};						\
74 	DATA_SET(timecounter_init_set, name##_timer);
75 
76 #endif /* _KERNEL */
77 
78 #endif /* !_MACHINE_CLOCK_H_ */
79