* \brief Dataspace client stub implementation
*/
/*
- * (c) 2008-2009 Technische Universität Dresden
+ * (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
+ * Alexander Warg <warg@os.inf.tu-dresden.de>
+ * economic rights: Technische Universität Dresden (Germany)
+ *
* This file is part of TUD:OS and distributed under the terms of the
* GNU General Public License 2.
* Please see the COPYING-GPL-2 file for details.
return err;
}
-static inline
-unsigned char max_order(unsigned char order, l4_addr_t addr,
- l4_addr_t min_addr, l4_addr_t max_addr)
-{
- while (order < 30 /* limit to 1GB flexpages */)
- {
- l4_addr_t base = l4_trunc_size(addr, order + 1);
- if (base < min_addr)
- return order;
-
- if (base + (1UL << (order + 1)) -1 > max_addr -1)
- return order;
-
- ++order;
- }
- return order;
-}
-
long
Dataspace::map_region(l4_addr_t offset, unsigned long flags,
l4_addr_t min_addr, l4_addr_t max_addr) const throw()
while (min_addr < max_addr)
{
unsigned char order_mapped;
- order_mapped = order = max_order(order, min_addr, min_addr, max_addr);
+ order_mapped = order
+ = l4_fpage_max_order(order, min_addr, min_addr, max_addr, min_addr);
err = __map(offset, &order_mapped, flags, min_addr);
if (EXPECT_FALSE(err < 0))
return err;
max_addr = l4_round_page(max_addr);
local_addr = l4_trunc_page(local_addr);
unsigned char order
- = max_order(L4_LOG2_PAGESIZE, local_addr, min_addr, max_addr);
+ = l4_fpage_max_order(L4_LOG2_PAGESIZE, local_addr, min_addr, max_addr, local_addr);
return __map(offset, &order, flags, local_addr);
}