18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _H8300_IO_H 38c2ecf20Sopenharmony_ci#define _H8300_IO_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#ifdef __KERNEL__ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <linux/types.h> 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci/* H8/300 internal I/O functions */ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#define __raw_readb __raw_readb 128c2ecf20Sopenharmony_cistatic inline u8 __raw_readb(const volatile void __iomem *addr) 138c2ecf20Sopenharmony_ci{ 148c2ecf20Sopenharmony_ci return *(volatile u8 *)addr; 158c2ecf20Sopenharmony_ci} 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#define __raw_readw __raw_readw 188c2ecf20Sopenharmony_cistatic inline u16 __raw_readw(const volatile void __iomem *addr) 198c2ecf20Sopenharmony_ci{ 208c2ecf20Sopenharmony_ci return *(volatile u16 *)addr; 218c2ecf20Sopenharmony_ci} 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#define __raw_readl __raw_readl 248c2ecf20Sopenharmony_cistatic inline u32 __raw_readl(const volatile void __iomem *addr) 258c2ecf20Sopenharmony_ci{ 268c2ecf20Sopenharmony_ci return *(volatile u32 *)addr; 278c2ecf20Sopenharmony_ci} 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci#define __raw_writeb __raw_writeb 308c2ecf20Sopenharmony_cistatic inline void __raw_writeb(u8 b, const volatile void __iomem *addr) 318c2ecf20Sopenharmony_ci{ 328c2ecf20Sopenharmony_ci *(volatile u8 *)addr = b; 338c2ecf20Sopenharmony_ci} 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci#define __raw_writew __raw_writew 368c2ecf20Sopenharmony_cistatic inline void __raw_writew(u16 b, const volatile void __iomem *addr) 378c2ecf20Sopenharmony_ci{ 388c2ecf20Sopenharmony_ci *(volatile u16 *)addr = b; 398c2ecf20Sopenharmony_ci} 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci#define __raw_writel __raw_writel 428c2ecf20Sopenharmony_cistatic inline void __raw_writel(u32 b, const volatile void __iomem *addr) 438c2ecf20Sopenharmony_ci{ 448c2ecf20Sopenharmony_ci *(volatile u32 *)addr = b; 458c2ecf20Sopenharmony_ci} 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cistatic inline void ctrl_bclr(int b, void __iomem *addr) 488c2ecf20Sopenharmony_ci{ 498c2ecf20Sopenharmony_ci if (__builtin_constant_p(b)) 508c2ecf20Sopenharmony_ci __asm__("bclr %1,%0" : "+WU"(*(u8 *)addr): "i"(b)); 518c2ecf20Sopenharmony_ci else 528c2ecf20Sopenharmony_ci __asm__("bclr %w1,%0" : "+WU"(*(u8 *)addr): "r"(b)); 538c2ecf20Sopenharmony_ci} 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_cistatic inline void ctrl_bset(int b, void __iomem *addr) 568c2ecf20Sopenharmony_ci{ 578c2ecf20Sopenharmony_ci if (__builtin_constant_p(b)) 588c2ecf20Sopenharmony_ci __asm__("bset %1,%0" : "+WU"(*(u8 *)addr): "i"(b)); 598c2ecf20Sopenharmony_ci else 608c2ecf20Sopenharmony_ci __asm__("bset %w1,%0" : "+WU"(*(u8 *)addr): "r"(b)); 618c2ecf20Sopenharmony_ci} 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci#include <asm-generic/io.h> 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci#endif /* __KERNEL__ */ 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci#endif /* _H8300_IO_H */ 68