Module Name:    src
Committed By:   thorpej
Date:           Wed Jun 17 06:20:05 UTC 2020

Modified Files:
        src/sys/arch/arc/jazz: jazzdmatlb.c

Log Message:
Use a vmem arena rather than an extent map to manage Jazz DMA TLB
address space.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arc/jazz/jazzdmatlb.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arc/jazz/jazzdmatlb.c
diff -u src/sys/arch/arc/jazz/jazzdmatlb.c:1.16 src/sys/arch/arc/jazz/jazzdmatlb.c:1.17
--- src/sys/arch/arc/jazz/jazzdmatlb.c:1.16	Fri Jan 27 18:52:50 2012
+++ src/sys/arch/arc/jazz/jazzdmatlb.c	Wed Jun 17 06:20:05 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: jazzdmatlb.c,v 1.16 2012/01/27 18:52:50 para Exp $	*/
+/*	$NetBSD: jazzdmatlb.c,v 1.17 2020/06/17 06:20:05 thorpej Exp $	*/
 /*	$OpenBSD: dma.c,v 1.5 1998/03/01 16:49:57 niklas Exp $	*/
 
 /*-
@@ -33,14 +33,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: jazzdmatlb.c,v 1.16 2012/01/27 18:52:50 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: jazzdmatlb.c,v 1.17 2020/06/17 06:20:05 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/malloc.h>
-#include <sys/extent.h>
 #include <sys/device.h>
 #include <sys/proc.h>
+#include <sys/vmem.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -54,17 +54,12 @@ __KERNEL_RCSID(0, "$NetBSD: jazzdmatlb.c
 
 extern paddr_t	kvtophys(vaddr_t);	/* XXX */
 
-/*
- * Currently, only NET and BIO devices use DMA, and splnet > splbio.
- */
-#define spldma()	splnet()
-
 #define NDMATLB		(JAZZ_DMATLB_SIZE / sizeof(jazz_dma_pte_t))
 
 static bus_space_tag_t dmatlb_iot;
 static bus_space_handle_t dmatlb_ioh;
 
-static struct extent *dmatlbmap;
+static vmem_t *dmatlb_arena;
 static jazz_dma_pte_t *dma_tlb;
 
 /*
@@ -85,9 +80,15 @@ jazz_dmatlb_init(bus_space_tag_t iot, bu
 	mips_dcache_wbinv_all();/* Make sure no map entries are cached */
 	memset((char *)dma_tlb, 0, JAZZ_DMATLB_SIZE);
 
-	dmatlbmap = extent_create("dmatlb", 0, NDMATLB, NULL, 0, EX_NOWAIT);
-	if (dmatlbmap == NULL)
-		panic("jazz_dmatlb_init: cannot create extent map");
+	dmatlb_arena = vmem_create("dmatlb", 0, NDMATLB,
+				   1,		/* quantum */
+				   NULL,	/* importfn */
+				   NULL,	/* releasefn */
+				   NULL,	/* source */
+				   0,		/* qcache_max */
+				   VM_SLEEP,
+				   IPL_VM);
+	KASSERT(dmatlb_arena != NULL);
 
 	bus_space_write_4(dmatlb_iot, dmatlb_ioh, JAZZ_DMATLBREG_MAP,
 	    MIPS_KSEG1_TO_PHYS(dma_tlb));
@@ -103,16 +104,20 @@ jazz_dmatlb_init(bus_space_tag_t iot, bu
 jazz_dma_pte_t *
 jazz_dmatlb_alloc(int npte, bus_size_t boundary, int flags, bus_addr_t *addr)
 {
-	u_long start;
+	vmem_addr_t start;
 	int err;
-	int s;
 
-	s = spldma();
-	err = extent_alloc(dmatlbmap, npte, 1, boundary / JAZZ_DMA_PAGE_SIZE,
-	    (flags & BUS_DMA_WAITOK) ? (EX_WAITSPACE | EX_WAITOK) : EX_NOWAIT,
-	    &start);
-	splx(s);
+	const vm_flag_t vmflags = VM_INSTANTFIT |
+	    ((flags & BUS_DMA_WAITOK) ? VM_SLEEP : VM_NOSLEEP);
 
+	err = vmem_xalloc(dmatlb_arena, npte,
+			  1,			/* align */
+			  0,			/* phase */
+			  boundary / JAZZ_DMA_PAGE_SIZE,
+			  VMEM_ADDR_MIN,
+			  VMEM_ADDR_MAX,
+			  vmflags,
+			  &start);
 	if (err)
 		return NULL;
 
@@ -127,13 +132,10 @@ jazz_dmatlb_alloc(int npte, bus_size_t b
 void
 jazz_dmatlb_free(bus_addr_t addr, int npte)
 {
-	u_long start;
-	int s;
+	vmem_addr_t start;
 
 	start = addr / JAZZ_DMA_PAGE_SIZE;
-	s = spldma();
-	extent_free(dmatlbmap, start, npte, EX_NOWAIT);
-	splx(s);
+	vmem_xfree(dmatlb_arena, start, npte);
 }
 
 /*

Reply via email to