/* * \brief Kernel-specific thread meta data * \author Norman Feske * \date 2016-03-11 * * On most platforms, the 'Genode::Native_thread' type is private to the * base framework. However, on NOVA, we make the type publicly available to * expose the low-level thread-specific capability selectors to user-level * virtual-machine monitors (Seoul or VirtualBox). */ /* * Copyright (C) 2016-2017 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. */ #ifndef _INCLUDE__NOVA__NATIVE_THREAD_H_ #define _INCLUDE__NOVA__NATIVE_THREAD_H_ #include #include namespace Genode { struct Native_thread; } struct Genode::Native_thread { static constexpr unsigned long INVALID_INDEX = ~0UL; addr_t ec_sel { 0 }; /* selector for execution context */ addr_t exc_pt_sel { 0 }; /* base of event portal window */ bool vcpu { false }; /* true if thread is a virtual CPU */ addr_t initial_ip { 0 }; /* initial IP of local thread */ /* receive window for capability selectors received at the server side */ Receive_window server_rcv_window { }; /* * Designated selector to populate with the result of an IPC call * * By default, the client-side receive window for delegated selectors * is automatically allocated within the component's selector space. * However, in special cases such as during the initialization of a * user-level VMM (ports/include/vmm/vcpu_dispatcher.h), the targeted * selector is defined manually. The 'client_rcv_sel' provides the * hook for such a manual allocation. If it contains a valid selector * value, the value is used as the basis of the receive window of an * 'ipc_call'. */ addr_t client_rcv_sel = INVALID_INDEX; void reset_client_rcv_sel() { client_rcv_sel = INVALID_INDEX; } Native_capability pager_cap { }; Native_thread() : ec_sel(INVALID_INDEX), exc_pt_sel(INVALID_INDEX), vcpu(false), initial_ip(0) { } }; #endif /* _INCLUDE__NOVA__NATIVE_THREAD_H_ */