]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/l4re/include/impl/dataspace_impl.h
update
[l4.git] / l4 / pkg / l4re / include / impl / dataspace_impl.h
index afcf02b3f90b9f6bdb2c46f4ded3f24a498bfb04..17243f25c9806a1a331333259947e9a8f25c7390 100644 (file)
@@ -3,7 +3,10 @@
  * \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.
@@ -50,24 +53,6 @@ Dataspace::__map(unsigned long offset, unsigned char *size, unsigned long flags,
   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()
@@ -81,7 +66,8 @@ Dataspace::map_region(l4_addr_t offset, unsigned long flags,
   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;
@@ -113,7 +99,7 @@ Dataspace::map(l4_addr_t offset, unsigned long flags,
   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);
 }