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 {