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