;; File: memory.inc

	section '.text' code executable readable

efi_memory_init:
	mov eax, [pEfiBootServices]
	mov ecx, [eax + EFI_BOOT_SERVICES.AllocatePool]
	mov [fnAllocatePool], ecx

	mov ecx, [eax + EFI_BOOT_SERVICES.FreePool]
	mov [fnFreePool], ecx

	mov ecx, [eax + EFI_BOOT_SERVICES.GetMemoryMap]
	mov [fnGetMemoryMap], ecx

	call efi_get_memory_map

	ret

efi_get_memory_map:
	push ebp
	mov ebp, esp

	sub esp, 4

	lea eax, [ebp - 4]
	EFI_CALL [fnGetMemoryMap], uMemMapSize, 0, eax, uDescSize, uDescVer

	add dword [uMemMapSize], 4096

	EFI_CALL [fnAllocatePool], EFI_LOADER_DATA, [uMemMapSize], pMemMap

	LOG szRes2, eax

	EFI_CALL [fnGetMemoryMap], uMemMapSize, [pMemMap], eax, uDescSize, uDescVer

	LOG szRes, eax

	leave
	ret

	section '.data' data readable writeable

	;; Variable: fnAllocatePool
fnAllocatePool  dd ?
	;; Variable: fnFreePool
fnFreePool      dd ?
	;; Variable: fnGetMemoryMap
fnGetMemoryMap  dd ?

uMemMapSize dd 0
uDescSize   dd 0
uDescVer    dd 0
pMemMap     dd 0

szRes du "Result: %x", 0
szRes2 du "Result: %x", 0