diff --git a/repos/ports/lib/mk/spec/hw_x86_64_muen/virtualbox-hwaccl.mk b/repos/ports/lib/mk/spec/hw_x86_64_muen/virtualbox-hwaccl.mk index 81d24a546f..15717bfad2 100644 --- a/repos/ports/lib/mk/spec/hw_x86_64_muen/virtualbox-hwaccl.mk +++ b/repos/ports/lib/mk/spec/hw_x86_64_muen/virtualbox-hwaccl.mk @@ -1,11 +1,16 @@ include $(REP_DIR)/lib/mk/virtualbox-common.inc +LIBS += stdcxx + SRC_CC = pgm.cc sup.cc INC_DIR += $(call select_from_repositories,src/lib/libc) +INC_DIR += $(VBOX_DIR)/Main/xml +INC_DIR += $(VBOX_DIR)/Main/include INC_DIR += $(VBOX_DIR)/VMM/include INC_DIR += $(REP_DIR)/src/virtualbox +INC_DIR += $(REP_DIR)/src/virtualbox/frontend INC_DIR += $(REP_DIR)/src/virtualbox/spec/muen vpath pgm.cc $(REP_DIR)/src/virtualbox/ diff --git a/repos/ports/lib/mk/spec/nova/virtualbox-hwaccl.mk b/repos/ports/lib/mk/spec/nova/virtualbox-hwaccl.mk index c5e53ecf98..a924bc8f7e 100644 --- a/repos/ports/lib/mk/spec/nova/virtualbox-hwaccl.mk +++ b/repos/ports/lib/mk/spec/nova/virtualbox-hwaccl.mk @@ -1,12 +1,17 @@ include $(REP_DIR)/lib/mk/virtualbox-common.inc +LIBS += stdcxx + SRC_CC = sup.cc pgm.cc INC_DIR += $(call select_from_repositories,src/lib/libc) INC_DIR += $(call select_from_repositories,src/lib/pthread) +INC_DIR += $(VBOX_DIR)/Main/xml +INC_DIR += $(VBOX_DIR)/Main/include INC_DIR += $(VBOX_DIR)/VMM/include INC_DIR += $(REP_DIR)/src/virtualbox +INC_DIR += $(REP_DIR)/src/virtualbox/frontend INC_DIR += $(REP_DIR)/src/virtualbox/spec/nova vpath pgm.cc $(REP_DIR)/src/virtualbox/ diff --git a/repos/ports/lib/mk/virtualbox-hwaccl-off.inc b/repos/ports/lib/mk/virtualbox-hwaccl-off.inc index de045c126a..58f6beb2e7 100644 --- a/repos/ports/lib/mk/virtualbox-hwaccl-off.inc +++ b/repos/ports/lib/mk/virtualbox-hwaccl-off.inc @@ -1,10 +1,15 @@ include $(REP_DIR)/lib/mk/virtualbox-common.inc +LIBS += stdcxx + SRC_CC = pgm.cc sup.cc INC_DIR += $(call select_from_repositories,src/lib/libc) +INC_DIR += $(VBOX_DIR)/Main/xml +INC_DIR += $(VBOX_DIR)/Main/include INC_DIR += $(VBOX_DIR)/VMM/include INC_DIR += $(REP_DIR)/src/virtualbox +INC_DIR += $(REP_DIR)/src/virtualbox/frontend INC_DIR += $(REP_DIR)/src/virtualbox/accloff vpath pgm.cc $(REP_DIR)/src/virtualbox/ diff --git a/repos/ports/lib/mk/virtualbox-main.mk b/repos/ports/lib/mk/virtualbox-main.mk index eb1a67cd2a..b67f27fd6b 100644 --- a/repos/ports/lib/mk/virtualbox-main.mk +++ b/repos/ports/lib/mk/virtualbox-main.mk @@ -67,6 +67,7 @@ SRC_CC += Main/glue/xpcom/helpers.cpp INC_DIR += $(VBOX_DIR)/Main/xml INC_DIR += $(VBOX_DIR)/Main/include +INC_DIR += $(REP_DIR)/src/virtualbox INC_DIR += $(REP_DIR)/src/virtualbox/frontend INC_DIR += $(REP_DIR)/src/virtualbox/frontend/VBoxAPIWrap diff --git a/repos/ports/src/virtualbox/accloff/sup.cc b/repos/ports/src/virtualbox/accloff/sup.cc index 550cef8a20..1582ba3206 100644 --- a/repos/ports/src/virtualbox/accloff/sup.cc +++ b/repos/ports/src/virtualbox/accloff/sup.cc @@ -123,6 +123,9 @@ void genode_update_tsc(void (*update_func)(void), unsigned long update_us) } +HRESULT genode_setup_machine(ComObjPtr machine) { return S_OK; } + + bool Vmm_memory::revoke_from_vm(Mem_region *r) { PWRN("%s unimplemented", __func__); diff --git a/repos/ports/src/virtualbox/frontend/main.cc b/repos/ports/src/virtualbox/frontend/main.cc index bdef5a9710..2b54fa33f8 100644 --- a/repos/ports/src/virtualbox/frontend/main.cc +++ b/repos/ports/src/virtualbox/frontend/main.cc @@ -34,6 +34,7 @@ /* Genode port specific includes */ #include "console.h" #include "fb.h" +#include "../sup.h" static char c_vbox_file[128]; static char c_vbox_vmname[128]; @@ -106,6 +107,10 @@ HRESULT setupmachine() if (FAILED(rc)) return rc; + rc = genode_setup_machine(machine); + if (FAILED(rc)) + return rc; + rc = virtualbox->RegisterMachine(machine); if (FAILED(rc)) return rc; diff --git a/repos/ports/src/virtualbox/spec/muen/sup.cc b/repos/ports/src/virtualbox/spec/muen/sup.cc index 416b980985..378939ec82 100644 --- a/repos/ports/src/virtualbox/spec/muen/sup.cc +++ b/repos/ports/src/virtualbox/spec/muen/sup.cc @@ -747,6 +747,25 @@ uint64_t genode_cpu_hz() } +HRESULT genode_setup_machine(ComObjPtr machine) +{ + HRESULT rc; + ULONG cCpus; + rc = machine->COMGETTER(CPUCount)(&cCpus); + if (FAILED(rc)) + return rc; + + if (cCpus != 1) { + PWRN("Configured CPUs %u not supported, reducing to 1.", cCpus); + rc = machine->COMSETTER(CPUCount)(1); + if (FAILED(rc)) + return rc; + } + + return S_OK; +} + + /** * Dummies and unimplemented stuff. */ diff --git a/repos/ports/src/virtualbox/spec/nova/sup.cc b/repos/ports/src/virtualbox/spec/nova/sup.cc index 8f832ccf8d..e46b8833cd 100644 --- a/repos/ports/src/virtualbox/spec/nova/sup.cc +++ b/repos/ports/src/virtualbox/spec/nova/sup.cc @@ -216,6 +216,9 @@ void genode_update_tsc(void (*update_func)(void), unsigned long update_us) } +HRESULT genode_setup_machine(ComObjPtr machine) { return S_OK; } + + bool Vmm_memory::revoke_from_vm(Mem_region *r) { Assert(r); diff --git a/repos/ports/src/virtualbox/sup.h b/repos/ports/src/virtualbox/sup.h index b2029feeee..c0c68b8916 100644 --- a/repos/ports/src/virtualbox/sup.h +++ b/repos/ports/src/virtualbox/sup.h @@ -20,8 +20,11 @@ /* VirtualBox includes */ #include #include +#include #include +#include "MachineImpl.h" + /** * Returns true if a vCPU could be started. If false we run without * hardware acceleration support. @@ -42,4 +45,6 @@ Genode::Cpu_session * get_vcpu_cpu_session(); void genode_VMMR0_DO_GVMM_CREATE_VM(PSUPVMMR0REQHDR pReqHdr); void genode_VMMR0_DO_GVMM_REGISTER_VMCPU(PVMR0 pVMR0, VMCPUID idCpu); +HRESULT genode_setup_machine(ComObjPtr machine); + #endif /* _SUP_H_ */