Skip to content

Commit 22ae813

Browse files
Brice GoglinLinus Torvalds
authored andcommitted
[PATCH] add __iowrite64_copy
Introduce __iowrite64_copy. It will be used by the Myri-10G Ethernet driver to post requests to the NIC. This driver will be submitted soon. __iowrite64_copy copies to I/O memory in units of 64 bits when possible (on 64 bit architectures). It reverts to __iowrite32_copy on 32 bit architectures. Signed-off-by: Brice Goglin <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 34641a5 commit 22ae813

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

include/linux/io.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
#include <asm/io.h>
2222

2323
void __iowrite32_copy(void __iomem *to, const void *from, size_t count);
24+
void __iowrite64_copy(void __iomem *to, const void *from, size_t count);
2425

2526
#endif /* _LINUX_IO_H */

lib/iomap_copy.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,31 @@ void __attribute__((weak)) __iowrite32_copy(void __iomem *to,
4040
__raw_writel(*src++, dst++);
4141
}
4242
EXPORT_SYMBOL_GPL(__iowrite32_copy);
43+
44+
/**
45+
* __iowrite64_copy - copy data to MMIO space, in 64-bit or 32-bit units
46+
* @to: destination, in MMIO space (must be 64-bit aligned)
47+
* @from: source (must be 64-bit aligned)
48+
* @count: number of 64-bit quantities to copy
49+
*
50+
* Copy data from kernel space to MMIO space, in units of 32 or 64 bits at a
51+
* time. Order of access is not guaranteed, nor is a memory barrier
52+
* performed afterwards.
53+
*/
54+
void __attribute__((weak)) __iowrite64_copy(void __iomem *to,
55+
const void *from,
56+
size_t count)
57+
{
58+
#ifdef CONFIG_64BIT
59+
u64 __iomem *dst = to;
60+
const u64 *src = from;
61+
const u64 *end = src + count;
62+
63+
while (src < end)
64+
__raw_writeq(*src++, dst++);
65+
#else
66+
__iowrite32_copy(to, from, count * 2);
67+
#endif
68+
}
69+
70+
EXPORT_SYMBOL_GPL(__iowrite64_copy);

0 commit comments

Comments
 (0)