2 * Copyright (C) 2015 Kernkonzept GmbH.
3 * Author(s): Sarah Hoffmann <sarah.hoffmann@kernkonzept.com>
5 * This file is distributed under the terms of the GNU General Public
6 * License, version 2. Please see the COPYING-GPL-2 file for details.
10 #include <l4/re/dataspace>
11 #include <l4/re/util/br_manager>
12 #include <l4/re/util/object_registry>
13 #include <l4/l4virtio/virtqueue>
15 #include "device_tree.h"
16 #include "ds_mmio_mapper.h"
18 #include "vm_memmap.h"
26 explicit Generic_guest(L4::Cap<L4Re::Dataspace> ram, l4_addr_t vm_base = ~0UL);
28 virtual ~Generic_guest() = default;
32 Device_tree device_tree() const
33 { return Device_tree(_ram.access(_device_tree)); }
35 bool has_device_tree() const
36 { return _device_tree.is_valid(); }
39 void load_device_tree_at(char const *src, l4_addr_t base, l4_size_t padding);
40 l4_size_t load_ramdisk_at(char const *ram_disk, l4_addr_t offset);
42 void handle_ipc(l4_msgtag_t tag, l4_umword_t label, l4_utcb_t *utcb)
44 l4_msgtag_t r = _registry.dispatch(tag, label, utcb);
45 if (r.label() != -L4_ENOREPLY)
46 l4_ipc_send(L4_INVALID_CAP | L4_SYSF_REPLY, utcb, r,
47 L4_IPC_SEND_TIMEOUT_0);
50 bool handle_mmio(l4_uint32_t pfa, Cpu vcpu)
52 Vm_mem::const_iterator f = _memmap.find(pfa);
53 if (f == _memmap.end())
56 return f->second->access(pfa, pfa - f->first.start,
58 f->first.start, f->first.end);
61 L4Re::Util::Br_manager _bm;
62 L4Re::Util::Object_registry _registry;
65 L4Re::Util::Auto_cap<L4::Task>::Cap _task;
66 L4virtio::Ptr<void> _device_tree;
69 Ds_handler _ram_pf_handler;