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

TOMOYO Linux Cross Reference
Linux/include/linux/io-64-nonatomic-hi-lo.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 #ifndef _LINUX_IO_64_NONATOMIC_HI_LO_H_
  3 #define _LINUX_IO_64_NONATOMIC_HI_LO_H_
  4 
  5 #include <linux/io.h>
  6 #include <asm-generic/int-ll64.h>
  7 
  8 static inline __u64 hi_lo_readq(const volatile void __iomem *addr)
  9 {
 10         const volatile u32 __iomem *p = addr;
 11         u32 low, high;
 12 
 13         high = readl(p + 1);
 14         low = readl(p);
 15 
 16         return low + ((u64)high << 32);
 17 }
 18 
 19 static inline void hi_lo_writeq(__u64 val, volatile void __iomem *addr)
 20 {
 21         writel(val >> 32, addr + 4);
 22         writel(val, addr);
 23 }
 24 
 25 static inline __u64 hi_lo_readq_relaxed(const volatile void __iomem *addr)
 26 {
 27         const volatile u32 __iomem *p = addr;
 28         u32 low, high;
 29 
 30         high = readl_relaxed(p + 1);
 31         low = readl_relaxed(p);
 32 
 33         return low + ((u64)high << 32);
 34 }
 35 
 36 static inline void hi_lo_writeq_relaxed(__u64 val, volatile void __iomem *addr)
 37 {
 38         writel_relaxed(val >> 32, addr + 4);
 39         writel_relaxed(val, addr);
 40 }
 41 
 42 #ifndef readq
 43 #define readq hi_lo_readq
 44 #endif
 45 
 46 #ifndef writeq
 47 #define writeq hi_lo_writeq
 48 #endif
 49 
 50 #ifndef readq_relaxed
 51 #define readq_relaxed hi_lo_readq_relaxed
 52 #endif
 53 
 54 #ifndef writeq_relaxed
 55 #define writeq_relaxed hi_lo_writeq_relaxed
 56 #endif
 57 
 58 #ifndef ioread64_hi_lo
 59 #define ioread64_hi_lo ioread64_hi_lo
 60 static inline u64 ioread64_hi_lo(const void __iomem *addr)
 61 {
 62         u32 low, high;
 63 
 64         high = ioread32(addr + sizeof(u32));
 65         low = ioread32(addr);
 66 
 67         return low + ((u64)high << 32);
 68 }
 69 #endif
 70 
 71 #ifndef iowrite64_hi_lo
 72 #define iowrite64_hi_lo iowrite64_hi_lo
 73 static inline void iowrite64_hi_lo(u64 val, void __iomem *addr)
 74 {
 75         iowrite32(val >> 32, addr + sizeof(u32));
 76         iowrite32(val, addr);
 77 }
 78 #endif
 79 
 80 #ifndef ioread64be_hi_lo
 81 #define ioread64be_hi_lo ioread64be_hi_lo
 82 static inline u64 ioread64be_hi_lo(const void __iomem *addr)
 83 {
 84         u32 low, high;
 85 
 86         high = ioread32be(addr);
 87         low = ioread32be(addr + sizeof(u32));
 88 
 89         return low + ((u64)high << 32);
 90 }
 91 #endif
 92 
 93 #ifndef iowrite64be_hi_lo
 94 #define iowrite64be_hi_lo iowrite64be_hi_lo
 95 static inline void iowrite64be_hi_lo(u64 val, void __iomem *addr)
 96 {
 97         iowrite32be(val >> 32, addr);
 98         iowrite32be(val, addr + sizeof(u32));
 99 }
100 #endif
101 
102 #ifndef ioread64
103 #define ioread64_is_nonatomic
104 #define ioread64 ioread64_hi_lo
105 #endif
106 
107 #ifndef iowrite64
108 #define iowrite64_is_nonatomic
109 #define iowrite64 iowrite64_hi_lo
110 #endif
111 
112 #ifndef ioread64be
113 #define ioread64be_is_nonatomic
114 #define ioread64be ioread64be_hi_lo
115 #endif
116 
117 #ifndef iowrite64be
118 #define iowrite64be_is_nonatomic
119 #define iowrite64be iowrite64be_hi_lo
120 #endif
121 
122 #endif  /* _LINUX_IO_64_NONATOMIC_HI_LO_H_ */
123 

~ [ 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