diff --git a/repos/dde_linux/src/include/lx_kit/memory.h b/repos/dde_linux/src/include/lx_kit/memory.h index 20dbab7104..4745a586a3 100644 --- a/repos/dde_linux/src/include/lx_kit/memory.h +++ b/repos/dde_linux/src/include/lx_kit/memory.h @@ -105,6 +105,7 @@ class Lx_kit::Mem_allocator Cache cache_attr); Attached_dataspace & alloc_dataspace(size_t size); + Dataspace_capability attached_dataspace_cap(void *addr); void * alloc(size_t size, size_t align); addr_t dma_addr(void * addr); diff --git a/repos/dde_linux/src/lib/lx_kit/memory.cc b/repos/dde_linux/src/lib/lx_kit/memory.cc index 85a8f3fd95..847b55ad8b 100644 --- a/repos/dde_linux/src/lib/lx_kit/memory.cc +++ b/repos/dde_linux/src/lib/lx_kit/memory.cc @@ -49,6 +49,19 @@ Genode::Attached_dataspace & Lx_kit::Mem_allocator::alloc_dataspace(size_t size) } +Genode::Dataspace_capability Lx_kit::Mem_allocator::attached_dataspace_cap(void * addr) +{ + Genode::Dataspace_capability ret { }; + + _virt_to_dma.apply(Buffer_info::Query_addr(addr), + [&] (Buffer_info const & info) { + ret = info.buffer.ds().cap(); + }); + + return ret; +} + + void * Lx_kit::Mem_allocator::alloc(size_t size, size_t align) { if (!size)