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. |
macros and structs | |
Constants | |
PMM_VIRT_TEMP | |
Macros | |
PAGE_ALIGN_UP reg | |
PAGE_ALIGN_DOWN reg | |
Structs | |
PMMFreeRange | |
private functions | |
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 | |
public functions | |
Functions | |
pmm_alloc | |
pmm_alloc_page | |
pmm_free | |
pmm_free_page | |
pmm_init | |
variables | |
Variables | |
pPMMFreeListHead | Hold first free list entry physical address |
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_unmap_temp_page
Unmap PMM_VIRT_TEMP
Variables | |
pPMMFreeListHead | Hold first free list entry physical address |
Map physical address at PMM_VIRT_TEMP
_pmm_map_temp_page
Unmap PMM_VIRT_TEMP
_pmm_unmap_temp_page
Add new memory region to the linked list.
_pmm_init_region
Initialize bitmap for lower memory (below 1Mb)
_pmm_init_low_memory
_pmm_merge_block
pmm_alloc
pmm_alloc_page
pmm_free
pmm_free_page
pmm_init