~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/alpha/include/asm/io_trivial.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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
 10 IO_CONCAT(__IO_PREFIX,ioread8)(const void __iomem *a)
 11 {
 12         return __kernel_ldbu(*(const volatile u8 __force *)a);
 13 }
 14 
 15 __EXTERN_INLINE u16
 16 IO_CONCAT(__IO_PREFIX,ioread16)(const void __iomem *a)
 17 {
 18         return __kernel_ldwu(*(const volatile u16 __force *)a);
 19 }
 20 
 21 __EXTERN_INLINE void
 22 IO_CONCAT(__IO_PREFIX,iowrite8)(u8 b, void __iomem *a)
 23 {
 24         __kernel_stb(b, *(volatile u8 __force *)a);
 25 }
 26 
 27 __EXTERN_INLINE void
 28 IO_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
 36 IO_CONCAT(__IO_PREFIX,ioread32)(const void __iomem *a)
 37 {
 38         return *(const volatile u32 __force *)a;
 39 }
 40 
 41 __EXTERN_INLINE void
 42 IO_CONCAT(__IO_PREFIX,iowrite32)(u32 b, void __iomem *a)
 43 {
 44         *(volatile u32 __force *)a = b;
 45 }
 46 
 47 __EXTERN_INLINE u64
 48 IO_CONCAT(__IO_PREFIX,ioread64)(const void __iomem *a)
 49 {
 50         return *(const volatile u64 __force *)a;
 51 }
 52 
 53 __EXTERN_INLINE void
 54 IO_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
 62 IO_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
 68 IO_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
 74 IO_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
 80 IO_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
 86 IO_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
 93 IO_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
100 IO_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
107 IO_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
116 IO_CONCAT(__IO_PREFIX,readl)(const volatile void __iomem *a)
117 {
118         return *(const volatile u32 __force *)a;
119 }
120 
121 __EXTERN_INLINE u64
122 IO_CONCAT(__IO_PREFIX,readq)(const volatile void __iomem *a)
123 {
124         return *(const volatile u64 __force *)a;
125 }
126 
127 __EXTERN_INLINE void
128 IO_CONCAT(__IO_PREFIX,writel)(u32 b, volatile void __iomem *a)
129 {
130         *(volatile u32 __force *)a = b;
131 }
132 
133 __EXTERN_INLINE void
134 IO_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
145 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php