Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5355 → Rev 5356

/kernel/trunk/const.inc
271,17 → 271,22
PAGE_SIZE equ 4096
 
PG_UNMAP equ 0x000
PG_MAP equ 0x001
PG_READ equ 0x001
PG_WRITE equ 0x002
PG_SW equ 0x003
PG_USER equ 0x005
PG_UW equ 0x007
PG_NOCACHE equ 0x018
PG_LARGE equ 0x080
PG_USER equ 0x004
PG_PCD equ 0x008
PG_PWT equ 0x010
 
PG_GLOBAL equ 0x100
 
PG_SHARED equ 0x200
 
PG_SWR equ 0x003 ; (PG_WRITE+PG_READ)
PG_UR equ 0x005 ; (PG_USER+PG_READ)
PG_UWR equ 0x007 ; (PG_USER+PG_WRITE+PG_READ)
PG_NOCACHE equ 0x018 ; (PG_PCD+PG_PWT)
 
PDE_LARGE equ 0x080
 
;;;;;;;;;;;boot time variables
 
BOOT_BPP equ 0x9000 ;byte bits per pixel
/kernel/trunk/core/apic.inc
63,7 → 63,7
call IRQ_mask_all
 
; IOAPIC init
stdcall map_io_mem, [acpi_ioapic_base], 0x20, PG_SW+PG_NOCACHE
stdcall map_io_mem, [acpi_ioapic_base], 0x20, PG_SWR+PG_NOCACHE
mov [IOAPIC_base], eax
 
mov eax, IOAPIC_VER
127,7 → 127,7
cmp [LAPIC_BASE], 0
jne .done
 
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW+PG_NOCACHE
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SWR+PG_NOCACHE
mov [LAPIC_BASE], eax
mov esi, eax
 
/kernel/trunk/core/dll.inc
603,7 → 603,7
test eax, eax
jz .err_3
 
or eax, PG_UW
or eax, PG_UWR
stosd
dec edx
jnz @B
665,7 → 665,7
@@:
lodsd
and eax, 0xFFFFF000
or eax, PG_UW
or eax, PG_UWR
stosd
loop @B
 
1230,7 → 1230,7
.map_pages_loop:
mov eax, [page_tabs+ecx*4]
and eax, not 0xFFF
or al, PG_USER
or al, PG_UR
xchg eax, [page_tabs+edx*4]
test al, 1
jz @f
/kernel/trunk/core/heap.inc
130,7 → 130,7
 
stdcall alloc_pages, dword 32
 
or eax, PG_SW
or eax, PG_SWR
mov ebx, HEAP_BASE
mov ecx, 32
call commit_pages
492,7 → 492,7
jz .err
 
mov ecx, ebx
or eax, PG_SW
or eax, PG_SWR
mov ebx, [lin_addr]
call commit_pages
 
506,7 → 506,7
test eax, eax
jz .err
 
stdcall map_page, edx, eax, dword PG_SW
stdcall map_page, edx, eax, dword PG_SWR
add edx, 0x1000
dec ebx
jnz @B
1451,7 → 1451,7
mov edx, [access]
or edx, [owner_access]
shl edx, 1
or edx, PG_USER+PG_SHARED
or edx, PG_SHARED+PG_UR
@@:
lodsd
and eax, 0xFFFFF000
/kernel/trunk/core/memory.inc
340,7 → 340,7
shr ebx, 22
mov eax, [phis_addr]
and eax, not 0xFFF
or eax, PG_UW ;+PG_NOCACHE
or eax, PG_READ
mov dword [master_tab+ebx*4], eax
mov eax, [lin_addr]
shr eax, 10
420,7 → 420,7
call alloc_page
stdcall map_page_table, LFB_BASE, eax
pop eax
or eax, PG_UW
or eax, PG_UWR
mov ebx, LFB_BASE
; max VGA=640*480*4=1228800 bytes
; + 32*640*4=81920 bytes for mouse pointer
447,7 → 447,7
 
bt [cpu_caps], CAPS_PSE
jnc .map_page_tables
or esi, PG_LARGE+PG_UW
or esi, PDE_LARGE+PG_UWR
mov edx, sys_proc+PROC.pdt_0+(LFB_BASE shr 20)
@@:
mov [edx], esi
476,7 → 476,7
 
mov eax, [LFBAddress]
mov edi, page_tabs + (LFB_BASE shr 10)
or eax, PG_UW
or eax, PG_UWR
mov ecx, [pg_count]
cld
@@:
679,7 → 679,7
ret
 
.user_space:
test eax, PG_MAP
test eax, PG_READ
jnz .err_access ;Страница присутствует
;Ошибка доступа ?
 
687,7 → 687,7
mov ecx, ebx
shr ecx, 10
mov edx, [master_tab+ecx*4]
test edx, PG_MAP
test edx, PG_READ
jz .fail ;таблица страниц не создана
;неверный адрес в программе
 
700,7 → 700,7
test eax, eax
jz .fail
 
stdcall map_page, [.err_addr], eax, PG_UW
stdcall map_page, [.err_addr], eax, PG_UWR
 
mov edi, [.err_addr]
and edi, 0xFFFFF000
737,7 → 737,7
call alloc_page
test eax, eax
jz .fail
stdcall map_page, ebx, eax, PG_UW
stdcall map_page, ebx, eax, PG_UWR
mov edi, ebx
mov ecx, 1024
sub ebx, [esi+HDLL.base]
748,7 → 748,7
jmp .exit
 
.kernel_space:
test eax, PG_MAP
test eax, PG_READ
jz .fail ;страница не присутствует
 
test eax, 12 ;U/S (+below)
774,7 → 774,7
jz .fail
 
push eax
stdcall map_page, [.err_addr], eax, dword PG_SW
stdcall map_page, [.err_addr], eax, dword PG_SWR
pop eax
mov edi, [.err_addr]
and edi, -4096
783,7 → 783,7
mov ebx, esi
shr ebx, 12
mov edx, [current_slot]
or eax, PG_SW
or eax, PG_SWR
mov [edx+APPDATA.io_map+ebx*4], eax
 
add esi, [default_io_map]
818,7 → 818,7
mov esi, [ipc_ptab]
and eax, 0xFFFFF000
jz .exit
stdcall map_page, esi, eax, PG_SW
stdcall map_page, esi, eax, PG_SWR
@@:
mov edi, [lin_addr]
and edi, 0xFFFFF000
849,7 → 849,7
and eax, 0xFFFFF000
jz .exit
 
stdcall map_page, esi, eax, PG_SW
stdcall map_page, esi, eax, PG_SWR
xor edx, edx
jmp .map
.exit:
881,7 → 881,7
mov esi, [proc_mem_tab]
and eax, 0xFFFFF000
jz .exit
stdcall map_page, esi, eax, PG_SW
stdcall map_page, esi, eax, PG_SWR
@@:
mov edi, [lin_addr]
and edi, 0xFFFFF000
912,7 → 912,7
and eax, 0xFFFFF000
jz .exit
 
stdcall map_page, esi, eax, PG_SW
stdcall map_page, esi, eax, PG_SWR
xor edx, edx
jmp .map
.exit:
927,7 → 927,7
; destroys: only eax
proc safe_map_page stdcall, slot:dword, req_access:dword, ofs:dword
mov eax, [esi+edx*4]
test al, PG_MAP
test al, PG_READ
jz .not_present
test al, PG_WRITE
jz .resolve_readonly
947,7 → 947,7
pop ecx
test eax, eax
jz .fail
or al, PG_UW
or al, PG_UWR
mov [esi+edx*4], eax
jmp .map
.resolve_readonly:
989,7 → 989,7
call alloc_page
test eax, eax
jz .no_hdll
or al, PG_UW
or al, PG_UWR
mov [esi+edx*4], eax
stdcall map_page, edi, eax, [req_access]
push esi edi
1090,7 → 1090,7
@@:
mov [used_buf], ecx
stdcall map_mem_ipc, ecx, [dst_slot], \
edi, esi, PG_SW
edi, esi, PG_SWR
 
mov edi, [dst_offset]
add edi, [used_buf]
/kernel/trunk/core/mtrr.inc
848,7 → 848,7
; LFB is mapped to virtual address LFB_BASE,
; it uses global pages if supported by CPU.
mov ebx, [sys_proc+PROC.pdt_0+(LFB_BASE shr 20)]
test ebx, PG_LARGE
test ebx, PDE_LARGE
jnz @f
mov ebx, [page_tabs+(LFB_BASE shr 10)]
@@:
/kernel/trunk/core/sys32.inc
308,7 → 308,7
mov ecx, ebx
shr ecx, 10
mov edx, [master_tab+ecx*4]
test edx, PG_MAP
test edx, PG_READ
jz .fail ;page table is not created
;incorrect address in the program
 
/kernel/trunk/core/taskman.inc
503,7 → 503,7
rep movsd
 
mov eax, [edi-8192+PROC.pdt_0_phys]
or eax, PG_SW
or eax, PG_SWR
mov [edi-4096+(page_tabs shr 20)], eax
 
lea eax, [edi-8192]
529,7 → 529,7
rep stosd
 
mov ecx, [img_pages]
mov ebx, PG_UW
mov ebx, PG_UWR
xor edx, edx
mov esi, [img_base]
shr esi, 10
554,7 → 554,7
test eax, eax
jz .fail
 
stdcall map_page, edx, eax, dword PG_UW
stdcall map_page, edx, eax, dword PG_UWR
add edx, 0x1000
dec [app_pages]
jnz .alloc
643,7 → 643,7
test eax, 1
jz .next
and eax, not 0xFFF
stdcall map_page, [tmp_task_ptab], eax, PG_SW
stdcall map_page, [tmp_task_ptab], eax, PG_SWR
stdcall destroy_page_table, [tmp_task_ptab]
mov eax, [esi]
call free_page
788,7 → 788,7
 
push ecx
stdcall map_memEx, [proc_mem_map], \
[slot], ebx, ecx, PG_MAP
[slot], ebx, ecx, PG_READ
pop ecx
 
mov esi, [offset]
859,7 → 859,7
; add ebx, new_app_base
push ecx
stdcall map_memEx, [proc_mem_map], \
[slot], ebx, ecx, PG_SW
[slot], ebx, ecx, PG_SWR
pop ecx
 
mov edi, [offset]
/kernel/trunk/core/v86.inc
78,7 → 78,7
; (I have seen one computer with EBDA segment = 0x9D80,
; all other computers use less memory)
 
mov eax, PG_UW
mov eax, PG_UWR
mov [page_tabs], eax
invlpg [eax]
 
89,7 → 89,7
mov byte [0x504], 0x10
mov byte [0x505], 0xF4
 
mov eax, 0x99000+PG_UW
mov eax, 0x99000+PG_UWR
mov edi, page_tabs+0x99*4
mov edx, 0x1000
mov ecx, 7
101,7 → 101,7
; addresses 0xC0000 - 0xFFFFF - BIOS code (shared between all machines!)
; physical address = 0xC0000
 
mov eax, 0xC0000+PG_UW
mov eax, 0xC0000+PG_UWR
mov edi, page_tabs+0xC0*4
mov ecx, 64
@@:
/kernel/trunk/data32.inc
219,6 → 219,8
 
 
align 4
pte_valid_mask dd 0xFFFFF000+PG_SHARED+PG_NOCACHE+PG_UWR
 
keyboard dd 1
syslang dd 1
 
/kernel/trunk/init.inc
139,7 → 139,7
 
mov ebx, cr4
or ebx, CR4_PSE
mov eax, PG_LARGE+PG_SW
mov eax, PDE_LARGE+PG_SWR
mov cr4, ebx
dec [pg_data.kernel_tables-OS_BASE]
 
149,7 → 149,7
mov edi, [tmp_page_tabs]
jmp .map_kernel_heap ; new kernel fits to the first 4Mb - nothing to do with ".map_low"
.no_PSE:
mov eax, PG_SW
mov eax, PG_SWR
mov ecx, [tmp_page_tabs]
shr ecx, 12
.map_low:
168,7 → 168,7
 
mov ecx, [pg_data.kernel_tables-OS_BASE]
mov eax, [tmp_page_tabs]
or eax, PG_SW
or eax, PG_SWR
mov edi, edx
 
.map_kernel_tabs:
177,7 → 177,7
dec ecx
jnz .map_kernel_tabs
 
mov dword [sys_proc-OS_BASE+PROC.pdt_0+(page_tabs shr 20)], sys_proc+PROC.pdt_0+PG_SW-OS_BASE
mov dword [sys_proc-OS_BASE+PROC.pdt_0+(page_tabs shr 20)], sys_proc+PROC.pdt_0+PG_SWR-OS_BASE
 
mov edi, (sys_proc+PROC.pdt_0-OS_BASE)
lea esi, [edi+(OS_BASE shr 20)]
/kernel/trunk/kernel.asm
575,11 → 575,11
.noSYSCALL:
; -----------------------------------------
stdcall alloc_page
stdcall map_page, tss-0xF80, eax, PG_SW
stdcall map_page, tss-0xF80, eax, PG_SWR
stdcall alloc_page
stdcall map_page, tss+0x80, eax, PG_SW
stdcall map_page, tss+0x80, eax, PG_SWR
stdcall alloc_page
stdcall map_page, tss+0x1080, eax, PG_SW
stdcall map_page, tss+0x1080, eax, PG_SWR
 
; LOAD IDT
 
754,7 → 754,7
mov edi, OS_BASE + 8000h
mov ecx, (ap_init16_size + 3) / 4
rep movsd
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW+PG_NOCACHE
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SWR+PG_NOCACHE
mov [LAPIC_BASE], eax
lea edi, [eax+300h]
mov esi, smpt+4
1059,14 → 1059,14
;protect io permission map
 
mov esi, [default_io_map]
stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map], PG_MAP
stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map], PG_READ
add esi, 0x1000
stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map+4], PG_MAP
stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map+4], PG_READ
 
stdcall map_page, tss._io_map_0, \
[SLOT_BASE+256+APPDATA.io_map], PG_MAP
[SLOT_BASE+256+APPDATA.io_map], PG_READ
stdcall map_page, tss._io_map_1, \
[SLOT_BASE+256+APPDATA.io_map+4], PG_MAP
[SLOT_BASE+256+APPDATA.io_map+4], PG_READ
 
; SET KEYBOARD PARAMETERS
mov al, 0xf6 ; reset keyboard, scan enabled
2802,7 → 2802,7
align 4
@@:
mov eax, [page_tabs+esi*4]
or al, PG_UW
or al, PG_UWR
mov [page_tabs+ebx*4], eax
mov eax, ebx
shl eax, 12
5654,10 → 5654,10
.rsdp_found:
mov esi, [eax+16] ; esi contains physical address of the RSDT
mov ebp, [ipc_tmp]
stdcall map_page, ebp, esi, PG_MAP
stdcall map_page, ebp, esi, PG_READ
lea eax, [esi+1000h]
lea edx, [ebp+1000h]
stdcall map_page, edx, eax, PG_MAP
stdcall map_page, edx, eax, PG_READ
and esi, 0xFFF
add esi, ebp
cmp dword [esi], 'RSDT'
5671,10 → 5671,10
lodsd
mov ebx, eax
lea eax, [ebp+2000h]
stdcall map_page, eax, ebx, PG_MAP
stdcall map_page, eax, ebx, PG_READ
lea eax, [ebp+3000h]
add ebx, 0x1000
stdcall map_page, eax, ebx, PG_MAP
stdcall map_page, eax, ebx, PG_READ
and ebx, 0xFFF
lea ebx, [ebx+ebp+2000h]
cmp dword [ebx], 'FACP'
5685,10 → 5685,10
; ebx is linear address of FADT
mov edi, [ebx+40] ; physical address of the DSDT
lea eax, [ebp+4000h]
stdcall map_page, eax, edi, PG_MAP
stdcall map_page, eax, edi, PG_READ
lea eax, [ebp+5000h]
lea esi, [edi+0x1000]
stdcall map_page, eax, esi, PG_MAP
stdcall map_page, eax, esi, PG_READ
and esi, 0xFFF
sub edi, esi
cmp dword [esi+ebp+4000h], 'DSDT'
5736,8 → 5736,8
add edi, 0x1000
push eax
lea eax, [ebp+4000h]
stdcall map_page, eax, edi, PG_MAP
push PG_MAP
stdcall map_page, eax, edi, PG_READ
push PG_READ
lea eax, [edi+1000h]
push eax
lea eax, [ebp+5000h]
/kernel/trunk/network/socket.inc
1481,7 → 1481,7
mov esi, eax
 
push edx
stdcall create_ring_buffer, SOCKET_MAXDATA, PG_SW
stdcall create_ring_buffer, SOCKET_MAXDATA, PG_SWR
pop edx
test eax, eax
jz .fail