diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-07-17 10:24:50 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-07-17 10:24:50 +0200 |
commit | 19a883ce7a8b0d1f57a1df68947af2bfa7ea5576 (patch) | |
tree | 2fa24248e0399ffb1a1b49ae3b9400d542cf118b /sys/src/9/zynq/main.c | |
parent | a4688b03228dfdebcde34570b2a7b5c79db31c79 (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.c | 19 |
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) { |