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 <[email protected]> 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 {