00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef _RTAI_ASM_EMULATE_TSC_H
00024
#define _RTAI_ASM_EMULATE_TSC_H
00025
00026
#if defined(EMULATE_TSC) || !defined(CONFIG_X86_TSC)
00027
00028
#undef RTAI_CPU_FREQ
00029
#undef RTAI_CALIBRATED_CPU_FREQ
00030
#undef rdtsc
00031
#undef rtai_rdtsc
00032
#undef DECLR_8254_TSC_EMULATION
00033
#undef TICK_8254_TSC_EMULATION
00034
#undef SETUP_8254_TSC_EMULATION
00035
#undef CLEAR_8254_TSC_EMULATION
00036
00037 #define RTAI_CPU_FREQ RTAI_FREQ_8254
00038 #define RTAI_CALIBRATED_CPU_FREQ RTAI_FREQ_8254
00039 #define rtai_rdtsc() rd_8254_ts()
00040 #define rdtsc() rd_8254_ts()
00041
00042 #define TICK_8254_TSC_EMULATION() rd_8254_ts()
00043
00044
#include <linux/version.h>
00045
#if defined(CONFIG_VT) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
00046
00047
#define DECLR_8254_TSC_EMULATION \
00048
extern void *kd_mksound; \
00049
static void *linux_mksound; \
00050
static void rtai_mksound(void) { } \
00051
const int TSC_EMULATION_GUARD_FREQ = 20; \
00052
static struct timer_list timer;
00053
00054
#define SETUP_8254_TSC_EMULATION \
00055
do { \
00056
linux_mksound = kd_mksound; \
00057
kd_mksound = rtai_mksound; \
00058
rt_setup_8254_tsc(); \
00059
init_timer(&timer); \
00060
timer.function = timer_fun; \
00061
timer_fun(0); \
00062
} while (0)
00063
00064
#define CLEAR_8254_TSC_EMULATION \
00065
do { \
00066
del_timer(&timer); \
00067
if (linux_mksound) { \
00068
kd_mksound = linux_mksound; \
00069
} \
00070
} while (0)
00071
00072
#else
00073
00074 #define DECLR_8254_TSC_EMULATION \
00075
const int TSC_EMULATION_GUARD_FREQ = 20; \
00076
static struct timer_list timer;
00077
00078 #define SETUP_8254_TSC_EMULATION \
00079
do { \
00080
rt_setup_8254_tsc(); \
00081
init_timer(&timer); \
00082
timer.function = timer_fun; \
00083
timer_fun(0); \
00084
} while (0)
00085
00086 #define CLEAR_8254_TSC_EMULATION del_timer(&timer)
00087
00088
#endif
00089
00090
#endif
00091
00092
#endif