Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (C) 2015 Synopsys, Inc. (www.synopsys.com)
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 /* start after vmalloc area */
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  * This should be converted to the asm-generic version, but of course this
0028  * is needlessly different from all other architectures. Sigh - tglx
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 /* start after fixmap area */
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