File Index
Files and directories
Sign in
FILE

io_trivial.h

File preview with syntax highlighting.

linux-6.19.14/arch/alpha/include/asm/io_trivial.h OBJECTIVE-C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/* Trivial implementations of basic i/o routines.  Assumes that all
  3   of the hard work has been done by ioremap and ioportmap, and that
  4   access to i/o space is linear.  */
  5
  6/* This file may be included multiple times.  */
  7
  8#if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
  9__EXTERN_INLINE u8
 10IO_CONCAT(__IO_PREFIX,ioread8)(const void __iomem *a)
 11{
 12	return __kernel_ldbu(*(const volatile u8 __force *)a);
 13}
 14
 15__EXTERN_INLINE u16
 16IO_CONCAT(__IO_PREFIX,ioread16)(const void __iomem *a)
 17{
 18	return __kernel_ldwu(*(const volatile u16 __force *)a);
 19}
 20
 21__EXTERN_INLINE void
 22IO_CONCAT(__IO_PREFIX,iowrite8)(u8 b, void __iomem *a)
 23{
 24	__kernel_stb(b, *(volatile u8 __force *)a);
 25}
 26
 27__EXTERN_INLINE void
 28IO_CONCAT(__IO_PREFIX,iowrite16)(u16 b, void __iomem *a)
 29{
 30	__kernel_stw(b, *(volatile u16 __force *)a);
 31}
 32#endif
 33
 34#if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
 35__EXTERN_INLINE u32
 36IO_CONCAT(__IO_PREFIX,ioread32)(const void __iomem *a)
 37{
 38	return *(const volatile u32 __force *)a;
 39}
 40
 41__EXTERN_INLINE void
 42IO_CONCAT(__IO_PREFIX,iowrite32)(u32 b, void __iomem *a)
 43{
 44	*(volatile u32 __force *)a = b;
 45}
 46
 47__EXTERN_INLINE u64
 48IO_CONCAT(__IO_PREFIX,ioread64)(const void __iomem *a)
 49{
 50	return *(const volatile u64 __force *)a;
 51}
 52
 53__EXTERN_INLINE void
 54IO_CONCAT(__IO_PREFIX,iowrite64)(u64 b, void __iomem *a)
 55{
 56	*(volatile u64 __force *)a = b;
 57}
 58#endif
 59
 60#if IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 1
 61__EXTERN_INLINE u8
 62IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
 63{
 64	return __kernel_ldbu(*(const volatile u8 __force *)a);
 65}
 66
 67__EXTERN_INLINE u16
 68IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
 69{
 70	return __kernel_ldwu(*(const volatile u16 __force *)a);
 71}
 72
 73__EXTERN_INLINE void
 74IO_CONCAT(__IO_PREFIX,writeb)(u8 b, volatile void __iomem *a)
 75{
 76	__kernel_stb(b, *(volatile u8 __force *)a);
 77}
 78
 79__EXTERN_INLINE void
 80IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
 81{
 82	__kernel_stw(b, *(volatile u16 __force *)a);
 83}
 84#elif IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 2
 85__EXTERN_INLINE u8
 86IO_CONCAT(__IO_PREFIX,readb)(const volatile void __iomem *a)
 87{
 88	const void __iomem *addr = (const void __iomem *)a;
 89	return IO_CONCAT(__IO_PREFIX,ioread8)(addr);
 90}
 91
 92__EXTERN_INLINE u16
 93IO_CONCAT(__IO_PREFIX,readw)(const volatile void __iomem *a)
 94{
 95	const void __iomem *addr = (const void __iomem *)a;
 96	return IO_CONCAT(__IO_PREFIX,ioread16)(addr);
 97}
 98
 99__EXTERN_INLINE void
100IO_CONCAT(__IO_PREFIX,writeb)(u8 b, volatile void __iomem *a)
101{
102	void __iomem *addr = (void __iomem *)a;
103	IO_CONCAT(__IO_PREFIX,iowrite8)(b, addr);
104}
105
106__EXTERN_INLINE void
107IO_CONCAT(__IO_PREFIX,writew)(u16 b, volatile void __iomem *a)
108{
109	void __iomem *addr = (void __iomem *)a;
110	IO_CONCAT(__IO_PREFIX,iowrite16)(b, addr);
111}
112#endif
113
114#if IO_CONCAT(__IO_PREFIX,trivial_rw_lq) == 1
115__EXTERN_INLINE u32
116IO_CONCAT(__IO_PREFIX,readl)(const volatile void __iomem *a)
117{
118	return *(const volatile u32 __force *)a;
119}
120
121__EXTERN_INLINE u64
122IO_CONCAT(__IO_PREFIX,readq)(const volatile void __iomem *a)
123{
124	return *(const volatile u64 __force *)a;
125}
126
127__EXTERN_INLINE void
128IO_CONCAT(__IO_PREFIX,writel)(u32 b, volatile void __iomem *a)
129{
130	*(volatile u32 __force *)a = b;
131}
132
133__EXTERN_INLINE void
134IO_CONCAT(__IO_PREFIX,writeq)(u64 b, volatile void __iomem *a)
135{
136	*(volatile u64 __force *)a = b;
137}
138#endif
139
140#if IO_CONCAT(__IO_PREFIX,trivial_iounmap)
141__EXTERN_INLINE void IO_CONCAT(__IO_PREFIX,iounmap)(volatile void __iomem *a)
142{
143}
144#endif
~/ Read-only file preview.