Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 377 → Rev 378

/kernel/trunk/core/dll.inc
1,8 → 1,8
 
DRV_ENTRY equ 1
DRV_EXIT equ -1
DRV_COMPAT equ 3 ;minimal required drivers version
DRV_CURRENT equ 3 ;current drivers model version
DRV_COMPAT equ 4 ;minimal required drivers version
DRV_CURRENT equ 4 ;current drivers model version
 
DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT
 
/kernel/trunk/core/fpu.inc
36,41 → 36,95
fnsave [fpu_data]
ret
 
; param
; eax= 512 bytes memory area
 
align 4
proc fpu_save
fpu_save:
push ecx
push esi
push edi
 
pushfd
cli
 
clts
mov ebx, [fpu_owner]
shl ebx, 8
mov eax, [ebx+PROC_BASE+0x10]
mov ebx, [CURRENT_TASK]
mov [fpu_owner], ebx
mov edi, eax
 
mov ecx, [fpu_owner]
mov eax, [CURRENT_TASK]
cmp ecx, eax
jne .save
.copy:
shl eax, 8
mov esi, [eax+PROC_BASE+APPDATA.fpu_state]
mov ecx, 512/4
cld
rep movsd
fninit
 
popfd
pop edi
pop esi
pop ecx
ret
.save:
mov [fpu_owner], eax
 
shl ecx, 8
mov ecx, [ecx+PROC_BASE+APPDATA.fpu_state]
 
bt [cpu_caps], CAPS_SSE
jnc .no_SSE
 
fxsave [eax]
fninit ;re-init fpu
ret
fxsave [ecx]
jmp .copy
.no_SSE:
fnsave [eax]
ret
endp
fnsave [ecx]
jmp .copy
 
align 4
proc fpu_restore
mov ebx, [CURRENT_TASK]
shl ebx, 8
mov eax, [ebx+PROC_BASE+0x10]
fpu_restore:
push ecx
push esi
 
mov esi, eax
 
pushfd
cli
 
mov ecx, [fpu_owner]
mov eax, [CURRENT_TASK]
cmp ecx, eax
jne .copy
 
clts
 
bt [cpu_caps], CAPS_SSE
jnc .no_SSE
 
fxrstor [eax]
fxrstor [esi]
popfd
pop esi
pop ecx
ret
.no_SSE:
fnclex ;fix possible problems
frstor [eax]
frstor [esi]
popfd
pop esi
pop ecx
ret
endp
.copy:
shl eax, 8
mov edi, [eax+PROC_BASE+APPDATA.fpu_state]
mov ecx, 512/4
cld
rep movsd
popfd
pop esi
pop ecx
ret
 
align 4
e7: ;#NM exception handler
/kernel/trunk/core/memory.inc
106,7 → 106,7
dec ecx
jnz .map_kernel_tabs
 
mov dword [sys_pgdir+0x600], sys_pgdir+PG_SW
mov dword [sys_pgdir+(page_tabs shr 20)], sys_pgdir+PG_SW
ret
endp
 
365,7 → 365,7
mov eax, [phis_addr]
and eax, not 0xFFF
or eax, PG_UW ;+PG_NOCACHE
mov dword [current_pgdir+ebx*4], eax
mov dword [master_tab+ebx*4], eax
mov eax, [lin_addr]
shr eax, 10
add eax, page_tabs
376,6 → 376,10
 
align 4
proc init_LFB
locals
pg_count dd ?
endl
 
cmp dword [LFBAddress], -1
jne @f
mov [0x2f0000+0x901c],byte 2
388,18 → 392,9
mov [0x2f0000+0x901c],byte 2
ret
@@:
call map_LFB
ret
endp
 
align 4
proc map_LFB
locals
pg_count dd ?
endl
 
mov edx, LFB_BASE
mov esi, [LFBAddress]
mov edi, [LFBSize]
mov esi, [LFBAddress]
mov dword [exp_lfb+4], esi
 
shr edi, 12
408,13 → 403,12
 
bt [cpu_caps], CAPS_PSE
jnc .map_page_tables
mov ebx, esi
or esi, PG_LARGE+PG_UW
shr ebx, 20
mov ecx, ebx
shr edx, 20
mov ecx, edx
@@:
mov [sys_pgdir+ebx], esi
add ebx, 4
mov [sys_pgdir+edx], esi
add edx, 4
add esi, 0x00400000
dec edi
jnz @B
423,6 → 417,7
jnc @F
or dword [sys_pgdir+ecx], PG_GLOBAL
@@:
mov dword [LFBAddress], LFB_BASE
mov eax, cr3 ;flush TLB
mov cr3, eax
ret
431,31 → 426,19
 
@@:
call alloc_page
stdcall map_page_table, esi, eax
stdcall map_page_table, edx, eax
add esi, 0x00400000
dec edi
jnz @B
 
mov eax, [LFBAddress]
mov esi, eax
shr esi, 10
add esi, page_tabs
mov edi, page_tabs + (LFB_BASE shr 10)
or eax, PG_UW
mov ecx, [pg_count]
shr ecx, 2
.map:
mov [esi], eax
add eax, 0x1000
mov [esi+4], eax
add eax, 0x1000
mov [esi+8], eax
add eax, 0x1000
mov [esi+12], eax
add eax, 0x1000
add esi, 16
sub ecx, 1
jnz .map
cld
rep stosd
 
mov dword [LFBAddress], LFB_BASE
mov eax, cr3 ;flush TLB
mov cr3, eax
 
488,10 → 471,10
shr edi, 12
shr esi, 12
@@:
mov eax, [page_tabs+0x00181000+edi*4]
mov eax, [app_page_tabs+edi*4]
test eax, 1
jz .next
mov dword [page_tabs+0x00181000+edi*4], 2
mov dword [app_page_tabs+edi*4], 2
mov ebx, edi
shl ebx, 12
invlpg [ebx+std_application_base_address]
636,18 → 619,18
 
mov ebx, [ebp-4]
 
cmp ebx, 0xe0000000
jae .lfb_addr
 
cmp ebx, 0x60400000
cmp ebx, 0x80000000
jae .user_space
 
cmp ebx, master_tab+0x1000
cmp ebx, app_page_tabs
jae .alloc
 
cmp ebx, 0x60000000
cmp ebx, page_tabs
jae .tab_space
 
cmp ebx, 0x7DC00000
jae .lfb_addr
 
jmp .kernel_space
 
.user_space:
1075,7 → 1058,7
@@:
cmp eax, 17
ja @f
stdcall srv_handlerEx, ebx
call srv_handlerEx ;ebx
mov [esp+36], eax
ret
@@:
/kernel/trunk/core/taskman.inc
386,25 → 386,19
 
mov esi, sys_pgdir
mov edi, [tmp_task_pdir]
mov ecx, 384
mov ecx, (page_tabs shr 20)/4
cld
rep movsd
 
mov ecx, 384
mov eax, [dir_addr]
or eax, PG_SW
stosd ; [(page_tabs shr 20)]= eax
 
mov ecx, 0x800/4
xor eax, eax
cld
rep stosd
 
mov ecx, 256
mov esi, sys_pgdir+0xc00
rep movsd
 
mov eax, [dir_addr]
or eax, PG_SW
mov ebx, [tmp_task_pdir]
mov [ebx+0x600], eax
 
mov eax, [dir_addr]
call set_cr3
 
mov edx, [app_tabs]
555,8 → 549,8
and eax, not 0xFFF
stdcall map_page,[tmp_task_pdir],eax,dword PG_SW
mov esi, [tmp_task_pdir]
add esi, 0x604
mov edi, 383
add esi, 0x800
mov edi, 0x800/4
.destroy:
mov eax, [esi]
test eax, 1