aboutsummaryrefslogtreecommitdiff
path: root/kernel-headers/sync_write.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel-headers/sync_write.h')
-rw-r--r--kernel-headers/sync_write.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/kernel-headers/sync_write.h b/kernel-headers/sync_write.h
new file mode 100644
index 0000000..e4c6e85
--- /dev/null
+++ b/kernel-headers/sync_write.h
@@ -0,0 +1,80 @@
+#ifndef __MT65XX_SYNC_WRITE_H__
+#define __MT65XX_SYNC_WRITE_H__
+
+#define mt_reg_sync_writel(v, a) mt65xx_reg_sync_writel(v, a)
+#define mt_reg_sync_writew(v, a) mt65xx_reg_sync_writew(v, a)
+#define mt_reg_sync_writeb(v, a) mt65xx_reg_sync_writeb(v, a)
+
+#if defined(__KERNEL__)
+
+#include <linux/io.h>
+#include <asm/cacheflush.h>
+#include <asm/system.h>
+
+/*
+ * Define macros.
+ */
+
+#define mt65xx_reg_sync_writel(v, a) \
+ do { \
+ writel((v), (a)); \
+ dsb(); \
+ } while (0)
+
+#define mt65xx_reg_sync_writew(v, a) \
+ do { \
+ writew((v), (a)); \
+ dsb(); \
+ } while (0)
+
+#define mt65xx_reg_sync_writeb(v, a) \
+ do { \
+ writeb((v), (a)); \
+ dsb(); \
+ } while (0)
+
+#else /* __KERNEL__ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+
+#define dsb() \
+ do { \
+ __asm__ __volatile__ ("dsb sy" : : : "memory"); \
+ } while (0)
+
+#define outer_sync() \
+ do { \
+ int fd; \
+ char buf[] = "1"; \
+ fd = open("/sys/bus/platform/drivers/outercache/outer_sync", O_WRONLY); \
+ if (fd != -1) { \
+ write(fd, buf, strlen(buf)); \
+ close(fd); \
+ } \
+ } while (0)
+
+#define mt65xx_reg_sync_writel(v, a) \
+ do { \
+ *(volatile unsigned int *)(a) = (v); \
+ dsb(); \
+ } while (0)
+
+#define mt65xx_reg_sync_writew(v, a) \
+ do { \
+ *(volatile unsigned short *)(a) = (v); \
+ dsb(); \
+ } while (0)
+
+#define mt65xx_reg_sync_writeb(v, a) \
+ do { \
+ *(volatile unsigned char *)(a) = (v); \
+ dsb(); \
+ } while (0)
+
+#endif /* __KERNEL__ */
+
+#endif /* !__MT65XX_SYNC_WRITE_H__ */