1 #ifdef CONFIG_ARCH_X86_64
2 #ifndef __LUNAIX_PT_DEF64_H
3 #define __LUNAIX_PT_DEF64_H
5 #include <lunaix/types.h>
10 // Note: we set VMS_SIZE = VMS_MASK as it is impossible
11 // to express 4Gi in 32bit unsigned integer
13 #define _PAGE_BASE_SHIFT 12
15 #define _PAGE_BASE_SIZE ( 1UL << _PAGE_BASE_SHIFT )
16 #define _PAGE_BASE_MASK ( (_PAGE_BASE_SIZE - 1) & 0x000fffffffffffffUL )
18 #define _PAGE_LEVEL_SHIFT 9
19 #define _PAGE_LEVEL_SIZE ( 1UL << _PAGE_LEVEL_SHIFT )
20 #define _PAGE_LEVEL_MASK ( _PAGE_LEVEL_SIZE - 1 )
21 #define _PAGE_Ln_SIZE(n) ( 1UL << (_PAGE_BASE_SHIFT + _PAGE_LEVEL_SHIFT * (_PTW_LEVEL - (n) - 1)) )
26 #define VMS_SIZE ( 1UL << VMS_BITS)
27 #define VMS_MASK ( VMS_SIZE - 1 )
28 #define PMS_SIZE ( 1UL << PMS_BITS )
29 #define PMS_MASK ( PMS_SIZE - 1 )
31 /* General size of a LnT huge page */
33 #define L0T_SIZE _PAGE_Ln_SIZE(0)
34 #define L1T_SIZE _PAGE_Ln_SIZE(1)
35 #define L2T_SIZE _PAGE_Ln_SIZE(2)
36 #define L3T_SIZE _PAGE_Ln_SIZE(3)
37 #define LFT_SIZE _PAGE_Ln_SIZE(3)
44 #define _PTE_P (1UL << 0)
45 #define _PTE_W (1UL << 1)
46 #define _PTE_U (1UL << 2)
47 #define _PTE_WT (1UL << 3)
48 #define _PTE_CD (1UL << 4)
49 #define _PTE_A (1UL << 5)
50 #define _PTE_D (1UL << 6)
51 #define _PTE_PS (1UL << 7)
52 #define _PTE_PAT (1UL << 7)
53 #define _PTE_G (1UL << 8)
54 #define _PTE_NX (1UL << 63)
58 #define __MEMGUARD 0xf0f0f0f0f0f0f0f0UL
60 typedef unsigned long pte_attr_t;
61 typedef unsigned long pfn_t;
63 // always do sign extend on x86_64
65 #define __index(va) ( (va) & VMS_MASK )
67 ( (__index(va) ^ ((VMS_MASK + 1) >> 1)) - ((VMS_MASK + 1) >> 1) )
68 #define __paddr(pa) ( (pa) & PMS_MASK )
70 #endif /* __LUNAIX_PT_DEF64_H */