0001
0002
0003
0004
0005
0006 #ifndef _ASM_HIGHMEM_H
0007 #define _ASM_HIGHMEM_H
0008
0009 #ifdef CONFIG_HIGHMEM
0010
0011 #include <uapi/asm/page.h>
0012 #include <asm/kmap_size.h>
0013
0014 #define FIXMAP_SIZE PGDIR_SIZE
0015 #define PKMAP_SIZE PGDIR_SIZE
0016
0017
0018 #define FIXMAP_BASE (PAGE_OFFSET - FIXMAP_SIZE - PKMAP_SIZE)
0019
0020 #define FIX_KMAP_SLOTS (KM_MAX_IDX * NR_CPUS)
0021 #define FIX_KMAP_BEGIN (0UL)
0022 #define FIX_KMAP_END ((FIX_KMAP_BEGIN + FIX_KMAP_SLOTS) - 1)
0023
0024 #define FIXADDR_TOP (FIXMAP_BASE + (FIX_KMAP_END << PAGE_SHIFT))
0025
0026
0027
0028
0029
0030 #define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT))
0031 #define __virt_to_fix(x) (((FIXADDR_TOP - ((x) & PAGE_MASK))) >> PAGE_SHIFT)
0032
0033
0034 #define PKMAP_BASE (FIXMAP_BASE + FIXMAP_SIZE)
0035 #define LAST_PKMAP (PKMAP_SIZE >> PAGE_SHIFT)
0036 #define LAST_PKMAP_MASK (LAST_PKMAP - 1)
0037 #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT))
0038 #define PKMAP_NR(virt) (((virt) - PKMAP_BASE) >> PAGE_SHIFT)
0039
0040 #include <asm/cacheflush.h>
0041
0042 extern void kmap_init(void);
0043
0044 #define arch_kmap_local_post_unmap(vaddr) \
0045 local_flush_tlb_kernel_range(vaddr, vaddr + PAGE_SIZE)
0046
0047 static inline void flush_cache_kmaps(void)
0048 {
0049 flush_cache_all();
0050 }
0051 #endif
0052
0053 #endif