summaryrefslogtreecommitdiff
path: root/sys/src/9/zynq/main.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2019-07-17 10:24:50 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2019-07-17 10:24:50 +0200
commit19a883ce7a8b0d1f57a1df68947af2bfa7ea5576 (patch)
tree2fa24248e0399ffb1a1b49ae3b9400d542cf118b /sys/src/9/zynq/main.c
parenta4688b03228dfdebcde34570b2a7b5c79db31c79 (diff)
usbehci: introduce dmaflush() function to handle portable cache invalidation for device drivers
Diffstat (limited to 'sys/src/9/zynq/main.c')
-rw-r--r--sys/src/9/zynq/main.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/src/9/zynq/main.c b/sys/src/9/zynq/main.c
index 443cbabe6..042c06e45 100644
--- a/sys/src/9/zynq/main.c
+++ b/sys/src/9/zynq/main.c
@@ -133,6 +133,25 @@ inval2pa(uintptr start, uintptr end)
l2[0x770/4] = pa;
}
+void
+dmaflush(int clean, void *data, ulong len)
+{
+ uintptr va, pa;
+
+ va = (uintptr)data & ~31;
+ pa = PADDR(va);
+ len = ROUND(len, 32);
+ if(clean){
+ /* flush cache before write */
+ cleandse((uchar*)va, (uchar*)va+len);
+ clean2pa(pa, pa+len);
+ } else {
+ /* invalidate cache before read */
+ invaldse((uchar*)va, (uchar*)va+len);
+ inval2pa(pa, pa+len);
+ }
+}
+
static void
options(void)
{