diff --git a/base-codezero/include/base/ipc_pager.h b/base-codezero/include/base/ipc_pager.h index 75168ce757..3dfce218be 100644 --- a/base-codezero/include/base/ipc_pager.h +++ b/base-codezero/include/base/ipc_pager.h @@ -37,7 +37,8 @@ namespace Genode { * Constructor */ Mapping(addr_t dst_addr, addr_t src_addr, - bool write_combined, unsigned l2size = PAGE_SIZE_LOG2, + bool write_combined, bool io_mem, + unsigned l2size = PAGE_SIZE_LOG2, bool rw = true) : _from_phys_addr(src_addr), diff --git a/base-fiasco/include/base/ipc_pager.h b/base-fiasco/include/base/ipc_pager.h index 66b25c5313..05c9e3e81a 100644 --- a/base-fiasco/include/base/ipc_pager.h +++ b/base-fiasco/include/base/ipc_pager.h @@ -41,7 +41,8 @@ namespace Genode { * Constructor */ Mapping(addr_t dst_addr, addr_t src_addr, - bool write_combined, unsigned l2size = L4_LOG2_PAGESIZE, + bool write_combined, bool io_mem, + unsigned l2size = L4_LOG2_PAGESIZE, bool rw = true, bool grant = false) : _dst_addr(dst_addr), diff --git a/base-foc/include/base/ipc_pager.h b/base-foc/include/base/ipc_pager.h index 01be1a05bb..d482820a3d 100644 --- a/base-foc/include/base/ipc_pager.h +++ b/base-foc/include/base/ipc_pager.h @@ -46,7 +46,8 @@ namespace Genode { * Constructor */ Mapping(addr_t dst_addr, addr_t src_addr, - bool write_combined, unsigned l2size = L4_LOG2_PAGESIZE, + bool write_combined, bool io_mem, + unsigned l2size = L4_LOG2_PAGESIZE, bool rw = true, bool grant = false) : _dst_addr(dst_addr), _src_addr(src_addr), _write_combined(write_combined), _log2size(l2size), diff --git a/base-host/include/base/ipc_pager.h b/base-host/include/base/ipc_pager.h index cbfbca54a2..dcb952957d 100644 --- a/base-host/include/base/ipc_pager.h +++ b/base-host/include/base/ipc_pager.h @@ -28,7 +28,8 @@ namespace Genode { * Constructor */ Mapping(addr_t dst_addr, addr_t src_addr, - bool write_combined, unsigned l2size = 12, bool rw = true) { } + bool write_combined, bool io_mem, + unsigned l2size = 12, bool rw = true) { } /** * Construct invalid mapping diff --git a/base-hw/include/base/ipc_pager.h b/base-hw/include/base/ipc_pager.h index 40b8ab92a3..de5f64d95d 100644 --- a/base-hw/include/base/ipc_pager.h +++ b/base-hw/include/base/ipc_pager.h @@ -32,6 +32,7 @@ namespace Genode addr_t virt_address; addr_t phys_address; bool write_combined; + bool io_mem; unsigned size_log2; bool writable; @@ -39,10 +40,11 @@ namespace Genode * Construct valid mapping */ Mapping(addr_t const va, addr_t const pa, bool const wc, - unsigned const sl2 = MIN_MAPPING_SIZE_LOG2, bool w = 1) + bool io, unsigned const sl2 = MIN_MAPPING_SIZE_LOG2, + bool const w = 1) : virt_address(va), phys_address(pa), write_combined(wc), - size_log2(sl2), writable(w) + io_mem(io), size_log2(sl2), writable(w) { } /** diff --git a/base-mb/include/base/ipc_pager.h b/base-mb/include/base/ipc_pager.h index 357824db1c..b7cbb2e53f 100755 --- a/base-mb/include/base/ipc_pager.h +++ b/base-mb/include/base/ipc_pager.h @@ -81,7 +81,7 @@ namespace Genode { Resolution(addr_t virtual_page_address, addr_t physical_page_address, - bool write_combined, + bool write_combined, bool io_mem, unsigned size_log2 = DEFAULT_SIZE_LOG2, bool writeable = DEFAULT_WRITEABLE) : _valid(true) diff --git a/base-nova/include/base/ipc_pager.h b/base-nova/include/base/ipc_pager.h index 3b6f5b5e92..cb338bf0fa 100644 --- a/base-nova/include/base/ipc_pager.h +++ b/base-nova/include/base/ipc_pager.h @@ -43,7 +43,8 @@ namespace Genode { * Constructor */ Mapping(addr_t dst_addr, addr_t map_addr, - bool write_combined, unsigned size_log2 = PAGE_SIZE_LOG2, + bool write_combined, bool io_mem, + unsigned size_log2 = PAGE_SIZE_LOG2, bool rw = true) : _dst_addr(dst_addr), _core_local_addr(map_addr), diff --git a/base-okl4/include/base/ipc_pager.h b/base-okl4/include/base/ipc_pager.h index 8316b53ee1..0a68e82d83 100644 --- a/base-okl4/include/base/ipc_pager.h +++ b/base-okl4/include/base/ipc_pager.h @@ -40,7 +40,8 @@ namespace Genode { * Constructor */ Mapping(addr_t dst_addr, addr_t src_addr, - bool write_combined, unsigned l2size = 12, bool rw = true); + bool write_combined, bool io_mem, + unsigned l2size = 12, bool rw = true); /** * Construct invalid mapping diff --git a/base-okl4/src/base/ipc/pager.cc b/base-okl4/src/base/ipc/pager.cc index f78d2ba3f3..40baa64fed 100644 --- a/base-okl4/src/base/ipc/pager.cc +++ b/base-okl4/src/base/ipc/pager.cc @@ -62,7 +62,8 @@ static inline Okl4::L4_ThreadId_t thread_get_my_global_id() *************/ Mapping::Mapping(addr_t dst_addr, addr_t src_addr, - bool write_combined, unsigned l2size, bool rw) + bool write_combined, bool io_mem, + unsigned l2size, bool rw) : _fpage(L4_FpageLog2(dst_addr, l2size)), /* diff --git a/base-pistachio/include/base/ipc_pager.h b/base-pistachio/include/base/ipc_pager.h index 408c2db57d..71ac0cf0ed 100644 --- a/base-pistachio/include/base/ipc_pager.h +++ b/base-pistachio/include/base/ipc_pager.h @@ -50,7 +50,7 @@ namespace Genode { * Constructor */ Mapping(addr_t dst_addr, addr_t src_addr, - bool write_combined, + bool write_combined, bool io_mem, unsigned l2size = Pistachio::get_page_size_log2(), bool rw = true, bool grant = false); diff --git a/base-pistachio/src/base/ipc/pager.cc b/base-pistachio/src/base/ipc/pager.cc index 132baaae0a..6483da71fc 100644 --- a/base-pistachio/src/base/ipc/pager.cc +++ b/base-pistachio/src/base/ipc/pager.cc @@ -32,7 +32,8 @@ using namespace Pistachio; *************/ Mapping::Mapping(addr_t dst_addr, addr_t src_addr, - bool write_combined, unsigned l2size, bool rw, bool grant) + bool write_combined, bool io_mem, unsigned l2size, + bool rw, bool grant) : _write_combined(write_combined) { diff --git a/base/src/core/rm_session_component.cc b/base/src/core/rm_session_component.cc index d86c43ac66..88bf7d237b 100644 --- a/base/src/core/rm_session_component.cc +++ b/base/src/core/rm_session_component.cc @@ -256,6 +256,7 @@ int Rm_client::pager(Ipc_pager &pager) Mapping mapping(dst_fault_area.base(), src_fault_area.base(), src_dataspace->write_combined(), + src_dataspace->is_io_mem(), map_size_log2, src_dataspace->writable());