84 lines
2.2 KiB
C++
84 lines
2.2 KiB
C++
/**
|
|
* \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 <assert.h>
|
|
#include <page_slab.h>
|
|
#include <translation_table.h>
|
|
|
|
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_ */
|