BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / bc5e11e3ed4ede35824ad4f1de30ee38d5d72423 / include / nucleus / memory.h

// Related

Nucleus

Barry Basic paging bc5e11e (3 years, 3 months ago)
diff --git a/include/nucleus/memory.h b/include/nucleus/memory.h
index c6446b0..fe54c39 100644
--- a/include/nucleus/memory.h
+++ b/include/nucleus/memory.h
@@ -6,8 +6,47 @@
 
 #define PAGE_SIZE 0x1000
 
+#define PAGE_ADDR(pg) ((pg) & 0xFFFFF000)
+#define PAGE_ATTR(pg) ((pg) & 0x00000FFF)
+
+typedef uint32_t page_t;
+typedef uint32_t page_table_t;
+typedef uint32_t page_dir_t;
+
+/* Page Table Entry flags */
+enum PTEFlag {
+	PTE_PRESENT = (1 << 0),
+	PTE_WRITE   = (1 << 1),
+	PTE_USER    = (1 << 2),
+	PTE_THROUGH = (1 << 3),
+	PTE_NOCACHE = (1 << 4),
+	PTE_ACCESS  = (1 << 5),
+	PTE_DIRTY   = (1 << 6),
+	PTE_GLOBAL  = (1 << 8),
+};
+
+/* Page Directory Entry flags */
+enum PDEFlag {
+	PDE_PRESENT = (1 << 0),
+	PDE_WRITE   = (1 << 1),
+	PDE_USER    = (1 << 2),
+	PDE_THROUGH = (1 << 3),
+	PDE_NOCACHE = (1 << 4),
+	PDE_ACCESS  = (1 << 5),
+};
+
+/* Flush Translation Lookaside Buffer */
+static inline void
+flush_tlb(uintptr_t addr)
+{
+	asm volatile("invlpg (%0)" :: "r" (addr) : "memory");
+}
+
 uintptr_t alloc_frame(void);
 void free_frame(uintptr_t frame);
 void init_frames(size_t memMapSize, void *memMap);
 
+void set_page(uintptr_t vaddr, page_t page);
+void init_paging(void);
+
 #endif