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