about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-11-04 17:06:31 -0500
committerRich Felker <dalias@aerifal.cx>2012-11-04 17:06:31 -0500
commitfc5f16d18222d197ebf182e50048aa384d84269d (patch)
treed66648871b1562c1eb91f388ad135a469c124511
parent2f2f115b58269468304d2f26d029eb470fb44b4a (diff)
downloadmusl-fc5f16d18222d197ebf182e50048aa384d84269d.tar.gz
musl-fc5f16d18222d197ebf182e50048aa384d84269d.tar.xz
musl-fc5f16d18222d197ebf182e50048aa384d84269d.zip
mips cache flush/ctl syscall support and header
-rw-r--r--include/sys/cachectl.h22
-rw-r--r--src/linux/cache.c18
2 files changed, 40 insertions, 0 deletions
diff --git a/include/sys/cachectl.h b/include/sys/cachectl.h
new file mode 100644
index 00000000..f3b896a8
--- /dev/null
+++ b/include/sys/cachectl.h
@@ -0,0 +1,22 @@
+#ifndef _SYS_CACHECTL_H
+#define _SYS_CACHECTL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ICACHE (1<<0)
+#define DCACHE (1<<1)
+#define BCACHE (ICACHE|DCACHE)
+#define CACHEABLE 0
+#define UNCACHEABLE 1
+ 
+int cachectl(void *, int, int);
+int cacheflush(void *, int, int);
+int _flush_cache(void *, int, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/linux/cache.c b/src/linux/cache.c
new file mode 100644
index 00000000..3f0abc7c
--- /dev/null
+++ b/src/linux/cache.c
@@ -0,0 +1,18 @@
+#include "syscall.h"
+#include "libc.h"
+
+#ifdef SYS_cacheflush
+int _flush_cache(void *addr, int len, int op)
+{
+	return syscall(SYS_cacheflush, addr, len, op);
+}
+weak_alias(_flush_cache, cacheflush);
+#endif
+
+#ifdef SYS_cachectl
+int __cachectl(void *addr, int len, int op)
+{
+	return syscall(SYS_cachectl, addr, len, op);
+}
+weak_alias(__cachectl, cachectl);
+#endif