X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/9fe5e02cf615ad121c4460fbaaac2787d1e09c0e..05b7549a0f980efa33265a091a5174a78851ce05:/lunaix-os/includes/lunaix/mm/page.h?ds=sidebyside diff --git a/lunaix-os/includes/lunaix/mm/page.h b/lunaix-os/includes/lunaix/mm/page.h index e97de1d..c202184 100644 --- a/lunaix-os/includes/lunaix/mm/page.h +++ b/lunaix-os/includes/lunaix/mm/page.h @@ -3,13 +3,16 @@ #include #include -#define PG_SIZE_BITS 12 +#define PG_SIZE_BITS 12 +#define PG_SIZE (1 << PG_SIZE_BITS) #define PG_INDEX_BITS 10 #define PG_MAX_ENTRIES 1024U #define PG_LAST_TABLE PG_MAX_ENTRIES - 1 #define PG_FIRST_TABLE 0 +#define PTE_NULL 0 + #define P2V(paddr) ((uintptr_t)(paddr) + HIGHER_HLF_BASE) #define V2P(vaddr) ((uintptr_t)(vaddr) - HIGHER_HLF_BASE) @@ -43,6 +46,9 @@ #define PG_ENTRY_FLAGS(entry) (entry & 0xFFFU) #define PG_ENTRY_ADDR(entry) (entry & ~0xFFFU) +#define HAS_FLAGS(entry, flags) ((PG_ENTRY_FLAGS(entry) & (flags)) == flags) +#define CONTAINS_FLAGS(entry, flags) (PG_ENTRY_FLAGS(entry) & (flags)) + #define PG_PREM_R PG_PRESENT #define PG_PREM_RW PG_PRESENT | PG_WRITE #define PG_PREM_UR PG_PRESENT | PG_ALLOW_USER @@ -78,5 +84,12 @@ typedef struct { uint16_t flags; } v_mapping; +typedef uint32_t x86_pte_t; +typedef struct +{ + x86_pte_t entry[PG_MAX_ENTRIES]; +} __attribute__((packed)) x86_page_table; + + #endif /* __LUNAIX_PAGE_H */