2014-04-07 15:39:52 -07:00
/*
* 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
* Copyright ( C ) 2013 Mark Salter < msalter @ redhat . com >
*
2015-08-23 14:24:44 +01:00
* Adapted from arch / x86 version .
2014-04-07 15:39:52 -07:00
*
*/
# ifndef _ASM_ARM64_FIXMAP_H
# define _ASM_ARM64_FIXMAP_H
# ifndef __ASSEMBLY__
# include <linux/kernel.h>
2015-10-19 14:19:33 +01:00
# include <linux/sizes.h>
2015-06-01 13:40:32 +02:00
# include <asm/boot.h>
2014-04-07 15:39:52 -07:00
# include <asm/page.h>
/*
* 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 .
*
* These ' compile - time allocated ' memory buffers are
* page - sized . Use set_fixmap ( idx , phys ) to associate
* physical memory with fixmap indices .
*
*/
enum fixed_addresses {
2014-11-26 00:14:16 +00:00
FIX_HOLE ,
2015-06-01 13:40:32 +02:00
/*
* Reserve a virtual window for the FDT that is 2 MB larger than the
* maximum supported size , and put it at the top of the fixmap region .
* The additional space ensures that any FDT that does not exceed
* MAX_FDT_SIZE can be mapped regardless of whether it crosses any
* 2 MB alignment boundaries .
*
* Keep this at the top so it remains 2 MB aligned .
*/
# define FIX_FDT_SIZE (MAX_FDT_SIZE + SZ_2M)
FIX_FDT_END ,
FIX_FDT = FIX_FDT_END + FIX_FDT_SIZE / PAGE_SIZE - 1 ,
2014-04-07 15:39:52 -07:00
FIX_EARLYCON_MEM_BASE ,
2015-03-04 13:27:34 +00:00
FIX_TEXT_POKE0 ,
2014-04-07 15:39:52 -07:00
__end_of_permanent_fixed_addresses ,
/*
* Temporary boot - time mappings , used by early_ioremap ( ) ,
* before ioremap ( ) is functional .
*/
2015-10-19 14:19:33 +01:00
# define NR_FIX_BTMAPS (SZ_256K / PAGE_SIZE)
2014-04-07 15:39:52 -07:00
# define FIX_BTMAPS_SLOTS 7
# define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS)
FIX_BTMAP_END = __end_of_permanent_fixed_addresses ,
FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1 ,
__end_of_fixed_addresses
} ;
# define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT)
# define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
# define FIXMAP_PAGE_IO __pgprot(PROT_DEVICE_nGnRE)
2014-11-21 21:50:42 +00:00
void __init early_fixmap_init ( void ) ;
2014-04-07 15:39:52 -07:00
2014-11-21 21:50:42 +00:00
# define __early_set_fixmap __set_fixmap
2015-03-24 14:02:36 +00:00
# define __late_set_fixmap __set_fixmap
# define __late_clear_fixmap(idx) __set_fixmap((idx), 0, FIXMAP_PAGE_CLEAR)
2014-11-21 21:50:42 +00:00
extern void __set_fixmap ( enum fixed_addresses idx , phys_addr_t phys , pgprot_t prot ) ;
2014-04-07 15:39:52 -07:00
# include <asm-generic/fixmap.h>
# endif /* !__ASSEMBLY__ */
# endif /* _ASM_ARM64_FIXMAP_H */