kolibri-acpi:prerequisites for user-defined framebuffers, indirect rendering, page flipping, etc

git-svn-id: svn://kolibrios.org@4269 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2013-11-21 09:59:47 +00:00
parent 1a65fa3197
commit cc2baba95d
2 changed files with 27 additions and 53 deletions

View File

@ -221,6 +221,10 @@ TASK_ACTIVATE equ (OS_BASE+0x000FF01)
TMP_STACK_TOP equ 0x006CC00 TMP_STACK_TOP equ 0x006CC00
sys_pgdir equ (OS_BASE+0x006F000) sys_pgdir equ (OS_BASE+0x006F000)
lfb_pd_0 equ (OS_BASE+0x0070000)
lfb_pd_1 equ (OS_BASE+0x0071000)
lfb_pd_2 equ (OS_BASE+0x0072000)
lfb_pd_3 equ (OS_BASE+0x0073000)
SLOT_BASE equ (OS_BASE+0x0080000) SLOT_BASE equ (OS_BASE+0x0080000)
@ -248,7 +252,7 @@ kernel_tabs equ (page_tabs+ (OS_BASE shr 10)) ;0xFDE00000
master_tab equ (page_tabs+ (page_tabs shr 10)) ;0xFDFF70000 master_tab equ (page_tabs+ (page_tabs shr 10)) ;0xFDFF70000
LFB_BASE equ 0xFE000000 LFB_BASE equ 0xFE000000
LFB_SIZE equ 12*1024*1024
new_app_base equ 0; new_app_base equ 0;

View File

@ -351,10 +351,8 @@ proc map_page_table stdcall, lin_addr:dword, phis_addr:dword
endp endp
align 4 align 4
proc init_LFB init_LFB:
locals xchg bx, bx
pg_count dd ?
endl
cmp dword [LFBAddress], -1 cmp dword [LFBAddress], -1
jne @f jne @f
@ -383,61 +381,33 @@ proc init_LFB
@@: @@:
call init_mtrr call init_mtrr
mov edx, LFB_BASE xor edx, edx
mov esi, [LFBAddress]
mov edi, 0x00C00000
mov dword [exp_lfb+4], edx
shr edi, 12
mov [pg_count], edi
shr edi, 10
bt [cpu_caps], CAPS_PSE
jnc .map_page_tables
or esi, PG_LARGE+PG_UW
mov edx, sys_pgdir+(LFB_BASE shr 20)
@@:
mov [edx], esi
add edx, 4
add esi, 0x00400000
dec edi
jnz @B
bt [cpu_caps], CAPS_PGE
jnc @F
or dword [sys_pgdir+(LFB_BASE shr 20)], PG_GLOBAL
@@:
mov dword [LFBAddress], LFB_BASE
mov eax, cr3 ;flush TLB
mov cr3, eax
ret
.map_page_tables:
@@:
call alloc_page
stdcall map_page_table, edx, eax
add edx, 0x00400000
dec edi
jnz @B
mov eax, [LFBAddress] mov eax, [LFBAddress]
mov edi, page_tabs + (LFB_BASE shr 10) bt [cpu_caps], CAPS_PGE
or eax, PG_UW setc dh ;eliminate branch and
mov ecx, [pg_count] mov ecx, LFB_SIZE/4096
cld mov edi, lfb_pd_0
@@: lea eax, [eax+edx+PG_UW] ;set PG_GLOBAL if supported
.map_pte:
stosd stosd
add eax, 0x1000 add eax, 0x1000
dec ecx loop .map_pte
jnz @B
mov ecx, (LFB_SIZE/4096)/1024
mov edi, sys_pgdir+(LFB_BASE shr 20)
lea eax, [(lfb_pd_0-OS_BASE)+PG_UW]
.map_pde:
stosd
add eax, 0x1000
loop .map_pde
mov dword [exp_lfb+4], LFB_BASE
mov dword [LFBAddress], LFB_BASE mov dword [LFBAddress], LFB_BASE
mov eax, cr3 ;flush TLB mov eax, cr3 ;flush TLB
mov cr3, eax mov cr3, eax
ret ret
endp
align 4 align 4
proc new_mem_resize stdcall, new_size:dword proc new_mem_resize stdcall, new_size:dword