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 int tsc_present; 42 extern int tsc_invariant; 43 extern int tsc_mpsync; 44 extern int wall_cmos_clock; 45 extern tsc_uclock_t tsc_frequency; 46 extern tsc_uclock_t tsc_oneus_approx; /* do not use for fine calc, min 1 */ 47 extern int i8254_cputimer_disable; /* No need to initialize i8254 cputimer. */ 48 49 /* 50 * Driver to clock driver interface. 51 */ 52 53 int CHECKTIMEOUT(TOTALDELAY *); 54 int rtcin (int val); 55 int acquire_timer2 (int mode); 56 int release_timer2 (void); 57 int sysbeep (int pitch, int period); 58 void timer_restore (void); 59 60 /* 61 * Allow registering timecounter initialization code. 62 */ 63 typedef struct timecounter_init { 64 char *name; 65 void (*configure)(void); 66 } timecounter_init_t; 67 68 #define TIMECOUNTER_INIT(name, config) \ 69 static struct timecounter_init name##_timer = { \ 70 #name, config \ 71 }; \ 72 DATA_SET(timecounter_init_set, name##_timer); 73 74 #endif /* _KERNEL */ 75 76 #endif /* !_MACHINE_CLOCK_H_ */ 77