root/arch/parisc/include/asm/fixmap.h
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_FIXMAP_H
#define _ASM_FIXMAP_H

/*
 * This file defines the locations of the fixed mappings on parisc.
 *
 * All of the values in this file are machine virtual addresses.
 *
 * All of the values in this file must be <4GB (because of assembly
 * loading restrictions).  If you place this region anywhere above
 * __PAGE_OFFSET, you must adjust the memory map accordingly
 */

/*
 * The tmpalias region is used in kernel space to copy/clear/flush data
 * from pages congruently mapped with user space. It is comprised of
 * a pair regions. The size of these regions is determined by the largest
 * cache aliasing boundary for machines that support equivalent aliasing.
 *
 * The c3750 with PA8700 processor returns an alias value of 11. This
 * indicates that it has an alias boundary of 4 MB. It also supports
 * non-equivalent aliasing without a performance penalty.
 *
 * Machines with PA8800/PA8900 processors return an alias value of 0.
 * This indicates the alias boundary is unknown and may be larger than
 * 16 MB. Non-equivalent aliasing is not supported.
 *
 * Here we assume the maximum alias boundary is 4 MB.
 */
#define TMPALIAS_SIZE_BITS      22      /* 4 MB */
#define TMPALIAS_MAP_START      ((__PAGE_OFFSET) - (2 << TMPALIAS_SIZE_BITS))

#define FIXMAP_SIZE             (FIX_BITMAP_COUNT << PAGE_SHIFT)
#define FIXMAP_START            (TMPALIAS_MAP_START - FIXMAP_SIZE)
/* This is the kernel area for all maps (vmalloc, dma etc.)  most
 * usually, it extends up to TMPALIAS_MAP_START.  Virtual addresses
 * 0..GATEWAY_PAGE_SIZE are reserved for the gateway page */
#define KERNEL_MAP_START        (GATEWAY_PAGE_SIZE)
#define KERNEL_MAP_END          (FIXMAP_START)

#ifndef __ASSEMBLER__


enum fixed_addresses {
        /* Support writing RO kernel text via kprobes, jump labels, etc. */
        FIX_TEXT_POKE0,
        FIX_TEXT_KEXEC,
        FIX_BITMAP_COUNT
};

extern void *parisc_vmalloc_start;
#define PCXL_DMA_MAP_SIZE       (8*1024*1024)
#define VMALLOC_START           ((unsigned long)parisc_vmalloc_start)
#define VMALLOC_END             (KERNEL_MAP_END)

#define __fix_to_virt(_x) (FIXMAP_START + ((_x) << PAGE_SHIFT))

void set_fixmap(enum fixed_addresses idx, phys_addr_t phys);
void clear_fixmap(enum fixed_addresses idx);

#endif /*__ASSEMBLER__*/

#endif /*_ASM_FIXMAP_H*/