summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2021-04-23 01:12:23 +0000
committerAda Christine <adachristine18@gmail.com>2021-04-23 01:12:23 +0000
commitb90e152c02aad225e83a3e6c1b80d1a0e396bb14 (patch)
tree0eb899ca1213df0c677bf8721261d70c60ef68b4 /api
parent73c73b2a8c9c3a6332942a1146fd18d74616e5b2 (diff)
less repetition, more flexibility with paging macros
Diffstat (limited to 'api')
-rw-r--r--api/kernel/memory/paging.h9
-rw-r--r--api/kernel/memory/range.h21
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;
+};