Include dependency graph for pmm.c:Go to the source code of this file.
Macros | |
| #define | PAGE_SIZE 4096 |
| 4KB pages | |
| #define | PAGE_SHIFT 12 |
| bits to shift to get page (2^12=4096) | |
| #define | MEMORY_SIZE 0x100000000 |
| 4GB address space | |
| #define | TYPE_BITS 2 |
| number of bits per page entry | |
| #define | PAGE_NUMBER (MEMORY_SIZE / PAGE_SIZE) |
| total number of pages | |
| #define | ENTRIES 1024 |
| number of entries in a page table | |
| #define | PAGES_PER_DWORD (32 / TYPE_BITS) |
| pages in each bitmap entry | |
| #define | PAGES_BER_BYTE (8 / TYPE_BITS) |
| pages per bitmap entry byte | |
| #define | TYPE_MASK (0xFFFFFFFF >> (32 - TYPE_BITS)) |
| calc 2^TYPE_BITS-1 | |
| #define | BITMAP_INIT 0x55555555 |
| 0b0101...01, use PMM_RESERVED | |
| #define | BIT_CHECK(val, bit) (((val) >> (bit)) & 1) |
| checks a bit in a given value | |
| #define | BITMAP_SET(idx) (bitmap[(idx) / 32] |= 1 << ((idx) % 32)) |
| sets a bit in the memory bitmap | |
| #define | BITMAP_CLEAR(idx) (bitmap[(idx) / 32] &= ~(1 << ((idx) % 32))) |
| clears a bit in the memory bitmap | |
Functions | |
| static void | pmm_bitmap_set (uint32_t idx, uint32_t value) |
| Sets a bitmap entry to a value. More... | |
| static uint32_t | pmm_bitmap_get (uint32_t idx) |
| Returns a bitmap entry. More... | |
| static void | pmm_use_kernel_memory () |
| Marks all kernel memory as used. | |
| void | pmm_init () |
| Initializes the PMM. More... | |
| uint32_t | pmm_get_page (void *ptr, uint32_t offset) |
| Returns to which page a given memory address belongs. More... | |
| void * | pmm_get_address (uint32_t page, uint32_t offset) |
| Returns a memory address belonging to a given page. More... | |
| void | pmm_use (void *ptr, size_t len, pmm_flags_t flags, char *tag) |
| Marks page frames for a given memory range as used or unused. More... | |
| static void * | pmm_find_free (size_t len) |
| Finds free page frames. More... | |
| void * | pmm_alloc (size_t len, pmm_flags_t flags) |
| Allocates page frames. More... | |
| void | pmm_free (void *ptr, size_t len) |
| Frees page frames. More... | |
| pmm_flags_t | pmm_check (void *ptr) |
| Returns whether a page frame is used or unused. More... | |
| void | pmm_dump (void *ptr, size_t len) |
| Dumps information on page frames for a given memory range. More... | |
| uint32_t | pmm_get_highest_kernel_page () |
| Returns the highest page used by the kernel. More... | |
Variables | |
| static uint32_t | bitmap [PAGE_NUMBER/PAGES_PER_DWORD] |
| Holds information on used page frames. More... | |
| static uint32_t | highest_kernel_page = 0 |
| remember the highest kernel page | |
| const void | kernel_start |
| start of the kernel section | |
| const void | kernel_end |
| end of the kernel section | |
| const void | main_kernel_stack_end |
| end of the main kernel stack | |
| static void * | main_kernel_stack_start |
| start of the main kernel stack More... | |