Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8655 → Rev 8656

/kernel/trunk/bootloader/uefi4kos/uefi64kos.asm
23,6 → 23,7
LIP_BUFFER_SIZE = 0x100
FILE_BUFFER_SIZE = 0x1000
 
KERNEL_TRAMPOLINE = 0x8f80 ; just before BOOT_LO
KERNEL_BASE = 0x10000
RAMDISK_BASE = 0x100000
MAX_FILE_SIZE = 0x10000000
818,8 → 819,15
mov ecx, 0x17
rep movsb
 
lgdt [cs:GDTR]
; kernel trampoline
mov rsi, kernel_trampoline
mov rdi, KERNEL_TRAMPOLINE
mov ecx, kernel_trampoline.size
rep movsb
 
mov rax, GDTR
lgdt [cs:rax]
 
mov ax, DATA_32_SELECTOR
mov ds, ax
mov es, ax
828,29 → 836,10
mov ss, ax
 
push CODE_32_SELECTOR
lea rax, [.next]
mov rax, KERNEL_TRAMPOLINE
push rax
retf
use32
align 16
.next:
mov eax, cr0
and eax, not CR0_PG
mov cr0, eax
 
mov ecx, MSR_AMD_EFER
rdmsr
btr eax, 8 ; LME
wrmsr
 
mov eax, cr4
and eax, not CR4_PAE
mov cr4, eax
 
push KERNEL_BASE
retn
 
use64
.error:
mov rbx, [efi_table]
mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut]
1086,7 → 1075,25
pop rdi rsi rdx rcx rbx rax
ret
 
section '.rodata' data readable
use32
kernel_trampoline:
org KERNEL_TRAMPOLINE
mov eax, cr0
and eax, not CR0_PG
mov cr0, eax
 
mov ecx, MSR_AMD_EFER
rdmsr
btr eax, 8 ; LME
wrmsr
 
mov eax, cr4
and eax, not CR4_PAE
mov cr4, eax
 
push KERNEL_BASE
retn
 
align 16
GDTR:
dw 4*8-1
1097,7 → 1104,10
dw 0FFFFh,0,9A00h,0CFh ; 32-bit code
dw 0FFFFh,0,9200h,0CFh ; flat data
dw 0FFFFh,0,9A00h,0AFh ; 64-bit code
assert $ < BOOT_LO
kernel_trampoline.size = $ - KERNEL_TRAMPOLINE
 
section '.rodata' data readable
gopuuid db EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID
lipuuid db EFI_LOADED_IMAGE_PROTOCOL_GUID
sfspguid db EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID