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

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. __set_fixmap

   1 /*
   2  * fixmap.h: compile-time virtual memory allocation
   3  *
   4  * This file is subject to the terms and conditions of the GNU General Public
   5  * License.  See the file "COPYING" in the main directory of this archive
   6  * for more details.
   7  *
   8  * Copyright (C) 1998 Ingo Molnar
   9  *
  10  * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
  11  * x86_32 and x86_64 integration by Gustavo F. Padovan, February 2009
  12  */
  13 
  14 #ifndef _ASM_X86_FIXMAP_H
  15 #define _ASM_X86_FIXMAP_H
  16 
  17 /*
  18  * Exposed to assembly code for setting up initial page tables. Cannot be
  19  * calculated in assembly code (fixmap entries are an enum), but is sanity
  20  * checked in the actual fixmap C code to make sure that the fixmap is
  21  * covered fully.
  22  */
  23 #define FIXMAP_PMD_NUM  2
  24 /* fixmap starts downwards from the 507th entry in level2_fixmap_pgt */
  25 #define FIXMAP_PMD_TOP  507
  26 
  27 #ifndef __ASSEMBLY__
  28 #include <linux/kernel.h>
  29 #include <asm/acpi.h>
  30 #include <asm/apicdef.h>
  31 #include <asm/page.h>
  32 #ifdef CONFIG_X86_32
  33 #include <linux/threads.h>
  34 #include <asm/kmap_types.h>
  35 #else
  36 #include <uapi/asm/vsyscall.h>
  37 #endif
  38 
  39 /*
  40  * We can't declare FIXADDR_TOP as variable for x86_64 because vsyscall
  41  * uses fixmaps that relies on FIXADDR_TOP for proper address calculation.
  42  * Because of this, FIXADDR_TOP x86 integration was left as later work.
  43  */
  44 #ifdef CONFIG_X86_32
  45 /*
  46  * Leave one empty page between vmalloc'ed areas and
  47  * the start of the fixmap.
  48  */
  49 extern unsigned long __FIXADDR_TOP;
  50 #define FIXADDR_TOP     ((unsigned long)__FIXADDR_TOP)
  51 #else
  52 #define FIXADDR_TOP     (round_up(VSYSCALL_ADDR + PAGE_SIZE, 1<<PMD_SHIFT) - \
  53                          PAGE_SIZE)
  54 #endif
  55 
  56 /*
  57  * Here we define all the compile-time 'special' virtual
  58  * addresses. The point is to have a constant address at
  59  * compile time, but to set the physical address only
  60  * in the boot process.
  61  * for x86_32: We allocate these special addresses
  62  * from the end of virtual memory (0xfffff000) backwards.
  63  * Also this lets us do fail-safe vmalloc(), we
  64  * can guarantee that these special addresses and
  65  * vmalloc()-ed addresses never overlap.
  66  *
  67  * These 'compile-time allocated' memory buffers are
  68  * fixed-size 4k pages (or larger if used with an increment
  69  * higher than 1). Use set_fixmap(idx,phys) to associate
  70  * physical memory with fixmap indices.
  71  *
  72  * TLB entries of such buffers will not be flushed across
  73  * task switches.
  74  */
  75 enum fixed_addresses {
  76 #ifdef CONFIG_X86_32
  77         FIX_HOLE,
  78 #else
  79 #ifdef CONFIG_X86_VSYSCALL_EMULATION
  80         VSYSCALL_PAGE = (FIXADDR_TOP - VSYSCALL_ADDR) >> PAGE_SHIFT,
  81 #endif
  82 #endif
  83         FIX_DBGP_BASE,
  84         FIX_EARLYCON_MEM_BASE,
  85 #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT
  86         FIX_OHCI1394_BASE,
  87 #endif
  88 #ifdef CONFIG_X86_LOCAL_APIC
  89         FIX_APIC_BASE,  /* local (CPU) APIC) -- required for SMP or not */
  90 #endif
  91 #ifdef CONFIG_X86_IO_APIC
  92         FIX_IO_APIC_BASE_0,
  93         FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1,
  94 #endif
  95 #ifdef CONFIG_X86_32
  96         FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
  97         FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
  98 #ifdef CONFIG_PCI_MMCONFIG
  99         FIX_PCIE_MCFG,
 100 #endif
 101 #endif
 102 #ifdef CONFIG_PARAVIRT
 103         FIX_PARAVIRT_BOOTMAP,
 104 #endif
 105 #ifdef  CONFIG_X86_INTEL_MID
 106         FIX_LNW_VRTC,
 107 #endif
 108 
 109 #ifdef CONFIG_ACPI_APEI_GHES
 110         /* Used for GHES mapping from assorted contexts */
 111         FIX_APEI_GHES_IRQ,
 112         FIX_APEI_GHES_NMI,
 113 #endif
 114 
 115         __end_of_permanent_fixed_addresses,
 116 
 117         /*
 118          * 512 temporary boot-time mappings, used by early_ioremap(),
 119          * before ioremap() is functional.
 120          *
 121          * If necessary we round it up to the next 512 pages boundary so
 122          * that we can have a single pmd entry and a single pte table:
 123          */
 124 #define NR_FIX_BTMAPS           64
 125 #define FIX_BTMAPS_SLOTS        8
 126 #define TOTAL_FIX_BTMAPS        (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS)
 127         FIX_BTMAP_END =
 128          (__end_of_permanent_fixed_addresses ^
 129           (__end_of_permanent_fixed_addresses + TOTAL_FIX_BTMAPS - 1)) &
 130          -PTRS_PER_PTE
 131          ? __end_of_permanent_fixed_addresses + TOTAL_FIX_BTMAPS -
 132            (__end_of_permanent_fixed_addresses & (TOTAL_FIX_BTMAPS - 1))
 133          : __end_of_permanent_fixed_addresses,
 134         FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1,
 135 #ifdef CONFIG_X86_32
 136         FIX_WP_TEST,
 137 #endif
 138 #ifdef CONFIG_INTEL_TXT
 139         FIX_TBOOT_BASE,
 140 #endif
 141         __end_of_fixed_addresses
 142 };
 143 
 144 
 145 extern void reserve_top_address(unsigned long reserve);
 146 
 147 #define FIXADDR_SIZE            (__end_of_permanent_fixed_addresses << PAGE_SHIFT)
 148 #define FIXADDR_START           (FIXADDR_TOP - FIXADDR_SIZE)
 149 #define FIXADDR_TOT_SIZE        (__end_of_fixed_addresses << PAGE_SHIFT)
 150 #define FIXADDR_TOT_START       (FIXADDR_TOP - FIXADDR_TOT_SIZE)
 151 
 152 extern int fixmaps_set;
 153 
 154 extern pte_t *kmap_pte;
 155 #define kmap_prot PAGE_KERNEL
 156 extern pte_t *pkmap_page_table;
 157 
 158 void __native_set_fixmap(enum fixed_addresses idx, pte_t pte);
 159 void native_set_fixmap(unsigned /* enum fixed_addresses */ idx,
 160                        phys_addr_t phys, pgprot_t flags);
 161 
 162 #ifndef CONFIG_PARAVIRT_XXL
 163 static inline void __set_fixmap(enum fixed_addresses idx,
 164                                 phys_addr_t phys, pgprot_t flags)
 165 {
 166         native_set_fixmap(idx, phys, flags);
 167 }
 168 #endif
 169 
 170 /*
 171  * FIXMAP_PAGE_NOCACHE is used for MMIO. Memory encryption is not
 172  * supported for MMIO addresses, so make sure that the memory encryption
 173  * mask is not part of the page attributes.
 174  */
 175 #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_IO_NOCACHE
 176 
 177 /*
 178  * Early memremap routines used for in-place encryption. The mappings created
 179  * by these routines are intended to be used as temporary mappings.
 180  */
 181 void __init *early_memremap_encrypted(resource_size_t phys_addr,
 182                                       unsigned long size);
 183 void __init *early_memremap_encrypted_wp(resource_size_t phys_addr,
 184                                          unsigned long size);
 185 void __init *early_memremap_decrypted(resource_size_t phys_addr,
 186                                       unsigned long size);
 187 void __init *early_memremap_decrypted_wp(resource_size_t phys_addr,
 188                                          unsigned long size);
 189 
 190 #include <asm-generic/fixmap.h>
 191 
 192 #define __late_set_fixmap(idx, phys, flags) __set_fixmap(idx, phys, flags)
 193 #define __late_clear_fixmap(idx) __set_fixmap(idx, 0, __pgprot(0))
 194 
 195 void __early_set_fixmap(enum fixed_addresses idx,
 196                         phys_addr_t phys, pgprot_t flags);
 197 
 198 #endif /* !__ASSEMBLY__ */
 199 #endif /* _ASM_X86_FIXMAP_H */

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