Messages in this thread Patch in this message | | | Date | Tue, 02 May 2006 22:27:57 +0200 | From | Brice Goglin <> | Subject | [PATCH] add __iowrite64_copy |
| |
Hi Andrew,
The following patch introduces __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>
include/linux/io.h | 1 + lib/iomap_copy.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+)
--- linux-mm/include/linux/io.h.old 2006-03-24 14:14:46.000000000 -0500 +++ linux-mm/include/linux/io.h 2006-04-27 17:17:48.294803301 -0400 @@ -21,5 +21,6 @@ #include <asm/io.h> 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 */ --- linux-mm/lib/iomap_copy.c.old 2006-03-24 14:14:49.000000000 -0500 +++ linux-mm/lib/iomap_copy.c 2006-04-27 17:27:55.339971819 -0400 @@ -40,3 +40,31 @@ __raw_writel(*src++, dst++); } 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);
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |