0001
0002
0003
0004
0005 #ifndef __ASM_MMU_H
0006 #define __ASM_MMU_H
0007
0008 #include <asm/cputype.h>
0009
0010 #define MMCF_AARCH32 0x1
0011 #define USER_ASID_BIT 48
0012 #define USER_ASID_FLAG (UL(1) << USER_ASID_BIT)
0013 #define TTBR_ASID_MASK (UL(0xffff) << 48)
0014
0015 #ifndef __ASSEMBLY__
0016
0017 #include <linux/refcount.h>
0018 #include <asm/cpufeature.h>
0019
0020 typedef struct {
0021 atomic64_t id;
0022 #ifdef CONFIG_COMPAT
0023 void *sigpage;
0024 #endif
0025 refcount_t pinned;
0026 void *vdso;
0027 unsigned long flags;
0028 } mm_context_t;
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 #define ASID(mm) (atomic64_read(&(mm)->context.id) & 0xffff)
0057
0058 static inline bool arm64_kernel_unmapped_at_el0(void)
0059 {
0060 return cpus_have_const_cap(ARM64_UNMAP_KERNEL_AT_EL0);
0061 }
0062
0063 extern void arm64_memblock_init(void);
0064 extern void paging_init(void);
0065 extern void bootmem_init(void);
0066 extern void __iomem *early_io_map(phys_addr_t phys, unsigned long virt);
0067 extern void init_mem_pgprot(void);
0068 extern void create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,
0069 unsigned long virt, phys_addr_t size,
0070 pgprot_t prot, bool page_mappings_only);
0071 extern void *fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot);
0072 extern void mark_linear_text_alias_ro(void);
0073 extern bool kaslr_requires_kpti(void);
0074
0075 #define INIT_MM_CONTEXT(name) \
0076 .pgd = init_pg_dir,
0077
0078 #endif
0079 #endif