/** * \brief Tools for early translation tables * \author Stefan Kalkowski * \author Martin Stein * \date 2014-08-05 */ /* * Copyright (C) 2012-2013 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ #ifndef _KERNEL__EARLY_TRANSLATIONS_H_ #define _KERNEL__EARLY_TRANSLATIONS_H_ /* core includes */ #include #include #include namespace Genode { /** * Dummy back-end allocator for early translation tables */ class Early_translations_allocator; /** * Aligned slab for early translation tables */ class Early_translations_slab; } namespace Kernel { using Genode::Early_translations_allocator; using Genode::Early_translations_slab; } class Genode::Early_translations_allocator : public Genode::Core_mem_translator { public: Early_translations_allocator() { } int add_range(addr_t base, size_t size) override { return -1; } int remove_range(addr_t base, size_t size) override { return -1; } Alloc_return alloc_aligned(size_t, void **, int, addr_t, addr_t) override { return Alloc_return::RANGE_CONFLICT; } Alloc_return alloc_addr(size_t size, addr_t addr) override { return Alloc_return::RANGE_CONFLICT; } void free(void *addr) override { } size_t avail() const override { return 0; } bool valid_addr(addr_t addr) const override { return false; } bool alloc(size_t size, void **out_addr) override { return false; } void free(void *addr, size_t) override { } size_t overhead(size_t size) const override { return 0; } bool need_size_for_free() const override { return false; } void * phys_addr(void * addr) { return addr; } void * virt_addr(void * addr) { return addr; } }; class Genode::Early_translations_slab : public Genode::Page_slab { public: typedef Genode::Core_mem_translator Allocator; enum { ALIGN_LOG2 = Genode::Translation_table::ALIGNM_LOG2, ALIGN = 1 << ALIGN_LOG2, }; /** * Constructor */ Early_translations_slab(Allocator * const alloc) : Page_slab(alloc) { assert(Genode::aligned(this, ALIGN_LOG2)); } } __attribute__((aligned(Early_translations_slab::ALIGN))); #endif /* _KERNEL__EARLY_TRANSLATIONS_H_ */