Our PMM is just a linked list of page-aligned size blocks.
┌─────┐ ┌─────┐ │size │ ┌──►│size │ │next ├──┘ │next ├────► 0 └─────┘ └─────┘
pmm.inc | Our PMM is just a linked list of page-aligned size blocks. |
Constants | |
PMM_VIRT_TEMP | |
Macros | |
PAGE_ALIGN_UP reg | |
PAGE_ALIGN_DOWN reg | |
Structs | |
PMMFreeRange | |
Functions | |
_pmm_map_temp_page | Map physical address at PMM_VIRT_TEMP |
_pmm_unmap_temp_page | Unmap PMM_VIRT_TEMP |
_pmm_init_region | Add new memory region to the linked list. |
_pmm_init_low_memory | Initialize bitmap for lower memory (below 1Mb) |
_pmm_merge_block | |
pmm_alloc | |
pmm_alloc_page | |
pmm_free | |
pmm_free_page | |
pmm_init | |
Variables | |
pPMMFreeListHead | Hold first free list entry physical address |
Unmap PMM_VIRT_TEMP