/shark/trunk/oslib/kl/event.c |
---|
232,7 → 232,6 |
TIME t; |
DWORD apic_clk; |
if (use_tsc) |
ll_init_advtimer(); |
if (use_apic) |
/shark/trunk/oslib/kl/advtimer.c |
---|
39,8 → 39,8 |
unsigned long long init_tsc; |
unsigned long long * ptr_init_tsc = &init_tsc; |
unsigned long long init_nsec; |
unsigned long long * ptr_init_nsec = &init_nsec; |
struct timespec init_time; |
struct timespec * ptr_init_time = &init_time; |
unsigned int clk_per_msec = 0; |
unsigned int apic_clk_per_msec = 0; |
443,7 → 443,8 |
#endif |
rdtscll(init_tsc); // Read start TSC |
init_nsec = 0; |
init_time.tv_sec = 0; |
init_time.tv_nsec = 0; |
if (use_apic) { |
rdmsr(APIC_BASE_MSR, msr_low_orig, tmp); |
485,11 → 486,15 |
unsigned long temp; |
SYS_FLAGS f; |
if (use_tsc) { |
f = ll_fsave(); |
mul32div32to32(clk_per_msec,new_f,old_f,temp); /* TODO */ |
rdtscll(init_tsc); // Set new start TSC |
ll_read_timespec(&init_time); // Set new start TimeSpec |
mul32div32to32(clk_per_msec,new_f,old_f,temp); |
clk_per_msec = temp; |
dtsc = clk_per_msec * 500; |
dtsc = (unsigned long long)(clk_per_msec) * 500; |
clk_opt_0 = (unsigned int)(dtsc); |
clk_opt_1 = (unsigned int)((unsigned long long)(dtsc << 1)); |
clk_opt_2 = (unsigned int)((unsigned long long)(dtsc << 33) / 1000000000L); |
499,3 → 504,4 |
ll_frestore(f); |
} |
} |
/shark/trunk/oslib/ll/i386/advtimer.h |
---|
144,6 → 144,7 |
{ |
extern unsigned int clk_opt_0,clk_opt_5; |
extern unsigned long long *ptr_init_tsc; |
extern struct timespec init_time; |
if (clk_opt_0 == 0) { |
NULL_TIMESPEC(tspec); |
165,6 → 166,13 |
: "D" (ptr_init_tsc), "b" (clk_opt_0), "c" (clk_opt_5) |
: "edx"); |
if (init_time.tv_sec != 0 || init_time.tv_nsec != 0) { |
__asm__("divl %%ecx\n\t" |
"addl %%ebx,%%eax\n\t" |
:"=a" (tspec->tv_sec), "=d" (tspec->tv_nsec) |
:"a" (init_time.tv_nsec+tspec->tv_nsec), "b" (tspec->tv_sec+init_time.tv_sec), "c" (0x3B9ACA00), "d" (0)); |
}; |
} |
#define rdmsr(msr,val1,val2) \ |
/shark/trunk/oslib/xlib/xinit.c |
---|
73,8 → 73,8 |
{ |
register int i; |
struct ll_cpuInfo cpuInfo; |
extern BYTE X86_apic; |
extern BYTE X86_tsc; |
extern unsigned char X86_apic; |
extern unsigned char X86_tsc; |
extern BYTE X86_fpu; |
LIN_ADDR b; |
89,8 → 89,8 |
ll_arch.x86.fpu = X86_fpu; |
memcpy(&(ll_arch.x86.vendor), &(cpuInfo.X86_vendor_1), 12); |
X86_apic = cpuInfo.X86_StandardFeature & (1<<4); |
X86_tsc = cpuInfo.X86_StandardFeature & (1<<9); |
X86_apic = (cpuInfo.X86_StandardFeature>>4) & 1; |
X86_tsc = (cpuInfo.X86_StandardFeature>>9) & 1; |
/* TODO! Need to map featuresXXX & Signature onto ll_arch! */ |
/* TODO! Need to check for CPU bugs!! */ |