genode/repos/ports-foc/src/lib/l4lx/l4_io.cc
Norman Feske 17c79a9e23 base: avoid use of deprecated base/printf.h
Besides adapting the components to the use of base/log.h, the patch
cleans up a few base headers, i.e., it removes unused includes from
root/component.h, specifically base/heap.h and
ram_session/ram_session.h. Hence, components that relied on the implicit
inclusion of those headers have to manually include those headers now.

While adjusting the log messages, I repeatedly stumbled over the problem
that printing char * arguments is ambiguous. It is unclear whether to
print the argument as pointer or null-terminated string. To overcome
this problem, the patch introduces a new type 'Cstring' that allows the
caller to express that the argument should be handled as null-terminated
string. As a nice side effect, with this type in place, the optional len
argument of the 'String' class could be removed. Instead of supplying a
pair of (char const *, size_t), the constructor accepts a 'Cstring'.
This, in turn, clears the way let the 'String' constructor use the new
output mechanism to assemble a string from multiple arguments (and
thereby getting rid of snprintf within Genode in the near future).

To enforce the explicit resolution of the char * ambiguity, the 'char *'
overload of the 'print' function is marked as deleted.

Issue #1987
2016-08-29 17:27:10 +02:00

124 lines
2.7 KiB
C++

/*
* \brief L4Re functions needed by L4Linux.
* \author Stefan Kalkowski
* \date 2011-04-17
*/
/*
* Copyright (C) 2011-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.
*/
/* Genode includes */
#include <base/env.h>
#include <base/log.h>
#include <io_mem_session/connection.h>
#include <env.h>
namespace Fiasco {
#include <l4/io/io.h>
}
using namespace Fiasco;
extern "C" {
l4io_device_handle_t l4io_get_root_device(void)
{
Genode::warning(__func__, " not implemented");
return 0;
}
int l4io_iterate_devices(l4io_device_handle_t *devhandle,
l4io_device_t *dev, l4io_resource_handle_t *reshandle)
{
Genode::warning(__func__, " not implemented");
return 1;
}
int l4io_lookup_resource(l4io_device_handle_t devhandle,
enum l4io_resource_types_t type,
l4io_resource_handle_t *reshandle,
l4io_resource_t *res)
{
Genode::warning(__func__, " not implemented");
return 0;
}
long l4io_request_ioport(unsigned portnum, unsigned len)
{
Genode::warning(__func__, " not implemented");
return 0;
}
long l4io_request_iomem_region(l4_addr_t phys, l4_addr_t virt,
unsigned long size, int flags)
{
using namespace Genode;
Io_mem_connection *iomem = new (env()->heap()) Io_mem_connection(phys, size);
L4lx::Dataspace *ds =
L4lx::Env::env()->dataspaces()->insert("iomem", iomem->dataspace());
if (!L4lx::Env::env()->rm()->attach_at(ds, size, 0, (void*)virt)) {
error("could not reserve IO mem region at ", Hex(virt));
L4lx::Env::env()->dataspaces()->remove(ds);
destroy(env()->heap(), iomem);
return 1;
}
return 0;
}
long l4io_search_iomem_region(l4_addr_t phys, l4_addr_t size,
l4_addr_t *rstart, l4_addr_t *rsize)
{
Genode::warning(__func__, " not implemented");
return 0;
}
long l4io_request_iomem(l4_addr_t phys, unsigned long size, int flags,
l4_addr_t *virt)
{
Genode::warning(__func__, " not implemented");
return 0;
}
long l4io_release_iomem(l4_addr_t virt, unsigned long size)
{
Genode::warning(__func__, " not implemented");
return 0;
}
long l4io_request_irq(int irqnum, l4_cap_idx_t irqcap)
{
Genode::warning(__func__, " not implemented");
return 0;
}
long l4io_release_irq(int irqnum, l4_cap_idx_t irq_cap)
{
Genode::warning(__func__, " not implemented");
return 0;
}
int l4io_has_resource(enum l4io_resource_types_t type,
l4vbus_paddr_t start, l4vbus_paddr_t end)
{
Genode::warning(__func__, " not implemented");
return 0;
}
}