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 |
PMM_VIRT_TEMP = 0xD0000000
macro PAGE_ALIGN_UP reg
macro PAGE_ALIGN_DOWN reg
struc PMMFreeRange
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