Kernel: use 22.10 fixed point arithmetic in HPET timestamp calculation.

git-svn-id: svn://kolibrios.org@5791 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2015-09-04 11:50:27 +00:00
parent 86fb4bfe83
commit a410b6abe3
2 changed files with 22 additions and 10 deletions

View File

@ -447,6 +447,7 @@ get_clock_ns:
jz .old_tics
push ebx
push esi
pushfd
cli
@ -456,15 +457,24 @@ get_clock_ns:
mov eax, [ebx+0xF0]
mov ecx, [ebx+0xF4]
cmp ecx, edx
jnz @B
jne @B
mov ecx, [hpet_period]
mov ebx, edx
imul ebx, ecx
mul ecx
add edx, ebx
mul [hpet_period]
shrd eax, edx, 10
shr edx, 10
mov ebx, eax
mov esi, edx
mov eax, ecx
mul [hpet_period]
shld edx, eax, 22
shl eax, 22
add eax, ebx
adc edx, esi
popfd
pop esi
pop ebx
ret

View File

@ -623,10 +623,12 @@ init_hpet:
mov ecx, eax
mov eax, [ebx+HPET_PERIOD]
mov edx, 0x431BDE83
mul edx
shr edx, 18
mov [hpet_period-OS_BASE], edx
xor edx, edx
shld edx, eax, 10
shl eax, 10
mov esi, 1000000
div esi
mov [hpet_period-OS_BASE], eax
mov esi, [ebx+HPET_CFG]
and esi, not HPET_CFG_ENABLE