1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
29e5c33d7SMark Salter #ifndef _ASM_EARLY_IOREMAP_H_
39e5c33d7SMark Salter #define _ASM_EARLY_IOREMAP_H_
49e5c33d7SMark Salter 
59e5c33d7SMark Salter #include <linux/types.h>
69e5c33d7SMark Salter 
79e5c33d7SMark Salter /*
89e5c33d7SMark Salter  * early_ioremap() and early_iounmap() are for temporary early boot-time
99e5c33d7SMark Salter  * mappings, before the real ioremap() is functional.
109e5c33d7SMark Salter  */
119e5c33d7SMark Salter extern void __iomem *early_ioremap(resource_size_t phys_addr,
129e5c33d7SMark Salter 				   unsigned long size);
139e5c33d7SMark Salter extern void *early_memremap(resource_size_t phys_addr,
149e5c33d7SMark Salter 			    unsigned long size);
152592dbbbSJuergen Gross extern void *early_memremap_ro(resource_size_t phys_addr,
162592dbbbSJuergen Gross 			       unsigned long size);
17f88a68faSTom Lendacky extern void *early_memremap_prot(resource_size_t phys_addr,
18f88a68faSTom Lendacky 				 unsigned long size, unsigned long prot_val);
199e5c33d7SMark Salter extern void early_iounmap(void __iomem *addr, unsigned long size);
209e5c33d7SMark Salter extern void early_memunmap(void *addr, unsigned long size);
219e5c33d7SMark Salter 
229e5c33d7SMark Salter /*
239e5c33d7SMark Salter  * Weak function called by early_ioremap_reset(). It does nothing, but
249e5c33d7SMark Salter  * architectures may provide their own version to do any needed cleanups.
259e5c33d7SMark Salter  */
269e5c33d7SMark Salter extern void early_ioremap_shutdown(void);
279e5c33d7SMark Salter 
289e5c33d7SMark Salter #if defined(CONFIG_GENERIC_EARLY_IOREMAP) && defined(CONFIG_MMU)
299e5c33d7SMark Salter /* Arch-specific initialization */
309e5c33d7SMark Salter extern void early_ioremap_init(void);
319e5c33d7SMark Salter 
329e5c33d7SMark Salter /* Generic initialization called by architecture code */
339e5c33d7SMark Salter extern void early_ioremap_setup(void);
349e5c33d7SMark Salter 
359e5c33d7SMark Salter /*
369e5c33d7SMark Salter  * Called as last step in paging_init() so library can act
379e5c33d7SMark Salter  * accordingly for subsequent map/unmap requests.
389e5c33d7SMark Salter  */
399e5c33d7SMark Salter extern void early_ioremap_reset(void);
409e5c33d7SMark Salter 
416b0f68e3SMark Salter /*
426b0f68e3SMark Salter  * Early copy from unmapped memory to kernel mapped memory.
436b0f68e3SMark Salter  */
446b0f68e3SMark Salter extern void copy_from_early_mem(void *dest, phys_addr_t src,
456b0f68e3SMark Salter 				unsigned long size);
466b0f68e3SMark Salter 
479e5c33d7SMark Salter #else
489e5c33d7SMark Salter static inline void early_ioremap_init(void) { }
499e5c33d7SMark Salter static inline void early_ioremap_setup(void) { }
509e5c33d7SMark Salter static inline void early_ioremap_reset(void) { }
519e5c33d7SMark Salter #endif
529e5c33d7SMark Salter 
539e5c33d7SMark Salter #endif /* _ASM_EARLY_IOREMAP_H_ */
54