1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 *  arch/arm/include/asm/map.h
4 *
5 *  Copyright (C) 1999-2000 Russell King
6 *
7 *  Page table mapping constructs and function prototypes
8 */
9#ifndef __ASM_MACH_MAP_H
10#define __ASM_MACH_MAP_H
11
12#include <asm/io.h>
13
14struct map_desc {
15	unsigned long virtual;
16	unsigned long pfn;
17	unsigned long length;
18	unsigned int type;
19};
20
21/* types 0-3 are defined in asm/io.h */
22enum {
23	MT_UNCACHED = 4,
24	MT_CACHECLEAN,
25	MT_MINICLEAN,
26	MT_LOW_VECTORS,
27	MT_HIGH_VECTORS,
28	MT_MEMORY_RWX,
29	MT_MEMORY_RW,
30	MT_MEMORY_RO,
31	MT_ROM,
32	MT_MEMORY_RWX_NONCACHED,
33	MT_MEMORY_RW_DTCM,
34	MT_MEMORY_RWX_ITCM,
35	MT_MEMORY_RW_SO,
36	MT_MEMORY_DMA_READY,
37};
38
39#ifdef CONFIG_MMU
40extern void iotable_init(struct map_desc *, int);
41extern void vm_reserve_area_early(unsigned long addr, unsigned long size,
42				  void *caller);
43extern void create_mapping_late(struct mm_struct *mm, struct map_desc *md,
44				bool ng);
45
46#ifdef CONFIG_DEBUG_LL
47extern void debug_ll_addr(unsigned long *paddr, unsigned long *vaddr);
48extern void debug_ll_io_init(void);
49#else
50static inline void debug_ll_io_init(void) {}
51#endif
52
53struct mem_type;
54extern const struct mem_type *get_mem_type(unsigned int type);
55/*
56 * external interface to remap single page with appropriate type
57 */
58extern int ioremap_page(unsigned long virt, unsigned long phys,
59			const struct mem_type *mtype);
60#else
61#define iotable_init(map,num)	do { } while (0)
62#define vm_reserve_area_early(a,s,c)	do { } while (0)
63#endif
64
65#endif
66