summaryrefslogtreecommitdiff
path: root/backport/compat/backport-4.5.c
diff options
context:
space:
mode:
Diffstat (limited to 'backport/compat/backport-4.5.c')
-rw-r--r--backport/compat/backport-4.5.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/backport/compat/backport-4.5.c b/backport/compat/backport-4.5.c
index 13764dc7..b4aae624 100644
--- a/backport/compat/backport-4.5.c
+++ b/backport/compat/backport-4.5.c
@@ -18,6 +18,7 @@
#include <linux/slab.h>
#include <linux/string.h>
#include <asm/uaccess.h>
+#include <linux/io.h>
#if LINUX_VERSION_IS_GEQ(3,19,0)
int led_set_brightness_sync(struct led_classdev *led_cdev,
@@ -150,3 +151,24 @@ int devm_led_trigger_register(struct device *dev,
return rc;
}
EXPORT_SYMBOL_GPL(devm_led_trigger_register);
+
+/**
+ * __ioread32_copy - copy data from MMIO space, in 32-bit units
+ * @to: destination (must be 32-bit aligned)
+ * @from: source, in MMIO space (must be 32-bit aligned)
+ * @count: number of 32-bit quantities to copy
+ *
+ * Copy data from MMIO space to kernel space, in units of 32 bits at a
+ * time. Order of access is not guaranteed, nor is a memory barrier
+ * performed afterwards.
+ */
+void __ioread32_copy(void *to, const void __iomem *from, size_t count)
+{
+ u32 *dst = to;
+ const u32 __iomem *src = from;
+ const u32 __iomem *end = src + count;
+
+ while (src < end)
+ *dst++ = __raw_readl(src++);
+}
+EXPORT_SYMBOL_GPL(__ioread32_copy);