Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8219 → Rev 8220

/kernel/trunk/bootloader/uefi4kos/uefi64kos.asm
712,9 → 712,6
call ask_for_params
@@:
 
; call calc_memmap
; call dump_memmap
 
movzx ecx, [cfg_opt_value_vmode]
eficall [gop_interface], EFI_GRAPHICS_OUTPUT_PROTOCOL.SetMode, \
[gop_interface], rcx
770,6 → 767,7
; 2880*512/0x1000, EFI_ALLOCATE_ADDRESS
 
call calc_memmap
; call dump_memmap
 
mov rbx, [efi_table]
mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices]
861,7 → 859,6
 
 
halt_on_error:
push rax rbx rcx rdx rsi rdi
test eax, eax
jz @f
call clearbuf
876,7 → 873,6
eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg
jmp $
@@:
pop rdi rsi rdx rcx rbx rax
ret
 
find_rsdp:
922,27 → 918,16
[memory_map], memory_map_key, descriptor_size, descriptor_ver
call halt_on_error
 
mov rdi, BOOT_LO.memmap_block_cnt
mov dword[rdi], 0
mov rdi, BOOT_LO.memmap_blocks
mov rax, [memory_map_size]
xor edx, edx
mov rcx, [descriptor_size]
div ecx
mov ecx, eax
cmp ecx, MAX_MEMMAP_BLOCKS
jbe @f
mov ecx, MAX_MEMMAP_BLOCKS
@@:
xor eax, eax
mov [rax+BOOT_LO.memmap_block_cnt], 0
mov dword[rdi-4], 0 ; memmap_block_cnt
mov rsi, [memory_map]
mov rbx, rsi
add rbx, [memory_map_size]
.next_descr:
call add_uefi_memmap
add rsi, [descriptor_size]
add rdi, sizeof.e820entry
dec ecx
jnz .next_descr
cmp rsi, rbx
jb .next_descr
ret
 
dump_memmap:
997,70 → 982,56
; linux/arch/x86/platform/efi/efi.c
; do_add_efi_memmap
add_uefi_memmap:
push rax rbx rcx rdx rsi rdi
xor eax, eax
cmp [rax+BOOT_LO.memmap_block_cnt], MAX_MEMMAP_BLOCKS
jz .done
 
mov r10d, [rsi+EFI_MEMORY_DESCRIPTOR.Type]
mov r11, [rsi+EFI_MEMORY_DESCRIPTOR.PhysicalStart]
mov r13, [rsi+EFI_MEMORY_DESCRIPTOR.NumberOfPages]
mov r14, [rsi+EFI_MEMORY_DESCRIPTOR.Attribute]
mov rax, [rsi+EFI_MEMORY_DESCRIPTOR.PhysicalStart]
mov [rdi+e820entry.addr], rax
 
mov [rdi+e820entry.addr], r11
mov rax, r13
mov rax, [rsi+EFI_MEMORY_DESCRIPTOR.NumberOfPages]
shl rax, 12
mov [rdi+e820entry.size], rax
 
 
cmp r10d, EFI_LOADER_CODE
jz .case0
cmp r10d, EFI_LOADER_DATA
jz .case0
cmp r10d, EFI_BOOT_SERVICES_CODE
jz .case0
cmp r10d, EFI_BOOT_SERVICES_DATA
jz .case0
cmp r10d, EFI_CONVENTIONAL_MEMORY
jz .case0
cmp r10d, EFI_ACPI_RECLAIM_MEMORY
jz .case1
cmp r10d, EFI_ACPI_MEMORY_NVS
jz .case2
cmp r10d, EFI_UNUSABLE_MEMORY
jz .case3
cmp r10d, EFI_PERSISTENT_MEMORY
jz .case4
jmp .default
 
.case0:
test r14, EFI_MEMORY_WB
jz @f
mov eax, E820_RAM
jmp .done
@@:
mov eax, E820_RESERVED
jmp .done
.case1:
mov ecx, [rsi+EFI_MEMORY_DESCRIPTOR.Type]
cmp ecx, EFI_LOADER_CODE
jz .mem_ram_if_wb
cmp ecx, EFI_LOADER_DATA
jz .mem_ram_if_wb
cmp ecx, EFI_BOOT_SERVICES_CODE
jz .mem_ram_if_wb
cmp ecx, EFI_BOOT_SERVICES_DATA
jz .mem_ram_if_wb
cmp ecx, EFI_CONVENTIONAL_MEMORY
jz .mem_ram_if_wb
cmp ecx, EFI_ACPI_RECLAIM_MEMORY
mov eax, E820_ACPI
jmp .done
.case2:
jz .type_done
cmp ecx, EFI_ACPI_MEMORY_NVS
mov eax, E820_NVS
jmp .done
.case3:
jz .type_done
cmp ecx, EFI_UNUSABLE_MEMORY
mov eax, E820_UNUSABLE
jmp .done
.case4:
jz .type_done
cmp ecx, EFI_PERSISTENT_MEMORY
mov eax, E820_PMEM
jmp .done
.default:
jz .type_done
jmp .reserved
.mem_ram_if_wb:
test [rsi+EFI_MEMORY_DESCRIPTOR.Attribute], dword EFI_MEMORY_WB
mov eax, E820_RAM
jnz .type_done
.reserved:
mov eax, E820_RESERVED
jmp .done
 
.type_done:
mov [rdi+e820entry.type], eax
cmp eax, E820_RAM
jnz @f
xor eax, eax
inc [rax+BOOT_LO.memmap_block_cnt]
add rdi, sizeof.e820entry
@@:
.done:
mov [rdi+e820entry.type], eax
 
mov rax, BOOT_LO.memmap_block_cnt
inc word[rax]
 
pop rdi rsi rdx rcx rbx rax
ret