/*
* fixmap . h : compile - time virtual memory allocation
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 1998 Ingo Molnar
*
* Support of BIGMEM added by Gerhard Wichert , Siemens AG , July 1999
* x86_32 and x86_64 integration by Gustavo F . Padovan , February 2009
*/
#ifndef _ASM_X86_FIXMAP_H
#define _ASM_X86_FIXMAP_H
#include <asm /kmap_size.h>
/*
* Exposed to assembly code for setting up initial page tables . Cannot be
* calculated in assembly code ( fixmap entries are an enum ) , but is sanity
* checked in the actual fixmap C code to make sure that the fixmap is
* covered fully .
*/
#ifndef CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP
# define FIXMAP_PMD_NUM 2
#else
# define KM_PMDS (KM_MAX_IDX * ((CONFIG_NR_CPUS + 511 ) / 512 ))
# define FIXMAP_PMD_NUM (KM_PMDS + 2 )
#endif
/* fixmap starts downwards from the 507th entry in level2_fixmap_pgt */
#define FIXMAP_PMD_TOP 507
#ifndef __ASSEMBLER__
#include <linux/kernel.h>
#include <asm /apicdef.h>
#include <asm /page.h>
#include <asm /pgtable_types.h>
#ifdef CONFIG_X86_32
#include <linux/threads.h>
#else
#include <uapi/asm /vsyscall.h>
#endif
/*
* We can ' t declare FIXADDR_TOP as variable for x86_64 because vsyscall
* uses fixmaps that relies on FIXADDR_TOP for proper address calculation .
* Because of this , FIXADDR_TOP x86 integration was left as later work .
*/
#ifdef CONFIG_X86_32
/*
* Leave one empty page between vmalloc ' ed areas and
* the start of the fixmap .
*/
extern unsigned long __FIXADDR_TOP;
#define FIXADDR_TOP ((unsigned long )__FIXADDR_TOP)
#else
#define FIXADDR_TOP (round_up(VSYSCALL_ADDR + PAGE_SIZE, 1 <<PMD_SHIFT) - \
PAGE_SIZE)
#endif
/*
* Here we define all the compile - time ' special ' virtual
* addresses . The point is to have a constant address at
* compile time , but to set the physical address only
* in the boot process .
* for x86_32 : We allocate these special addresses
* from the end of virtual memory ( 0 xfffff000 ) backwards .
* Also this lets us do fail - safe vmalloc ( ) , we
* can guarantee that these special addresses and
* vmalloc ( ) - ed addresses never overlap .
*
* These ' compile - time allocated ' memory buffers are
* fixed - size 4 k pages ( or larger if used with an increment
* higher than 1 ) . Use set_fixmap ( idx , phys ) to associate
* physical memory with fixmap indices .
*
* TLB entries of such buffers will not be flushed across
* task switches .
*/
enum fixed_addresses {
#ifdef CONFIG_X86_32
FIX_HOLE,
#else
#ifdef CONFIG_X86_VSYSCALL_EMULATION
VSYSCALL_PAGE = (FIXADDR_TOP - VSYSCALL_ADDR) >> PAGE_SHIFT,
#endif
#endif
FIX_DBGP_BASE,
FIX_EARLYCON_MEM_BASE,
#ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT
FIX_OHCI1394_BASE,
#endif
#ifdef CONFIG_X86_LOCAL_APIC
FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */
#endif
#ifdef CONFIG_X86_IO_APIC
FIX_IO_APIC_BASE_0,
FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1 ,
#endif
#ifdef CONFIG_KMAP_LOCAL
FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * NR_CPUS) - 1 ,
#ifdef CONFIG_PCI_MMCONFIG
FIX_PCIE_MCFG,
#endif
#endif
#ifdef CONFIG_PARAVIRT_XXL
FIX_PARAVIRT_BOOTMAP,
#endif
#ifdef CONFIG_ACPI_APEI_GHES
/* Used for GHES mapping from assorted contexts */
FIX_APEI_GHES_IRQ,
FIX_APEI_GHES_NMI,
#endif
__end_of_permanent_fixed_addresses,
/*
* 512 temporary boot - time mappings , used by early_ioremap ( ) ,
* before ioremap ( ) is functional .
*
* If necessary we round it up to the next 512 pages boundary so
* that we can have a single pmd entry and a single pte table :
*/
#define NR_FIX_BTMAPS 64
#define FIX_BTMAPS_SLOTS 8
#define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS)
FIX_BTMAP_END =
(__end_of_permanent_fixed_addresses ^
(__end_of_permanent_fixed_addresses + TOTAL_FIX_BTMAPS - 1 )) &
-PTRS_PER_PTE
? __end_of_permanent_fixed_addresses + TOTAL_FIX_BTMAPS -
(__end_of_permanent_fixed_addresses & (TOTAL_FIX_BTMAPS - 1 ))
: __end_of_permanent_fixed_addresses,
FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1 ,
#ifdef CONFIG_X86_32
FIX_WP_TEST,
#endif
#ifdef CONFIG_INTEL_TXT
FIX_TBOOT_BASE,
#endif
__end_of_fixed_addresses
};
extern void reserve_top_address(unsigned long reserve);
#define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT)
#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
#define FIXADDR_TOT_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
#define FIXADDR_TOT_START (FIXADDR_TOP - FIXADDR_TOT_SIZE)
extern int fixmaps_set;
extern pte_t *pkmap_page_table;
void __native_set_fixmap(enum fixed_addresses idx, pte_t pte);
void native_set_fixmap(unsigned /* enum fixed_addresses */ idx,
phys_addr_t phys, pgprot_t flags);
#ifndef CONFIG_PARAVIRT_XXL
static inline void __set_fixmap(enum fixed_addresses idx,
phys_addr_t phys, pgprot_t flags)
{
native_set_fixmap(idx, phys, flags);
}
#endif
/*
* FIXMAP_PAGE_NOCACHE is used for MMIO . Memory encryption is not
* supported for MMIO addresses , so make sure that the memory encryption
* mask is not part of the page attributes .
*/
#define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_IO_NOCACHE
/*
* Early memremap routines used for in - place encryption . The mappings created
* by these routines are intended to be used as temporary mappings .
*/
void __init *early_memremap_encrypted(resource_size_t phys_addr,
unsigned long size);
void __init *early_memremap_encrypted_wp(resource_size_t phys_addr,
unsigned long size);
void __init *early_memremap_decrypted(resource_size_t phys_addr,
unsigned long size);
void __init *early_memremap_decrypted_wp(resource_size_t phys_addr,
unsigned long size);
#include <asm -generic/fixmap.h>
#define __late_set_fixmap(idx, phys, flags) __set_fixmap(idx, phys, flags)
#define __late_clear_fixmap(idx) __set_fixmap(idx, 0 , __pgprot(0 ))
void __early_set_fixmap(enum fixed_addresses idx,
phys_addr_t phys, pgprot_t flags);
#endif /* !__ASSEMBLER__ */
#endif /* _ASM_X86_FIXMAP_H */
Messung V0.5 in Prozent C=93 H=71 G=82
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland