diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-02-13 20:31:47 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-02-13 20:31:47 +0100 |
commit | 13e7822149d6f7653dabba6b4e4a1f122d3dae6f (patch) | |
tree | a6ec37c8ac424335dc5ac6b8ab40090f10166c7c /include | |
parent | d0b1d3f33d0efde02ee85f2d00711dd068abe95d (diff) | |
parent | f7aad7be4194293e961d2a70c34f53bf1f3d58bd (diff) | |
download | barebox-13e7822149d6f7653dabba6b4e4a1f122d3dae6f.tar.gz barebox-13e7822149d6f7653dabba6b4e4a1f122d3dae6f.tar.xz |
Merge branch 'for-next/e1000'
Diffstat (limited to 'include')
-rw-r--r-- | include/io-64-nonatomic-hi-lo.h | 32 | ||||
-rw-r--r-- | include/io-64-nonatomic-lo-hi.h | 32 |
2 files changed, 64 insertions, 0 deletions
diff --git a/include/io-64-nonatomic-hi-lo.h b/include/io-64-nonatomic-hi-lo.h new file mode 100644 index 0000000000..3393e6317e --- /dev/null +++ b/include/io-64-nonatomic-hi-lo.h @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_IO_64_NONATOMIC_HI_LO_H_ +#define _LINUX_IO_64_NONATOMIC_HI_LO_H_ + +#include <io.h> + +static inline __u64 hi_lo_readq(const volatile void __iomem *addr) +{ + const volatile u32 __iomem *p = addr; + u32 low, high; + + high = readl(p + 1); + low = readl(p); + + return low + ((u64)high << 32); +} + +static inline void hi_lo_writeq(__u64 val, volatile void __iomem *addr) +{ + writel(val >> 32, addr + 4); + writel(val, addr); +} + +#ifndef readq +#define readq hi_lo_readq +#endif + +#ifndef writeq +#define writeq hi_lo_writeq +#endif + +#endif /* _LINUX_IO_64_NONATOMIC_HI_LO_H_ */ diff --git a/include/io-64-nonatomic-lo-hi.h b/include/io-64-nonatomic-lo-hi.h new file mode 100644 index 0000000000..62b4022794 --- /dev/null +++ b/include/io-64-nonatomic-lo-hi.h @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_IO_64_NONATOMIC_LO_HI_H_ +#define _LINUX_IO_64_NONATOMIC_LO_HI_H_ + +#include <io.h> + +static inline __u64 lo_hi_readq(const volatile void __iomem *addr) +{ + const volatile u32 __iomem *p = addr; + u32 low, high; + + low = readl(p); + high = readl(p + 1); + + return low + ((u64)high << 32); +} + +static inline void lo_hi_writeq(__u64 val, volatile void __iomem *addr) +{ + writel(val, addr); + writel(val >> 32, addr + 4); +} + +#ifndef readq +#define readq lo_hi_readq +#endif + +#ifndef writeq +#define writeq lo_hi_writeq +#endif + +#endif /* _LINUX_IO_64_NONATOMIC_LO_HI_H_ */ |