X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/7b0dccbab69e806a63c4504c3ddb82e45241985b..2e21eb2f39dd80aa166216381d5d402be943686e:/lunaix-os/includes/lunaix/mm/page.h diff --git a/lunaix-os/includes/lunaix/mm/page.h b/lunaix-os/includes/lunaix/mm/page.h index 935909c..4b6a1a1 100644 --- a/lunaix-os/includes/lunaix/mm/page.h +++ b/lunaix-os/includes/lunaix/mm/page.h @@ -1,7 +1,7 @@ #ifndef __LUNAIX_PAGE_H #define __LUNAIX_PAGE_H #include -#include +#include #define PG_SIZE_BITS 12 #define PG_SIZE (1 << PG_SIZE_BITS) @@ -46,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 @@ -67,6 +70,7 @@ typedef unsigned long ptd_t; typedef unsigned long pt_t; typedef unsigned int pt_attr; +typedef uint32_t x86_pte_t; /** * @brief 虚拟映射属性 @@ -79,14 +83,25 @@ typedef struct { uintptr_t pa; // 映射的flags uint16_t flags; + // PTE地址 + x86_pte_t *pte; } v_mapping; -typedef uint32_t x86_pte_t; typedef struct { x86_pte_t entry[PG_MAX_ENTRIES]; } __attribute__((packed)) x86_page_table; +extern void __pg_mount_point; + +/* 三个页挂载点,一个页目录挂载点: 用于临时创建&编辑页表 */ + +#define PD_MOUNT 0xAFC00000 +#define PG_MOUNT_1 (&__pg_mount_point) +#define PG_MOUNT_2 (&__pg_mount_point + 0x1000) +#define PG_MOUNT_3 (&__pg_mount_point + 0x2000) +#define PG_MOUNT_4 (&__pg_mount_point + 0x3000) + #endif /* __LUNAIX_PAGE_H */