summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormiod <miod@openbsd.org>2003-12-22 20:10:23 +0000
committermiod <miod@openbsd.org>2003-12-22 20:10:23 +0000
commit7d35fa23bd5850afb2e3c6fef1d961dc77bc88ef (patch)
tree8222e3f0327940a9fa80b1ea2353cfc644a71041
parenttypos from Jared Yanovich; (diff)
downloadwireguard-openbsd-7d35fa23bd5850afb2e3c6fef1d961dc77bc88ef.tar.xz
wireguard-openbsd-7d35fa23bd5850afb2e3c6fef1d961dc77bc88ef.zip
Get rid of kvtop() usage in dma_cachectl().
-rw-r--r--sys/arch/mvme88k/mvme88k/m88110.c16
-rw-r--r--sys/arch/mvme88k/mvme88k/m8820x.c46
2 files changed, 39 insertions, 23 deletions
diff --git a/sys/arch/mvme88k/mvme88k/m88110.c b/sys/arch/mvme88k/mvme88k/m88110.c
index 354642502e7..c3f2943a77e 100644
--- a/sys/arch/mvme88k/mvme88k/m88110.c
+++ b/sys/arch/mvme88k/mvme88k/m88110.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: m88110.c,v 1.11 2003/12/19 22:30:18 miod Exp $ */
+/* $OpenBSD: m88110.c,v 1.12 2003/12/22 20:10:23 miod Exp $ */
/*
* Copyright (c) 1998 Steve Murphree, Jr.
* All rights reserved.
@@ -61,6 +61,7 @@
#include <sys/types.h>
#include <sys/systm.h>
#include <sys/simplelock.h>
+
#include <machine/board.h>
#include <machine/cpu_number.h>
#include <machine/cmmu.h>
@@ -69,6 +70,8 @@
#include <machine/locore.h>
#include <machine/trap.h>
+#include <uvm/uvm_extern.h>
+
#ifdef DEBUG
#define DB_CMMU 0x4000 /* MMU debug */
unsigned int debuglevel = 0;
@@ -578,15 +581,20 @@ m88110_cmmu_inval_cache(paddr_t physaddr, psize_t size)
void
m88110_dma_cachectl(vaddr_t va, vsize_t size, int op)
{
+ paddr_t pa;
+
+ if (pmap_extract(pmap_kernel(), va, &pa) == FALSE)
+ return; /* XXX */
+
switch (op) {
case DMA_CACHE_SYNC:
- m88110_cmmu_sync_cache(kvtop(va), size);
+ m88110_cmmu_sync_cache(pa, size);
break;
case DMA_CACHE_SYNC_INVAL:
- m88110_cmmu_sync_inval_cache(kvtop(va), size);
+ m88110_cmmu_sync_inval_cache(pa, size);
break;
default:
- m88110_cmmu_inval_cache(kvtop(va), size);
+ m88110_cmmu_inval_cache(pa, size);
break;
}
}
diff --git a/sys/arch/mvme88k/mvme88k/m8820x.c b/sys/arch/mvme88k/mvme88k/m8820x.c
index e31262b5cb5..d52ee067428 100644
--- a/sys/arch/mvme88k/mvme88k/m8820x.c
+++ b/sys/arch/mvme88k/mvme88k/m8820x.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: m8820x.c,v 1.24 2003/12/19 22:30:18 miod Exp $ */
+/* $OpenBSD: m8820x.c,v 1.25 2003/12/22 20:10:23 miod Exp $ */
/*
* Copyright (c) 2001 Steve Murphree, Jr.
* Copyright (c) 1996 Nivas Madhur
@@ -71,6 +71,8 @@
#include <machine/cmmu.h>
#include <machine/m8820x.h>
+#include <uvm/uvm_extern.h>
+
#ifdef DDB
#include <ddb/db_output.h> /* db_printf() */
#endif /* DDB */
@@ -1475,6 +1477,7 @@ m8820x_cmmu_inval_cache(paddr_t physaddr, psize_t size)
void
m8820x_dma_cachectl(vaddr_t va, vsize_t size, int op)
{
+ paddr_t pa;
#if !defined(BROKEN_MMU_MASK)
psize_t count;
@@ -1484,32 +1487,37 @@ m8820x_dma_cachectl(vaddr_t va, vsize_t size, int op)
if (size < count)
count = size;
+ if (pmap_extract(pmap_kernel(), va, &pa) != FALSE) {
+ switch (op) {
+ case DMA_CACHE_SYNC:
+ m8820x_cmmu_sync_cache(pa, count);
+ break;
+ case DMA_CACHE_SYNC_INVAL:
+ m8820x_cmmu_sync_inval_cache(pa, count);
+ break;
+ default:
+ m8820x_cmmu_inval_cache(pa, count);
+ break;
+ }
+ }
+
+ va += count;
+ size -= count;
+ }
+#else
+ /* XXX This assumes the space is also physically contiguous */
+ if (pmap_extract(pmap_kernel(), va, &pa) != FALSE) {
switch (op) {
case DMA_CACHE_SYNC:
- m8820x_cmmu_sync_cache(kvtop(va), count);
+ m8820x_cmmu_sync_cache(pa, size);
break;
case DMA_CACHE_SYNC_INVAL:
- m8820x_cmmu_sync_inval_cache(kvtop(va), count);
+ m8820x_cmmu_sync_inval_cache(pa, size);
break;
default:
- m8820x_cmmu_inval_cache(kvtop(va), count);
+ m8820x_cmmu_inval_cache(pa, size);
break;
}
-
- va += count;
- size -= count;
- }
-#else
- switch (op) {
- case DMA_CACHE_SYNC:
- m8820x_cmmu_sync_cache(kvtop(va), size);
- break;
- case DMA_CACHE_SYNC_INVAL:
- m8820x_cmmu_sync_inval_cache(kvtop(va), size);
- break;
- default:
- m8820x_cmmu_inval_cache(kvtop(va), size);
- break;
}
#endif /* !BROKEN_MMU_MASK */
}