io.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _H8300_IO_H
  3. #define _H8300_IO_H
  4. #ifdef __KERNEL__
  5. #include <linux/types.h>
  6. /* H8/300 internal I/O functions */
  7. #define __raw_readb __raw_readb
  8. static inline u8 __raw_readb(const volatile void __iomem *addr)
  9. {
  10. return *(volatile u8 *)addr;
  11. }
  12. #define __raw_readw __raw_readw
  13. static inline u16 __raw_readw(const volatile void __iomem *addr)
  14. {
  15. return *(volatile u16 *)addr;
  16. }
  17. #define __raw_readl __raw_readl
  18. static inline u32 __raw_readl(const volatile void __iomem *addr)
  19. {
  20. return *(volatile u32 *)addr;
  21. }
  22. #define __raw_writeb __raw_writeb
  23. static inline void __raw_writeb(u8 b, const volatile void __iomem *addr)
  24. {
  25. *(volatile u8 *)addr = b;
  26. }
  27. #define __raw_writew __raw_writew
  28. static inline void __raw_writew(u16 b, const volatile void __iomem *addr)
  29. {
  30. *(volatile u16 *)addr = b;
  31. }
  32. #define __raw_writel __raw_writel
  33. static inline void __raw_writel(u32 b, const volatile void __iomem *addr)
  34. {
  35. *(volatile u32 *)addr = b;
  36. }
  37. static inline void ctrl_bclr(int b, void __iomem *addr)
  38. {
  39. if (__builtin_constant_p(b))
  40. __asm__("bclr %1,%0" : "+WU"(*(u8 *)addr): "i"(b));
  41. else
  42. __asm__("bclr %w1,%0" : "+WU"(*(u8 *)addr): "r"(b));
  43. }
  44. static inline void ctrl_bset(int b, void __iomem *addr)
  45. {
  46. if (__builtin_constant_p(b))
  47. __asm__("bset %1,%0" : "+WU"(*(u8 *)addr): "i"(b));
  48. else
  49. __asm__("bset %w1,%0" : "+WU"(*(u8 *)addr): "r"(b));
  50. }
  51. #include <asm-generic/io.h>
  52. #endif /* __KERNEL__ */
  53. #endif /* _H8300_IO_H */