root/arch/sh/include/asm/fixmap.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0
   2  *
   3  * fixmap.h: compile-time virtual memory allocation
   4  *
   5  * Copyright (C) 1998 Ingo Molnar
   6  *
   7  * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
   8  */
   9 
  10 #ifndef _ASM_FIXMAP_H
  11 #define _ASM_FIXMAP_H
  12 
  13 #include <linux/kernel.h>
  14 #include <linux/threads.h>
  15 #include <asm/page.h>
  16 #ifdef CONFIG_HIGHMEM
  17 #include <asm/kmap_types.h>
  18 #endif
  19 
  20 /*
  21  * Here we define all the compile-time 'special' virtual
  22  * addresses. The point is to have a constant address at
  23  * compile time, but to set the physical address only
  24  * in the boot process. We allocate these special  addresses
  25  * from the end of P3 backwards.
  26  * Also this lets us do fail-safe vmalloc(), we
  27  * can guarantee that these special addresses and
  28  * vmalloc()-ed addresses never overlap.
  29  *
  30  * these 'compile-time allocated' memory buffers are
  31  * fixed-size 4k pages. (or larger if used with an increment
  32  * highger than 1) use fixmap_set(idx,phys) to associate
  33  * physical memory with fixmap indices.
  34  *
  35  * TLB entries of such buffers will not be flushed across
  36  * task switches.
  37  */
  38 
  39 /*
  40  * on UP currently we will have no trace of the fixmap mechanizm,
  41  * no page table allocations, etc. This might change in the
  42  * future, say framebuffers for the console driver(s) could be
  43  * fix-mapped?
  44  */
  45 enum fixed_addresses {
  46         /*
  47          * The FIX_CMAP entries are used by kmap_coherent() to get virtual
  48          * addresses which are of a known color, and so their values are
  49          * important. __fix_to_virt(FIX_CMAP_END - n) must give an address
  50          * which is the same color as a page (n<<PAGE_SHIFT).
  51          */
  52 #define FIX_N_COLOURS 8
  53         FIX_CMAP_BEGIN,
  54         FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS) - 1,
  55 
  56 #ifdef CONFIG_HIGHMEM
  57         FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
  58         FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1,
  59 #endif
  60 
  61 #ifdef CONFIG_IOREMAP_FIXED
  62         /*
  63          * FIX_IOREMAP entries are useful for mapping physical address
  64          * space before ioremap() is useable, e.g. really early in boot
  65          * before kmalloc() is working.
  66          */
  67 #define FIX_N_IOREMAPS  32
  68         FIX_IOREMAP_BEGIN,
  69         FIX_IOREMAP_END = FIX_IOREMAP_BEGIN + FIX_N_IOREMAPS - 1,
  70 #endif
  71 
  72         __end_of_fixed_addresses
  73 };
  74 
  75 extern void __set_fixmap(enum fixed_addresses idx,
  76                          unsigned long phys, pgprot_t flags);
  77 extern void __clear_fixmap(enum fixed_addresses idx, pgprot_t flags);
  78 
  79 /*
  80  * used by vmalloc.c.
  81  *
  82  * Leave one empty page between vmalloc'ed areas and
  83  * the start of the fixmap, and leave one page empty
  84  * at the top of mem..
  85  */
  86 #ifdef CONFIG_SUPERH32
  87 #define FIXADDR_TOP     (P4SEG - PAGE_SIZE)
  88 #else
  89 #define FIXADDR_TOP     ((unsigned long)(-PAGE_SIZE))
  90 #endif
  91 #define FIXADDR_SIZE    (__end_of_fixed_addresses << PAGE_SHIFT)
  92 #define FIXADDR_START   (FIXADDR_TOP - FIXADDR_SIZE)
  93 
  94 #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_NOCACHE
  95 
  96 #include <asm-generic/fixmap.h>
  97 
  98 #endif

/* [<][>][^][v][top][bottom][index][help] */