X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/bffa3430fbbaaad29bec0b5bee9c1f0bfc7fd068..34f6af4f61e0eec9c96113e07f140b609b4113c8:/lunaix-os/arch/x86/includes/asm/variants/pt_def32.h diff --git a/lunaix-os/arch/x86/includes/asm/variants/pt_def32.h b/lunaix-os/arch/x86/includes/asm/variants/pt_def32.h new file mode 100644 index 0000000..b8d30d4 --- /dev/null +++ b/lunaix-os/arch/x86/includes/asm/variants/pt_def32.h @@ -0,0 +1,64 @@ +#ifdef CONFIG_ARCH_I386 + +#ifndef __LUNAIX_PT_DEF32_H +#define __LUNAIX_PT_DEF32_H + +#define _PTW_LEVEL 2 + +#define _PAGE_BASE_SHIFT 12 +#define _PAGE_BASE_SIZE ( 1UL << _PAGE_BASE_SHIFT ) +#define _PAGE_BASE_MASK ( _PAGE_BASE_SIZE - 1) + +#define _PAGE_LEVEL_SHIFT 10 +#define _PAGE_LEVEL_SIZE ( 1UL << _PAGE_LEVEL_SHIFT ) +#define _PAGE_LEVEL_MASK ( _PAGE_LEVEL_SIZE - 1 ) +#define _PAGE_Ln_SIZE(n) ( 1UL << (_PAGE_BASE_SHIFT + _PAGE_LEVEL_SHIFT * (_PTW_LEVEL - (n) - 1)) ) + +// Note: we set VMS_SIZE = VMS_MASK as it is impossible +// to express 4Gi in 32bit unsigned integer + +#define VMS_BITS 32 +#define PMS_BITS 32 + +#define VMS_SIZE ( -1UL ) +#define VMS_MASK ( -1UL ) +#define PMS_SIZE ( -1UL ) +#define PMS_MASK ( -1UL ) + +/* General size of a LnT huge page */ + +#define L0T_SIZE _PAGE_Ln_SIZE(0) +#define L1T_SIZE _PAGE_Ln_SIZE(1) +#define L2T_SIZE _PAGE_Ln_SIZE(1) +#define L3T_SIZE _PAGE_Ln_SIZE(1) +#define LFT_SIZE _PAGE_Ln_SIZE(1) + +struct __pte { + unsigned int val; +} align(4); + +#define _PTE_P (1 << 0) +#define _PTE_W (1 << 1) +#define _PTE_U (1 << 2) +#define _PTE_WT (1 << 3) +#define _PTE_CD (1 << 4) +#define _PTE_A (1 << 5) +#define _PTE_D (1 << 6) +#define _PTE_PS (1 << 7) +#define _PTE_PAT (1 << 7) +#define _PTE_G (1 << 8) +#define _PTE_X (0) +#define _PTE_NX (0) +#define _PTE_R (0) + +#define __MEMGUARD 0xdeadc0deUL + +typedef unsigned int pte_attr_t; +typedef unsigned int pfn_t; + +#define __index(va) ( (va) & VMS_MASK ) +#define __vaddr(va) ( va ) +#define __paddr(pa) ( (pa) & PMS_MASK ) + +#endif /* __LUNAIX_PT_DEF32_H */ +#endif