Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8656 → Rev 8599

/kernel/trunk/bootloader/uefi4kos/uefi64kos.asm
23,7 → 23,6
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
819,15 → 818,8
mov ecx, 0x17
rep movsb
 
; kernel trampoline
mov rsi, kernel_trampoline
mov rdi, KERNEL_TRAMPOLINE
mov ecx, kernel_trampoline.size
rep movsb
lgdt [cs:GDTR]
 
mov rax, GDTR
lgdt [cs:rax]
 
mov ax, DATA_32_SELECTOR
mov ds, ax
mov es, ax
836,10 → 828,29
mov ss, ax
 
push CODE_32_SELECTOR
mov rax, KERNEL_TRAMPOLINE
lea rax, [.next]
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]
1075,25 → 1086,7
pop rdi rsi rdx rcx rbx rax
ret
 
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
 
section '.rodata' data readable
align 16
GDTR:
dw 4*8-1
1104,10 → 1097,7
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