summaryrefslogtreecommitdiffstats
path: root/mem/memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'mem/memory.h')
-rw-r--r--mem/memory.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/mem/memory.h b/mem/memory.h
new file mode 100644
index 0000000..eb30217
--- /dev/null
+++ b/mem/memory.h
@@ -0,0 +1,49 @@
+#ifndef JOVE_MEM_H
+#define JOVE_MEM_H 1
+
+#define PAGESIZE 4096ULL
+#define KiB 1024ULL
+#define MiB (KiB * KiB)
+#define GiB (MiB * KiB)
+#define TiB (GiB * KiB)
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdbool.h>
+typedef uintptr_t physptr_t;
+
+#include "slab.h"
+
+/*Linear*/
+void mem_paging_setup(void);
+
+physptr_t mem_linear_tophys(uintptr_t virt);
+
+/**Check if pointer is within valid memory.
+ * @param ptr pointer to check.
+ * @return if the pointer is invalid.*/
+bool mem_check_ptr(const void *ptr);
+
+/**Make sure the range indicated is available in memory.
+ * If necessary, allocate new pages using the passed flags
+ * @param from start of the range.
+ * @param to end of the range.
+ * @param rw flag to mark page is writeable.
+ * @param user flag to mark page as user accessable*/
+void mem_ensure_range(uintptr_t from, uintptr_t to, bool rw, bool user);
+
+void mem_slab_setup(void);
+void mem_slabcache_new(struct SlabCache *cache, char *name, size_t objsize);
+
+void* mem_slab_alloc(struct SlabCache *cache);
+void mem_slab_free(struct SlabCache *cache, void *ptr);
+
+void* mem_alloc(size_t width);
+void mem_free(void *ptr);
+
+/*Physical*/
+
+physptr_t mem_phys_take4k(void);
+void mem_phys_reserve(physptr_t start, size_t len);
+
+#endif