14#include <l4/sys/cxx/consts>
26Dataspace::__map(Dataspace::Offset offset,
unsigned char *size,
27 Dataspace::Flags flags,
28 Dataspace::Map_addr local_addr,
31 Map_addr spot = local_addr & ~(~0ULL <<
l4_umword_t(*size));
32 Map_addr base = local_addr & (~0ULL <<
l4_umword_t(*size));
36 long err = map_t::call(c(), offset, spot, flags, r, fp,
l4_utcb());
46 Dataspace::Map_addr min_addr,
47 Dataspace::Map_addr max_addr,
50 min_addr = L4::trunc_page(min_addr);
51 max_addr = L4::round_page(max_addr);
56 while (min_addr < max_addr)
58 unsigned char order_mapped;
60 = L4::max_order(order, min_addr, min_addr, max_addr, min_addr);
62 err = __map(offset, &order_mapped, flags, min_addr, dst);
66 if (order > order_mapped)
69 min_addr += Map_addr(1) << order;
70 offset += Map_addr(1) << order;
72 if (min_addr >= max_addr)
86 Dataspace::Map_addr local_addr,
87 Dataspace::Map_addr min_addr,
88 Dataspace::Map_addr max_addr,
91 min_addr = L4::trunc_page(min_addr);
92 max_addr = L4::round_page(max_addr);
93 local_addr = L4::trunc_page(local_addr);
95 = L4::max_order(
L4_LOG2_PAGESIZE, local_addr, min_addr, max_addr, local_addr);
97 return __map(offset, &order, flags, local_addr, dst);
104 int err =
info(&stats);
114 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, L4::Cap< L4::Task > dst=L4::Cap< L4::Task >::Invalid) const noexcept
Map a part of a dataspace into a local memory area.
long info(Stats *stats)
Get information on the dataspace.
long map_info(l4_addr_t *start_addr, l4_addr_t *end_addr)
Get mapping range of dataspace.
long clear(Offset offset, Size size)
Clear parts of a dataspace.
long allocate(Offset offset, Size size)
Allocate a range in the dataspace.
long map(Offset offset, Flags flags, Map_addr local_addr, Map_addr min_addr, Map_addr max_addr, L4::Cap< L4::Task > dst=L4::Cap< L4::Task >::Invalid) const noexcept
Request a flexpage mapping from the dataspace.
C++ interface for capabilities.
static Rcv_fpage mem(l4_addr_t base, int order, l4_addr_t snd_base=0, L4::Cap< void > rcv_task=L4::Cap< void >::Invalid) noexcept
Construct a receive item for the memory space.
Send item or return item.
unsigned rcv_order() const noexcept
*(Defined for return items only.)* Get log₂ size.
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.
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.