162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  arch/arm/include/asm/map.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (C) 1999-2000 Russell King
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci *  Page table mapping constructs and function prototypes
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci#ifndef __ASM_MACH_MAP_H
1062306a36Sopenharmony_ci#define __ASM_MACH_MAP_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <asm/io.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cistruct map_desc {
1562306a36Sopenharmony_ci	unsigned long virtual;
1662306a36Sopenharmony_ci	unsigned long pfn;
1762306a36Sopenharmony_ci	unsigned long length;
1862306a36Sopenharmony_ci	unsigned int type;
1962306a36Sopenharmony_ci};
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/* types 0-3 are defined in asm/io.h */
2262306a36Sopenharmony_cienum {
2362306a36Sopenharmony_ci	MT_UNCACHED = 4,
2462306a36Sopenharmony_ci	MT_CACHECLEAN,
2562306a36Sopenharmony_ci	MT_MINICLEAN,
2662306a36Sopenharmony_ci	MT_LOW_VECTORS,
2762306a36Sopenharmony_ci	MT_HIGH_VECTORS,
2862306a36Sopenharmony_ci	MT_MEMORY_RWX,
2962306a36Sopenharmony_ci	MT_MEMORY_RW,
3062306a36Sopenharmony_ci	MT_MEMORY_RO,
3162306a36Sopenharmony_ci	MT_ROM,
3262306a36Sopenharmony_ci	MT_MEMORY_RWX_NONCACHED,
3362306a36Sopenharmony_ci	MT_MEMORY_RW_DTCM,
3462306a36Sopenharmony_ci	MT_MEMORY_RWX_ITCM,
3562306a36Sopenharmony_ci	MT_MEMORY_RW_SO,
3662306a36Sopenharmony_ci	MT_MEMORY_DMA_READY,
3762306a36Sopenharmony_ci};
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci#ifdef CONFIG_MMU
4062306a36Sopenharmony_ciextern void iotable_init(struct map_desc *, int);
4162306a36Sopenharmony_ciextern void vm_reserve_area_early(unsigned long addr, unsigned long size,
4262306a36Sopenharmony_ci				  void *caller);
4362306a36Sopenharmony_ciextern void create_mapping_late(struct mm_struct *mm, struct map_desc *md,
4462306a36Sopenharmony_ci				bool ng);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#ifdef CONFIG_DEBUG_LL
4762306a36Sopenharmony_ciextern void debug_ll_addr(unsigned long *paddr, unsigned long *vaddr);
4862306a36Sopenharmony_ciextern void debug_ll_io_init(void);
4962306a36Sopenharmony_ci#else
5062306a36Sopenharmony_cistatic inline void debug_ll_io_init(void) {}
5162306a36Sopenharmony_ci#endif
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_cistruct mem_type;
5462306a36Sopenharmony_ciextern const struct mem_type *get_mem_type(unsigned int type);
5562306a36Sopenharmony_ci/*
5662306a36Sopenharmony_ci * external interface to remap single page with appropriate type
5762306a36Sopenharmony_ci */
5862306a36Sopenharmony_ciextern int ioremap_page(unsigned long virt, unsigned long phys,
5962306a36Sopenharmony_ci			const struct mem_type *mtype);
6062306a36Sopenharmony_ci#else
6162306a36Sopenharmony_ci#define iotable_init(map,num)	do { } while (0)
6262306a36Sopenharmony_ci#define vm_reserve_area_early(a,s,c)	do { } while (0)
6362306a36Sopenharmony_ci#endif
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci#endif
66