diff options
| author | Ada Christine <adachristine18@gmail.com> | 2021-04-23 01:12:23 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2021-04-23 01:12:23 +0000 |
| commit | b90e152c02aad225e83a3e6c1b80d1a0e396bb14 (patch) | |
| tree | 0eb899ca1213df0c677bf8721261d70c60ef68b4 /api/kernel | |
| parent | 73c73b2a8c9c3a6332942a1146fd18d74616e5b2 (diff) | |
less repetition, more flexibility with paging macros
Diffstat (limited to 'api/kernel')
| -rw-r--r-- | api/kernel/memory/paging.h | 9 | ||||
| -rw-r--r-- | api/kernel/memory/range.h | 21 |
2 files changed, 28 insertions, 2 deletions
diff --git a/api/kernel/memory/paging.h b/api/kernel/memory/paging.h index d3dc541..3f16930 100644 --- a/api/kernel/memory/paging.h +++ b/api/kernel/memory/paging.h @@ -1,5 +1,6 @@ #pragma once +#include <stddef.h> #define PAGE_MAP_LEVELS 4 #define PAGE_MAP_BITS 9 @@ -24,5 +25,9 @@ #define PAGE_TABLE_INDEX_MASK ((1 << PAGE_MAP_BITS) - 1) -#define page_table_index_bits(l) (PAGE_OFFSET_BITS + PAGE_MAP_BITS * (l - 1)) -#define page_table_index(v, l) (((uint64_t)v >> page_table_index_bits(l)) & PAGE_TABLE_INDEX_MASK) +#define pte_index_bits(l) (PAGE_OFFSET_BITS + PAGE_MAP_BITS * (l - 1)) +#define pte_index(v, l) (((uintptr_t)v >> pte_index_bits(l)) & PAGE_TABLE_INDEX_MASK) +#define page_size(l) (1 << pte_index_bits(l)) +#define page_address(a, l) (a & ~(page_size(l) - 1)) +#define page_offset(a, l) (a & (page_size(l) - 1)) +#define page_count(s, l) (((s + page_size(l) - 1) & ~(page_size(l) - 1)) / page_size(l)) diff --git a/api/kernel/memory/range.h b/api/kernel/memory/range.h new file mode 100644 index 0000000..6a68467 --- /dev/null +++ b/api/kernel/memory/range.h @@ -0,0 +1,21 @@ +#pragma once + +#include <stdint.h> +#include <stddef.h> + +typedef uintptr_t phys_addr_t; + +enum memory_range_type +{ + UNUSABLE_MEMORY, + RESERVED_MEMORY, + SYSTEM_MEMORY, + AVAILABLE_MEMORY, +}; + +struct memory_range +{ + enum memory_range_type type; + phys_addr_t base; + size_t size; +}; |
