diff options
author | Marcel Moolenaar <marcel@FreeBSD.org> | 2015-06-08 22:01:34 +0000 |
---|---|---|
committer | Marcel Moolenaar <marcel@FreeBSD.org> | 2015-06-08 22:01:34 +0000 |
commit | cbb052dd3ea3ddab7065546c6fbd1526862e9e08 (patch) | |
tree | b42070f2fbff23f88db3cd2194e9b56394e817f4 | |
parent | cff0f135c1ac66241b8d78fb739fa37659ff96da (diff) | |
download | src-cbb052dd3ea3ddab7065546c6fbd1526862e9e08.tar.gz src-cbb052dd3ea3ddab7065546c6fbd1526862e9e08.zip |
Map the allocated DMA memory into the address space.
Notes
Notes:
svn path=/head/; revision=284169
-rw-r--r-- | tools/bus_space/busdma.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/tools/bus_space/busdma.c b/tools/bus_space/busdma.c index 2b1b7ff48628..4c6e37cca536 100644 --- a/tools/bus_space/busdma.c +++ b/tools/bus_space/busdma.c @@ -61,7 +61,9 @@ struct obj { unsigned long datarate; } tag; struct { - } md; + unsigned long physaddr; + void *virtaddr; + } mem; } u; }; @@ -260,6 +262,10 @@ bd_mem_alloc(int tid, u_int flags) md->parent = tag; tag->refcnt++; md->key = ioc.result; + md->u.mem.physaddr = ioc.u.mem.physaddr; + md->u.mem.virtaddr = mmap(NULL, tag->u.tag.maxsz, + PROT_READ | PROT_WRITE, MAP_NOCORE | MAP_SHARED, md->fd, + md->u.mem.physaddr); return (md->oid); } @@ -273,6 +279,8 @@ bd_mem_free(int mdid) if (md == NULL) return (errno); + if (md->u.mem.virtaddr != MAP_FAILED) + munmap(md->u.mem.virtaddr, md->parent->u.tag.maxsz); memset(&ioc, 0, sizeof(ioc)); ioc.request = PROTO_IOC_BUSDMA_MEM_FREE; ioc.key = md->key; |