[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 <brice@myri.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
34641a58a2
commit
22ae813b85
2 changed files with 29 additions and 0 deletions
|
@ -21,5 +21,6 @@
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
void __iowrite32_copy(void __iomem *to, const void *from, size_t count);
|
void __iowrite32_copy(void __iomem *to, const void *from, size_t count);
|
||||||
|
void __iowrite64_copy(void __iomem *to, const void *from, size_t count);
|
||||||
|
|
||||||
#endif /* _LINUX_IO_H */
|
#endif /* _LINUX_IO_H */
|
||||||
|
|
|
@ -40,3 +40,31 @@ void __attribute__((weak)) __iowrite32_copy(void __iomem *to,
|
||||||
__raw_writel(*src++, dst++);
|
__raw_writel(*src++, dst++);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__iowrite32_copy);
|
EXPORT_SYMBOL_GPL(__iowrite32_copy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __iowrite64_copy - copy data to MMIO space, in 64-bit or 32-bit units
|
||||||
|
* @to: destination, in MMIO space (must be 64-bit aligned)
|
||||||
|
* @from: source (must be 64-bit aligned)
|
||||||
|
* @count: number of 64-bit quantities to copy
|
||||||
|
*
|
||||||
|
* Copy data from kernel space to MMIO space, in units of 32 or 64 bits at a
|
||||||
|
* time. Order of access is not guaranteed, nor is a memory barrier
|
||||||
|
* performed afterwards.
|
||||||
|
*/
|
||||||
|
void __attribute__((weak)) __iowrite64_copy(void __iomem *to,
|
||||||
|
const void *from,
|
||||||
|
size_t count)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
u64 __iomem *dst = to;
|
||||||
|
const u64 *src = from;
|
||||||
|
const u64 *end = src + count;
|
||||||
|
|
||||||
|
while (src < end)
|
||||||
|
__raw_writeq(*src++, dst++);
|
||||||
|
#else
|
||||||
|
__iowrite32_copy(to, from, count * 2);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL_GPL(__iowrite64_copy);
|
||||||
|
|
Loading…
Reference in a new issue