vm_session: move from base-hw to base

Issue #3111
This commit is contained in:
Alexander Boettcher 2018-09-26 13:03:46 +02:00 committed by Norman Feske
parent 9f8198d946
commit 9a2bdf8798
8 changed files with 212 additions and 215 deletions

View File

@ -1,59 +0,0 @@
/*
* \brief Client-side VM session interface
* \author Stefan Kalkowski
* \date 2012-10-02
*/
/*
* Copyright (C) 2012-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__VM_SESSION__CLIENT_H_
#define _INCLUDE__VM_SESSION__CLIENT_H_
/* Genode includes */
#include <vm_session/capability.h>
#include <base/rpc_client.h>
namespace Genode
{
/**
* Client-side VM session interface
*/
struct Vm_session_client : Rpc_client<Vm_session>
{
/**
* Constructor
*/
explicit Vm_session_client(Vm_session_capability session)
: Rpc_client<Vm_session>(session) { }
/**************************
** Vm_session interface **
**************************/
Dataspace_capability cpu_state() {
return call<Rpc_cpu_state>(); }
void exception_handler(Signal_context_capability handler) {
call<Rpc_exception_handler>(handler); }
void run() { call<Rpc_run>(); }
void pause() { call<Rpc_pause>(); }
void attach(Dataspace_capability ds,addr_t vm_addr) {
call<Rpc_attach>(ds, vm_addr); }
void detach(addr_t vm_addr, size_t size) {
call<Rpc_detach>(vm_addr, size); }
void attach_pic(addr_t vm_addr) {
call<Rpc_attach_pic>(vm_addr); }
};
}
#endif /* _INCLUDE__VM_SESSION__CLIENT_H_ */

View File

@ -1,106 +0,0 @@
/*
* \brief VM-session interface
* \author Stefan Kalkowski
* \date 2012-10-02
*/
/*
* Copyright (C) 2012-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__VM_SESSION__VM_SESSION_H_
#define _INCLUDE__VM_SESSION__VM_SESSION_H_
/* Genode includes */
#include <base/rpc_args.h>
#include <base/signal.h>
#include <session/session.h>
#include <ram_session/ram_session.h>
namespace Genode {
struct Vm_session : Session
{
static const char *service_name() { return "VM"; }
enum { CAP_QUOTA = 3 };
class Invalid_dataspace : Exception { };
/**
* Destructor
*/
virtual ~Vm_session() { }
/**
* Get dataspace of the CPU state of the VM
*/
virtual Dataspace_capability cpu_state(void) = 0;
/**
* Register signal handler for exceptions of the Vm
*/
virtual void exception_handler(Signal_context_capability handler) = 0;
/**
* (Re-)Start execution of the VM
*/
virtual void run(void) {}
/**
* Stop execution of the VM
*/
virtual void pause(void) {}
/**
* Attach dataspace to the guest-physical memory address space
*
* \param ds dataspace to be attached
* \param vm_addr address in guest-physical memory address space
*/
virtual void attach(Dataspace_capability ds, addr_t vm_addr) = 0;
/**
* Invalidate region of the guest-physical memory address space
*
* \param vm_addr address in guest-physical memory address space
* \param size size of the region to invalidate
*/
virtual void detach(addr_t vm_addr, size_t size) = 0;
/**
* Attach cpu-local interrupt-controller's interface to
* guest-physical memory address space.
*
* \param vm_addr address in guest-physical memory address space
*
* Note: this is currently only support for ARM interrupt-controller
* hardware virtualization
*/
virtual void attach_pic(addr_t vm_addr) = 0;
/*********************
** RPC declaration **
*********************/
GENODE_RPC(Rpc_cpu_state, Dataspace_capability, cpu_state);
GENODE_RPC(Rpc_exception_handler, void, exception_handler,
Signal_context_capability);
GENODE_RPC(Rpc_run, void, run);
GENODE_RPC(Rpc_pause, void, pause);
GENODE_RPC_THROW(Rpc_attach, void, attach,
GENODE_TYPE_LIST(Invalid_dataspace),
Dataspace_capability, addr_t);
GENODE_RPC(Rpc_detach, void, detach, addr_t, size_t);
GENODE_RPC(Rpc_attach_pic, void, attach_pic, addr_t);
GENODE_RPC_INTERFACE(Rpc_cpu_state, Rpc_exception_handler,
Rpc_run, Rpc_pause, Rpc_attach, Rpc_detach,
Rpc_attach_pic);
};
}
#endif /* _INCLUDE__VM_SESSION__VM_SESSION_H_ */

View File

@ -1,50 +0,0 @@
/*
* \brief Vm root interface
* \author Stefan Kalkowski
* \date 2012-10-08
*/
/*
* Copyright (C) 2012-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 _CORE__VM_ROOT_H_
#define _CORE__VM_ROOT_H_
/* Genode includes */
#include <root/component.h>
#include <base/heap.h>
/* core includes */
#include <vm_session_component.h>
namespace Genode {
class Vm_root : public Root_component<Vm_session_component>
{
protected:
Vm_session_component *_create_session(const char *args)
{
size_t ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0);
return new (md_alloc()) Vm_session_component(ep(), ram_quota);
}
public:
/**
* Constructor
*
* \param session_ep entrypoint managing vm_session components
* \param md_alloc meta-data allocator to be used by root component
*/
Vm_root(Rpc_entrypoint *session_ep,
Allocator *md_alloc)
: Root_component<Vm_session_component>(session_ep, md_alloc) { }
};
}
#endif /* _CORE__VM_ROOT_H_ */

View File

@ -0,0 +1,58 @@
/*
* \brief Client-side VM session interface
* \author Stefan Kalkowski
* \date 2012-10-02
*/
/*
* Copyright (C) 2012-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__VM_SESSION__CLIENT_H_
#define _INCLUDE__VM_SESSION__CLIENT_H_
/* Genode includes */
#include <vm_session/capability.h>
#include <base/rpc_client.h>
namespace Genode { struct Vm_session_client; }
/**
* Client-side VM session interface
*/
struct Genode::Vm_session_client : Rpc_client<Vm_session>
{
/**
* Constructor
*/
explicit Vm_session_client(Vm_session_capability session)
: Rpc_client<Vm_session>(session) { }
/**************************
** Vm_session interface **
**************************/
Dataspace_capability cpu_state() {
return call<Rpc_cpu_state>(); }
void exception_handler(Signal_context_capability handler) {
call<Rpc_exception_handler>(handler); }
void run() { call<Rpc_run>(); }
void pause() { call<Rpc_pause>(); }
void attach(Dataspace_capability ds,addr_t vm_addr) {
call<Rpc_attach>(ds, vm_addr); }
void detach(addr_t vm_addr, size_t size) {
call<Rpc_detach>(vm_addr, size); }
void attach_pic(addr_t vm_addr) {
call<Rpc_attach_pic>(vm_addr); }
};
#endif /* _INCLUDE__VM_SESSION__CLIENT_H_ */

View File

@ -0,0 +1,105 @@
/*
* \brief VM-session interface
* \author Stefan Kalkowski
* \date 2012-10-02
*/
/*
* Copyright (C) 2012-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__VM_SESSION__VM_SESSION_H_
#define _INCLUDE__VM_SESSION__VM_SESSION_H_
/* Genode includes */
#include <base/rpc_args.h>
#include <base/signal.h>
#include <session/session.h>
#include <ram_session/ram_session.h>
namespace Genode { struct Vm_session; }
struct Genode::Vm_session : Session
{
static const char *service_name() { return "VM"; }
enum { CAP_QUOTA = 3 };
class Invalid_dataspace : Exception { };
/**
* Destructor
*/
virtual ~Vm_session() { }
/**
* Get dataspace of the CPU state of the VM
*/
virtual Dataspace_capability cpu_state(void) = 0;
/**
* Register signal handler for exceptions of the Vm
*/
virtual void exception_handler(Signal_context_capability handler) = 0;
/**
* (Re-)Start execution of the VM
*/
virtual void run(void) {}
/**
* Stop execution of the VM
*/
virtual void pause(void) {}
/**
* Attach dataspace to the guest-physical memory address space
*
* \param ds dataspace to be attached
* \param vm_addr address in guest-physical memory address space
*/
virtual void attach(Dataspace_capability ds, addr_t vm_addr) = 0;
/**
* Invalidate region of the guest-physical memory address space
*
* \param vm_addr address in guest-physical memory address space
* \param size size of the region to invalidate
*/
virtual void detach(addr_t vm_addr, size_t size) = 0;
/**
* Attach cpu-local interrupt-controller's interface to
* guest-physical memory address space.
*
* \param vm_addr address in guest-physical memory address space
*
* Note: this is currently only support for ARM interrupt-controller
* hardware virtualization
*/
virtual void attach_pic(addr_t vm_addr) = 0;
/*********************
** RPC declaration **
*********************/
GENODE_RPC(Rpc_cpu_state, Dataspace_capability, cpu_state);
GENODE_RPC(Rpc_exception_handler, void, exception_handler,
Signal_context_capability);
GENODE_RPC(Rpc_run, void, run);
GENODE_RPC(Rpc_pause, void, pause);
GENODE_RPC_THROW(Rpc_attach, void, attach,
GENODE_TYPE_LIST(Invalid_dataspace),
Dataspace_capability, addr_t);
GENODE_RPC(Rpc_detach, void, detach, addr_t, size_t);
GENODE_RPC(Rpc_attach_pic, void, attach_pic, addr_t);
GENODE_RPC_INTERFACE(Rpc_cpu_state, Rpc_exception_handler,
Rpc_run, Rpc_pause, Rpc_attach, Rpc_detach,
Rpc_attach_pic);
};
#endif /* _INCLUDE__VM_SESSION__VM_SESSION_H_ */

View File

@ -0,0 +1,49 @@
/*
* \brief Vm root interface
* \author Stefan Kalkowski
* \date 2012-10-08
*/
/*
* Copyright (C) 2012-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 _CORE__INCLUDE__VM_ROOT_H_
#define _CORE__INCLUDE__VM_ROOT_H_
/* Genode includes */
#include <root/component.h>
#include <base/heap.h>
/* core includes */
#include <vm_session_component.h>
namespace Genode { class Vm_root; }
class Genode::Vm_root : public Root_component<Vm_session_component>
{
protected:
Vm_session_component *_create_session(const char *args)
{
size_t ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0);
return new (md_alloc()) Vm_session_component(ep(), ram_quota);
}
public:
/**
* Constructor
*
* \param session_ep entrypoint managing vm_session components
* \param md_alloc meta-data allocator to be used by root component
*/
Vm_root(Rpc_entrypoint *session_ep,
Allocator *md_alloc)
: Root_component<Vm_session_component>(session_ep, md_alloc) { }
};
#endif /* _CORE__INCLUDE__VM_ROOT_H_ */