162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2021 Intel Corporation 462306a36Sopenharmony_ci * Author: johannes@sipsolutions.net 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci#ifndef _LOGIC_IO_H 762306a36Sopenharmony_ci#define _LOGIC_IO_H 862306a36Sopenharmony_ci#include <linux/types.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci/* include this file into asm/io.h */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#ifdef CONFIG_INDIRECT_IOMEM 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifdef CONFIG_INDIRECT_IOMEM_FALLBACK 1562306a36Sopenharmony_ci/* 1662306a36Sopenharmony_ci * If you want emulated IO memory to fall back to 'normal' IO memory 1762306a36Sopenharmony_ci * if a region wasn't registered as emulated, then you need to have 1862306a36Sopenharmony_ci * all of the real_* functions implemented. 1962306a36Sopenharmony_ci */ 2062306a36Sopenharmony_ci#if !defined(real_ioremap) || !defined(real_iounmap) || \ 2162306a36Sopenharmony_ci !defined(real_raw_readb) || !defined(real_raw_writeb) || \ 2262306a36Sopenharmony_ci !defined(real_raw_readw) || !defined(real_raw_writew) || \ 2362306a36Sopenharmony_ci !defined(real_raw_readl) || !defined(real_raw_writel) || \ 2462306a36Sopenharmony_ci (defined(CONFIG_64BIT) && \ 2562306a36Sopenharmony_ci (!defined(real_raw_readq) || !defined(real_raw_writeq))) || \ 2662306a36Sopenharmony_ci !defined(real_memset_io) || \ 2762306a36Sopenharmony_ci !defined(real_memcpy_fromio) || \ 2862306a36Sopenharmony_ci !defined(real_memcpy_toio) 2962306a36Sopenharmony_ci#error "Must provide fallbacks for real IO memory access" 3062306a36Sopenharmony_ci#endif /* defined ... */ 3162306a36Sopenharmony_ci#endif /* CONFIG_INDIRECT_IOMEM_FALLBACK */ 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci#define ioremap ioremap 3462306a36Sopenharmony_civoid __iomem *ioremap(phys_addr_t offset, size_t size); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define iounmap iounmap 3762306a36Sopenharmony_civoid iounmap(void volatile __iomem *addr); 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci#define __raw_readb __raw_readb 4062306a36Sopenharmony_ciu8 __raw_readb(const volatile void __iomem *addr); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci#define __raw_readw __raw_readw 4362306a36Sopenharmony_ciu16 __raw_readw(const volatile void __iomem *addr); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci#define __raw_readl __raw_readl 4662306a36Sopenharmony_ciu32 __raw_readl(const volatile void __iomem *addr); 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci#ifdef CONFIG_64BIT 4962306a36Sopenharmony_ci#define __raw_readq __raw_readq 5062306a36Sopenharmony_ciu64 __raw_readq(const volatile void __iomem *addr); 5162306a36Sopenharmony_ci#endif /* CONFIG_64BIT */ 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define __raw_writeb __raw_writeb 5462306a36Sopenharmony_civoid __raw_writeb(u8 value, volatile void __iomem *addr); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci#define __raw_writew __raw_writew 5762306a36Sopenharmony_civoid __raw_writew(u16 value, volatile void __iomem *addr); 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define __raw_writel __raw_writel 6062306a36Sopenharmony_civoid __raw_writel(u32 value, volatile void __iomem *addr); 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#ifdef CONFIG_64BIT 6362306a36Sopenharmony_ci#define __raw_writeq __raw_writeq 6462306a36Sopenharmony_civoid __raw_writeq(u64 value, volatile void __iomem *addr); 6562306a36Sopenharmony_ci#endif /* CONFIG_64BIT */ 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci#define memset_io memset_io 6862306a36Sopenharmony_civoid memset_io(volatile void __iomem *addr, int value, size_t size); 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#define memcpy_fromio memcpy_fromio 7162306a36Sopenharmony_civoid memcpy_fromio(void *buffer, const volatile void __iomem *addr, 7262306a36Sopenharmony_ci size_t size); 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci#define memcpy_toio memcpy_toio 7562306a36Sopenharmony_civoid memcpy_toio(volatile void __iomem *addr, const void *buffer, size_t size); 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci#endif /* CONFIG_INDIRECT_IOMEM */ 7862306a36Sopenharmony_ci#endif /* _LOGIC_IO_H */ 79