25#include <l4/sys/cxx/consts>
36Dataspace::__map(Dataspace::Offset offset,
unsigned char *size,
37 Dataspace::Flags flags,
38 Dataspace::Map_addr local_addr)
const noexcept
40 Map_addr spot = local_addr & ~(~0ULL <<
l4_umword_t(*size));
41 Map_addr base = local_addr & (~0ULL <<
l4_umword_t(*size));
43 r = L4::Ipc::Rcv_fpage::mem(base, *size, 0);
46 long err = map_t::call(c(), offset, spot, flags, r, fp,
l4_utcb());
50 *size = fp.rcv_order();
56 Dataspace::Map_addr min_addr,
57 Dataspace::Map_addr max_addr)
const noexcept
59 min_addr = L4::trunc_page(min_addr);
60 max_addr = L4::round_page(max_addr);
65 while (min_addr < max_addr)
67 unsigned char order_mapped;
69 = L4::max_order(order, min_addr, min_addr, max_addr, min_addr);
71 err = __map(offset, &order_mapped, flags, min_addr);
75 if (order > order_mapped)
78 min_addr += Map_addr(1) << order;
79 offset += Map_addr(1) << order;
81 if (min_addr >= max_addr)
95 Dataspace::Map_addr local_addr,
96 Dataspace::Map_addr min_addr,
97 Dataspace::Map_addr max_addr)
const noexcept
99 min_addr = L4::trunc_page(min_addr);
100 max_addr = L4::round_page(max_addr);
101 local_addr = L4::trunc_page(local_addr);
103 = L4::max_order(
L4_LOG2_PAGESIZE, local_addr, min_addr, max_addr, local_addr);
105 return __map(offset, &order, flags, local_addr);
112 int err =
info(&stats);
122 int err =
info(&stats);
long copy_in(Offset dst_offs, L4::Ipc::Cap< Dataspace > src, Offset src_offs, Size size)
Copy contents from another dataspace.
Size size() const noexcept
Get size of a dataspace.
Flags flags() const noexcept
Get flags of the dataspace.
long map_region(Offset offset, Flags flags, Map_addr min_addr, Map_addr max_addr) const noexcept
Map a part of a dataspace into a local memory area.
long info(Stats *stats)
Get information on the dataspace.
long clear(Offset offset, Size size)
Clear parts of a dataspace.
long map(Offset offset, Flags flags, Map_addr local_addr, Map_addr min_addr, Map_addr max_addr) const noexcept
Request a flex-page mapping from the dataspace.
long allocate(Offset offset, Size size)
Allocate a range in the dataspace.
Generic RPC wrapper for L4 flex-pages.
unsigned long l4_umword_t
Unsigned machine word.
#define L4_LOG2_PAGESIZE
Number of bits used for page offset.
l4_utcb_t * l4_utcb(void) L4_NOTHROW L4_PURE
Get the UTCB address.
#define L4_UNLIKELY(x)
Expression is unlikely to execute.
#define L4_RPC_DEF(name)
Generate the definition of an RPC stub.
Gen_fpage< Buf_item > Rcv_fpage
Rcv flex-page.
constexpr T round_order(T val, unsigned char order)
Round a value up so the given number of lsb is zero.
constexpr T trunc_order(T val, unsigned char order)
Round a value down so the given number of lsb is zero.
Information about the dataspace.