Module Name:    src
Committed By:   pooka
Date:           Wed Jun  3 13:55:42 UTC 2015

Modified Files:
        src/sys/rump/dev/lib/libpci: pci_user.h rumpdev_bus_dma.c
        src/sys/rump/include/sys: bus.h

Log Message:
implement bus_dmamem_free()

from Robert Millan <r...@freebsd.org> via rumpkernel-users


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/rump/dev/lib/libpci/pci_user.h \
    src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/include/sys/bus.h

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

Modified files:

Index: src/sys/rump/dev/lib/libpci/pci_user.h
diff -u src/sys/rump/dev/lib/libpci/pci_user.h:1.3 src/sys/rump/dev/lib/libpci/pci_user.h:1.4
--- src/sys/rump/dev/lib/libpci/pci_user.h:1.3	Wed Jun  3 13:43:23 2015
+++ src/sys/rump/dev/lib/libpci/pci_user.h	Wed Jun  3 13:55:42 2015
@@ -9,6 +9,9 @@ void *rumpcomp_pci_irq_establish(unsigne
 
 /* XXX: needs work: support boundary-restricted allocations */
 int rumpcomp_pci_dmalloc(size_t, size_t, unsigned long *, unsigned long *);
+#ifdef rumpcomp_pci_free
+void rumpcomp_pci_free(unsigned long, size_t);
+#endif
 
 struct rumpcomp_pci_dmaseg {
 	unsigned long ds_pa;
Index: src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c
diff -u src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c:1.3 src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c:1.4
--- src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c:1.3	Mon Apr 14 21:43:00 2014
+++ src/sys/rump/dev/lib/libpci/rumpdev_bus_dma.c	Wed Jun  3 13:55:42 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpdev_bus_dma.c,v 1.3 2014/04/14 21:43:00 pooka Exp $	*/
+/*	$NetBSD: rumpdev_bus_dma.c,v 1.4 2015/06/03 13:55:42 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2013 Antti Kantee
@@ -446,8 +446,14 @@ bus_dmamap_sync(bus_dma_tag_t t, bus_dma
 void
 bus_dmamem_free(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs)
 {
+#ifdef rumpcomp_pci_free
+	vaddr_t vacookie = segs[0]._ds_vacookie;
+	bus_size_t sizecookie = segs[0]._ds_sizecookie;
 
+	rumpcomp_pci_free(vacookie, sizecookie);
+#else
 	panic("bus_dmamem_free not implemented");
+#endif
 }
 
 /*
@@ -509,11 +515,14 @@ bus_dmamem_alloc(bus_dma_tag_t t, bus_si
 {
 	paddr_t curaddr, lastaddr, pa;
 	vaddr_t vacookie;
+	size_t sizecookie;
 	int curseg, error;
 
 	/* Always round the size. */
 	size = round_page(size);
 
+	sizecookie = size;
+
 	/*
 	 * Allocate pages from the VM system.
 	 */
@@ -536,6 +545,7 @@ bus_dmamem_alloc(bus_dma_tag_t t, bus_si
 	lastaddr = segs[curseg].ds_addr = pa;
 	segs[curseg].ds_len = PAGE_SIZE;
 	segs[curseg]._ds_vacookie = vacookie;
+	segs[curseg]._ds_sizecookie = sizecookie;
 	size -= PAGE_SIZE;
 	pa += PAGE_SIZE;
 	vacookie += PAGE_SIZE;
@@ -553,6 +563,7 @@ bus_dmamem_alloc(bus_dma_tag_t t, bus_si
 			segs[curseg].ds_addr = curaddr;
 			segs[curseg].ds_len = PAGE_SIZE;
 			segs[curseg]._ds_vacookie = vacookie;
+			segs[curseg]._ds_sizecookie = sizecookie;
 		}
 		lastaddr = curaddr;
 	}

Index: src/sys/rump/include/sys/bus.h
diff -u src/sys/rump/include/sys/bus.h:1.5 src/sys/rump/include/sys/bus.h:1.6
--- src/sys/rump/include/sys/bus.h:1.5	Mon Apr 14 21:31:00 2014
+++ src/sys/rump/include/sys/bus.h	Wed Jun  3 13:55:42 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus.h,v 1.5 2014/04/14 21:31:00 pooka Exp $	*/
+/*	$NetBSD: bus.h,v 1.6 2015/06/03 13:55:42 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -48,6 +48,7 @@ typedef struct {
 	bus_addr_t	ds_addr;
 	bus_size_t	ds_len;
 	vaddr_t		_ds_vacookie;
+	bus_size_t	_ds_sizecookie;
 } bus_dma_segment_t;
 
 typedef struct {

Reply via email to