diff options
Diffstat (limited to 'src')
779 files changed, 16739 insertions, 10550 deletions
diff --git a/src/VBox/Additions/Makefile.kmk b/src/VBox/Additions/Makefile.kmk index 4e629346d..5878479e6 100644 --- a/src/VBox/Additions/Makefile.kmk +++ b/src/VBox/Additions/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 32690 2010-09-22 10:09:36Z vboxsync $ +# $Id: Makefile.kmk 35381 2010-12-30 16:12:47Z vboxsync $ ## @file # Top-level makefile for the VirtualBox Guest Additions. # @@ -94,20 +94,20 @@ ifndef VBOX_ONLY_TESTSUITE VBoxGuest-inf_BLDDIRS = \ $(PATH_TARGET)/VBoxGuestCat.dir - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf: $(PATH_SUB_CURRENT)/common/VBoxGuest/win/VBoxGuest.inf $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(@D)) + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.inf: $(PATH_SUB_CURRENT)/common/VBoxGuest/win/VBoxGuest.inf $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_GENERATE,VBoxGuest-inf,$@,$<) $(call VBOX_EDIT_INF_FN,$<,$@) - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys: $$(TARGET_VBoxGuest) | $$(call DIRDEP,$$(@D)) + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.sys: $$(TARGET_VBoxGuest) | $$(dir $$@) $(INSTALL) -m 644 $< $(@D) - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe: $$(TARGET_VBoxControl) | $$(call DIRDEP,$$(@D)) + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxControl.exe: $$(TARGET_VBoxControl) | $$(dir $$@) $(INSTALL) -m 755 $< $(@D) - $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe: $$(TARGET_VBoxTray) | $$(call DIRDEP,$$(@D)) + $(PATH_TARGET)/VBoxGuestCat.dir/VBoxTray.exe: $$(TARGET_VBoxTray) | $$(dir $$@) $(INSTALL) -m 755 $< $(@D) - $(PATH_TARGET)/VBoxGuestCat.dir/VBCoInst.dll: $$(TARGET_VBCoInst) | $$(call DIRDEP,$$(@D)) + $(PATH_TARGET)/VBoxGuestCat.dir/VBCoInst.dll: $$(TARGET_VBCoInst) | $$(dir $$@) $(INSTALL) -m 644 $< $(@D) $(PATH_TARGET)/VBoxGuestCat.dir/VBoxGuest.cat: \ diff --git a/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile b/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile index ffc65c442..290ab39c7 100644 --- a/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile +++ b/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile 33378 2010-10-24 13:20:43Z vboxsync $ +# $Id: Makefile 35354 2010-12-27 18:05:02Z vboxsync $ ## @file # VirtualBox Guest Additions Module Makefile. # @@ -103,6 +103,10 @@ SRCS += \ SRCS += \ avlpv.c +.PATH: ${.CURDIR}/common/time +SRCS += \ + time.c + .PATH: ${.CURDIR}/generic SRCS += \ uuid-generic.c \ diff --git a/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest b/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest index 85c23935b..1bbbcdb8f 100644 --- a/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest +++ b/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: files_vboxguest 33376 2010-10-24 12:55:23Z vboxsync $ +# $Id: files_vboxguest 35430 2011-01-07 15:04:01Z vboxsync $ ## @file # Shared file between Makefile.kmk and export_modules # @@ -128,6 +128,7 @@ FILES_VBOXGUEST_NOBIN=" \ ${PATH_ROOT}/src/VBox/Runtime/common/table/avl_RemoveBestFit.cpp.h=>common/table/avl_RemoveBestFit.cpp.h \ ${PATH_ROOT}/src/VBox/Runtime/common/table/avl_DoWithAll.cpp.h=>common/table/avl_DoWithAll.cpp.h \ ${PATH_ROOT}/src/VBox/Runtime/common/table/avl_Destroy.cpp.h=>common/table/avl_Destroy.cpp.h \ + ${PATH_ROOT}/src/VBox/Runtime/common/time/time.cpp=>common/time/time.c \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/assert.h=>include/internal/assert.h \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/initterm.h=>include/internal/initterm.h \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/iprt.h=>include/internal/iprt.h \ @@ -136,6 +137,7 @@ FILES_VBOXGUEST_NOBIN=" \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/memobj.h=>include/internal/memobj.h \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/string.h=>include/internal/string.h \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/thread.h=>include/internal/thread.h \ + ${PATH_ROOT}/src/VBox/Runtime/include/internal/time.h=>include/internal/time.h \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/rand.h=>include/internal/rand.h \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/sched.h=>include/internal/sched.h \ ${PATH_ROOT}/src/VBox/Runtime/include/internal/process.h=>include/internal/process.h \ diff --git a/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk b/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk index ec956cce6..7d5e1a9e6 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk +++ b/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34801 2010-12-07 16:25:14Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the common guest addition code library. # @@ -44,7 +44,7 @@ ifndef VBOX_ONLY_TESTSUITE VBoxGuestR3LibXFree86 endif endif -LIBRARIES.win.amd64 += VBoxGuestR3Lib-x86 +LIBRARIES.win.amd64 += VBoxGuestR3Lib-x86 VBoxGuestR3LibShared-x86 # @@ -53,7 +53,7 @@ LIBRARIES.win.amd64 += VBoxGuestR3Lib-x86 VBoxGuestR0Lib_TEMPLATE = VBOXGUESTR0LIB VBoxGuestR0Lib_DEFS = VBOX_WITH_HGCM VBoxGuestR0Lib_INCS = \ - $(PATH_VBoxGuestR0Lib) + $(VBoxGuestR0Lib_0_OUTDIR) VBoxGuestR0Lib_SOURCES = \ GenericRequest.cpp \ SysHlp.cpp \ @@ -144,6 +144,13 @@ VBoxGuestR3Lib-x86_BLD_TRG_ARCH := x86 # +# VBoxGuestR3LibShared-x86 - an x86 (32-bit) variant of VBoxGuestR3LibShared for 64-bit Windows. +# +VBoxGuestR3LibShared-x86_EXTENDS := VBoxGuestR3LibShared +VBoxGuestR3LibShared-x86_BLD_TRG_ARCH := x86 + + +# # VBoxGuestR3LibXFree86 - a reduced version of the guest library which uses # the X server runtime instead of IPRT, for use with old servers where the # C library is not available. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp index 0e5ff7d1a..a481a8bcf 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxGuestR3LibSharedFolders.cpp 35016 2010-12-13 14:40:09Z vboxsync $ */ +/* $Id: VBoxGuestR3LibSharedFolders.cpp 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * VBoxGuestR3Lib - Ring-3 Support Library for VirtualBox guest additions, shared folders. */ @@ -289,12 +289,12 @@ VBGLR3DECL(int) VbglR3SharedFolderGetMountPrefix(char **ppszPrefix) } /** - * Retrieves the mount root directory for auto-mounted shared - * folders. mount point. If no string is set (VERR_NOT_FOUND) - * it's up on the caller (guest) to decide where to mount. + * Retrieves the mount root directory for auto-mounted shared + * folders. mount point. If no string is set (VERR_NOT_FOUND) + * it's up on the caller (guest) to decide where to mount. * * @returns VBox status code. - * @param ppszDir Where to return the directory + * @param ppszDir Where to return the directory * string. This shall be freed by * calling RTStrFree. */ diff --git a/src/VBox/Additions/common/VBoxService/Makefile.kmk b/src/VBox/Additions/common/VBoxService/Makefile.kmk index 56d9628a5..88bab6e81 100644 --- a/src/VBox/Additions/common/VBoxService/Makefile.kmk +++ b/src/VBox/Additions/common/VBoxService/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33257 2010-10-20 11:56:23Z vboxsync $ +# $Id: Makefile.kmk 35385 2010-12-30 16:35:31Z vboxsync $ ## @file # Sub-Makefile for the Cross Platform Guest Addition Services. # @@ -140,12 +140,12 @@ VBoxServiceVMInfo.cpp_DEPS = $(VBOX_SVN_REV_KMK) # # The icon is configurable. # -VBoxService-win.rc_INCS = $(PATH_VBoxService) -VBoxService-win.rc_DEPS = $(PATH_VBoxService)/VBoxService-win-icon.rc -VBoxService-win.rc_CLEAN = $(PATH_VBoxService)/VBoxService-win-icon.rc +VBoxService-win.rc_INCS = $(VBoxService_0_OUTDIR) +VBoxService-win.rc_DEPS = $(VBoxService_0_OUTDIR)/VBoxService-win-icon.rc +VBoxService-win.rc_CLEAN = $(VBoxService_0_OUTDIR)/VBoxService-win-icon.rc # Icon include file. -$$(PATH_VBoxService)/VBoxService-win-icon.rc: $(VBOX_WINDOWS_ADDITIONS_ICON_FILE) $$(VBoxService_PATH)/Makefile.kmk | $$(dir $$@) +$$(VBoxService_0_OUTDIR)/VBoxService-win-icon.rc: $(VBOX_WINDOWS_ADDITIONS_ICON_FILE) $$(VBoxService_DEFPATH)/Makefile.kmk | $$(dir $$@) $(RM) -f $@ $(APPEND) $@ 'IDI_VIRTUALBOX ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ADDITIONS_ICON_FILE))"' diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControlExec.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControlExec.cpp index 19275b1f7..249cf2434 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceControlExec.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControlExec.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxServiceControlExec.cpp 35244 2010-12-20 13:46:17Z vboxsync $ */ +/* $Id: VBoxServiceControlExec.cpp 35526 2011-01-13 14:21:12Z vboxsync $ */ /** @file * VBoxServiceControlExec - Utility functions for process execution. */ @@ -897,12 +897,12 @@ int VBoxServiceControlExecWritePipeBuffer(PVBOXSERVICECTRLEXECPIPEBUF pBuf, * @param pszPassword * @param uTimeLimitMS */ -int VBoxServiceControlExecAllocateThreadData(PVBOXSERVICECTRLTHREAD pThread, - uint32_t u32ContextID, - const char *pszCmd, uint32_t uFlags, - const char *pszArgs, uint32_t uNumArgs, - const char *pszEnv, uint32_t cbEnv, uint32_t uNumEnvVars, - const char *pszUser, const char *pszPassword, uint32_t uTimeLimitMS) +static int VBoxServiceControlExecAllocateThreadData(PVBOXSERVICECTRLTHREAD pThread, + uint32_t u32ContextID, + const char *pszCmd, uint32_t uFlags, + const char *pszArgs, uint32_t uNumArgs, + const char *pszEnv, uint32_t cbEnv, uint32_t uNumEnvVars, + const char *pszUser, const char *pszPassword, uint32_t uTimeLimitMS) { AssertPtr(pThread); @@ -1028,7 +1028,7 @@ void VBoxServiceControlExecDestroyThreadData(PVBOXSERVICECTRLTHREADDATAEXEC pDat /** @todo Maybe we want to have an own IPRT function for that! */ -int VBoxServiceControlExecMakeFullPath(const char *pszPath, char *pszExpanded, size_t cbExpanded) +static int VBoxServiceControlExecMakeFullPath(const char *pszPath, char *pszExpanded, size_t cbExpanded) { int rc = VINF_SUCCESS; #ifdef RT_OS_WINDOWS @@ -1046,7 +1046,7 @@ int VBoxServiceControlExecMakeFullPath(const char *pszPath, char *pszExpanded, s } -int VBoxServiceControlExecResolveExecutable(const char *pszFileName, char *pszResolved, size_t cbResolved) +static int VBoxServiceControlExecResolveExecutable(const char *pszFileName, char *pszResolved, size_t cbResolved) { int rc = VINF_SUCCESS; @@ -1096,22 +1096,15 @@ int VBoxServiceControlExecResolveExecutable(const char *pszFileName, char *pszRe * @param ppapszArgv Pointer to a pointer with the new argv command line. * Needs to be freed with RTGetOptArgvFree. */ -int VBoxServiceControlExecPrepareArgv(const char *pszFileName, - const char * const *papszArgs, char ***ppapszArgv) +static int VBoxServiceControlExecPrepareArgv(const char *pszFileName, + const char * const *papszArgs, char ***ppapszArgv) { AssertPtrReturn(pszFileName, VERR_INVALID_PARAMETER); AssertPtrReturn(papszArgs, VERR_INVALID_PARAMETER); AssertPtrReturn(ppapszArgv, VERR_INVALID_PARAMETER); - bool fUseToolbox = false; - if (RTStrStr(papszArgs[0], "vbox_") == papszArgs[0]) - fUseToolbox = true; - - /* Skip argv[0] (= file name) if we don't run an internal - * VBoxService toolbox command - we already have a resolved one in pszFileName. */ char *pszArgs; - int rc = RTGetOptArgvToString(&pszArgs, - fUseToolbox ? papszArgs : &papszArgs[1], + int rc = RTGetOptArgvToString(&pszArgs, papszArgs, RTGETOPTARGV_CNV_QUOTE_MS_CRT); /* RTGETOPTARGV_CNV_QUOTE_BOURNE_SH */ if ( RT_SUCCESS(rc) && pszArgs) @@ -1165,9 +1158,9 @@ int VBoxServiceControlExecPrepareArgv(const char *pszFileName, * @param pszPassword * @param phProcess */ -int VBoxServiceControlExecCreateProcess(const char *pszExec, const char * const *papszArgs, RTENV hEnv, uint32_t fFlags, - PCRTHANDLE phStdIn, PCRTHANDLE phStdOut, PCRTHANDLE phStdErr, const char *pszAsUser, - const char *pszPassword, PRTPROCESS phProcess) +static int VBoxServiceControlExecCreateProcess(const char *pszExec, const char * const *papszArgs, RTENV hEnv, uint32_t fFlags, + PCRTHANDLE phStdIn, PCRTHANDLE phStdOut, PCRTHANDLE phStdErr, const char *pszAsUser, + const char *pszPassword, PRTPROCESS phProcess) { int rc = VINF_SUCCESS; #ifdef RT_OS_WINDOWS @@ -1244,7 +1237,7 @@ int VBoxServiceControlExecCreateProcess(const char *pszExec, const char * const * @return IPRT status code. * @param PVBOXSERVICECTRLTHREAD Thread data associated with a started process. */ -DECLCALLBACK(int) VBoxServiceControlExecProcessWorker(PVBOXSERVICECTRLTHREAD pThread) +static DECLCALLBACK(int) VBoxServiceControlExecProcessWorker(PVBOXSERVICECTRLTHREAD pThread) { AssertPtr(pThread); PVBOXSERVICECTRLTHREADDATAEXEC pData = (PVBOXSERVICECTRLTHREADDATAEXEC)pThread->pvData; @@ -1413,7 +1406,7 @@ DECLCALLBACK(int) VBoxServiceControlExecProcessWorker(PVBOXSERVICECTRLTHREAD pTh * @return PVBOXSERVICECTRLTHREAD Process structure if found, otherwise NULL. * @param uPID PID to search for. */ -PVBOXSERVICECTRLTHREAD VBoxServiceControlExecFindProcess(uint32_t uPID) +static PVBOXSERVICECTRLTHREAD VBoxServiceControlExecFindProcess(uint32_t uPID) { PVBOXSERVICECTRLTHREAD pNode; bool fFound = false; diff --git a/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp b/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp index 4ab42f26a..387c2d871 100644 --- a/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp +++ b/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp @@ -1,4 +1,4 @@ -/* $Id: HGSMIBase.cpp 35118 2010-12-15 10:48:29Z vboxsync $ */ +/* $Id: HGSMIBase.cpp 35398 2011-01-04 09:39:07Z vboxsync $ */ /** @file * VirtualBox Video driver, common code - HGSMI initialisation and helper * functions. @@ -24,8 +24,7 @@ #include <iprt/asm.h> #include <iprt/log.h> - -#include <string.h> +#include <iprt/string.h> /** Send completion notification to the host for the command located at offset * @a offt into the host command buffer. */ diff --git a/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp b/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp index 6f8398ae8..e29186999 100644 --- a/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp +++ b/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp @@ -1,4 +1,4 @@ -/* $Id: VBVABase.cpp 35292 2010-12-22 11:56:59Z vboxsync $ */ +/* $Id: VBVABase.cpp 35398 2011-01-04 09:39:07Z vboxsync $ */ /** @file * VirtualBox Video driver, common code - VBVA initialisation and helper * functions. @@ -21,8 +21,7 @@ #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> - -#include <string.h> +#include <iprt/string.h> /* * There is a hardware ring buffer in the graphics device video RAM, formerly diff --git a/src/VBox/Additions/common/crOpenGL/Makefile.kmk b/src/VBox/Additions/common/crOpenGL/Makefile.kmk index 5b74f05cc..13498c054 100644 --- a/src/VBox/Additions/common/crOpenGL/Makefile.kmk +++ b/src/VBox/Additions/common/crOpenGL/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 32622 2010-09-17 20:18:39Z vboxsync $ +# $Id: Makefile.kmk 35578 2011-01-16 19:39:38Z vboxsync $ ## @file # Sub-Makefile for the VirtualBox Guest OpenGL part # @@ -23,7 +23,7 @@ include $(KBUILD_PATH)/subheader.kmk # BLDDIRS += \ $(VBOX_PATH_CROGL_GENFILES)/ - + DLLS.win += \ VBoxOGL \ VBoxOGLarrayspu \ @@ -87,14 +87,14 @@ endif ifdef VBOX_WITH_WDDM VBoxOGL_DEFS.win += VBOX_WITH_WDDM - VBoxOGL_SDKS += WINDDKWLH + VBoxOGL_SDKS.win += WINDDKWLH endif ifeq ($(KBUILD_TARGET),win) #fixme?, INTERMEDIATES.win ain't working VBoxOGL_INTERMEDIATES += $(VBOX_PATH_CROGL_GENFILES)/cr_gl.h if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) - VBoxOGL_NOINST.win.x86 = true + VBoxOGL_NOINST.win = true endif endif ifdef VBoxOGL_DRI @@ -211,6 +211,22 @@ if1of ($(KBUILD_TARGET), linux solaris freebsd) endif endif +ifdef VBOX_WITH_WDDM +# +# VBoxOGL-x86 - x86 VBoxOGL version built for amd64 build +# +DLLS.win.amd64 += VBoxOGL-x86 +VBoxOGL-x86_EXTENDS = VBoxOGL +VBoxOGL-x86_BLD_TRG_ARCH = x86 +VBoxOGL-x86_LIBS = $(VBOX_LIB_IPRT_GUEST_R3_SHARED_X86) \ + $(VBOX_LIB_VBGL_R3_SHARED_X86) \ + $(VBOX_LIB_OGL_CRUTIL_X86) \ + $(PATH_LIB)/additions/VBoxOGLspuload-x86$(VBOX_SUFF_LIB) +VBoxOGL-x86_SOURCES.win = $(subst cropengl.def,cropengl-x86.def,$(VBoxOGL_SOURCES.win)) +VBoxOGL-x86_CLEAN.win = $(subst cropengl.def,cropengl-x86.def,$(VBoxOGL_CLEAN.win)) +VBoxOGL-x86_DEFS = $(VBoxOGL_DEFS) VBOX_WDDM_WOW64 +endif + # # Generate files for VBoxOGL. # @@ -243,6 +259,13 @@ $(VBOX_PATH_CROGL_GENFILES)/windows_exports.asm: \ | $$(dir $$@) $(call MSG_GENERATE,python,$@,$<) $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) + ifdef VBOX_WITH_WDDM + ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64) +$(VBOX_PATH_CROGL_GENFILES)/cropengl-x86.def: $(PATH_SUB_CURRENT)/defs.py $(VBOX_CROGL_API_FILES) | $$(dir $$@) + $(call MSG_GENERATE,python,$@,$<) + $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) + endif #ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64) + endif #ifdef VBOX_WITH_WDDM else if1of ($(KBUILD_TARGET), linux solaris freebsd) $(VBOX_PATH_CROGL_GENFILES)/getprocaddress.c: $(PATH_SUB_CURRENT)/getprocaddress.py $(VBOX_CROGL_API_FILES) | $$(dir $$@) $(call MSG_GENERATE,python,$@,$<) @@ -359,7 +382,7 @@ if1of ($(KBUILD_TARGET), linux solaris freebsd) $(VBOX_MESA_INCS) endif if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) - VBoxOGLarrayspu_NOINST.win.x86 = true + VBoxOGLarrayspu_NOINST.win = true endif VBoxOGLarrayspu_INCS.darwin += $(PATH_OUT)/obj/VBoxOGL VBoxOGLarrayspu_INTERMEDIATES = \ @@ -377,6 +400,19 @@ VBoxOGLarrayspu_LIBS = \ $(PATH_LIB)/additions/VBoxOGLspuload$(VBOX_SUFF_LIB) \ $(PATH_LIB)/additions/VBoxOGLcrstate$(VBOX_SUFF_LIB) +ifdef VBOX_WITH_WDDM +# +# VBoxOGLarrayspu-x86 - x86 version of VBoxOGLarrayspu built for amd64 build +# +DLLS.win.amd64 += VBoxOGLarrayspu-x86 +VBoxOGLarrayspu-x86_EXTENDS = VBoxOGLarrayspu +VBoxOGLarrayspu-x86_BLD_TRG_ARCH = x86 +VBoxOGLarrayspu-x86_LIBS = $(VBOX_LIB_OGL_CRUTIL_X86) \ + $(PATH_LIB)/additions/VBoxOGLspuload-x86$(VBOX_SUFF_LIB) \ + $(PATH_LIB)/additions/VBoxOGLcrstate-x86$(VBOX_SUFF_LIB) +VBoxOGLarrayspu-x86_DEFS = $(VBoxOGLarrayspu_DEFS) VBOX_WDDM_WOW64 +endif + # # VBoxOGLpassthroughspu # @@ -388,7 +424,7 @@ if1of ($(KBUILD_TARGET), linux solaris freebsd) $(VBOX_MESA_INCS) endif if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) - VBoxOGLpassthroughspu_NOINST.win.x86 = true + VBoxOGLpassthroughspu_NOINST.win = true endif VBoxOGLpassthroughspu_SOURCES = \ passthrough/passthroughspu_init.c \ @@ -400,6 +436,17 @@ VBoxOGLpassthroughspu_CLEAN = \ $(VBOX_PATH_CROGL_GENFILES)/passthroughspu.c VBoxOGLpassthroughspu_LIBS = \ $(VBOX_LIB_OGL_CRUTIL) + +ifdef VBOX_WITH_WDDM +# +# VBoxOGLpassthroughspu-x86 - x86 version of VBoxOGLpassthroughspu built for amd64 build +# +DLLS.win.amd64 += VBoxOGLpassthroughspu-x86 +VBoxOGLpassthroughspu-x86_EXTENDS = VBoxOGLpassthroughspu +VBoxOGLpassthroughspu-x86_BLD_TRG_ARCH = x86 +VBoxOGLpassthroughspu-x86_LIBS = $(VBOX_LIB_OGL_CRUTIL_X86) +VBoxOGLpassthroughspu-x86_DEFS = $(VBoxOGLpassthroughspu_DEFS) VBOX_WDDM_WOW64 +endif # # Generate files for VBoxOGLpassthroughspu. @@ -420,7 +467,7 @@ if1of ($(KBUILD_TARGET), linux solaris freebsd) $(VBOX_MESA_INCS) endif if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) - VBoxOGLpackspu_NOINST.win.x86 = true + VBoxOGLpackspu_NOINST.win = true endif VBoxOGLpackspu_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/packspu_proto.h \ @@ -459,6 +506,20 @@ VBoxOGLpackspu_LIBS = \ $(PATH_LIB)/additions/VBoxOGLcrstate$(VBOX_SUFF_LIB) \ $(PATH_LIB)/additions/VBoxOGLcrpacker$(VBOX_SUFF_LIB) +ifdef VBOX_WITH_WDDM +# +# VBoxOGLpackspu-x86 - x86 version of VBoxOGLpackspu built for amd64 build +# +DLLS.win.amd64 += VBoxOGLpackspu-x86 +VBoxOGLpackspu-x86_EXTENDS = VBoxOGLpackspu +VBoxOGLpackspu-x86_BLD_TRG_ARCH = x86 +VBoxOGLpackspu-x86_LIBS = $(VBOX_LIB_OGL_CRUTIL_X86) \ + $(PATH_LIB)/additions/VBoxOGLspuload-x86$(VBOX_SUFF_LIB) \ + $(PATH_LIB)/additions/VBoxOGLcrstate-x86$(VBOX_SUFF_LIB) \ + $(PATH_LIB)/additions/VBoxOGLcrpacker-x86$(VBOX_SUFF_LIB) +VBoxOGLpackspu-x86_DEFS = $(VBoxOGLpackspu_DEFS) VBOX_WDDM_WOW64 +endif + # # Generate files for VBoxOGLpackspu. # @@ -493,7 +554,7 @@ if1of ($(KBUILD_TARGET), linux solaris freebsd) $(VBOX_MESA_INCS) endif if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) - VBoxOGLfeedbackspu_NOINST.win.x86 = true + VBoxOGLfeedbackspu_NOINST.win = true endif VBoxOGLarrayspu_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/feedbackspu_proto.h @@ -514,6 +575,19 @@ VBoxOGLfeedbackspu_LIBS = \ $(VBOX_LIB_OGL_CRUTIL) \ $(PATH_LIB)/additions/VBoxOGLspuload$(VBOX_SUFF_LIB) \ $(PATH_LIB)/additions/VBoxOGLcrstate$(VBOX_SUFF_LIB) + +ifdef VBOX_WITH_WDDM +# +# VBoxOGLfeedbackspu-x86 - x86 version of VBoxOGLfeedbackspu built for amd64 build +# +DLLS.win.amd64 += VBoxOGLfeedbackspu-x86 +VBoxOGLfeedbackspu-x86_EXTENDS = VBoxOGLfeedbackspu +VBoxOGLfeedbackspu-x86_BLD_TRG_ARCH = x86 +VBoxOGLfeedbackspu-x86_LIBS = $(VBOX_LIB_OGL_CRUTIL_X86) \ + $(PATH_LIB)/additions/VBoxOGLspuload-x86$(VBOX_SUFF_LIB) \ + $(PATH_LIB)/additions/VBoxOGLcrstate-x86$(VBOX_SUFF_LIB) +VBoxOGLfeedbackspu-x86_DEFS = $(VBoxOGLfeedbackspu_DEFS) VBOX_WDDM_WOW64 +endif # # Generate files for VBoxOGLfeedbackspu. diff --git a/src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc b/src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc index 2ef56ea82..f5240bf22 100644 --- a/src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc +++ b/src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc @@ -1,4 +1,4 @@ -/* $Id: VBoxCROGL.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: VBoxCROGL.rc 35319 2010-12-24 15:42:36Z vboxsync $ */ /** @file * VBoxCROGL - Resource file containing version info and icon. */ @@ -38,7 +38,11 @@ BEGIN VALUE "FileVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD "." VBOX_SVN_REV "\0" VALUE "InternalName", "VBoxCROGL\0" VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT +#ifdef VBOX_WDDM_WOW64 + VALUE "OriginalFilename", "VBoxCROGL-x86.dll\0" +#else VALUE "OriginalFilename", "VBoxCROGL.dll\0" +#endif VALUE "ProductName", VBOX_PRODUCT " Guest Additions\0" VALUE "ProductVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD ".r" VBOX_SVN_REV "\0" END diff --git a/src/VBox/Additions/common/crOpenGL/array/arrayspu.rc b/src/VBox/Additions/common/crOpenGL/array/arrayspu.rc index 256a6157d..bff467cf2 100644 --- a/src/VBox/Additions/common/crOpenGL/array/arrayspu.rc +++ b/src/VBox/Additions/common/crOpenGL/array/arrayspu.rc @@ -1,4 +1,4 @@ -/* $Id: arrayspu.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: arrayspu.rc 35319 2010-12-24 15:42:36Z vboxsync $ */ /** @file * VBoxOGLarrayspu.so - Resource file containing version info and icon. */ @@ -38,7 +38,11 @@ BEGIN VALUE "FileVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD "." VBOX_SVN_REV "\0" VALUE "InternalName", "VBoxOGLarrayspu\0" VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT +#ifdef VBOX_WDDM_WOW64 + VALUE "OriginalFilename", "VBoxOGLarrayspu-x86.dll\0" +#else VALUE "OriginalFilename", "VBoxOGLarrayspu.dll\0" +#endif VALUE "ProductName", VBOX_PRODUCT " Guest Additions\0" VALUE "ProductVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD ".r" VBOX_SVN_REV "\0" END diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu.rc b/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu.rc index 9cf102ddc..64dbaddc9 100644 --- a/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu.rc +++ b/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu.rc @@ -1,4 +1,4 @@ -/* $Id: feedbackspu.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: feedbackspu.rc 35319 2010-12-24 15:42:36Z vboxsync $ */ /** @file * VBoxOGLfeedbackspu - Resource file containing version info and icon. */ @@ -38,7 +38,11 @@ BEGIN VALUE "FileVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD "." VBOX_SVN_REV "\0" VALUE "InternalName", "VBoxOGLfeedbackpu\0" VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT +#ifdef VBOX_WDDM_WOW64 + VALUE "OriginalFilename", "VBoxOGLfeedbackpu-x86.dll\0" +#else VALUE "OriginalFilename", "VBoxOGLfeedbackpu.dll\0" +#endif VALUE "ProductName", VBOX_PRODUCT " Guest Additions\0" VALUE "ProductVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD ".r" VBOX_SVN_REV "\0" END diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu.rc b/src/VBox/Additions/common/crOpenGL/pack/packspu.rc index b4291cfde..337538c26 100644 --- a/src/VBox/Additions/common/crOpenGL/pack/packspu.rc +++ b/src/VBox/Additions/common/crOpenGL/pack/packspu.rc @@ -1,4 +1,4 @@ -/* $Id: packspu.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: packspu.rc 35319 2010-12-24 15:42:36Z vboxsync $ */ /** @file * VBoxOGLpackspu.so - Resource file containing version info and icon. */ @@ -38,7 +38,11 @@ BEGIN VALUE "FileVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD "." VBOX_SVN_REV "\0" VALUE "InternalName", "VBoxOGLpackspu\0" VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT +#ifdef VBOX_WDDM_WOW64 + VALUE "OriginalFilename", "VBoxOGLpackspu-x86.dll\0" +#else VALUE "OriginalFilename", "VBoxOGLpackspu.dll\0" +#endif VALUE "ProductName", VBOX_PRODUCT " Guest Additions\0" VALUE "ProductVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD ".r" VBOX_SVN_REV "\0" END diff --git a/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu.rc b/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu.rc index 56de64321..2f0e60117 100644 --- a/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu.rc +++ b/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu.rc @@ -1,4 +1,4 @@ -/* $Id: passthroughspu.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: passthroughspu.rc 35319 2010-12-24 15:42:36Z vboxsync $ */ /** @file * VBoxOGLpassthroughspu - Resource file containing version info and icon. */ @@ -38,7 +38,11 @@ BEGIN VALUE "FileVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD "." VBOX_SVN_REV "\0" VALUE "InternalName", "VBoxOGLpassthroughspu\0" VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT +#ifdef VBOX_WDDM_WOW64 + VALUE "OriginalFilename", "VBoxOGLpassthroughspu-x86.dll\0" +#else VALUE "OriginalFilename", "VBoxOGLpassthroughspu.dll\0" +#endif VALUE "ProductName", VBOX_PRODUCT " Guest Additions\0" VALUE "ProductVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD ".r" VBOX_SVN_REV "\0" END diff --git a/src/VBox/Additions/freebsd/drm/Makefile.kmk b/src/VBox/Additions/freebsd/drm/Makefile.kmk index 0b4e37ad9..ae7c507bb 100644 --- a/src/VBox/Additions/freebsd/drm/Makefile.kmk +++ b/src/VBox/Additions/freebsd/drm/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the vboxvideo DRM module (FreeBSD kernel OpenGL module). # @@ -46,7 +46,7 @@ vboxvideo_drm_NAME = vboxvideo vboxvideo_drm_DEFS = VBOX_WITH_HGCM VBOX_SVN_REV=$(VBOX_SVN_REV) vboxvideo_drm_DEPS += $(VBOX_SVN_REV_KMK) vboxvideo_drm_INCS.freebsd = \ - $(PATH_vboxvideo_drm) \ + $(vboxvideo_drm_0_OUTDIR) \ $(PATH_INS)/gen-sys-hdrs vboxvideo_drm_SOURCES = vboxvideo_drm.c vboxvideo_drm_LIBS = \ @@ -56,15 +56,15 @@ vboxvideo_drm_ORDERDEPS.freebsd = \ $(PATH_INS)/gen-sys-hdrs/pci_if.h \ $(PATH_INS)/gen-sys-hdrs/bus_if.h \ $(PATH_INS)/gen-sys-hdrs/device_if.h \ - $(PATH_vboxvideo_drm)/opt_drm.h + $(vboxvideo_drm_0_OUTDIR)/opt_drm.h vboxvideo_drm_CLEAN.freebsd = $(vboxvideo_drm_DEPS) # # Header for DRM not included by us. # -$$(PATH_vboxvideo_drm)/opt_drm.h: - $(QUIET)$(MKDIR) -p $(PATH_vboxvideo_drm) - $(QUIET)touch $(PATH_vboxvideo_drm)/opt_drm.h +$$(vboxvideo_drm_0_OUTDIR)/opt_drm.h: + $(QUIET)$(MKDIR) -p $(vboxvideo_drm_0_OUTDIR) + $(QUIET)touch $(vboxvideo_drm_0_OUTDIR)/opt_drm.h include $(KBUILD_PATH)/subfooter.kmk diff --git a/src/VBox/Additions/freebsd/vboxvfs/Makefile.kmk b/src/VBox/Additions/freebsd/vboxvfs/Makefile.kmk index e47a2e3cb..b3f855009 100644 --- a/src/VBox/Additions/freebsd/vboxvfs/Makefile.kmk +++ b/src/VBox/Additions/freebsd/vboxvfs/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the FreeBSD Shared folder kernel module. # @@ -30,7 +30,7 @@ vboxvfs_TEMPLATE = VBOXGUESTR0 vboxvfs_DEFS = VBOX_WITH_HGCM vboxvfs_INCS = \ . \ - $(PATH_vboxfs) + $(vboxvfs_0_OUTDIR) vboxvfs_SOURCES = \ vboxvfs_vfsops.c \ vboxvfs_vnops.c @@ -38,27 +38,27 @@ vboxvfs_LIBS = \ $(VBOX_LIB_VBGL_R0) \ $(VBOX_LIB_IPRT_GUEST_R0) vboxvfs_DEPS = \ - $$(PATH_vboxvfs)/vnode_if.h \ - $$(PATH_vboxvfs)/vnode_if_newproto.h \ - $$(PATH_vboxvfs)/vnode_if_typedef.h + $$(vboxvfs_0_OUTDIR)/vnode_if.h \ + $$(vboxvfs_0_OUTDIR)/vnode_if_newproto.h \ + $$(vboxvfs_0_OUTDIR)/vnode_if_typedef.h vboxvfs_CLEAN += $(vboxvfs_DEPS) VBOX_AWK := /usr/bin/awk -$$(PATH_vboxvfs)/vnode_if.h: $(VBOX_FREEBSD_SRC)/kern/vnode_if.src +$$(vboxvfs_0_OUTDIR)/vnode_if.h: $(VBOX_FREEBSD_SRC)/kern/vnode_if.src $(call MSG_TOOL,awk,VBoxGuest,$<,$@) $(QUIET)$(VBOX_AWK) -f $(VBOX_FREEBSD_SRC)/tools/vnode_if.awk $(VBOX_FREEBSD_SRC)/kern/vnode_if.src -h - $(QUIET)$(MV) $(PATH_vboxvfs)/vnode_if.h $(PATH_vboxvfs)/vnode_if.h + $(QUIET)$(MV) $(vboxvfs_0_OUTDIR)/vnode_if.h $(vboxvfs_0_OUTDIR)/vnode_if.h -$$(PATH_vboxvfs)/vnode_if_newproto.h: $(VBOX_FREEBSD_SRC)/kern/vnode_if.src +$$(vboxvfs_0_OUTDIR)/vnode_if_newproto.h: $(VBOX_FREEBSD_SRC)/kern/vnode_if.src $(call MSG_TOOL,awk,VBoxGuest,$<,$@) $(QUIET)$(VBOX_AWK) -f $(VBOX_FREEBSD_SRC)/tools/vnode_if.awk $(VBOX_FREEBSD_SRC)/kern/vnode_if.src -p - $(QUIET)$(MV) $(PATH_vboxvfs)/vnode_if_newproto.h $(PATH_vboxvfs)/vnode_if_newproto.h + $(QUIET)$(MV) $(vboxvfs_0_OUTDIR)/vnode_if_newproto.h $(vboxvfs_0_OUTDIR)/vnode_if_newproto.h -$$(PATH_vboxvfs)/vnode_if_typedef.h: $(VBOX_FREEBSD_SRC)/kern/vnode_if.src +$$(vboxvfs_0_OUTDIR)/vnode_if_typedef.h: $(VBOX_FREEBSD_SRC)/kern/vnode_if.src $(call MSG_TOOL,awk,VBoxGuest,$<,$@) $(QUIET)$(VBOX_AWK) -f $(VBOX_FREEBSD_SRC)/tools/vnode_if.awk $(VBOX_FREEBSD_SRC)/kern/vnode_if.src -q - $(QUIET)$(MV) $(PATH_vboxvfs)/vnode_if_typedef.h $(PATH_vboxvfs)/vnode_if_typedef.h + $(QUIET)$(MV) $(vboxvfs_0_OUTDIR)/vnode_if_typedef.h $(vboxvfs_0_OUTDIR)/vnode_if_typedef.h include $(KBUILD_PATH)/subfooter.kmk diff --git a/src/VBox/Additions/linux/drm/Makefile.kmk b/src/VBox/Additions/linux/drm/Makefile.kmk index df0eb2274..8dae9fbcf 100644 --- a/src/VBox/Additions/linux/drm/Makefile.kmk +++ b/src/VBox/Additions/linux/drm/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 32183 2010-09-01 15:53:42Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the vboxvideo DRM module (linux kernel OpenGL module). # @@ -38,9 +38,9 @@ vboxvideo_drm-sh_INST = $(INST_ADDITIONS)src/vboxvideo/ vboxvideo_drm-sh_MODE = a+rx,u+w vboxvideo_drm-sh_SOURCES = $(subst ",,$(FILES_VBOXVIDEO_DRM_BIN)) vboxvideo_drm-sh_SOURCES += \ - $(PATH_vboxvideo_drm-sh)/build_in_tmp \ + $(vboxvideo_drm-sh_0_OUTDIR)/build_in_tmp \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/do_Module.symvers -vboxvideo_drm-sh_CLEAN += $(PATH_vboxvideo_drm-sh)/build_in_tmp +vboxvideo_drm-sh_CLEAN += $(vboxvideo_drm-sh_0_OUTDIR)/build_in_tmp # @@ -71,7 +71,7 @@ vboxvideo_drm_DEFS += $(foreach inc,$(VBOX_LINUX_INCS),\ ## Scripts needed for building kernel modules -$$(PATH_vboxvideo_drm-sh)/build_in_tmp: \ +$$(vboxvideo_drm-sh_0_OUTDIR)/build_in_tmp: \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/build_in_tmp \ $(VBOX_VERSION_STAMP) \ | $$(dir $$@) diff --git a/src/VBox/Additions/linux/sharedfolders/Makefile.kmk b/src/VBox/Additions/linux/sharedfolders/Makefile.kmk index 2412fefeb..d4696f6a5 100644 --- a/src/VBox/Additions/linux/sharedfolders/Makefile.kmk +++ b/src/VBox/Additions/linux/sharedfolders/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33439 2010-10-25 19:35:58Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the vboxsf (linux shared folders module). # @@ -37,9 +37,9 @@ vboxsf-sh_INST = $(INST_ADDITIONS)src/vboxsf/ vboxsf-sh_MODE = a+rx,u+w vboxsf-sh_SOURCES = $(subst ",,$(FILES_VBOXSF_BIN)) vboxsf-sh_SOURCES += \ - $(PATH_vboxsf-sh)/build_in_tmp \ + $(vboxsf-sh_0_OUTDIR)/build_in_tmp \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/do_Module.symvers -vboxsf-sh_CLEAN += $(PATH_vboxsf-sh)/build_in_tmp +vboxsf-sh_CLEAN += $(vboxsf-sh_0_OUTDIR)/build_in_tmp # @@ -89,7 +89,7 @@ mount.vboxsf_SOURCES = \ ## Scripts needed for building kernel modules -$$(PATH_vboxsf-sh)/build_in_tmp: \ +$$(vboxsf-sh_0_OUTDIR)/build_in_tmp: \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/build_in_tmp \ $(VBOX_VERSION_STAMP) \ | $$(dir $$@) diff --git a/src/VBox/Additions/linux/sharedfolders/lnkops.c b/src/VBox/Additions/linux/sharedfolders/lnkops.c index 4711f308b..cc570c07f 100644 --- a/src/VBox/Additions/linux/sharedfolders/lnkops.c +++ b/src/VBox/Additions/linux/sharedfolders/lnkops.c @@ -1,3 +1,21 @@ +/** @file + * + * vboxsf -- VirtualBox Guest Additions for Linux: + * Operations for symbolic links. + */ + +/* + * Copyright (C) 2010-2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + #include "vfsmod.h" #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) diff --git a/src/VBox/Additions/x11/VBoxClient/Makefile.kmk b/src/VBox/Additions/x11/VBoxClient/Makefile.kmk index 75a41b682..dd764a443 100644 --- a/src/VBox/Additions/x11/VBoxClient/Makefile.kmk +++ b/src/VBox/Additions/x11/VBoxClient/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33540 2010-10-28 09:27:05Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the VirtualBox Guest Addition X11 Client. # @@ -75,10 +75,10 @@ endif # # Actually, this is darn annoying and will *NOT* be tolerated for any new code! # -VBoxClient_LIBPATH += $(PATH_VBoxClient) -VBoxClient_ORDERDEPS = $(PATH_VBoxClient)/libstdc++.a -VBoxClient_CLEAN = $(PATH_VBoxClient)/libstdc++.a -$$(PATH_VBoxClient)/libstdc++.a: +VBoxClient_LIBPATH += $(VBoxClient_0_OUTDIR) +VBoxClient_ORDERDEPS = $(VBoxClient_0_OUTDIR)/libstdc++.a +VBoxClient_CLEAN = $(VBoxClient_0_OUTDIR)/libstdc++.a +$$(VBoxClient_0_OUTDIR)/libstdc++.a: $(call MSG_L1,Forcing static libstdc++) $(QUIET)$(MKDIR) -p $(@D) $(QUIET)$(LN_EXT) -sf `$(TOOL_$(VBOX_GCC_TOOL)_CXX) $(TEMPLATE_VBOXGUESTR3CPPEXE_CXXFLAGS.$(KBUILD_TARGET_ARCH)) -print-file-name=libstdc++.a` $@ \ @@ -90,7 +90,7 @@ ifdef VBOX_X11_SEAMLESS_GUEST # Set this in LocalConfig.kmk if you are working on the X11 clipboard service # to automatically run the unit test at build time. -# OTHERS += $(PATH_tstSeamlessX11-auto)/tstSeamlessX11-auto.run +# OTHERS += $(tstSeamlessX11-auto_0_OUTDIR)/tstSeamlessX11-auto.run PROGRAMS += tstSeamlessX11-auto tstSeamlessX11-auto_TEMPLATE = VBOXR3TSTEXE @@ -101,8 +101,8 @@ ifdef VBOX_X11_SEAMLESS_GUEST tstSeamlessX11-auto_LIBS = \ $(LIB_RUNTIME) - TESTING += $(PATH_tstSeamlessX11-auto)/tstSeamlessX11-auto -$$(PATH_tstSeamlessX11-auto)/tstSeamlessX11-auto.run: \ + TESTING += $(tstSeamlessX11-auto_0_OUTDIR)/tstSeamlessX11-auto +$$(tstSeamlessX11-auto_0_OUTDIR)/tstSeamlessX11-auto.run: \ $$(INSTARGET_tstSeamlessX11-auto) export VBOX_LOG_DEST=nofile; $(INSTARGET_tstSeamlessX11-auto) quiet $(QUIET)$(APPEND) -t "$@" "done" diff --git a/src/VBox/Additions/x11/VBoxClient/main.cpp b/src/VBox/Additions/x11/VBoxClient/main.cpp index 24ac50109..3941f0464 100644 --- a/src/VBox/Additions/x11/VBoxClient/main.cpp +++ b/src/VBox/Additions/x11/VBoxClient/main.cpp @@ -238,22 +238,8 @@ int main(int argc, char *argv[]) vboxClientUsage(pszFileName); exit(1); } - if (fDaemonise) - { - rc = VbglR3Daemonize(false /* fNoChDir */, false /* fNoClose */); - if (RT_FAILURE(rc)) - { - RTPrintf("VBoxClient: failed to daemonize. Exiting.\n"); - LogRel(("VBoxClient: failed to daemonize. Exiting.\n")); -# ifdef DEBUG - RTPrintf("Error %Rrc\n", rc); -# endif - return 1; - } - } - /** @todo explain why we aren't using RTPathUserHome here so it doesn't get - * changed accidentally during some cleanup effort. */ - rc = RTEnvGetEx(RTENV_DEFAULT, "HOME", g_szPidFile, sizeof(g_szPidFile), NULL); + /* Get the path for the pidfiles */ + rc = RTPathUserHome(g_szPidFile, sizeof(g_szPidFile)); if (RT_FAILURE(rc)) { RTPrintf("VBoxClient: failed to get home directory, rc=%Rrc. Exiting.\n", rc); @@ -282,6 +268,19 @@ int main(int argc, char *argv[]) VbglR3Term(); return 1; } + if (fDaemonise) + { + rc = VbglR3Daemonize(false /* fNoChDir */, false /* fNoClose */); + if (RT_FAILURE(rc)) + { + RTPrintf("VBoxClient: failed to daemonize. Exiting.\n"); + LogRel(("VBoxClient: failed to daemonize. Exiting.\n")); +# ifdef DEBUG + RTPrintf("Error %Rrc\n", rc); +# endif + return 1; + } + } /* Set signal handlers to clean up on exit. */ vboxClientSetSignalHandlers(); /* Set an X11 error handler, so that we don't die when we get unavoidable errors. */ diff --git a/src/VBox/Additions/x11/vboxmouse/Makefile.kmk b/src/VBox/Additions/x11/vboxmouse/Makefile.kmk index 185e2b407..283efdc14 100644 --- a/src/VBox/Additions/x11/vboxmouse/Makefile.kmk +++ b/src/VBox/Additions/x11/vboxmouse/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33540 2010-10-28 09:27:05Z vboxsync $ +# $Id: Makefile.kmk 35398 2011-01-04 09:39:07Z vboxsync $ ## @file # Sub-Makefile for the VBox Additions XFree86 and X.org mouse drivers. # @@ -37,7 +37,7 @@ if1of ($(KBUILD_TARGET), linux) GCCUSESGAS AVOID_GLYPHBLT PIXPRIV SINGLEDEPTH XFreeXDGA XvExtension \ XFree86LOADER XFree86Server XF86VIDMODE XvMCExtension SMART_SCHEDULE \ BUILDDEBUG X_BYTE_ORDER=X_LITTLE_ENDIAN DNDEBUG FUNCPROTO=15 NARROWPROTO \ - IN_MODULE XFree86Module PNP_MOUSE + IN_MODULE XFree86Module PNP_MOUSE IN_XF86_MODULE vboxmouse_drv_INCS := \ $(VBOX_PATH_X11_XFREE_4_3)/include \ $(VBOX_PATH_X11_XFREE_4_3)/include/extensions \ @@ -62,7 +62,7 @@ endif DLLS += vboxmouse_drv_70 vboxmouse_drv_70_TEMPLATE = VBOXGUESTR3XORGMOD vboxmouse_drv_70_DEFS = \ - XFree86Server IN_MODULE XFree86Module XFree86LOADER XINPUT XORG_7X + XFree86Server IN_MODULE XFree86Module XFree86LOADER XINPUT XORG_7X IN_XF86_MODULE ifeq ($(KBUILD_TARGET),solaris) # don't use .solaris or anything here. vboxmouse_drv_70_DEFS += _XPG6 __EXTENSIONS__ endif @@ -221,88 +221,88 @@ ifdef VBOX_WITH_TESTCASES if1of ($(KBUILD_TARGET),linux solaris) ifeq ($(KBUILD_HOST_ARCH),$(KBUILD_TARGET_ARCH)) ifndef VBOX_ONLY_SDK - OUR_PATH_VBOXMOUSE=$(PATH_ROOT)/src/VBox/Additions/x11/vboxmouse + VBOXMOUSE_SRC_PATH := $(PATH_SUB_CURRENT) - ifeq ($(KBUILD_TARGET),linux) - TESTING += $(PATH_vboxmouse_drv)/tstvboxmouse68.run - OTHERS += $(PATH_vboxmouse_drv)/tstvboxmouse68.run -$$(PATH_vboxmouse_drv)/tstvboxmouse68.run: $$(INSTARGET_vboxmouse_drv) + ifeq ($(KBUILD_TARGET),linux) + TESTING += $(vboxmouse_drv_0_OUTDIR)/tstvboxmouse68.run + OTHERS += $(vboxmouse_drv_0_OUTDIR)/tstvboxmouse68.run +$$(vboxmouse_drv_0_OUTDIR)/tstvboxmouse68.run: $$(INSTARGET_vboxmouse_drv) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - "$(INSTARGET_vboxmouse_drv)" "$(OUR_PATH_VBOXMOUSE)/undefined_68" --static + "$(INSTARGET_vboxmouse_drv)" "$(VBOXMOUSE_SRC_PATH)/undefined_68" --static $(QUIET)$(APPEND) -t "$@" "done" - endif + endif - TESTING += $(PATH_vboxmouse_drv_70)/tstvboxmouse70.run - OTHERS += $(PATH_vboxmouse_drv_70)/tstvboxmouse70.run -$$(PATH_vboxmouse_drv_70)/tstvboxmouse70.run: $$(INSTARGET_vboxmouse_drv_70) + TESTING += $(vboxmouse_drv_70_0_OUTDIR)/tstvboxmouse70.run + OTHERS += $(vboxmouse_drv_70_0_OUTDIR)/tstvboxmouse70.run +$$(vboxmouse_drv_70_0_OUTDIR)/tstvboxmouse70.run: $$(INSTARGET_vboxmouse_drv_70) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_70) $(OUR_PATH_VBOXMOUSE)/undefined_70 + $(INSTARGET_vboxmouse_drv_70) $(VBOXMOUSE_SRC_PATH)/undefined_70 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxmouse_drv_71)/tstvboxmouse71.run - OTHERS += $(PATH_vboxmouse_drv_71)/tstvboxmouse71.run -$$(PATH_vboxmouse_drv_71)/tstvboxmouse71.run: $$(INSTARGET_vboxmouse_drv_71) + TESTING += $(vboxmouse_drv_71_0_OUTDIR)/tstvboxmouse71.run + OTHERS += $(vboxmouse_drv_71_0_OUTDIR)/tstvboxmouse71.run +$$(vboxmouse_drv_71_0_OUTDIR)/tstvboxmouse71.run: $$(INSTARGET_vboxmouse_drv_71) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_71) $(OUR_PATH_VBOXMOUSE)/undefined_71 + $(INSTARGET_vboxmouse_drv_71) $(VBOXMOUSE_SRC_PATH)/undefined_71 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxmouse_drv_13)/tstvboxmouse13.run - OTHERS += $(PATH_vboxmouse_drv_13)/tstvboxmouse13.run -$$(PATH_vboxmouse_drv_13)/tstvboxmouse13.run: $$(INSTARGET_vboxmouse_drv_13) + TESTING += $(vboxmouse_drv_13_0_OUTDIR)/tstvboxmouse13.run + OTHERS += $(vboxmouse_drv_13_0_OUTDIR)/tstvboxmouse13.run +$$(vboxmouse_drv_13_0_OUTDIR)/tstvboxmouse13.run: $$(INSTARGET_vboxmouse_drv_13) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_13) $(OUR_PATH_VBOXMOUSE)/undefined_15 + $(INSTARGET_vboxmouse_drv_13) $(VBOXMOUSE_SRC_PATH)/undefined_15 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxmouse_drv_14)/tstvboxmouse14.run - OTHERS += $(PATH_vboxmouse_drv_14)/tstvboxmouse14.run -$$(PATH_vboxmouse_drv_14)/tstvboxmouse14.run: $$(INSTARGET_vboxmouse_drv_14) + TESTING += $(vboxmouse_drv_14_0_OUTDIR)/tstvboxmouse14.run + OTHERS += $(vboxmouse_drv_14_0_OUTDIR)/tstvboxmouse14.run +$$(vboxmouse_drv_14_0_OUTDIR)/tstvboxmouse14.run: $$(INSTARGET_vboxmouse_drv_14) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_14) $(OUR_PATH_VBOXMOUSE)/undefined_15 + $(INSTARGET_vboxmouse_drv_14) $(VBOXMOUSE_SRC_PATH)/undefined_15 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxmouse_drv_15)/tstvboxmouse15.run - OTHERS += $(PATH_vboxmouse_drv_15)/tstvboxmouse15.run -$$(PATH_vboxmouse_drv_15)/tstvboxmouse15.run: $$(INSTARGET_vboxmouse_drv_15) + TESTING += $(vboxmouse_drv_15_0_OUTDIR)/tstvboxmouse15.run + OTHERS += $(vboxmouse_drv_15_0_OUTDIR)/tstvboxmouse15.run +$$(vboxmouse_drv_15_0_OUTDIR)/tstvboxmouse15.run: $$(INSTARGET_vboxmouse_drv_15) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_15) $(OUR_PATH_VBOXMOUSE)/undefined_15 + $(INSTARGET_vboxmouse_drv_15) $(VBOXMOUSE_SRC_PATH)/undefined_15 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxmouse_drv_16)/tstvboxmouse16.run - OTHERS += $(PATH_vboxmouse_drv_16)/tstvboxmouse16.run -$$(PATH_vboxmouse_drv_16)/tstvboxmouse16.run: $$(INSTARGET_vboxmouse_drv_16) + TESTING += $(vboxmouse_drv_16_0_OUTDIR)/tstvboxmouse16.run + OTHERS += $(vboxmouse_drv_16_0_OUTDIR)/tstvboxmouse16.run +$$(vboxmouse_drv_16_0_OUTDIR)/tstvboxmouse16.run: $$(INSTARGET_vboxmouse_drv_16) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_16) $(OUR_PATH_VBOXMOUSE)/undefined_15 + $(INSTARGET_vboxmouse_drv_16) $(VBOXMOUSE_SRC_PATH)/undefined_15 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxmouse_drv_17)/tstvboxmouse17.run - OTHERS += $(PATH_vboxmouse_drv_17)/tstvboxmouse17.run -$$(PATH_vboxmouse_drv_17)/tstvboxmouse17.run: $$(INSTARGET_vboxmouse_drv_17) + TESTING += $(vboxmouse_drv_17_0_OUTDIR)/tstvboxmouse17.run + OTHERS += $(vboxmouse_drv_17_0_OUTDIR)/tstvboxmouse17.run +$$(vboxmouse_drv_17_0_OUTDIR)/tstvboxmouse17.run: $$(INSTARGET_vboxmouse_drv_17) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_17) $(OUR_PATH_VBOXMOUSE)/undefined_15 + $(INSTARGET_vboxmouse_drv_17) $(VBOXMOUSE_SRC_PATH)/undefined_15 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxmouse_drv_18)/tstvboxmouse18.run - OTHERS += $(PATH_vboxmouse_drv_18)/tstvboxmouse18.run -$$(PATH_vboxmouse_drv_18)/tstvboxmouse18.run: $$(INSTARGET_vboxmouse_drv_18) + TESTING += $(vboxmouse_drv_18_0_OUTDIR)/tstvboxmouse18.run + OTHERS += $(vboxmouse_drv_18_0_OUTDIR)/tstvboxmouse18.run +$$(vboxmouse_drv_18_0_OUTDIR)/tstvboxmouse18.run: $$(INSTARGET_vboxmouse_drv_18) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_18) $(OUR_PATH_VBOXMOUSE)/undefined_15 + $(INSTARGET_vboxmouse_drv_18) $(VBOXMOUSE_SRC_PATH)/undefined_15 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxmouse_drv_19)/tstvboxmouse19.run - OTHERS += $(PATH_vboxmouse_drv_19)/tstvboxmouse19.run -$$(PATH_vboxmouse_drv_19)/tstvboxmouse19.run: $$(INSTARGET_vboxmouse_drv_19) + TESTING += $(vboxmouse_drv_19_0_OUTDIR)/tstvboxmouse19.run + OTHERS += $(vboxmouse_drv_19_0_OUTDIR)/tstvboxmouse19.run +$$(vboxmouse_drv_19_0_OUTDIR)/tstvboxmouse19.run: $$(INSTARGET_vboxmouse_drv_19) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxmouse_drv_19) $(OUR_PATH_VBOXMOUSE)/undefined_15 + $(INSTARGET_vboxmouse_drv_19) $(VBOXMOUSE_SRC_PATH)/undefined_15 $(QUIET)$(APPEND) -t "$@" "done" endif # ! VBOX_ONLY_SDK @@ -312,3 +312,4 @@ $$(PATH_vboxmouse_drv_19)/tstvboxmouse19.run: $$(INSTARGET_vboxmouse_drv_19) endif # VBOX_WITH_TESTCASES include $(KBUILD_PATH)/subfooter.kmk + diff --git a/src/VBox/Additions/x11/vboxmouse/VBoxUtils.c b/src/VBox/Additions/x11/vboxmouse/VBoxUtils.c index eb8b96601..d9692399e 100644 --- a/src/VBox/Additions/x11/vboxmouse/VBoxUtils.c +++ b/src/VBox/Additions/x11/vboxmouse/VBoxUtils.c @@ -23,12 +23,7 @@ #include "xf86.h" #define NEED_XF86_TYPES -#ifdef NO_ANSIC -# include <errno.h> -# include <string.h> -#else -# include "xf86_ansic.h" -#endif +#include <iprt/string.h> #include "compiler.h" /** diff --git a/src/VBox/Additions/x11/vboxvideo/Makefile.kmk b/src/VBox/Additions/x11/vboxvideo/Makefile.kmk index 44fb9d63b..1c55d2bd5 100644 --- a/src/VBox/Additions/x11/vboxvideo/Makefile.kmk +++ b/src/VBox/Additions/x11/vboxvideo/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34997 2010-12-13 12:48:18Z vboxsync $ +# $Id: Makefile.kmk 35398 2011-01-04 09:39:07Z vboxsync $ ## @file # Sub-Makefile for the VBox Linux Additions X.org graphics driver. # @@ -37,7 +37,7 @@ vboxvideo_drv_DEFS = \ GCCUSESGAS AVOID_GLYPHBLT PIXPRIV SINGLEDEPTH XFreeXDGA XvExtension \ XFree86LOADER XFree86Server XF86VIDMODE XvMCExtension SMART_SCHEDULE \ BUILDDEBUG X_BYTE_ORDER=X_LITTLE_ENDIAN DNDEBUG FUNCPROTO=15 NARROWPROTO \ - IN_MODULE XFree86Module + IN_MODULE XFree86Module IN_XF86_MODULE vboxvideo_drv_DEFS += memset=xf86memset memcpy=xf86memcpy vboxvideo_drv_INCS = \ $(VBOX_PATH_X11_XFREE_4_3)/include \ @@ -74,11 +74,11 @@ vboxvideo_drv_SOURCES = \ vboxvideo.c \ vboxutils.c \ $(PATH_ROOT)/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp \ + $(PATH_ROOT)/src/VBox/Additions/common/VBoxVideo/Modesetting.cpp \ + $(PATH_ROOT)/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp \ $(PATH_ROOT)/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp \ $(PATH_ROOT)/src/VBox/Runtime/common/alloc/heapsimple.cpp \ - $(PATH_ROOT)/src/VBox/Runtime/common/alloc/heapoffset.cpp \ - $(PATH_ROOT)/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp \ - $(PATH_ROOT)/src/VBox/Additions/common/VBoxVideo/Modesetting.cpp + $(PATH_ROOT)/src/VBox/Runtime/common/alloc/heapoffset.cpp # @@ -96,7 +96,7 @@ if1of ($(KBUILD_TARGET), linux) -Wno-conversion -Wno-unused-parameter $(VBOX_GCC_Wno-variadic-macros) # template? endif vboxvideo_drv_70_DEFS := \ - XFree86Server IN_MODULE XFree86Module XFree86LOADER XORG_7X RENDER=1 + XFree86Server IN_MODULE XFree86Module XFree86LOADER XORG_7X RENDER=1 IN_XF86_MODULE ifeq ($(KBUILD_TARGET),solaris) # don't use .solaris or anything here. vboxvideo_drv_70_DEFS += __EXTENSIONS__ vboxvideo_drv_70_CFLAGS += -D_XPG6 # Until we have moved the C++ bits into a library @@ -297,88 +297,88 @@ ifdef VBOX_WITH_TESTCASES if1of ($(KBUILD_TARGET),linux solaris) ifeq ($(KBUILD_HOST_ARCH),$(KBUILD_TARGET_ARCH)) ifndef VBOX_ONLY_SDK - OUR_PATH_VBOXVIDEO=$(PATH_ROOT)/src/VBox/Additions/x11/vboxvideo + VBOXVIDEO_SRC_PATH := $(PATH_SUB_CURRENT) ifeq ($(KBUILD_TARGET),linux) - TESTING += $(PATH_vboxvideo_drv)/tstvboxvideo68.run - OTHERS += $(PATH_vboxvideo_drv)/tstvboxvideo68.run -$$(PATH_vboxvideo_drv)/tstvboxvideo68.run: $$(INSTARGET_vboxvideo_drv) + TESTING += $(vboxvideo_drv_0_OUTDIR)/tstvboxvideo68.run + OTHERS += $(vboxvideo_drv_0_OUTDIR)/tstvboxvideo68.run +$$(vboxvideo_drv_0_OUTDIR)/tstvboxvideo68.run: $$(INSTARGET_vboxvideo_drv) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv) $(OUR_PATH_VBOXVIDEO)/undefined_68 --static + $(INSTARGET_vboxvideo_drv) $(VBOXVIDEO_SRC_PATH)/undefined_68 --static $(QUIET)$(APPEND) -t "$@" "done" endif - TESTING += $(PATH_vboxvideo_drv_70)/tstvboxvideo70.run - OTHERS += $(PATH_vboxvideo_drv_70)/tstvboxvideo70.run -$$(PATH_vboxvideo_drv_70)/tstvboxvideo70.run: $$(INSTARGET_vboxvideo_drv_70) + TESTING += $(vboxvideo_drv_70_0_OUTDIR)/tstvboxvideo70.run + OTHERS += $(vboxvideo_drv_70_0_OUTDIR)/tstvboxvideo70.run +$$(vboxvideo_drv_70_0_OUTDIR)/tstvboxvideo70.run: $$(INSTARGET_vboxvideo_drv_70) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_70) $(OUR_PATH_VBOXVIDEO)/undefined_70 + $(INSTARGET_vboxvideo_drv_70) $(VBOXVIDEO_SRC_PATH)/undefined_70 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxvideo_drv_71)/tstvboxvideo71.run - OTHERS += $(PATH_vboxvideo_drv_71)/tstvboxvideo71.run -$$(PATH_vboxvideo_drv_71)/tstvboxvideo71.run: $$(INSTARGET_vboxvideo_drv_71) + TESTING += $(vboxvideo_drv_71_0_OUTDIR)/tstvboxvideo71.run + OTHERS += $(vboxvideo_drv_71_0_OUTDIR)/tstvboxvideo71.run +$$(vboxvideo_drv_71_0_OUTDIR)/tstvboxvideo71.run: $$(INSTARGET_vboxvideo_drv_71) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_71) $(OUR_PATH_VBOXVIDEO)/undefined_70 + $(INSTARGET_vboxvideo_drv_71) $(VBOXVIDEO_SRC_PATH)/undefined_70 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxvideo_drv_13)/tstvboxvideo13.run - OTHERS += $(PATH_vboxvideo_drv_13)/tstvboxvideo13.run -$$(PATH_vboxvideo_drv_13)/tstvboxvideo13.run: $$(INSTARGET_vboxvideo_drv_13) + TESTING += $(vboxvideo_drv_13_0_OUTDIR)/tstvboxvideo13.run + OTHERS += $(vboxvideo_drv_13_0_OUTDIR)/tstvboxvideo13.run +$$(vboxvideo_drv_13_0_OUTDIR)/tstvboxvideo13.run: $$(INSTARGET_vboxvideo_drv_13) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_13) $(OUR_PATH_VBOXVIDEO)/undefined_13 + $(INSTARGET_vboxvideo_drv_13) $(VBOXVIDEO_SRC_PATH)/undefined_13 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxvideo_drv_14)/tstvboxvideo14.run - OTHERS += $(PATH_vboxvideo_drv_14)/tstvboxvideo14.run -$$(PATH_vboxvideo_drv_14)/tstvboxvideo14.run: $$(INSTARGET_vboxvideo_drv_14) + TESTING += $(vboxvideo_drv_14_0_OUTDIR)/tstvboxvideo14.run + OTHERS += $(vboxvideo_drv_14_0_OUTDIR)/tstvboxvideo14.run +$$(vboxvideo_drv_14_0_OUTDIR)/tstvboxvideo14.run: $$(INSTARGET_vboxvideo_drv_14) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_14) $(OUR_PATH_VBOXVIDEO)/undefined_13 + $(INSTARGET_vboxvideo_drv_14) $(VBOXVIDEO_SRC_PATH)/undefined_13 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxvideo_drv_15)/tstvboxvideo15.run - OTHERS += $(PATH_vboxvideo_drv_15)/tstvboxvideo15.run -$$(PATH_vboxvideo_drv_15)/tstvboxvideo15.run: $$(INSTARGET_vboxvideo_drv_15) + TESTING += $(vboxvideo_drv_15_0_OUTDIR)/tstvboxvideo15.run + OTHERS += $(vboxvideo_drv_15_0_OUTDIR)/tstvboxvideo15.run +$$(vboxvideo_drv_15_0_OUTDIR)/tstvboxvideo15.run: $$(INSTARGET_vboxvideo_drv_15) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_15) $(OUR_PATH_VBOXVIDEO)/undefined_13 + $(INSTARGET_vboxvideo_drv_15) $(VBOXVIDEO_SRC_PATH)/undefined_13 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxvideo_drv_16)/tstvboxvideo16.run - OTHERS += $(PATH_vboxvideo_drv_16)/tstvboxvideo16.run -$$(PATH_vboxvideo_drv_16)/tstvboxvideo16.run: $$(INSTARGET_vboxvideo_drv_16) + TESTING += $(vboxvideo_drv_16_0_OUTDIR)/tstvboxvideo16.run + OTHERS += $(vboxvideo_drv_16_0_OUTDIR)/tstvboxvideo16.run +$$(vboxvideo_drv_16_0_OUTDIR)/tstvboxvideo16.run: $$(INSTARGET_vboxvideo_drv_16) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_16) $(OUR_PATH_VBOXVIDEO)/undefined_13 + $(INSTARGET_vboxvideo_drv_16) $(VBOXVIDEO_SRC_PATH)/undefined_13 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxvideo_drv_17)/tstvboxvideo17.run - OTHERS += $(PATH_vboxvideo_drv_17)/tstvboxvideo17.run -$$(PATH_vboxvideo_drv_17)/tstvboxvideo17.run: $$(INSTARGET_vboxvideo_drv_17) + TESTING += $(vboxvideo_drv_17_0_OUTDIR)/tstvboxvideo17.run + OTHERS += $(vboxvideo_drv_17_0_OUTDIR)/tstvboxvideo17.run +$$(vboxvideo_drv_17_0_OUTDIR)/tstvboxvideo17.run: $$(INSTARGET_vboxvideo_drv_17) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_17) $(OUR_PATH_VBOXVIDEO)/undefined_13 + $(INSTARGET_vboxvideo_drv_17) $(VBOXVIDEO_SRC_PATH)/undefined_13 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxvideo_drv_18)/tstvboxvideo18.run - OTHERS += $(PATH_vboxvideo_drv_18)/tstvboxvideo18.run -$$(PATH_vboxvideo_drv_18)/tstvboxvideo18.run: $$(INSTARGET_vboxvideo_drv_18) + TESTING += $(vboxvideo_drv_18_0_OUTDIR)/tstvboxvideo18.run + OTHERS += $(vboxvideo_drv_18_0_OUTDIR)/tstvboxvideo18.run +$$(vboxvideo_drv_18_0_OUTDIR)/tstvboxvideo18.run: $$(INSTARGET_vboxvideo_drv_18) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_18) $(OUR_PATH_VBOXVIDEO)/undefined_13 + $(INSTARGET_vboxvideo_drv_18) $(VBOXVIDEO_SRC_PATH)/undefined_13 $(QUIET)$(APPEND) -t "$@" "done" - TESTING += $(PATH_vboxvideo_drv_19)/tstvboxvideo19.run - OTHERS += $(PATH_vboxvideo_drv_19)/tstvboxvideo19.run -$$(PATH_vboxvideo_drv_19)/tstvboxvideo19.run: $$(INSTARGET_vboxvideo_drv_19) + TESTING += $(vboxvideo_drv_19_0_OUTDIR)/tstvboxvideo19.run + OTHERS += $(vboxvideo_drv_19_0_OUTDIR)/tstvboxvideo19.run +$$(vboxvideo_drv_19_0_OUTDIR)/tstvboxvideo19.run: $$(INSTARGET_vboxvideo_drv_19) $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ - $(INSTARGET_vboxvideo_drv_19) $(OUR_PATH_VBOXVIDEO)/undefined_13 + $(INSTARGET_vboxvideo_drv_19) $(VBOXVIDEO_SRC_PATH)/undefined_13 $(QUIET)$(APPEND) -t "$@" "done" endif # ! VBOX_ONLY_SDK diff --git a/src/VBox/Additions/x11/vboxvideo/vboxutils.c b/src/VBox/Additions/x11/vboxvideo/vboxutils.c index 8d9d73722..e0e975579 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxutils.c +++ b/src/VBox/Additions/x11/vboxvideo/vboxutils.c @@ -24,11 +24,7 @@ #include "xf86.h" #define NEED_XF86_TYPES -#ifdef NO_ANSIC -# include <string.h> -#else -# include "xf86_ansic.h" -#endif +#include <iprt/string.h> #include "compiler.h" #include "cursorstr.h" @@ -319,7 +315,7 @@ vboxSetupVRAMVbva(ScrnInfoPtr pScrn, VBOXPtr pVBox) TRACE_LOG("VBVA buffer offset for screen %u: 0x%lx\n", i, (unsigned long) pVBox->cbFBMax); VBoxVBVASetupBufferContext(&pVBox->aVbvaCtx[i], - pVBox->aoffVBVABuffer[i], + pVBox->aoffVBVABuffer[i], VBVA_MIN_BUFFER_SIZE); } TRACE_LOG("Maximum framebuffer size: %lu (0x%lx)\n", diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo.c index bf38af58d..eb02b5c20 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.c +++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.c @@ -1,4 +1,4 @@ -/* $Id: vboxvideo.c 35269 2010-12-20 23:32:03Z vboxsync $ */ +/* $Id: vboxvideo.c 35616 2011-01-18 14:52:52Z vboxsync $ */ /** @file * * Linux Additions X11 graphics driver @@ -278,7 +278,19 @@ static const xf86CrtcConfigFuncsRec VBOXCrtcConfigFuncs = { static void vbox_crtc_dpms(xf86CrtcPtr crtc, int mode) -{ (void) crtc; (void) mode; } +{ + VBOXPtr pVBox = VBOXGetRec(crtc->scrn); + unsigned cDisplay = (uintptr_t)crtc->driver_private; + TRACE_LOG("cDisplay=%u, mode=%i\n", cDisplay, mode); + pVBox->afDisabled[cDisplay] = (mode != DPMSModeOn); + if ( pVBox->aScreenLocation[cDisplay].cx + && pVBox->aScreenLocation[cDisplay].cy) + VBOXSetMode(crtc->scrn, cDisplay, + pVBox->aScreenLocation[cDisplay].cx, + pVBox->aScreenLocation[cDisplay].cy, + pVBox->aScreenLocation[cDisplay].x, + pVBox->aScreenLocation[cDisplay].y); +} static Bool vbox_crtc_lock (xf86CrtcPtr crtc) @@ -299,11 +311,13 @@ vbox_crtc_mode_set (xf86CrtcPtr crtc, DisplayModePtr mode, { (void) mode; VBOXPtr pVBox = VBOXGetRec(crtc->scrn); + unsigned cDisplay = (uintptr_t)crtc->driver_private; TRACE_LOG("name=%s, HDisplay=%d, VDisplay=%d, x=%d, y=%d\n", adjusted_mode->name, adjusted_mode->HDisplay, adjusted_mode->VDisplay, x, y); - VBOXSetMode(crtc->scrn, (uintptr_t)crtc->driver_private, - adjusted_mode->HDisplay, adjusted_mode->VDisplay, x, y); + pVBox->afDisabled[cDisplay] = false; + VBOXSetMode(crtc->scrn, cDisplay, adjusted_mode->HDisplay, + adjusted_mode->VDisplay, x, y); /* Don't remember any modes set while we are seamless, as they are * just temporary. */ if (!vboxGuestIsSeamless(crtc->scrn)) @@ -1075,7 +1089,7 @@ VBOXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Initial CRTC configuration failed!\n"); return (FALSE); } - + /* Initialise randr 1.2 mode-setting functions and set first mode. * Note that the mode won't be usable until the server has resized the * framebuffer to something reasonable. */ @@ -1094,7 +1108,7 @@ VBOXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) vboxAtomVBoxMode(), XA_STRING, 8, PropModeReplace, sizeof(csz), csz, TRUE, FALSE); - + } } @@ -1131,11 +1145,19 @@ VBOXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) pVBox->CloseScreen = pScreen->CloseScreen; pScreen->CloseScreen = VBOXCloseScreen; +#ifdef VBOXVIDEO_13 + pScreen->SaveScreen = xf86SaveScreen; +#else pScreen->SaveScreen = VBOXSaveScreen; +#endif +#ifdef VBOXVIDEO_13 + xf86DPMSInit(pScreen, xf86DPMSSet, 0); +#else /* We probably do want to support power management - even if we just use a dummy function. */ xf86DPMSInit(pScreen, VBOXDisplayPowerManagementSet, 0); +#endif /* Report any unused options (only for the first generation) */ if (serverGeneration == 1) @@ -1159,13 +1181,13 @@ static void vboxClearVRAM(ScrnInfoPtr pScrn, int32_t cNewX, int32_t cNewY) { VBOXPtr pVBox = VBOXGetRec(pScrn); - int64_t cbOldFB, cbNewFB; + uint64_t cbOldFB, cbNewFB; cbOldFB = pVBox->cbLine * pScrn->virtualX; cbNewFB = vboxLineLength(pScrn, cNewX) * cNewY; - if (cbOldFB > pVBox->cbFBMax) + if (cbOldFB > (uint64_t)pVBox->cbFBMax) cbOldFB = 0; - if (cbNewFB > pVBox->cbFBMax) + if (cbNewFB > (uint64_t)pVBox->cbFBMax) cbNewFB = 0; memset(pVBox->base, 0, max(cbOldFB, cbNewFB)); } @@ -1297,7 +1319,7 @@ VBOXSetMode(ScrnInfoPtr pScrn, unsigned cDisplay, unsigned cWidth, unsigned cHeight, int x, int y) { VBOXPtr pVBox = VBOXGetRec(pScrn); - Bool rc = TRUE, fActive = TRUE; + Bool rc = TRUE, fActive = !pVBox->afDisabled[cDisplay]; uint32_t offStart, cwReal = cWidth; TRACE_LOG("cDisplay=%u, cWidth=%u, cHeight=%u, x=%d, y=%d, displayWidth=%d\n", @@ -1319,6 +1341,8 @@ VBOXSetMode(ScrnInfoPtr pScrn, unsigned cDisplay, unsigned cWidth, fActive = FALSE; else cwReal = RT_MIN((int) cWidth, pScrn->displayWidth - x); + TRACE_LOG("pVBox->afDisabled[cDisplay]=%d, fActive=%d\n", + (int)pVBox->afDisabled[cDisplay], (int)fActive); /* Don't fiddle with the hardware if we are switched * to a virtual terminal. */ if (!pVBox->vtSwitch && fActive) diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h index 4af113df7..2ab3cb3c8 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h +++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h @@ -106,11 +106,7 @@ if (!(expr)) \ # include "xf86Resources.h" #endif -#ifndef NO_ANSIC -/* All drivers need this */ -# include "xf86_ansic.h" -#endif - +#include <iprt/string.h> #include "compiler.h" #ifndef PCIACCESS @@ -215,6 +211,8 @@ typedef struct VBOXRec /** Position information for each virtual screen for the purposes of * sending dirty rectangle information to the right one. */ RTRECT2 aScreenLocation[VBOX_VIDEO_MAX_SCREENS]; + /** Has this screen been disabled by the guest? */ + Bool afDisabled[VBOX_VIDEO_MAX_SCREENS]; #ifdef VBOXVIDEO_13 /** The virtual crtcs */ struct _xf86Crtc *paCrtcs[VBOX_VIDEO_MAX_SCREENS]; diff --git a/src/VBox/Debugger/DBGCBuiltInSymbols.cpp b/src/VBox/Debugger/DBGCBuiltInSymbols.cpp index 37ee7315b..bc3fae49c 100644 --- a/src/VBox/Debugger/DBGCBuiltInSymbols.cpp +++ b/src/VBox/Debugger/DBGCBuiltInSymbols.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGCBuiltInSymbols.cpp 31530 2010-08-10 12:24:45Z vboxsync $ */ +/* $Id: DBGCBuiltInSymbols.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGC - Debugger Console, Built-In Symbols. */ @@ -20,12 +20,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> -#include <VBox/dbgf.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> #include <VBox/dis.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/Debugger/DBGCCmdHlp.cpp b/src/VBox/Debugger/DBGCCmdHlp.cpp index a42ee23cf..4d2135a3b 100644 --- a/src/VBox/Debugger/DBGCCmdHlp.cpp +++ b/src/VBox/Debugger/DBGCCmdHlp.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGCCmdHlp.cpp 31966 2010-08-25 16:15:25Z vboxsync $ */ +/* $Id: DBGCCmdHlp.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGC - Debugger Console, Command Helpers. */ @@ -20,12 +20,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> -#include <VBox/dbgf.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> #include <VBox/dis.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/Debugger/DBGCCmdWorkers.cpp b/src/VBox/Debugger/DBGCCmdWorkers.cpp index faff8fb20..c90d01cec 100644 --- a/src/VBox/Debugger/DBGCCmdWorkers.cpp +++ b/src/VBox/Debugger/DBGCCmdWorkers.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGCCmdWorkers.cpp 31530 2010-08-10 12:24:45Z vboxsync $ */ +/* $Id: DBGCCmdWorkers.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGC - Debugger Console, Command Worker Routines. */ @@ -20,12 +20,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> -#include <VBox/dbgf.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> #include <VBox/dis.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/Debugger/DBGCCommands.cpp b/src/VBox/Debugger/DBGCCommands.cpp index 7c4cd9044..acb2aa503 100644 --- a/src/VBox/Debugger/DBGCCommands.cpp +++ b/src/VBox/Debugger/DBGCCommands.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGCCommands.cpp 34902 2010-12-09 16:16:51Z vboxsync $ */ +/* $Id: DBGCCommands.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGC - Debugger Console, Native Commands. */ @@ -20,12 +20,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> -#include <VBox/dbgf.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> #include <VBox/dis.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/Debugger/DBGCEmulateCodeView.cpp b/src/VBox/Debugger/DBGCEmulateCodeView.cpp index ef438bcd1..347ac3bab 100644 --- a/src/VBox/Debugger/DBGCEmulateCodeView.cpp +++ b/src/VBox/Debugger/DBGCEmulateCodeView.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGCEmulateCodeView.cpp 35257 2010-12-20 17:09:00Z vboxsync $ */ +/* $Id: DBGCEmulateCodeView.cpp 35614 2011-01-18 14:44:19Z vboxsync $ */ /** @file * DBGC - Debugger Console, CodeView / WinDbg Emulation. */ @@ -20,10 +20,10 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/cpum.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/cpum.h> #include <VBox/dis.h> #include <VBox/param.h> #include <VBox/err.h> @@ -355,9 +355,11 @@ const DBGCCMD g_aCmdsCodeView[] = { "m", 1, 1, &g_aArgMemoryInfo[0],RT_ELEMENTS(g_aArgMemoryInfo),NULL, 0, dbgcCmdMemoryInfo, "<addr>", "Display information about that piece of memory." }, { "r", 0, 2, &g_aArgReg[0], RT_ELEMENTS(g_aArgReg), NULL, 0, dbgcCmdReg, "[reg [newval]]", "Show or set register(s) - active reg set." }, { "rg", 0, 2, &g_aArgReg[0], RT_ELEMENTS(g_aArgReg), NULL, 0, dbgcCmdRegGuest, "[reg [newval]]", "Show or set register(s) - guest reg set." }, + { "rg32", 0, 0, NULL, 0, NULL, 0, dbgcCmdRegGuest, "", "Show 32-bit guest registers." }, + { "rg64", 0, 0, NULL, 0, NULL, 0, dbgcCmdRegGuest, "", "Show 64-bit guest registers." }, { "rh", 0, 2, &g_aArgReg[0], RT_ELEMENTS(g_aArgReg), NULL, 0, dbgcCmdRegHyper, "[reg [newval]]", "Show or set register(s) - hypervisor reg set." }, { "rt", 0, 0, NULL, 0, NULL, 0, dbgcCmdRegTerse, "", "Toggles terse / verbose register info." }, - { "s", 0, ~0, &g_aArgSearchMem[0], RT_ELEMENTS(g_aArgSearchMem), NULL, 0, dbgcCmdSearchMem, "[options] <range> <pattern>", "Continue last search." }, + { "s", 0, ~0, &g_aArgSearchMem[0], RT_ELEMENTS(g_aArgSearchMem), NULL, 0, dbgcCmdSearchMem, "[options] <range> <pattern>", "Continue last search." }, { "sa", 2, ~0, &g_aArgSearchMemType[0], RT_ELEMENTS(g_aArgSearchMemType), NULL, 0, dbgcCmdSearchMemType, "<range> <pattern>", "Search memory for an ascii string." }, { "sb", 2, ~0, &g_aArgSearchMemType[0], RT_ELEMENTS(g_aArgSearchMemType), NULL, 0, dbgcCmdSearchMemType, "<range> <pattern>", "Search memory for one or more bytes." }, { "sd", 2, ~0, &g_aArgSearchMemType[0], RT_ELEMENTS(g_aArgSearchMemType), NULL, 0, dbgcCmdSearchMemType, "<range> <pattern>", "Search memory for one or more double words." }, @@ -1338,200 +1340,7 @@ static DECLCALLBACK(int) dbgcCmdRegCommon(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P { PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); - /* - * cArgs == 0: Show all - */ - if (cArgs == 0) - { - /* - * Get register context. - */ - PVMCPU pVCpu = VMMGetCpuById(pVM, pDbgc->idCpu); - int rc; - PCPUMCTX pCtx; - PCCPUMCTXCORE pCtxCore; - if (!*pszPrefix) - { - pCtx = CPUMQueryGuestCtxPtr(pVCpu); - pCtxCore = CPUMCTX2CORE(pCtx); - rc = VINF_SUCCESS; - } - else - { - rc = CPUMQueryHyperCtxPtr(pVCpu, &pCtx); - pCtxCore = CPUMGetHyperCtxCore(pVCpu); - } - if (RT_FAILURE(rc)) - return pCmdHlp->pfnVBoxError(pCmdHlp, rc, "Getting register context\n"); - - /* - * Format the flags. - */ - static struct - { - const char *pszSet; const char *pszClear; uint32_t fFlag; - } aFlags[] = - { - { "vip",NULL, X86_EFL_VIP }, - { "vif",NULL, X86_EFL_VIF }, - { "ac", NULL, X86_EFL_AC }, - { "vm", NULL, X86_EFL_VM }, - { "rf", NULL, X86_EFL_RF }, - { "nt", NULL, X86_EFL_NT }, - { "ov", "nv", X86_EFL_OF }, - { "dn", "up", X86_EFL_DF }, - { "ei", "di", X86_EFL_IF }, - { "tf", NULL, X86_EFL_TF }, - { "ng", "pl", X86_EFL_SF }, - { "zr", "nz", X86_EFL_ZF }, - { "ac", "na", X86_EFL_AF }, - { "po", "pe", X86_EFL_PF }, - { "cy", "nc", X86_EFL_CF }, - }; - char szEFlags[80]; - char *psz = szEFlags; - uint32_t efl = pCtxCore->eflags.u32; - for (unsigned i = 0; i < RT_ELEMENTS(aFlags); i++) - { - const char *pszAdd = aFlags[i].fFlag & efl ? aFlags[i].pszSet : aFlags[i].pszClear; - if (pszAdd) - { - strcpy(psz, pszAdd); - psz += strlen(pszAdd); - *psz++ = ' '; - } - } - psz[-1] = '\0'; - - - /* - * Format the registers. - */ - if (pDbgc->fRegTerse) - { - if (CPUMIsGuestIn64BitCodeEx(pCtx)) - { - rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, - "%srax=%016RX64 %srbx=%016RX64 %srcx=%016RX64 %srdx=%016RX64\n" - "%srsi=%016RX64 %srdi=%016RX64 %sr8 =%016RX64 %sr9 =%016RX64\n" - "%sr10=%016RX64 %sr11=%016RX64 %sr12=%016RX64 %sr13=%016RX64\n" - "%sr14=%016RX64 %sr15=%016RX64\n" - "%srip=%016RX64 %srsp=%016RX64 %srbp=%016RX64 %siopl=%d %*s\n" - "%scs=%04x %sds=%04x %ses=%04x %sfs=%04x %sgs=%04x %sss=%04x %seflags=%08x\n", - pszPrefix, pCtxCore->rax, pszPrefix, pCtxCore->rbx, pszPrefix, pCtxCore->rcx, pszPrefix, pCtxCore->rdx, pszPrefix, pCtxCore->rsi, pszPrefix, pCtxCore->rdi, - pszPrefix, pCtxCore->r8, pszPrefix, pCtxCore->r9, pszPrefix, pCtxCore->r10, pszPrefix, pCtxCore->r11, pszPrefix, pCtxCore->r12, pszPrefix, pCtxCore->r13, - pszPrefix, pCtxCore->r14, pszPrefix, pCtxCore->r15, - pszPrefix, pCtxCore->rip, pszPrefix, pCtxCore->rsp, pszPrefix, pCtxCore->rbp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 34 : 31, szEFlags, - pszPrefix, (RTSEL)pCtxCore->cs, pszPrefix, (RTSEL)pCtxCore->ds, pszPrefix, (RTSEL)pCtxCore->es, - pszPrefix, (RTSEL)pCtxCore->fs, pszPrefix, (RTSEL)pCtxCore->gs, pszPrefix, (RTSEL)pCtxCore->ss, pszPrefix, efl); - } - else - rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, - "%seax=%08x %sebx=%08x %secx=%08x %sedx=%08x %sesi=%08x %sedi=%08x\n" - "%seip=%08x %sesp=%08x %sebp=%08x %siopl=%d %*s\n" - "%scs=%04x %sds=%04x %ses=%04x %sfs=%04x %sgs=%04x %sss=%04x %seflags=%08x\n", - pszPrefix, pCtxCore->eax, pszPrefix, pCtxCore->ebx, pszPrefix, pCtxCore->ecx, pszPrefix, pCtxCore->edx, pszPrefix, pCtxCore->esi, pszPrefix, pCtxCore->edi, - pszPrefix, pCtxCore->eip, pszPrefix, pCtxCore->esp, pszPrefix, pCtxCore->ebp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 34 : 31, szEFlags, - pszPrefix, (RTSEL)pCtxCore->cs, pszPrefix, (RTSEL)pCtxCore->ds, pszPrefix, (RTSEL)pCtxCore->es, - pszPrefix, (RTSEL)pCtxCore->fs, pszPrefix, (RTSEL)pCtxCore->gs, pszPrefix, (RTSEL)pCtxCore->ss, pszPrefix, efl); - } - else - { - if (CPUMIsGuestIn64BitCodeEx(pCtx)) - { - rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, - "%srax=%016RX64 %srbx=%016RX64 %srcx=%016RX64 %srdx=%016RX64\n" - "%srsi=%016RX64 %srdi=%016RX64 %sr8 =%016RX64 %sr9 =%016RX64\n" - "%sr10=%016RX64 %sr11=%016RX64 %sr12=%016RX64 %sr13=%016RX64\n" - "%sr14=%016RX64 %sr15=%016RX64\n" - "%srip=%016RX64 %srsp=%016RX64 %srbp=%016RX64 %siopl=%d %*s\n" - "%scs={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%sds={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%ses={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%sfs={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%sgs={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%sss={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%scr0=%016RX64 %scr2=%016RX64 %scr3=%016RX64 %scr4=%016RX64\n" - "%sdr0=%016RX64 %sdr1=%016RX64 %sdr2=%016RX64 %sdr3=%016RX64\n" - "%sdr4=%016RX64 %sdr5=%016RX64 %sdr6=%016RX64 %sdr7=%016RX64\n" - "%sgdtr=%016RX64:%04x %sidtr=%016RX64:%04x %seflags=%08x\n" - "%sldtr={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%str ={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%sSysEnter={cs=%04llx eip=%016RX64 esp=%016RX64}\n" - , - pszPrefix, pCtxCore->rax, pszPrefix, pCtxCore->rbx, pszPrefix, pCtxCore->rcx, pszPrefix, pCtxCore->rdx, pszPrefix, pCtxCore->rsi, pszPrefix, pCtxCore->rdi, - pszPrefix, pCtxCore->r8, pszPrefix, pCtxCore->r9, pszPrefix, pCtxCore->r10, pszPrefix, pCtxCore->r11, pszPrefix, pCtxCore->r12, pszPrefix, pCtxCore->r13, - pszPrefix, pCtxCore->r14, pszPrefix, pCtxCore->r15, - pszPrefix, pCtxCore->rip, pszPrefix, pCtxCore->rsp, pszPrefix, pCtxCore->rbp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 33 : 31, szEFlags, - pszPrefix, (RTSEL)pCtxCore->cs, pCtx->csHid.u64Base, pCtx->csHid.u32Limit, pCtx->csHid.Attr.u, - pszPrefix, (RTSEL)pCtxCore->ds, pCtx->dsHid.u64Base, pCtx->dsHid.u32Limit, pCtx->dsHid.Attr.u, - pszPrefix, (RTSEL)pCtxCore->es, pCtx->esHid.u64Base, pCtx->esHid.u32Limit, pCtx->esHid.Attr.u, - pszPrefix, (RTSEL)pCtxCore->fs, pCtx->fsHid.u64Base, pCtx->fsHid.u32Limit, pCtx->fsHid.Attr.u, - pszPrefix, (RTSEL)pCtxCore->gs, pCtx->gsHid.u64Base, pCtx->gsHid.u32Limit, pCtx->gsHid.Attr.u, - pszPrefix, (RTSEL)pCtxCore->ss, pCtx->ssHid.u64Base, pCtx->ssHid.u32Limit, pCtx->ssHid.Attr.u, - pszPrefix, pCtx->cr0, pszPrefix, pCtx->cr2, pszPrefix, pCtx->cr3, pszPrefix, pCtx->cr4, - pszPrefix, pCtx->dr[0], pszPrefix, pCtx->dr[1], pszPrefix, pCtx->dr[2], pszPrefix, pCtx->dr[3], - pszPrefix, pCtx->dr[4], pszPrefix, pCtx->dr[5], pszPrefix, pCtx->dr[6], pszPrefix, pCtx->dr[7], - pszPrefix, pCtx->gdtr.pGdt, pCtx->gdtr.cbGdt, pszPrefix, pCtx->idtr.pIdt, pCtx->idtr.cbIdt, pszPrefix, efl, - pszPrefix, (RTSEL)pCtx->ldtr, pCtx->ldtrHid.u64Base, pCtx->ldtrHid.u32Limit, pCtx->ldtrHid.Attr.u, - pszPrefix, (RTSEL)pCtx->tr, pCtx->trHid.u64Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u, - pszPrefix, pCtx->SysEnter.cs, pCtx->SysEnter.eip, pCtx->SysEnter.esp); - - rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, - "MSR:\n" - "%sEFER =%016RX64\n" - "%sPAT =%016RX64\n" - "%sSTAR =%016RX64\n" - "%sCSTAR =%016RX64\n" - "%sLSTAR =%016RX64\n" - "%sSFMASK =%016RX64\n" - "%sKERNELGSBASE =%016RX64\n", - pszPrefix, pCtx->msrEFER, - pszPrefix, pCtx->msrPAT, - pszPrefix, pCtx->msrSTAR, - pszPrefix, pCtx->msrCSTAR, - pszPrefix, pCtx->msrLSTAR, - pszPrefix, pCtx->msrSFMASK, - pszPrefix, pCtx->msrKERNELGSBASE); - } - else - rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, - "%seax=%08x %sebx=%08x %secx=%08x %sedx=%08x %sesi=%08x %sedi=%08x\n" - "%seip=%08x %sesp=%08x %sebp=%08x %siopl=%d %*s\n" - "%scs={%04x base=%016RX64 limit=%08x flags=%08x} %sdr0=%016RX64 %sdr1=%016RX64\n" - "%sds={%04x base=%016RX64 limit=%08x flags=%08x} %sdr2=%016RX64 %sdr3=%016RX64\n" - "%ses={%04x base=%016RX64 limit=%08x flags=%08x} %sdr4=%016RX64 %sdr5=%016RX64\n" - "%sfs={%04x base=%016RX64 limit=%08x flags=%08x} %sdr6=%016RX64 %sdr7=%016RX64\n" - "%sgs={%04x base=%016RX64 limit=%08x flags=%08x} %scr0=%016RX64 %scr2=%016RX64\n" - "%sss={%04x base=%016RX64 limit=%08x flags=%08x} %scr3=%016RX64 %scr4=%016RX64\n" - "%sgdtr=%016RX64:%04x %sidtr=%016RX64:%04x %seflags=%08x\n" - "%sldtr={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%str ={%04x base=%016RX64 limit=%08x flags=%08x}\n" - "%sSysEnter={cs=%04llx eip=%08llx esp=%08llx}\n" - "%sFCW=%04x %sFSW=%04x %sFTW=%04x\n" - , - pszPrefix, pCtxCore->eax, pszPrefix, pCtxCore->ebx, pszPrefix, pCtxCore->ecx, pszPrefix, pCtxCore->edx, pszPrefix, pCtxCore->esi, pszPrefix, pCtxCore->edi, - pszPrefix, pCtxCore->eip, pszPrefix, pCtxCore->esp, pszPrefix, pCtxCore->ebp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 33 : 31, szEFlags, - pszPrefix, (RTSEL)pCtxCore->cs, pCtx->csHid.u64Base, pCtx->csHid.u32Limit, pCtx->csHid.Attr.u, pszPrefix, pCtx->dr[0], pszPrefix, pCtx->dr[1], - pszPrefix, (RTSEL)pCtxCore->ds, pCtx->dsHid.u64Base, pCtx->dsHid.u32Limit, pCtx->dsHid.Attr.u, pszPrefix, pCtx->dr[2], pszPrefix, pCtx->dr[3], - pszPrefix, (RTSEL)pCtxCore->es, pCtx->esHid.u64Base, pCtx->esHid.u32Limit, pCtx->esHid.Attr.u, pszPrefix, pCtx->dr[4], pszPrefix, pCtx->dr[5], - pszPrefix, (RTSEL)pCtxCore->fs, pCtx->fsHid.u64Base, pCtx->fsHid.u32Limit, pCtx->fsHid.Attr.u, pszPrefix, pCtx->dr[6], pszPrefix, pCtx->dr[7], - pszPrefix, (RTSEL)pCtxCore->gs, pCtx->gsHid.u64Base, pCtx->gsHid.u32Limit, pCtx->gsHid.Attr.u, pszPrefix, pCtx->cr0, pszPrefix, pCtx->cr2, - pszPrefix, (RTSEL)pCtxCore->ss, pCtx->ssHid.u64Base, pCtx->ssHid.u32Limit, pCtx->ssHid.Attr.u, pszPrefix, pCtx->cr3, pszPrefix, pCtx->cr4, - pszPrefix, pCtx->gdtr.pGdt,pCtx->gdtr.cbGdt, pszPrefix, pCtx->idtr.pIdt, pCtx->idtr.cbIdt, pszPrefix, pCtxCore->eflags, - pszPrefix, (RTSEL)pCtx->ldtr, pCtx->ldtrHid.u64Base, pCtx->ldtrHid.u32Limit, pCtx->ldtrHid.Attr.u, - pszPrefix, (RTSEL)pCtx->tr, pCtx->trHid.u64Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u, - pszPrefix, pCtx->SysEnter.cs, pCtx->SysEnter.eip, pCtx->SysEnter.esp, - pszPrefix, pCtx->fpu.FCW, pszPrefix, pCtx->fpu.FSW, pszPrefix, pCtx->fpu.FTW); - } - - /* - * Disassemble one instruction at cs:[r|e]ip. - */ - if (CPUMIsGuestIn64BitCodeEx(pCtx)) - return pCmdHlp->pfnExec(pCmdHlp, "u %016RX64 L 0", pCtx->rip); - return pCmdHlp->pfnExec(pCmdHlp, "u %04x:%08x L 0", pCtx->cs, pCtx->eip); - } + Assert(cArgs != 0); /* handled by caller */ /* * cArgs == 1: Show the register. @@ -1580,7 +1389,7 @@ static DECLCALLBACK(int) dbgcCmdRegCommon(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P /** - * The 'rg' command. + * The 'rg', 'rg64' and 'rg32' commands. * * @returns VBox status. * @param pCmd Pointer to the command descriptor (as registered). @@ -1591,6 +1400,95 @@ static DECLCALLBACK(int) dbgcCmdRegCommon(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P */ static DECLCALLBACK(int) dbgcCmdRegGuest(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult) { + /* + * Show all registers our selves. + */ + if (cArgs == 0) + { + PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); + bool const f64BitMode = !strcmp(pCmd->pszCmd, "rg64") + || ( !strcmp(pCmd->pszCmd, "rg32") + && CPUMIsGuestIn64BitCodeEx(CPUMQueryGuestCtxPtr(VMMGetCpuById(pVM, pDbgc->idCpu)))); + char szDisAndRegs[8192]; + int rc; + + if (pDbgc->fRegTerse) + { + if (f64BitMode) + rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu, &szDisAndRegs[0], sizeof(szDisAndRegs), + "u %016VR{rip} L 0\n" + "rax=%016VR{rax} rbx=%016VR{rbx} rcx=%016VR{rcx} rdx=%016VR{rdx}\n" + "rsi=%016VR{rsi} rdi=%016VR{rdi} r8 =%016VR{r8} r9 =%016VR{r9}\n" + "r10=%016VR{r10} r11=%016VR{r11} r12=%016VR{r12} r13=%016VR{r13}\n" + "r14=%016VR{r14} r15=%016VR{r15} %VRF{rflags}\n" + "rip=%016VR{rip} rsp=%016VR{rsp} rbp=%016VR{rbp}\n" + "cs=%04VR{cs} ds=%04VR{ds} es=%04VR{es} fs=%04VR{fs} gs=%04VR{gs} ss=%04VR{ss} rflags=%08VR{rflags}\n"); + else + rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu, szDisAndRegs, sizeof(szDisAndRegs), + "u %04VR{cs}:%08VR{eip} L 0\n" + "eax=%08VR{eax} ebx=%08VR{ebx} ecx=%08VR{ecx} edx=%08VR{edx} esi=%08VR{esi} edi=%08VR{edi}\n" + "eip=%08VR{eip} esp=%08VR{esp} ebp=%08VR{ebp} %VRF{eflags}\n" + "cs=%04VR{cs} ds=%04VR{ds} es=%04VR{es} fs=%04VR{fs} gs=%04VR{gs} ss=%04VR{ss} eflags=%08VR{eflags}\n"); + } + else + { + if (f64BitMode) + rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu, &szDisAndRegs[0], sizeof(szDisAndRegs), + "u %016VR{rip} L 0\n" + "rax=%016VR{rax} rbx=%016VR{rbx} rcx=%016VR{rcx} rdx=%016VR{rdx}\n" + "rsi=%016VR{rsi} rdi=%016VR{rdi} r8 =%016VR{r8} r9 =%016VR{r9}\n" + "r10=%016VR{r10} r11=%016VR{r11} r12=%016VR{r12} r13=%016VR{r13}\n" + "r14=%016VR{r14} r15=%016VR{r15} %VRF{rflags}\n" + "rip=%016VR{rip} rsp=%016VR{rsp} rbp=%016VR{rbp}\n" + "cs={%04VR{cs} base=%016VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} cr0=%016VR{cr0}\n" + "ds={%04VR{ds} base=%016VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} cr2=%016VR{cr2}\n" + "es={%04VR{es} base=%016VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} cr3=%016VR{cr3}\n" + "fs={%04VR{fs} base=%016VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} cr4=%016VR{cr4}\n" + "gs={%04VR{gs} base=%016VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}} cr8=%016VR{cr8}\n" + "ss={%04VR{ss} base=%016VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}}\n" + "dr0=%016VR{dr0} dr1=%016VR{dr1} dr2=%016VR{dr2} dr3=%016VR{dr3}\n" + "dr6=%016VR{dr6} dr7=%016VR{dr7}\n" + "gdtr=%016VR{gdtr_base}:%04VR{gdtr_limit} idtr=%016VR{idtr_base}:%04VR{idtr_limit} rflags=%08VR{rflags}\n" + "ldtr={%04VR{ldtr} base=%016VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%08VR{ldtr_attr}}\n" + "tr ={%04VR{tr} base=%016VR{tr_base} limit=%08VR{tr_lim} flags=%08VR{tr_attr}}\n" + " sysenter={cs=%04VR{sysenter_cs} eip=%08VR{sysenter_eip} esp=%08VR{sysenter_esp}}\n" + " efer=%016VR{efer}\n" + " pat=%016VR{pat}\n" + " sf_mask=%016VR{sf_mask}\n" + "krnl_gs_base=%016VR{krnl_gs_base}\n" + " lstar=%016VR{lstar}\n" + " star=%016VR{star} cstar=%016VR{cstar}\n" + "fcw=%04VR{fcw} fsw=%04VR{fsw} ftw=%04VR{ftw} mxcsr=%04VR{mxcsr} mxcsr_mask=%04VR{mxcsr_mask}\n" + ); + else + rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu, szDisAndRegs, sizeof(szDisAndRegs), + "u %04VR{cs}:%08VR{eip} L 0\n" + "eax=%08VR{eax} ebx=%08VR{ebx} ecx=%08VR{ecx} edx=%08VR{edx} esi=%08VR{esi} edi=%08VR{edi}\n" + "eip=%08VR{eip} esp=%08VR{esp} ebp=%08VR{ebp} %VRF{eflags}\n" + "cs={%04VR{cs} base=%08VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} dr0=%08VR{dr0} dr1=%08VR{dr1}\n" + "ds={%04VR{ds} base=%08VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} dr2=%08VR{dr2} dr3=%08VR{dr3}\n" + "es={%04VR{es} base=%08VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} dr6=%08VR{dr6} dr6=%08VR{dr6}\n" + "fs={%04VR{fs} base=%08VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} cr0=%08VR{cr0} cr2=%08VR{cr0}\n" + "gs={%04VR{gs} base=%08VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}} cr3=%08VR{cr0} cr4=%08VR{cr0}\n" + "ss={%04VR{ss} base=%08VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}} cr8=%08VR{cr8}\n" + "gdtr=%08VR{gdtr_base}:%04VR{gdtr_limit} idtr=%08VR{idtr_base}:%04VR{idtr_limit} eflags=%08VR{eflags}\n" + "ldtr={%04VR{ldtr} base=%08VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%04VR{ldtr_attr}}\n" + "tr ={%04VR{tr} base=%08VR{tr_base} limit=%08VR{tr_lim} flags=%04VR{tr_attr}}\n" + "sysenter={cs=%04VR{sysenter_cs} eip=%08VR{sysenter_eip} esp=%08VR{sysenter_esp}}\n" + "fcw=%04VR{fcw} fsw=%04VR{fsw} ftw=%04VR{ftw} mxcsr=%04VR{mxcsr} mxcsr_mask=%04VR{mxcsr_mask}\n" + ); + } + if (RT_FAILURE(rc)) + return DBGCCmdHlpVBoxError(pCmdHlp, rc, "DBGFR3RegPrintf failed"); + char *pszRegs = strchr(szDisAndRegs, '\n'); + *pszRegs++ = '\0'; + rc = DBGCCmdHlpPrintf(pCmdHlp, "%s", pszRegs); + + /* + * Disassemble one instruction at cs:[r|e]ip. + */ + return pCmdHlp->pfnExec(pCmdHlp, "%s", szDisAndRegs); + } return dbgcCmdRegCommon(pCmd, pCmdHlp, pVM, paArgs, cArgs, pResult, ""); } @@ -1607,6 +1505,47 @@ static DECLCALLBACK(int) dbgcCmdRegGuest(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PV */ static DECLCALLBACK(int) dbgcCmdRegHyper(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult) { + /* + * Show all registers our selves. + */ + if (cArgs == 0) + { + PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); + char szDisAndRegs[8192]; + int rc; + + if (pDbgc->fRegTerse) + rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu | DBGFREG_HYPER_VMCPUID, szDisAndRegs, sizeof(szDisAndRegs), + "u %VR{cs}:%VR{eip} L 0\n" + ".eax=%08VR{eax} .ebx=%08VR{ebx} .ecx=%08VR{ecx} .edx=%08VR{edx} .esi=%08VR{esi} .edi=%08VR{edi}\n" + ".eip=%08VR{eip} .esp=%08VR{esp} .ebp=%08VR{ebp} .%VRF{eflags}\n" + ".cs=%04VR{cs} .ds=%04VR{ds} .es=%04VR{es} .fs=%04VR{fs} .gs=%04VR{gs} .ss=%04VR{ss} .eflags=%08VR{eflags}\n"); + else + rc = DBGFR3RegPrintf(pVM, pDbgc->idCpu | DBGFREG_HYPER_VMCPUID, szDisAndRegs, sizeof(szDisAndRegs), + "u %04VR{cs}:%08VR{eip} L 0\n" + ".eax=%08VR{eax} .ebx=%08VR{ebx} .ecx=%08VR{ecx} .edx=%08VR{edx} .esi=%08VR{esi} .edi=%08VR{edi}\n" + ".eip=%08VR{eip} .esp=%08VR{esp} .ebp=%08VR{ebp} .%VRF{eflags}\n" + ".cs={%04VR{cs} base=%08VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} .dr0=%08VR{dr0} .dr1=%08VR{dr1}\n" + ".ds={%04VR{ds} base=%08VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} .dr2=%08VR{dr2} .dr3=%08VR{dr3}\n" + ".es={%04VR{es} base=%08VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} .dr6=%08VR{dr6} .dr6=%08VR{dr6}\n" + ".fs={%04VR{fs} base=%08VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} .cr3=%016VR{cr3}\n" + ".gs={%04VR{gs} base=%08VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}}\n" + ".ss={%04VR{ss} base=%08VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}}\n" + ".gdtr=%08VR{gdtr_base}:%04VR{gdtr_limit} .idtr=%08VR{idtr_base}:%04VR{idtr_limit} .eflags=%08VR{eflags}\n" + ".ldtr={%04VR{ldtr} base=%08VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%04VR{ldtr_attr}}\n" + ".tr ={%04VR{tr} base=%08VR{tr_base} limit=%08VR{tr_lim} flags=%04VR{tr_attr}}\n" + ); + if (RT_FAILURE(rc)) + return DBGCCmdHlpVBoxError(pCmdHlp, rc, "DBGFR3RegPrintf failed"); + char *pszRegs = strchr(szDisAndRegs, '\n'); + *pszRegs++ = '\0'; + rc = DBGCCmdHlpPrintf(pCmdHlp, "%s", pszRegs); + + /* + * Disassemble one instruction at cs:[r|e]ip. + */ + return pCmdHlp->pfnExec(pCmdHlp, "%s", szDisAndRegs); + } return dbgcCmdRegCommon(pCmd, pCmdHlp, pVM, paArgs, cArgs, pResult, "."); } @@ -2905,7 +2844,7 @@ static DECLCALLBACK(int) dbgcCmdDumpPageHierarchy(PCDBGCCMD pCmd, PDBGCCMDHLP pC * Get the range. */ PCDBGCVAR pRange = cArgs > 0 ? &paArgs[0] : pDbgc->pLastPos; - RTGCPTR GCPtrFirst = NULL; + RTGCPTR GCPtrFirst = NIL_RTGCPTR; int rc = DBGCCmdHlpVarToFlatAddr(pCmdHlp, pRange, &GCPtrFirst); if (RT_FAILURE(rc)) return DBGCCmdHlpFail(pCmdHlp, pCmd, "Failed to convert %DV to a flat address: %Rrc", pRange, rc); @@ -3285,7 +3224,7 @@ static DECLCALLBACK(int) dbgcCmdDumpTSS(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM { /** @todo consider querying the hidden bits instead (missing API). */ uint16_t SelTR; - rc = DBGFR3RegQueryU16(pVM, pDbgc->idCpu, DBGFREG_TR, &SelTR); + rc = DBGFR3RegCpuQueryU16(pVM, pDbgc->idCpu, DBGFREG_TR, &SelTR); if (RT_FAILURE(rc)) return DBGCCmdHlpFail(pCmdHlp, pCmd, "Failed to query TR, rc=%Rrc\n", rc); DBGCVAR_INIT_GC_FAR(&VarTssAddr, SelTR, 0); @@ -3359,7 +3298,7 @@ static DECLCALLBACK(int) dbgcCmdDumpTSS(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM else { uint64_t uEfer; - rc = DBGFR3RegQueryU64(pVM, pDbgc->idCpu, DBGFREG_MSR_K6_EFER, &uEfer); + rc = DBGFR3RegCpuQueryU64(pVM, pDbgc->idCpu, DBGFREG_MSR_K6_EFER, &uEfer); if ( RT_FAILURE(rc) || !(uEfer & MSR_K6_EFER_LMA) ) enmTssType = kTss32; diff --git a/src/VBox/Debugger/DBGCGdbRemoteStub.cpp b/src/VBox/Debugger/DBGCGdbRemoteStub.cpp index b98982070..a3a10c0a9 100644 --- a/src/VBox/Debugger/DBGCGdbRemoteStub.cpp +++ b/src/VBox/Debugger/DBGCGdbRemoteStub.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGCGdbRemoteStub.cpp 31846 2010-08-21 20:16:47Z vboxsync $ */ +/* $Id: DBGCGdbRemoteStub.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGC - Debugger Console, GDB Remote Stub. */ @@ -20,6 +20,6 @@ * Header Files * *******************************************************************************/ #include <VBox/dbg.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <VBox/err.h> diff --git a/src/VBox/Debugger/DBGCOps.cpp b/src/VBox/Debugger/DBGCOps.cpp index 52a56d8c4..203c01b89 100644 --- a/src/VBox/Debugger/DBGCOps.cpp +++ b/src/VBox/Debugger/DBGCOps.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGCOps.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGCOps.cpp 35513 2011-01-12 17:50:43Z vboxsync $ */ /** @file * DBGC - Debugger Console, Operators. */ @@ -21,12 +21,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> -#include <VBox/dbgf.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> #include <VBox/dis.h> #include <VBox/param.h> #include <VBox/err.h> @@ -52,6 +52,7 @@ static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResu static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult); static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult); static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult); +static DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult); static DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult); static DECLCALLBACK(int) dbgcOpMult(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult); @@ -179,6 +180,7 @@ const DBGCOP g_aOps[] = { {'#'}, 1, false, 3, dbgcOpAddrHost, NULL, "Flat host address." }, { {'#','%','%'}, 3, false, 3, dbgcOpAddrHostPhys, NULL, "Physical host address." }, { {'$'}, 1, false, 3, dbgcOpVar, NULL, "Reference a variable." }, + { {'@'}, 1, false, 3, dbgcOpRegister, NULL, "Reference a register." }, { {'*'}, 1, true, 10, NULL, dbgcOpMult, "Multiplication." }, { {'/'}, 1, true, 11, NULL, dbgcOpDiv, "Division." }, { {'%'}, 1, true, 12, NULL, dbgcOpMod, "Modulus." }, @@ -469,6 +471,79 @@ static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult /** + * Reference register (unary). + * + * @returns VINF_SUCCESS on success. + * @returns VBox evaluation / parsing error code on failure. + * The caller does the bitching. + * @param pDbgc Debugger console instance data. + * @param pArg The argument. + * @param pResult Where to store the result. + */ +static DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) +{ + LogFlow(("dbgcOpRegister: %s\n", pArg->u.pszString)); + + /* + * Parse sanity. + */ + if (pArg->enmType != DBGCVAR_TYPE_STRING) + return VERR_PARSE_INCORRECT_ARG_TYPE; + + /* + * Get the register. + */ + DBGFREGVALTYPE enmType; + DBGFREGVAL Value; + int rc = DBGFR3RegNmQuery(pDbgc->pVM, pDbgc->idCpu, pArg->u.pszString, &Value, &enmType); + if (RT_SUCCESS(rc)) + { + rc = VERR_INTERNAL_ERROR_5; + switch (enmType) + { + case DBGFREGVALTYPE_U8: + DBGCVAR_INIT_NUMBER(pResult, Value.u8); + return VINF_SUCCESS; + + case DBGFREGVALTYPE_U16: + DBGCVAR_INIT_NUMBER(pResult, Value.u16); + return VINF_SUCCESS; + + case DBGFREGVALTYPE_U32: + DBGCVAR_INIT_NUMBER(pResult, Value.u32); + return VINF_SUCCESS; + + case DBGFREGVALTYPE_U64: + DBGCVAR_INIT_NUMBER(pResult, Value.u64); + return VINF_SUCCESS; + + case DBGFREGVALTYPE_U128: + DBGCVAR_INIT_NUMBER(pResult, Value.u128.s.Lo); + return VINF_SUCCESS; + + case DBGFREGVALTYPE_R80: +#ifdef RT_COMPILER_WITH_80BIT_LONG_DOUBLE + DBGCVAR_INIT_NUMBER(pResult, (uint64_t)Value.r80.lrd); +#else + DBGCVAR_INIT_NUMBER(pResult, (uint64_t)Value.r80.sj64.u63Fraction); +#endif + return VINF_SUCCESS; + + case DBGFREGVALTYPE_DTR: + DBGCVAR_INIT_NUMBER(pResult, Value.dtr.u64Base); + return VINF_SUCCESS; + + case DBGFREGVALTYPE_INVALID: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_32BIT_HACK: + break; + } + } + return rc; +} + + +/** * Flat address (unary). * * @returns VINF_SUCCESS on success. diff --git a/src/VBox/Debugger/DBGCTcp.cpp b/src/VBox/Debugger/DBGCTcp.cpp index d58549eff..b69cacf38 100644 --- a/src/VBox/Debugger/DBGCTcp.cpp +++ b/src/VBox/Debugger/DBGCTcp.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGCTcp.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGCTcp.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGC - Debugger Console, TCP backend. */ @@ -20,7 +20,7 @@ * Header Files * *******************************************************************************/ #include <VBox/dbg.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/err.h> #include <iprt/thread.h> diff --git a/src/VBox/Debugger/DBGConsole.cpp b/src/VBox/Debugger/DBGConsole.cpp index 8b69c3e8c..cc159855f 100644 --- a/src/VBox/Debugger/DBGConsole.cpp +++ b/src/VBox/Debugger/DBGConsole.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGConsole.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGConsole.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGC - Debugger Console. */ @@ -132,12 +132,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> -#include <VBox/dbgf.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> #include <VBox/dis.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/Debugger/DBGPlugInCommonELF.cpp b/src/VBox/Debugger/DBGPlugInCommonELF.cpp index 835f804ee..bedab4a9a 100644 --- a/src/VBox/Debugger/DBGPlugInCommonELF.cpp +++ b/src/VBox/Debugger/DBGPlugInCommonELF.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGPlugInCommonELF.cpp 31530 2010-08-10 12:24:45Z vboxsync $ */ +/* $Id: DBGPlugInCommonELF.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGPlugInCommonELF - Common code for dealing with ELF images. */ @@ -22,7 +22,7 @@ #define LOG_GROUP LOG_GROUP_DBGF ///@todo add new log group. #include "DBGPlugInCommonELF.h" -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <iprt/alloca.h> #include <iprt/asm.h> #include <iprt/assert.h> diff --git a/src/VBox/Debugger/DBGPlugInDiggers.cpp b/src/VBox/Debugger/DBGPlugInDiggers.cpp index bee52930b..f8b0d4f01 100644 --- a/src/VBox/Debugger/DBGPlugInDiggers.cpp +++ b/src/VBox/Debugger/DBGPlugInDiggers.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGPlugInDiggers.cpp 31530 2010-08-10 12:24:45Z vboxsync $ */ +/* $Id: DBGPlugInDiggers.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGPlugInDiggers - Debugger and Guest OS Digger Plug-in. */ @@ -21,7 +21,7 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include "DBGPlugIns.h" #include <VBox/version.h> #include <VBox/err.h> diff --git a/src/VBox/Debugger/DBGPlugInLinux.cpp b/src/VBox/Debugger/DBGPlugInLinux.cpp index bf1639edf..71657cebb 100644 --- a/src/VBox/Debugger/DBGPlugInLinux.cpp +++ b/src/VBox/Debugger/DBGPlugInLinux.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGPlugInLinux.cpp 31530 2010-08-10 12:24:45Z vboxsync $ */ +/* $Id: DBGPlugInLinux.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGPlugInLinux - Debugger and Guest OS Digger Plugin For Linux. */ @@ -22,7 +22,7 @@ #define LOG_GROUP LOG_GROUP_DBGF ///@todo add new log group. #include "DBGPlugIns.h" #include "DBGPlugInCommonELF.h" -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <iprt/string.h> #include <iprt/mem.h> #include <iprt/stream.h> diff --git a/src/VBox/Debugger/DBGPlugInSolaris.cpp b/src/VBox/Debugger/DBGPlugInSolaris.cpp index e9e7d71f4..341a5fa6b 100644 --- a/src/VBox/Debugger/DBGPlugInSolaris.cpp +++ b/src/VBox/Debugger/DBGPlugInSolaris.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGPlugInSolaris.cpp 35254 2010-12-20 16:49:31Z vboxsync $ */ +/* $Id: DBGPlugInSolaris.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGPlugInSolaris - Debugger and Guest OS Digger Plugin For Solaris. */ @@ -22,7 +22,7 @@ #define LOG_GROUP LOG_GROUP_DBGF ///@todo add new log group. #include "DBGPlugIns.h" #include "DBGPlugInCommonELF.h" -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <iprt/asm.h> #include <iprt/mem.h> #include <iprt/stream.h> diff --git a/src/VBox/Debugger/DBGPlugInWinNt.cpp b/src/VBox/Debugger/DBGPlugInWinNt.cpp index 056fca834..c9f24e2f7 100644 --- a/src/VBox/Debugger/DBGPlugInWinNt.cpp +++ b/src/VBox/Debugger/DBGPlugInWinNt.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGPlugInWinNt.cpp 31531 2010-08-10 12:29:45Z vboxsync $ */ +/* $Id: DBGPlugInWinNt.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGPlugInWindows - Debugger and Guest OS Digger Plugin For Windows NT. */ @@ -21,7 +21,7 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF ///@todo add new log group. #include "DBGPlugIns.h" -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <VBox/err.h> #include <VBox/param.h> #include <iprt/string.h> diff --git a/src/VBox/Debugger/DBGPlugIns.h b/src/VBox/Debugger/DBGPlugIns.h index f1e09a0eb..d060c3256 100644 --- a/src/VBox/Debugger/DBGPlugIns.h +++ b/src/VBox/Debugger/DBGPlugIns.h @@ -1,4 +1,4 @@ -/* $Id: DBGPlugIns.h 31531 2010-08-10 12:29:45Z vboxsync $ */ +/* $Id: DBGPlugIns.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGPlugIns - Debugger Plug-Ins. * @@ -21,7 +21,7 @@ #ifndef ___Debugger_DBGPlugIns_h #define ___Debugger_DBGPlugIns_h -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> RT_C_DECLS_BEGIN diff --git a/src/VBox/Debugger/Makefile.kmk b/src/VBox/Debugger/Makefile.kmk index f49e3b292..8862ed602 100644 --- a/src/VBox/Debugger/Makefile.kmk +++ b/src/VBox/Debugger/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 31846 2010-08-21 20:16:47Z vboxsync $ +# $Id: Makefile.kmk 35440 2011-01-09 23:43:10Z vboxsync $ ## @file # Makefile for the VBox debugger. # @@ -78,7 +78,7 @@ tstDBGCParser_SOURCES = \ testcase/tstDBGCParser.cpp \ testcase/tstDBGCStubs.cpp tstDBGCParser_LIBS = \ - $(TARGET_Debugger) \ + $(Debugger_1_TARGET) \ $(LIB_RUNTIME) diff --git a/src/VBox/Debugger/VBoxDbg.cpp b/src/VBox/Debugger/VBoxDbg.cpp index a250d0ce7..9ec90c9d0 100644 --- a/src/VBox/Debugger/VBoxDbg.cpp +++ b/src/VBox/Debugger/VBoxDbg.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxDbg.cpp 31530 2010-08-10 12:24:45Z vboxsync $ */ +/* $Id: VBoxDbg.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox Debugger GUI. */ @@ -21,7 +21,7 @@ #define LOG_GROUP LOG_GROUP_DBGG #define VBOX_COM_NO_ATL #include <VBox/dbggui.h> -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <iprt/assert.h> #include <iprt/alloc.h> diff --git a/src/VBox/Debugger/VBoxDbgBase.h b/src/VBox/Debugger/VBoxDbgBase.h index 7452b745e..c54e1f826 100644 --- a/src/VBox/Debugger/VBoxDbgBase.h +++ b/src/VBox/Debugger/VBoxDbgBase.h @@ -1,4 +1,4 @@ -/* $Id: VBoxDbgBase.h 31530 2010-08-10 12:24:45Z vboxsync $ */ +/* $Id: VBoxDbgBase.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox Debugger GUI - Base classes. */ @@ -20,8 +20,8 @@ #define ___Debugger_VBoxDbgBase_h -#include <VBox/stam.h> -#include <VBox/vmapi.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/vmapi.h> #include <VBox/dbg.h> #include <iprt/thread.h> #include <QString> diff --git a/src/VBox/Debugger/VBoxDbgConsole.cpp b/src/VBox/Debugger/VBoxDbgConsole.cpp index 44654df5b..ab0ae229d 100644 --- a/src/VBox/Debugger/VBoxDbgConsole.cpp +++ b/src/VBox/Debugger/VBoxDbgConsole.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxDbgConsole.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VBoxDbgConsole.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox Debugger GUI - Console. */ @@ -31,7 +31,7 @@ #include <QContextMenuEvent> #include <VBox/dbg.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/err.h> #include <iprt/thread.h> diff --git a/src/VBox/Debugger/VBoxDbgGui.cpp b/src/VBox/Debugger/VBoxDbgGui.cpp index 62a871786..9fbdb12f9 100644 --- a/src/VBox/Debugger/VBoxDbgGui.cpp +++ b/src/VBox/Debugger/VBoxDbgGui.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxDbgGui.cpp 31698 2010-08-16 15:00:05Z vboxsync $ */ +/* $Id: VBoxDbgGui.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox Debugger GUI - The Manager. */ @@ -21,7 +21,7 @@ #define LOG_GROUP LOG_GROUP_DBGG #define VBOX_COM_NO_ATL #include <VBox/com/defs.h> -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include "VBoxDbgGui.h" diff --git a/src/VBox/Debugger/testcase/tstDBGCStubs.cpp b/src/VBox/Debugger/testcase/tstDBGCStubs.cpp index 1abea24cd..3629816c0 100644 --- a/src/VBox/Debugger/testcase/tstDBGCStubs.cpp +++ b/src/VBox/Debugger/testcase/tstDBGCStubs.cpp @@ -1,4 +1,4 @@ -/* $Id: tstDBGCStubs.cpp 34902 2010-12-09 16:16:51Z vboxsync $ */ +/* $Id: tstDBGCStubs.cpp 35614 2011-01-18 14:44:19Z vboxsync $ */ /** @file * DBGC Testcase - Command Parser, VMM Stub Functions. */ @@ -16,11 +16,11 @@ */ #include <VBox/err.h> -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> VMMR3DECL(PDBGFADDRESS) DBGFR3AddrFromFlat(PVM pVM, PDBGFADDRESS pAddress, RTGCUINTPTR FlatPtr) { return NULL; @@ -189,22 +189,31 @@ VMMDECL(int) DBGFR3PagingDumpEx(PVM pVM, VMCPUID idCpu, uint32_t fFlags, uint64_ { return VERR_INTERNAL_ERROR; } -VMMR3DECL(int) DBGFR3RegQueryU8( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint8_t *pu8) +VMMR3DECL(int) DBGFR3RegCpuQueryU8( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint8_t *pu8) { return VERR_INTERNAL_ERROR; } -VMMR3DECL(int) DBGFR3RegQueryU16( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint16_t *pu16) +VMMR3DECL(int) DBGFR3RegCpuQueryU16( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint16_t *pu16) { return VERR_INTERNAL_ERROR; } -VMMR3DECL(int) DBGFR3RegQueryU32( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint32_t *pu32) +VMMR3DECL(int) DBGFR3RegCpuQueryU32( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint32_t *pu32) { return VERR_INTERNAL_ERROR; } -VMMR3DECL(int) DBGFR3RegQueryU64( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t *pu64) +VMMR3DECL(int) DBGFR3RegCpuQueryU64( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t *pu64) { return VERR_INTERNAL_ERROR; } +VMMR3DECL(int) DBGFR3RegNmQuery( PVM pVM, VMCPUID idDefCpu, const char *pszReg, PDBGFREGVAL pValue, PDBGFREGVALTYPE penmType) +{ + return VERR_INTERNAL_ERROR; +} +VMMR3DECL(int) DBGFR3RegPrintf(PVM pVM, VMCPUID idCpu, char *pszBuf, size_t cbBuf, const char *pszFormat, ...) +{ + return VERR_INTERNAL_ERROR; +} + VMMR3DECL(PDBGFADDRESS) DBGFR3AddrFromPhys(PVM pVM, PDBGFADDRESS pAddress, RTGCPHYS PhysAddr) { return NULL; @@ -246,7 +255,7 @@ VMMR3DECL(int) DBGFR3CoreWrite(PVM pVM, const char *pszFilename, bool fReplaceFi // The rest should eventually be replaced by DBGF calls and eliminated. // ///////////////////////////////////////////////////////////////////////// -#include <VBox/cpum.h> +#include <VBox/vmm/cpum.h> VMMDECL(uint64_t) CPUMGetGuestCR3(PVMCPU pVCpu) { @@ -315,7 +324,7 @@ VMMDECL(int) CPUMQueryHyperCtxPtr(PVMCPU pVCpu, PCPUMCTX *ppCtx) -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> VMMR3DECL(int) MMR3HCPhys2HCVirt(PVM pVM, RTHCPHYS HCPhys, void **ppv) { @@ -325,7 +334,7 @@ VMMR3DECL(int) MMR3HCPhys2HCVirt(PVM pVM, RTHCPHYS HCPhys, void **ppv) -#include <VBox/pgm.h> +#include <VBox/vmm/pgm.h> VMMDECL(RTHCPHYS) PGMGetHyperCR3(PVMCPU pVCpu) { @@ -348,7 +357,7 @@ VMMR3DECL(int) PGMR3DbgR3Ptr2HCPhys(PVM pVM, RTR3PTR R3Ptr, PRTHCPHYS pHCPhys) } -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> VMMDECL(PVMCPU) VMMGetCpuById(PVM pVM, RTCPUID idCpu) { diff --git a/src/VBox/Debugger/testcase/tstVBoxDbg.cpp b/src/VBox/Debugger/testcase/tstVBoxDbg.cpp index 28c2d2d9c..49aab8f01 100644 --- a/src/VBox/Debugger/testcase/tstVBoxDbg.cpp +++ b/src/VBox/Debugger/testcase/tstVBoxDbg.cpp @@ -1,4 +1,4 @@ -/* $Id: tstVBoxDbg.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: tstVBoxDbg.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox Debugger GUI, dummy testcase. */ @@ -21,7 +21,7 @@ *******************************************************************************/ #include <qapplication.h> #include <VBox/dbggui.h> -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <iprt/initterm.h> #include <VBox/log.h> diff --git a/src/VBox/Devices/Audio/DevCodec.cpp b/src/VBox/Devices/Audio/DevCodec.cpp index 50c18dbfb..fa0fae959 100644 --- a/src/VBox/Devices/Audio/DevCodec.cpp +++ b/src/VBox/Devices/Audio/DevCodec.cpp @@ -1,4 +1,4 @@ -/* $Id: DevCodec.cpp 34933 2010-12-10 06:50:03Z vboxsync $ */ +/* $Id: DevCodec.cpp 35515 2011-01-13 07:35:07Z vboxsync $ */ /** @file * DevCodec - VBox ICH Intel HD Audio Codec. */ @@ -15,7 +15,7 @@ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ #define LOG_GROUP LOG_GROUP_DEV_AUDIO -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/uuid.h> #include <iprt/string.h> @@ -23,7 +23,7 @@ #include <iprt/asm.h> #include <iprt/cpp/utils.h> -#include "../Builtins.h" +#include "VBoxDD.h" extern "C" { #include "audio.h" } @@ -2130,13 +2130,41 @@ static void po_callback (void *opaque, int avail) pState->pfnTransfer(pState, PO_INDEX, avail); } -static void mc_callback (void *opaque, int avail) -{ - CODECState *pState = (CODECState *)opaque; - pState->pfnTransfer(pState, MC_INDEX, avail); +/** + * + * routines open one of the voices (IN, OUT) with corresponding parameters. + * this routine could be called from HDA on setting/resseting sound format. + * + * @todo: probably passed settings should be verified (if AFG's declared proposed format) before enabling. + */ +int codecOpenVoice(CODECState *pState, ENMSOUNDSOURCE enmSoundSource, audsettings_t *pAudioSettings) +{ + int rc = 0; + Assert((pState && pAudioSettings)); + if ( !pState + || !pAudioSettings) + return -1; + switch (enmSoundSource) + { + case PI_INDEX: + pState->SwVoiceIn = AUD_open_in(&pState->card, pState->SwVoiceIn, "hda.in", pState, pi_callback, pAudioSettings); + rc = pState->SwVoiceIn ? 0 : 1; + break; + case PO_INDEX: + pState->SwVoiceOut = AUD_open_out(&pState->card, pState->SwVoiceOut, "hda.out", pState, po_callback, pAudioSettings); + rc = pState->SwVoiceOut ? 0 : 1; + break; + default: + return -1; + } + if (!rc) + LogRel(("HDAcodec: can't open %s fmt(freq: %d)\n", + enmSoundSource == PI_INDEX? "in" : "out", + pAudioSettings->freq)); + return rc; } -int codecConstruct(CODECState *pState, ENMCODEC enmCodec) +int codecConstruct(PPDMDEVINS pDevIns, CODECState *pState, ENMCODEC enmCodec) { audsettings_t as; int rc; @@ -2173,49 +2201,11 @@ int codecConstruct(CODECState *pState, ENMCODEC enmCodec) as.nchannels = 2; as.fmt = AUD_FMT_S16; as.endianness = 0; - #define SETUP_AUDIO_FORMAT(pState, base, mult, div, name, as, in_callback, out_callback) \ - do{ \ - AUDIO_FORMAT_SELECTOR((pState), Out, (base), (mult), div) = AUD_open_out(&(pState)->card, \ - AUDIO_FORMAT_SELECTOR(pState, Out, (base), (mult), (div)), name ".out", (pState), (out_callback), &(as)); \ - if (!AUDIO_FORMAT_SELECTOR(pState, Out, (base), (mult), (div))) \ - LogRel (("HDAcodec: WARNING: Unable to open PCM OUT(%s)!\n", name ".out")); \ - AUDIO_FORMAT_SELECTOR(pState, In, (base), (mult), (div)) = AUD_open_in(&(pState)->card, \ - AUDIO_FORMAT_SELECTOR(pState, In, (base), (mult), (div)), name ".in", (pState), (in_callback), &(as)); \ - if (!AUDIO_FORMAT_SELECTOR(pState, In, (base), (mult), (div))) \ - LogRel (("HDAcodec: WARNING: Unable to open PCM IN(%s)!\n", name ".in")); \ - } while(0) - #define IS_FORMAT_SUPPORTED_BY_HOST(pState, base, mult, div) (AUDIO_FORMAT_SELECTOR((pState), Out, (base), (mult), (div)) \ - && AUDIO_FORMAT_SELECTOR((pState), In, (base), (mult), (div))) pState->pNodes[1].node.au32F00_param[0xA] = CODEC_F00_0A_16_BIT; - SETUP_AUDIO_FORMAT(pState, AFMT_HZ_44_1K, AFMT_MULT_X1, AFMT_DIV_X1, "hda44_1", as, pi_callback, po_callback); - pState->pNodes[1].node.au32F00_param[0xA] |= IS_FORMAT_SUPPORTED_BY_HOST(pState, AFMT_HZ_44_1K, AFMT_MULT_X1, AFMT_DIV_X1) ? CODEC_F00_0A_44_1KHZ : 0; - -#ifdef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT - as.freq *= 2; /* 2 * 44.1kHz */ - SETUP_AUDIO_FORMAT(pState, AFMT_HZ_44_1K, AFMT_MULT_X2, AFMT_DIV_X1, "hda44_1_2x", as, pi_callback, po_callback); - pState->pNodes[1].node.au32F00_param[0xA] |= IS_FORMAT_SUPPORTED_BY_HOST(pState, AFMT_HZ_44_1K, AFMT_MULT_X2, AFMT_DIV_X1) ? CODEC_F00_0A_44_1KHZ_MULT_2X : 0; - - as.freq *= 2; /* 4 * 44.1kHz */ - SETUP_AUDIO_FORMAT(pState, AFMT_HZ_44_1K, AFMT_MULT_X4, AFMT_DIV_X1, "hda44_1_4x", as, pi_callback, po_callback); - pState->pNodes[1].node.au32F00_param[0xA] |= IS_FORMAT_SUPPORTED_BY_HOST(pState, AFMT_HZ_44_1K, AFMT_MULT_X4, AFMT_DIV_X1) ? CODEC_F00_0A_44_1KHZ_MULT_4X : 0; - - as.freq = 48000; - SETUP_AUDIO_FORMAT(pState, AFMT_HZ_48K, AFMT_MULT_X1, AFMT_DIV_X1, "hda48", as, pi_callback, po_callback); - pState->pNodes[1].node.au32F00_param[0xA] |= IS_FORMAT_SUPPORTED_BY_HOST(pState, AFMT_HZ_48K, AFMT_MULT_X1, AFMT_DIV_X1) ? CODEC_F00_0A_48KHZ : 0; - -# if 0 - as.freq *= 2; /* 2 * 48kHz */ - SETUP_AUDIO_FORMAT(pState, AFMT_HZ_48K, AFMT_MULT_X2, AFMT_DIV_X1, "hda48_2x", as, pi_callback, po_callback); - pState->pNodes[1].node.au32F00_param[0xA] |= IS_FORMAT_SUPPORTED_BY_HOST(pState, AFMT_HZ_48K, AFMT_MULT_X2, AFMT_DIV_X1) ? CODEC_F00_0A_48KHZ_MULT_2X : 0; - - as.freq *= 2; /* 4 * 48kHz */ - SETUP_AUDIO_FORMAT(pState, AFMT_HZ_48K, AFMT_MULT_X4, AFMT_DIV_X1, "hda48_4x", as, pi_callback, po_callback); - pState->pNodes[1].node.au32F00_param[0xA] |= IS_FORMAT_SUPPORTED_BY_HOST(pState, AFMT_HZ_48K, AFMT_MULT_X4, AFMT_DIV_X1) ? CODEC_F00_0A_48KHZ_MULT_4X : 0; -# endif -#endif - #undef SETUP_AUDIO_FORMAT - #undef IS_FORMAT_SUPPORTED_BY_HOST + codecOpenVoice(pState, PI_INDEX, &as); + codecOpenVoice(pState, PO_INDEX, &as); + pState->pNodes[1].node.au32F00_param[0xA] |= CODEC_F00_0A_44_1KHZ; uint8_t i; Assert(pState->pNodes); @@ -2228,6 +2218,43 @@ int codecConstruct(CODECState *pState, ENMCODEC enmCodec) codecToAudVolume(&pState->pNodes[pState->u8DacLineOut].dac.B_params, AUD_MIXER_VOLUME); codecToAudVolume(&pState->pNodes[pState->u8AdcVolsLineIn].adcvol.B_params, AUD_MIXER_LINE_IN); + /* If no host voices were created, then fallback to nul audio. */ + if (!AUD_is_host_voice_in_ok(pState->SwVoiceIn)) + LogRel (("HDA: WARNING: Unable to open PCM IN!\n")); + if (!AUD_is_host_voice_out_ok(pState->SwVoiceOut)) + LogRel (("HDA: WARNING: Unable to open PCM OUT!\n")); + + if ( !AUD_is_host_voice_in_ok(pState->SwVoiceIn) + && !AUD_is_host_voice_out_ok(pState->SwVoiceOut)) + { + /* Was not able initialize *any* voice. Select the NULL audio driver instead */ + AUD_close_in (&pState->card, pState->SwVoiceIn); + AUD_close_out (&pState->card, pState->SwVoiceOut); + pState->SwVoiceOut = NULL; + pState->SwVoiceIn = NULL; + AUD_init_null (); + + PDMDevHlpVMSetRuntimeError (pDevIns, 0 /*fFlags*/, "HostAudioNotResponding", + N_ ("No audio devices could be opened. Selecting the NULL audio backend " + "with the consequence that no sound is audible")); + } + else if ( !AUD_is_host_voice_in_ok(pState->SwVoiceIn) + || !AUD_is_host_voice_out_ok(pState->SwVoiceOut)) + { + char szMissingVoices[128]; + size_t len = 0; + if (!AUD_is_host_voice_in_ok(pState->SwVoiceIn)) + len = RTStrPrintf (szMissingVoices, sizeof(szMissingVoices), "PCM_in"); + if (!AUD_is_host_voice_out_ok(pState->SwVoiceOut)) + len += RTStrPrintf (szMissingVoices + len, sizeof(szMissingVoices) - len, len ? ", PCM_out" : "PCM_out"); + + PDMDevHlpVMSetRuntimeError (pDevIns, 0 /*fFlags*/, "HostAudioNotResponding", + N_ ("Some audio devices (%s) could not be opened. Guest applications generating audio " + "output or depending on audio input may hang. Make sure your host audio device " + "is working properly. Check the logfile for error messages of the audio " + "subsystem"), szMissingVoices); + } + return VINF_SUCCESS; } int codecDestruct(CODECState *pCodecState) diff --git a/src/VBox/Devices/Audio/DevCodec.h b/src/VBox/Devices/Audio/DevCodec.h index 976f3ca16..b685b6c3a 100644 --- a/src/VBox/Devices/Audio/DevCodec.h +++ b/src/VBox/Devices/Audio/DevCodec.h @@ -1,4 +1,4 @@ -/* $Id: DevCodec.h 34933 2010-12-10 06:50:03Z vboxsync $ */ +/* $Id: DevCodec.h 35515 2011-01-13 07:35:07Z vboxsync $ */ /** @file * DevCodec - VBox ICH Intel HD Audio Codec. */ @@ -413,33 +413,6 @@ typedef enum ALC885_CODEC } ENMCODEC; -#define AFMT_IN In -#define AFMT_OUT Out - -#ifdef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT -# define MAX_AUDIO_FORMAT 64 -typedef SWVoiceIn *CODECAUDIOINFORMAT[MAX_AUDIO_FORMAT]; -typedef SWVoiceOut *CODECAUDIOOUTFORMAT[MAX_AUDIO_FORMAT]; -# define AUDIO_FORMAT_SELECTOR(pState, dir, hz, mult, divizor) ((pState)->aSwVoice##dir[(hz)*24 + (mult)*8 + (divizor)]) -# define AFMT_HZ_48K 0 -# define AFMT_HZ_44_1K 1 -# define AFMT_MULT_X1 0 -# define AFMT_MULT_X2 1 -# define AFMT_MULT_X3 2 /* reserved for stac9220 */ -# define AFMT_MULT_X4 3 -# define AFMT_DIV_X1 0 -# define AFMT_DIV_X2 1 -# define AFMT_DIV_X3 2 -# define AFMT_DIV_X4 3 -# define AFMT_DIV_X5 4 -# define AFMT_DIV_X6 5 -# define AFMT_DIV_X7 6 -# define AFMT_DIV_X8 7 -#else -# define AUDIO_FORMAT_SELECTOR(pState, dir, hz, mult, divizor) ((pState)->SwVoice##dir) -#endif - - typedef struct CODECState { uint16_t id; @@ -451,17 +424,10 @@ typedef struct CODECState int cVerbs; PCODECNODE pNodes; QEMUSoundCard card; -#ifndef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT /** PCM in */ SWVoiceIn *SwVoiceIn; /** PCM out */ SWVoiceOut *SwVoiceOut; - /** Mic in */ - SWVoiceIn *voice_mc; -#else - CODECAUDIOOUTFORMAT aSwVoiceOut; - CODECAUDIOINFORMAT aSwVoiceIn; -#endif ENMCODEC enmCodec; void *pHDAState; bool fInReset; @@ -489,9 +455,10 @@ typedef struct CODECState } CODECState; -int codecConstruct(CODECState *pCodecState, ENMCODEC enmCodec); +int codecConstruct(PPDMDEVINS pDevIns, CODECState *pCodecState, ENMCODEC enmCodec); int codecDestruct(CODECState *pCodecState); int codecSaveState(CODECState *pCodecState, PSSMHANDLE pSSMHandle); int codecLoadState(CODECState *pCodecState, PSSMHANDLE pSSMHandle); +int codecOpenVoice(CODECState *pCodecState, ENMSOUNDSOURCE enmSoundSource, audsettings_t *pAudioSettings); #endif diff --git a/src/VBox/Devices/Audio/DevIchAc97.cpp b/src/VBox/Devices/Audio/DevIchAc97.cpp index fe64af1a1..b5fe6a7d6 100644 --- a/src/VBox/Devices/Audio/DevIchAc97.cpp +++ b/src/VBox/Devices/Audio/DevIchAc97.cpp @@ -1,4 +1,4 @@ -/* $Id: DevIchAc97.cpp 33676 2010-11-02 09:48:24Z vboxsync $ */ +/* $Id: DevIchAc97.cpp 35487 2011-01-11 13:45:20Z vboxsync $ */ /** @file * DevIchAc97 - VBox ICH AC97 Audio Controller. */ @@ -19,12 +19,12 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_AUDIO -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/uuid.h> #include <iprt/string.h> -#include "../Builtins.h" +#include "VBoxDD.h" extern "C" { #include "audio.h" @@ -1633,14 +1633,16 @@ static DECLCALLBACK(int) ichac97Construct (PPDMDEVINS pDevIns, int iInstance, ac97Reset (pDevIns); - if (!s->voice_pi) + if (!AUD_is_host_voice_in_ok(s->voice_pi)) LogRel (("AC97: WARNING: Unable to open PCM IN!\n")); - if (!s->voice_mc) + if (!AUD_is_host_voice_in_ok(s->voice_mc)) LogRel (("AC97: WARNING: Unable to open PCM MC!\n")); - if (!s->voice_po) + if (!AUD_is_host_voice_out_ok(s->voice_po)) LogRel (("AC97: WARNING: Unable to open PCM OUT!\n")); - if (!s->voice_pi && !s->voice_po && !s->voice_mc) + if ( !AUD_is_host_voice_in_ok(s->voice_pi) + && !AUD_is_host_voice_out_ok(s->voice_po) + && !AUD_is_host_voice_in_ok(s->voice_mc)) { /* Was not able initialize *any* voice. Select the NULL audio driver instead */ AUD_close_in (&s->card, s->voice_pi); @@ -1656,15 +1658,17 @@ static DECLCALLBACK(int) ichac97Construct (PPDMDEVINS pDevIns, int iInstance, N_ ("No audio devices could be opened. Selecting the NULL audio backend " "with the consequence that no sound is audible")); } - else if (!s->voice_pi || !s->voice_po || !s->voice_mc) + else if ( !AUD_is_host_voice_in_ok(s->voice_pi) + || !AUD_is_host_voice_out_ok(s->voice_po) + || !AUD_is_host_voice_in_ok(s->voice_mc)) { char szMissingVoices[128]; size_t len = 0; - if (!s->voice_pi) + if (!AUD_is_host_voice_in_ok(s->voice_pi)) len = RTStrPrintf (szMissingVoices, sizeof(szMissingVoices), "PCM_in"); - if (!s->voice_po) + if (!AUD_is_host_voice_out_ok(s->voice_po)) len += RTStrPrintf (szMissingVoices + len, sizeof(szMissingVoices) - len, len ? ", PCM_out" : "PCM_out"); - if (!s->voice_mc) + if (!AUD_is_host_voice_in_ok(s->voice_mc)) len += RTStrPrintf (szMissingVoices + len, sizeof(szMissingVoices) - len, len ? ", PCM_mic" : "PCM_mic"); PDMDevHlpVMSetRuntimeError (pDevIns, 0 /*fFlags*/, "HostAudioNotResponding", diff --git a/src/VBox/Devices/Audio/DevIchIntelHDA.cpp b/src/VBox/Devices/Audio/DevIchIntelHDA.cpp index 3b030bb56..b2b6c9a40 100644 --- a/src/VBox/Devices/Audio/DevIchIntelHDA.cpp +++ b/src/VBox/Devices/Audio/DevIchIntelHDA.cpp @@ -1,4 +1,4 @@ -/* $Id: DevIchIntelHDA.cpp 34968 2010-12-10 18:09:40Z vboxsync $ */ +/* $Id: DevIchIntelHDA.cpp 35515 2011-01-13 07:35:07Z vboxsync $ */ /** @file * DevIchIntelHD - VBox ICH Intel HD Audio Controller. */ @@ -19,7 +19,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_AUDIO -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/uuid.h> #include <iprt/string.h> @@ -27,7 +27,7 @@ #include <iprt/asm.h> #include <iprt/asm-math.h> -#include "../Builtins.h" +#include "VBoxDD.h" extern "C" { #include "audio.h" @@ -501,6 +501,7 @@ DECLCALLBACK(int)hdaRegWriteSDSTS(INTELHDLinkState* pState, uint32_t offset, uin DECLCALLBACK(int)hdaRegWriteSDLVI(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value); DECLCALLBACK(int)hdaRegWriteSDFIFOW(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value); DECLCALLBACK(int)hdaRegWriteSDFIFOS(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value); +DECLCALLBACK(int)hdaRegWriteSDFMT(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value); DECLCALLBACK(int)hdaRegWriteSDBDPL(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value); DECLCALLBACK(int)hdaRegWriteSDBDPU(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value); DECLCALLBACK(int)hdaRegWriteBase(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value); @@ -584,7 +585,7 @@ const static struct stIchIntelHDRegMap { 0x0008C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16 , hdaRegWriteSDLVI , "ISD0LVI" , "ISD0 Last Valid Index" }, { 0x0008E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16 , hdaRegWriteSDFIFOW , "ISD0FIFOW", "ISD0 FIFO Watermark" }, { 0x00090, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16 , hdaRegWriteU16 , "ISD0FIFOS", "ISD0 FIFO Size" }, - { 0x00092, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteU16 , "ISD0FMT" , "ISD0 Format" }, + { 0x00092, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteSDFMT , "ISD0FMT" , "ISD0 Format" }, { 0x00098, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32 , hdaRegWriteSDBDPL , "ISD0BDPL" , "ISD0 Buffer Descriptor List Pointer-Lower Base Address" }, { 0x0009C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32 , hdaRegWriteSDBDPU , "ISD0BDPU" , "ISD0 Buffer Descriptor List Pointer-Upper Base Address" }, @@ -595,7 +596,7 @@ const static struct stIchIntelHDRegMap { 0x000AC, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16 , hdaRegWriteSDLVI , "ISD1LVI" , "ISD1 Last Valid Index" }, { 0x000AE, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16 , hdaRegWriteSDFIFOW , "ISD1FIFOW", "ISD1 FIFO Watermark" }, { 0x000B0, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16 , hdaRegWriteU16 , "ISD1FIFOS", "ISD1 FIFO Size" }, - { 0x000B2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteU16 , "ISD1FMT" , "ISD1 Format" }, + { 0x000B2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteSDFMT , "ISD1FMT" , "ISD1 Format" }, { 0x000B8, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32 , hdaRegWriteSDBDPL , "ISD1BDPL" , "ISD1 Buffer Descriptor List Pointer-Lower Base Address" }, { 0x000BC, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32 , hdaRegWriteSDBDPU , "ISD1BDPU" , "ISD1 Buffer Descriptor List Pointer-Upper Base Address" }, @@ -606,7 +607,7 @@ const static struct stIchIntelHDRegMap { 0x000CC, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16 , hdaRegWriteSDLVI , "ISD2LVI" , "ISD2 Last Valid Index" }, { 0x000CE, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16 , hdaRegWriteSDFIFOW , "ISD2FIFOW", "ISD2 FIFO Watermark" }, { 0x000D0, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16 , hdaRegWriteU16 , "ISD2FIFOS", "ISD2 FIFO Size" }, - { 0x000D2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteU16 , "ISD2FMT" , "ISD2 Format" }, + { 0x000D2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteSDFMT , "ISD2FMT" , "ISD2 Format" }, { 0x000D8, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32 , hdaRegWriteSDBDPL , "ISD2BDPL" , "ISD2 Buffer Descriptor List Pointer-Lower Base Address" }, { 0x000DC, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32 , hdaRegWriteSDBDPU , "ISD2BDPU" , "ISD2 Buffer Descriptor List Pointer-Upper Base Address" }, @@ -617,7 +618,7 @@ const static struct stIchIntelHDRegMap { 0x000EC, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16 , hdaRegWriteSDLVI , "ISD3LVI" , "ISD3 Last Valid Index" }, { 0x000EE, 0x00002, 0x00000005, 0x00000005, hdaRegReadU16 , hdaRegWriteU16 , "ISD3FIFOW", "ISD3 FIFO Watermark" }, { 0x000F0, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16 , hdaRegWriteU16 , "ISD3FIFOS", "ISD3 FIFO Size" }, - { 0x000F2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteU16 , "ISD3FMT" , "ISD3 Format" }, + { 0x000F2, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteSDFMT , "ISD3FMT" , "ISD3 Format" }, { 0x000F8, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32 , hdaRegWriteSDBDPL , "ISD3BDPL" , "ISD3 Buffer Descriptor List Pointer-Lower Base Address" }, { 0x000FC, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32 , hdaRegWriteSDBDPU , "ISD3BDPU" , "ISD3 Buffer Descriptor List Pointer-Upper Base Address" }, @@ -628,7 +629,7 @@ const static struct stIchIntelHDRegMap { 0x0010C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16 , hdaRegWriteSDLVI , "OSD0LVI" , "OSD0 Last Valid Index" }, { 0x0010E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16 , hdaRegWriteSDFIFOW , "OSD0FIFOW", "OSD0 FIFO Watermark" }, { 0x00110, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16 , hdaRegWriteSDFIFOS , "OSD0FIFOS", "OSD0 FIFO Size" }, - { 0x00112, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteU16 , "OSD0FMT" , "OSD0 Format" }, + { 0x00112, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteSDFMT , "OSD0FMT" , "OSD0 Format" }, { 0x00118, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32 , hdaRegWriteSDBDPL , "OSD0BDPL" , "OSD0 Buffer Descriptor List Pointer-Lower Base Address" }, { 0x0011C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32 , hdaRegWriteSDBDPU , "OSD0BDPU" , "OSD0 Buffer Descriptor List Pointer-Upper Base Address" }, @@ -639,7 +640,7 @@ const static struct stIchIntelHDRegMap { 0x0012C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16 , hdaRegWriteSDLVI , "OSD1LVI" , "OSD1 Last Valid Index" }, { 0x0012E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16 , hdaRegWriteSDFIFOW , "OSD1FIFOW", "OSD1 FIFO Watermark" }, { 0x00130, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16 , hdaRegWriteSDFIFOS , "OSD1FIFOS", "OSD1 FIFO Size" }, - { 0x00132, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteU16 , "OSD1FMT" , "OSD1 Format" }, + { 0x00132, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteSDFMT , "OSD1FMT" , "OSD1 Format" }, { 0x00138, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32 , hdaRegWriteSDBDPL , "OSD1BDPL" , "OSD1 Buffer Descriptor List Pointer-Lower Base Address" }, { 0x0013C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32 , hdaRegWriteSDBDPU , "OSD1BDPU" , "OSD1 Buffer Descriptor List Pointer-Upper Base Address" }, @@ -650,7 +651,7 @@ const static struct stIchIntelHDRegMap { 0x0014C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16 , hdaRegWriteSDLVI , "OSD2LVI" , "OSD2 Last Valid Index" }, { 0x0014E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16 , hdaRegWriteSDFIFOW , "OSD2FIFOW", "OSD2 FIFO Watermark" }, { 0x00150, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16 , hdaRegWriteSDFIFOS , "OSD2FIFOS", "OSD2 FIFO Size" }, - { 0x00152, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteU16 , "OSD2FMT" , "OSD2 Format" }, + { 0x00152, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteSDFMT , "OSD2FMT" , "OSD2 Format" }, { 0x00158, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32 , hdaRegWriteSDBDPL , "OSD2BDPL" , "OSD2 Buffer Descriptor List Pointer-Lower Base Address" }, { 0x0015C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32 , hdaRegWriteSDBDPU , "OSD2BDPU" , "OSD2 Buffer Descriptor List Pointer-Upper Base Address" }, @@ -661,7 +662,7 @@ const static struct stIchIntelHDRegMap { 0x0016C, 0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16 , hdaRegWriteSDLVI , "OSD3LVI" , "OSD3 Last Valid Index" }, { 0x0016E, 0x00002, 0x00000007, 0x00000007, hdaRegReadU16 , hdaRegWriteSDFIFOW , "OSD3FIFOW", "OSD3 FIFO Watermark" }, { 0x00170, 0x00002, 0x000000FF, 0x000000FF, hdaRegReadU16 , hdaRegWriteSDFIFOS , "OSD3FIFOS", "OSD3 FIFO Size" }, - { 0x00172, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteU16 , "OSD3FMT" , "OSD3 Format" }, + { 0x00172, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16 , hdaRegWriteSDFMT , "OSD3FMT" , "OSD3 Format" }, { 0x00178, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32 , hdaRegWriteSDBDPL , "OSD3BDPL" , "OSD3 Buffer Descriptor List Pointer-Lower Base Address" }, { 0x0017C, 0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32 , hdaRegWriteSDBDPU , "OSD3BDPU" , "OSD3 Buffer Descriptor List Pointer-Upper Base Address" }, }; @@ -1130,10 +1131,10 @@ DECLCALLBACK(int)hdaRegWriteSDCTL(INTELHDLinkState* pState, uint32_t offset, uin switch (index) { case ICH6_HDA_REG_SD0CTL: - AUD_set_active_in(ISD0FMT_TO_AUDIO_SELECTOR(pState), fRun); + AUD_set_active_in(pState->Codec.SwVoiceIn, fRun); break; case ICH6_HDA_REG_SD4CTL: - AUD_set_active_out(OSD0FMT_TO_AUDIO_SELECTOR(pState), fRun); + AUD_set_active_out(pState->Codec.SwVoiceOut, fRun); break; default: Log(("hda: changing RUN bit on non-attached stream\n")); @@ -1219,6 +1220,64 @@ DECLCALLBACK(int)hdaRegWriteSDFIFOS(INTELHDLinkState* pState, uint32_t offset, u return VINF_SUCCESS; } +static void inline hdaSdFmtToAudSettings(uint32_t u32SdFmt, audsettings_t *pAudSetting) +{ + Assert((pAudSetting)); +#define EXTRACT_VALUE(v, mask, shift) ((v & ((mask) << (shift))) >> (shift)) + uint32_t u32Hz = (u32SdFmt & ICH6_HDA_SDFMT_BASE_RATE_SHIFT) ? 44100 : 48000; + uint32_t u32HzMult = 1; + uint32_t u32HzDiv = 1; + switch (EXTRACT_VALUE(u32SdFmt, ICH6_HDA_SDFMT_MULT_MASK, ICH6_HDA_SDFMT_MULT_SHIFT)) + { + case 0: u32HzMult = 1; break; + case 1: u32HzMult = 2; break; + case 2: u32HzMult = 3; break; + case 3: u32HzMult = 4; break; + default: + Log(("hda: unsupported multiplier %x\n", u32SdFmt)); + } + switch (EXTRACT_VALUE(u32SdFmt, ICH6_HDA_SDFMT_DIV_MASK, ICH6_HDA_SDFMT_DIV_SHIFT)) + { + case 0: u32HzDiv = 1; break; + case 1: u32HzDiv = 2; break; + case 2: u32HzDiv = 3; break; + case 3: u32HzDiv = 4; break; + case 4: u32HzDiv = 5; break; + case 5: u32HzDiv = 6; break; + case 6: u32HzDiv = 7; break; + case 7: u32HzDiv = 8; break; + } + pAudSetting->freq = u32Hz * u32HzMult / u32HzDiv; + pAudSetting->nchannels = 2; + pAudSetting->fmt = AUD_FMT_S16; + pAudSetting->endianness = 0; +#undef EXTRACT_VALUE +} + +DECLCALLBACK(int)hdaRegWriteSDFMT(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value) +{ +#if 0 + /* @todo here some more investigations are required. */ + audsettings_t as; + /* no reason to reopen voice with same settings */ + if (u32Value == HDA_REG_IND(pState, index)) + return VINF_SUCCESS; + hdaSdFmtToAudSettings(u32Value, &as); + switch (index) + { + case ICH6_HDA_REG_SD0FMT: + codecOpenVoice(&pState->Codec, PI_INDEX, &as); + break; + case ICH6_HDA_REG_SD4FMT: + codecOpenVoice(&pState->Codec, PO_INDEX, &as); + break; + default: + AssertMsgFailed(("unimplemented")); + } +#endif + return hdaRegWriteU16(pState, offset, index, u32Value); +} + DECLCALLBACK(int)hdaRegWriteSDBDPL(INTELHDLinkState* pState, uint32_t offset, uint32_t index, uint32_t u32Value) { int rc = hdaRegWriteU32(pState, offset, index, u32Value); @@ -1567,7 +1626,7 @@ static uint32_t hdaReadAudio(INTELHDLinkState *pState, PHDASTREAMTRANSFERDESC pS /* * read from backend input line to last ureported position or at the begining. */ - cbBackendCopy = AUD_read (ISD0FMT_TO_AUDIO_SELECTOR(pState), pBdle->au8HdaBuffer, cb2Copy); + cbBackendCopy = AUD_read (pState->Codec.SwVoiceIn, pBdle->au8HdaBuffer, cb2Copy); /* * write on the HDA DMA */ @@ -1618,7 +1677,7 @@ static uint32_t hdaWriteAudio(INTELHDLinkState *pState, PHDASTREAMTRANSFERDESC p /* * We feed backend with new portion of fetched samples including not reported. */ - cbBackendCopy = AUD_write (OSD0FMT_TO_AUDIO_SELECTOR(pState), pBdle->au8HdaBuffer, cb2Copy + pBdle->cbUnderFifoW); + cbBackendCopy = AUD_write (pState->Codec.SwVoiceOut, pBdle->au8HdaBuffer, cb2Copy + pBdle->cbUnderFifoW); hdaBackendWriteTransferReported(pBdle, cb2Copy, cbBackendCopy, &cbTransfered, pu32Avail); } else @@ -1911,8 +1970,8 @@ static DECLCALLBACK(int) hdaLoadExec (PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle, SSMR3GetMem (pSSMHandle, &pThis->hda.stMicBdle, sizeof (HDABDLEDESC)); SSMR3GetMem (pSSMHandle, &pThis->hda.stInBdle, sizeof (HDABDLEDESC)); - AUD_set_active_in(ISD0FMT_TO_AUDIO_SELECTOR(&pThis->hda), SDCTL(&pThis->hda, 0) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)); - AUD_set_active_out(OSD0FMT_TO_AUDIO_SELECTOR(&pThis->hda), SDCTL(&pThis->hda, 4) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)); + AUD_set_active_in(pThis->hda.Codec.SwVoiceIn, SDCTL(&pThis->hda, 0) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)); + AUD_set_active_out(pThis->hda.Codec.SwVoiceOut, SDCTL(&pThis->hda, 4) & HDA_REG_FIELD_FLAG_MASK(SDCTL, RUN)); pThis->hda.u64CORBBase = CORBLBASE(&pThis->hda); pThis->hda.u64CORBBase |= ((uint64_t)CORBUBASE(&pThis->hda)) << 32; @@ -2158,7 +2217,7 @@ static DECLCALLBACK(int) hdaConstruct (PPDMDEVINS pDevIns, int iInstance, pThis->hda.Codec.pHDAState = (void *)&pThis->hda; - rc = codecConstruct(&pThis->hda.Codec, /* ALC885_CODEC */ STAC9220_CODEC); + rc = codecConstruct(pDevIns, &pThis->hda.Codec, /* ALC885_CODEC */ STAC9220_CODEC); if (RT_FAILURE(rc)) AssertRCReturn(rc, rc); diff --git a/src/VBox/Devices/Audio/DevSB16.cpp b/src/VBox/Devices/Audio/DevSB16.cpp index edbed2cf8..7686ddb76 100644 --- a/src/VBox/Devices/Audio/DevSB16.cpp +++ b/src/VBox/Devices/Audio/DevSB16.cpp @@ -1,4 +1,4 @@ -/* $Id: DevSB16.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DevSB16.cpp 35487 2011-01-11 13:45:20Z vboxsync $ */ /** @file * DevSB16 - VBox SB16 Audio Controller. * @@ -32,11 +32,11 @@ */ #define LOG_GROUP LOG_GROUP_DEV_AUDIO -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "../vl_vbox.h" +#include "vl_vbox.h" extern "C" { #include "audio.h" @@ -1899,8 +1899,9 @@ static DECLCALLBACK(int) sb16Construct (PPDMDEVINS pDevIns, int iInstance, PCFGM AUD_register_card("sb16", &s->card); legacy_reset(s); - if (!s->voice) + if (!AUD_is_host_voice_out_ok(s->voice)) { + LogRel (("SB16: WARNING: Unable to open PCM OUT!\n")); AUD_close_out(&s->card, s->voice); s->voice = NULL; AUD_init_null(); diff --git a/src/VBox/Devices/Audio/alsaaudio.c b/src/VBox/Devices/Audio/alsaaudio.c index 03a2eede0..2f1c66169 100644 --- a/src/VBox/Devices/Audio/alsaaudio.c +++ b/src/VBox/Devices/Audio/alsaaudio.c @@ -31,8 +31,8 @@ #include <alsa/asoundlib.h> -#include "Builtins.h" -#include "../../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #include "audio.h" #ifdef VBOX #include "alsa_stubs.h" diff --git a/src/VBox/Devices/Audio/audio.c b/src/VBox/Devices/Audio/audio.c index 61c9cc500..387cd7599 100644 --- a/src/VBox/Devices/Audio/audio.c +++ b/src/VBox/Devices/Audio/audio.c @@ -22,9 +22,9 @@ * THE SOFTWARE. */ #define LOG_GROUP LOG_GROUP_DEV_AUDIO -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> #include <VBox/log.h> #include <iprt/asm-math.h> @@ -33,8 +33,8 @@ #include <iprt/string.h> #include <iprt/alloc.h> -#include "Builtins.h" -#include "../../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #include <ctype.h> #include <stdlib.h> @@ -121,11 +121,7 @@ static struct { int plive; } conf = { { /* DAC fixed settings */ -#ifndef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT 1, /* enabled */ -#else - 0, -#endif 1, /* nb_voices */ 1, /* greedy */ { @@ -136,11 +132,7 @@ static struct { }, { /* ADC fixed settings */ -#ifndef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT 1, /* enabled */ -#else - 0, -#endif 1, /* nb_voices */ 1, /* greedy */ { @@ -1949,6 +1941,28 @@ void AUD_set_record_source (audrecsource_t *ars, audrecsource_t *als) LogRel(("Audio: set_record_source ars=%d als=%d (not implemented)\n", *ars, *als)); } +int AUD_is_host_voice_in_ok(SWVoiceIn *sw) +{ + AudioState *s = &glob_audio_state; + + if (sw == NULL) { + return 0; + } + + return filteraudio_is_host_voice_in_ok(s->drv, sw->hw); +} + +int AUD_is_host_voice_out_ok(SWVoiceOut *sw) +{ + AudioState *s = &glob_audio_state; + + if (sw == NULL) { + return 0; + } + + return filteraudio_is_host_voice_out_ok(s->drv, sw->hw); +} + /** * @interface_method_impl{PDMIBASE,pfnQueryInterface} */ diff --git a/src/VBox/Devices/Audio/audio.h b/src/VBox/Devices/Audio/audio.h index 35e5540a7..ec363e86e 100644 --- a/src/VBox/Devices/Audio/audio.h +++ b/src/VBox/Devices/Audio/audio.h @@ -199,4 +199,7 @@ uint32_t lsbindex (uint32_t u); const char *audio_get_stream_name(void); #endif +int AUD_is_host_voice_in_ok(SWVoiceIn *hw); +int AUD_is_host_voice_out_ok(SWVoiceOut *hw); + #endif /* audio.h */ diff --git a/src/VBox/Devices/Audio/audio_int.h b/src/VBox/Devices/Audio/audio_int.h index f9cc57317..caa47bfaf 100644 --- a/src/VBox/Devices/Audio/audio_int.h +++ b/src/VBox/Devices/Audio/audio_int.h @@ -332,5 +332,7 @@ int filter_input_begin(void **ppvInputCtx, PFNAUDIOINPUTCALLBACK pfnCallback, vo void filter_input_end(void *pvInputCtx); struct audio_driver *filteraudio_install(struct audio_driver *pDrv, void *pDrvOpaque); +int filteraudio_is_host_voice_in_ok(struct audio_driver *pDrv, HWVoiceIn *phw); +int filteraudio_is_host_voice_out_ok(struct audio_driver *pDrv, HWVoiceOut *phw); #endif /* audio_int.h */ diff --git a/src/VBox/Devices/Audio/audiosniffer.c b/src/VBox/Devices/Audio/audiosniffer.c index c713074cb..72003d328 100644 --- a/src/VBox/Devices/Audio/audiosniffer.c +++ b/src/VBox/Devices/Audio/audiosniffer.c @@ -1,4 +1,4 @@ -/* $Id: audiosniffer.c 35032 2010-12-13 16:35:15Z vboxsync $ */ +/* $Id: audiosniffer.c 35402 2011-01-04 14:59:31Z vboxsync $ */ /** @file * VBox audio device: Audio sniffer device */ @@ -17,7 +17,7 @@ #define LOG_GROUP LOG_GROUP_DEV_AUDIO #define AUDIO_CAP "sniffer" -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> #include <VBox/log.h> @@ -27,8 +27,8 @@ #include <iprt/string.h> #include <iprt/alloc.h> -#include "Builtins.h" -#include "../../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #include "audio.h" #include "audio_int.h" @@ -140,8 +140,72 @@ typedef struct SnifferInputCtx /* If the actual format frequence differs from the requested format, this is not NULL. */ void *rate; + /* Temporary buffer for st_sample_t representation of the input audio data. */ + void *pvSamplesBuffer; + uint32_t cbSamplesBufferAllocated; + + /* Temporary buffer for frequency conversion. */ + void *pvRateBuffer; + uint32_t cbRateBufferAllocated; + } SnifferInputCtx; +static void ictxDelete(SnifferInputCtx *pCtx) +{ + /* The caller will not use this context anymore. */ + if (pCtx->rate) + { + st_rate_stop (pCtx->rate); + } + + RTMemFree(pCtx->pvSamplesBuffer); + RTMemFree(pCtx->pvRateBuffer); + + memset(pCtx, 0, sizeof(*pCtx)); + RTMemFree(pCtx); +} + +static void ictxReallocSamplesBuffer(SnifferInputCtx *pCtx, uint32_t cs) +{ + uint32_t cbBuffer = cs * sizeof(st_sample_t); + + if (cbBuffer > pCtx->cbSamplesBufferAllocated) + { + RTMemFree(pCtx->pvSamplesBuffer); + + pCtx->pvSamplesBuffer = RTMemAlloc(cbBuffer); + if (pCtx->pvSamplesBuffer) + { + pCtx->cbSamplesBufferAllocated = cbBuffer; + } + else + { + pCtx->cbSamplesBufferAllocated = 0; + } + } +} + +static void ictxReallocRateBuffer(SnifferInputCtx *pCtx, uint32_t cs) +{ + uint32_t cbBuffer = cs * sizeof(st_sample_t); + + if (cbBuffer > pCtx->cbRateBufferAllocated) + { + RTMemFree(pCtx->pvRateBuffer); + + pCtx->pvRateBuffer = RTMemAlloc(cbBuffer); + if (pCtx->pvRateBuffer) + { + pCtx->cbRateBufferAllocated = cbBuffer; + } + else + { + pCtx->cbRateBufferAllocated = 0; + } + } +} + + /* * Filter audio output. */ @@ -208,6 +272,10 @@ int filter_input_begin (void **ppvInputCtx, PFNAUDIOINPUTCALLBACK pfnCallback, v pCtx->iFreq = 0; pCtx->conv = NULL; pCtx->rate = NULL; + pCtx->pvSamplesBuffer = NULL; + pCtx->cbSamplesBufferAllocated = 0; + pCtx->pvRateBuffer = NULL; + pCtx->cbRateBufferAllocated = 0; rc = g_pData->pDrv->pfnAudioInputBegin (g_pData->pDrv, &pCtx->pvUserCtx, /* Returned by the pDrv. */ @@ -246,12 +314,7 @@ void filter_input_end(void *pvCtx) if (c == 0) { - /* The caller will not use this context anymore. */ - if (pCtx->rate) - { - st_rate_stop (pCtx->rate); - } - RTMemFree(pCtx); + ictxDelete(pCtx); pCtx = NULL; } @@ -351,36 +414,48 @@ static DECLCALLBACK(int) iface_AudioInputEventData (PPDMIAUDIOSNIFFERPORT pInter && pCtx->conv) { /* Convert PCM samples to st_sample_t. - * And then apply rate convertion if necessary. + * And then apply rate conversion if necessary. + */ + + /* Optimization: allocate 'ps' buffer once per context and reallocate if cbData changes. + * Usually size of packets is constant. */ - /* @todo Optimization: allocate ps buffer once per context and reallocate if cbData changes. */ - uint32_t cs = cbData / pCtx->cBytesPerFrame; - st_sample_t *ps = (st_sample_t *)RTMemAlloc(cs * sizeof(st_sample_t)); + st_sample_t *ps; + uint32_t cs = cbData / pCtx->cBytesPerFrame; /* How many samples. */ + + ictxReallocSamplesBuffer(pCtx, cs); + + ps = (st_sample_t *)pCtx->pvSamplesBuffer; if (ps) { - void *pvSamplesRateDst = NULL; - void *pvSamples = NULL; uint32_t cbSamples = 0; + Assert(pCtx->cbSamplesBufferAllocated >= cs * sizeof(st_sample_t)); + pCtx->conv(ps, pvData, cs, &nominal_volume); if (pCtx->rate) { + st_sample_t *psConverted; uint32_t csConverted = (cs * pCtx->phw->info.freq) / pCtx->iFreq; - pvSamplesRateDst = RTMemAlloc(csConverted * sizeof(st_sample_t)); - if (pvSamplesRateDst) + ictxReallocRateBuffer(pCtx, csConverted); + + psConverted = (st_sample_t *)pCtx->pvRateBuffer; + if (psConverted) { int csSrc = cs; int csDst = csConverted; + Assert(pCtx->cbRateBufferAllocated >= csConverted * sizeof(st_sample_t)); + st_rate_flow (pCtx->rate, - ps, (st_sample_t *)pvSamplesRateDst, + ps, psConverted, &csSrc, &csDst); - pvSamples = pvSamplesRateDst; - cbSamples = csDst * sizeof(st_sample_t); + pvSamples = psConverted; + cbSamples = csDst * sizeof(st_sample_t); /* Use csDst as it may be != csConverted */ } else { @@ -397,9 +472,6 @@ static DECLCALLBACK(int) iface_AudioInputEventData (PPDMIAUDIOSNIFFERPORT pInter { rc = pCtx->pfnFilterCallback(pCtx->pvFilterCallback, cbSamples, pvSamples); } - - RTMemFree(pvSamplesRateDst); - RTMemFree(ps); } else { @@ -427,16 +499,11 @@ static DECLCALLBACK(void) iface_AudioInputEventEnd (PPDMIAUDIOSNIFFERPORT pInter if (c == 0) { - /* The caller will not use this context anymore. */ - if (pCtx->rate) - { - st_rate_stop (pCtx->rate); - } - RTMemFree(pCtx); + ictxDelete(pCtx); + pCtx = NULL; } } - static DECLCALLBACK(int) iface_Setup (PPDMIAUDIOSNIFFERPORT pInterface, bool fEnable, bool fKeepHostAudio) { AUDIOSNIFFERSTATE *pThis = RT_FROM_MEMBER(pInterface, AUDIOSNIFFERSTATE, IPort); diff --git a/src/VBox/Devices/Audio/dsoundaudio.c b/src/VBox/Devices/Audio/dsoundaudio.c index 02308f000..a0ce014b2 100644 --- a/src/VBox/Devices/Audio/dsoundaudio.c +++ b/src/VBox/Devices/Audio/dsoundaudio.c @@ -32,8 +32,8 @@ #include <objbase.h> #include <dsound.h> -#include "Builtins.h" -#include "../../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #include "audio.h" #include <iprt/alloc.h> #include <VBox/log.h> @@ -234,9 +234,6 @@ static void dsound_log_hresult (HRESULT hr) } AUD_log (AUDIO_CAP, "Reason: %s\n", str); -#ifdef VBOX - LogRel(("DSound: Reason: %s\n", str)); -#endif } static void GCC_FMT_ATTR (2, 3) dsound_logerr ( @@ -717,6 +714,13 @@ static int dsound_run_out (HWVoiceOut *hw) &ppos, ds->first_time ? &wpos : NULL ); + if (hr == DSERR_BUFFERLOST) { + if (dsound_restore_out(dsb)) + return 0; + hr = IDirectSoundBuffer_GetCurrentPosition(dsb, &ppos, ds->first_time ? &wpos : NULL); + if (hr == DSERR_BUFFERLOST) + return 0; // Avoid log flooding if the error is still there. + } if (FAILED (hr)) { dsound_logerr (hr, "Could not get playback buffer position\n"); return 0; diff --git a/src/VBox/Devices/Audio/filteraudio.c b/src/VBox/Devices/Audio/filteraudio.c index 61ddfd27f..239fcb35c 100644 --- a/src/VBox/Devices/Audio/filteraudio.c +++ b/src/VBox/Devices/Audio/filteraudio.c @@ -1,4 +1,4 @@ -/* $Id: filteraudio.c 34969 2010-12-10 19:08:32Z vboxsync $ */ +/* $Id: filteraudio.c 35487 2011-01-11 13:45:20Z vboxsync $ */ /** @file * VBox audio devices: filter driver, which sits between the host audio driver * and the virtual audio device and intercept all host driver operations. @@ -728,6 +728,15 @@ static int filteraudio_ctl_in(HWVoiceIn *phw, int cmd, ...) /* Check if the voice has been intercepted. */ if (!pVoice->fIntercepted) { + if (!pVoice->fHostOK) + { + /* Host did not initialize the voice. Theoretically should not happen, because + * audio.c should not disable a voice which has not been enabled at all. + */ + Log(("FilterAudio: [Input]: ctl_in DISABLE voice %p (hw %p) not available on host\n", pVoice, pVoice->phw)); + return -1; + } + /* Note: audio.c does not use variable parameters '...', so ok to forward only 'phw' and 'cmd'. */ Log(("FilterAudio: [Input]: forwarding ctl_in DISABLE for voice %p (hw %p)\n", pVoice, pVoice->phw)); return filter_conf.pDrv->pcm_ops->ctl_in(phw, cmd); @@ -769,8 +778,12 @@ static void filteraudio_fini_in(HWVoiceIn *phw) pVoice = (filterVoiceIn *)((uint8_t *)phw + filter_conf.pDrv->voice_size_in); /* Uninitialize both host and filter parts of the voice. */ - Log(("FilterAudio: [Input]: forwarding fini_in for voice %p (hw %p)\n", pVoice, pVoice->phw)); - filter_conf.pDrv->pcm_ops->fini_in(phw); + if (pVoice->fHostOK) + { + /* Uninit host part only if it was initialized by host. */ + Log(("FilterAudio: [Input]: forwarding fini_in for voice %p (hw %p)\n", pVoice, pVoice->phw)); + filter_conf.pDrv->pcm_ops->fini_in(phw); + } Log(("FilterAudio: [Input]: fini_in for voice %p (hw %p)\n", pVoice, pVoice->phw)); @@ -877,6 +890,7 @@ static void filteraudio_audio_fini(void *opaque) { filter_conf.pDrv->fini(opaque); filter_conf.pDrv = NULL; + filter_conf.pDrvOpaque = NULL; } } @@ -930,3 +944,39 @@ struct audio_driver *filteraudio_install(struct audio_driver *pDrv, void *pDrvOp return &filteraudio_audio_driver; } + +int filteraudio_is_host_voice_in_ok(struct audio_driver *pDrv, HWVoiceIn *phw) +{ + filterVoiceIn *pVoice; + + if (pDrv != &filteraudio_audio_driver) + { + /* This is not the driver for which the filter was installed. + * The filter has no idea and assumes that if the voice + * is not NULL then it is a valid host voice. + */ + return (phw != NULL); + } + + if (!filter_conf.pDrv) + { + AssertFailed(); + return (phw != NULL); + } + + pVoice = (filterVoiceIn *)((uint8_t *)phw + filter_conf.pDrv->voice_size_in); + + return pVoice->fHostOK; +} + +int filteraudio_is_host_voice_out_ok(struct audio_driver *pDrv, HWVoiceOut *phw) +{ + /* Output is not yet implemented and there are no filter voices. + * The filter has no idea and assumes that if the voice + * is not NULL then it is a valid host voice. + * + * @todo: similar to filteraudio_is_host_voice_in_ok + */ + NOREF(pDrv); + return (phw != NULL); +} diff --git a/src/VBox/Devices/Audio/mixeng.c b/src/VBox/Devices/Audio/mixeng.c index 3bcee5782..574cf30ac 100644 --- a/src/VBox/Devices/Audio/mixeng.c +++ b/src/VBox/Devices/Audio/mixeng.c @@ -23,8 +23,8 @@ * THE SOFTWARE. */ -#include "Builtins.h" -#include "../../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #include "audio.h" #ifdef VBOX # include <iprt/asm-math.h> diff --git a/src/VBox/Devices/Audio/noaudio.c b/src/VBox/Devices/Audio/noaudio.c index eed3883dd..e1155a593 100644 --- a/src/VBox/Devices/Audio/noaudio.c +++ b/src/VBox/Devices/Audio/noaudio.c @@ -21,8 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -#include "Builtins.h" -#include "../../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #include "audio.h" #include <iprt/alloc.h> diff --git a/src/VBox/Devices/Audio/ossaudio.c b/src/VBox/Devices/Audio/ossaudio.c index c2a52bf4d..292b53454 100644 --- a/src/VBox/Devices/Audio/ossaudio.c +++ b/src/VBox/Devices/Audio/ossaudio.c @@ -34,8 +34,8 @@ #include <sys/ioctl.h> #include <sys/soundcard.h> -#include "Builtins.h" -#include "../../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #include "audio.h" #include <iprt/alloc.h> diff --git a/src/VBox/Devices/Audio/pulseaudio.c b/src/VBox/Devices/Audio/pulseaudio.c index 06bc001d2..eb70fadde 100644 --- a/src/VBox/Devices/Audio/pulseaudio.c +++ b/src/VBox/Devices/Audio/pulseaudio.c @@ -26,7 +26,7 @@ #include <pulse/pulseaudio.h> #include "pulse_stubs.h" -#include "../../vl_vbox.h" +#include "vl_vbox.h" #include "audio.h" #define AUDIO_CAP "pulse" #include "audio_int.h" diff --git a/src/VBox/Devices/Audio/solaudio.c b/src/VBox/Devices/Audio/solaudio.c index 2b8225f94..dc4c0900e 100644 --- a/src/VBox/Devices/Audio/solaudio.c +++ b/src/VBox/Devices/Audio/solaudio.c @@ -1,4 +1,4 @@ -/* $Id: solaudio.c 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: solaudio.c 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VirtualBox Audio Driver - Solaris host. */ @@ -31,7 +31,7 @@ #include <VBox/log.h> #include <iprt/env.h> -#include "Builtins.h" +#include "VBoxDD.h" #include "vl_vbox.h" #include "audio.h" #include <iprt/alloc.h> diff --git a/src/VBox/Devices/Audio/winaudio.c b/src/VBox/Devices/Audio/winaudio.c index a96973034..5d0532d17 100644 --- a/src/VBox/Devices/Audio/winaudio.c +++ b/src/VBox/Devices/Audio/winaudio.c @@ -19,7 +19,7 @@ #include <Windows.h> #include <mmsystem.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> #define LOG_GROUP LOG_GROUP_DEV_AC97 @@ -29,8 +29,8 @@ #include <iprt/string.h> #include <iprt/alloc.h> -#include "Builtins.h" -#include "../../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #include "audio.h" #include "audio_int.h" diff --git a/src/VBox/Devices/Bus/DevPCI.cpp b/src/VBox/Devices/Bus/DevPCI.cpp index 4f5dfd5e2..720f349a7 100644 --- a/src/VBox/Devices/Bus/DevPCI.cpp +++ b/src/VBox/Devices/Bus/DevPCI.cpp @@ -1,4 +1,4 @@ -/* $Id: DevPCI.cpp 34751 2010-12-06 14:26:43Z vboxsync $ */ +/* $Id: DevPCI.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevPCI - PCI BUS Device. */ @@ -47,12 +47,12 @@ /* Hack to get PCIDEVICEINT declare at the right point - include "PCIInternal.h". */ #define PCI_INCLUDE_PRIVATE #include <VBox/pci.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/asm.h> #include <iprt/assert.h> #include <iprt/string.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Bus/DevPciIch9.cpp b/src/VBox/Devices/Bus/DevPciIch9.cpp index d447ef0bd..681674f36 100644 --- a/src/VBox/Devices/Bus/DevPciIch9.cpp +++ b/src/VBox/Devices/Bus/DevPciIch9.cpp @@ -1,4 +1,4 @@ -/* $Id: DevPciIch9.cpp 35258 2010-12-20 17:12:57Z vboxsync $ */ +/* $Id: DevPciIch9.cpp 35397 2011-01-03 23:11:50Z vboxsync $ */ /** @file * DevPCI - ICH9 southbridge PCI bus emulation Device. */ @@ -23,7 +23,7 @@ #define PCI_INCLUDE_PRIVATE #include <VBox/pci.h> #include <VBox/msi.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/asm.h> #include <iprt/assert.h> #include <iprt/string.h> @@ -31,7 +31,7 @@ #include <iprt/alloc.h> #endif -#include "../Builtins.h" +#include "VBoxDD.h" #include "MsiCommon.h" @@ -717,6 +717,42 @@ DECLINLINE(uint32_t) ich9pciGetRegionReg(int iRegion) #define INVALID_PCI_ADDRESS ~0U +static int ich9pciUnmapRegion(PPCIDEVICE pDev, int iRegion) +{ + PCIIORegion* pRegion = &pDev->Int.s.aIORegions[iRegion]; + int rc = VINF_SUCCESS; + PPCIBUS pBus = pDev->Int.s.CTX_SUFF(pBus); + + Assert (pRegion->size != 0); + + if (pRegion->addr != INVALID_PCI_ADDRESS) + { + if (pRegion->type & PCI_ADDRESS_SPACE_IO) + { + /* Port IO */ + rc = PDMDevHlpIOPortDeregister(pDev->pDevIns, pRegion->addr, pRegion->size); + AssertRC(rc); + } + else + { + RTGCPHYS GCPhysBase = pRegion->addr; + if (pBus->pPciHlpR3->pfnIsMMIO2Base(pBus->pDevInsR3, pDev->pDevIns, GCPhysBase)) + { + /* unmap it. */ + rc = pRegion->map_func(pDev, iRegion, NIL_RTGCPHYS, pRegion->size, (PCIADDRESSSPACE)(pRegion->type)); + AssertRC(rc); + rc = PDMDevHlpMMIO2Unmap(pDev->pDevIns, iRegion, GCPhysBase); + } + else + rc = PDMDevHlpMMIODeregister(pDev->pDevIns, GCPhysBase, pRegion->size); + } + + pRegion->addr = INVALID_PCI_ADDRESS; + } + + return rc; +} + static void ich9pciUpdateMappings(PCIDevice* pDev) { PPCIBUS pBus = pDev->Int.s.CTX_SUFF(pBus); @@ -777,28 +813,8 @@ static void ich9pciUpdateMappings(PCIDevice* pDev) if (uNew != pRegion->addr) { if (pRegion->addr != INVALID_PCI_ADDRESS) - { - if (pRegion->type & PCI_ADDRESS_SPACE_IO) - { - /* Port IO */ - rc = PDMDevHlpIOPortDeregister(pDev->pDevIns, pRegion->addr, pRegion->size); - AssertRC(rc); - } - else - { - RTGCPHYS GCPhysBase = pRegion->addr; - if (pBus->pPciHlpR3->pfnIsMMIO2Base(pBus->pDevInsR3, pDev->pDevIns, GCPhysBase)) - { - /* unmap it. */ - rc = pRegion->map_func(pDev, iRegion, NIL_RTGCPHYS, pRegion->size, (PCIADDRESSSPACE)(pRegion->type)); - AssertRC(rc); - rc = PDMDevHlpMMIO2Unmap(pDev->pDevIns, iRegion, GCPhysBase); - } - else - rc = PDMDevHlpMMIODeregister(pDev->pDevIns, GCPhysBase, pRegion->size); - AssertMsgRC(rc, ("rc=%Rrc d=%s i=%d GCPhysBase=%RGp size=%#x\n", rc, pDev->name, iRegion, GCPhysBase, pRegion->size)); - } - } + ich9pciUnmapRegion(pDev, iRegion); + pRegion->addr = uNew; if (pRegion->addr != INVALID_PCI_ADDRESS) { @@ -2357,7 +2373,7 @@ static DECLCALLBACK(int) ich9pciConstruct(PPDMDEVINS pDevIns, /* capability */ PCIDevSetWord(&pBus->aPciDev, 0x50, VBOX_PCI_CAP_ID_SSVID); PCIDevSetDWord(&pBus->aPciDev, 0x54, 0x00000000); /* Subsystem vendor ids */ - + pBus->aPciDev.pDevIns = pDevIns; /* We register Host<->PCI controller on the bus */ ich9pciRegisterInternal(pBus, -1, &pBus->aPciDev, "i82801"); @@ -2461,8 +2477,18 @@ static DECLCALLBACK(int) ich9pciConstruct(PPDMDEVINS pDevIns, static void ich9pciResetDevice(PPCIDEVICE pDev) { + PPCIBUS pBus = pDev->Int.s.CTX_SUFF(pBus); + int rc; + /* Clear regions */ - memset(&pDev->Int.s.aIORegions, 0, sizeof(pDev->Int.s.aIORegions)); + for (int iRegion = 0; iRegion < PCI_NUM_REGIONS; iRegion++) + { + PCIIORegion* pRegion = &pDev->Int.s.aIORegions[iRegion]; + if (pRegion->size == 0) + continue; + + ich9pciUnmapRegion(pDev, iRegion); + } PCIDevSetCommand(pDev, PCIDevGetCommand(pDev) diff --git a/src/VBox/Devices/Bus/DevPciRaw.cpp b/src/VBox/Devices/Bus/DevPciRaw.cpp index f182e879e..affc1db0a 100644 --- a/src/VBox/Devices/Bus/DevPciRaw.cpp +++ b/src/VBox/Devices/Bus/DevPciRaw.cpp @@ -1,4 +1,4 @@ -/* $Id: DevPciRaw.cpp 34876 2010-12-09 11:16:00Z vboxsync $ */ +/* $Id: DevPciRaw.cpp 35358 2010-12-28 07:58:40Z vboxsync $ */ /** @file * PCI passthrough device emulation. */ @@ -19,13 +19,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_PCI -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <iprt/assert.h> #include <iprt/string.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* * Defined Constants And Macros * diff --git a/src/VBox/Devices/Bus/MsiCommon.cpp b/src/VBox/Devices/Bus/MsiCommon.cpp index c6b12a888..a7c5fb51b 100644 --- a/src/VBox/Devices/Bus/MsiCommon.cpp +++ b/src/VBox/Devices/Bus/MsiCommon.cpp @@ -1,4 +1,4 @@ -/* $Id: MsiCommon.cpp 33419 2010-10-25 12:45:01Z vboxsync $ */ +/* $Id: MsiCommon.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MSI support routines */ @@ -19,7 +19,7 @@ #define PCI_INCLUDE_PRIVATE #include <VBox/pci.h> #include <VBox/msi.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> #include "MsiCommon.h" diff --git a/src/VBox/Devices/Bus/MsixCommon.cpp b/src/VBox/Devices/Bus/MsixCommon.cpp index f686e1722..7fbe548b0 100644 --- a/src/VBox/Devices/Bus/MsixCommon.cpp +++ b/src/VBox/Devices/Bus/MsixCommon.cpp @@ -1,4 +1,4 @@ -/* $Id: MsixCommon.cpp 33317 2010-10-21 16:01:42Z vboxsync $ */ +/* $Id: MsixCommon.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MSI-X support routines */ @@ -19,9 +19,9 @@ #define PCI_INCLUDE_PRIVATE #include <VBox/pci.h> #include <VBox/msi.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> #include <iprt/assert.h> diff --git a/src/VBox/Devices/Bus/PCIInternal.h b/src/VBox/Devices/Bus/PCIInternal.h index a16101524..cad148e47 100644 --- a/src/VBox/Devices/Bus/PCIInternal.h +++ b/src/VBox/Devices/Bus/PCIInternal.h @@ -1,4 +1,4 @@ -/* $Id: PCIInternal.h 34331 2010-11-24 16:24:17Z vboxsync $ */ +/* $Id: PCIInternal.h 35358 2010-12-28 07:58:40Z vboxsync $ */ /** @file * DevPCI - PCI Internal header - Only for hiding bits of PCIDEVICE. */ diff --git a/src/VBox/Devices/EFI/DevEFI.cpp b/src/VBox/Devices/EFI/DevEFI.cpp index d1238e1f5..413395fd1 100644 --- a/src/VBox/Devices/EFI/DevEFI.cpp +++ b/src/VBox/Devices/EFI/DevEFI.cpp @@ -1,4 +1,4 @@ -/* $Id: DevEFI.cpp 35218 2010-12-17 12:45:16Z vboxsync $ */ +/* $Id: DevEFI.cpp 35431 2011-01-07 15:19:34Z vboxsync $ */ /** @file * DevEFI - EFI <-> VirtualBox Integration Framework. */ @@ -20,13 +20,13 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_EFI -#include <VBox/pdmdev.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> #include <VBox/log.h> #include <VBox/err.h> #include <VBox/param.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <iprt/asm.h> #include <iprt/assert.h> @@ -43,8 +43,8 @@ #endif #include "Firmware2/VBoxPkg/Include/DevEFI.h" -#include "../Builtins.h" -#include "../Builtins2.h" +#include "VBoxDD.h" +#include "VBoxDD2.h" #include "../PC/DevFwCommon.h" /* EFI includes */ @@ -612,7 +612,8 @@ static int efiFindEntryPoint(EFI_FFS_FILE_HEADER const *pFfsFile, uint32_t cbFfs EFI_IMAGE_NT_HEADERS32 Nt32; EFI_IMAGE_NT_HEADERS64 Nt64; EFI_TE_IMAGE_HEADER Te; - } const *pHdr = (EfiHdrUnion const *)pbImage; + }; + EfiHdrUnion const *pHdr = (EfiHdrUnion const *)pbImage; /* Skip MZ if found. */ if (pHdr->Dos.e_magic == RT_MAKE_U16('M', 'Z')) diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/ReadMe.txt b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/ReadMe.txt index 85f0d42a2..cddae9e8a 100644 --- a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/ReadMe.txt +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/ReadMe.txt @@ -1,4 +1,4 @@ -$Id: ReadMe.txt 29156 2010-05-06 13:50:07Z vboxsync $ +$Id: ReadMe.txt 35557 2011-01-14 13:12:26Z vboxsync $ Setting up the source trees =========================== @@ -14,12 +14,12 @@ Enter into the edk2 directory and check out EFI/Firmware2/VBoxPkg into a VBoxPkg subdirectory: svn checkout \ - https://linserv.germany.sun.com/vbox/svn/trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg VBoxPkg + http://www.virtualbox.org/svn/vbox/trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg VBoxPkg Enter into the VBoxPkg/Include and check out include/iprt and include/VBox: - svn checkout https://linserv.germany.sun.com/vbox/svn/trunk/include/iprt iprt - svn checkout https://linserv.germany.sun.com/vbox/svn/trunk/include/VBox VBox + svn checkout http://www.virtualbox.org/svn/vbox/trunk/include/iprt iprt + svn checkout http://www.virtualbox.org/svn/vbox/trunk/include/VBox VBox Then copy version-generated.h from <VBox-trunk>/out/win.*/*/version-generated.h (into VBoxPkg/include/). diff --git a/src/VBox/Devices/Graphics/BIOS/Makefile.kmk b/src/VBox/Devices/Graphics/BIOS/Makefile.kmk index 8b684c2e4..38f89c7b2 100644 --- a/src/VBox/Devices/Graphics/BIOS/Makefile.kmk +++ b/src/VBox/Devices/Graphics/BIOS/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34399 2010-11-26 16:30:44Z vboxsync $ +# $Id: Makefile.kmk 35440 2011-01-09 23:43:10Z vboxsync $ ## @file # VGA BIOS Sub-Makefile # @@ -37,30 +37,30 @@ LIBRARIES += VgaBiosBin VgaBiosBin_TEMPLATE = VBOXR3 VgaBiosBin_DEFS = IN_VBOXDD2 VgaBiosBin_INCS = $(VBOX_PATH_DEVICES_SRC) -VgaBiosBin_SOURCES = $(PATH_VgaBiosBin)/VgaBiosBin.c +VgaBiosBin_SOURCES = $(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c VgaBiosBin_CLEAN = \ - $(PATH_VgaBiosBin)/vbetables.h \ + $(VgaBiosBin_0_OUTDIR)/vbetables.h \ \ - $(PATH_VgaBiosBin)/_vgabios_.c \ - $(PATH_VgaBiosBin)/vgabios0.s \ - $(PATH_VgaBiosBin)/vgabios1.s \ - $(PATH_VgaBiosBin)/vgabios.tmp \ - $(PATH_VgaBiosBin)/vgabios.lst \ - $(PATH_VgaBiosBin)/vgabios.bin \ - $(PATH_VgaBiosBin)/VgaBiosBin.c \ - $(PATH_VgaBiosBin)/VgaDefBiosLogo.c \ + $(VgaBiosBin_0_OUTDIR)/_vgabios_.c \ + $(VgaBiosBin_0_OUTDIR)/vgabios0.s \ + $(VgaBiosBin_0_OUTDIR)/vgabios1.s \ + $(VgaBiosBin_0_OUTDIR)/vgabios.tmp \ + $(VgaBiosBin_0_OUTDIR)/vgabios.lst \ + $(VgaBiosBin_0_OUTDIR)/vgabios.bin \ + $(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c \ + $(VgaBiosBin_0_OUTDIR)/VgaDefBiosLogo.c \ \ - $(PATH_VgaBiosBin)/_vgabios-cirrus_.c \ - $(PATH_VgaBiosBin)/vgabios-cirrus0.s \ - $(PATH_VgaBiosBin)/vgabios-cirrus1.s \ - $(PATH_VgaBiosBin)/vgabios-cirrus.tmp \ - $(PATH_VgaBiosBin)/vgabios-cirrus.lst \ - $(PATH_VgaBiosBin)/vgabios-cirrus.bin + $(VgaBiosBin_0_OUTDIR)/_vgabios-cirrus_.c \ + $(VgaBiosBin_0_OUTDIR)/vgabios-cirrus0.s \ + $(VgaBiosBin_0_OUTDIR)/vgabios-cirrus1.s \ + $(VgaBiosBin_0_OUTDIR)/vgabios-cirrus.tmp \ + $(VgaBiosBin_0_OUTDIR)/vgabios-cirrus.lst \ + $(VgaBiosBin_0_OUTDIR)/vgabios-cirrus.bin # # Rule for making the bios. # -$$(PATH_VgaBiosBin)/VgaBiosBin.c: $$(PATH_VgaBiosBin)/vgabios.bin $(VBOX_BIN2C) +$$(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c: $$(VgaBiosBin_0_OUTDIR)/vgabios.bin $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,VgaBiosBin,$<,$@) $(QUIET)$(VBOX_BIN2C) -min 36 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary $< $@ @@ -69,12 +69,12 @@ $$(PATH_VgaBiosBin)/VgaBiosBin.c: $$(PATH_VgaBiosBin)/vgabios.bin $(VBOX_BIN2C) # # 1. create vbetables.h -$$(PATH_VgaBiosBin)/vbetables.h: $(MAKEFILE_CURRENT) $$(TARGET_vbetables-gen) | $$(dir $$@) - $(QUIET)$(REDIRECT) -wo $@ -- $(TARGET_vbetables-gen) +$$(VgaBiosBin_0_OUTDIR)/vbetables.h: $(MAKEFILE_CURRENT) $$(vbetables-gen_1_TARGET) | $$(dir $$@) + $(QUIET)$(REDIRECT) -wo $@ -- $(vbetables-gen_1_TARGET) # 2. precompile # WARNING! DEBUG is undefined here to keep the image size stable between debug and release builds. -$$(PATH_VgaBiosBin)/_vgabios_.c: $(addprefix $(PATH_SUB_CURRENT)/,vgabios.c vgabios.h vbe.h vgatables.h vgafonts.h vbe.c clext.c) $$(PATH_VgaBiosBin)/vbetables.h $(PATH_ROOT)/include/VBox/Hardware/VBoxVideoVBE.h $(VBOX_VERSION_STAMP) +$$(VgaBiosBin_0_OUTDIR)/_vgabios_.c: $(addprefix $(PATH_SUB_CURRENT)/,vgabios.c vgabios.h vbe.h vgatables.h vgafonts.h vbe.c clext.c) $$(VgaBiosBin_0_OUTDIR)/vbetables.h $(PATH_ROOT)/include/VBox/Hardware/VBoxVideoVBE.h $(VBOX_VERSION_STAMP) $(call MSG_TOOL,cpp,VgaBiosBin,$<,$@) $(QUIET)$(TOOL_$(VBOX_GCC_TOOL)_CC) -E -P \ -DVBOX -DVBOX_VERSION_STRING=\"$(VBOX_VERSION_STRING)\" \ @@ -85,23 +85,23 @@ $$(PATH_VgaBiosBin)/_vgabios_.c: $(addprefix $(PATH_SUB_CURRENT)/,vgabios.c vgab # 3. compile # BCC tempfile clashes, order the BCC jobs to make sure they don't interfere with one another. -$$(PATH_VgaBiosBin)/vgabios0.s: $$(PATH_VgaBiosBin)/_vgabios_.c | $(VBOX_BCC_JOBS) +$$(VgaBiosBin_0_OUTDIR)/vgabios0.s: $$(VgaBiosBin_0_OUTDIR)/_vgabios_.c | $(VBOX_BCC_JOBS) $(call MSG_COMPILE,VgaBiosBin,$<,$@,C) $(QUIET)$(VBOX_BCC) -o $@ -C-c -D__i86__ -0 -S $^ -VBOX_BCC_JOBS += $(PATH_VgaBiosBin)/vgabios0.s +VBOX_BCC_JOBS += $(VgaBiosBin_0_OUTDIR)/vgabios0.s # 4. preprocess intermediate assembly. -$$(PATH_VgaBiosBin)/vgabios1.s: $$(PATH_VgaBiosBin)/vgabios0.s +$$(VgaBiosBin_0_OUTDIR)/vgabios1.s: $$(VgaBiosBin_0_OUTDIR)/vgabios0.s $(call MSG_TOOL,Adjusting BCC Assembly,VgaBiosBin,$<,$@) $(QUIET)$(SED) -e 's/^\.text//' -e 's/^\.data//' --output $@ $^ # 5. assemble -$$(PATH_VgaBiosBin)/vgabios.tmp $$(PATH_VgaBiosBin)/vgabios.lst: $$(PATH_VgaBiosBin)/vgabios1.s +$$(VgaBiosBin_0_OUTDIR)/vgabios.tmp $$(VgaBiosBin_0_OUTDIR)/vgabios.lst: $$(VgaBiosBin_0_OUTDIR)/vgabios1.s $(call MSG_COMPILE,VgaBiosBin,$<,$@,AS) - $(QUIET)$(REDIRECT) -ri $^ -- $(VBOX_AS86) -b $(PATH_VgaBiosBin)/vgabios.tmp -u- -w- -g -0 -j -O -l $(PATH_VgaBiosBin)/vgabios.lst + $(QUIET)$(REDIRECT) -ri $^ -- $(VBOX_AS86) -b $(VgaBiosBin_0_OUTDIR)/vgabios.tmp -u- -w- -g -0 -j -O -l $(VgaBiosBin_0_OUTDIR)/vgabios.lst # 6. checksums -$$(PATH_VgaBiosBin)/vgabios.bin: $$(PATH_VgaBiosBin)/vgabios.tmp $$(VBOX_BIOSSUMS) +$$(VgaBiosBin_0_OUTDIR)/vgabios.bin: $$(VgaBiosBin_0_OUTDIR)/vgabios.tmp $$(VBOX_BIOSSUMS) $(call MSG_TOOL,biossums,VgaBiosBin,$<,$@) $(QUIET)$(VBOX_BIOSSUMS) $< $@ @@ -111,12 +111,12 @@ $$(PATH_VgaBiosBin)/vgabios.bin: $$(PATH_VgaBiosBin)/vgabios.tmp $$(VBOX_BIOSSUM LIBRARIES += VgaDefBiosLogo VgaDefBiosLogo_TEMPLATE = VBOXR3 VgaDefBiosLogo_INCS = $(VBOX_PATH_DEVICES_SRC) -VgaDefBiosLogo_SOURCES = $(PATH_VgaBiosBin)/VgaDefBiosLogo.c +VgaDefBiosLogo_SOURCES = $(VgaBiosBin_0_OUTDIR)/VgaDefBiosLogo.c # # Rule for making the bios logo. # -$$(PATH_VgaBiosBin)/VgaDefBiosLogo.c: $(VBOX_BRAND_BIOS_LOGO) $(VBOX_BIN2C) +$$(VgaBiosBin_0_OUTDIR)/VgaDefBiosLogo.c: $(VBOX_BRAND_BIOS_LOGO) $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,VgaBiosBin,$<,$@) $(QUIET)$(VBOX_BIN2C) VgaDefBiosLogo $< $@ diff --git a/src/VBox/Devices/Graphics/DevVGA.cpp b/src/VBox/Devices/Graphics/DevVGA.cpp index 28f044e2b..5d8eb188a 100644 --- a/src/VBox/Devices/Graphics/DevVGA.cpp +++ b/src/VBox/Devices/Graphics/DevVGA.cpp @@ -1,4 +1,4 @@ -/* $Id: DevVGA.cpp 35025 2010-12-13 16:01:15Z vboxsync $ */ +/* $Id: DevVGA.cpp 35409 2011-01-05 16:01:54Z vboxsync $ */ /** @file * DevVGA - VBox VGA/VESA device. */ @@ -105,8 +105,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_VGA -#include <VBox/pdmdev.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pgm.h> #ifdef IN_RING3 #include <iprt/alloc.h> #include <iprt/ctype.h> @@ -131,8 +131,8 @@ #endif #include "vl_vbox.h" -#include "Builtins.h" -#include "Builtins2.h" +#include "VBoxDD.h" +#include "VBoxDD2.h" /******************************************************************************* @@ -1038,6 +1038,11 @@ static int vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) return VINF_SUCCESS; /* Note: silent failure like before */ } + /* When VBE interface is enabled, it is reset. */ + s->vbe_regs[VBE_DISPI_INDEX_X_OFFSET] = 0; + s->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET] = 0; + fRecalculate = true; + /* clear the screen (should be done in BIOS) */ if (!(val & VBE_DISPI_NOCLEARMEM)) { uint16_t cY = RT_MIN(s->vbe_regs[VBE_DISPI_INDEX_YRES], @@ -4656,6 +4661,11 @@ static DECLCALLBACK(int) vgaPortTakeScreenshot(PPDMIDISPLAYPORT pInterface, uint *pcx = Connector.cx; *pcy = Connector.cy; } + else + { + /* If we do not return a success, then the data buffer must be freed. */ + RTMemFree(pu8Data); + } } } else diff --git a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp index 04b5c72a1..6079da700 100644 --- a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp +++ b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp @@ -15,10 +15,10 @@ */ #define LOG_GROUP LOG_GROUP_DEV_VGA -#include <VBox/pdmifs.h> -#include <VBox/pdmdev.h> -#include <VBox/pgm.h> -#include <VBox/ssm.h> +#include <VBox/vmm/pdmifs.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/ssm.h> #include <VBox/VMMDev.h> #include <VBox/VBoxVideo.h> #include <iprt/alloc.h> diff --git a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp index d220397db..e51ac4077 100644 --- a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp +++ b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp @@ -14,7 +14,7 @@ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ //#include <VBox/VMMDev.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/VBoxVideo.h> #include <iprt/semaphore.h> #include <iprt/thread.h> diff --git a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp index d6ae238b9..3f8ee26c7 100644 --- a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp +++ b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp @@ -66,7 +66,7 @@ #include <VBox/err.h> #define LOG_GROUP LOG_GROUP_DEV_VGA #include <VBox/log.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #include "HGSMIHost.h" #include <VBox/HGSMI/HGSMIChannels.h> diff --git a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h index 728d6aabb..fb8eb127a 100644 --- a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h +++ b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h @@ -20,7 +20,7 @@ #ifndef ___HGSMIHost_h #define ___HGSMIHost_h -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/HGSMI/HGSMI.h> #include <VBox/HGSMI/HGSMIChSetup.h> diff --git a/src/VBox/Devices/Input/DevPS2.cpp b/src/VBox/Devices/Input/DevPS2.cpp index b17e7b477..7fd0f91ad 100644 --- a/src/VBox/Devices/Input/DevPS2.cpp +++ b/src/VBox/Devices/Input/DevPS2.cpp @@ -1,4 +1,4 @@ -/* $Id: DevPS2.cpp 34371 2010-11-25 14:12:51Z vboxsync $ */ +/* $Id: DevPS2.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevPS2 - PS/2 keyboard & mouse controller device. */ @@ -46,11 +46,11 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_KBD #include "vl_vbox.h" -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/uuid.h> -#include "../Builtins.h" +#include "VBoxDD.h" #define PCKBD_SAVED_STATE_VERSION 5 diff --git a/src/VBox/Devices/Input/DrvKeyboardQueue.cpp b/src/VBox/Devices/Input/DrvKeyboardQueue.cpp index d07184e9c..1fe7e8479 100644 --- a/src/VBox/Devices/Input/DrvKeyboardQueue.cpp +++ b/src/VBox/Devices/Input/DrvKeyboardQueue.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvKeyboardQueue.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DrvKeyboardQueue.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox input devices: Keyboard queue driver */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_KBD_QUEUE -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" diff --git a/src/VBox/Devices/Input/DrvMouseQueue.cpp b/src/VBox/Devices/Input/DrvMouseQueue.cpp index 988a94c2c..ed1689b18 100644 --- a/src/VBox/Devices/Input/DrvMouseQueue.cpp +++ b/src/VBox/Devices/Input/DrvMouseQueue.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvMouseQueue.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DrvMouseQueue.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox input devices: Mouse queue driver */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_MOUSE_QUEUE -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" diff --git a/src/VBox/Devices/Input/UsbKbd.cpp b/src/VBox/Devices/Input/UsbKbd.cpp index d8a4e0c5e..e4db5cca4 100644 --- a/src/VBox/Devices/Input/UsbKbd.cpp +++ b/src/VBox/Devices/Input/UsbKbd.cpp @@ -1,4 +1,4 @@ -/* $Id: UsbKbd.cpp 34028 2010-11-12 10:52:49Z vboxsync $ */ +/* $Id: UsbKbd.cpp 35438 2011-01-07 19:47:06Z vboxsync $ */ /** @file * UsbKbd - USB Human Interface Device Emulation, Keyboard. */ @@ -19,7 +19,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_USB_KBD -#include <VBox/pdmusb.h> +#include <VBox/vmm/pdmusb.h> #include <VBox/log.h> #include <VBox/err.h> #include <iprt/assert.h> @@ -28,7 +28,7 @@ #include <iprt/semaphore.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* @@ -578,8 +578,8 @@ static int usbHidCompleteStall(PUSBHID pThis, PUSBHIDEP pEp, PVUSBURB pUrb, cons pEp->fHalted = true; else { + pThis->aEps[0].fHalted = true; pThis->aEps[1].fHalted = true; - pThis->aEps[2].fHalted = true; } usbHidLinkDone(pThis, pUrb); diff --git a/src/VBox/Devices/Input/UsbMouse.cpp b/src/VBox/Devices/Input/UsbMouse.cpp index ef8f4bbda..3cc36854c 100644 --- a/src/VBox/Devices/Input/UsbMouse.cpp +++ b/src/VBox/Devices/Input/UsbMouse.cpp @@ -18,7 +18,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_USB_MSD -#include <VBox/pdmusb.h> +#include <VBox/vmm/pdmusb.h> #include <VBox/log.h> #include <VBox/err.h> #include <iprt/assert.h> @@ -27,7 +27,7 @@ #include <iprt/semaphore.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* @@ -615,8 +615,8 @@ static int usbHidCompleteStall(PUSBHID pThis, PUSBHIDEP pEp, PVUSBURB pUrb, cons pEp->fHalted = true; else { + pThis->aEps[0].fHalted = true; pThis->aEps[1].fHalted = true; - pThis->aEps[2].fHalted = true; } usbHidLinkDone(pThis, pUrb); diff --git a/src/VBox/Devices/Makefile.kmk b/src/VBox/Devices/Makefile.kmk index ade388c3b..4eaa9b667 100644 --- a/src/VBox/Devices/Makefile.kmk +++ b/src/VBox/Devices/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34906 2010-12-09 16:29:49Z vboxsync $ +# $Id: Makefile.kmk 35572 2011-01-14 14:51:16Z vboxsync $ ## @file # Top-level sub-makefile for the devices, drivers and services. # @@ -23,7 +23,7 @@ include $(KBUILD_PATH)/subheader.kmk include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS) include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk -else ifndef VBOX_WITHOUT_ETHERBOOT +else if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT) include $(PATH_SUB_CURRENT)/PC/Etherboot-src/Makefile.kmk endif if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. @@ -47,7 +47,7 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. # # VBoxDDU (shared object) # - VBoxDDU_TEMPLATE = VBOXR3 + VBoxDDU_TEMPLATE = VBoxR3DllWarnNoPic VBoxDDU_NAME = $(basename $(notdir $(LIB_DDU))) VBoxDDU_INST.darwin = $(INST_DLL) $(INST_TESTCASE) VBoxDDU_DEFS = IN_VBOXDDU @@ -73,7 +73,7 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. Storage/VSCSI/VSCSISense.cpp \ Storage/VSCSI/VSCSISgBuf.cpp \ Storage/VSCSI/VSCSIIoReq.cpp \ - VBoxDDUDeps.cpp + build/VBoxDDUDeps.cpp ifdef VBOX_WITH_USB VBoxDDU_INCS.os2 += \ $(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/os2 @@ -112,10 +112,11 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. # # VBoxDD (shared object) # - VBoxDD_TEMPLATE = VBOXR3 + VBoxDD_TEMPLATE = VBoxR3DllWarnNoPic VBoxDD_SDKS.win = WINPSDK DXSDK W2K3DDK VBOX_NTDLL + VBoxDD_INCS = build VBoxDD_SOURCES = \ - Builtins.cpp + build/VBoxDD.cpp VBoxDD_DEFS = VBOX_ACPI ifdef VBOX_WITH_USB VBoxDD_DEFS += VBOX_WITH_USB @@ -221,19 +222,20 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. # # VBoxDD2 (shared object) # - VBoxDD2_TEMPLATE = VBOXR3 + VBoxDD2_TEMPLATE = VBoxR3DllWarnNoPic VBoxDD2_DEFS = IN_VBOXDD2 VBoxDD2_INCS := \ + build \ $(PATH_SUB_CURRENT) VBoxDD2_SOURCES = \ - Builtins2.cpp \ + build/VBoxDD2.cpp \ PC/DevAPIC.cpp \ PC/DevSMC.cpp \ PC/DevLPC.cpp VBoxDD2_LIBS = \ $(PATH_LIB)/PcBiosBin$(VBOX_SUFF_LIB) \ $(PATH_LIB)/VgaBiosBin$(VBOX_SUFF_LIB) \ - $(PATH_LIB)/NetBiosBin$(VBOX_SUFF_LIB) \ + $(if $(VBOX_WITH_PXE_ROM),$(PATH_LIB)/NetBiosBin$(VBOX_SUFF_LIB),) \ $(LIB_VMM) \ $(LIB_RUNTIME) ifeq ($(KBUILD_TARGET),l4) @@ -245,23 +247,25 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. VBoxDD2_LDFLAGS.linux = -Wl,--no-undefined VBoxDD2_LDFLAGS.l4 = -Wl,--no-undefined + ifdef VBOX_WITH_PXE_ROM + VBoxDD2_DEFS += VBOX_WITH_PXE_ROM + endif # # DevicesR3 (library) # - DevicesR3_TEMPLATE = VBOXR3 + DevicesR3_TEMPLATE = VBoxR3DllWarnNoPic DevicesR3_SDKS.win = WINPSDK W2K3DDK DevicesR3_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE DevicesR3_DEFS += \ VBOX_HGCM_HOST_CODE \ VBOX_WITH_HGCM \ - $(if $(VBOX_WITH_AUDIO_FLEXIBLE_FORMAT),VBOX_WITH_AUDIO_FLEXIBLE_FORMAT,) \ $(if $(VBOX_BIOS_DMI_FALLBACK),VBOX_BIOS_DMI_FALLBACK,) DevicesR3_DEFS.linux += _GNU_SOURCE DevicesR3_DEFS.l4 += _GNU_SOURCE DevicesR3_INCS = \ - . + build DevicesR3_SOURCES = \ Input/DevPS2.cpp \ @@ -349,6 +353,9 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. ifdef VBOX_WITH_DMI_OEMSTRINGS DevicesR3_DEFS += VBOX_WITH_DMI_OEMSTRINGS endif + ifdef VBOX_WITH_PXE_ROM + DevicesR3_DEFS += VBOX_WITH_PXE_ROM + endif ifdef VBOX_WITH_INIP DevicesR3_INCS += \ @@ -438,47 +445,47 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. endif ifdef VBOX_WITH_DTRACE_R3 - DevicesR3_DEFS += VBOX_WITH_DTRACE - DevicesR3_INCS += $(DevicesR3_0_OUTDIR) + DevicesR3_DEFS += VBOX_WITH_DTRACE + DevicesR3_INCS += $(DevicesR3_0_OUTDIR) DevicesR3_INTERMEDIATES += $(DevicesR3_0_OUTDIR)/VBoxDD-dtrace.h - $$(DevicesR3_0_OUTDIR)/VBoxDD-dtrace.h: $(PATH_SUB_CURRENT)/VBoxDD-dtrace.d | $$(dir $$@) + $$(DevicesR3_0_OUTDIR)/VBoxDD-dtrace.h: $(PATH_SUB_CURRENT)/build/VBoxDD-dtrace.d | $$(dir $$@) dtrace -C -h -o $@ -s $< endif ifdef VBOX_WITH_DYNAMIC_DSDT - DevicesR3_CLEAN += $(PATH_DevicesR3)/vboxdsl.hex - PC/ACPI/VBoxAcpi.cpp_DEPS = $(PATH_DevicesR3)/vboxdsl.hex + DevicesR3_CLEAN += $(DevicesR3_0_OUTDIR)/vboxdsl.hex + PC/ACPI/VBoxAcpi.cpp_DEPS = $(DevicesR3_0_OUTDIR)/vboxdsl.hex - $$(PATH_DevicesR3)/vboxdsl.hex: $(PATH_SUB_CURRENT)/PC/vbox.dsl | $$(dir $$@) + $$(DevicesR3_0_OUTDIR)/vboxdsl.hex: $(PATH_SUB_CURRENT)/PC/vbox.dsl | $$(dir $$@) $(call MSG_TOOL,bin2c,DevicesR3,$<,$@) $(QUIET)$(VBOX_BIN2C) -export VboxDslSource $< $@ - vboxdsl.hex:: $$(PATH_DevicesR3)/vboxdsl.hex + vboxdsl.hex:: $$(DevicesR3_0_OUTDIR)/vboxdsl.hex else # !VBOX_WITH_DYNAMIC_DSDT # VBoxAcpi.cpp needs vboxaml.hex which we generate from PC/vbox.dsl DevicesR3_CLEAN += \ - $(PATH_DevicesR3)/vboxaml.hex \ - $(PATH_DevicesR3)/vboxaml.aml \ - $(PATH_DevicesR3)/vboxssdt-standard.hex \ - $(PATH_DevicesR3)/vboxssdt-standard.aml \ - $(PATH_DevicesR3)/vboxssdt-standard.aml.tmp \ - $(PATH_DevicesR3)/vboxssdt-cpuhotplug.hex \ - $(PATH_DevicesR3)/vboxssdt-cpuhotplug.aml \ - $(PATH_DevicesR3)/vboxssdt-cpuhotplug.aml.tmp \ - $(PATH_DevicesR3)/vboxssdt-cpuhotplug.aml.pre + $(DevicesR3_0_OUTDIR)/vboxaml.hex \ + $(DevicesR3_0_OUTDIR)/vboxaml.aml \ + $(DevicesR3_0_OUTDIR)/vboxssdt-standard.hex \ + $(DevicesR3_0_OUTDIR)/vboxssdt-standard.aml \ + $(DevicesR3_0_OUTDIR)/vboxssdt-standard.aml.tmp \ + $(DevicesR3_0_OUTDIR)/vboxssdt-cpuhotplug.hex \ + $(DevicesR3_0_OUTDIR)/vboxssdt-cpuhotplug.aml \ + $(DevicesR3_0_OUTDIR)/vboxssdt-cpuhotplug.aml.tmp \ + $(DevicesR3_0_OUTDIR)/vboxssdt-cpuhotplug.aml.pre PC/ACPI/VBoxAcpi.cpp_DEPS = \ - $(PATH_DevicesR3)/vboxaml.hex \ - $(PATH_DevicesR3)/vboxssdt-standard.hex \ - $(PATH_DevicesR3)/vboxssdt-cpuhotplug.hex + $(DevicesR3_0_OUTDIR)/vboxaml.hex \ + $(DevicesR3_0_OUTDIR)/vboxssdt-standard.hex \ + $(DevicesR3_0_OUTDIR)/vboxssdt-cpuhotplug.hex - $$(PATH_DevicesR3)/vboxaml.hex: $(PATH_SUB_CURRENT)/PC/vbox.dsl | $$(dir $$@) + $$(DevicesR3_0_OUTDIR)/vboxaml.hex: $(PATH_SUB_CURRENT)/PC/vbox.dsl | $$(dir $$@) $(call MSG_TOOL,iasl,DevicesR3,$<,$@) $(QUIET)$(VBOX_IASLCMD) -tc -vs -p $@ $< - vboxaml.hex:: $$(PATH_DevicesR3)/vboxaml.hex + vboxaml.hex:: $$(DevicesR3_0_OUTDIR)/vboxaml.hex - $$(PATH_DevicesR3)/vboxssdt-standard.hex: $(PATH_SUB_CURRENT)/PC/vbox-standard.dsl | $$(dir $$@) + $$(DevicesR3_0_OUTDIR)/vboxssdt-standard.hex: $(PATH_SUB_CURRENT)/PC/vbox-standard.dsl | $$(dir $$@) $(call MSG_TOOL,iasl,DevicesR3,$<,$@) $(QUIET)$(RM) -f $@ $@.tmp $(QUIET)$(VBOX_IASLCMD) -tc -vs -p $@ $< @@ -488,9 +495,9 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. $(QUIET)$(RM) -f $@.tmp - vboxssdt-standard.hex:: $$(PATH_DevicesR3)/vboxssdt-standard.hex + vboxssdt-standard.hex:: $$(DevicesR3_0_OUTDIR)/vboxssdt-standard.hex - $$(PATH_DevicesR3)/vboxssdt-cpuhotplug.hex: $(PATH_SUB_CURRENT)/PC/vbox-cpuhotplug.dsl | $$(dir $$@) + $$(DevicesR3_0_OUTDIR)/vboxssdt-cpuhotplug.hex: $(PATH_SUB_CURRENT)/PC/vbox-cpuhotplug.dsl | $$(dir $$@) $(call MSG_TOOL,iasl,DevicesR3,$<,$@) $(QUIET)$(RM) -f $@ $@.tmp $@.pre $(QUIET)$(TOOL_$(VBOX_GCC_TOOL)_CC) -E -P -x c -o $@.pre $< @@ -501,10 +508,10 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. $(QUIET)$(RM) -f $@.tmp $@.pre - vboxssdt-cpuhotplug.hex:: $$(PATH_DevicesR3)/vboxssdt-cpuhotplug.hex + vboxssdt-cpuhotplug.hex:: $$(DevicesR3_0_OUTDIR)/vboxssdt-cpuhotplug.hex endif # !VBOX_WITH_DYNAMIC_DSDT - PC/ACPI/VBoxAcpi.cpp_INCS = $(PATH_DevicesR3) + PC/ACPI/VBoxAcpi.cpp_INCS = $(DevicesR3_0_OUTDIR) # For finding PCIInternal.h from VBox/pci.h. Bus/DevPCI.cpp_INCS = Bus @@ -513,8 +520,8 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. Bus/MsixCommon.cpp_INCS = Bus # For finding and generating vbetables.h (see Graphics/BIOS/Makefile.kmk). - Graphics/DevVGA.cpp_INCS = $(PATH_VgaBiosBin) - Graphics/DevVGA.cpp_DEPS = $(PATH_VgaBiosBin)/vbetables.h + Graphics/DevVGA.cpp_INCS = $(VgaBiosBin_0_OUTDIR) + Graphics/DevVGA.cpp_DEPS = $(VgaBiosBin_0_OUTDIR)/vbetables.h ifdef VBOX_WITH_RAW_MODE @@ -526,8 +533,7 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. VBoxDDGC_DEFS.darwin = VBOX_WITH_2X_4GB_ADDR_SPACE endif VBoxDDGC_DEFS = VBOX_WITH_HGCM - VBoxDDGC_INCS := \ - $(PATH_SUB_CURRENT) + VBoxDDGC_INCS = build VBoxDDGC_SOURCES = \ Bus/DevPCI.cpp \ Bus/DevPciIch9.cpp \ @@ -618,8 +624,8 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. if1of ($(VBOX_LDR_FMT32), pe lx) VBoxDDGC_LIBS = \ - $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) \ - $(PATH_LIB)/VMMGCImp$(VBOX_SUFF_LIB) + $(PATH_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \ + $(PATH_LIB)/VMMRCImp$(VBOX_SUFF_LIB) endif endif # VBOX_WITH_RAW_MODE @@ -630,8 +636,7 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. VBoxDDR0_TEMPLATE = VBoxR0 VBoxDDR0_DEFS.darwin.x86= VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0 VBOX_WITH_2X_4GB_ADDR_SPACE VBoxDDR0_DEFS = IN_RT_R0 VBOX_WITH_HGCM # - WTF is IN_RT_R0 doing here? - VBoxDDR0_INCS := \ - $(PATH_SUB_CURRENT) + VBoxDDR0_INCS = build VBoxDDR0_SOURCES = \ Bus/DevPCI.cpp \ Bus/DevPciIch9.cpp \ @@ -664,8 +669,8 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. ifdef VBOX_WITH_VIRTIO VBoxDDR0_DEFS += VBOX_WITH_VIRTIO VBoxDDR0_SOURCES += \ - VirtIO/Virtio.cpp \ - Network/DevVirtioNet.cpp + VirtIO/Virtio.cpp \ + Network/DevVirtioNet.cpp endif ifdef VBOX_WITH_HGSMI @@ -737,15 +742,14 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. # VBoxDD2GC_TEMPLATE = VBoxRc VBoxDD2GC_DEFS = - VBoxDD2GC_INCS := \ - $(PATH_SUB_CURRENT) + VBoxDD2GC_INCS = build VBoxDD2GC_SOURCES = \ PC/DevAPIC.cpp \ PC/DevSMC.cpp if1of ($(VBOX_LDR_FMT32), pe lx) VBoxDD2GC_LIBS = \ - $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) \ - $(PATH_LIB)/VMMGCImp$(VBOX_SUFF_LIB) + $(PATH_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \ + $(PATH_LIB)/VMMRCImp$(VBOX_SUFF_LIB) endif endif @@ -754,8 +758,7 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. # VBoxDD2R0_TEMPLATE = VBoxR0 VBoxDD2R0_DEFS = IN_RT_R0 - VBoxDD2R0_INCS := \ - $(PATH_SUB_CURRENT) + VBoxDD2R0_INCS = build VBoxDD2R0_SOURCES = \ PC/DevAPIC.cpp \ PC/DevSMC.cpp @@ -773,7 +776,7 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. ifeq ($(KBUILD_TARGET),l4) # We are using real Linux headers, not the cleaned up user space ones Drivers_TEMPLATE = VBOXR3NP else - Drivers_TEMPLATE = VBOXR3 + Drivers_TEMPLATE = VBoxR3DllWarnNoPic endif Drivers_SDKS.win = WINPSDK W2K3DDK Storage/DrvHostDVD.cpp_SDKS.win = W2K3DDK @@ -783,10 +786,9 @@ if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file. $(if $(VBOX_WITH_NETFLT),VBOX_WITH_NETFLT,) \ $(if $(VBOX_WITH_INIP),VBOX_WITH_INIP,) \ $(if $(VBOX_WITH_DRV_DISK_INTEGRITY),VBOX_WITH_DRV_DISK_INTEGRITY,) \ - $(if $(VBOX_WITH_AUDIO_FLEXIBLE_FORMAT),VBOX_WITH_AUDIO_FLEXIBLE_FORMAT,) \ Drivers_INCS := \ - $(PATH_SUB_CURRENT) \ + build \ Network/slirp Drivers_SOURCES = \ Audio/audio.c \ diff --git a/src/VBox/Devices/Network/DevE1000.cpp b/src/VBox/Devices/Network/DevE1000.cpp index ab66200ab..7a11f3600 100644 --- a/src/VBox/Devices/Network/DevE1000.cpp +++ b/src/VBox/Devices/Network/DevE1000.cpp @@ -1,4 +1,4 @@ -/* $Id: DevE1000.cpp 34483 2010-11-29 17:43:40Z vboxsync $ */ +/* $Id: DevE1000.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevE1000 - Intel 82540EM Ethernet Controller Emulation. * @@ -50,11 +50,11 @@ #include <iprt/semaphore.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include <VBox/pdmdev.h> -#include <VBox/pdmnetifs.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pdmnetifs.h> +#include <VBox/vmm/pdmnetinline.h> #include <VBox/param.h> -#include "../Builtins.h" +#include "VBoxDD.h" #include "DevEEPROM.h" #include "DevE1000Phy.h" @@ -1861,6 +1861,8 @@ DECLINLINE(void) e1kAdvanceRDH(E1KSTATE *pState) E1K_INC_ISTAT_CNT(pState->uStatIntRXDMT0); e1kRaiseInterrupt(pState, VERR_SEM_BUSY, ICR_RXDMT0); } + E1kLog2(("%s e1kAdvanceRDH: at exit RDH=%x RDT=%x len=%x\n", + INSTANCE(pState), RDH, RDT, uRQueueLen)); //e1kCsLeave(pState); } @@ -4649,7 +4651,17 @@ static int e1kCanReceive(E1KSTATE *pState) if (RT_UNLIKELY(e1kCsRxEnter(pState, VERR_SEM_BUSY) != VINF_SUCCESS)) return VERR_NET_NO_BUFFER_SPACE; - if (RDH < RDT) + if (RT_UNLIKELY(RDLEN == sizeof(E1KRXDESC))) + { + E1KRXDESC desc; + PDMDevHlpPhysRead(pState->CTX_SUFF(pDevIns), e1kDescAddr(RDBAH, RDBAL, RDH), + &desc, sizeof(desc)); + if (desc.status.fDD) + cb = 0; + else + cb = pState->u16RxBSize; + } + else if (RDH < RDT) cb = (RDT - RDH) * pState->u16RxBSize; else if (RDH > RDT) cb = (RDLEN/sizeof(E1KRXDESC) - RDH + RDT) * pState->u16RxBSize; @@ -4658,6 +4670,8 @@ static int e1kCanReceive(E1KSTATE *pState) cb = 0; E1kLogRel(("E1000: OUT of RX descriptors!\n")); } + E1kLog2(("%s e1kCanReceive: at exit RDH=%d RDT=%d RDLEN=%d u16RxBSize=%d cb=%lu\n", + INSTANCE(pState), RDH, RDT, RDLEN, pState->u16RxBSize, cb)); e1kCsRxLeave(pState); e1kMutexRelease(pState); diff --git a/src/VBox/Devices/Network/DevE1000Phy.cpp b/src/VBox/Devices/Network/DevE1000Phy.cpp index a03a8ecf8..76d3e906c 100644 --- a/src/VBox/Devices/Network/DevE1000Phy.cpp +++ b/src/VBox/Devices/Network/DevE1000Phy.cpp @@ -1,4 +1,4 @@ -/** $Id: DevE1000Phy.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/** $Id: DevE1000Phy.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DevE1000Phy - Intel 82540EM Ethernet Controller Internal PHY Emulation. * @@ -32,7 +32,7 @@ #include <VBox/err.h> #include <VBox/log.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #include "DevE1000Phy.h" /* Little helpers ************************************************************/ diff --git a/src/VBox/Devices/Network/DevEEPROM.cpp b/src/VBox/Devices/Network/DevEEPROM.cpp index c2db34eb7..001b2f9f8 100644 --- a/src/VBox/Devices/Network/DevEEPROM.cpp +++ b/src/VBox/Devices/Network/DevEEPROM.cpp @@ -1,4 +1,4 @@ -/* $Id: DevEEPROM.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DevEEPROM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DevEEPROM - Microware-compatible 64x16-bit 93C46 EEPROM Emulation. */ @@ -17,7 +17,7 @@ #define LOG_GROUP LOG_GROUP_DEV_E1000 /// @todo Add a EEPROM logging group. #include <VBox/log.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/string.h> #include "DevEEPROM.h" diff --git a/src/VBox/Devices/Network/DevINIP.cpp b/src/VBox/Devices/Network/DevINIP.cpp index a9d18529d..97ca462cb 100644 --- a/src/VBox/Devices/Network/DevINIP.cpp +++ b/src/VBox/Devices/Network/DevINIP.cpp @@ -1,4 +1,4 @@ -/* $Id: DevINIP.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DevINIP.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevINIP - Internal Network IP stack device/service. */ @@ -40,14 +40,14 @@ RT_C_DECLS_BEGIN #include "lwip/sockets.h" #include "netif/etharp.h" RT_C_DECLS_END -#include <VBox/pdmdev.h> -#include <VBox/pdmnetifs.h> -#include <VBox/tm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pdmnetifs.h> +#include <VBox/vmm/tm.h> #include <iprt/assert.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Network/DevPCNet.cpp b/src/VBox/Devices/Network/DevPCNet.cpp index 8fc8094f5..90e2b10f3 100644 --- a/src/VBox/Devices/Network/DevPCNet.cpp +++ b/src/VBox/Devices/Network/DevPCNet.cpp @@ -1,4 +1,4 @@ -/* $Id: DevPCNet.cpp 34243 2010-11-22 14:29:13Z vboxsync $ */ +/* $Id: DevPCNet.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevPCNet - AMD PCnet-PCI II / PCnet-FAST III (Am79C970A / Am79C973) Ethernet Controller Emulation. * @@ -51,9 +51,9 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_PCNET -#include <VBox/pdmdev.h> -#include <VBox/pdmnetifs.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pdmnetifs.h> +#include <VBox/vmm/pgm.h> #include <VBox/DevPCNet.h> #include <iprt/asm.h> #include <iprt/assert.h> @@ -67,7 +67,7 @@ # include <iprt/uuid.h> #endif -#include "../Builtins.h" +#include "VBoxDD.h" /* Enable this to catch writes to the ring descriptors instead of using excessive polling */ /* #define PCNET_NO_POLLING */ diff --git a/src/VBox/Devices/Network/DevVirtioNet.cpp b/src/VBox/Devices/Network/DevVirtioNet.cpp index 470d0a914..1a987ce1c 100644 --- a/src/VBox/Devices/Network/DevVirtioNet.cpp +++ b/src/VBox/Devices/Network/DevVirtioNet.cpp @@ -1,4 +1,4 @@ -/* $Id: DevVirtioNet.cpp 34088 2010-11-15 20:35:22Z vboxsync $ */ +/* $Id: DevVirtioNet.cpp 35387 2010-12-31 18:42:48Z vboxsync $ */ /** @file * DevVirtioNet - Virtio Network Device */ @@ -21,8 +21,8 @@ #define VNET_WITH_GSO #define VNET_WITH_MERGEABLE_RX_BUFS -#include <VBox/pdmdev.h> -#include <VBox/pdmnetifs.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pdmnetifs.h> #include <iprt/asm.h> #include <iprt/net.h> #include <iprt/semaphore.h> @@ -30,7 +30,7 @@ # include <iprt/mem.h> # include <iprt/uuid.h> #endif /* IN_RING3 */ -#include "../Builtins.h" +#include "VBoxDD.h" #include "../VirtIO/Virtio.h" @@ -761,7 +761,7 @@ static int vnetHandleRxPacket(PVNETSTATE pState, const void *pvBuf, size_t cb, else uHdrLen = sizeof(VNETHDR); - //vnetPacketDump(pState, (const uint8_t*)pvBuf, cb, "<-- Incoming"); + vnetPacketDump(pState, (const uint8_t*)pvBuf, cb, "<-- Incoming"); unsigned int uOffset = 0; unsigned int nElem; @@ -1111,13 +1111,18 @@ static void vnetTransmitPendingPackets(PVNETSTATE pState, PVQUEUE pQueue, bool f uOffset += elem.aSegsOut[i].cb; } pSgBuf->cbUsed = uSize; - //vnetPacketDump(pState, (uint8_t*)pSgBuf->aSegs[0].pvSeg, uSize, "--> Outgoing"); + vnetPacketDump(pState, (uint8_t*)pSgBuf->aSegs[0].pvSeg, uSize, "--> Outgoing"); if (pGso) { /* Some guests (RHEL) may report HdrLen excluding transport layer header! */ - if (pGso->cbHdrs < Hdr.u16CSumStart + Hdr.u16CSumOffset + 2) + /* + * We cannot use cdHdrs provided by the guest because of different ways + * it gets filled out by different versions of kernels. + */ + //if (pGso->cbHdrs < Hdr.u16CSumStart + Hdr.u16CSumOffset + 2) { - Log4(("%s vnetTransmitPendingPackets: HdrLen before adjustment %d.\n", pGso->cbHdrs)); + Log4(("%s vnetTransmitPendingPackets: HdrLen before adjustment %d.\n", + INSTANCE(pState), pGso->cbHdrs)); switch (pGso->u8Type) { case PDMNETWORKGSOTYPE_IPV4_TCP: diff --git a/src/VBox/Devices/Network/DrvDedicatedNic.cpp b/src/VBox/Devices/Network/DrvDedicatedNic.cpp index ffbc38a05..5c789d7cb 100644 --- a/src/VBox/Devices/Network/DrvDedicatedNic.cpp +++ b/src/VBox/Devices/Network/DrvDedicatedNic.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvDedicatedNic.cpp 31094 2010-07-26 08:14:34Z vboxsync $ */ +/* $Id: DrvDedicatedNic.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DrvDedicatedNic - Experimental network driver for using a dedicated (V)NIC. */ @@ -20,10 +20,10 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEFAULT #include <VBox/log.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pdmdrv.h> -#include <VBox/pdmnetifs.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmnetifs.h> +#include <VBox/vmm/pdmnetinline.h> #include <VBox/intnet.h> #include <VBox/intnetinline.h> @@ -35,7 +35,7 @@ #include <iprt/thread.h> #include <iprt/uuid.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Network/DrvIntNet.cpp b/src/VBox/Devices/Network/DrvIntNet.cpp index 1f5a341f9..1b32740e6 100644 --- a/src/VBox/Devices/Network/DrvIntNet.cpp +++ b/src/VBox/Devices/Network/DrvIntNet.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvIntNet.cpp 34335 2010-11-24 17:49:09Z vboxsync $ */ +/* $Id: DrvIntNet.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DrvIntNet - Internal network transport driver. */ @@ -19,13 +19,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_INTNET -#include <VBox/pdmdrv.h> -#include <VBox/pdmnetinline.h> -#include <VBox/pdmnetifs.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmnetinline.h> +#include <VBox/vmm/pdmnetifs.h> +#include <VBox/vmm/cfgm.h> #include <VBox/intnet.h> #include <VBox/intnetinline.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include <VBox/sup.h> #include <VBox/err.h> @@ -42,7 +42,7 @@ #include <iprt/thread.h> #include <iprt/uuid.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Network/DrvNAT.cpp b/src/VBox/Devices/Network/DrvNAT.cpp index c6267417f..5716838db 100644 --- a/src/VBox/Devices/Network/DrvNAT.cpp +++ b/src/VBox/Devices/Network/DrvNAT.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvNAT.cpp 34890 2010-12-09 14:23:59Z vboxsync $ */ +/* $Id: DrvNAT.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DrvNAT - NAT network transport driver. */ @@ -24,9 +24,9 @@ #define __STDC_CONSTANT_MACROS #include "slirp/libslirp.h" #include "slirp/ctl.h" -#include <VBox/pdmdrv.h> -#include <VBox/pdmnetifs.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmnetifs.h> +#include <VBox/vmm/pdmnetinline.h> #include <iprt/assert.h> #include <iprt/file.h> #include <iprt/mem.h> @@ -36,7 +36,7 @@ #include <iprt/stream.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" #ifndef RT_OS_WINDOWS # include <unistd.h> @@ -1044,7 +1044,7 @@ static int drvNATConstructRedir(unsigned iInstance, PDRVNAT pThis, PCFGMNODE pCf iInstance, szProtocol); } else - return PDMDrvHlpVMSetError(pThis->pDrvIns, rc, RT_SRC_POS, + return PDMDrvHlpVMSetError(pThis->pDrvIns, rc, RT_SRC_POS, N_("NAT#%d: configuration query for \"Protocol\" failed"), iInstance); /* host port */ diff --git a/src/VBox/Devices/Network/DrvNetSniffer.cpp b/src/VBox/Devices/Network/DrvNetSniffer.cpp index 1a1fe453b..bbac7f930 100644 --- a/src/VBox/Devices/Network/DrvNetSniffer.cpp +++ b/src/VBox/Devices/Network/DrvNetSniffer.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvNetSniffer.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DrvNetSniffer.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DrvNetSniffer - Network sniffer filter driver. */ @@ -20,8 +20,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_NAT -#include <VBox/pdmdrv.h> -#include <VBox/pdmnetifs.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmnetifs.h> #include <VBox/log.h> #include <iprt/assert.h> @@ -34,7 +34,7 @@ #include <VBox/param.h> #include "Pcap.h" -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Network/DrvTAP.cpp b/src/VBox/Devices/Network/DrvTAP.cpp index 9970ce315..b6fd4f36c 100644 --- a/src/VBox/Devices/Network/DrvTAP.cpp +++ b/src/VBox/Devices/Network/DrvTAP.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvTAP.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: DrvTAP.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DrvTAP - Universal TAP network transport driver. */ @@ -20,9 +20,9 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_TUN #include <VBox/log.h> -#include <VBox/pdmdrv.h> -#include <VBox/pdmnetifs.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmnetifs.h> +#include <VBox/vmm/pdmnetinline.h> #include <iprt/asm.h> #include <iprt/assert.h> @@ -72,7 +72,7 @@ # include <l4/vboxserver/file.h> #endif -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Network/DrvVDE.cpp b/src/VBox/Devices/Network/DrvVDE.cpp index edf79e1e9..8ad83127e 100644 --- a/src/VBox/Devices/Network/DrvVDE.cpp +++ b/src/VBox/Devices/Network/DrvVDE.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvVDE.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DrvVDE.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VDE network transport driver. */ @@ -21,9 +21,9 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_TUN #include <VBox/log.h> -#include <VBox/pdmdrv.h> -#include <VBox/pdmnetifs.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmnetifs.h> +#include <VBox/vmm/pdmnetinline.h> #include <VBox/VDEPlug.h> #include <iprt/asm.h> @@ -44,7 +44,7 @@ #include <errno.h> #include <unistd.h> -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Network/Pcap.cpp b/src/VBox/Devices/Network/Pcap.cpp index f6f9a7645..294659af5 100644 --- a/src/VBox/Devices/Network/Pcap.cpp +++ b/src/VBox/Devices/Network/Pcap.cpp @@ -1,4 +1,4 @@ -/* $Id: Pcap.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: Pcap.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Helpers for writing libpcap files. */ @@ -24,7 +24,7 @@ #include <iprt/stream.h> #include <iprt/time.h> #include <iprt/err.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmnetinline.h> /******************************************************************************* diff --git a/src/VBox/Devices/Network/SrvIntNetR0.cpp b/src/VBox/Devices/Network/SrvIntNetR0.cpp index ccfd93e9c..8526e781f 100644 --- a/src/VBox/Devices/Network/SrvIntNetR0.cpp +++ b/src/VBox/Devices/Network/SrvIntNetR0.cpp @@ -1,4 +1,4 @@ -/* $Id: SrvIntNetR0.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: SrvIntNetR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Internal networking - The ring 0 service. */ @@ -22,9 +22,9 @@ #define LOG_GROUP LOG_GROUP_SRV_INTNET #include <VBox/intnet.h> #include <VBox/intnetinline.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmnetinline.h> #include <VBox/sup.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/log.h> #include <iprt/asm.h> diff --git a/src/VBox/Devices/Network/slirp/debug.c b/src/VBox/Devices/Network/slirp/debug.c index f237314a5..8e74e8a83 100644 --- a/src/VBox/Devices/Network/slirp/debug.c +++ b/src/VBox/Devices/Network/slirp/debug.c @@ -1,4 +1,4 @@ -/* $Id: debug.c 34305 2010-11-24 06:21:52Z vboxsync $ */ +/* $Id: debug.c 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * NAT - debug helpers. */ @@ -302,15 +302,15 @@ print_socket(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, * Print callback dumping TCP Control Block in terms of RFC 793. */ static DECLCALLBACK(size_t) -printTcpcbRfc793(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, +printTcpcbRfc793(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, const char *pszType, void const *pvValue, int cchWidth, int cchPrecision, unsigned fFlags, void *pvUser) { size_t cb = 0; - const struct tcpcb *tp = (const struct tcpcb *)pvValue; + const struct tcpcb *tp = (const struct tcpcb *)pvValue; AssertReturn(RTStrCmp(pszType, "tcpcb793") == 0 && tp, 0); - cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "TCB793[ SND(UNA: %x, NXT: %x, UP: %x, WND: %x, WL1:%x, WL2:%x, ISS:%x), ", + cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "TCB793[ SND(UNA: %x, NXT: %x, UP: %x, WND: %x, WL1:%x, WL2:%x, ISS:%x), ", tp->snd_una, tp->snd_nxt, tp->snd_up, tp->snd_wnd, tp->snd_wl1, tp->snd_wl2, tp->iss); cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "RCV(WND: %x, NXT: %x, UP: %x, IRS:%x)]", tp->rcv_wnd, tp->rcv_nxt, tp->rcv_up, tp->irs); return cb; @@ -319,15 +319,15 @@ printTcpcbRfc793(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, * Prints TCP segment in terms of RFC 793. */ static DECLCALLBACK(size_t) -printTcpSegmentRfc793(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, +printTcpSegmentRfc793(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, const char *pszType, void const *pvValue, int cchWidth, int cchPrecision, unsigned fFlags, void *pvUser) { size_t cb = 0; - const struct tcpiphdr *ti = (const struct tcpiphdr *)pvValue; + const struct tcpiphdr *ti = (const struct tcpiphdr *)pvValue; AssertReturn(RTStrCmp(pszType, "tcpseg793") == 0 && ti, 0); - cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "SEG[ACK: %x, SEQ: %x, LEN: %x, WND: %x, UP: %x]", + cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "SEG[ACK: %x, SEQ: %x, LEN: %x, WND: %x, UP: %x]", ti->ti_ack, ti->ti_seq, ti->ti_len, ti->ti_win, ti->ti_urp); return cb; } diff --git a/src/VBox/Devices/Network/slirp/libslirp.h b/src/VBox/Devices/Network/slirp/libslirp.h index 027925485..d4b7debf6 100644 --- a/src/VBox/Devices/Network/slirp/libslirp.h +++ b/src/VBox/Devices/Network/slirp/libslirp.h @@ -1,4 +1,4 @@ -/* $Id: libslirp.h 34209 2010-11-19 16:04:55Z vboxsync $ */ +/* $Id: libslirp.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * NAT - slirp interface. */ @@ -37,7 +37,7 @@ int inet_aton(const char *cp, struct in_addr *ia); #endif #include <VBox/types.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> typedef struct NATState *PNATState; struct mbuf; diff --git a/src/VBox/Devices/Network/slirp/slirp.c b/src/VBox/Devices/Network/slirp/slirp.c index 64176ac42..4c6c0a2f6 100644 --- a/src/VBox/Devices/Network/slirp/slirp.c +++ b/src/VBox/Devices/Network/slirp/slirp.c @@ -1,4 +1,4 @@ -/* $Id: slirp.c 34235 2010-11-22 11:44:41Z vboxsync $ */ +/* $Id: slirp.c 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * NAT - slirp glue. */ @@ -47,7 +47,7 @@ #endif #include <VBox/err.h> -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/file.h> #ifndef RT_OS_WINDOWS diff --git a/src/VBox/Devices/Network/slirp/slirp.h b/src/VBox/Devices/Network/slirp/slirp.h index effea2971..b27f8019e 100644 --- a/src/VBox/Devices/Network/slirp/slirp.h +++ b/src/VBox/Devices/Network/slirp/slirp.h @@ -1,4 +1,4 @@ -/* $Id: slirp.h 34103 2010-11-16 11:18:55Z vboxsync $ */ +/* $Id: slirp.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * NAT - slirp (declarations/defines). */ @@ -18,7 +18,7 @@ #ifndef __COMMON_H__ #define __COMMON_H__ -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #ifdef RT_OS_WINDOWS # include <winsock2.h> diff --git a/src/VBox/Devices/Network/slirp/socket.c b/src/VBox/Devices/Network/slirp/socket.c index 238fff344..1f4e3e96a 100644 --- a/src/VBox/Devices/Network/slirp/socket.c +++ b/src/VBox/Devices/Network/slirp/socket.c @@ -1,4 +1,4 @@ -/* $Id: socket.c 34103 2010-11-16 11:18:55Z vboxsync $ */ +/* $Id: socket.c 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * NAT - socket handling. */ @@ -31,7 +31,7 @@ #ifdef __sun__ #include <sys/filio.h> #endif -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #if defined (RT_OS_WINDOWS) #include <iphlpapi.h> #include <icmpapi.h> diff --git a/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp b/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp index 1a61d8c38..d75f052f7 100644 --- a/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp +++ b/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp @@ -1,4 +1,4 @@ -/* $Id: tstIntNet-1.cpp 31847 2010-08-21 20:33:07Z vboxsync $ */ +/* $Id: tstIntNet-1.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox - Testcase for internal networking, simple NetFlt trunk creation. */ @@ -20,9 +20,9 @@ *******************************************************************************/ #include <VBox/intnet.h> #include <VBox/intnetinline.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmnetinline.h> #include <VBox/sup.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <iprt/initterm.h> #include <iprt/alloc.h> @@ -749,7 +749,7 @@ int main(int argc, char **argv) return 1; case 'V': - RTPrintf("$Revision: 31847 $\n"); + RTPrintf("$Revision: 35346 $\n"); return 0; default: diff --git a/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp b/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp index 2e305492b..c4aa304d0 100644 --- a/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp +++ b/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxAcpi.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VBoxAcpi.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBoxAcpi - VirtualBox ACPI manipulation functionality. */ @@ -20,12 +20,12 @@ #endif #define LOG_GROUP LOG_GROUP_DEV_ACPI -#include <VBox/pdmdev.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pgm.h> #include <VBox/log.h> #include <VBox/param.h> -#include <VBox/cfgm.h> -#include <VBox/mm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/mm.h> #include <iprt/assert.h> #include <iprt/alloc.h> #include <iprt/string.h> diff --git a/src/VBox/Devices/PC/BIOS/Makefile.kmk b/src/VBox/Devices/PC/BIOS/Makefile.kmk index 540bd37c5..26ef77e4c 100644 --- a/src/VBox/Devices/PC/BIOS/Makefile.kmk +++ b/src/VBox/Devices/PC/BIOS/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # PC BIOS Sub-Makefile. # @@ -30,22 +30,22 @@ LIBRARIES += PcBiosBin PcBiosBin_TEMPLATE = VBOXR3 PcBiosBin_DEFS = IN_VBOXDD2 PcBiosBin_INCS = $(VBOX_PATH_DEVICES_SRC) -PcBiosBin_SOURCES = $(PATH_PcBiosBin)/PcBiosBin.c -PcBiosBin_DEPS = $(PATH_PcBiosBin)/pcbios-syms.h +PcBiosBin_SOURCES = $(PcBiosBin_0_OUTDIR)/PcBiosBin.c +PcBiosBin_DEPS = $(PcBiosBin_0_OUTDIR)/pcbios-syms.h PcBiosBin_CLEAN = \ - $(PATH_PcBiosBin)/_rombios_.c \ - $(PATH_PcBiosBin)/rombios0.s \ - $(PATH_PcBiosBin)/rombios1.s \ - $(PATH_PcBiosBin)/pcbios.lst \ - $(PATH_PcBiosBin)/pcbios.tmp \ - $(PATH_PcBiosBin)/pcbios.bin \ - $(PATH_PcBiosBin)/PcBiosBin.c \ - $(PATH_PcBiosBin)/pcbios-syms.h + $(PcBiosBin_0_OUTDIR)/_rombios_.c \ + $(PcBiosBin_0_OUTDIR)/rombios0.s \ + $(PcBiosBin_0_OUTDIR)/rombios1.s \ + $(PcBiosBin_0_OUTDIR)/pcbios.lst \ + $(PcBiosBin_0_OUTDIR)/pcbios.tmp \ + $(PcBiosBin_0_OUTDIR)/pcbios.bin \ + $(PcBiosBin_0_OUTDIR)/PcBiosBin.c \ + $(PcBiosBin_0_OUTDIR)/pcbios-syms.h # # Rule for making the bios. # -$$(PATH_PcBiosBin)/PcBiosBin.c: $$(PATH_PcBiosBin)/pcbios.bin $(VBOX_BIN2C) +$$(PcBiosBin_0_OUTDIR)/PcBiosBin.c: $$(PcBiosBin_0_OUTDIR)/pcbios.bin $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,PcBiosBin,$<,$@) $(QUIET)$(VBOX_BIN2C) -min 64 -max 256 -mask 0xffff -ascii -export PcBiosBinary $< $@ @@ -54,47 +54,47 @@ $$(PATH_PcBiosBin)/PcBiosBin.c: $$(PATH_PcBiosBin)/pcbios.bin $(VBOX_BIN2C) # # 1. precompile rombios.c -$$(PATH_PcBiosBin)/_rombios_.c: $(PATH_SUB_CURRENT)/rombios.c $(PATH_SUB_CURRENT)/logo.c \ +$$(PcBiosBin_0_OUTDIR)/_rombios_.c: $(PATH_SUB_CURRENT)/rombios.c $(PATH_SUB_CURRENT)/logo.c \ $(PATH_SUB_CURRENT)/apmbios.S $(if $(VBOX_WITH_SCSI),$(PATH_SUB_CURRENT)/scsi.c) \ $(PATH_SUB_CURRENT)/../DevPcBios.h $(PATH_ROOT)/include/VBox/bioslogo.h \ $(VBOX_VERSION_STAMP) | $$(dir $$@) $(call MSG_TOOL,cpp,PcBiosBin,$<,$@) $(QUIET)$(TOOL_$(VBOX_GCC_TOOL)_CC) -E \ - -I$(PATH_PcBiosBin) -I$(VBOX_PATH_DEVICES_SRC)/PC -I$(PATH_ROOT)/include -I$(PATH_OUT) \ + -I$(PcBiosBin_0_OUTDIR) -I$(VBOX_PATH_DEVICES_SRC)/PC -I$(PATH_ROOT)/include -I$(PATH_OUT) \ -DBX_SMP_PROCESSORS=1 -DVBOX -DVBOX_PC_BIOS $(addprefix -D,$(DEFS) $(DEFS.$(KBUILD_TYPE))) \ $(if $(VBOX_WITH_SCSI),-DVBOX_WITH_SCSI) \ -P -o $@ $< # 2. compile to intermediate asm file. # BCC tempfile clashes, order the BCC jobs to make sure they don't interfere with one another. -$$(PATH_PcBiosBin)/rombios0.s: $$(PATH_PcBiosBin)/_rombios_.c | $(VBOX_BCC_JOBS) +$$(PcBiosBin_0_OUTDIR)/rombios0.s: $$(PcBiosBin_0_OUTDIR)/_rombios_.c | $(VBOX_BCC_JOBS) $(call MSG_COMPILE,PcBiosBin,$<,$@,C) $(QUIET)$(VBOX_BCC) -o $@ -C-c -D__i86__ -0 -S $< -VBOX_BCC_JOBS += $(PATH_PcBiosBin)/rombios0.s +VBOX_BCC_JOBS += $(PcBiosBin_0_OUTDIR)/rombios0.s # 3. post process intermediate asm file. -$$(PATH_PcBiosBin)/rombios1.s: $$(PATH_PcBiosBin)/rombios0.s +$$(PcBiosBin_0_OUTDIR)/rombios1.s: $$(PcBiosBin_0_OUTDIR)/rombios0.s $(call MSG_TOOL,Adjusting BCC Assembly,PcBiosBin,$<,$@) $(QUIET)$(SED) -e 's/^\.text//' -e 's/^\.data//' --output $@ $^ # 4. assemble the intermediate asm file. (also creates a listing rombios.lst) -$$(PATH_PcBiosBin)/pcbios.tmp + $$(PATH_PcBiosBin)/pcbios.lst: $$(PATH_PcBiosBin)/rombios1.s +$$(PcBiosBin_0_OUTDIR)/pcbios.tmp + $$(PcBiosBin_0_OUTDIR)/pcbios.lst: $$(PcBiosBin_0_OUTDIR)/rombios1.s $(call MSG_COMPILE,PcBiosBin,$<,$@,AS) - $(QUIET)$(REDIRECT) -ri $^ -- $(VBOX_AS86) -b $(PATH_PcBiosBin)/pcbios.tmp -u- -w- -g -0 -j -O -l $(PATH_PcBiosBin)/pcbios.lst + $(QUIET)$(REDIRECT) -ri $^ -- $(VBOX_AS86) -b $(PcBiosBin_0_OUTDIR)/pcbios.tmp -u- -w- -g -0 -j -O -l $(PcBiosBin_0_OUTDIR)/pcbios.lst # 5. calculate checksums for the final BIOS image. -$$(PATH_PcBiosBin)/pcbios.bin: $$(PATH_PcBiosBin)/pcbios.tmp $$(VBOX_BIOSSUMS) +$$(PcBiosBin_0_OUTDIR)/pcbios.bin: $$(PcBiosBin_0_OUTDIR)/pcbios.tmp $$(VBOX_BIOSSUMS) $(call MSG_TOOL,biossums,PcBiosBin,$<,$@) $(QUIET)$(VBOX_BIOSSUMS) $< $@ # 6. create the symbol table. -$$(PATH_PcBiosBin)/pcbios-syms.h: $$(PATH_PcBiosBin)/pcbios.lst $(MAKEFILE_CURRENT) +$$(PcBiosBin_0_OUTDIR)/pcbios-syms.h: $$(PcBiosBin_0_OUTDIR)/pcbios.lst $(MAKEFILE_CURRENT) $(call MSG_GENERATE,PcBiosBin,$<,$@) $(QUIET)$(SED) \ -e '/^[0-9][0-9][0-9][0-9][0-9] 000[0-9A-F]* [[:space:]]*[a-zA-Z0-9_]*:/!d' \ -e 's/^[0-9][0-9][0-9][0-9][0-9] \(000[0-9A-F]*\) [[:space:]]*\([a-zA-Z0-9_]*\):.*$$/ DEFSYM(0x\1, "\2"),/' \ --output $@ \ - $(PATH_PcBiosBin)/pcbios.lst + $(PcBiosBin_0_OUTDIR)/pcbios.lst include $(KBUILD_PATH)/subfooter.kmk diff --git a/src/VBox/Devices/PC/BIOS/rombios.c b/src/VBox/Devices/PC/BIOS/rombios.c index 89c2ff5eb..0df4d18ee 100644 --- a/src/VBox/Devices/PC/BIOS/rombios.c +++ b/src/VBox/Devices/PC/BIOS/rombios.c @@ -5573,9 +5573,9 @@ int13_harddisk(EHBX, EHAX, DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLA else #endif { - write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,count * 0x200); + write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,count * 0x200); status=ata_cmd_data_in(device, ATA_CMD_READ_MULTIPLE, count, cylinder, head, sector, lba, segment, offset); - write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,0x200); + write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,0x200); } } else @@ -5754,9 +5754,9 @@ int13_harddisk(EHBX, EHAX, DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLA if (lba + count >= 268435456) status=ata_cmd_data_in(device, ATA_CMD_READ_SECTORS_EXT, count, 0, 0, 0, lba, segment, offset); else { - write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,count * 0x200); + write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,count * 0x200); status=ata_cmd_data_in(device, ATA_CMD_READ_MULTIPLE, count, 0, 0, 0, lba, segment, offset); - write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,0x200); + write_word(ebda_seg,&EbdaData->ata.devices[device].blksize,0x200); } } } diff --git a/src/VBox/Devices/PC/DevACPI.cpp b/src/VBox/Devices/PC/DevACPI.cpp index 7b7a7605e..19e5cd7ee 100644 --- a/src/VBox/Devices/PC/DevACPI.cpp +++ b/src/VBox/Devices/PC/DevACPI.cpp @@ -1,4 +1,4 @@ -/* $Id: DevACPI.cpp 34494 2010-11-30 09:45:03Z vboxsync $ */ +/* $Id: DevACPI.cpp 35591 2011-01-17 16:38:28Z vboxsync $ */ /** @file * DevACPI - Advanced Configuration and Power Interface (ACPI) Device. */ @@ -19,8 +19,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_ACPI -#include <VBox/pdmdev.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pgm.h> #include <VBox/log.h> #include <VBox/param.h> #include <iprt/assert.h> @@ -32,7 +32,7 @@ # include <iprt/uuid.h> #endif /* IN_RING3 */ -#include "../Builtins.h" +#include "VBoxDD.h" #ifdef LOG_ENABLED # define DEBUG_ACPI @@ -1281,11 +1281,21 @@ static int acpiPM1aCtlWritew(ACPIState *s, uint32_t addr, uint32_t val) case 0x00: /* S0 */ break; case 0x01: /* S1 */ - LogRel(("Entering S1 power state (powered-on suspend)\n")); - return acpiSleep(s); + if (s->fS1Enabled) + { + LogRel(("Entering S1 power state (powered-on suspend)\n")); + return acpiSleep(s); + } + else + LogRel(("Ignoring guest attempt to enter S1 power state (powered-on suspend)!\n")); case 0x04: /* S4 */ - LogRel(("Entering S4 power state (suspend to disk)\n")); - return acpiPowerDown(s);/* Same behavior as S5 */ + if (s->fS4Enabled) + { + LogRel(("Entering S4 power state (suspend to disk)\n")); + return acpiPowerDown(s);/* Same behavior as S5 */ + } + else + LogRel(("Ignoring guest attempt to enter S4 power state (suspend to disk)!\n")); case 0x05: /* S5 */ LogRel(("Entering S5 power state (power down)\n")); return acpiPowerDown(s); @@ -2677,7 +2687,7 @@ static DECLCALLBACK(int) acpiConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMN N_("Configuration error: Failed to read \"HostBusPciAddress\"")); /* query whether S1 power state should be exposed */ - rc = CFGMR3QueryBoolDef(pCfg, "PowerS1Enabled", &s->fS1Enabled, true); + rc = CFGMR3QueryBoolDef(pCfg, "PowerS1Enabled", &s->fS1Enabled, false); if (RT_FAILURE(rc)) return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to read \"PowerS1Enabled\"")); @@ -2686,7 +2696,7 @@ static DECLCALLBACK(int) acpiConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMN rc = CFGMR3QueryBoolDef(pCfg, "PowerS4Enabled", &s->fS4Enabled, true); if (RT_FAILURE(rc)) return PDMDEV_SET_ERROR(pDevIns, rc, - N_("Configuration error: Failed to read \"PowerS1Enabled\"")); + N_("Configuration error: Failed to read \"PowerS4Enabled\"")); /* query whether S1 power state should save the VM state */ rc = CFGMR3QueryBoolDef(pCfg, "EnableSuspendToDisk", &s->fSuspendToSavedState, false); diff --git a/src/VBox/Devices/PC/DevAPIC.cpp b/src/VBox/Devices/PC/DevAPIC.cpp index c7eef39f5..4f496a209 100644 --- a/src/VBox/Devices/PC/DevAPIC.cpp +++ b/src/VBox/Devices/PC/DevAPIC.cpp @@ -1,4 +1,4 @@ -/* $Id: DevAPIC.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: DevAPIC.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * Advanced Programmable Interrupt Controller (APIC) Device and * I/O Advanced Programmable Interrupt Controller (IO-APIC) Device. @@ -25,16 +25,16 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_APIC -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <iprt/assert.h> #include <iprt/asm.h> #include <VBox/msi.h> -#include "Builtins2.h" +#include "VBoxDD2.h" #define MSR_IA32_APICBASE 0x1b #define MSR_IA32_APICBASE_BSP (1<<8) diff --git a/src/VBox/Devices/PC/DevDMA.cpp b/src/VBox/Devices/PC/DevDMA.cpp index 47515e70b..c8b5225e7 100644 --- a/src/VBox/Devices/PC/DevDMA.cpp +++ b/src/VBox/Devices/PC/DevDMA.cpp @@ -1,4 +1,4 @@ -/* $Id: DevDMA.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DevDMA.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevDMA - DMA Controller Device. */ @@ -45,7 +45,7 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/err.h> #define LOG_GROUP LOG_GROUP_DEFAULT ///@todo LOG_GROUP_DEV_DMA @@ -56,8 +56,8 @@ #include <stdio.h> #include <stdlib.h> -#include "../Builtins.h" -#include "../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" typedef PFNDMATRANSFERHANDLER DMA_transfer_handler; #else /* !VBOX */ diff --git a/src/VBox/Devices/PC/DevFwCommon.cpp b/src/VBox/Devices/PC/DevFwCommon.cpp index e96d55db9..583bdcea0 100644 --- a/src/VBox/Devices/PC/DevFwCommon.cpp +++ b/src/VBox/Devices/PC/DevFwCommon.cpp @@ -1,4 +1,4 @@ -/* $Id: DevFwCommon.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DevFwCommon.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * FwCommon - Shared firmware code (used by DevPcBios & DevEFI). */ @@ -19,7 +19,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> #include <VBox/err.h> @@ -34,8 +34,8 @@ #include <iprt/uuid.h> #include <iprt/system.h> -#include "../Builtins.h" -#include "../Builtins2.h" +#include "VBoxDD.h" +#include "VBoxDD2.h" #include "DevFwCommon.h" diff --git a/src/VBox/Devices/PC/DevHPET.cpp b/src/VBox/Devices/PC/DevHPET.cpp index d05b34e51..0ccf36704 100644 --- a/src/VBox/Devices/PC/DevHPET.cpp +++ b/src/VBox/Devices/PC/DevHPET.cpp @@ -1,4 +1,4 @@ -/* $Id: DevHPET.cpp 34879 2010-12-09 11:42:16Z vboxsync $ */ +/* $Id: DevHPET.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * HPET virtual device - high precision event timer emulation */ @@ -19,14 +19,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_HPET -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <iprt/assert.h> #include <iprt/asm-math.h> #include <iprt/string.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/PC/DevLPC.cpp b/src/VBox/Devices/PC/DevLPC.cpp index 858cc7d7f..11b4a5bd8 100644 --- a/src/VBox/Devices/PC/DevLPC.cpp +++ b/src/VBox/Devices/PC/DevLPC.cpp @@ -1,4 +1,4 @@ -/* $Id: DevLPC.cpp 35286 2010-12-22 08:22:33Z vboxsync $ */ +/* $Id: DevLPC.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevLPC - LPC device emulation */ @@ -47,13 +47,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_LPC -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <iprt/assert.h> #include <iprt/string.h> -#include "../Builtins2.h" +#include "VBoxDD2.h" #define RCBA_BASE 0xFED1C000 diff --git a/src/VBox/Devices/PC/DevPIC.cpp b/src/VBox/Devices/PC/DevPIC.cpp index d26ba6cca..3cb702598 100644 --- a/src/VBox/Devices/PC/DevPIC.cpp +++ b/src/VBox/Devices/PC/DevPIC.cpp @@ -1,4 +1,4 @@ -/* $Id: DevPIC.cpp 35073 2010-12-14 13:14:07Z vboxsync $ */ +/* $Id: DevPIC.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevPIC - Intel 8259 Programmable Interrupt Controller (PIC) Device. */ @@ -19,12 +19,12 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_PIC -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> #include <iprt/assert.h> #include <iprt/string.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/PC/DevPcArch.c b/src/VBox/Devices/PC/DevPcArch.c index 22810af78..4470cbad6 100644 --- a/src/VBox/Devices/PC/DevPcArch.c +++ b/src/VBox/Devices/PC/DevPcArch.c @@ -1,4 +1,4 @@ -/* $Id: DevPcArch.c 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DevPcArch.c 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevPcArch - PC Architecture Device. */ @@ -19,14 +19,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_PC_ARCH -#include <VBox/pdmdev.h> -#include <VBox/mm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/mm.h> #include <VBox/log.h> #include <VBox/err.h> #include <iprt/assert.h> #include <iprt/string.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/PC/DevPcBios.cpp b/src/VBox/Devices/PC/DevPcBios.cpp index dc59c4344..8dcad468d 100644 --- a/src/VBox/Devices/PC/DevPcBios.cpp +++ b/src/VBox/Devices/PC/DevPcBios.cpp @@ -1,4 +1,4 @@ -/* $Id: DevPcBios.cpp 34458 2010-11-29 12:29:23Z vboxsync $ */ +/* $Id: DevPcBios.cpp 35400 2011-01-04 11:58:52Z vboxsync $ */ /** @file * PC BIOS Device. */ @@ -19,9 +19,9 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_PC_BIOS -#include <VBox/pdmdev.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> #include <VBox/log.h> #include <iprt/asm.h> @@ -34,8 +34,8 @@ #include <VBox/err.h> #include <VBox/param.h> -#include "../Builtins.h" -#include "../Builtins2.h" +#include "VBoxDD.h" +#include "VBoxDD2.h" #include "DevPcBios.h" #include "DevFwCommon.h" @@ -1351,8 +1351,10 @@ static DECLCALLBACK(int) pcbiosConstruct(PPDMDEVINS pDevIns, int iInstance, PCF */ if (pThis->pu8LanBoot == NULL) { +#ifdef VBOX_WITH_PXE_ROM pu8LanBootBinary = g_abNetBiosBinary; cbLanBootBinary = g_cbNetBiosBinary; +#endif } else { diff --git a/src/VBox/Devices/PC/DevPit-i8254.cpp b/src/VBox/Devices/PC/DevPit-i8254.cpp index af11b76e0..fb7325de3 100644 --- a/src/VBox/Devices/PC/DevPit-i8254.cpp +++ b/src/VBox/Devices/PC/DevPit-i8254.cpp @@ -1,4 +1,4 @@ -/* $Id: DevPit-i8254.cpp 35178 2010-12-16 13:06:34Z vboxsync $ */ +/* $Id: DevPit-i8254.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevPIT-i8254 - Intel 8254 Programmable Interval Timer (PIT) And Dummy Speaker Device. */ @@ -44,9 +44,9 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_PIT -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <iprt/assert.h> #include <iprt/asm-math.h> @@ -56,7 +56,7 @@ # include <iprt/uuid.h> #endif /* IN_RING3 */ -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/PC/DevRTC.cpp b/src/VBox/Devices/PC/DevRTC.cpp index 45335a876..32cc057cd 100644 --- a/src/VBox/Devices/PC/DevRTC.cpp +++ b/src/VBox/Devices/PC/DevRTC.cpp @@ -1,4 +1,4 @@ -/* $Id: DevRTC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DevRTC.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * Motorola MC146818 RTC/CMOS Device with PIIX4 extensions. */ @@ -44,7 +44,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_RTC -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> #include <iprt/asm-math.h> #include <iprt/assert.h> @@ -55,7 +55,7 @@ # include <iprt/uuid.h> #endif /* IN_RING3 */ -#include "../Builtins.h" +#include "VBoxDD.h" struct RTCState; typedef struct RTCState RTCState; diff --git a/src/VBox/Devices/PC/DevSMC.cpp b/src/VBox/Devices/PC/DevSMC.cpp index 99ca2d70e..a8047ee4b 100644 --- a/src/VBox/Devices/PC/DevSMC.cpp +++ b/src/VBox/Devices/PC/DevSMC.cpp @@ -1,4 +1,4 @@ -/* $Id: DevSMC.cpp 29569 2010-05-17 15:37:01Z vboxsync $ */ +/* $Id: DevSMC.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevSMC - SMC device emulation. */ @@ -50,9 +50,9 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_SMC -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/log.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <iprt/assert.h> #include <iprt/string.h> #ifdef IN_RING0 @@ -61,7 +61,7 @@ # include <iprt/thread.h> #endif -#include "../Builtins2.h" +#include "VBoxDD2.h" /******************************************************************************* diff --git a/src/VBox/Devices/PC/DrvACPI.cpp b/src/VBox/Devices/PC/DrvACPI.cpp index 17b22487b..4637b78f2 100644 --- a/src/VBox/Devices/PC/DrvACPI.cpp +++ b/src/VBox/Devices/PC/DrvACPI.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvACPI.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DrvACPI.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DrvACPI - ACPI Host Driver. */ @@ -24,7 +24,7 @@ # include <windows.h> #endif -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <VBox/log.h> #include <iprt/asm.h> #include <iprt/assert.h> @@ -55,7 +55,7 @@ # include <unistd.h> #endif -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/PC/DrvAcpiCpu.cpp b/src/VBox/Devices/PC/DrvAcpiCpu.cpp index 828a34e13..70da6678b 100644 --- a/src/VBox/Devices/PC/DrvAcpiCpu.cpp +++ b/src/VBox/Devices/PC/DrvAcpiCpu.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvAcpiCpu.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DrvAcpiCpu.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DrvAcpiCpu - ACPI CPU dummy driver for hotplugging. */ @@ -20,13 +20,13 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_ACPI -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <VBox/log.h> #include <iprt/assert.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" /** diff --git a/src/VBox/Devices/PC/Etherboot-src/Makefile.kmk b/src/VBox/Devices/PC/Etherboot-src/Makefile.kmk index 3c8f3ad4d..a5a9d0fab 100644 --- a/src/VBox/Devices/PC/Etherboot-src/Makefile.kmk +++ b/src/VBox/Devices/PC/Etherboot-src/Makefile.kmk @@ -1,10 +1,10 @@ -# $Id: Makefile.kmk 34775 2010-12-07 10:46:50Z vboxsync $ +# $Id: Makefile.kmk 35399 2011-01-04 09:40:13Z vboxsync $ ## @file # VBox Etherboot Network boot ROM makefile. # # -# Copyright (C) 2006-2007 Oracle Corporation +# Copyright (C) 2006-2010 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; @@ -18,6 +18,26 @@ SUB_DEPTH = ../../../../.. include $(KBUILD_PATH)/subheader.kmk +if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.x86 darwin.amd64 os2.x86 solaris.x86 solaris.amd64 win.x86 win.amd64 linux.amd64 freebsd.amd64) + # + # Build it from a precompiled binary. + # See notes about the binary load address and size way below. + # + LIBRARIES += NetBiosBin + NetBiosBin_TEMPLATE = VBOXR3 + NetBiosBin_SOURCES = $(NetBiosBin_0_OUTDIR)/NetBiosBin.c + NetBiosBin_CLEAN = $(NetBiosBin_0_OUTDIR)/NetBiosBin.c + + $$(NetBiosBin_0_OUTDIR)/NetBiosBin.c: $(PATH_SUB_CURRENT)/pcnet32.zrom $(VBOX_BIN2C) | $$(dir $$@) + $(call MSG_TOOL,bin2c,NetBiosBin,$<,$@) + $(QUIET)$(VBOX_BIN2C) -min 16 -max 24 -mask 0xfff -export NetBiosBinary $< $@ + +else +# +# Build it from scratch. +# TODO: Stop using $(PATH_TARGET)! +# + BLDPROGS += nrv2b makerom LIBRARIES += NetBiosBin @@ -132,7 +152,7 @@ EB_CFLAGS+= -DVERSION_MAJOR=$(VERSION_MAJOR) \ IDENT= '$(@F) $(VERSION) (GPL) etherboot.org' # Rebuild everything whenever the Makefile etc. is changed. Must be LAST in the dependency list! -MAKEDEPS= $(PATH_SUB_CURRENT)/Makefile.kmk $(PATH_SUB_CURRENT)/Config $(PATH_SUB_CURRENT)/arch/$(ARCH)/Config | $(call DIRDEP,$(PATH_TARGET)) +MAKEDEPS= $(PATH_SUB_CURRENT)/Makefile.kmk $(PATH_SUB_CURRENT)/Config $(PATH_SUB_CURRENT)/arch/$(ARCH)/Config | $(PATH_TARGET)/ # The core (card-independent part) of Etherboot. BOBJS= $(PATH_TARGET)/main.o $(PATH_TARGET)/osloader.o \ @@ -288,10 +308,6 @@ $(PATH_TARGET)/pcnet32.rom.prf: $(PCIENTRY) $(PCNET32_RUNTIME) $(PREFIXOBJS) $(P # are not up to compiling Etherboot (the linker messes up big time, shifting # the final binary to 0xffc00000 and filling out relocations incorrectly # (first occurrence is the call to prelocate in the pciprefix.o file). -ifeq ($(filter-out darwin.x86 darwin.amd64 os2.x86 solaris.x86 solaris.amd64 win.x86 win.amd64 linux.amd64 freebsd.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) -$(PATH_TARGET)/pcnet32.zrom: $(PATH_SUB_CURRENT)/pcnet32.zrom | $(call DIRDEP,$(PATH_TARGET)) - $(CP) -f $< $@ -else $(PATH_TARGET)/pcnet32.zrom: $(PATH_TARGET)/pcnet32.rom.zprf $(MAKEROM) $(MAKEDEPS) $(call MSG_TOOL,makerom,NetBiosBin,$<,$@) $(QUIET)$(EB_OBJCOPY) -O binary $< $@.tmp @@ -312,7 +328,6 @@ $(PATH_TARGET)/pcnet32.rom: $(PATH_TARGET)/pcnet32.rom.prf $(MAKEROM) $(MAKEDEPS $(QUIET)$(EB_OBJCOPY) -O binary $< $@.tmp $(QUIET)$(MAKEROM) -p 0x1022,0x2000 -i $(IDENT) $@.tmp $(QUIET)$(MV) -f $@.tmp $@ -endif # Manually created dependencies. @@ -790,5 +805,6 @@ include/pxe_export.h: include/mii.h: +endif # build it include $(KBUILD_PATH)/subfooter.kmk diff --git a/src/VBox/Devices/Parallel/DevParallel.cpp b/src/VBox/Devices/Parallel/DevParallel.cpp index f6bc79f52..6fb08a3ab 100644 --- a/src/VBox/Devices/Parallel/DevParallel.cpp +++ b/src/VBox/Devices/Parallel/DevParallel.cpp @@ -1,4 +1,4 @@ -/* $Id: DevParallel.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DevParallel.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevParallel - Parallel (Port) Device Emulation. * @@ -22,14 +22,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_PARALLEL -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/uuid.h> #include <iprt/string.h> #include <iprt/semaphore.h> #include <iprt/critsect.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Parallel/DrvHostParallel.cpp b/src/VBox/Devices/Parallel/DrvHostParallel.cpp index 72c298ab0..9d23d6ceb 100644 --- a/src/VBox/Devices/Parallel/DrvHostParallel.cpp +++ b/src/VBox/Devices/Parallel/DrvHostParallel.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvHostParallel.cpp 32678 2010-09-21 17:14:02Z vboxsync $ */ +/* $Id: DrvHostParallel.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VirtualBox Host Parallel Port Driver. * @@ -21,8 +21,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_HOST_PARALLEL -#include <VBox/pdmdrv.h> -#include <VBox/pdmthread.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmthread.h> #include <iprt/asm.h> #include <iprt/assert.h> #include <iprt/file.h> @@ -42,7 +42,7 @@ # include <errno.h> #endif -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Samples/VBoxSampleDevice.cpp b/src/VBox/Devices/Samples/VBoxSampleDevice.cpp index 9d01a6d54..cff444956 100644 --- a/src/VBox/Devices/Samples/VBoxSampleDevice.cpp +++ b/src/VBox/Devices/Samples/VBoxSampleDevice.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxSampleDevice.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: VBoxSampleDevice.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox Sample Device. */ @@ -20,7 +20,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MISC -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/version.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/Devices/Serial/DevSerial.cpp b/src/VBox/Devices/Serial/DevSerial.cpp index 7d6110b09..8a2aee83d 100644 --- a/src/VBox/Devices/Serial/DevSerial.cpp +++ b/src/VBox/Devices/Serial/DevSerial.cpp @@ -1,4 +1,4 @@ -/* $Id: DevSerial.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DevSerial.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevSerial - 16550A UART emulation. * (taken from hw/serial.c 2010/05/15 with modifications) @@ -47,14 +47,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_SERIAL -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/uuid.h> #include <iprt/string.h> #include <iprt/semaphore.h> #include <iprt/critsect.h> -#include "../Builtins.h" +#include "VBoxDD.h" #undef VBOX_SERIAL_PCI /* The PCI variant has lots of problems: wrong IRQ line and wrong IO base assigned. */ diff --git a/src/VBox/Devices/Serial/DrvChar.cpp b/src/VBox/Devices/Serial/DrvChar.cpp index 8e2c22600..8550b0285 100644 --- a/src/VBox/Devices/Serial/DrvChar.cpp +++ b/src/VBox/Devices/Serial/DrvChar.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvChar.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DrvChar.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * Driver that adapts PDMISTREAM into PDMICHARCONNECTOR / PDMICHARPORT. * @@ -26,14 +26,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_CHAR -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/asm.h> #include <iprt/assert.h> #include <iprt/stream.h> #include <iprt/semaphore.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Serial/DrvHostSerial.cpp b/src/VBox/Devices/Serial/DrvHostSerial.cpp index f0ed7fcb1..dfdadea2e 100644 --- a/src/VBox/Devices/Serial/DrvHostSerial.cpp +++ b/src/VBox/Devices/Serial/DrvHostSerial.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvHostSerial.cpp 34215 2010-11-19 17:41:49Z vboxsync $ */ +/* $Id: DrvHostSerial.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox stream I/O devices: Host serial driver */ @@ -21,7 +21,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_HOST_SERIAL -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> #include <VBox/log.h> @@ -68,7 +68,7 @@ # include <Windows.h> #endif -#include "../Builtins.h" +#include "VBoxDD.h" /** Size of the send fifo queue (in bytes) */ @@ -932,7 +932,7 @@ static DECLCALLBACK(int) drvHostSerialMonitorThread(PPDMDRVINS pDrvIns, PPDMTHRE do { unsigned int statusLines; - + /* * Get the status line state. */ diff --git a/src/VBox/Devices/Serial/DrvNamedPipe.cpp b/src/VBox/Devices/Serial/DrvNamedPipe.cpp index b8aac9f43..d0687378a 100644 --- a/src/VBox/Devices/Serial/DrvNamedPipe.cpp +++ b/src/VBox/Devices/Serial/DrvNamedPipe.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvNamedPipe.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DrvNamedPipe.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * Named pipe / local socket stream driver. */ @@ -20,7 +20,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_NAMEDPIPE -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/file.h> #include <iprt/stream.h> @@ -29,7 +29,7 @@ #include <iprt/semaphore.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" #ifdef RT_OS_WINDOWS # include <windows.h> diff --git a/src/VBox/Devices/Serial/DrvRawFile.cpp b/src/VBox/Devices/Serial/DrvRawFile.cpp index b686ad618..ba3b864ee 100644 --- a/src/VBox/Devices/Serial/DrvRawFile.cpp +++ b/src/VBox/Devices/Serial/DrvRawFile.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvRawFile.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DrvRawFile.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox stream drivers - Raw file output. */ @@ -20,7 +20,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEFAULT -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/file.h> #include <iprt/mem.h> @@ -29,7 +29,7 @@ #include <iprt/string.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Storage/ATAController.cpp b/src/VBox/Devices/Storage/ATAController.cpp index 8f9f6e2ca..b917a3821 100644 --- a/src/VBox/Devices/Storage/ATAController.cpp +++ b/src/VBox/Devices/Storage/ATAController.cpp @@ -1,4 +1,4 @@ -/* $Id: ATAController.cpp 35214 2010-12-17 10:10:07Z vboxsync $ */ +/* $Id: ATAController.cpp 35595 2011-01-17 20:05:15Z vboxsync $ */ /** @file * DevATA, DevAHCI - Shared ATA/ATAPI controller code (disk and cdrom). * @@ -21,7 +21,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_IDE -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/string.h> #ifdef IN_RING3 @@ -33,9 +33,9 @@ #endif /* IN_RING3 */ #include <iprt/critsect.h> #include <iprt/asm.h> -#include <VBox/stam.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> #include <VBox/scsi.h> @@ -2287,7 +2287,8 @@ static void atapiParseCmdVirtualATAPI(AHCIATADevState *s) PDMCritSectLeave(&pCtl->lock); rc = VMR3ReqCallWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY, - (PFNRT)s->pDrvMount->pfnUnmount, 2, s->pDrvMount, false); + (PFNRT)s->pDrvMount->pfnUnmount, 3, s->pDrvMount, + false /*=fForce*/, true /*=fEeject*/); AssertReleaseRC(rc); { STAM_PROFILE_START(&pCtl->StatLockWait, a); @@ -2920,7 +2921,7 @@ static void ataParseCmd(AHCIATADevState *s, uint8_t cmd) s->fLBA48 = true; case ATA_READ_SECTORS: case ATA_READ_SECTORS_WITHOUT_RETRIES: - if (!s->pDrvBlock) + if (!s->pDrvBlock || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = 1; ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_FROM_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_READ_SECTORS, false); @@ -2929,13 +2930,15 @@ static void ataParseCmd(AHCIATADevState *s, uint8_t cmd) s->fLBA48 = true; case ATA_WRITE_SECTORS: case ATA_WRITE_SECTORS_WITHOUT_RETRIES: + if (!s->pDrvBlock || s->fATAPI) + goto abort_cmd; s->cSectorsPerIRQ = 1; ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false); break; case ATA_READ_MULTIPLE_EXT: s->fLBA48 = true; case ATA_READ_MULTIPLE: - if (!s->cMultSectors) + if (!s->pDrvBlock || !s->cMultSectors || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = s->cMultSectors; ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_FROM_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_READ_SECTORS, false); @@ -2943,7 +2946,7 @@ static void ataParseCmd(AHCIATADevState *s, uint8_t cmd) case ATA_WRITE_MULTIPLE_EXT: s->fLBA48 = true; case ATA_WRITE_MULTIPLE: - if (!s->cMultSectors) + if (!s->pDrvBlock || !s->cMultSectors || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = s->cMultSectors; ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false); @@ -2952,7 +2955,7 @@ static void ataParseCmd(AHCIATADevState *s, uint8_t cmd) s->fLBA48 = true; case ATA_READ_DMA: case ATA_READ_DMA_WITHOUT_RETRIES: - if (!s->pDrvBlock) + if (!s->pDrvBlock || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS; s->fDMA = true; @@ -2962,7 +2965,7 @@ static void ataParseCmd(AHCIATADevState *s, uint8_t cmd) s->fLBA48 = true; case ATA_WRITE_DMA: case ATA_WRITE_DMA_WITHOUT_RETRIES: - if (!s->pDrvBlock) + if (!s->pDrvBlock || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS; s->fDMA = true; diff --git a/src/VBox/Devices/Storage/ATAController.h b/src/VBox/Devices/Storage/ATAController.h index 5576b8a61..15ff8ef6b 100644 --- a/src/VBox/Devices/Storage/ATAController.h +++ b/src/VBox/Devices/Storage/ATAController.h @@ -1,4 +1,4 @@ -/* $Id: ATAController.h 35214 2010-12-17 10:10:07Z vboxsync $ */ +/* $Id: ATAController.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DevATA, DevAHCI - Shared ATA/ATAPI controller types. */ @@ -21,13 +21,13 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #ifdef IN_RING3 # include <iprt/semaphore.h> # include <iprt/thread.h> #endif /* IN_RING3 */ #include <iprt/critsect.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include "PIIX3ATABmDma.h" #include "ide.h" diff --git a/src/VBox/Devices/Storage/DevAHCI.cpp b/src/VBox/Devices/Storage/DevAHCI.cpp index 3fdaae6f1..975bb7fc6 100644 --- a/src/VBox/Devices/Storage/DevAHCI.cpp +++ b/src/VBox/Devices/Storage/DevAHCI.cpp @@ -1,4 +1,4 @@ -/* $Id: DevAHCI.cpp 35214 2010-12-17 10:10:07Z vboxsync $ */ +/* $Id: DevAHCI.cpp 35560 2011-01-14 13:37:32Z vboxsync $ */ /** @file * VBox storage devices: AHCI controller device (disk and cdrom). * Implements the AHCI standard 1.1 @@ -37,10 +37,10 @@ *******************************************************************************/ //#define DEBUG #define LOG_GROUP LOG_GROUP_DEV_AHCI -#include <VBox/pdmdev.h> -#include <VBox/pdmqueue.h> -#include <VBox/pdmthread.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pdmqueue.h> +#include <VBox/vmm/pdmthread.h> +#include <VBox/vmm/pdmcritsect.h> #include <VBox/scsi.h> #include <iprt/assert.h> #include <iprt/asm.h> @@ -56,7 +56,7 @@ #include "ide.h" #include "ATAController.h" -#include "../Builtins.h" +#include "VBoxDD.h" #define AHCI_MAX_NR_PORTS_IMPL 30 #define AHCI_NR_COMMAND_SLOTS 32 @@ -4038,7 +4038,8 @@ static AHCITXDIR atapiParseCmdVirtualATAPI(PAHCIPort pAhciPort, PAHCIPORTTASKSTA PPDMDEVINS pDevIns = pAhci->CTX_SUFF(pDevIns); rc2 = VMR3ReqCallWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY, - (PFNRT)pAhciPort->pDrvMount->pfnUnmount, 2, pAhciPort->pDrvMount, false); + (PFNRT)pAhciPort->pDrvMount->pfnUnmount, 3, + pAhciPort->pDrvMount, false/*=fForce*/, true/*=fEject*/); Assert(RT_SUCCESS(rc2) || (rc == VERR_PDM_MEDIA_LOCKED)); } break; diff --git a/src/VBox/Devices/Storage/DevATA.cpp b/src/VBox/Devices/Storage/DevATA.cpp index 5cee63289..08bef420f 100644 --- a/src/VBox/Devices/Storage/DevATA.cpp +++ b/src/VBox/Devices/Storage/DevATA.cpp @@ -1,4 +1,4 @@ -/* $Id: DevATA.cpp 34433 2010-11-27 11:09:38Z vboxsync $ */ +/* $Id: DevATA.cpp 35595 2011-01-17 20:05:15Z vboxsync $ */ /** @file * VBox storage devices: ATA/ATAPI controller device (disk and cdrom). */ @@ -39,7 +39,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_IDE -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/string.h> #ifdef IN_RING3 @@ -51,15 +51,15 @@ #endif /* IN_RING3 */ #include <iprt/critsect.h> #include <iprt/asm.h> -#include <VBox/stam.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> #include <VBox/scsi.h> #include "PIIX3ATABmDma.h" #include "ide.h" -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* * Defined Constants And Macros * @@ -2981,7 +2981,8 @@ static void atapiParseCmdVirtualATAPI(ATADevState *s) PDMCritSectLeave(&pCtl->lock); rc = VMR3ReqCallWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY, - (PFNRT)s->pDrvMount->pfnUnmount, 2, s->pDrvMount, false); + (PFNRT)s->pDrvMount->pfnUnmount, 3, + s->pDrvMount /*=fForce*/, true /*=fEject*/); Assert(RT_SUCCESS(rc) || (rc == VERR_PDM_MEDIA_LOCKED)); { STAM_PROFILE_START(&pCtl->StatLockWait, a); @@ -3652,7 +3653,7 @@ static void ataParseCmd(ATADevState *s, uint8_t cmd) s->fLBA48 = true; case ATA_READ_SECTORS: case ATA_READ_SECTORS_WITHOUT_RETRIES: - if (!s->pDrvBlock) + if (!s->pDrvBlock || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = 1; ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_FROM_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_READ_SECTORS, false); @@ -3661,13 +3662,15 @@ static void ataParseCmd(ATADevState *s, uint8_t cmd) s->fLBA48 = true; case ATA_WRITE_SECTORS: case ATA_WRITE_SECTORS_WITHOUT_RETRIES: + if (!s->pDrvBlock || s->fATAPI) + goto abort_cmd; s->cSectorsPerIRQ = 1; ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false); break; case ATA_READ_MULTIPLE_EXT: s->fLBA48 = true; case ATA_READ_MULTIPLE: - if (!s->cMultSectors) + if (!s->pDrvBlock || !s->cMultSectors || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = s->cMultSectors; ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_FROM_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_READ_SECTORS, false); @@ -3675,7 +3678,7 @@ static void ataParseCmd(ATADevState *s, uint8_t cmd) case ATA_WRITE_MULTIPLE_EXT: s->fLBA48 = true; case ATA_WRITE_MULTIPLE: - if (!s->cMultSectors) + if (!s->pDrvBlock || !s->cMultSectors || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = s->cMultSectors; ataStartTransfer(s, ataGetNSectors(s) * 512, PDMBLOCKTXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false); @@ -3684,7 +3687,7 @@ static void ataParseCmd(ATADevState *s, uint8_t cmd) s->fLBA48 = true; case ATA_READ_DMA: case ATA_READ_DMA_WITHOUT_RETRIES: - if (!s->pDrvBlock) + if (!s->pDrvBlock || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS; s->fDMA = true; @@ -3694,7 +3697,7 @@ static void ataParseCmd(ATADevState *s, uint8_t cmd) s->fLBA48 = true; case ATA_WRITE_DMA: case ATA_WRITE_DMA_WITHOUT_RETRIES: - if (!s->pDrvBlock) + if (!s->pDrvBlock || s->fATAPI) goto abort_cmd; s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS; s->fDMA = true; diff --git a/src/VBox/Devices/Storage/DevBusLogic.cpp b/src/VBox/Devices/Storage/DevBusLogic.cpp index 5f8eaebb2..80b2c0769 100644 --- a/src/VBox/Devices/Storage/DevBusLogic.cpp +++ b/src/VBox/Devices/Storage/DevBusLogic.cpp @@ -1,4 +1,4 @@ -/* $Id: DevBusLogic.cpp 34433 2010-11-27 11:09:38Z vboxsync $ */ +/* $Id: DevBusLogic.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox storage devices: BusLogic SCSI host adapter BT-958. */ @@ -22,9 +22,9 @@ *******************************************************************************/ //#define DEBUG #define LOG_GROUP LOG_GROUP_DEV_BUSLOGIC -#include <VBox/pdmdev.h> -#include <VBox/pdmifs.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pdmifs.h> +#include <VBox/vmm/pdmcritsect.h> #include <VBox/scsi.h> #include <iprt/asm.h> #include <iprt/assert.h> @@ -38,7 +38,7 @@ #endif #include "VBoxSCSI.h" -#include "../Builtins.h" +#include "VBoxDD.h" /* Maximum number of attached devices the adapter can handle. */ #define BUSLOGIC_MAX_DEVICES 16 diff --git a/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp b/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp index 7d411acc0..a4a7c4ae1 100644 --- a/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp +++ b/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp @@ -1,4 +1,4 @@ -/* $Id: DevLsiLogicSCSI.cpp 34433 2010-11-27 11:09:38Z vboxsync $ */ +/* $Id: DevLsiLogicSCSI.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox storage devices: LsiLogic LSI53c1030 SCSI controller. */ @@ -17,9 +17,9 @@ //#define DEBUG #define LOG_GROUP LOG_GROUP_DEV_LSILOGICSCSI -#include <VBox/pdmdev.h> -#include <VBox/pdmqueue.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pdmqueue.h> +#include <VBox/vmm/pdmcritsect.h> #include <VBox/scsi.h> #include <iprt/assert.h> #include <iprt/asm.h> @@ -35,7 +35,7 @@ #include "DevLsiLogicSCSI.h" #include "VBoxSCSI.h" -#include "../Builtins.h" +#include "VBoxDD.h" /** The current saved state version. */ #define LSILOGIC_SAVED_STATE_VERSION 3 diff --git a/src/VBox/Devices/Storage/DrvBlock.cpp b/src/VBox/Devices/Storage/DrvBlock.cpp index 9449804be..4b45bc16a 100644 --- a/src/VBox/Devices/Storage/DrvBlock.cpp +++ b/src/VBox/Devices/Storage/DrvBlock.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvBlock.cpp 34433 2010-11-27 11:09:38Z vboxsync $ */ +/* $Id: DrvBlock.cpp 35560 2011-01-14 13:37:32Z vboxsync $ */ /** @file * VBox storage devices: Generic block driver */ @@ -20,12 +20,12 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_BLOCK -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" /** @def VBOX_PERIODIC_FLUSH @@ -624,7 +624,7 @@ static DECLCALLBACK(int) drvblockMount(PPDMIMOUNT pInterface, const char *pszFil /** @copydoc PDMIMOUNT::pfnUnmount */ -static DECLCALLBACK(int) drvblockUnmount(PPDMIMOUNT pInterface, bool fForce) +static DECLCALLBACK(int) drvblockUnmount(PPDMIMOUNT pInterface, bool fForce, bool fEject) { PDRVBLOCK pThis = PDMIMOUNT_2_DRVBLOCK(pInterface); diff --git a/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp b/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp index 78b3df5d4..bb2be1882 100644 --- a/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp +++ b/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvDiskIntegrity.cpp 34932 2010-12-10 00:29:53Z vboxsync $ */ +/* $Id: DrvDiskIntegrity.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox storage devices: Disk integrity check. */ @@ -20,7 +20,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_DISK_INTEGRITY -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/string.h> #include <iprt/uuid.h> @@ -32,7 +32,7 @@ #include <iprt/semaphore.h> #include <iprt/asm.h> -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Storage/DrvHostBase.cpp b/src/VBox/Devices/Storage/DrvHostBase.cpp index 200c1651a..7d6c4c7f0 100644 --- a/src/VBox/Devices/Storage/DrvHostBase.cpp +++ b/src/VBox/Devices/Storage/DrvHostBase.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvHostBase.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DrvHostBase.cpp 35560 2011-01-14 13:37:32Z vboxsync $ */ /** @file * DrvHostBase - Host base drive access driver. */ @@ -111,7 +111,7 @@ NTSTATUS __stdcall NtQueryVolumeInformationFile( # error "Unsupported Platform." #endif -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/file.h> #include <iprt/path.h> @@ -477,7 +477,7 @@ static DECLCALLBACK(int) drvHostBaseMount(PPDMIMOUNT pInterface, const char *psz /** @copydoc PDMIMOUNT::pfnUnmount */ -static DECLCALLBACK(int) drvHostBaseUnmount(PPDMIMOUNT pInterface, bool fForce) +static DECLCALLBACK(int) drvHostBaseUnmount(PPDMIMOUNT pInterface, bool fForce, bool fEject) { LogFlow(("drvHostBaseUnmount: returns VERR_NOT_SUPPORTED\n")); return VERR_NOT_SUPPORTED; diff --git a/src/VBox/Devices/Storage/DrvHostDVD.cpp b/src/VBox/Devices/Storage/DrvHostDVD.cpp index 2a94c2d00..f1988a22d 100644 --- a/src/VBox/Devices/Storage/DrvHostDVD.cpp +++ b/src/VBox/Devices/Storage/DrvHostDVD.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvHostDVD.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DrvHostDVD.cpp 35560 2011-01-14 13:37:32Z vboxsync $ */ /** @file * DrvHostDVD - Host DVD block driver. */ @@ -102,7 +102,7 @@ #endif #include <iprt/asm.h> -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/asm.h> #include <iprt/assert.h> #include <iprt/file.h> @@ -111,7 +111,7 @@ #include <iprt/critsect.h> #include <VBox/scsi.h> -#include "Builtins.h" +#include "VBoxDD.h" #include "DrvHostBase.h" @@ -126,101 +126,104 @@ static int solarisExitRootMode(uid_t *pEffUserID); /** @copydoc PDMIMOUNT::pfnUnmount */ -static DECLCALLBACK(int) drvHostDvdUnmount(PPDMIMOUNT pInterface, bool fForce) +static DECLCALLBACK(int) drvHostDvdUnmount(PPDMIMOUNT pInterface, bool fForce, bool fEject) { - PDRVHOSTBASE pThis = PDMIMOUNT_2_DRVHOSTBASE(pInterface); - RTCritSectEnter(&pThis->CritSect); - - /* - * Validate state. - */ - int rc = VINF_SUCCESS; - if (!pThis->fLocked || fForce) - { + PDRVHOSTBASE pThis = PDMIMOUNT_2_DRVHOSTBASE(pInterface); + RTCritSectEnter(&pThis->CritSect); + + /* + * Validate state. + */ + int rc = VINF_SUCCESS; + if (!pThis->fLocked || fForce) + { /* Unlock drive if necessary. */ if (pThis->fLocked) drvHostDvdDoLock(pThis, false); - /* - * Eject the disc. - */ + if (fEject) + { + /* + * Eject the disc. + */ #if defined(RT_OS_DARWIN) || defined(RT_OS_FREEBSD) - uint8_t abCmd[16] = - { - SCSI_START_STOP_UNIT, 0, 0, 0, 2 /*eject+stop*/, 0, - 0,0,0,0,0,0,0,0,0,0 - }; - rc = DRVHostBaseScsiCmd(pThis, abCmd, 6, PDMBLOCKTXDIR_NONE, NULL, NULL, NULL, 0, 0); + uint8_t abCmd[16] = + { + SCSI_START_STOP_UNIT, 0, 0, 0, 2 /*eject+stop*/, 0, + 0,0,0,0,0,0,0,0,0,0 + }; + rc = DRVHostBaseScsiCmd(pThis, abCmd, 6, PDMBLOCKTXDIR_NONE, NULL, NULL, NULL, 0, 0); #elif defined(RT_OS_LINUX) - rc = ioctl(pThis->FileDevice, CDROMEJECT, 0); - if (rc < 0) - { - if (errno == EBUSY) - rc = VERR_PDM_MEDIA_LOCKED; - else if (errno == ENOSYS) - rc = VERR_NOT_SUPPORTED; - else - rc = RTErrConvertFromErrno(errno); - } + rc = ioctl(pThis->FileDevice, CDROMEJECT, 0); + if (rc < 0) + { + if (errno == EBUSY) + rc = VERR_PDM_MEDIA_LOCKED; + else if (errno == ENOSYS) + rc = VERR_NOT_SUPPORTED; + else + rc = RTErrConvertFromErrno(errno); + } #elif defined(RT_OS_SOLARIS) - rc = ioctl(pThis->FileRawDevice, DKIOCEJECT, 0); - if (rc < 0) - { - if (errno == EBUSY) - rc = VERR_PDM_MEDIA_LOCKED; - else if (errno == ENOSYS || errno == ENOTSUP) - rc = VERR_NOT_SUPPORTED; - else if (errno == ENODEV) - rc = VERR_PDM_MEDIA_NOT_MOUNTED; - else - rc = RTErrConvertFromErrno(errno); - } + rc = ioctl(pThis->FileRawDevice, DKIOCEJECT, 0); + if (rc < 0) + { + if (errno == EBUSY) + rc = VERR_PDM_MEDIA_LOCKED; + else if (errno == ENOSYS || errno == ENOTSUP) + rc = VERR_NOT_SUPPORTED; + else if (errno == ENODEV) + rc = VERR_PDM_MEDIA_NOT_MOUNTED; + else + rc = RTErrConvertFromErrno(errno); + } #elif defined(RT_OS_WINDOWS) - RTFILE FileDevice = pThis->FileDevice; - if (FileDevice == NIL_RTFILE) /* obsolete crap */ - rc = RTFileOpen(&FileDevice, pThis->pszDeviceOpen, RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_NONE); - if (RT_SUCCESS(rc)) - { - /* do ioctl */ - DWORD cbReturned; - if (DeviceIoControl((HANDLE)FileDevice, IOCTL_STORAGE_EJECT_MEDIA, - NULL, 0, - NULL, 0, &cbReturned, - NULL)) - rc = VINF_SUCCESS; - else - rc = RTErrConvertFromWin32(GetLastError()); - - /* clean up handle */ - if (FileDevice != pThis->FileDevice) - RTFileClose(FileDevice); - } - else - AssertMsgFailed(("Failed to open '%s' for ejecting this tray.\n", rc)); + RTFILE FileDevice = pThis->FileDevice; + if (FileDevice == NIL_RTFILE) /* obsolete crap */ + rc = RTFileOpen(&FileDevice, pThis->pszDeviceOpen, RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_NONE); + if (RT_SUCCESS(rc)) + { + /* do ioctl */ + DWORD cbReturned; + if (DeviceIoControl((HANDLE)FileDevice, IOCTL_STORAGE_EJECT_MEDIA, + NULL, 0, + NULL, 0, &cbReturned, + NULL)) + rc = VINF_SUCCESS; + else + rc = RTErrConvertFromWin32(GetLastError()); + + /* clean up handle */ + if (FileDevice != pThis->FileDevice) + RTFileClose(FileDevice); + } + else + AssertMsgFailed(("Failed to open '%s' for ejecting this tray.\n", rc)); #else - AssertMsgFailed(("Eject is not implemented!\n")); - rc = VINF_SUCCESS; + AssertMsgFailed(("Eject is not implemented!\n")); + rc = VINF_SUCCESS; #endif + } + + /* + * Media is no longer present. + */ + DRVHostBaseMediaNotPresent(pThis); /** @todo This isn't thread safe! */ + } + else + { + Log(("drvHostDvdUnmount: Locked\n")); + rc = VERR_PDM_MEDIA_LOCKED; + } - /* - * Media is no longer present. - */ - DRVHostBaseMediaNotPresent(pThis); /** @todo This isn't thread safe! */ - } - else - { - Log(("drvHostDvdUnmount: Locked\n")); - rc = VERR_PDM_MEDIA_LOCKED; - } - - RTCritSectLeave(&pThis->CritSect); - LogFlow(("drvHostDvdUnmount: returns %Rrc\n", rc)); - return rc; + RTCritSectLeave(&pThis->CritSect); + LogFlow(("drvHostDvdUnmount: returns %Rrc\n", rc)); + return rc; } diff --git a/src/VBox/Devices/Storage/DrvHostFloppy.cpp b/src/VBox/Devices/Storage/DrvHostFloppy.cpp index c31025e23..da5723093 100644 --- a/src/VBox/Devices/Storage/DrvHostFloppy.cpp +++ b/src/VBox/Devices/Storage/DrvHostFloppy.cpp @@ -37,7 +37,7 @@ # error "Unsupported Platform." #endif /* !RT_OS_WINDOWS nor RT_OS_LINUX nor RT_OS_L4 */ -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/file.h> #include <iprt/string.h> @@ -47,7 +47,7 @@ #include <iprt/asm.h> #include <iprt/critsect.h> -#include "Builtins.h" +#include "VBoxDD.h" #include "DrvHostBase.h" diff --git a/src/VBox/Devices/Storage/DrvMediaISO.cpp b/src/VBox/Devices/Storage/DrvMediaISO.cpp index 8e298e8ec..abb85e724 100644 --- a/src/VBox/Devices/Storage/DrvMediaISO.cpp +++ b/src/VBox/Devices/Storage/DrvMediaISO.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvMediaISO.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DrvMediaISO.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox storage devices: ISO image media driver */ @@ -19,13 +19,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_ISO -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/file.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Storage/DrvRawImage.cpp b/src/VBox/Devices/Storage/DrvRawImage.cpp index 3d39f5b42..4779f3b80 100644 --- a/src/VBox/Devices/Storage/DrvRawImage.cpp +++ b/src/VBox/Devices/Storage/DrvRawImage.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvRawImage.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DrvRawImage.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox storage devices: Raw image driver */ @@ -20,13 +20,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_RAW_IMAGE -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/assert.h> #include <iprt/file.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Storage/DrvSCSI.cpp b/src/VBox/Devices/Storage/DrvSCSI.cpp index c5d1b5ee4..f1ea50cd3 100644 --- a/src/VBox/Devices/Storage/DrvSCSI.cpp +++ b/src/VBox/Devices/Storage/DrvSCSI.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvSCSI.cpp 34452 2010-11-29 11:20:09Z vboxsync $ */ +/* $Id: DrvSCSI.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox storage drivers: Generic SCSI command parser and execution driver */ @@ -20,9 +20,9 @@ *******************************************************************************/ //#define DEBUG #define LOG_GROUP LOG_GROUP_DRV_SCSI -#include <VBox/pdmdrv.h> -#include <VBox/pdmifs.h> -#include <VBox/pdmthread.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmifs.h> +#include <VBox/vmm/pdmthread.h> #include <VBox/vscsi.h> #include <VBox/scsi.h> #include <iprt/asm.h> @@ -33,7 +33,7 @@ #include <iprt/string.h> #include <iprt/uuid.h> -#include "Builtins.h" +#include "VBoxDD.h" /** The maximum number of release log entries per device. */ #define MAX_LOG_REL_ERRORS 1024 diff --git a/src/VBox/Devices/Storage/DrvSCSIHost.cpp b/src/VBox/Devices/Storage/DrvSCSIHost.cpp index 24487b38d..b2345264c 100644 --- a/src/VBox/Devices/Storage/DrvSCSIHost.cpp +++ b/src/VBox/Devices/Storage/DrvSCSIHost.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvSCSIHost.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DrvSCSIHost.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox storage drivers: Host SCSI access driver. */ @@ -20,9 +20,9 @@ *******************************************************************************/ //#define DEBUG #define LOG_GROUP LOG_GROUP_DRV_SCSIHOST -#include <VBox/pdmdrv.h> -#include <VBox/pdmifs.h> -#include <VBox/pdmthread.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmifs.h> +#include <VBox/vmm/pdmthread.h> #include <VBox/scsi.h> #include <iprt/assert.h> #include <iprt/file.h> @@ -37,7 +37,7 @@ # include <sys/ioctl.h> #endif -#include "../Builtins.h" +#include "VBoxDD.h" /** * SCSI driver instance data. diff --git a/src/VBox/Devices/Storage/DrvVD.cpp b/src/VBox/Devices/Storage/DrvVD.cpp index 2a10e0228..0c441e700 100644 --- a/src/VBox/Devices/Storage/DrvVD.cpp +++ b/src/VBox/Devices/Storage/DrvVD.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvVD.cpp 35162 2010-12-15 19:39:54Z vboxsync $ */ +/* $Id: DrvVD.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DrvVD - Generic VBox disk media driver. */ @@ -21,9 +21,9 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_VD #include <VBox/vd.h> -#include <VBox/pdmdrv.h> -#include <VBox/pdmasynccompletion.h> -#include <VBox/pdmblkcache.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmasynccompletion.h> +#include <VBox/vmm/pdmblkcache.h> #include <iprt/asm.h> #include <iprt/alloc.h> #include <iprt/assert.h> @@ -46,7 +46,7 @@ RT_C_DECLS_BEGIN RT_C_DECLS_END #endif /* VBOX_WITH_INIP */ -#include "Builtins.h" +#include "VBoxDD.h" #ifdef VBOX_WITH_INIP /* Small hack to get at lwIP initialized status */ diff --git a/src/VBox/Devices/Storage/UsbMsd.cpp b/src/VBox/Devices/Storage/UsbMsd.cpp index e322fb6fc..7249f24da 100644 --- a/src/VBox/Devices/Storage/UsbMsd.cpp +++ b/src/VBox/Devices/Storage/UsbMsd.cpp @@ -1,4 +1,4 @@ -/* $Id: UsbMsd.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: UsbMsd.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * UsbMSD - USB Mass Storage Device Emulation. */ @@ -19,7 +19,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_USB_MSD -#include <VBox/pdmusb.h> +#include <VBox/vmm/pdmusb.h> #include <VBox/log.h> #include <VBox/err.h> #include <VBox/scsi.h> @@ -29,7 +29,7 @@ #include <iprt/semaphore.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/Storage/VBoxSCSI.cpp b/src/VBox/Devices/Storage/VBoxSCSI.cpp index d4f542038..b96788779 100644 --- a/src/VBox/Devices/Storage/VBoxSCSI.cpp +++ b/src/VBox/Devices/Storage/VBoxSCSI.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxSCSI.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VBoxSCSI.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * * VBox storage devices: @@ -27,8 +27,8 @@ # error This device has no R0 or GC components #endif -#include <VBox/pdmdev.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pgm.h> #include <iprt/asm.h> #include <iprt/mem.h> #include <iprt/thread.h> diff --git a/src/VBox/Devices/Storage/VBoxSCSI.h b/src/VBox/Devices/Storage/VBoxSCSI.h index 29e54e773..26366d197 100644 --- a/src/VBox/Devices/Storage/VBoxSCSI.h +++ b/src/VBox/Devices/Storage/VBoxSCSI.h @@ -1,4 +1,4 @@ -/* $Id: VBoxSCSI.h 32983 2010-10-07 15:14:54Z vboxsync $ */ +/* $Id: VBoxSCSI.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * * VBox storage devices: @@ -64,7 +64,7 @@ * Header Files * *******************************************************************************/ //#define DEBUG -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> typedef enum VBOXSCSISTATE { diff --git a/src/VBox/Devices/Storage/fdc.c b/src/VBox/Devices/Storage/fdc.c index cabcb718b..972ddaeef 100644 --- a/src/VBox/Devices/Storage/fdc.c +++ b/src/VBox/Devices/Storage/fdc.c @@ -1,4 +1,4 @@ -/* $Id: fdc.c 34294 2010-11-23 16:11:48Z vboxsync $ */ +/* $Id: fdc.c 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox storage devices: Floppy disk controller */ @@ -46,13 +46,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_FDC -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <iprt/assert.h> #include <iprt/string.h> #include <iprt/uuid.h> -#include "Builtins.h" -#include "../vl_vbox.h" +#include "VBoxDD.h" +#include "vl_vbox.h" #define FDC_SAVESTATE_CURRENT 2 /* The new and improved saved state. */ #define FDC_SAVESTATE_OLD 1 /* The original saved state. */ @@ -438,9 +438,9 @@ enum { }; enum { - FD_STATE_MULTI = 0x01, /* multi track flag */ - FD_STATE_FORMAT = 0x02, /* format flag */ - FD_STATE_SEEK = 0x04 /* seek flag */ + FD_STATE_MULTI = 0x01, /* multi track flag */ + FD_STATE_FORMAT = 0x02, /* format flag */ + FD_STATE_SEEK = 0x04 /* seek flag */ }; enum { @@ -2169,7 +2169,7 @@ static DECLCALLBACK(int) fdcLoadExec (PPDMDEVINS pDevIns, } } else /* New state - straightforward. */ - { + { Assert(uVersion == FDC_SAVESTATE_CURRENT); /* Load the FDC I/O registers... */ SSMR3GetU8(pSSMHandle, &s->sra); diff --git a/src/VBox/Devices/USB/DevOHCI.cpp b/src/VBox/Devices/USB/DevOHCI.cpp index e5a560975..e6558c416 100644 --- a/src/VBox/Devices/USB/DevOHCI.cpp +++ b/src/VBox/Devices/USB/DevOHCI.cpp @@ -1,4 +1,4 @@ -/* $Id: DevOHCI.cpp 33813 2010-11-05 19:35:30Z vboxsync $ */ +/* $Id: DevOHCI.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * DevOHCI - Open Host Controller Interface for USB. */ @@ -82,8 +82,8 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV_USB #include <VBox/pci.h> -#include <VBox/pdm.h> -#include <VBox/mm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> @@ -97,7 +97,7 @@ # include <iprt/uuid.h> #endif #include <VBox/vusb.h> -#include "../Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/USB/DrvVUSBRootHub.cpp b/src/VBox/Devices/USB/DrvVUSBRootHub.cpp index 2824deb9a..33472e577 100644 --- a/src/VBox/Devices/USB/DrvVUSBRootHub.cpp +++ b/src/VBox/Devices/USB/DrvVUSBRootHub.cpp @@ -1,4 +1,4 @@ -/* $Id: DrvVUSBRootHub.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: DrvVUSBRootHub.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * Virtual USB - Root Hub Driver. */ @@ -202,8 +202,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_VUSB -#include <VBox/pdm.h> -#include <VBox/vmapi.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/vmapi.h> #include <VBox/err.h> #include <iprt/alloc.h> #include <VBox/log.h> @@ -215,7 +215,7 @@ #include <iprt/asm.h> #include <iprt/uuid.h> #include "VUSBInternal.h" -#include "Builtins.h" +#include "VBoxDD.h" diff --git a/src/VBox/Devices/USB/USBProxyDevice-stub.cpp b/src/VBox/Devices/USB/USBProxyDevice-stub.cpp index b86c147d6..baed9620d 100644 --- a/src/VBox/Devices/USB/USBProxyDevice-stub.cpp +++ b/src/VBox/Devices/USB/USBProxyDevice-stub.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice-stub.cpp 31890 2010-08-24 07:50:47Z vboxsync $ */ +/* $Id: USBProxyDevice-stub.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * USB device proxy - Stub. */ @@ -19,7 +19,7 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include "USBProxyDevice.h" diff --git a/src/VBox/Devices/USB/USBProxyDevice.cpp b/src/VBox/Devices/USB/USBProxyDevice.cpp index c12d8d263..2775e3dbb 100644 --- a/src/VBox/Devices/USB/USBProxyDevice.cpp +++ b/src/VBox/Devices/USB/USBProxyDevice.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice.cpp 33590 2010-10-29 08:55:09Z vboxsync $ */ +/* $Id: USBProxyDevice.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * USBProxy - USB device proxy. */ @@ -22,7 +22,7 @@ #define LOG_GROUP LOG_GROUP_DRV_USBPROXY #include <VBox/usb.h> #include <VBox/usbfilter.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> #include <iprt/alloc.h> #include <iprt/string.h> @@ -30,7 +30,7 @@ #include <iprt/assert.h> #include "USBProxyDevice.h" #include "VUSBInternal.h" -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* diff --git a/src/VBox/Devices/USB/VUSBDevice.cpp b/src/VBox/Devices/USB/VUSBDevice.cpp index ca2498c9f..00f6ce2cb 100644 --- a/src/VBox/Devices/USB/VUSBDevice.cpp +++ b/src/VBox/Devices/USB/VUSBDevice.cpp @@ -1,4 +1,4 @@ -/* $Id: VUSBDevice.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: VUSBDevice.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Virtual USB - Device. */ @@ -20,8 +20,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_VUSB -#include <VBox/pdm.h> -#include <VBox/vmapi.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/vmapi.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/alloc.h> diff --git a/src/VBox/Devices/USB/VUSBInternal.h b/src/VBox/Devices/USB/VUSBInternal.h index 13fe81068..28ad39e12 100644 --- a/src/VBox/Devices/USB/VUSBInternal.h +++ b/src/VBox/Devices/USB/VUSBInternal.h @@ -1,4 +1,4 @@ -/* $Id: VUSBInternal.h 32010 2010-08-26 16:51:26Z vboxsync $ */ +/* $Id: VUSBInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Virtual USB - Internal header. * @@ -26,7 +26,7 @@ #include <VBox/cdefs.h> #include <VBox/types.h> #include <VBox/vusb.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <iprt/assert.h> RT_C_DECLS_BEGIN diff --git a/src/VBox/Devices/USB/VUSBReadAhead.cpp b/src/VBox/Devices/USB/VUSBReadAhead.cpp index 628abe214..70dd00eee 100644 --- a/src/VBox/Devices/USB/VUSBReadAhead.cpp +++ b/src/VBox/Devices/USB/VUSBReadAhead.cpp @@ -1,4 +1,4 @@ -/* $Id: VUSBReadAhead.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: VUSBReadAhead.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Virtual USB - Read-ahead buffering for periodic endpoints. */ @@ -20,8 +20,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_VUSB -#include <VBox/pdm.h> -#include <VBox/vmapi.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/vmapi.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/alloc.h> diff --git a/src/VBox/Devices/USB/VUSBUrb.cpp b/src/VBox/Devices/USB/VUSBUrb.cpp index 8819e5bcb..348689ab8 100644 --- a/src/VBox/Devices/USB/VUSBUrb.cpp +++ b/src/VBox/Devices/USB/VUSBUrb.cpp @@ -1,4 +1,4 @@ -/* $Id: VUSBUrb.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: VUSBUrb.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Virtual USB - URBs. */ @@ -19,8 +19,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_VUSB -#include <VBox/pdm.h> -#include <VBox/vmapi.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/vmapi.h> #include <VBox/err.h> #include <iprt/alloc.h> #include <VBox/log.h> diff --git a/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp b/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp index 9b6e97ca5..1f3f48a21 100644 --- a/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp +++ b/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice-darwin.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: USBProxyDevice-darwin.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * USB device proxy - the Darwin backend. */ @@ -32,7 +32,7 @@ #include <VBox/log.h> #include <VBox/err.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <iprt/assert.h> #include <iprt/critsect.h> diff --git a/src/VBox/Devices/USB/freebsd/USBProxyDevice-freebsd.cpp b/src/VBox/Devices/USB/freebsd/USBProxyDevice-freebsd.cpp index 5618022ee..321176538 100644 --- a/src/VBox/Devices/USB/freebsd/USBProxyDevice-freebsd.cpp +++ b/src/VBox/Devices/USB/freebsd/USBProxyDevice-freebsd.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice-freebsd.cpp 34127 2010-11-16 17:19:29Z vboxsync $ */ +/* $Id: USBProxyDevice-freebsd.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * USB device proxy - the FreeBSD backend. */ @@ -39,7 +39,7 @@ #include <dev/usb/usbdi.h> #include <dev/usb/usb_ioctl.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> #include <VBox/log.h> #include <VBox/vusb.h> diff --git a/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp b/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp index 83947fb00..f20435808 100644 --- a/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp +++ b/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice-linux.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: USBProxyDevice-linux.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * USB device proxy - the Linux backend. */ @@ -70,7 +70,7 @@ #endif #ifndef RDESKTOP -# include <VBox/pdm.h> +# include <VBox/vmm/pdm.h> #else # define RTCRITSECT void * static inline int rtcsNoop() { return VINF_SUCCESS; } diff --git a/src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp b/src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp index 6cbf65e47..0440048f4 100644 --- a/src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp +++ b/src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice-os2.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: USBProxyDevice-os2.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * USB device proxy - the Linux backend. */ @@ -25,7 +25,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DRV_USBPROXY -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp b/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp index d9d4a8203..0c64b109d 100644 --- a/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp +++ b/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice-solaris.cpp 31911 2010-08-24 11:56:45Z vboxsync $ */ +/* $Id: USBProxyDevice-solaris.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * USB device proxy - the Solaris backend. */ @@ -27,7 +27,7 @@ #include <VBox/log.h> #include <VBox/err.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <iprt/string.h> #include <iprt/critsect.h> diff --git a/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp b/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp index 1f568afe5..1bb7e451f 100644 --- a/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp +++ b/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice-vrdp.cpp 31890 2010-08-24 07:50:47Z vboxsync $ */ +/* $Id: USBProxyDevice-vrdp.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * USB device proxy - the VRDP backend, calls the RemoteUSBBackend methods. */ @@ -20,7 +20,7 @@ #include <VBox/log.h> #include <VBox/err.h> #include <VBox/vrdpusb.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <iprt/assert.h> #include <iprt/alloc.h> diff --git a/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp b/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp index ec2e8b05a..b2729fccc 100644 --- a/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp +++ b/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyDevice-win.cpp 32431 2010-09-11 18:02:17Z vboxsync $ */ +/* $Id: USBProxyDevice-win.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * USBPROXY - USB proxy, Win32 backend * @@ -26,7 +26,7 @@ #define LOG_GROUP LOG_GROUP_DRV_USBPROXY #include <windows.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> #include <VBox/usb.h> #include <VBox/log.h> diff --git a/src/VBox/Devices/VMMDev/VMMDev.cpp b/src/VBox/Devices/VMMDev/VMMDev.cpp index 48e3d4b38..35781ea8d 100644 --- a/src/VBox/Devices/VMMDev/VMMDev.cpp +++ b/src/VBox/Devices/VMMDev/VMMDev.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMDev.cpp 34902 2010-12-09 16:16:51Z vboxsync $ */ +/* $Id: VMMDev.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMMDev - Guest <-> VMM/Host communication device. */ @@ -24,15 +24,15 @@ #define LOG_GROUP LOG_GROUP_DEV_VMM #include <VBox/VMMDev.h> -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> #include <VBox/log.h> #include <VBox/param.h> #include <iprt/path.h> #include <iprt/dir.h> #include <iprt/file.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pgm.h> #include <VBox/err.h> -#include <VBox/vm.h> /* for VM_IS_EMT */ +#include <VBox/vmm/vm.h> /* for VM_IS_EMT */ #include <VBox/dbg.h> #include <iprt/asm.h> diff --git a/src/VBox/Devices/VMMDev/VMMDevState.h b/src/VBox/Devices/VMMDev/VMMDevState.h index 268a153be..2dcc3a80e 100644 --- a/src/VBox/Devices/VMMDev/VMMDevState.h +++ b/src/VBox/Devices/VMMDev/VMMDevState.h @@ -1,4 +1,4 @@ -/* $Id: VMMDevState.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMMDevState.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMMDev - Guest <-> VMM/Host communication device, internal header. */ @@ -19,8 +19,8 @@ #define ___VMMDev_VMMDevState_h #include <VBox/VMMDev.h> -#include <VBox/pdmdev.h> -#include <VBox/pdmifs.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pdmifs.h> #define TIMESYNC_BACKDOOR diff --git a/src/VBox/Devices/VirtIO/Virtio.cpp b/src/VBox/Devices/VirtIO/Virtio.cpp index a7495d6f6..ce6dd0cad 100644 --- a/src/VBox/Devices/VirtIO/Virtio.cpp +++ b/src/VBox/Devices/VirtIO/Virtio.cpp @@ -1,4 +1,4 @@ -/* $Id: Virtio.cpp 33325 2010-10-21 20:34:14Z vboxsync $ */ +/* $Id: Virtio.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Virtio - Virtio Common Functions (VRing, VQueue, Virtio PCI) */ @@ -20,7 +20,7 @@ #include <iprt/param.h> #include <iprt/uuid.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include "Virtio.h" #define INSTANCE(pState) pState->szInstance diff --git a/src/VBox/Devices/VBoxDD-dtrace.d b/src/VBox/Devices/build/VBoxDD-dtrace.d index 9ce6fd4c7..90c55221a 100644 --- a/src/VBox/Devices/VBoxDD-dtrace.d +++ b/src/VBox/Devices/build/VBoxDD-dtrace.d @@ -1,4 +1,4 @@ -/* $Id: VBoxDD-dtrace.d 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: VBoxDD-dtrace.d 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBoxDD - Static dtrace probes */ diff --git a/src/VBox/Devices/Builtins.cpp b/src/VBox/Devices/build/VBoxDD.cpp index eb9e6b7c2..7a407496a 100644 --- a/src/VBox/Devices/Builtins.cpp +++ b/src/VBox/Devices/build/VBoxDD.cpp @@ -1,6 +1,6 @@ -/* $Id: Builtins.cpp 34877 2010-12-09 11:18:15Z vboxsync $ */ +/* $Id: VBoxDD.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file - * Built-in drivers & devices (part 1) + * VBoxDD - Built-in drivers & devices (part 1). */ /* @@ -20,7 +20,7 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/version.h> #include <VBox/err.h> #include <VBox/usb.h> @@ -28,7 +28,7 @@ #include <VBox/log.h> #include <iprt/assert.h> -#include "Builtins.h" +#include "VBoxDD.h" /******************************************************************************* @@ -348,3 +348,4 @@ extern "C" DECLEXPORT(int) VBoxUsbRegister(PCPDMUSBREGCB pCallbacks, uint32_t u3 return rc; } + diff --git a/src/VBox/Devices/Builtins.h b/src/VBox/Devices/build/VBoxDD.h index 9d1fec6f7..211c277f6 100644 --- a/src/VBox/Devices/Builtins.h +++ b/src/VBox/Devices/build/VBoxDD.h @@ -1,4 +1,4 @@ -/* $Id: Builtins.h 34876 2010-12-09 11:16:00Z vboxsync $ */ +/* $Id: VBoxDD.h 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * Built-in drivers & devices (part 1) header. */ @@ -15,10 +15,10 @@ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ -#ifndef ___Builtins_h -#define ___Builtins_h +#ifndef ___build_VBoxDD_h +#define ___build_VBoxDD_h -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> RT_C_DECLS_BEGIN diff --git a/src/VBox/Devices/Builtins2.cpp b/src/VBox/Devices/build/VBoxDD2.cpp index a9d17053b..92c1f65f7 100644 --- a/src/VBox/Devices/Builtins2.cpp +++ b/src/VBox/Devices/build/VBoxDD2.cpp @@ -1,6 +1,6 @@ /* $Id $ */ /** @file - * Built-in drivers & devices part 2. + * VBoxDD2 - Built-in drivers & devices part 2. * * These drivers and devices are in separate modules because of LGPL. */ @@ -22,14 +22,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DEV -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/version.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> -#include "Builtins2.h" +#include "VBoxDD2.h" /******************************************************************************* @@ -39,7 +39,9 @@ const void *g_apvVBoxDDDependencies2[] = { (void *)&g_abPcBiosBinary, (void *)&g_abVgaBiosBinary, +#ifdef VBOX_WITH_PXE_ROM (void *)&g_abNetBiosBinary, +#endif }; diff --git a/src/VBox/Devices/Builtins2.h b/src/VBox/Devices/build/VBoxDD2.h index 9461ee32e..58d9150cf 100644 --- a/src/VBox/Devices/Builtins2.h +++ b/src/VBox/Devices/build/VBoxDD2.h @@ -1,4 +1,4 @@ -/* $Id: Builtins2.h 32471 2010-09-14 10:26:07Z vboxsync $ */ +/* $Id: VBoxDD2.h 35400 2011-01-04 11:58:52Z vboxsync $ */ /** @file * Built-in drivers & devices part 2 header. * @@ -17,10 +17,10 @@ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ -#ifndef ___Builtins2_h -#define ___Builtins2_h +#ifndef ___build_VBoxDD2_h +#define ___build_VBoxDD2_h -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> RT_C_DECLS_BEGIN @@ -29,19 +29,19 @@ extern DECLEXPORT(const unsigned char) g_abPcBiosBinary[]; extern DECLEXPORT(const unsigned) g_cbPcBiosBinary; extern DECLEXPORT(const unsigned char) g_abVgaBiosBinary[]; extern DECLEXPORT(const unsigned) g_cbVgaBiosBinary; +# ifdef VBOX_WITH_PXE_ROM extern DECLEXPORT(const unsigned char) g_abNetBiosBinary[]; extern DECLEXPORT(const unsigned) g_cbNetBiosBinary; -extern DECLEXPORT(const unsigned char) g_abVmiBiosBinary[]; -extern DECLEXPORT(const unsigned) g_cbVmiBiosBinary; +# endif #else /* !IN_VBOXDD2 */ extern DECLIMPORT(const unsigned char) g_abPcBiosBinary[]; extern DECLIMPORT(const unsigned) g_cbPcBiosBinary; extern DECLIMPORT(const unsigned char) g_abVgaBiosBinary[]; extern DECLIMPORT(const unsigned) g_cbVgaBiosBinary; +# ifdef VBOX_WITH_PXE_ROM extern DECLIMPORT(const unsigned char) g_abNetBiosBinary[]; extern DECLIMPORT(const unsigned) g_cbNetBiosBinary; -extern DECLIMPORT(const unsigned char) g_abVmiBiosBinary[]; -extern DECLIMPORT(const unsigned) g_cbVmiBiosBinary; +# endif #endif /* !IN_VBOXDD2 */ extern const PDMDEVREG g_DeviceAPIC; extern const PDMDEVREG g_DeviceIOAPIC; @@ -51,3 +51,4 @@ extern const PDMDEVREG g_DeviceLPC; RT_C_DECLS_END #endif + diff --git a/src/VBox/Devices/VBoxDDUDeps.cpp b/src/VBox/Devices/build/VBoxDDUDeps.cpp index 361955538..8372e8973 100644 --- a/src/VBox/Devices/VBoxDDUDeps.cpp +++ b/src/VBox/Devices/build/VBoxDDUDeps.cpp @@ -1,10 +1,10 @@ -/* $Id: VBoxDDUDeps.cpp 33567 2010-10-28 15:37:21Z vboxsync $ */ +/* $Id: VBoxDDUDeps.cpp 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBoxDDU - For dragging in library objects. */ /* - * Copyright (C) 2007 Oracle Corporation + * Copyright (C) 2007-2010 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -48,3 +48,4 @@ PFNRT g_apfnVBoxDDUDeps[] = #endif /* VBOX_WITH_USB */ NULL }; + diff --git a/src/VBox/Devices/vl_vbox.h b/src/VBox/Devices/build/vl_vbox.h index 4429f16af..219954289 100644 --- a/src/VBox/Devices/vl_vbox.h +++ b/src/VBox/Devices/build/vl_vbox.h @@ -1,4 +1,4 @@ -/* $Id: vl_vbox.h 32784 2010-09-28 08:10:47Z vboxsync $ */ +/* $Id: vl_vbox.h 35353 2010-12-27 17:25:52Z vboxsync $ */ /** @file * VBox vl.h Replacement. * @@ -17,8 +17,8 @@ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ -#ifndef __vl_vbox_h__ -#define __vl_vbox_h__ +#ifndef ___build_vl_vbox_h +#define ___build_vl_vbox_h /******************************************************************************* * Header Files * @@ -26,15 +26,15 @@ #include <VBox/cdefs.h> #include <VBox/types.h> #include <VBox/param.h> -#include <VBox/ssm.h> -#include <VBox/tm.h> -#include <VBox/pdm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/pdm.h> #include <VBox/err.h> #include <VBox/pci.h> #include <iprt/string.h> -#include "Builtins.h" +#include "VBoxDD.h" RT_C_DECLS_BEGIN @@ -369,4 +369,4 @@ CPU_CONVERT(le, 64, uint64_t) RT_C_DECLS_END -#endif /* __vl_vbox_h__ */ +#endif diff --git a/src/VBox/Devices/testcase/Makefile.kmk b/src/VBox/Devices/testcase/Makefile.kmk index 4debf8198..9cdef908b 100644 --- a/src/VBox/Devices/testcase/Makefile.kmk +++ b/src/VBox/Devices/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34092 2010-11-16 00:14:37Z vboxsync $ +# $Id: Makefile.kmk 35353 2010-12-27 17:25:52Z vboxsync $ ## @file # Sub-Makefile for the device testcases. # @@ -65,7 +65,7 @@ ifdef VBOX_WITH_RAW_MODE tstDeviceStructSizeRC_DEFS = $(VBOX_DEVICES_TESTS_FEATURES) tstDeviceStructSizeRC_SOURCES = tstDeviceStructSizeRC.cpp tstDeviceStructSizeRC_INCS = \ - $(VBOX_PATH_DEVICES_SRC) \ + $(VBOX_PATH_DEVICES_SRC)/build \ $(VBOX_PATH_DEVICES_SRC)/Bus \ $(VBOX_DEVICES_TEST_OUT_DIR) endif # VBOX_WITH_RAW_MODE @@ -77,7 +77,7 @@ PROGRAMS += tstDeviceStructSize tstDeviceStructSize_TEMPLATE = VBOXR3AUTOTST tstDeviceStructSize_DEFS = $(VBOX_DEVICES_TESTS_FEATURES) tstDeviceStructSize_INCS = \ - $(VBOX_PATH_DEVICES_SRC) \ + $(VBOX_PATH_DEVICES_SRC)/build \ $(VBOX_PATH_DEVICES_SRC)/Bus \ $(VBOX_DEVICES_TEST_OUT_DIR) tstDeviceStructSize_SOURCES = tstDeviceStructSize.cpp diff --git a/src/VBox/Disassembler/DisasmCore.cpp b/src/VBox/Disassembler/DisasmCore.cpp index 038ef9469..869627862 100644 --- a/src/VBox/Disassembler/DisasmCore.cpp +++ b/src/VBox/Disassembler/DisasmCore.cpp @@ -27,7 +27,6 @@ #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <VBox/cpum.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/Disassembler/DisasmReg.cpp b/src/VBox/Disassembler/DisasmReg.cpp index 20e712c5f..41e484d6f 100644 --- a/src/VBox/Disassembler/DisasmReg.cpp +++ b/src/VBox/Disassembler/DisasmReg.cpp @@ -27,9 +27,9 @@ #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <VBox/cpum.h> #include <VBox/err.h> #include <VBox/log.h> +#include <VBox/vmm/cpum.h> #include <iprt/assert.h> #include <iprt/string.h> #include <iprt/stdarg.h> diff --git a/src/VBox/Disassembler/DisasmTestA.asm b/src/VBox/Disassembler/DisasmTestA.asm index a242d8073..20cc30231 100644 --- a/src/VBox/Disassembler/DisasmTestA.asm +++ b/src/VBox/Disassembler/DisasmTestA.asm @@ -1,9 +1,10 @@ +; $Id: DisasmTestA.asm 35346 2010-12-27 16:13:13Z vboxsync $ +;; @file +; VBox disassembler: Assembler test routines ; -; VBox disassembler: -; Assembler test routines ; -; Copyright (C) 2006-2007 Oracle Corporation +; Copyright (C) 2006-2010 Oracle Corporation ; ; This file is part of VirtualBox Open Source Edition (OSE), as ; available from http://www.virtualbox.org. This file is free software; @@ -18,9 +19,9 @@ ;* Header Files * ;******************************************************************************* %include "VBox/nasm.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/vm.mac" %include "VBox/err.mac" -%include "VBox/stam.mac" +%include "VBox/vmm/stam.mac" %include "VBox/x86.mac" BITS 32 diff --git a/src/VBox/Disassembler/testcase/Makefile.kmk b/src/VBox/Disassembler/testcase/Makefile.kmk index f5eaffd27..38ac657f4 100644 --- a/src/VBox/Disassembler/testcase/Makefile.kmk +++ b/src/VBox/Disassembler/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35381 2010-12-30 16:12:47Z vboxsync $ ## @file # Sub-Makefile for the VBox Disassembler. # @@ -76,15 +76,15 @@ VBOX_DISAS_TEST_CLEAN += $(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/,\ $(VBOX_DISAS_TESTS_BIN:.asm=-32.bin)\ $(VBOX_DISAS_TESTS_BIN:.asm=-64.bin)) -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-16.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-16.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-16.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-16.bin,%.asm,$$(notdir $$(@))) | $$(dir $$@) @$(ECHO) "Assembling: $(<F) into $(@F)" $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=16 -o $@ $< -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-32.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-32.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-32.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-32.bin,%.asm,$$(notdir $$(@))) | $$(dir $$@) @$(ECHO) "Assembling: $(<F) into $(@F)" $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=32 -o $@ $< -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-64.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-64.bin,%.asm,$$(notdir $$(@))) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BIN:.asm=-64.bin)): $(PATH_SUB_CURRENT)/$$(patsubst %-64.bin,%.asm,$$(notdir $$(@))) | $$(dir $$@) @$(ECHO) "Assembling: $(<F) into $(@F)" $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=64 -o $@ $< @@ -95,15 +95,15 @@ VBOX_DISAS_TEST_CLEAN += $(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/,\ $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.asm)\ $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.asm)) -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(dir $$@) @$(ECHO) "Generating: $(@F) from $(<F)" $(REDIRECT) -E VBOX_LOG_DEST=nofile -o $@ -- $(INSTARGET_tstDisasm-2) --style=yasm --cpumode=16 $< -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(dir $$@) @$(ECHO) "Generating: $(@F) from $(<F)" $(REDIRECT) -E VBOX_LOG_DEST=nofile -o $@ -- $(INSTARGET_tstDisasm-2) --style=yasm --cpumode=32 $< -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.asm)): $$(subst -disas.asm,.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(dir $$@) @$(ECHO) "Generating: $(@F) from $(<F)" $(REDIRECT) -E VBOX_LOG_DEST=nofile -o $@ -- $(INSTARGET_tstDisasm-2) --style=yasm --cpumode=64 $< @@ -113,15 +113,15 @@ VBOX_DISAS_TEST_CLEAN += $(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/,\ $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.bin)\ $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.bin)) -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-16-disas.bin)): $$(subst .bin,.asm,$$@) | $$(dir $$@) @$(ECHO) "Re-assembling: $(<F) into $(@F)" $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=16 -o $@ $< -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-32-disas.bin)): $$(subst .bin,.asm,$$@) | $$(dir $$@) @$(ECHO) "Re-assembling: $(<F) into $(@F)" $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=32 -o $@ $< -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.bin)): $$(subst .bin,.asm,$$@) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_BUILD:.asm=-64-disas.bin)): $$(subst .bin,.asm,$$@) | $$(dir $$@) @$(ECHO) "Re-assembling: $(<F) into $(@F)" $(TOOL_YASM_AS) -f bin -a x86 --force-strict -DTEST_BITS=64 -o $@ $< @@ -130,7 +130,7 @@ VBOX_DISAS_TESTS += $(foreach test, $(VBOX_DISAS_TESTS_BUILD:.asm=), $(test)-16. $(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/,\ $(VBOX_DISAS_TESTS_BUILD:.asm=-16.tst)\ $(VBOX_DISAS_TESTS_BUILD:.asm=-32.tst)\ -$(VBOX_DISAS_TESTS_BUILD:.asm=-64.tst) ): $$(subst .tst,-disas.bin,$$@) | $$(call DIRDEP,$$(@D)) +$(VBOX_DISAS_TESTS_BUILD:.asm=-64.tst) ): $$(subst .tst,-disas.bin,$$@) | $$(dir $$@) @$(ECHO) "Verifying build: $(<F) and $(@F:.tst=.bin)" @$(RM) -f $@ $(CMP) $(@:.tst=.bin) $< @@ -142,21 +142,21 @@ $(VBOX_DISAS_TESTS_BUILD:.asm=-64.tst) ): $$(subst .tst,-disas.bin,$$@) | $$(cal # Generate the rules for the 'invalid' tests. VBOX_DISAS_TESTS += $(foreach test, $(VBOX_DISAS_TESTS_INVALID:.asm=), $(test)-16.tst $(test)-32.tst $(test)-64.tst) -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-16.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-16.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(dir $$@) @$(ECHO) "TESTING: $(@F) [--undef-op=all]" @$(RM) -f $@ $(REDIRECT) -E VBOX_LOG_DEST=nofile -- $(INSTARGET_tstDisasm-2) --undef-op=all --cpumode=16 $< @$(APPEND) $@ "done" @$(ECHO) " PASSED: $(@F) [--undef-op=all]" -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-32.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-32.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(dir $$@) @$(ECHO) "TESTING: $(@F) [--undef-op=all]" @$(RM) -f $@ $(REDIRECT) -E VBOX_LOG_DEST=nofile -- $(INSTARGET_tstDisasm-2) --undef-op=all --cpumode=32 $< @$(APPEND) $@ "done" @$(ECHO) " PASSED: $(@F) [--undef-op=all]" -$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-64.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(call DIRDEP,$$(@D)) +$(addprefix $(VBOX_DISAS_TEST_OUT_DIR)/, $(VBOX_DISAS_TESTS_INVALID:.asm=-64.tst)): $$(patsubst %.tst,%.bin,$$@) $$(INSTARGET_tstDisasm-2) | $$(dir $$@) @$(ECHO) "TESTING: $(@F) [--undef-op=all]" @$(RM) -f $@ $(REDIRECT) -E VBOX_LOG_DEST=nofile -- $(INSTARGET_tstDisasm-2) --undef-op=all --cpumode=64 $< diff --git a/src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm b/src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm index 7530ef3fe..61662310b 100644 --- a/src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm +++ b/src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm @@ -1,3 +1,24 @@ +; $Id: tstAsmLock-1.asm 60692 2010-04-27 08:22:32Z umoeller $ +;; @file +; Disassembly testcase - Valid fnstsw* instructitons. +; +; This is a build test, that means it will be assembled, disassembled, +; then the disassembly output will be assembled and the new binary will +; compared with the original. +; + +; +; Copyright (C) 2008-2011 Oracle Corporation +; +; This file is part of VirtualBox Open Source Edition (OSE), as +; available from http://www.virtualbox.org. This file is free software; +; you can redistribute it and/or modify it under the terms of the GNU +; General Public License (GPL) as published by the Free Software +; Foundation, in version 2 as it comes in the "COPYING" file of the +; VirtualBox OSE distribution. VirtualBox OSE is distributed in the +; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +; + %include "tstAsm.mac" BITS TEST_BITS diff --git a/src/VBox/Disassembler/testcase/tstAsmMovSeg-1.asm b/src/VBox/Disassembler/testcase/tstAsmMovSeg-1.asm index dc427c63e..5a4888822 100644 --- a/src/VBox/Disassembler/testcase/tstAsmMovSeg-1.asm +++ b/src/VBox/Disassembler/testcase/tstAsmMovSeg-1.asm @@ -1,3 +1,24 @@ +; $Id: tstAsmMovSeg-1.asm 35474 2011-01-11 09:08:30Z vboxsync $ +;; @file +; Disassembly testcase - Valid mov from/to segment instructions. +; +; This is a build test, that means it will be assembled, disassembled, +; then the disassembly output will be assembled and the new binary will +; compared with the original. +; + +; +; Copyright (C) 2008-2011 Oracle Corporation +; +; This file is part of VirtualBox Open Source Edition (OSE), as +; available from http://www.virtualbox.org. This file is free software; +; you can redistribute it and/or modify it under the terms of the GNU +; General Public License (GPL) as published by the Free Software +; Foundation, in version 2 as it comes in the "COPYING" file of the +; VirtualBox OSE distribution. VirtualBox OSE is distributed in the +; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +; + BITS TEST_BITS mov fs, eax diff --git a/src/VBox/Disassembler/testcase/tstAsmMovzx-1.asm b/src/VBox/Disassembler/testcase/tstAsmMovzx-1.asm index e114950eb..0cb415658 100644 --- a/src/VBox/Disassembler/testcase/tstAsmMovzx-1.asm +++ b/src/VBox/Disassembler/testcase/tstAsmMovzx-1.asm @@ -1,3 +1,24 @@ +; $Id: tstAsmMovzx-1.asm 35474 2011-01-11 09:08:30Z vboxsync $ +;; @file +; Disassembly testcase - Valid movzx sequences and related instructions. +; +; This is a build test, that means it will be assembled, disassembled, +; then the disassembly output will be assembled and the new binary will +; compared with the original. +; + +; +; Copyright (C) 2008-2011 Oracle Corporation +; +; This file is part of VirtualBox Open Source Edition (OSE), as +; available from http://www.virtualbox.org. This file is free software; +; you can redistribute it and/or modify it under the terms of the GNU +; General Public License (GPL) as published by the Free Software +; Foundation, in version 2 as it comes in the "COPYING" file of the +; VirtualBox OSE distribution. VirtualBox OSE is distributed in the +; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +; + BITS TEST_BITS movzx ax, al diff --git a/src/VBox/Disassembler/testcase/tstAsmPop-1.asm b/src/VBox/Disassembler/testcase/tstAsmPop-1.asm index 9e8cb458d..f1af94b92 100644 --- a/src/VBox/Disassembler/testcase/tstAsmPop-1.asm +++ b/src/VBox/Disassembler/testcase/tstAsmPop-1.asm @@ -1,3 +1,24 @@ +; $Id: tstAsmPop-1.asm 35474 2011-01-11 09:08:30Z vboxsync $ +;; @file +; Disassembly testcase - Valid pop sequences and related instructions. +; +; This is a build test, that means it will be assembled, disassembled, +; then the disassembly output will be assembled and the new binary will +; compared with the original. +; + +; +; Copyright (C) 2008-2011 Oracle Corporation +; +; This file is part of VirtualBox Open Source Edition (OSE), as +; available from http://www.virtualbox.org. This file is free software; +; you can redistribute it and/or modify it under the terms of the GNU +; General Public License (GPL) as published by the Free Software +; Foundation, in version 2 as it comes in the "COPYING" file of the +; VirtualBox OSE distribution. VirtualBox OSE is distributed in the +; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +; + BITS TEST_BITS %if TEST_BITS != 64 pop bp diff --git a/src/VBox/Disassembler/testcase/tstAsmPush-1.asm b/src/VBox/Disassembler/testcase/tstAsmPush-1.asm index dd51dc4b5..dd32571f8 100644 --- a/src/VBox/Disassembler/testcase/tstAsmPush-1.asm +++ b/src/VBox/Disassembler/testcase/tstAsmPush-1.asm @@ -1,3 +1,24 @@ +; $Id: tstAsmPush-1.asm 35474 2011-01-11 09:08:30Z vboxsync $ +;; @file +; Disassembly testcase - Valid push sequences and related instructions. +; +; This is a build test, that means it will be assembled, disassembled, +; then the disassembly output will be assembled and the new binary will +; compared with the original. +; + +; +; Copyright (C) 2008-2011 Oracle Corporation +; +; This file is part of VirtualBox Open Source Edition (OSE), as +; available from http://www.virtualbox.org. This file is free software; +; you can redistribute it and/or modify it under the terms of the GNU +; General Public License (GPL) as published by the Free Software +; Foundation, in version 2 as it comes in the "COPYING" file of the +; VirtualBox OSE distribution. VirtualBox OSE is distributed in the +; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +; + BITS TEST_BITS %if TEST_BITS != 64 push bp diff --git a/src/VBox/Disassembler/testcase/tstAsmSignExtend-1.asm b/src/VBox/Disassembler/testcase/tstAsmSignExtend-1.asm index f9044cdcf..e8717e085 100644 --- a/src/VBox/Disassembler/testcase/tstAsmSignExtend-1.asm +++ b/src/VBox/Disassembler/testcase/tstAsmSignExtend-1.asm @@ -1,3 +1,24 @@ +; $Id: tstAsmSignExtend-1.asm 35474 2011-01-11 09:08:30Z vboxsync $ +;; @file +; Disassembly testcase - Valid sign extension instructions. +; +; This is a build test, that means it will be assembled, disassembled, +; then the disassembly output will be assembled and the new binary will +; compared with the original. +; + +; +; Copyright (C) 2008-2011 Oracle Corporation +; +; This file is part of VirtualBox Open Source Edition (OSE), as +; available from http://www.virtualbox.org. This file is free software; +; you can redistribute it and/or modify it under the terms of the GNU +; General Public License (GPL) as published by the Free Software +; Foundation, in version 2 as it comes in the "COPYING" file of the +; VirtualBox OSE distribution. VirtualBox OSE is distributed in the +; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +; + %include "tstAsm.mac" BITS TEST_BITS diff --git a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-tables.h b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-tables.h index b740c31cc..cd144230e 100644 --- a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-tables.h +++ b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-tables.h @@ -1,4 +1,4 @@ -/* $Id: keyboard-tables.h 33656 2010-11-01 14:18:11Z vboxsync $ */ +/* $Id: keyboard-tables.h 35479 2011-01-11 11:37:08Z vboxsync $ */ /** @file * VBox/Frontends/Common - X11 keyboard driver translation tables. */ @@ -76,7 +76,7 @@ static const unsigned nonchar_key_scan[256] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* FF00 */ /* special keys */ 0x0E, 0x0F, 0x00, /*?*/ 0, 0x00, 0x1C, 0x00, 0x00, /* FF08 */ - 0x00, 0x00, 0x00, 0x45, 0x46, 0x00, 0x00, 0x00, /* FF10 */ + 0x00, 0x00, 0x00, 0x145, 0x46, 0x00, 0x00, 0x00, /* FF10 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, /* FF18 */ /* Sun Menu, additional Japanese keys */ #ifdef sun @@ -106,7 +106,7 @@ static const unsigned nonchar_key_scan[256] = 0x00, 0x00, 0x13B, 0x146, 0x00, 0x00, 0x00, 0x00, /* FF68 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* FF70 */ /* keypad keys */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x138, 0x145, /* FF78 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x138, 0x45, /* FF78 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* FF80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11C, 0x00, 0x00, /* FF88 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x4B, 0x48, /* FF90 */ diff --git a/src/VBox/Frontends/Common/VBoxKeyboard/xkbtoscan.h b/src/VBox/Frontends/Common/VBoxKeyboard/xkbtoscan.h index 816a4db2f..168de2f30 100644 --- a/src/VBox/Frontends/Common/VBoxKeyboard/xkbtoscan.h +++ b/src/VBox/Frontends/Common/VBoxKeyboard/xkbtoscan.h @@ -1,4 +1,4 @@ -/* $Id: xkbtoscan.h 33653 2010-11-01 14:05:21Z vboxsync $ */ +/* $Id: xkbtoscan.h 35478 2011-01-11 11:36:23Z vboxsync $ */ /** @file * VBox/Frontends/Common - X11 keyboard driver translation tables (XT scan * code mappings for XKB key names). @@ -37,6 +37,9 @@ enum { XKB_NAME_SIZE = 4 }; /** * This table contains a list of mappings of XKB key names to XT scan codes. + * We only use XKB to look up layout-dependent keys (mainly the alpha-numeric + * ones), so that user re-mappings will work at least for the remaining keys. + * This is the reason for the commented out entries in the table. */ struct { @@ -44,7 +47,7 @@ struct unsigned uScan; } xkbMap[] = { - { "ESC", 0x1 }, +/* { "ESC", 0x1 }, */ { "AE01", 0x2 }, { "AE02", 0x3 }, { "AE03", 0x4 }, @@ -57,8 +60,8 @@ struct { "AE10", 0xb }, { "AE11", 0xc }, { "AE12", 0xd }, - { "BKSP", 0xe }, - { "TAB", 0xf }, +/* { "BKSP", 0xe }, + { "TAB", 0xf }, */ { "AD01", 0x10 }, { "AD02", 0x11 }, { "AD03", 0x12 }, @@ -71,8 +74,8 @@ struct { "AD10", 0x19 }, { "AD11", 0x1a }, { "AD12", 0x1b }, - { "RTRN", 0x1c }, - { "LCTL", 0x1d }, +/* { "RTRN", 0x1c }, + { "LCTL", 0x1d }, */ { "AC01", 0x1e }, { "AC02", 0x1f }, { "AC03", 0x20 }, @@ -85,7 +88,7 @@ struct { "AC10", 0x27 }, { "AC11", 0x28 }, { "TLDE", 0x29 }, - { "LFSH", 0x2a }, +/* { "LFSH", 0x2a }, */ { "BKSL", 0x2b }, { "AB01", 0x2c }, { "AB02", 0x2d }, @@ -97,7 +100,7 @@ struct { "AB08", 0x33 }, { "AB09", 0x34 }, { "AB10", 0x35 }, - { "RTSH", 0x36 }, +/* { "RTSH", 0x36 }, { "KPMU", 0x37 }, { "LALT", 0x38 }, { "SPCE", 0x39 }, @@ -127,12 +130,12 @@ struct { "KP3", 0x51 }, { "KP0", 0x52 }, { "KPDL", 0x53 }, - { "LVL3", 0x138 }, + { "LVL3", 0x138 }, */ { "LSGT", 0x56 }, - { "FK11", 0x57 }, - { "FK12", 0x58 }, +/* { "FK11", 0x57 }, + { "FK12", 0x58 }, */ { "AB11", 0x73 }, - { "KATA", 0x0 }, +/* { "KATA", 0x0 }, { "HIRA", 0x0 }, { "HENK", 0x79 }, { "HKTG", 0x70 }, @@ -287,5 +290,5 @@ struct { "I250", 0x0 }, { "I251", 0x0 }, { "I252", 0x0 }, - { "I253", 0x0 } + { "I253", 0x0 } */ }; diff --git a/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp b/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp index e7c488656..36af79c23 100644 --- a/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp +++ b/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: DisplayImpl.cpp 34754 2010-12-06 14:40:03Z vboxsync $ */ +/* $Id: DisplayImpl.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox frontends: Basic Frontend (BFE): * Implementation of Display class @@ -28,9 +28,9 @@ #include <iprt/mem.h> #include <iprt/semaphore.h> #include <iprt/thread.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/VMMDev.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/err.h> #include <iprt/assert.h> #include <VBox/log.h> diff --git a/src/VBox/Frontends/VBoxBFE/DisplayImpl.h b/src/VBox/Frontends/VBoxBFE/DisplayImpl.h index 981af287f..9b329f200 100644 --- a/src/VBox/Frontends/VBoxBFE/DisplayImpl.h +++ b/src/VBox/Frontends/VBoxBFE/DisplayImpl.h @@ -1,4 +1,4 @@ -/* $Id: DisplayImpl.h 34754 2010-12-06 14:40:03Z vboxsync $ */ +/* $Id: DisplayImpl.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox frontends: Basic Frontend (BFE): * Declaration of Display class @@ -20,7 +20,7 @@ #define ____H_DISPLAYIMPL #include <iprt/semaphore.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include "Framebuffer.h" struct VBVACMDHDR; diff --git a/src/VBox/Frontends/VBoxBFE/HGCM.h b/src/VBox/Frontends/VBoxBFE/HGCM.h index 98ceeb93e..b52d906b1 100644 --- a/src/VBox/Frontends/VBoxBFE/HGCM.h +++ b/src/VBox/Frontends/VBoxBFE/HGCM.h @@ -20,7 +20,7 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/hgcmsvc.h> /* HGCM saved state version */ diff --git a/src/VBox/Frontends/VBoxBFE/HostUSBImpl.cpp b/src/VBox/Frontends/VBoxBFE/HostUSBImpl.cpp index f7520cc5b..db2c2ba26 100644 --- a/src/VBox/Frontends/VBoxBFE/HostUSBImpl.cpp +++ b/src/VBox/Frontends/VBoxBFE/HostUSBImpl.cpp @@ -42,7 +42,7 @@ #include "USBProxyService.h" #include "Logging.h" -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/vusb.h> #include <VBox/usb.h> #include <VBox/err.h> diff --git a/src/VBox/Frontends/VBoxBFE/KeyboardImpl.cpp b/src/VBox/Frontends/VBoxBFE/KeyboardImpl.cpp index d2bc458af..42195032e 100644 --- a/src/VBox/Frontends/VBoxBFE/KeyboardImpl.cpp +++ b/src/VBox/Frontends/VBoxBFE/KeyboardImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: KeyboardImpl.cpp 30594 2010-07-04 12:53:21Z vboxsync $ */ +/* $Id: KeyboardImpl.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox frontends: Basic Frontend (BFE): * Implementation of Keyboard class and related things @@ -22,8 +22,8 @@ # include <VBox/com/defs.h> # include <VBox/com/array.h> #endif -#include <VBox/pdm.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/err.h> #include <iprt/assert.h> #include <VBox/log.h> diff --git a/src/VBox/Frontends/VBoxBFE/KeyboardImpl.h b/src/VBox/Frontends/VBoxBFE/KeyboardImpl.h index 3869306b6..0e6c3aff3 100644 --- a/src/VBox/Frontends/VBoxBFE/KeyboardImpl.h +++ b/src/VBox/Frontends/VBoxBFE/KeyboardImpl.h @@ -1,4 +1,4 @@ -/* $Id: KeyboardImpl.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: KeyboardImpl.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox frontends: Basic Frontend (BFE): * Declaration of Keyboard class and related things @@ -19,7 +19,7 @@ #ifndef ____H_KEYBOARDIMPL #define ____H_KEYBOARDIMPL -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> /** Simple keyboard event class. */ class KeyboardEvent diff --git a/src/VBox/Frontends/VBoxBFE/MachineDebuggerImpl.cpp b/src/VBox/Frontends/VBoxBFE/MachineDebuggerImpl.cpp index 0bb92d821..9ece87468 100644 --- a/src/VBox/Frontends/VBoxBFE/MachineDebuggerImpl.cpp +++ b/src/VBox/Frontends/VBoxBFE/MachineDebuggerImpl.cpp @@ -21,10 +21,10 @@ #else # include <VBox/com/defs.h> #endif -#include <VBox/em.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/vm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/semaphore.h> diff --git a/src/VBox/Frontends/VBoxBFE/Makefile.kmk b/src/VBox/Frontends/VBoxBFE/Makefile.kmk index e23f41806..ebc709175 100644 --- a/src/VBox/Frontends/VBoxBFE/Makefile.kmk +++ b/src/VBox/Frontends/VBoxBFE/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33590 2010-10-29 08:55:09Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for VBoxBFE (a basic frontend which doesn't make use of Main). # @@ -22,8 +22,8 @@ if !defined(VBOX_WITH_HARDENING) || "$(KBUILD_TARGET)" != "darwin" # No hardene # # Files from Main needed for building VBoxBFE # -VBOXBFE_MAIN_CPP = MouseImpl.cpp -VBOXBFE_MAIN_H = MouseImpl.h ConsoleEvents.h +VBOXBFE_MAIN_SRCS = src-client/MouseImpl.cpp +VBOXBFE_MAIN_HDRS = MouseImpl.h ConsoleEvents.h # # Targets. @@ -68,11 +68,11 @@ VBoxBFE_SOURCES = \ VBoxBFE.cpp \ VMMDevInterface.cpp \ DisplayImpl.cpp \ - $(PATH_VBoxBFE)/MouseImpl.cpp \ KeyboardImpl.cpp \ StatusImpl.cpp \ MachineDebuggerImpl.cpp \ - VMControl.cpp + VMControl.cpp \ + $(addprefix $(VBoxBFE_0_OUTDIR)/,$(notdir $(VBOXBFE_MAIN_SRCS))) ifdef VBOX_WITH_HGCM VBoxBFE_DEFS += VBOX_WITH_HGCM @@ -114,7 +114,7 @@ VBoxBFE_SOURCES.linux += \ endif VBoxBFE_INCS = \ - $(PATH_VBoxBFE) \ + $(VBoxBFE_0_OUTDIR) \ $(VBOX_PATH_SDK)/include \ $(PATH_ROOT)/src/VBox/Frontends/VBoxBFE ifneq ($(filter-out win os2 l4 darwin,$(KBUILD_TARGET)),) # X11 @@ -157,30 +157,26 @@ VBoxBFE_DEFS.linux = \ VBoxBFE_CXXFLAGS.linux = \ -fno-rtti -fno-exceptions -fshort-wchar -pthread -VBoxBFE_CLEAN = $(PATH_VBoxBFE)/Ico64x01.h -VBoxBFE_SDLConsole.cpp_DEPS = $(PATH_VBoxBFE)/Ico64x01.h +VBoxBFE_CLEAN = $(VBoxBFE_0_OUTDIR)/Ico64x01.h +VBoxBFE_SDLConsole.cpp_DEPS = $(VBoxBFE_0_OUTDIR)/Ico64x01.h # Convert the pnm-file to a byte array. -$$(PATH_VBoxBFE)/Ico64x01.h: $(PATH_ROOT)/src/VBox/Frontends/VBoxBFE/ico64x01.pnm $(VBOX_BIN2C) | $$(dir $$@) +$$(VBoxBFE_0_OUTDIR)/Ico64x01.h: $(PATH_ROOT)/src/VBox/Frontends/VBoxBFE/ico64x01.pnm $(VBOX_BIN2C) | $$(dir $$@) $(call MSG_TOOL,bin2c,VBoxBFE,$<,$@) $(QUIET)$(VBOX_BIN2C) Ico64x01 $< $@ -VBoxBFE_DEPS += $(addprefix $(PATH_VBoxBFE)/,$(VBOXBFE_MAIN_CPP) $(VBOXBFE_MAIN_H)) +# Files we share with Main needs to be copied into the output dir. +VBoxBFE_INTERMEDIATES += $(addprefix $(VBoxBFE_0_OUTDIR)/,$(VBOXBFE_MAIN_HDRS)) +VBoxBFE_CLEAN += $(addprefix $(VBoxBFE_0_OUTDIR)/, $(VBOXBFE_MAIN_HDRS) $(VBOXBFE_MAIN_SRCS)) -# Pattern rules for copying needed files from Main -$(addprefix $$(PATH_VBoxBFE)/,$(VBOXBFE_MAIN_CPP)): \ - $$(PATH_VBoxBFE)/% : $(PATH_ROOT)/src/VBox/Main/% | $$(dir $$@) +define def_copy_main_file +$$(VBoxBFE_0_OUTDIR)/$(notdir $(file)): $(PATH_ROOT)/src/VBox/Main/$(file) | $$(dir $$@) $(call MSG_INST_FILE,$<,$@) - $(QUIET)$(CP_EXT) $< $@ + $(QUIET)$(CP_EXT) -f $< $@ +endef +$(foreach file,$(addprefix include/,$(VBOXBFE_MAIN_HDRS)), $(evalval def_copy_main_file)) +$(foreach file,$(VBOXBFE_MAIN_SRCS), $(evalval def_copy_main_file)) -$(addprefix $$(PATH_VBoxBFE)/,$(VBOXBFE_MAIN_H)): \ - $$(PATH_VBoxBFE)/% : $(PATH_ROOT)/src/VBox/Main/include/% | $$(dir $$@) - $(call MSG_INST_FILE,$<,$@) - $(QUIET)$(CP_EXT) $< $@ - -OTHER_CLEAN += \ - $(addprefix $(PATH_VBoxBFE)/,$(VBOXBFE_MAIN_CPP)) \ - $(addprefix $(PATH_VBoxBFE)/,$(VBOXBFE_MAIN_H)) endif # !VBOX_WITH_HARDENING || !darwin diff --git a/src/VBox/Frontends/VBoxBFE/SDLConsole.cpp b/src/VBox/Frontends/VBoxBFE/SDLConsole.cpp index af86a3939..2c650ba54 100644 --- a/src/VBox/Frontends/VBoxBFE/SDLConsole.cpp +++ b/src/VBox/Frontends/VBoxBFE/SDLConsole.cpp @@ -37,7 +37,7 @@ #include <VBox/types.h> #include <VBox/err.h> #include <VBox/param.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/log.h> #include <VBox/version.h> #include <iprt/path.h> diff --git a/src/VBox/Frontends/VBoxBFE/StatusImpl.cpp b/src/VBox/Frontends/VBoxBFE/StatusImpl.cpp index 82725c038..181f9f846 100644 --- a/src/VBox/Frontends/VBoxBFE/StatusImpl.cpp +++ b/src/VBox/Frontends/VBoxBFE/StatusImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: StatusImpl.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: StatusImpl.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox frontends: Basic Frontend (BFE): * Implementation of VMStatus class @@ -21,8 +21,8 @@ #else # include <VBox/com/defs.h> #endif -#include <VBox/pdm.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/err.h> #include <iprt/assert.h> #include <VBox/log.h> diff --git a/src/VBox/Frontends/VBoxBFE/StatusImpl.h b/src/VBox/Frontends/VBoxBFE/StatusImpl.h index 250677fab..c66cb1c5f 100644 --- a/src/VBox/Frontends/VBoxBFE/StatusImpl.h +++ b/src/VBox/Frontends/VBoxBFE/StatusImpl.h @@ -1,4 +1,4 @@ -/* $Id: StatusImpl.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: StatusImpl.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox frontends: Basic Frontend (BFE): * Declaration of VMStatus class @@ -19,7 +19,7 @@ #ifndef ____H_STATUSIMPL #define ____H_STATUSIMPL -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> class VMStatus { diff --git a/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp b/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp index fb077e201..8e01a80e6 100644 --- a/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp +++ b/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxBFE.cpp 33590 2010-10-29 08:55:09Z vboxsync $ */ +/* $Id: VBoxBFE.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Basic Frontend (BFE): VBoxBFE main routines. * @@ -36,7 +36,7 @@ using namespace com; #include <VBox/err.h> #include <VBox/log.h> #include <VBox/param.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/version.h> #ifdef VBOXBFE_WITH_USB # include <VBox/vusb.h> diff --git a/src/VBox/Frontends/VBoxBFE/VMMDev.h b/src/VBox/Frontends/VBoxBFE/VMMDev.h index 9bf1ea7e9..4f705d809 100644 --- a/src/VBox/Frontends/VBoxBFE/VMMDev.h +++ b/src/VBox/Frontends/VBoxBFE/VMMDev.h @@ -1,4 +1,4 @@ -/* $Id: VMMDev.h 30776 2010-07-12 08:05:23Z vboxsync $ */ +/* $Id: VMMDev.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox frontends: Basic Frontend (BFE): * Declaration of VMMDev: driver interface to VMM device @@ -19,7 +19,7 @@ #ifndef ____H_VMMDEV #define ____H_VMMDEV -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> class VMMDev { diff --git a/src/VBox/Frontends/VBoxBFE/VMMDevInterface.cpp b/src/VBox/Frontends/VBoxBFE/VMMDevInterface.cpp index c33bdbd32..9155f11e2 100644 --- a/src/VBox/Frontends/VBoxBFE/VMMDevInterface.cpp +++ b/src/VBox/Frontends/VBoxBFE/VMMDevInterface.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMDevInterface.cpp 33758 2010-11-04 10:30:19Z vboxsync $ */ +/* $Id: VMMDevInterface.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox frontends: Basic Frontend (BFE): * Implementation of VMMDev: driver interface to VMM device @@ -23,9 +23,9 @@ #else # include <VBox/com/defs.h> #endif -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/VMMDev.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/err.h> #include <iprt/assert.h> #include <VBox/log.h> diff --git a/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp b/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp index e8e17de92..ffdb00584 100644 --- a/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp +++ b/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp @@ -1,10 +1,10 @@ -/* $Id: VBoxHeadless.cpp 35287 2010-12-22 08:37:34Z vboxsync $ */ +/* $Id: VBoxHeadless.cpp 35446 2011-01-10 11:08:29Z vboxsync $ */ /** @file * VBoxHeadless - The VirtualBox Headless frontend for running VMs on servers. */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -101,7 +101,7 @@ public: { } - STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent * aEvent) + STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent) { switch (aType) { @@ -147,7 +147,7 @@ public: { } - STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent * aEvent) + STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent) { switch (aType) { @@ -254,7 +254,7 @@ public: { } - STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent * aEvent) + STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent) { switch (aType) { @@ -1001,7 +1001,7 @@ extern "C" DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) ComPtr<IEventSource> pES; CHECK_ERROR(pVirtualBoxClient, COMGETTER(EventSource)(pES.asOutParam())); vboxClientListener = new VirtualBoxClientEventListenerImpl(); - com::SafeArray <VBoxEventType_T> eventTypes; + com::SafeArray<VBoxEventType_T> eventTypes; eventTypes.push_back(VBoxEventType_OnVBoxSVCAvailabilityChanged); CHECK_ERROR(pES, RegisterListener(vboxClientListener, ComSafeArrayAsInParam(eventTypes), true)); } @@ -1011,7 +1011,7 @@ extern "C" DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) ComPtr<IEventSource> es; CHECK_ERROR(console, COMGETTER(EventSource)(es.asOutParam())); consoleListener = new ConsoleEventListenerImpl(); - com::SafeArray <VBoxEventType_T> eventTypes; + com::SafeArray<VBoxEventType_T> eventTypes; eventTypes.push_back(VBoxEventType_OnMouseCapabilityChanged); eventTypes.push_back(VBoxEventType_OnStateChanged); eventTypes.push_back(VBoxEventType_OnVRDEServerInfoChanged); @@ -1166,7 +1166,7 @@ extern "C" DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) ComPtr<IEventSource> es; CHECK_ERROR(virtualBox, COMGETTER(EventSource)(es.asOutParam())); vboxListener = new VirtualBoxEventListenerImpl(); - com::SafeArray <VBoxEventType_T> eventTypes; + com::SafeArray<VBoxEventType_T> eventTypes; eventTypes.push_back(VBoxEventType_OnGuestPropertyChanged); CHECK_ERROR(es, RegisterListener(vboxListener, ComSafeArrayAsInParam(eventTypes), true)); } @@ -1258,7 +1258,7 @@ extern "C" DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) } /* VirtualBoxClient callback unregistration. */ - if (consoleListener) + if (vboxClientListener) { ComPtr<IEventSource> pES; CHECK_ERROR(pVirtualBoxClient, COMGETTER(EventSource)(pES.asOutParam())); diff --git a/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp b/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp index 0ad381cdb..4ac87a5b6 100644 --- a/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp +++ b/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp @@ -136,10 +136,7 @@ int main (int argc, char **argv) CHECK_ERROR_BREAK (progress, COMGETTER(ResultCode) (&resultCode)); if (FAILED (resultCode)) { - ComPtr<IVirtualBoxErrorInfo> errorInfo; - CHECK_ERROR_BREAK(progress, - COMGETTER(ErrorInfo) (errorInfo.asOutParam())); - ErrorInfo info(errorInfo, COM_IIDOF(IVirtualBoxErrorInfo)); + ProgressErrorInfo info(progress); com::GluePrintErrorInfo(info); } else @@ -172,10 +169,7 @@ int main (int argc, char **argv) CHECK_ERROR_BREAK (progress, COMGETTER(ResultCode) (&resultCode)); if (FAILED (resultCode)) { - ComPtr<IVirtualBoxErrorInfo> errorInfo; - CHECK_ERROR_BREAK(progress, - COMGETTER(ErrorInfo) (errorInfo.asOutParam())); - ErrorInfo info(errorInfo, COM_IIDOF(IVirtualBoxErrorInfo)); + ProgressErrorInfo info(progress); com::GluePrintErrorInfo(info); } else diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp index 075ec5f1f..1d8dd9fdb 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxManageDebugVM.cpp 35242 2010-12-20 13:33:23Z vboxsync $ */ +/* $Id: VBoxManageDebugVM.cpp 35550 2011-01-13 18:08:54Z vboxsync $ */ /** @file * VBoxManage - Implementation of the debugvm command. */ @@ -43,6 +43,99 @@ /** + * Handles the getregisters sub-command. + * + * @returns Suitable exit code. + * @param pArgs The handler arguments. + * @param pDebugger Pointer to the debugger interface. + */ +static RTEXITCODE handleDebugVM_GetRegisters(HandlerArg *pArgs, IMachineDebugger *pDebugger) +{ + /* + * We take a list of register names (case insensitive). If 'all' is + * encountered we'll dump all registers. + */ + ULONG idCpu = 0; + unsigned cRegisters = 0; + + RTGETOPTSTATE GetState; + RTGETOPTUNION ValueUnion; + static const RTGETOPTDEF s_aOptions[] = + { + { "--cpu", 'c', RTGETOPT_REQ_UINT32 }, + }; + int rc = RTGetOptInit(&GetState, pArgs->argc, pArgs->argv, s_aOptions, RT_ELEMENTS(s_aOptions), 2, RTGETOPTINIT_FLAGS_OPTS_FIRST); + AssertRCReturn(rc, RTEXITCODE_FAILURE); + + while ((rc = RTGetOpt(&GetState, &ValueUnion)) != 0) + { + switch (rc) + { + case 'c': + idCpu = ValueUnion.u32; + break; + + case VINF_GETOPT_NOT_OPTION: + if (!RTStrICmp(ValueUnion.psz, "all")) + { + com::SafeArray<BSTR> aBstrNames; + com::SafeArray<BSTR> aBstrValues; + CHECK_ERROR2_RET(pDebugger, GetRegisters(idCpu, ComSafeArrayAsOutParam(aBstrNames), ComSafeArrayAsOutParam(aBstrValues)), + RTEXITCODE_FAILURE); + Assert(aBstrNames.size() == aBstrValues.size()); + + size_t cchMaxName = 8; + for (size_t i = 0; i < aBstrNames.size(); i++) + { + size_t cchName = RTUtf16Len(aBstrNames[i]); + if (cchName > cchMaxName) + cchMaxName = cchName; + } + + for (size_t i = 0; i < aBstrNames.size(); i++) + RTPrintf("%-*ls = %ls\n", cchMaxName, aBstrNames[i], aBstrValues[i]); + } + else + { + com::Bstr bstrName = ValueUnion.psz; + com::Bstr bstrValue; + CHECK_ERROR2_RET(pDebugger, GetRegister(idCpu, bstrName.raw(), bstrValue.asOutParam()), RTEXITCODE_FAILURE); + RTPrintf("%s = %ls\n", ValueUnion.psz, bstrValue.raw()); + } + cRegisters++; + break; + + default: + return errorGetOpt(USAGE_DEBUGVM, rc, &ValueUnion); + } + } + + if (!cRegisters) + return errorSyntax(USAGE_DEBUGVM, "The getregisters sub-command takes at least one register name"); + return RTEXITCODE_SUCCESS; +} + +/** + * Handles the info sub-command. + * + * @returns Suitable exit code. + * @param a The handler arguments. + * @param pDebugger Pointer to the debugger interface. + */ +static RTEXITCODE handleDebugVM_Info(HandlerArg *a, IMachineDebugger *pDebugger) +{ + if (a->argc < 3 || a->argc > 4) + return errorSyntax(USAGE_DEBUGVM, "The inject sub-command takes at one or two arguments"); + + com::Bstr bstrName(a->argv[2]); + com::Bstr bstrArgs(a->argv[3]); + com::Bstr bstrInfo; + CHECK_ERROR2_RET(pDebugger, Info(bstrName.raw(), bstrArgs.raw(), bstrInfo.asOutParam()), RTEXITCODE_FAILURE); + RTPrintf("%ls", bstrInfo.raw()); + return RTEXITCODE_SUCCESS; +} + +/** * Handles the inject sub-command. * * @returns Suitable exit code. @@ -119,6 +212,125 @@ static RTEXITCODE handleDebugVM_DumpVMCore(HandlerArg *pArgs, IMachineDebugger * } /** + * Handles the os sub-command. + * + * @returns Suitable exit code. + * @param a The handler arguments. + * @param pDebugger Pointer to the debugger interface. + */ +static RTEXITCODE handleDebugVM_OSDetect(HandlerArg *a, IMachineDebugger *pDebugger) +{ + if (a->argc != 2) + return errorSyntax(USAGE_DEBUGVM, "The osdetect sub-command does not take any arguments"); + + com::Bstr bstrName; + CHECK_ERROR2_RET(pDebugger, DetectOS(bstrName.asOutParam()), RTEXITCODE_FAILURE); + RTPrintf("Detected: %ls\n", bstrName.raw()); + return RTEXITCODE_SUCCESS; +} + +/** + * Handles the os sub-command. + * + * @returns Suitable exit code. + * @param a The handler arguments. + * @param pDebugger Pointer to the debugger interface. + */ +static RTEXITCODE handleDebugVM_OSInfo(HandlerArg *a, IMachineDebugger *pDebugger) +{ + if (a->argc != 2) + return errorSyntax(USAGE_DEBUGVM, "The osinfo sub-command does not take any arguments"); + + com::Bstr bstrName; + CHECK_ERROR2_RET(pDebugger, COMGETTER(OSName)(bstrName.asOutParam()), RTEXITCODE_FAILURE); + com::Bstr bstrVersion; + CHECK_ERROR2_RET(pDebugger, COMGETTER(OSVersion)(bstrVersion.asOutParam()), RTEXITCODE_FAILURE); + RTPrintf("Name: %ls\n", bstrName.raw()); + RTPrintf("Version: %ls\n", bstrVersion.raw()); + return RTEXITCODE_SUCCESS; +} + +/** + * Handles the setregisters sub-command. + * + * @returns Suitable exit code. + * @param pArgs The handler arguments. + * @param pDebugger Pointer to the debugger interface. + */ +static RTEXITCODE handleDebugVM_SetRegisters(HandlerArg *pArgs, IMachineDebugger *pDebugger) +{ + /* + * We take a list of register assignments, that is register=value. + */ + ULONG idCpu = 0; + com::SafeArray<IN_BSTR> aBstrNames; + com::SafeArray<IN_BSTR> aBstrValues; + + RTGETOPTSTATE GetState; + RTGETOPTUNION ValueUnion; + static const RTGETOPTDEF s_aOptions[] = + { + { "--cpu", 'c', RTGETOPT_REQ_UINT32 }, + }; + int rc = RTGetOptInit(&GetState, pArgs->argc, pArgs->argv, s_aOptions, RT_ELEMENTS(s_aOptions), 2, RTGETOPTINIT_FLAGS_OPTS_FIRST); + AssertRCReturn(rc, RTEXITCODE_FAILURE); + + while ((rc = RTGetOpt(&GetState, &ValueUnion)) != 0) + { + switch (rc) + { + case 'c': + idCpu = ValueUnion.u32; + break; + + case VINF_GETOPT_NOT_OPTION: + { + const char *pszEqual = strchr(ValueUnion.psz, '='); + if (!pszEqual) + return errorSyntax(USAGE_DEBUGVM, "setregisters expects input on the form 'register=value' got '%s'", ValueUnion.psz); + try + { + com::Bstr bstrName(ValueUnion.psz, pszEqual - ValueUnion.psz); + com::Bstr bstrValue(pszEqual + 1); + if ( !aBstrNames.push_back(bstrName.raw()) + || !aBstrValues.push_back(bstrValue.raw())) + throw std::bad_alloc(); + } + catch (std::bad_alloc) + { + RTMsgError("Out of memory\n"); + return RTEXITCODE_FAILURE; + } + break; + } + + default: + return errorGetOpt(USAGE_DEBUGVM, rc, &ValueUnion); + } + } + + if (!aBstrNames.size()) + return errorSyntax(USAGE_DEBUGVM, "The setregisters sub-command takes at least one register name"); + + /* + * If it is only one register, use the single register method just so + * we expose it and can test it from the command line. + */ + if (aBstrNames.size() == 1) + { + CHECK_ERROR2_RET(pDebugger, SetRegister(idCpu, aBstrNames[0], aBstrValues[0]), RTEXITCODE_FAILURE); + RTPrintf("Successfully set %ls\n", aBstrNames[0]); + } + else + { + CHECK_ERROR2_RET(pDebugger, SetRegisters(idCpu, ComSafeArrayAsInParam(aBstrNames), ComSafeArrayAsInParam(aBstrValues)), RTEXITCODE_FAILURE); + RTPrintf("Successfully set %u registers\n", aBstrNames.size()); + } + + return RTEXITCODE_SUCCESS; +} + +/** * Handles the statistics sub-command. * * @returns Suitable exit code. @@ -223,8 +435,18 @@ int handleDebugVM(HandlerArg *pArgs) const char *pszSubCmd = pArgs->argv[1]; if (!strcmp(pszSubCmd, "dumpguestcore")) rcExit = handleDebugVM_DumpVMCore(pArgs, ptrDebugger); + else if (!strcmp(pszSubCmd, "getregisters")) + rcExit = handleDebugVM_GetRegisters(pArgs, ptrDebugger); + else if (!strcmp(pszSubCmd, "info")) + rcExit = handleDebugVM_Info(pArgs, ptrDebugger); else if (!strcmp(pszSubCmd, "injectnmi")) rcExit = handleDebugVM_InjectNMI(pArgs, ptrDebugger); + else if (!strcmp(pszSubCmd, "osdetect")) + rcExit = handleDebugVM_OSDetect(pArgs, ptrDebugger); + else if (!strcmp(pszSubCmd, "osinfo")) + rcExit = handleDebugVM_OSInfo(pArgs, ptrDebugger); + else if (!strcmp(pszSubCmd, "setregisters")) + rcExit = handleDebugVM_SetRegisters(pArgs, ptrDebugger); else if (!strcmp(pszSubCmd, "statistics")) rcExit = handleDebugVM_Statistics(pArgs, ptrDebugger); else @@ -237,4 +459,3 @@ int handleDebugVM(HandlerArg *pArgs) return rcExit; } - diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp index d1f94bcd7..5a8c44bbb 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxManageGuestCtrl.cpp 35057 2010-12-14 09:52:23Z vboxsync $ */ +/* $Id: VBoxManageGuestCtrl.cpp 35541 2011-01-13 15:41:29Z vboxsync $ */ /** @file * VBoxManage - Implementation of guestcontrol command. */ @@ -41,6 +41,7 @@ #include <iprt/getopt.h> #include <iprt/list.h> #include <iprt/path.h> +#include <iprt/thread.h> #ifdef USE_XPCOM_QUEUE # include <sys/select.h> @@ -315,7 +316,6 @@ static int handleCtrlExecProgram(HandlerArg *a) bool fWaitForStdOut = false; bool fWaitForStdErr = false; bool fVerbose = false; - bool fTimeout = false; int vrc = VINF_SUCCESS; bool fUsageOK = true; @@ -372,7 +372,6 @@ static int handleCtrlExecProgram(HandlerArg *a) case 't': /* Timeout */ u32TimeoutMS = ValueUnion.u32; - fTimeout = true; break; case 'u': /* User name */ @@ -459,16 +458,15 @@ static int handleCtrlExecProgram(HandlerArg *a) RTPrintf("Process '%s' (PID: %u) started\n", Utf8Cmd.c_str(), uPID); if (fWaitForExit) { - if (fTimeout) + if (u32TimeoutMS) /* Wait with a certain timeout. */ { /* Calculate timeout value left after process has been started. */ uint64_t u64Elapsed = RTTimeMilliTS() - u64StartMS; /* Is timeout still bigger than current difference? */ if (u32TimeoutMS > u64Elapsed) { - u32TimeoutMS -= (uint32_t)u64Elapsed; if (fVerbose) - RTPrintf("Waiting for process to exit (%ums left) ...\n", u32TimeoutMS); + RTPrintf("Waiting for process to exit (%ums left) ...\n", u32TimeoutMS - u64Elapsed); } else { @@ -476,7 +474,7 @@ static int handleCtrlExecProgram(HandlerArg *a) RTPrintf("No time left to wait for process!\n"); } } - else if (fVerbose) + else if (fVerbose) /* Wait forever. */ RTPrintf("Waiting for process to exit ...\n"); /* Setup signal handling if cancelable. */ @@ -504,13 +502,12 @@ static int handleCtrlExecProgram(HandlerArg *a) || fWaitForStdErr) { rc = guest->GetProcessOutput(uPID, 0 /* aFlags */, - u32TimeoutMS, _64K, ComSafeArrayAsOutParam(aOutputData)); + RT_MAX(0, u32TimeoutMS - (RTTimeMilliTS() - u64StartMS)) /* Timeout in ms */, + _64K, ComSafeArrayAsOutParam(aOutputData)); if (FAILED(rc)) { vrc = ctrlPrintError(guest, COM_IIDOF(IGuest)); - cbOutputData = 0; - fCompleted = true; /* rc contains a failure, so we'll go into aborted state down below. */ } else { @@ -538,18 +535,10 @@ static int handleCtrlExecProgram(HandlerArg *a) } } } - if (cbOutputData <= 0) /* No more output data left? */ - { - if (fCompleted) - break; - if ( fTimeout - && RTTimeMilliTS() - u64StartMS > u32TimeoutMS + 5000) - { - progress->Cancel(); - break; - } - } + /* No more output data left? Then wait a little while ... */ + if (cbOutputData <= 0) + progress->WaitForCompletion(1 /* ms */); /* Process async cancelation */ if (g_fGuestCtrlCanceled && !fCanceledAlready) @@ -567,6 +556,14 @@ static int handleCtrlExecProgram(HandlerArg *a) { break; } + + /* Did we run out of time? */ + if ( u32TimeoutMS + && RTTimeMilliTS() - u64StartMS > u32TimeoutMS) + { + progress->Cancel(); + break; + } } /* Undo signal handling */ diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp index 03812bfd7..1146c5339 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxManageHelp.cpp 35194 2010-12-16 15:36:09Z vboxsync $ */ +/* $Id: VBoxManageHelp.cpp 35508 2011-01-12 14:54:12Z vboxsync $ */ /** @file * VBoxManage - help and other message output. */ @@ -611,7 +611,12 @@ void printUsage(USAGECATEGORY u64Cmd, PRTSTREAM pStrm) RTStrmPrintf(pStrm, "VBoxManage debugvm <uuid>|<name>\n" " dumpguestcore --filename <name> |\n" + " info <item> [args] |\n" " injectnmi |\n" + " osdetect |\n" + " osinfo |\n" + " getregisters [--cpu <id>] <reg>|all ... |\n" + " setregisters [--cpu <id>] <reg>=<value> ... |\n" " statistics [--reset] [--pattern <pattern>]\n" " [--descriptions]\n" "\n"); @@ -648,7 +653,7 @@ void printUsage(USAGECATEGORY u64Cmd, PRTSTREAM pStrm) " [--dhcp |\n" " --ip<ipv4> [--netmask<ipv4> (def: 255.255.255.0)] |\n" " --ipv6<ipv6> [--netmasklengthv6<length> (def: 64)]]\n" -# if defined(RT_OS_WINDOWS) +# if !defined(RT_OS_SOLARIS) " create |\n" " remove <name>\n" # endif diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp index a3e2e01c5..7c417aba8 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxManageHostonly.cpp 32727 2010-09-23 14:31:31Z vboxsync $ */ +/* $Id: VBoxManageHostonly.cpp 35330 2010-12-24 18:05:33Z vboxsync $ */ /** @file * VBoxManage - Implementation of hostonlyif command. */ @@ -44,7 +44,7 @@ #ifndef VBOX_ONLY_DOCS using namespace com; -#if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_NETFLT) +#if defined(VBOX_WITH_NETFLT) && !defined(RT_OS_SOLARIS) static int handleCreate(HandlerArg *a, int iStart, int *pcProcessed) { // if (a->argc - iStart < 1) @@ -96,16 +96,16 @@ static int handleRemove(HandlerArg *a, int iStart, int *pcProcessed) index++; ComPtr<IHost> host; - CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); + CHECK_ERROR_RET(a->virtualBox, COMGETTER(Host)(host.asOutParam()), 1); ComPtr<IHostNetworkInterface> hif; - CHECK_ERROR(host, FindHostNetworkInterfaceByName(name.raw(), hif.asOutParam())); + CHECK_ERROR_RET(host, FindHostNetworkInterfaceByName(name.raw(), hif.asOutParam()), 1); Bstr guid; - CHECK_ERROR(hif, COMGETTER(Id)(guid.asOutParam())); + CHECK_ERROR_RET(hif, COMGETTER(Id)(guid.asOutParam()), 1); ComPtr<IProgress> progress; - CHECK_ERROR(host, RemoveHostOnlyNetworkInterface(guid.raw(), progress.asOutParam())); + CHECK_ERROR_RET(host, RemoveHostOnlyNetworkInterface(guid.raw(), progress.asOutParam()), 1); rc = showProgress(progress); *pcProcessed = index - iStart; @@ -296,7 +296,7 @@ int handleHostonlyIf(HandlerArg *a) // else // break; } -#if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_NETFLT) +#if defined(VBOX_WITH_NETFLT) && !defined(RT_OS_SOLARIS) else if (strcmp(a->argv[i], "create") == 0) { int cProcessed; diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp index fe3cf4efc..5a1ad6c96 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxManageInfo.cpp 35146 2010-12-15 16:31:56Z vboxsync $ */ +/* $Id: VBoxManageInfo.cpp 35517 2011-01-13 10:47:12Z vboxsync $ */ /** @file * VBoxManage - The 'showvminfo' command and helper routines. */ @@ -169,7 +169,7 @@ HRESULT showVMInfo(ComPtr<IVirtualBox> virtualBox, ComPtr<IVirtualBoxErrorInfo> accessError; rc = machine->COMGETTER(AccessError)(accessError.asOutParam()); RTPrintf("Access error details:\n"); - ErrorInfo ei(accessError, COM_IIDOF(IVirtualBoxErrorInfo)); + ErrorInfo ei(accessError); GluePrintErrorInfo(ei); RTPrintf("\n"); } diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp index 4a50c2eb1..72ed11aa3 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxManageMisc.cpp 35273 2010-12-21 12:52:38Z vboxsync $ */ +/* $Id: VBoxManageMisc.cpp 35523 2011-01-13 13:12:03Z vboxsync $ */ /** @file * VBoxManage - VirtualBox's command-line interface. */ @@ -371,9 +371,7 @@ int handleStartVM(HandlerArg *a) CHECK_ERROR_RET(progress, COMGETTER(ResultCode)(&iRc), rc); if (FAILED(iRc)) { - ComPtr<IVirtualBoxErrorInfo> errorInfo; - CHECK_ERROR_RET(progress, COMGETTER(ErrorInfo)(errorInfo.asOutParam()), 1); - ErrorInfo info(errorInfo, COM_IIDOF(IVirtualBoxErrorInfo)); + ProgressErrorInfo info(progress); com::GluePrintErrorInfo(info); } else @@ -860,8 +858,16 @@ int handleExtPack(HandlerArg *a) CHECK_ERROR2_RET(ptrExtPackFile, COMGETTER(Name)(bstrName.asOutParam()), RTEXITCODE_FAILURE); ComPtr<IProgress> ptrProgress; CHECK_ERROR2_RET(ptrExtPackFile, Install(fReplace, NULL, ptrProgress.asOutParam()), RTEXITCODE_FAILURE); - if (!ptrProgress.isNull()) - CHECK_ERROR2_RET(ptrProgress, WaitForCompletion(-1), RTEXITCODE_FAILURE); + hrc = showProgress(ptrProgress); + if (FAILED(hrc)) + { + com::ProgressErrorInfo ErrInfo(ptrProgress); + if (ErrInfo.isBasicAvailable()) + RTMsgError("Failed to install \"%s\": %lS", szPath, ErrInfo.getText().raw()); + else + RTMsgError("Failed to install \"%s\": No error message available!", szPath); + return RTEXITCODE_FAILURE; + } RTPrintf("Successfully installed \"%lS\".\n", bstrName.raw()); } else if (!strcmp(a->argv[0], "uninstall")) @@ -899,8 +905,16 @@ int handleExtPack(HandlerArg *a) Bstr bstrName(pszName); ComPtr<IProgress> ptrProgress; CHECK_ERROR2_RET(ptrExtPackMgr, Uninstall(bstrName.raw(), fForced, NULL, ptrProgress.asOutParam()), RTEXITCODE_FAILURE); - if (!ptrProgress.isNull()) - CHECK_ERROR2_RET(ptrProgress, WaitForCompletion(-1), RTEXITCODE_FAILURE); + hrc = showProgress(ptrProgress); + if (FAILED(hrc)) + { + com::ProgressErrorInfo ErrInfo(ptrProgress); + if (ErrInfo.isBasicAvailable()) + RTMsgError("Failed to uninstall \"%s\": %lS", pszName, ErrInfo.getText().raw()); + else + RTMsgError("Failed to uninstall \"%s\": No error message available!", pszName); + return RTEXITCODE_FAILURE; + } RTPrintf("Successfully uninstalled \"%s\".\n", pszName); } else if (!strcmp(a->argv[0], "cleanup")) diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp index 4901164ab..6457b0c7d 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxManageStorageController.cpp 35241 2010-12-20 13:14:55Z vboxsync $ */ +/* $Id: VBoxManageStorageController.cpp 35389 2011-01-03 13:21:55Z vboxsync $ */ /** @file * VBoxManage - The storage controller related commands. */ @@ -375,7 +375,7 @@ int handleStorageAttach(HandlerArg *a) */ if (ctlType == StorageControllerType_I82078) // floppy controller devTypeRequested = DeviceType_Floppy; - else + else if (pszMedium) { /* * for SATA/SCSI/IDE it is hard to tell if it is a harddisk or diff --git a/src/VBox/Frontends/VBoxSDL/Makefile.kmk b/src/VBox/Frontends/VBoxSDL/Makefile.kmk index c20874788..00b55fa81 100644 --- a/src/VBox/Frontends/VBoxSDL/Makefile.kmk +++ b/src/VBox/Frontends/VBoxSDL/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33590 2010-10-29 08:55:09Z vboxsync $ +# $Id: Makefile.kmk 35385 2010-12-30 16:35:31Z vboxsync $ ## @file # Sub-Makefile for VBoxSDL (a simple frontend based on SDL). # @@ -73,7 +73,7 @@ VBoxSDL_DEFS.win.x86 = _WIN32_WINNT=0x0500 VBoxSDL_DEFS.win.amd64 = _WIN32_WINNT=0x0510 VBoxSDL_INCS = \ - $(PATH_VBoxSDL) + $(VBoxSDL_0_OUTDIR) ifeq ($(filter-out freebsd linux netbsd openbsd solaris,$(KBUILD_TARGET)),) # X11 VBoxSDL_INCS += \ $(VBOX_XCURSOR_INCS) @@ -98,17 +98,17 @@ endif VBoxSDL_LDFLAGS.darwin = \ -framework Foundation -framework AppKit -VBoxSDL_CLEAN = $(PATH_VBoxSDL)/Ico64x01.h -VBoxSDL_INTERMEDIATES = $(PATH_VBoxSDL)/Ico64x01.h +VBoxSDL_CLEAN = $(VBoxSDL_0_OUTDIR)/Ico64x01.h +VBoxSDL_INTERMEDIATES = $(VBoxSDL_0_OUTDIR)/Ico64x01.h # Convert the pnm-file to a byte array. -$$(PATH_VBoxSDL)/Ico64x01.h: $(PATH_ROOT)/src/VBox/Frontends/VBoxSDL/ico64x01.pnm $(VBOX_BIN2C) | $$(dir $$@) +$$(VBoxSDL_0_OUTDIR)/Ico64x01.h: $(PATH_ROOT)/src/VBox/Frontends/VBoxSDL/ico64x01.pnm $(VBOX_BIN2C) | $$(dir $$@) $(call MSG_TOOL,bin2c,VBoxSDL,$<,$@) $(QUIET)$(VBOX_BIN2C) Ico64x01 $< $@ # Icon include file. -$$(PATH_VBoxSDL)/VBoxSDL-icon.rc: $(VBOX_WINDOWS_ICON_FILE) $$(VBoxSDL_PATH)/Makefile.kmk | $$(dir $$@) +$$(VBoxSDL_0_OUTDIR)/VBoxSDL-icon.rc: $(VBOX_WINDOWS_ICON_FILE) $$(VBoxSDL_DEFPATH)/Makefile.kmk | $$(dir $$@) $(RM) -f $@ $(APPEND) $@ 'IDI_VIRTUALBOX ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"' @@ -129,8 +129,6 @@ tstSDL_DEFS.win.x86 = _WIN32_WINNT=0x0500 ifdef VBOX_OPENGL tstSDL_DEFS.linux = VBOX_OPENGL endif -tstSDL_INCS = \ - $(PATH_tstSDL) tstSDL_LIBS = \ $(LIB_RUNTIME) diff --git a/src/VBox/Frontends/VBoxShell/vboxshell.py b/src/VBox/Frontends/VBoxShell/vboxshell.py index 8edbe9785..ae8d1d142 100644 --- a/src/VBox/Frontends/VBoxShell/vboxshell.py +++ b/src/VBox/Frontends/VBoxShell/vboxshell.py @@ -751,7 +751,7 @@ class XPathNode: return True if not subexp.startswith(self.type): return False - m = re.search(r"@(?P<a>\w+)=(?P<v>\w+)", subexp) + m = re.search(r"@(?P<a>\w+)=(?P<v>[^\'\[\]]+)", subexp) matches = False try: if m is not None: @@ -2172,7 +2172,7 @@ def attachHddCmd(ctx,args): vb = ctx['vb'] loc = args[2] try: - hdd = vb.findHardDisk(loc) + hdd = vb.findMedium(loc, ctx['global'].constants.DeviceType_HardDisk) except: print "no HDD with path %s registered" %(loc) return 0 @@ -2194,7 +2194,7 @@ def detachVmDevice(ctx,mach,args): mach.detachDevice(a.controller, a.port, a.device) def detachMedium(ctx,mid,medium): - cmdClosedVm(ctx, mach, detachVmDevice, [medium.id]) + cmdClosedVm(ctx, machById(ctx, mid), detachVmDevice, [medium]) def detachHddCmd(ctx,args): if (len(args) < 3): @@ -2207,12 +2207,12 @@ def detachHddCmd(ctx,args): vb = ctx['vb'] loc = args[2] try: - hdd = vb.findHardDisk(loc) + hdd = vb.findMedium(loc, ctx['global'].constants.DeviceType_HardDisk) except: print "no HDD with path %s registered" %(loc) return 0 - detachMedium(ctx,mach.id,hdd) + detachMedium(ctx, mach.id, hdd) return 0 def unregisterHddCmd(ctx,args): @@ -2227,7 +2227,7 @@ def unregisterHddCmd(ctx,args): else: vmunreg = 0 try: - hdd = vb.findHardDisk(loc) + hdd = vb.findMedium(loc, ctx['global'].constants.DeviceType_HardDisk) except: print "no HDD with path %s registered" %(loc) return 0 @@ -2237,7 +2237,7 @@ def unregisterHddCmd(ctx,args): try: for m in machs: print "Trying to detach from %s" %(m) - detachMedium(ctx,m,hdd) + detachMedium(ctx, m, hdd) except Exception, e: print 'failed: ',e return 0 @@ -2252,7 +2252,7 @@ def removeHddCmd(ctx,args): vb = ctx['vb'] loc = args[1] try: - hdd = vb.findHardDisk(loc) + hdd = vb.findMedium(loc, ctx['global'].constants.DeviceType_HardDisk) except: print "no HDD with path %s registered" %(loc) return 0 @@ -2281,7 +2281,7 @@ def unregisterIsoCmd(ctx,args): vb = ctx['vb'] loc = args[1] try: - dvd = vb.findDVDImage(loc) + dvd = vb.findMedium(loc, ) except: print "no DVD with path %s registered" %(loc) return 0 @@ -2299,7 +2299,7 @@ def removeIsoCmd(ctx,args): vb = ctx['vb'] loc = args[1] try: - dvd = vb.findDVDImage(loc) + dvd = vb.findMedium(loc, ctx['global'].constants.DeviceType_DVD) except: print "no DVD with path %s registered" %(loc) return 0 @@ -2322,7 +2322,7 @@ def attachIsoCmd(ctx,args): vb = ctx['vb'] loc = args[2] try: - dvd = vb.findDVDImage(loc) + dvd = vb.findMedium(loc, ctx['global'].constants.DeviceType_DVD) except: print "no DVD with path %s registered" %(loc) return 0 @@ -2331,7 +2331,7 @@ def attachIsoCmd(ctx,args): (port,slot) = args[4].split(":") else: [ctr, port, slot] = findDevOfType(ctx, mach, ctx['global'].constants.DeviceType_DVD) - cmdClosedVm(ctx, mach, lambda ctx,mach,args: mach.attachDevice(ctr, port, slot, ctx['global'].constants.DeviceType_DVD,dvd.id)) + cmdClosedVm(ctx, mach, lambda ctx,mach,args: mach.attachDevice(ctr, port, slot, ctx['global'].constants.DeviceType_DVD, dvd)) return 0 def detachIsoCmd(ctx,args): @@ -2345,12 +2345,12 @@ def detachIsoCmd(ctx,args): vb = ctx['vb'] loc = args[2] try: - dvd = vb.findDVDImage(loc) + dvd = vb.findMedium(loc, ctx['global'].constants.DeviceType_DVD) except: print "no DVD with path %s registered" %(loc) return 0 - detachMedium(ctx,mach.id,dvd) + detachMedium(ctx, mach.id, dvd) return 0 def mountIsoCmd(ctx,args): @@ -2364,7 +2364,7 @@ def mountIsoCmd(ctx,args): vb = ctx['vb'] loc = args[2] try: - dvd = vb.findDVDImage(loc) + dvd = vb.findMedium(loc, ctx['global'].constants.DeviceType_DVD) except: print "no DVD with path %s registered" %(loc) return 0 @@ -2376,7 +2376,7 @@ def mountIsoCmd(ctx,args): # autodetect controller and location, just find first controller with media == DVD [ctr, port, slot] = findDevOfType(ctx, mach, ctx['global'].constants.DeviceType_DVD) - cmdExistingVm(ctx, mach, 'mountiso', [ctr, port, slot, dvd.id, True]) + cmdExistingVm(ctx, mach, 'mountiso', [ctr, port, slot, dvd, True]) return 0 @@ -2390,14 +2390,14 @@ def unmountIsoCmd(ctx,args): return 0 vb = ctx['vb'] - if len(args) > 2: + if len(args) > 3: ctr = args[2] (port,slot) = args[3].split(":") else: # autodetect controller and location, just find first controller with media == DVD [ctr, port, slot] = findDevOfType(ctx, mach, ctx['global'].constants.DeviceType_DVD) - cmdExistingVm(ctx, mach, 'mountiso', [ctr, port, slot, "", True]) + cmdExistingVm(ctx, mach, 'mountiso', [ctr, port, slot, None, True]) return 0 diff --git a/src/VBox/Frontends/VirtualBox/Makefile.kmk b/src/VBox/Frontends/VirtualBox/Makefile.kmk index 0a159a8da..24a0f4c86 100644 --- a/src/VBox/Frontends/VirtualBox/Makefile.kmk +++ b/src/VBox/Frontends/VirtualBox/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34813 2010-12-07 19:06:44Z vboxsync $ +# $Id: Makefile.kmk 35564 2011-01-14 13:52:02Z vboxsync $ ## @file # Makefile for the VirtualBox Qt GUI. # @@ -128,7 +128,8 @@ VirtualBox_DEFS += \ $(if $(VBOX_WITH_E1000),VBOX_WITH_E1000) \ $(if $(VBOX_WITH_NETFLT)$(eq $(KBUILD_TARGET),freebsd),VBOX_WITH_NETFLT) \ $(if $(VBOX_WITH_VDE),VBOX_WITH_VDE) \ - $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI) + $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI) \ + $(if $(VBOX_GUI_WITH_PIDFILE),VBOX_GUI_WITH_PIDFILE,) ifdef VBOX_WITH_DEBUGGER_GUI VirtualBox_DEFS += VBOX_WITH_DEBUGGER_GUI if "$(KBUILD_TYPE)" != "release" @@ -193,7 +194,7 @@ endif VirtualBox_INCS = \ $(VBOX_GUI_INC_DIRS) \ - $(PATH_VirtualBox)/include + $(VirtualBox_0_OUTDIR)/include # Necessary for the hdd backend enumeration VirtualBox_LIBS = $(LIB_DDU) @@ -658,18 +659,18 @@ endif # ## @todo This needs some cleaning up perhaps... ## @todo kBuild: Non-existing +| targets should be tried remade or what? -VirtualBox_BLDDIRS += $(PATH_VirtualBox)/include -VirtualBox_INTERMEDIATES += $(PATH_VirtualBox)/include/COMWrappers.h +VirtualBox_BLDDIRS += $(VirtualBox_0_OUTDIR)/include +VirtualBox_INTERMEDIATES += $(VirtualBox_0_OUTDIR)/include/COMWrappers.h VirtualBox_CLEAN += \ - $(PATH_VirtualBox)/include/COMWrappers \ - $(PATH_VirtualBox)/include/COMWrappers.tmp \ - $(PATH_VirtualBox)/include/COMWrappers.h \ - $(PATH_VirtualBox)/include/COMWrappers.cpp -VirtualBox_SOURCES += $(PATH_VirtualBox)/include/COMWrappers.cpp - -$$(PATH_VirtualBox)/include/COMWrappers \ -+| $$(PATH_VirtualBox)/include/COMWrappers.h \ -+| $$(PATH_VirtualBox)/include/COMWrappers.cpp: \ + $(VirtualBox_0_OUTDIR)/include/COMWrappers \ + $(VirtualBox_0_OUTDIR)/include/COMWrappers.tmp \ + $(VirtualBox_0_OUTDIR)/include/COMWrappers.h \ + $(VirtualBox_0_OUTDIR)/include/COMWrappers.cpp +VirtualBox_SOURCES += $(VirtualBox_0_OUTDIR)/include/COMWrappers.cpp + +$$(VirtualBox_0_OUTDIR)/include/COMWrappers \ ++| $$(VirtualBox_0_OUTDIR)/include/COMWrappers.h \ ++| $$(VirtualBox_0_OUTDIR)/include/COMWrappers.cpp: \ $(VBOX_XIDL_FILE) \ $(VBOX_VIRTUALBOX4_SRC)/src/globals/COMWrappers.xsl \ | $$(dir $$@) @@ -696,7 +697,7 @@ $$(PATH_VirtualBox)/include/COMWrappers \ # alias for generating the COM Wrappers file. -testwrappers:: $$(PATH_VirtualBox)/include/COMWrappers.h +testwrappers:: $$(VirtualBox_0_OUTDIR)/include/COMWrappers.h # @@ -817,11 +818,11 @@ ifeq ($(KBUILD_TARGET),win) # On Windows we'll have to generate/edit part of the resource file. # The IDI_ICON1 name is Qt specific. # -src/platform/win/VirtualBox.rc_INCS = $(PATH_VirtualBox) -src/platform/win/VirtualBox.rc_DEPS = $(PATH_VirtualBox)/VirtualBox-icon.rc -src/platform/win/VirtualBox.rc_CLEAN = $(PATH_VirtualBox)/VirtualBox-icon.rc +src/platform/win/VirtualBox.rc_INCS = $(VirtualBox_0_OUTDIR) +src/platform/win/VirtualBox.rc_DEPS = $(VirtualBox_0_OUTDIR)/VirtualBox-icon.rc +src/platform/win/VirtualBox.rc_CLEAN = $(VirtualBox_0_OUTDIR)/VirtualBox-icon.rc -$$(PATH_VirtualBox)/VirtualBox-icon.rc: $(MAKEFILE_CURRENT) $(VBOX_WINDOWS_ICON_FILE) | $$(dir $$@) +$$(VirtualBox_0_OUTDIR)/VirtualBox-icon.rc: $(MAKEFILE_CURRENT) $(VBOX_WINDOWS_ICON_FILE) | $$(dir $$@) $(APPEND) -t $@ 'IDI_ICON1 ICON "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"' endif # win @@ -846,7 +847,7 @@ VirtualBox.app_INST = $(INST_VIRTUALBOX)Contents/ VirtualBox.app_MODE = 644 VirtualBox.app_SOURCES = \ src/platform/darwin/PkgInfo \ - $(PATH_VirtualBox.app)/Info.plist \ + $(VirtualBox.app_0_OUTDIR)/Info.plist \ $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns \ $(VBOX_BRAND_GUI_VBOX_64PX_PNG)=>Resources/virtualbox.png \ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox.icns=>Resources/virtualbox-vbox.icns \ @@ -854,7 +855,7 @@ VirtualBox.app_SOURCES = \ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ovf.icns=>Resources/virtualbox-ovf.icns \ $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ova.icns=>Resources/virtualbox-ova.icns -$$(PATH_VirtualBox.app)/Info.plist: $(PATH_SUB_CURRENT)/src/platform/darwin/Info.plist $(VBOX_VERSION_MK) | $$(@D)/ +$$(VirtualBox.app_0_OUTDIR)/Info.plist: $(PATH_SUB_CURRENT)/src/platform/darwin/Info.plist $(VBOX_VERSION_MK) | $$(@D)/ $(call MSG_GENERATE,VirtualBox.app,$<,$@) $(QUIET)$(RM) -f $@ $(QUIET)$(SED) \ @@ -872,12 +873,12 @@ VirtualBoxVM.app_INST = $(VirtualBox.app_INST)Resources/VirtualBoxVM.app/Content VirtualBoxVM.app_MODE = 644 VirtualBoxVM.app_SOURCES = \ src/platform/darwin/VM-PkgInfo=>PkgInfo \ - $(PATH_VirtualBoxVM.app)/VM-Info.plist=>Info.plist + $(VirtualBoxVM.app_0_OUTDIR)/VM-Info.plist=>Info.plist VirtualBoxVM.app_SYMLINKS = \ MacOS=>../../../MacOS/ \ Resources=>../../../Resources/ -$$(PATH_VirtualBoxVM.app)/VM-Info.plist: $(PATH_SUB_CURRENT)/src/platform/darwin/VM-Info.plist $(VBOX_VERSION_MK) | $$(@D)/ +$$(VirtualBoxVM.app_0_OUTDIR)/VM-Info.plist: $(PATH_SUB_CURRENT)/src/platform/darwin/VM-Info.plist $(VBOX_VERSION_MK) | $$(@D)/ $(call MSG_GENERATE,VirtualBoxVM.app,$<,$@) $(QUIET)$(RM) -f $@ $(QUIET)$(SED) \ @@ -901,12 +902,12 @@ vmstarter.app_INST = $(VirtualBox.app_INST)Resources/vmstarter.app/Contents vmstarter.app_MODE = 644 vmstarter.app_SOURCES = \ src/platform/darwin/vmstarter-PkgInfo=>PkgInfo \ - $(PATH_vmstarter.app)/vmstarter-Info.plist=>Info.plist + $(vmstarter.app_0_OUTDIR)/vmstarter-Info.plist=>Info.plist vmstarter.app_SYMLINKS = \ MacOS=>../../../MacOS \ Resources=>../../../Resources -$$(PATH_vmstarter.app)/vmstarter-Info.plist: $(PATH_SUB_CURRENT)/src/platform/darwin/vmstarter-Info.plist $(VBOX_VERSION_MK) | $$(@D)/ +$$(vmstarter.app_0_OUTDIR)/vmstarter-Info.plist: $(PATH_SUB_CURRENT)/src/platform/darwin/vmstarter-Info.plist $(VBOX_VERSION_MK) | $$(@D)/ $(call MSG_GENERATE,vmstarter.app,$<,$@) $(QUIET)$(RM) -f $@ $(QUIET)$(SED) \ diff --git a/src/VBox/Frontends/VirtualBox/images/adjust_win_size_16px.png b/src/VBox/Frontends/VirtualBox/images/adjust_win_size_16px.png Binary files differindex a1bc688c5..0a36001c9 100644 --- a/src/VBox/Frontends/VirtualBox/images/adjust_win_size_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/adjust_win_size_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/adjust_win_size_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/adjust_win_size_disabled_16px.png Binary files differindex 3e8ec95a2..a02735ea1 100644 --- a/src/VBox/Frontends/VirtualBox/images/adjust_win_size_disabled_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/adjust_win_size_disabled_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/auto_resize_on_16px.png b/src/VBox/Frontends/VirtualBox/images/auto_resize_on_16px.png Binary files differindex e22af26aa..dcaaf8ff1 100644 --- a/src/VBox/Frontends/VirtualBox/images/auto_resize_on_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/auto_resize_on_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/auto_resize_on_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/auto_resize_on_disabled_16px.png Binary files differindex 4bd0ef057..e9a9205fc 100644 --- a/src/VBox/Frontends/VirtualBox/images/auto_resize_on_disabled_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/auto_resize_on_disabled_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/auto_resize_on_on_16px.png b/src/VBox/Frontends/VirtualBox/images/auto_resize_on_on_16px.png Binary files differindex 5fdb3243a..24b0251a3 100644 --- a/src/VBox/Frontends/VirtualBox/images/auto_resize_on_on_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/auto_resize_on_on_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/auto_resize_on_on_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/auto_resize_on_on_disabled_16px.png Binary files differindex 638306e05..94007259e 100644 --- a/src/VBox/Frontends/VirtualBox/images/auto_resize_on_on_disabled_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/auto_resize_on_on_disabled_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/fullscreen_16px.png b/src/VBox/Frontends/VirtualBox/images/fullscreen_16px.png Binary files differindex 2e3edd28e..0bdf8a3db 100644 --- a/src/VBox/Frontends/VirtualBox/images/fullscreen_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/fullscreen_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/fullscreen_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/fullscreen_disabled_16px.png Binary files differindex ae39f9d8a..46be58b05 100644 --- a/src/VBox/Frontends/VirtualBox/images/fullscreen_disabled_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/fullscreen_disabled_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/fullscreen_on_16px.png b/src/VBox/Frontends/VirtualBox/images/fullscreen_on_16px.png Binary files differindex 7e51286ea..b2ed801ca 100644 --- a/src/VBox/Frontends/VirtualBox/images/fullscreen_on_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/fullscreen_on_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/fullscreen_on_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/fullscreen_on_disabled_16px.png Binary files differindex 60e912fa2..0a4b1023e 100644 --- a/src/VBox/Frontends/VirtualBox/images/fullscreen_on_disabled_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/fullscreen_on_disabled_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/vrdp_16px.png b/src/VBox/Frontends/VirtualBox/images/vrdp_16px.png Binary files differindex 254ba0a98..e695d5d6d 100644 --- a/src/VBox/Frontends/VirtualBox/images/vrdp_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/vrdp_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/vrdp_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/vrdp_disabled_16px.png Binary files differindex 894b9c799..4bf5b7091 100644 --- a/src/VBox/Frontends/VirtualBox/images/vrdp_disabled_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/vrdp_disabled_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/vrdp_on_16px.png b/src/VBox/Frontends/VirtualBox/images/vrdp_on_16px.png Binary files differindex 405cb3d8e..d82f89b17 100644 --- a/src/VBox/Frontends/VirtualBox/images/vrdp_on_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/vrdp_on_16px.png diff --git a/src/VBox/Frontends/VirtualBox/images/vrdp_on_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/vrdp_on_disabled_16px.png Binary files differindex ef9faf42a..a04975a58 100644 --- a/src/VBox/Frontends/VirtualBox/images/vrdp_on_disabled_16px.png +++ b/src/VBox/Frontends/VirtualBox/images/vrdp_on_disabled_16px.png diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts index abfaff702..dd4f53247 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts @@ -1,4 +1,3 @@ -<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.0" language="ca"> <context> @@ -11,7 +10,7 @@ <message> <source>--</source> <comment>Native language country name (empty if this language is for all countries)</comment> - <translation></translation> + <translation/> </message> <message> <source>English</source> @@ -21,7 +20,7 @@ <message> <source>--</source> <comment>Language country name, in English (empty if native country name is empty)</comment> - <translation></translation> + <translation/> </message> <message> <source>Oracle Corporation</source> @@ -56,18 +55,18 @@ </message> <message> <source>Moves the selected boot device up.</source> - <translation type="obsolete">Mou amunt el dispositiu d'arrecada seleccionat.</translation> + <translation type="obsolete">Mou amunt el dispositiu d'arrecada seleccionat.</translation> </message> <message> <source>Moves the selected boot device down.</source> - <translation type="obsolete">Mou avall el dispositiu d'arrencada seleccionat.</translation> + <translation type="obsolete">Mou avall el dispositiu d'arrencada seleccionat.</translation> </message> </context> <context> <name>BootItemsTable</name> <message> <source>Defines the boot device order. Use the checkboxes on the left to enable or disable individual boot devices. Move items up and down to change the device order.</source> - <translation type="obsolete">Definiu l'ordre dels dispositius d'arrencada. Useu les caseles de selecció a l'esquerra per activar o desactivar els dispositius d'arrencada individuals. Moveu els elements amunt i avall per a canviar l'ordre dels dispositius.</translation> + <translation type="obsolete">Definiu l'ordre dels dispositius d'arrencada. Useu les caseles de selecció a l'esquerra per activar o desactivar els dispositius d'arrencada individuals. Moveu els elements amunt i avall per a canviar l'ordre dels dispositius.</translation> </message> </context> <context> @@ -88,28 +87,28 @@ <context> <name>QApplication</name> <message> - <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root.</source> - <translation type="obsolete">Aquest error significa que el controlador del nucli no ha pogut assignar memòria suficient o bé alguna operació de mapejat ha fallat.<br/><br/>Existeixen alguns problemes coneguts amb el nucli Linux 2.6.29. Si esteu executant aquest nucli, editeu el fitxer /usr/src/vboxdrv-*/Makefile i habiliteu <i>VBOX_USE_INSERT_PAGE = 1</i>. Després d'això, torneu a compilar el mòdul executant com a root a una terminal l'ordre <br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>.</translation> + <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.<br/><br/>There are known problems with Linux 2.6.29. If you are running such a kernel, please edit /usr/src/vboxdrv-*/Makefile and enable <i>VBOX_USE_INSERT_PAGE = 1</i>. After that, re-compile the kernel module by executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root.</source> + <translation type="obsolete">Aquest error significa que el controlador del nucli no ha pogut assignar memòria suficient o bé alguna operació de mapejat ha fallat.<br/><br/>Existeixen alguns problemes coneguts amb el nucli Linux 2.6.29. Si esteu executant aquest nucli, editeu el fitxer /usr/src/vboxdrv-*/Makefile i habiliteu <i>VBOX_USE_INSERT_PAGE = 1</i>. Després d'això, torneu a compilar el mòdul executant com a root a una terminal l'ordre <br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>.</translation> </message> <message> - <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source> - <translation>El controlador del nucli del VirtualBox (vboxdrv) no s'ha carregat o existeix un problema de permisos amb /dev/vboxdrv. Torneu a configurar el mòdul del nucli executant com a root a una terminal <br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>. Usuaris d'Ubuntu, Fedora o Mandriva haurien d'instal·lar abans el paquet DKMS. Aquest paquet manté actiu el mòdul quan hi ha canvis al nucli i el recompila si és necessari.</translation> + <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source> + <translation>El controlador del nucli del VirtualBox (vboxdrv) no s'ha carregat o existeix un problema de permisos amb /dev/vboxdrv. Torneu a configurar el mòdul del nucli executant com a root a una terminal <br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>. Usuaris d'Ubuntu, Fedora o Mandriva haurien d'instal·lar abans el paquet DKMS. Aquest paquet manté actiu el mòdul quan hi ha canvis al nucli i el recompila si és necessari.</translation> </message> <message> <source>Make sure the kernel module has been loaded successfully.</source> - <translation>Assegureu-vos que el mòdul del nucli s'ha carregat correctament.</translation> + <translation>Assegureu-vos que el mòdul del nucli s'ha carregat correctament.</translation> </message> <message> <source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source> - <translation>L'executable <b>%1</b> necessita Qt %2.x, però s'ha trobat Qt %3.</translation> + <translation>L'executable <b>%1</b> necessita Qt %2.x, però s'ha trobat Qt %3.</translation> </message> <message> <source>Incompatible Qt Library Error</source> - <translation>S'ha produït un error de biblioteca Qt incompatible</translation> + <translation>S'ha produït un error de biblioteca Qt incompatible</translation> </message> <message> <source>VirtualBox - Runtime Error</source> - <translation>VirtualBox - Error d'execució</translation> + <translation>VirtualBox - Error d'execució</translation> </message> <message> <source><b>Cannot access the kernel driver!</b><br/><br/></source> @@ -121,7 +120,7 @@ </message> <message> <source>Unknown error %2 during initialization of the Runtime</source> - <translation>S'ha produït un error desconegut %2 quan s'iniciava l'execució</translation> + <translation>S'ha produït un error desconegut %2 quan s'iniciava l'execució</translation> </message> <message> <source>VirtualBox - Error In %1</source> @@ -133,15 +132,15 @@ </message> <message> <source>Please try reinstalling VirtualBox.</source> - <translation>Hauria d'ajudar-vos a tornar a instal·lar VirtualBox.</translation> + <translation>Hauria d'ajudar-vos a tornar a instal·lar VirtualBox.</translation> </message> <message> <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source> - <translation>Els mòduls del nucli del VirtualBox no coincideixen amb aquesta versió del VirtualBox. La instal·lació no s'ha completat. Proveu desinstal·lant i tornant a instal·lar el VirtualBox.</translation> + <translation>Els mòduls del nucli del VirtualBox no coincideixen amb aquesta versió del VirtualBox. La instal·lació no s'ha completat. Proveu desinstal·lant i tornant a instal·lar el VirtualBox.</translation> </message> <message> - <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source> - <translation>Els mòduls del nucli del VirtualBox no coincideixen amb aquesta versió del VirtualBox. La instal·lació no s'ha completat. Proveu a executar<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/> per resoldre el problema. Assegureu-vos que no barrejeu la versió OSE (lliure) amb la versió completa dle VirtualBox.</translation> + <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source> + <translation>Els mòduls del nucli del VirtualBox no coincideixen amb aquesta versió del VirtualBox. La instal·lació no s'ha completat. Proveu a executar<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/> per resoldre el problema. Assegureu-vos que no barrejeu la versió OSE (lliure) amb la versió completa dle VirtualBox.</translation> </message> <message> <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source> @@ -245,7 +244,7 @@ </message> <message> <source>Print Screen</source> - <translation>Tecla d'impressió de pantalla</translation> + <translation>Tecla d'impressió de pantalla</translation> </message> <message> <source>F1</source> @@ -360,7 +359,7 @@ <name>QIHttp</name> <message> <source>Connection timed out</source> - <translation>S'ha excedit el temps d'espera de la connexió</translation> + <translation>S'ha excedit el temps d'espera de la connexió</translation> </message> <message> <source>Could not locate the file on the server (response: %1)</source> @@ -385,7 +384,7 @@ <name>QIMessageBox</name> <message> <source>OK</source> - <translation>D'acord</translation> + <translation>D'acord</translation> </message> <message> <source>Yes</source> @@ -444,7 +443,7 @@ <name>QIWizardPage</name> <message> <source>Use the <b>%1</b> button to go to the next page of the wizard and the <b>%2</b> button to return to the previous page. You can also press <b>%3</b> if you want to cancel the execution of this wizard.</p></source> - <translation>Feu servir el botó <b>%1</b> per anar a la pà gina següent de l'auxiliar i el botó <b>%2</b> per tornar a la pà gina anterior. També podeu prémer <b>%3</b> si voleu cancel·lar l'execució d'aquest auxiliar.</p></translation> + <translation>Feu servir el botó <b>%1</b> per anar a la pà gina següent de l'auxiliar i el botó <b>%2</b> per tornar a la pà gina anterior. També podeu prémer <b>%3</b> si voleu cancel·lar l'execució d'aquest auxiliar.</p></translation> </message> </context> <context> @@ -467,7 +466,7 @@ </message> <message> <source>Switch to seamless desktop integration mode</source> - <translation type="obsolete">Canvia al mode d'integració de l'escriptori fluid</translation> + <translation type="obsolete">Canvia al mode d'integració de l'escriptori fluid</translation> </message> <message> <source>Auto-resize &Guest Display</source> @@ -491,7 +490,7 @@ </message> <message> <source>Temporarily disable host mouse pointer integration</source> - <translation>Desactiva temporalment la integració del punter de l'amfitrió</translation> + <translation>Desactiva temporalment la integració del punter de l'amfitrió</translation> </message> <message> <source>Enable &Mouse Integration</source> @@ -499,7 +498,7 @@ </message> <message> <source>Enable temporarily disabled host mouse pointer integration</source> - <translation type="obsolete">Activa la integració del punter de l'amfitrió que s'havia desactivat temporalment</translation> + <translation type="obsolete">Activa la integració del punter de l'amfitrió que s'havia desactivat temporalment</translation> </message> <message> <source>&Insert Ctrl-Alt-Del</source> @@ -539,7 +538,7 @@ </message> <message> <source>Suspend the execution of the virtual machine</source> - <translation>Suspèn l'execució de la mà quina virtual</translation> + <translation>Suspèn l'execució de la mà quina virtual</translation> </message> <message> <source>R&esume</source> @@ -547,7 +546,7 @@ </message> <message> <source>Resume the execution of the virtual machine</source> - <translation type="obsolete">Reprèn l'execució de la mà quina virtual</translation> + <translation type="obsolete">Reprèn l'execució de la mà quina virtual</translation> </message> <message> <source>&Reset</source> @@ -567,7 +566,7 @@ </message> <message> <source>Send the ACPI Power Button press event to the virtual machine</source> - <translation>Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power</translation> + <translation>Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power</translation> </message> <message> <source>&Close...</source> @@ -619,7 +618,7 @@ </message> <message> <source>Enable or disable remote desktop (RDP) connections to this machine</source> - <translation type="obsolete">Habilita o inhabilita les connexions d'escriptori remot (RDP) a aquesta mà quina</translation> + <translation type="obsolete">Habilita o inhabilita les connexions d'escriptori remot (RDP) a aquesta mà quina</translation> </message> <message> <source>&Install Guest Additions...</source> @@ -627,7 +626,7 @@ </message> <message> <source>Mount the Guest Additions installation image</source> - <translation>Munta la imatge d'instal·lació de les Guest Additions</translation> + <translation>Munta la imatge d'instal·lació de les Guest Additions</translation> </message> <message> <source>De&bug</source> @@ -641,12 +640,12 @@ <message> <source>&Command Line...</source> <comment>debug action</comment> - <translation>&LÃnia d'ordres...</translation> + <translation>&LÃnia d'ordres...</translation> </message> <message> <source>&Logging...</source> <comment>debug action</comment> - <translation type="obsolete">&S'està connectant...</translation> + <translation type="obsolete">&S'està connectant...</translation> </message> <message> <source>&Help</source> @@ -662,7 +661,7 @@ </message> <message> <source>Show Application Icon</source> - <translation>Mostra la icona de l'aplicació</translation> + <translation>Mostra la icona de l'aplicació</translation> </message> <message> <source>Enter &Fullscreen Mode</source> @@ -702,7 +701,7 @@ </message> <message> <source>Enable remote desktop (RDP) connections to this machine</source> - <translation>Habilita les connexions d'escriptori remot (RDP) en aquesta mà quina</translation> + <translation>Habilita les connexions d'escriptori remot (RDP) en aquesta mà quina</translation> </message> <message> <source>&Disable Remote Display</source> @@ -710,17 +709,17 @@ </message> <message> <source>Disable remote desktop (RDP) connections to this machine</source> - <translation type="obsolete">Inhabilita les connexions d'escriptori remot (RDP) en aquesta mà quina</translation> + <translation type="obsolete">Inhabilita les connexions d'escriptori remot (RDP) en aquesta mà quina</translation> </message> <message> <source>Enable &Logging...</source> <comment>debug action</comment> - <translation>Activa l'&enregistrament...</translation> + <translation>Activa l'&enregistrament...</translation> </message> <message> <source>Disable &Logging...</source> <comment>debug action</comment> - <translation type="obsolete">Desactiva l'&enregistrament...</translation> + <translation type="obsolete">Desactiva l'&enregistrament...</translation> </message> <message> <source>Switch to &Fullscreen</source> @@ -736,7 +735,7 @@ </message> <message> <source>Switch between normal and seamless desktop integration mode</source> - <translation>Canvia entre el mode normal i el d'integració de l'escriptori fluid</translation> + <translation>Canvia entre el mode normal i el d'integració de l'escriptori fluid</translation> </message> <message> <source>Switch to &Scale Mode</source> @@ -805,7 +804,7 @@ <message> <source>Boot Order</source> <comment>details report</comment> - <translation>Ordre d'arrencada</translation> + <translation>Ordre d'arrencada</translation> </message> <message> <source>ACPI</source> @@ -865,12 +864,12 @@ <message> <source>Remote Desktop Server Port</source> <comment>details report (VRDE Server)</comment> - <translation>Port del servidor d'escriptori remot (RDP)</translation> + <translation>Port del servidor d'escriptori remot (RDP)</translation> </message> <message> <source>Remote Desktop Server</source> <comment>details report (VRDE Server)</comment> - <translation>Servidor d'escriptori remot</translation> + <translation>Servidor d'escriptori remot</translation> </message> <message> <source>Disabled</source> @@ -907,19 +906,19 @@ <translation>Adaptador pont, %1</translation> </message> <message> - <source>Internal network, '%1'</source> + <source>Internal network, '%1'</source> <comment>details report (network)</comment> - <translation>Xarxa interna, '%1'</translation> + <translation>Xarxa interna, '%1'</translation> </message> <message> - <source>Host-only adapter, '%1'</source> + <source>Host-only adapter, '%1'</source> <comment>details report (network)</comment> - <translation>Adaptador de només l'amfitrió, '%1'</translation> + <translation>Adaptador de només l'amfitrió, '%1'</translation> </message> <message> - <source>VDE network, '%1'</source> + <source>VDE network, '%1'</source> <comment>details report (network)</comment> - <translation>Xarxa VDE, '%1'</translation> + <translation>Xarxa VDE, '%1'</translation> </message> <message> <source>Adapter %1</source> @@ -983,7 +982,7 @@ </message> <message> <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source> - <translation><i>No es pot accedir</i> a la mà quina virtual seleccionada. Comproveu el missatge d'error que es mostra i premeu el botó <b>Actualitza</b> si voleu tornar a comprovar l'accessibilitat:</translation> + <translation><i>No es pot accedir</i> a la mà quina virtual seleccionada. Comproveu el missatge d'error que es mostra i premeu el botó <b>Actualitza</b> si voleu tornar a comprovar l'accessibilitat:</translation> </message> <message> <source>General</source> @@ -1054,7 +1053,7 @@ </message> <message> <source>Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr></source> - <translation type="obsolete">S'està baixant la imatge del CD de les Guest Additions del VirtualBox des de <nobr><b>%1</b>...</nobr></translation> + <translation type="obsolete">S'està baixant la imatge del CD de les Guest Additions del VirtualBox des de <nobr><b>%1</b>...</nobr></translation> </message> <message> <source>Cancel the VirtualBox Guest Additions CD image download</source> @@ -1074,15 +1073,15 @@ </message> <message> <source>Connection timed out.</source> - <translation type="obsolete">S'ha excedit el temps d'espera de la connexió.</translation> + <translation type="obsolete">S'ha excedit el temps d'espera de la connexió.</translation> </message> <message> <source>The download process has been cancelled by the user.</source> - <translation type="obsolete">L'usuari ha cancel·lat el procés de baixada.</translation> + <translation type="obsolete">L'usuari ha cancel·lat el procés de baixada.</translation> </message> <message> <source>The download process has been canceled by the user.</source> - <translation></translation> + <translation>L'usuari ha cancel·lat el procés de baixada.</translation> </message> </context> <context> @@ -1093,7 +1092,7 @@ </message> <message> <source>Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr></source> - <translation type="obsolete">S'està baixant la imatge de les Guest Additions del VirtualBox des de <nobr><b>%1</b>...</nobr></translation> + <translation type="obsolete">S'està baixant la imatge de les Guest Additions del VirtualBox des de <nobr><b>%1</b>...</nobr></translation> </message> <message> <source>Cancel the VirtualBox Guest Additions CD image download</source> @@ -1101,7 +1100,7 @@ </message> <message> <source><p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p></source> - <translation><p>No s'ha pogut desar el fitxer baixat com a <nobr><b>%1</b>.</nobr></p></translation> + <translation><p>No s'ha pogut desar el fitxer baixat com a <nobr><b>%1</b>.</nobr></p></translation> </message> <message> <source>Select folder to save Guest Additions image to</source> @@ -1112,14 +1111,14 @@ <name>UIDownloaderUserManual</name> <message> <source>Select folder to save User Manual to</source> - <translation>Seleccioneu la carpeta on es desarà el manual de l'usuari</translation> + <translation>Seleccioneu la carpeta on es desarà el manual de l'usuari</translation> </message> </context> <context> <name>UIExportApplianceWzd</name> <message> <source>Select a file to export into</source> - <translation type="obsolete">Seleccioneu un fitxer al qual s'exportarà </translation> + <translation type="obsolete">Seleccioneu un fitxer al qual s'exportarà </translation> </message> <message> <source>Open Virtualization Format (%1)</source> @@ -1131,31 +1130,31 @@ </message> <message> <source>Exporting Appliance ...</source> - <translation type="obsolete">S'està exportant l'aplicació virtual...</translation> + <translation type="obsolete">S'està exportant l'aplicació virtual...</translation> </message> <message> <source>Appliance Export Wizard</source> - <translation>Auxiliar d'exportació d'aplicació virtuals</translation> + <translation>Auxiliar d'exportació d'aplicació virtuals</translation> </message> <message> <source>Welcome to the Appliance Export Wizard!</source> - <translation type="obsolete">Benvingut a l'assistent d'exportació d'aplicacions virtuals!</translation> + <translation type="obsolete">Benvingut a l'assistent d'exportació d'aplicacions virtuals!</translation> </message> <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This wizard will guide you through the process of exporting an appliance. </p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Use the <span style=" font-weight:600;">Next</span> button to go the next page of the wizard and the <span style=" font-weight:600;">Back</span> button to return to the previous page.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please select the virtual machines that you wish to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></body></html></source> - <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This wizard will guide you through the process of exporting an appliance. </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Use the <span style=" font-weight:600;">Next</span> button to go the next page of the wizard and the <span style=" font-weight:600;">Back</span> button to return to the previous page.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please select the virtual machines that you wish to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></body></html></source> + <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Aquest assitent us guiarà durant el procés d'exportació d'una aplicació virtual. </p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Feu servir el botó <span style=" font-weight:600;">Següent</span> per anar a la següent pà gina de l'assistent i el botó <span style=" font-weight:600;">Enrere</span> per anar a la pà gina prèvia.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Seleccioneu les mà quines virtuals que s'haurien d'exportar a l'aplicació virtual. En podeu seleccionar més d'una. Tingueu en compte que aquestes mà quines han d'estar aturades per tal que puguin importar-se.</p></body></html></translation> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Aquest assitent us guiarà durant el procés d'exportació d'una aplicació virtual. </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Feu servir el botó <span style=" font-weight:600;">Següent</span> per anar a la següent pà gina de l'assistent i el botó <span style=" font-weight:600;">Enrere</span> per anar a la pà gina prèvia.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Seleccioneu les mà quines virtuals que s'haurien d'exportar a l'aplicació virtual. En podeu seleccionar més d'una. Tingueu en compte que aquestes mà quines han d'estar aturades per tal que puguin importar-se.</p></body></html></translation> </message> <message> <source>< &Back</source> @@ -1171,7 +1170,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Appliance Export Settings</source> - <translation type="obsolete">Parà metres d'exportació de l'aplicació virtual</translation> + <translation type="obsolete">Parà metres d'exportació de l'aplicació virtual</translation> </message> <message> <source>Here you can change additional configuration values of the selected virtual machines. You can modify most of the properties shown by double-clicking on the items.</source> @@ -1183,7 +1182,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Please specify a filename into which the appliance information will be written. Currently VirtualBox supports the Open Virtualization Format (OVF).</source> - <translation type="obsolete">Especifiqueu un nom de fitxer a dins del qual s'escriurà la informació de l'aplicació virtual. Actualment el VirtualBox suporta el format obert de virtualització (OVF).</translation> + <translation type="obsolete">Especifiqueu un nom de fitxer a dins del qual s'escriurà la informació de l'aplicació virtual. Actualment el VirtualBox suporta el format obert de virtualització (OVF).</translation> </message> <message> <source>Write in legacy OVF 0.9 format for compatibility with other virtualization products.</source> @@ -1199,27 +1198,27 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Please choose a filename to export the OVF to.</source> - <translation type="obsolete">Seleccioneu un nom de fitxer al qual exportar l'OVF.</translation> + <translation type="obsolete">Seleccioneu un nom de fitxer al qual exportar l'OVF.</translation> </message> <message> <source>Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target.</source> - <translation type="obsolete">Ompliu els camps addicionals com el nom d'usuari, conrasenya i el contenidor. Després haureu de proveir un nom de fitxer a l'objectiu de l'OVF.</translation> + <translation type="obsolete">Ompliu els camps addicionals com el nom d'usuari, conrasenya i el contenidor. Després haureu de proveir un nom de fitxer a l'objectiu de l'OVF.</translation> </message> <message> <source>Please complete the additional fields like the username, password, hostname and the bucket, and provide a filename for the OVF target.</source> - <translation type="obsolete">Completeu els camps addicionals com el nom d'usuari, la contrasenya, el nom de l'amfitrió i el contenidor. Després haureu de proveir un nom de fitxer a l'objectiu de l'OVF.</translation> + <translation type="obsolete">Completeu els camps addicionals com el nom d'usuari, la contrasenya, el nom de l'amfitrió i el contenidor. Després haureu de proveir un nom de fitxer a l'objectiu de l'OVF.</translation> </message> <message> <source>Checking files ...</source> - <translation type="obsolete">S'estan comprovant els fitxers...</translation> + <translation type="obsolete">S'estan comprovant els fitxers...</translation> </message> <message> <source>Removing files ...</source> - <translation type="obsolete">S'estan eliminant els fitxers...</translation> + <translation type="obsolete">S'estan eliminant els fitxers...</translation> </message> <message> <source>Please specify the target for the OVF export. You can choose between a local file system export, uploading the OVF to the Sun Cloud service or an S3 storage server.</source> - <translation type="obsolete">Especifiqueu l'objectiu per a l'exportació OVF. Podeu triar entre una exportació del sistema a fitxer local, pujar l'OVF al servei Sun Cloud o en un servidor d'emmagatzamatge S3.</translation> + <translation type="obsolete">Especifiqueu l'objectiu per a l'exportació OVF. Podeu triar entre una exportació del sistema a fitxer local, pujar l'OVF al servei Sun Cloud o en un servidor d'emmagatzamatge S3.</translation> </message> <message> <source>&Local Filesystem </source> @@ -1231,11 +1230,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Simple Storage System (S3)</source> - <translation type="obsolete">&Sistema d'emmagatzematge simple (S3)</translation> + <translation type="obsolete">&Sistema d'emmagatzematge simple (S3)</translation> </message> <message> <source>&Username:</source> - <translation type="obsolete">Nom d'&usuari:</translation> + <translation type="obsolete">Nom d'&usuari:</translation> </message> <message> <source>&Password:</source> @@ -1251,18 +1250,18 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Hostname:</source> - <translation type="obsolete">&Nom de l'amfitrió:</translation> + <translation type="obsolete">&Nom de l'amfitrió:</translation> </message> </context> <context> <name>UIExportApplianceWzdPage1</name> <message> <source>Welcome to the Appliance Export Wizard!</source> - <translation>Benvingut a l'auxiliar d'exportació d'aplicacions virtuals!</translation> + <translation>Benvingut a l'auxiliar d'exportació d'aplicacions virtuals!</translation> </message> <message> <source><p>This wizard will guide you through the process of exporting an appliance.</p><p>%1</p><p>Please select the virtual machines that should be added to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></source> - <translation><p>Aquest auxiliar us guiarà a través del procés d'exportació d'una aplicació.</p><p>%1</p><p>Seleccioneu les mà quines virtuals que voleu afegir a l'aplicació. Podeu seleccionar-ne més d'una. Tingueu en compte que aquestes mà quines han d'estar apagades abans ue puguin ser exportades.</p></translation> + <translation><p>Aquest auxiliar us guiarà a través del procés d'exportació d'una aplicació.</p><p>%1</p><p>Seleccioneu les mà quines virtuals que voleu afegir a l'aplicació. Podeu seleccionar-ne més d'una. Tingueu en compte que aquestes mà quines han d'estar apagades abans ue puguin ser exportades.</p></translation> </message> </context> <context> @@ -1273,11 +1272,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Appliance Export Settings</source> - <translation>Parà metres d'exportació de l'aplicació virtual</translation> + <translation>Parà metres d'exportació de l'aplicació virtual</translation> </message> <message> <source>Please specify the target for the OVF export. You can choose between a local file system export, uploading the OVF to the Sun Cloud service or an S3 storage server.</source> - <translation>Especifiqueu l'objectiu per a l'exportació OVF. Podeu triar entre una exportació del sistema a fitxer local, pujar l'OVF al servei Sun Cloud o en un servidor d'emmagatzamatge S3.</translation> + <translation>Especifiqueu l'objectiu per a l'exportació OVF. Podeu triar entre una exportació del sistema a fitxer local, pujar l'OVF al servei Sun Cloud o en un servidor d'emmagatzamatge S3.</translation> </message> <message> <source>&Local Filesystem </source> @@ -1289,14 +1288,14 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Simple Storage System (S3)</source> - <translation>&Sistema senzill d'emmagatzematge (S3)</translation> + <translation>&Sistema senzill d'emmagatzematge (S3)</translation> </message> </context> <context> <name>UIExportApplianceWzdPage3</name> <message> <source>Please specify the target for the OVF export. You can choose between a local file system export, uploading the OVF to the Sun Cloud service or an S3 storage server.</source> - <translation type="obsolete">Especifiqueu l'objectiu per a l'exportació OVF. Podeu triar entre una exportació del sistema a fitxer local, pujar l'OVF al servei Sun Cloud o en un servidor d'emmagatzamatge S3.</translation> + <translation type="obsolete">Especifiqueu l'objectiu per a l'exportació OVF. Podeu triar entre una exportació del sistema a fitxer local, pujar l'OVF al servei Sun Cloud o en un servidor d'emmagatzamatge S3.</translation> </message> <message> <source>&Local Filesystem </source> @@ -1308,15 +1307,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Simple Storage System (S3)</source> - <translation type="obsolete">&Sistema d'emmagatzematge senzill (S3)</translation> + <translation type="obsolete">&Sistema d'emmagatzematge senzill (S3)</translation> </message> <message> <source>Appliance Export Settings</source> - <translation>Parà metres d'exportació de l'aplicació virtual</translation> + <translation>Parà metres d'exportació de l'aplicació virtual</translation> </message> <message> <source>&Username:</source> - <translation>Nom d'&usuari:</translation> + <translation>Nom d'&usuari:</translation> </message> <message> <source>&Password:</source> @@ -1324,7 +1323,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Hostname:</source> - <translation>&Nom de l'amfitrió:</translation> + <translation>&Nom de l'amfitrió:</translation> </message> <message> <source>&Bucket:</source> @@ -1344,7 +1343,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Create a Manifest file for automatic data integrity checks on import.</source> - <translation>Crea un fitxer de manifest per a la comprovació automà tica d'integritat de les dades en importar.</translation> + <translation>Crea un fitxer de manifest per a la comprovació automà tica d'integritat de les dades en importar.</translation> </message> <message> <source>Write &Manifest file</source> @@ -1356,7 +1355,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Select a file to export into</source> - <translation>Seleccioneu un fitxer al qual s'exportarà </translation> + <translation>Seleccioneu un fitxer al qual s'exportarà </translation> </message> <message> <source>Open Virtualization Format Archive (%1)</source> @@ -1368,22 +1367,22 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Please choose a filename to export the OVF/OVA to. If you use an <i>ova</i> file name extension, then all the files will be combined into one Open Virtualization Format Archive. If you use an <i>ovf</i> extension, several files will be written separately. Other extensions are not allowed.</source> - <translation>Seleccioneu un fitxer al qual s'exportarà l'OVF/OVA. Si feu servir una extensió de fitxer <i>ova</i>, aleshores tots els fitxers es combinaran en un arxiu Open Virtualization Format. Si feu servir una extensió <i>ovf</i>, molts fitxers s'escriuran per separat. Nos es permeten altres extensions.</translation> + <translation>Seleccioneu un fitxer al qual s'exportarà l'OVF/OVA. Si feu servir una extensió de fitxer <i>ova</i>, aleshores tots els fitxers es combinaran en un arxiu Open Virtualization Format. Si feu servir una extensió <i>ovf</i>, molts fitxers s'escriuran per separat. Nos es permeten altres extensions.</translation> </message> <message> <source>Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target.</source> - <translation>Completeu els camps addicionals com el nom d'usuari, contraseny i el contenidor i proveiu un nom de fitxer per a l'objectiu OVF.</translation> + <translation>Completeu els camps addicionals com el nom d'usuari, contraseny i el contenidor i proveiu un nom de fitxer per a l'objectiu OVF.</translation> </message> <message> <source>Please complete the additional fields like the username, password, hostname and the bucket, and provide a filename for the OVF target.</source> - <translation>Completeu els camps addicionals com el nom d'usuari, la contrasenya, el nom de l'amfitrió i el contenidor i proveiu un nom de fitxer per a l'objectiu OVF.</translation> + <translation>Completeu els camps addicionals com el nom d'usuari, la contrasenya, el nom de l'amfitrió i el contenidor i proveiu un nom de fitxer per a l'objectiu OVF.</translation> </message> </context> <context> <name>UIExportApplianceWzdPage4</name> <message> <source>&Username:</source> - <translation type="obsolete">Nom d'&usuari:</translation> + <translation type="obsolete">Nom d'&usuari:</translation> </message> <message> <source>&Password:</source> @@ -1391,7 +1390,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Hostname:</source> - <translation type="obsolete">&Nom de l'amfitrió:</translation> + <translation type="obsolete">&Nom de l'amfitrió:</translation> </message> <message> <source>&Bucket:</source> @@ -1411,7 +1410,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Appliance Export Settings</source> - <translation>Parà metres d'exportació de l'aplicació virtual</translation> + <translation>Parà metres d'exportació de l'aplicació virtual</translation> </message> <message> <source>Appliance</source> @@ -1419,7 +1418,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Select a file to export into</source> - <translation type="obsolete">Seleccioneu un fitxer al qual s'exportarà </translation> + <translation type="obsolete">Seleccioneu un fitxer al qual s'exportarà </translation> </message> <message> <source>Open Virtualization Format (%1)</source> @@ -1427,27 +1426,27 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Please choose a filename to export the OVF to.</source> - <translation type="obsolete">Seleccioneu un nom de fitxer al qual exportar l'OVF.</translation> + <translation type="obsolete">Seleccioneu un nom de fitxer al qual exportar l'OVF.</translation> </message> <message> <source>Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target.</source> - <translation type="obsolete">Ompliu els camps addicionals com el nom d'usuari, conrasenya i el contenidor i proveïu un nom de fitxer a l'objectiu de l'OVF.</translation> + <translation type="obsolete">Ompliu els camps addicionals com el nom d'usuari, conrasenya i el contenidor i proveïu un nom de fitxer a l'objectiu de l'OVF.</translation> </message> <message> <source>Please complete the additional fields like the username, password, hostname and the bucket, and provide a filename for the OVF target.</source> - <translation type="obsolete">Completeu els camps addicionals com el nom d'usuari, la contrasenya, el nom de l'amfitrió i el contenidor i proveïu un nom de fitxer a l'objectiu de l'OVF.</translation> + <translation type="obsolete">Completeu els camps addicionals com el nom d'usuari, la contrasenya, el nom de l'amfitrió i el contenidor i proveïu un nom de fitxer a l'objectiu de l'OVF.</translation> </message> <message> <source>Checking files ...</source> - <translation>S'estan comprovant els fitxers...</translation> + <translation>S'estan comprovant els fitxers...</translation> </message> <message> <source>Removing files ...</source> - <translation>S'estan eliminant els fitxers...</translation> + <translation>S'estan eliminant els fitxers...</translation> </message> <message> <source>Exporting Appliance ...</source> - <translation>S'està exportant l'aplicació virtual...</translation> + <translation>S'està exportant l'aplicació virtual...</translation> </message> <message> <source>Here you can change additional configuration values of the selected virtual machines. You can modify most of the properties shown by double-clicking on the items.</source> @@ -1466,7 +1465,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>First Run Wizard</source> - <translation>Executa l'auxiliar d'inici</translation> + <translation>Executa l'auxiliar d'inici</translation> </message> <message> <source>Floppy Device</source> @@ -1486,7 +1485,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Image File</source> - <translation type="obsolete">Fitxer d'&imatge</translation> + <translation type="obsolete">Fitxer d'&imatge</translation> </message> <message> <source>Media Source</source> @@ -1502,15 +1501,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p><p>Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p><p>Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <b>Unmount...</b> action in the <b>Devices</b> menu.</p></source> - <translation type="obsolete"><p>Si el que hi ha a continuació és correcte, premeu el botó <b>Finalitza</b>. Quan el premeu, el dispositiu seleccionat es muntarà a la mà quina virtual.</p><p>Tingueu en compte que quan tanqueu la mà quina virtual, el dispositiu especificat es desmuntarà automà ticament i el dispositiu d'inici tornarà a ser el primer disc d'arrencada.</p><p>Segons el tipus del programa de configuració, necessitareu desmuntar manualment (expulsar) el dispositiu una vegada que el programa de configuració haja reiniciat la mà quina virtual, per tal de prevenir que s'iniciï novament el procès d'instal·lació. Podeu fer axiò seleccionat l'acció corresponent <b>Desmunta...</b> al menú <b>Dispositius.</b></translation> + <translation type="obsolete"><p>Si el que hi ha a continuació és correcte, premeu el botó <b>Finalitza</b>. Quan el premeu, el dispositiu seleccionat es muntarà a la mà quina virtual.</p><p>Tingueu en compte que quan tanqueu la mà quina virtual, el dispositiu especificat es desmuntarà automà ticament i el dispositiu d'inici tornarà a ser el primer disc d'arrencada.</p><p>Segons el tipus del programa de configuració, necessitareu desmuntar manualment (expulsar) el dispositiu una vegada que el programa de configuració haja reiniciat la mà quina virtual, per tal de prevenir que s'iniciï novament el procès d'instal·lació. Podeu fer axiò seleccionat l'acció corresponent <b>Desmunta...</b> al menú <b>Dispositius.</b></translation> </message> <message> <source><p>Select the media that contains the operating system you want to work with. This media must be bootable, otherwise the operating system will not be able to start.</p></source> - <translation type="obsolete"><p>Seleccioneu el suport que conté el sistema operatiu amb el qual voleu treballar. Aquest suport ha d'ésser arrencable, en altre cas el sistema no podrà iniciar-se.</p></translation> + <translation type="obsolete"><p>Seleccioneu el suport que conté el sistema operatiu amb el qual voleu treballar. Aquest suport ha d'ésser arrencable, en altre cas el sistema no podrà iniciar-se.</p></translation> </message> <message> <source><p>Select the media which contains the setup program of the operating system you want to install. This media must be bootable, otherwise the setup program will not be able to start.</p></source> - <translation type="obsolete"><p>Seleccioneu el suport que conté el programa de configuració del sistema operatiu amb el qual voleu treballar. Aquest suport ha d'ésser arrencable, en altre cas el sistema no podrà iniciar-se.</p></translation> + <translation type="obsolete"><p>Seleccioneu el suport que conté el programa de configuració del sistema operatiu amb el qual voleu treballar. Aquest suport ha d'ésser arrencable, en altre cas el sistema no podrà iniciar-se.</p></translation> </message> <message> <source><p>Select the type of media you would like to use for booting an operating system.</p></source> @@ -1530,15 +1529,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for booting an operating system of your choice on the virtual machine.</p><p>Note that you will not be able to install an operating system into this virtual machine right now because you did not attach any hard disk to it. If this is not what you want, you can cancel the execution of this wizard, select <b>Settings</b> from the <b>Machine</b> menu of the main VirtualBox window to access the settings dialog of this machine and change the hard disk configuration.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page. You can also press <b>Cancel</b> if you want to cancel the execution of this wizard.</p></source> - <translation type="obsolete"><p>Heu iniciat un nova mà quina virtual per primera vegada. Aquest assistent us ajudarà a dur a terme els passos necessaris per iniciar un sistema operatiu de la vostra elecció a la mà quina virtual.</p><p>Tingueu en compte que no podeu instal·lar un sistema operatiu a dins d'aquesta mà quina virtual en aquest moment perquè encara no heu seleccionat un disc. Si això no és el que voleu, podeu cancel·lar l'execució d'aquest assistent, seleccioneu <b>Parà metres</b> des del menú <b>Mà quina</b> de la finestra principal del VirtualBox per accedir al dià leg de configuració d'aquest mà quina i canviar la configuració de disc.</p><p>Feu servir el botó <b>Següent</b> per continuar amb la següent pà gina de l'assistent i el botó <b>Enrere</b> per tornar a la pà gina anterior. Podeu prémer també <b>Cancel·la</b> si voleu cancel·lar l'execució d'aquest assistent.</p></translation> + <translation type="obsolete"><p>Heu iniciat un nova mà quina virtual per primera vegada. Aquest assistent us ajudarà a dur a terme els passos necessaris per iniciar un sistema operatiu de la vostra elecció a la mà quina virtual.</p><p>Tingueu en compte que no podeu instal·lar un sistema operatiu a dins d'aquesta mà quina virtual en aquest moment perquè encara no heu seleccionat un disc. Si això no és el que voleu, podeu cancel·lar l'execució d'aquest assistent, seleccioneu <b>Parà metres</b> des del menú <b>Mà quina</b> de la finestra principal del VirtualBox per accedir al dià leg de configuració d'aquest mà quina i canviar la configuració de disc.</p><p>Feu servir el botó <b>Següent</b> per continuar amb la següent pà gina de l'assistent i el botó <b>Enrere</b> per tornar a la pà gina anterior. Podeu prémer també <b>Cancel·la</b> si voleu cancel·lar l'execució d'aquest assistent.</p></translation> </message> <message> <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for installing an operating system of your choice onto this virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page. You can also press <b>Cancel</b> if you want to cancel the execution of this wizard.</p></source> - <translation type="obsolete"><p>Heu iniciat un nova mà quina virtual per primera vegada. Aquest assistent us ajudarà a dur a terme els passos necessaris per iniciar un sistema operatiu de la vostra elecció a la mà quina virtual.</p><p>Feu servir el botó <b>Següent</b> per continuar amb la següent pà gina de l'assistent i el botó <b>Enrere</b> per tornar a la pà gina anterior. Podeu prémer també <b>Cancel·la</b> si voleu cancel·lar l'execució d'aquest assistent.</p></translation> + <translation type="obsolete"><p>Heu iniciat un nova mà quina virtual per primera vegada. Aquest assistent us ajudarà a dur a terme els passos necessaris per iniciar un sistema operatiu de la vostra elecció a la mà quina virtual.</p><p>Feu servir el botó <b>Següent</b> per continuar amb la següent pà gina de l'assistent i el botó <b>Enrere</b> per tornar a la pà gina anterior. Podeu prémer també <b>Cancel·la</b> si voleu cancel·lar l'execució d'aquest assistent.</p></translation> </message> <message> <source>Select Installation Media</source> - <translation type="obsolete">Selecciona el suport d'instal·lació</translation> + <translation type="obsolete">Selecciona el suport d'instal·lació</translation> </message> <message> <source>Summary</source> @@ -1554,7 +1553,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Welcome to the First Run Wizard!</source> - <translation type="obsolete">Benvingut a l'auxiliar d'inici!</translation> + <translation type="obsolete">Benvingut a l'auxiliar d'inici!</translation> </message> <message> <source>< &Back</source> @@ -1565,13 +1564,13 @@ p, li { white-space: pre-wrap; } <translation type="obsolete">&Següent ></translation> </message> <message> - <source><html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <source><html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If the above is correct, press the <span style=" font-weight:600;">Finish</span> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <span style=" font-weight:600;">Unmount...</span> action in the <span style=" font-weight:600;">Devices</span> menu<span style=" font-weight:600;">.</span></p></body></html></source> - <translation type="obsolete"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Si el que posa amunt és correcte, premeu sobre <span style=" font-weight:600;">Finalitza</span>. Una vegada que premeu el botó, el dispositiu seleccionat es muntarà temporalment a la mà quina virtual i començarà l'execució..</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Tingueu en compte que quan tanqueu la mà quina virtual, el dispositiu s'expulsarà automà ticament.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Segons el tipus de programa de configuració, potser necessitareu expulsar manualment el dispositiu després que la mà quina virtual es torni a iniciar per tal que el procés d'instal·lació s'iniciï novament. Podeu fer això seleccionant l'acció corresponent <span style=" font-weight:600;">Expulsa...</span> al menú <span style=" font-weight:600;">Dispositius</span><span style=" font-weight:600;">.</span></p></body></html></translation> +</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If the above is correct, press the <span style=" font-weight:600;">Finish</span> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <span style=" font-weight:600;">Unmount...</span> action in the <span style=" font-weight:600;">Devices</span> menu<span style=" font-weight:600;">.</span></p></body></html></source> + <translation type="obsolete"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Si el que posa amunt és correcte, premeu sobre <span style=" font-weight:600;">Finalitza</span>. Una vegada que premeu el botó, el dispositiu seleccionat es muntarà temporalment a la mà quina virtual i començarà l'execució..</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Tingueu en compte que quan tanqueu la mà quina virtual, el dispositiu s'expulsarà automà ticament.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Segons el tipus de programa de configuració, potser necessitareu expulsar manualment el dispositiu després que la mà quina virtual es torni a iniciar per tal que el procés d'instal·lació s'iniciï novament. Podeu fer això seleccionant l'acció corresponent <span style=" font-weight:600;">Expulsa...</span> al menú <span style=" font-weight:600;">Dispositius</span><span style=" font-weight:600;">.</span></p></body></html></translation> </message> <message> <source>&Finish</source> @@ -1596,7 +1595,7 @@ p, li { white-space: pre-wrap; } <name>UIFirstRunWzdPage1</name> <message> <source>Welcome to the First Run Wizard!</source> - <translation>Benvingut a l'auxiliar d'inici!</translation> + <translation>Benvingut a l'auxiliar d'inici!</translation> </message> <message> <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for installing an operating system of your choice onto this virtual machine.</p><p>%1</p></source> @@ -1604,18 +1603,18 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for booting an operating system of your choice on the virtual machine.</p><p>Note that you will not be able to install an operating system into this virtual machine right now because you did not attach any hard disk to it. If this is not what you want, you can cancel the execution of this wizard, select <b>Settings</b> from the <b>Machine</b> menu of the main VirtualBox window to access the settings dialog of this machine and change the hard disk configuration.</p><p>%1</p></source> - <translation><p>Heu iniciat una mà quina virtual nova per primera vegada. Aquest auxiliar us ajudarà a dur a terme els passos necessaris per a iniciar un sistema operatiu de la vostra elecció a la mà quina virtual.</p><p>Tingueu en compte que no podreu instal·lar un sistema operatiu en aquesta mà quina virtual ara mateix ja que no teniu cap disc dur adjuntat. Si això no és el que voleu, podeu cancel·lar l'execució d'aquest auxiliar, seleccioneu <b>Parà metres</b> al menú <b>Mà quina</b> de la finestra principal del Virtualbox per accedir al dià leg de preferències d'aquesta mà quina i canviar la configuració del disc dur.</p><p>%1</p></translation> + <translation><p>Heu iniciat una mà quina virtual nova per primera vegada. Aquest auxiliar us ajudarà a dur a terme els passos necessaris per a iniciar un sistema operatiu de la vostra elecció a la mà quina virtual.</p><p>Tingueu en compte que no podreu instal·lar un sistema operatiu en aquesta mà quina virtual ara mateix ja que no teniu cap disc dur adjuntat. Si això no és el que voleu, podeu cancel·lar l'execució d'aquest auxiliar, seleccioneu <b>Parà metres</b> al menú <b>Mà quina</b> de la finestra principal del Virtualbox per accedir al dià leg de preferències d'aquesta mà quina i canviar la configuració del disc dur.</p><p>%1</p></translation> </message> </context> <context> <name>UIFirstRunWzdPage2</name> <message> <source><p>Select the media which contains the setup program of the operating system you want to install. This media must be bootable, otherwise the setup program will not be able to start.</p></source> - <translation><p>Seleccioneu el suport que conté el programa de configuració del sistema operatiu amb el qual voleu treballar. Aquest suport ha d'ésser arrencable, d'altra manera el sistema no podrà iniciar-se.</p></translation> + <translation><p>Seleccioneu el suport que conté el programa de configuració del sistema operatiu amb el qual voleu treballar. Aquest suport ha d'ésser arrencable, d'altra manera el sistema no podrà iniciar-se.</p></translation> </message> <message> <source><p>Select the media that contains the operating system you want to work with. This media must be bootable, otherwise the operating system will not be able to start.</p></source> - <translation><p>Seleccioneu el suport que conté el sistema operatiu amb el qual voleu treballar. Aquest suport ha d'ésser arrencable, d'altra manera el sistema no podrà iniciar-se.</p></translation> + <translation><p>Seleccioneu el suport que conté el sistema operatiu amb el qual voleu treballar. Aquest suport ha d'ésser arrencable, d'altra manera el sistema no podrà iniciar-se.</p></translation> </message> <message> <source>Media Source</source> @@ -1623,7 +1622,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Select Installation Media</source> - <translation>Selecciona el suport d'instal·lació</translation> + <translation>Selecciona el suport d'instal·lació</translation> </message> </context> <context> @@ -1638,7 +1637,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p><p>Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p><p>Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <b>Unmount...</b> action in the <b>Devices</b> menu.</p></source> - <translation><p>Si el que hi ha a continuació és correcte, premeu el botó <b>Finalitza</b>. Quan el premeu, el dispositiu seleccionat es muntarà a la mà quina virtual.</p><p>Tingueu en compte que quan tanqueu la mà quina virtual, el dispositiu especificat es desmuntarà automà ticament i el dispositiu d'inici tornarà a ser el primer disc d'arrencada.</p><p>Segons el tipus del programa de configuració, necessitareu desmuntar manualment (expulsar) el dispositiu una vegada que el programa de configuració haja reiniciat la mà quina virtual, per tal de prevenir que s'iniciï novament el procès d'instal·lació. Podeu fer axiò seleccionat l'acció corresponent <b>Desmunta...</b> al menú <b>Dispositius.</b></p></translation> + <translation><p>Si el que hi ha a continuació és correcte, premeu el botó <b>Finalitza</b>. Quan el premeu, el dispositiu seleccionat es muntarà a la mà quina virtual.</p><p>Tingueu en compte que quan tanqueu la mà quina virtual, el dispositiu especificat es desmuntarà automà ticament i el dispositiu d'inici tornarà a ser el primer disc d'arrencada.</p><p>Segons el tipus del programa de configuració, necessitareu desmuntar manualment (expulsar) el dispositiu una vegada que el programa de configuració haja reiniciat la mà quina virtual, per tal de prevenir que s'iniciï novament el procès d'instal·lació. Podeu fer axiò seleccionat l'acció corresponent <b>Desmunta...</b> al menú <b>Dispositius.</b></p></translation> </message> <message> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be mounted on the virtual machine and the machine will start execution.</p></source> @@ -1691,7 +1690,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Extensions</source> - <translation></translation> + <translation>Extensions</translation> </message> <message> <source>VirtualBox - %1</source> @@ -1702,7 +1701,7 @@ p, li { white-space: pre-wrap; } <name>UIGlobalSettingsExtension</name> <message> <source>&Extension Packages:</source> - <translation>Paquets d'&extensions:</translation> + <translation>Paquets d'&extensions:</translation> </message> <message> <source>Lists all installed packages.</source> @@ -1730,26 +1729,26 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Select an extension package file</source> - <translation>Seleccioneu un fitxer de paquet d'extensions</translation> + <translation>Seleccioneu un fitxer de paquet d'extensions</translation> </message> <message> <source>Extension package files (%1)</source> - <translation>Fitxers de paquet d'extensions (%1)</translation> + <translation>Fitxers de paquet d'extensions (%1)</translation> </message> </context> <context> <name>UIGlobalSettingsGeneral</name> <message> <source>Displays the path to the default VDI folder. This folder is used, if not explicitly specified otherwise, when adding existing or creating new virtual hard disks.</source> - <translation type="obsolete">Mostra la ruta cap a la carpeta de fitxers VDI predeterminada. S'usa aquesta carpeta, si no se n'especifica explÃcitament una altra, quan s'afegeix o es crea un disc virtual.</translation> + <translation type="obsolete">Mostra la ruta cap a la carpeta de fitxers VDI predeterminada. S'usa aquesta carpeta, si no se n'especifica explÃcitament una altra, quan s'afegeix o es crea un disc virtual.</translation> </message> <message> <source>Displays the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines.</source> - <translation>Mostra el camà cap a la carpeta de mà quines virtuals predeterminada. Quan es crea una mà quina virtual, s'usa aquesta carpeta si no se n'especifica explÃcitament una altra.</translation> + <translation>Mostra el camà cap a la carpeta de mà quines virtuals predeterminada. Quan es crea una mà quina virtual, s'usa aquesta carpeta si no se n'especifica explÃcitament una altra.</translation> </message> <message> <source>Displays the path to the library that provides authentication for Remote Display (VRDP) clients.</source> - <translation>Mostra el camà cap a la biblioteca que proveeix l'autenticació per a clients de la pantalla remota (VRDP).</translation> + <translation>Mostra el camà cap a la biblioteca que proveeix l'autenticació per a clients de la pantalla remota (VRDP).</translation> </message> <message> <source>Default &Hard Disk Folder:</source> @@ -1761,7 +1760,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>V&RDP Authentication Library:</source> - <translation>Biblioteca d'autenticació V&RDP:</translation> + <translation>Biblioteca d'autenticació V&RDP:</translation> </message> <message> <source>When checked, the Dock Icon will reflect the VM window content in realtime.</source> @@ -1773,11 +1772,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the path to the default hard disk folder. This folder is used, if not explicitly specified otherwise, when adding existing or creating new virtual hard disks.</source> - <translation type="obsolete">Mostra el camà cap a la carpeta de disc dur predeterminada. Quan s'afegeix o es crea un disc virtual, s'usa aquesta carpeta si no se n'especifica explÃcitament una altra.</translation> + <translation type="obsolete">Mostra el camà cap a la carpeta de disc dur predeterminada. Quan s'afegeix o es crea un disc virtual, s'usa aquesta carpeta si no se n'especifica explÃcitament una altra.</translation> </message> <message> <source>When checked, the application will provide an icon with the context menu in the system tray.</source> - <translation>Quan estigui marcat, l'aplicació proveirà una icona amb el menú de context a la safata de sistema.</translation> + <translation>Quan estigui marcat, l'aplicació proveirà una icona amb el menú de context a la safata de sistema.</translation> </message> <message> <source>&Show System Tray Icon</source> @@ -1789,34 +1788,34 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the host screen saver will be disabled whenever a virtual machine is running.</source> - <translation>Quan estigui actiu, el protector de pantalla de l'amfitrió s'inhabilitarà quan una mà quina virtual estigui en execució.</translation> + <translation>Quan estigui actiu, el protector de pantalla de l'amfitrió s'inhabilitarà quan una mà quina virtual estigui en execució.</translation> </message> <message> <source>Disable Host &ScreenSaver</source> - <translation>Inhabilita el protector de pantalla de l'a&mfitrió</translation> + <translation>Inhabilita el protector de pantalla de l'a&mfitrió</translation> </message> </context> <context> <name>UIGlobalSettingsInput</name> <message> <source>Host &Key:</source> - <translation>Tecla d'&amfitrió:</translation> + <translation>Tecla d'&amfitrió:</translation> </message> <message> <source>Displays the key used as a Host Key in the VM window. Activate the entry field and press a new Host Key. Note that alphanumeric, cursor movement and editing keys cannot be used.</source> - <translation>Mostra la tecla que es fa servir com a tecla d'amfitrió a la finestra de la mà quina virtual. Activeu el camp d'entrada i premeu una tecla d'amfitrió nova. Tingueu en compte que no es poden fer servir carà cters alfanumèrics, cursors o tecles d'edició.</translation> + <translation>Mostra la tecla que es fa servir com a tecla d'amfitrió a la finestra de la mà quina virtual. Activeu el camp d'entrada i premeu una tecla d'amfitrió nova. Tingueu en compte que no es poden fer servir carà cters alfanumèrics, cursors o tecles d'edició.</translation> </message> <message> <source>Reset Host Key</source> - <translation>Reinicialitza la telca d'amfitrió</translation> + <translation>Reinicialitza la telca d'amfitrió</translation> </message> <message> <source>Resets the key used as a Host Key in the VM window.</source> - <translation>Reinicialitza la tecla que es fa servir com a tecla d'amfitrió a la finestra de la mà quina virtual.</translation> + <translation>Reinicialitza la tecla que es fa servir com a tecla d'amfitrió a la finestra de la mà quina virtual.</translation> </message> <message> <source>When checked, the keyboard is automatically captured every time the VM window is activated. When the keyboard is captured, all keystrokes (including system ones like Alt-Tab) are directed to the VM.</source> - <translation>Quan estiga marcat, el teclat es capturarà automà ticament cada vegada que la finestra de la mà quina virtual s'activi. Quan el teclat es captura, totes les combinacions de tecles es dirigeixen a la mà quina virtual.</translation> + <translation>Quan estiga marcat, el teclat es capturarà automà ticament cada vegada que la finestra de la mà quina virtual s'activi. Quan el teclat es captura, totes les combinacions de tecles es dirigeixen a la mà quina virtual.</translation> </message> <message> <source>&Auto Capture Keyboard</source> @@ -1855,7 +1854,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Lists all available user interface languages. The effective language is written in <b>bold</b>. Select <i>Default</i> to reset to the system default language.</source> - <translation>Mostra tots els idiomes disponibles. L'idioma activat es mostra en <b>negreta</b>. Seleccioneu <i>Predeterminat</i> per tornar a l'idioma per defecte.</translation> + <translation>Mostra tots els idiomes disponibles. L'idioma activat es mostra en <b>negreta</b>. Seleccioneu <i>Predeterminat</i> per tornar a l'idioma per defecte.</translation> </message> <message> <source>Name</source> @@ -1887,19 +1886,19 @@ p, li { white-space: pre-wrap; } </message> <message> <source>host IPv4 address of <b>%1</b> is wrong</source> - <translation>l'adreça IPv4 de l'amfitrió de <b>%1</b> és errònia</translation> + <translation>l'adreça IPv4 de l'amfitrió de <b>%1</b> és errònia</translation> </message> <message> <source>host IPv4 network mask of <b>%1</b> is wrong</source> - <translation>la mà scara de xarxa IPv4 de l'amfitrió <b>%1</b> és errònia</translation> + <translation>la mà scara de xarxa IPv4 de l'amfitrió <b>%1</b> és errònia</translation> </message> <message> <source>host IPv6 address of <b>%1</b> is wrong</source> - <translation>l'adreça IPv6 de l'amfitrió de <b>%1</b> és errònia</translation> + <translation>l'adreça IPv6 de l'amfitrió de <b>%1</b> és errònia</translation> </message> <message> <source>DHCP server address of <b>%1</b> is wrong</source> - <translation>L'adreça del servidor DHCP de <b>%1</b> és errònia</translation> + <translation>L'adreça del servidor DHCP de <b>%1</b> és errònia</translation> </message> <message> <source>DHCP server network mask of <b>%1</b> is wrong</source> @@ -1907,11 +1906,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>DHCP lower address bound of <b>%1</b> is wrong</source> - <translation>el lÃmit inferior de l'adreça DHCP de <b>%1</b> és erroni</translation> + <translation>el lÃmit inferior de l'adreça DHCP de <b>%1</b> és erroni</translation> </message> <message> <source>DHCP upper address bound of <b>%1</b> is wrong</source> - <translation>El lÃmit superior de l'adreça DHCP de <b>%1</b> és erroni</translation> + <translation>El lÃmit superior de l'adreça DHCP de <b>%1</b> és erroni</translation> </message> <message> <source>Adapter</source> @@ -1995,28 +1994,28 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Add host-only network</source> - <translation>&Afegeix xarxa només per a l'amfitrió</translation> + <translation>&Afegeix xarxa només per a l'amfitrió</translation> </message> <message> <source>&Remove host-only network</source> - <translation>&Elimina la xarxa només per a l'amfitrió</translation> + <translation>&Elimina la xarxa només per a l'amfitrió</translation> </message> <message> <source>&Edit host-only network</source> - <translation>&Edita xarxa només per a l'amfitrió</translation> + <translation>&Edita xarxa només per a l'amfitrió</translation> </message> <message> <source>Performing</source> <comment>creating/removing host-only network</comment> - <translation type="obsolete">S'estan realitzant les operacions</translation> + <translation type="obsolete">S'estan realitzant les operacions</translation> </message> <message> <source>&Host-only Networks:</source> - <translation>&Xarxes només de l'amfitrió:</translation> + <translation>&Xarxes només de l'amfitrió:</translation> </message> <message> <source>Lists all available host-only networks.</source> - <translation>Mostra totes les xarxes només de l'amfitrió.</translation> + <translation>Mostra totes les xarxes només de l'amfitrió.</translation> </message> <message> <source>Name</source> @@ -2031,7 +2030,7 @@ p, li { white-space: pre-wrap; } <name>UIGlobalSettingsNetworkDetails</name> <message> <source>Host-only Network Details</source> - <translation>Detalls de xarxa de només l'amfitrió</translation> + <translation>Detalls de xarxa de només l'amfitrió</translation> </message> <message> <source>&Adapter</source> @@ -2043,7 +2042,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Use manual configuration for this host-only network adapter.</source> - <translation>Fes servir la configuració manual només per a l'adaptador de xarxa de l'amfitrió.</translation> + <translation>Fes servir la configuració manual només per a l'adaptador de xarxa de l'amfitrió.</translation> </message> <message> <source>&IPv4 Address:</source> @@ -2051,7 +2050,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the host IPv4 address for this adapter.</source> - <translation>Mostra l'adreça IPv4 de l'amfitrió d'aquest adaptador.</translation> + <translation>Mostra l'adreça IPv4 de l'amfitrió d'aquest adaptador.</translation> </message> <message> <source>IPv4 Network &Mask:</source> @@ -2059,7 +2058,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the host IPv4 network mask for this adapter.</source> - <translation>Mostra la mà scara de xarxa IPv4 de l'amfitrió d'aquest adaptador.</translation> + <translation>Mostra la mà scara de xarxa IPv4 de l'amfitrió d'aquest adaptador.</translation> </message> <message> <source>I&Pv6 Address:</source> @@ -2067,7 +2066,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the host IPv6 address for this adapter if IPv6 is supported.</source> - <translation>Mostra l'adreça IPv6 de l'amfitrió d'aquest adaptador si IPv6 està suportat.</translation> + <translation>Mostra l'adreça IPv6 de l'amfitrió d'aquest adaptador si IPv6 està suportat.</translation> </message> <message> <source>IPv6 Network Mask &Length:</source> @@ -2075,7 +2074,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the host IPv6 network mask prefix length for this adapter if IPv6 is supported.</source> - <translation>Mostra la longitud de l'adreça de la mà scara de xarxa IPv6 de l'amfitrió per a aquest adaptador si IPv6 està suportat.</translation> + <translation>Mostra la longitud de l'adreça de la mà scara de xarxa IPv6 de l'amfitrió per a aquest adaptador si IPv6 està suportat.</translation> </message> <message> <source>&DHCP Server</source> @@ -2095,7 +2094,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the address of the DHCP server servicing the network associated with this host-only adapter.</source> - <translation>Mostra l'adreça del servidor DHCP de la xarxa associada a aquest adaptador de només l'amfitrió.</translation> + <translation>Mostra l'adreça del servidor DHCP de la xarxa associada a aquest adaptador de només l'amfitrió.</translation> </message> <message> <source>Server &Mask:</source> @@ -2103,7 +2102,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the network mask of the DHCP server servicing the network associated with this host-only adapter.</source> - <translation>Mostra la mà scara de xarxa del servidor DHCP de la xarxa associada a aquest adaptador de només l'amfitrió.</translation> + <translation>Mostra la mà scara de xarxa del servidor DHCP de la xarxa associada a aquest adaptador de només l'amfitrió.</translation> </message> <message> <source>&Lower Address Bound:</source> @@ -2111,7 +2110,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source> - <translation>Mostra l'adreça lÃmit inferior oferida pel servidor DHCP de la xarxa associada aquet adaptador de només l'amfitrió.</translation> + <translation>Mostra l'adreça lÃmit inferior oferida pel servidor DHCP de la xarxa associada aquet adaptador de només l'amfitrió.</translation> </message> <message> <source>&Upper Address Bound:</source> @@ -2119,14 +2118,14 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source> - <translation>Mostra l'adreça lÃmit superior oferida pel servidor DHCP de la xarxa associada a aquest adaptador de només l'amfitrió.</translation> + <translation>Mostra l'adreça lÃmit superior oferida pel servidor DHCP de la xarxa associada a aquest adaptador de només l'amfitrió.</translation> </message> </context> <context> <name>UIGlobalSettingsUpdate</name> <message> <source>When checked, the application will periodically connect to the VirtualBox website and check whether a new VirtualBox version is available.</source> - <translation>Quan estigui marcat, l'aplicació es connectarà periòdicament al web del VirtualBox per comprovar si hi ha noves versions disponibles.</translation> + <translation>Quan estigui marcat, l'aplicació es connectarà periòdicament al web del VirtualBox per comprovar si hi ha noves versions disponibles.</translation> </message> <message> <source>&Check for updates</source> @@ -2192,27 +2191,27 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Appliance Import Wizard</source> - <translation>Auxiliar d'importació d'aplicacions virtuals</translation> + <translation>Auxiliar d'importació d'aplicacions virtuals</translation> </message> <message> <source>Welcome to the Appliance Import Wizard!</source> - <translation type="obsolete">Benvingut a l'assistent d'importació d'aplicacions virtuals!</translation> + <translation type="obsolete">Benvingut a l'assistent d'importació d'aplicacions virtuals!</translation> </message> <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This wizard will guide you through importing an appliance. </p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Use the <span style=" font-weight:600;">Next</span> button to go the next page of the wizard and the <span style=" font-weight:600;">Back</span> button to return to the previous page.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">VirtualBox currently supports importing appliances saved in the Open Virtualization Format (OVF). To continue, select the file to import below:</p></body></html></source> - <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This wizard will guide you through importing an appliance. </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Use the <span style=" font-weight:600;">Next</span> button to go the next page of the wizard and the <span style=" font-weight:600;">Back</span> button to return to the previous page.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">VirtualBox currently supports importing appliances saved in the Open Virtualization Format (OVF). To continue, select the file to import below:</p></body></html></source> + <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Aquest assitent us guiarà durant el procés d'importació d'una aplicació virtual. </p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Feu servir el botó <span style=" font-weight:600;">Següent</span> per anar a la següent pà gina de l'assistent i el botó <span style=" font-weight:600;">Enrere</span> per anar a la pà gina prèvia.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Per importar una aplicació virtual, heu de seleccionar un fitxer que el descrigui primer. Actualment el VirtualBox suporta el format obert de virtualització (OVF). Per continuar, seleccioneu el fitxer per a importar:</p></body></html></translation> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Aquest assitent us guiarà durant el procés d'importació d'una aplicació virtual. </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Feu servir el botó <span style=" font-weight:600;">Següent</span> per anar a la següent pà gina de l'assistent i el botó <span style=" font-weight:600;">Enrere</span> per anar a la pà gina prèvia.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Per importar una aplicació virtual, heu de seleccionar un fitxer que el descrigui primer. Actualment el VirtualBox suporta el format obert de virtualització (OVF). Per continuar, seleccioneu el fitxer per a importar:</p></body></html></translation> </message> <message> <source>< &Back</source> @@ -2228,11 +2227,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Appliance Import Settings</source> - <translation type="obsolete">Parà metres d'importació de l'aplicació virtual</translation> + <translation type="obsolete">Parà metres d'importació de l'aplicació virtual</translation> </message> <message> <source>These are the virtual machines contained in the appliance and the suggested settings of the imported VirtualBox machines. You can change many of the properties shown by double-clicking on the items and disable others using the check boxes below.</source> - <translation type="obsolete">Aquestes són les mà quines virtuals que es descriuen a l'aplicació virtual amb els mapejats suggerits per a la importació al VirtualBox. Podeu canviar la majoria dels parà metres mostrats fent doble clic sobre els Ãtems i inhabilitar altres fent servir els quadres de verificació.</translation> + <translation type="obsolete">Aquestes són les mà quines virtuals que es descriuen a l'aplicació virtual amb els mapejats suggerits per a la importació al VirtualBox. Podeu canviar la majoria dels parà metres mostrats fent doble clic sobre els Ãtems i inhabilitar altres fent servir els quadres de verificació.</translation> </message> <message> <source>Restore Defaults</source> @@ -2255,29 +2254,29 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Welcome to the Appliance Import Wizard!</source> - <translation>Benvingut a l'auxiliar d'importació d'aplicacions virtuals!</translation> + <translation>Benvingut a l'auxiliar d'importació d'aplicacions virtuals!</translation> </message> <message> <source><p>This wizard will guide you through importing an appliance.</p><p>%1</p><p>VirtualBox currently supports importing appliances saved in the Open Virtualization Format (OVF). To continue, select the file to import below:</p></source> - <translation><p>Aquest auxiliar us guiarà per tal d'importar una aplicació virtual.</p><p>%1</p><p>El VirtualBox suporta actualment la importació d'aplicacions virtuals en el format de virtualització obert (OVF). Per continuar, seleccioneu el fitxer per importar a continuació:</p></translation> + <translation><p>Aquest auxiliar us guiarà per tal d'importar una aplicació virtual.</p><p>%1</p><p>El VirtualBox suporta actualment la importació d'aplicacions virtuals en el format de virtualització obert (OVF). Per continuar, seleccioneu el fitxer per importar a continuació:</p></translation> </message> </context> <context> <name>UIImportApplianceWzdPage2</name> <message> <source>These are the virtual machines contained in the appliance and the suggested settings of the imported VirtualBox machines. You can change many of the properties shown by double-clicking on the items and disable others using the check boxes below.</source> - <translation>Aquestes són les mà quines virtuals que es descriuen a l'aplicació virtual amb els mapats suggerits per a la importació al VirtualBox. Podeu canviar la majoria de les propietats mostrades fent doble clic sobre els elements i inhabilitar altres fent servir els quadres de verificació.</translation> + <translation>Aquestes són les mà quines virtuals que es descriuen a l'aplicació virtual amb els mapats suggerits per a la importació al VirtualBox. Podeu canviar la majoria de les propietats mostrades fent doble clic sobre els elements i inhabilitar altres fent servir els quadres de verificació.</translation> </message> <message> <source>Appliance Import Settings</source> - <translation>Parà metres d'importació de l'aplicació virtual</translation> + <translation>Parà metres d'importació de l'aplicació virtual</translation> </message> </context> <context> <name>UIImportLicenseViewer</name> <message> - <source><b>The virtual system "%1" requires that you agree to the terms and conditions of the software license agreement shown below.</b><br /><br />Click <b>Agree</b> to continue or click <b>Disagree</b> to cancel the import.</source> - <translation><b>El sistema virtual "%1" requreix l'acceptació dels termes i condicions de l'acord de llicència del programari que es mostra.</b><br /><br />Premeu <b>Hi estic d'acord</b> per continuar o <b>No hi estic d'acord</b> per a cancel·lar la importació.</translation> + <source><b>The virtual system "%1" requires that you agree to the terms and conditions of the software license agreement shown below.</b><br /><br />Click <b>Agree</b> to continue or click <b>Disagree</b> to cancel the import.</source> + <translation><b>El sistema virtual "%1" requreix l'acceptació dels termes i condicions de l'acord de llicència del programari que es mostra.</b><br /><br />Premeu <b>Hi estic d'acord</b> per continuar o <b>No hi estic d'acord</b> per a cancel·lar la importació.</translation> </message> <message> <source>Software License Agreement</source> @@ -2285,11 +2284,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Disagree</source> - <translation>&No hi estic d'acord</translation> + <translation>&No hi estic d'acord</translation> </message> <message> <source>&Agree</source> - <translation>Hi estic d'&acord</translation> + <translation>Hi estic d'&acord</translation> </message> <message> <source>&Print...</source> @@ -2311,24 +2310,24 @@ p, li { white-space: pre-wrap; } <context> <name>UIIndicatorsPool</name> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the virtual hard disks:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the virtual hard disks:</nobr>%1</p></source> <comment>HDD tooltip</comment> - <translation><p style='white-space:pre'><nobr>Indica l'activitat dels discos durs virtuals:</nobr>%1</p></translation> + <translation><p style='white-space:pre'><nobr>Indica l'activitat dels discos durs virtuals:</nobr>%1</p></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the CD/DVD devices:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the CD/DVD devices:</nobr>%1</p></source> <comment>CD/DVD tooltip</comment> - <translation><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de CD/DVD:</nobr>%1</p></translation> + <translation><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de CD/DVD:</nobr>%1</p></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy devices:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy devices:</nobr>%1</p></source> <comment>FD tooltip</comment> - <translation><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de disquetera:</nobr>%1</p></translation> + <translation><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de disquetera:</nobr>%1</p></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the network interfaces:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the network interfaces:</nobr>%1</p></source> <comment>Network adapters tooltip</comment> - <translation><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de xarxa:</nobr>%1</p></translation> + <translation><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de xarxa:</nobr>%1</p></translation> </message> <message> <source><br><nobr><b>Adapter %1 (%2)</b>: %3 cable %4</nobr></source> @@ -2351,9 +2350,9 @@ p, li { white-space: pre-wrap; } <translation><br><nobr><b>Tots els adaptadors de xarxa estan desactivats</b></nobr></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the attached USB devices:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the attached USB devices:</nobr>%1</p></source> <comment>USB device tooltip</comment> - <translation><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius USB connectats:</nobr>%1</p></translation> + <translation><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius USB connectats:</nobr>%1</p></translation> </message> <message> <source><br><nobr><b>No USB devices attached</b></nobr></source> @@ -2366,9 +2365,9 @@ p, li { white-space: pre-wrap; } <translation><br><nobr><b>El controlador USB està desactivat</b></nobr></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</p></source> <comment>Shared folders tooltip</comment> - <translation><p style='white-space:pre'><nobr>Indica l'activitat de les carpetes compartides per la mà quina virtual:</nobr>%1</p></translation> + <translation><p style='white-space:pre'><nobr>Indica l'activitat de les carpetes compartides per la mà quina virtual:</nobr>%1</p></translation> </message> <message> <source><br><nobr><b>No shared folders</b></nobr></source> @@ -2386,7 +2385,7 @@ p, li { white-space: pre-wrap; } <message> <source>Indicates the status of the hardware virtualization features used by this virtual machine:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></source> <comment>Virtualization Stuff LED</comment> - <translation>Indica l'estat de les caracterÃstiques de virtualització de maquinari que fa servir aquesta mà quina virtual:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></translation> + <translation>Indica l'estat de les caracterÃstiques de virtualització de maquinari que fa servir aquesta mà quina virtual:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></translation> </message> <message> <source><br><nobr><b>%1:</b>&nbsp;%2</nobr></source> @@ -2395,7 +2394,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Indicates whether the host mouse pointer is captured by the guest OS:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;pointer is not captured</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;pointer is captured</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;mouse integration (MI) is On</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI is Off, pointer is captured</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI is Off, pointer is not captured</nobr><br>Note that the mouse integration feature requires Guest Additions to be installed in the guest OS.</source> - <translation>Indica si el punter de l'ordinador amfitrió és capturat pel sistema operatiu client:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;no captura el punter</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;captura el punter</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;la integració del punter (MI) està activada</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI està desactivada, captura el punter</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI està desactivada, no captura el punter</nobr><br>Tingueu en compte que la funció d'integració del punter requereix tenir instal·lades les Guest Additions en el sistema operatiu client.</translation> + <translation>Indica si el punter de l'ordinador amfitrió és capturat pel sistema operatiu client:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;no captura el punter</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;captura el punter</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;la integració del punter (MI) està activada</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI està desactivada, captura el punter</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI està desactivada, no captura el punter</nobr><br>Tingueu en compte que la funció d'integració del punter requereix tenir instal·lades les Guest Additions en el sistema operatiu client.</translation> </message> <message> <source>Indicates whether the keyboard is captured by the guest OS (<img src=:/hostkey_captured_16px.png/>) or not (<img src=:/hostkey_16px.png/>).</source> @@ -2403,11 +2402,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Indicates whether the Remote Desktop Server is enabled (<img src=:/vrdp_16px.png/>) or not (<img src=:/vrdp_disabled_16px.png/>).</source> - <translation>Indica si el servidor d'escriptori remot està actiu (<img src=:/vrdp_16px.png/>) o no (<img src=:/vrdp_disabled_16px.png/>).</translation> + <translation>Indica si el servidor d'escriptori remot està actiu (<img src=:/vrdp_16px.png/>) o no (<img src=:/vrdp_disabled_16px.png/>).</translation> </message> <message> <source><hr>The Remote Desktop Server is listening on port %1</source> - <translation><hr>El servidor d'escriptori remot està escoltant al port %1</translation> + <translation><hr>El servidor d'escriptori remot està escoltant al port %1</translation> </message> </context> <context> @@ -2446,7 +2445,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>No CD/DVD Devices Attached</source> - <translation>No s'ha conectat cap dispositiu de CD/DVD</translation> + <translation>No s'ha conectat cap dispositiu de CD/DVD</translation> </message> <message> <source>No CD/DVD devices attached to that VM</source> @@ -2454,7 +2453,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>No Floppy Devices Attached</source> - <translation>No s'ha connectat cap dispositiu de disquetera</translation> + <translation>No s'ha connectat cap dispositiu de disquetera</translation> </message> <message> <source>No floppy devices attached to that VM</source> @@ -2466,30 +2465,30 @@ p, li { white-space: pre-wrap; } </message> <message> <source>No supported devices connected to the host PC</source> - <translation>No hi ha dispositius suportats connectats a l'ordinador amfitrió</translation> + <translation>No hi ha dispositius suportats connectats a l'ordinador amfitrió</translation> </message> </context> <context> <name>UIMachineSettingsAudio</name> <message> <source>When checked, a virtual PCI audio card will be plugged into the virtual machine and will communicate with the host audio system using the specified driver.</source> - <translation>Quan estigui marcat, la tarjeta de so PCI virtual es connectarà a dins de la mà quina virtual, la qual farà servir un controlador especÃfic per comunicar-se amb la tarjeta de so de l'amfitrió.</translation> + <translation>Quan estigui marcat, la tarjeta de so PCI virtual es connectarà a dins de la mà quina virtual, la qual farà servir un controlador especÃfic per comunicar-se amb la tarjeta de so de l'amfitrió.</translation> </message> <message> <source>Enable &Audio</source> - <translation>H&abilita l'à udio</translation> + <translation>H&abilita l'à udio</translation> </message> <message> <source>Host Audio &Driver:</source> - <translation>Controla&dor d'à udio de l'amfitrió:</translation> + <translation>Controla&dor d'à udio de l'amfitrió:</translation> </message> <message> <source>Controls the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source> - <translation>Gestiona el controlador de sortida de so. El <b>controlador d'à udio Nul</b> fa que el client vegi una tarjeta de so, però l'accés a ella s'ignorarà .</translation> + <translation>Gestiona el controlador de sortida de so. El <b>controlador d'à udio Nul</b> fa que el client vegi una tarjeta de so, però l'accés a ella s'ignorarà .</translation> </message> <message> <source>Audio &Controller:</source> - <translation>&Controlador d'à udio:</translation> + <translation>&Controlador d'à udio:</translation> </message> <message> <source>Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine.</source> @@ -2500,7 +2499,7 @@ p, li { white-space: pre-wrap; } <name>UIMachineSettingsDisplay</name> <message> <source>you have assigned less than <b>%1</b> of video memory which is the minimum amount required to switch the virtual machine to fullscreen or seamless mode.</source> - <translation>heu assignat menys de l'<b>%1</b> per a la memòria de vÃdeo, que és el mÃnim necessari per arrencar el sistema client en mode de pantalla completa o fluid.</translation> + <translation>heu assignat menys de l'<b>%1</b> per a la memòria de vÃdeo, que és el mÃnim necessari per arrencar el sistema client en mode de pantalla completa o fluid.</translation> </message> <message> <source><qt>%1&nbsp;MB</qt></source> @@ -2528,11 +2527,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the virtual machine will be given access to the 3D graphics capabilities available on the host.</source> - <translation>Quan estigui marcat, la mà quina virtual permetrà l'accés als grà fics 3D disponibles a l'amfitrió.</translation> + <translation>Quan estigui marcat, la mà quina virtual permetrà l'accés als grà fics 3D disponibles a l'amfitrió.</translation> </message> <message> <source>Enable &3D Acceleration</source> - <translation>Activa l'acceleració &3D</translation> + <translation>Activa l'acceleració &3D</translation> </message> <message> <source>&Remote Display</source> @@ -2540,7 +2539,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source> - <translation>Quan estigui marcat, la mà quina virtual actuarà com un servidor RDP (protocol d'escriptori remot), de forma que es permetrà a clients remots connectar-se i operar amb la mà quina virtual (quan estigui en execució) fent servir un client està ndard RDP.</translation> + <translation>Quan estigui marcat, la mà quina virtual actuarà com un servidor RDP (protocol d'escriptori remot), de forma que es permetrà a clients remots connectar-se i operar amb la mà quina virtual (quan estigui en execució) fent servir un client està ndard RDP.</translation> </message> <message> <source>&Enable Server</source> @@ -2552,23 +2551,23 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</source> - <translation type="obsolete">Mostra el nombre del port del servidor VRDP. Heu d'especificar <tt>0</tt> (cero) per reiniciar el port al valor per defecte.</translation> + <translation type="obsolete">Mostra el nombre del port del servidor VRDP. Heu d'especificar <tt>0</tt> (cero) per reiniciar el port al valor per defecte.</translation> </message> <message> <source>Authentication &Method:</source> - <translation>&Mètode d'autenticació:</translation> + <translation>&Mètode d'autenticació:</translation> </message> <message> <source>Defines the VRDP authentication method.</source> - <translation>Defineix el mode d'autenticació del VRDP.</translation> + <translation>Defineix el mode d'autenticació del VRDP.</translation> </message> <message> <source>Authentication &Timeout:</source> - <translation>&Temps d'autenticació:</translation> + <translation>&Temps d'autenticació:</translation> </message> <message> <source>Specifies the timeout for guest authentication, in milliseconds.</source> - <translation>Especifica el temps d'autenticació del client, en milisegons.</translation> + <translation>Especifica el temps d'autenticació del client, en milisegons.</translation> </message> <message> <source>you have assigned less than <b>%1</b> of video memory which is the minimum amount required for HD Video to be played efficiently.</source> @@ -2576,15 +2575,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the virtual machine will be given access to the Video Acceleration capabilities available on the host.</source> - <translation>Quan estigui marcat, la mà quina virtual tindrà suport a les capacitatats d'acceleració de vÃdeo disponibles a l'amfitrió.</translation> + <translation>Quan estigui marcat, la mà quina virtual tindrà suport a les capacitatats d'acceleració de vÃdeo disponibles a l'amfitrió.</translation> </message> <message> <source>Enable &2D Video Acceleration</source> - <translation>Activa l'acceleracio &2D</translation> + <translation>Activa l'acceleracio &2D</translation> </message> <message> <source>The VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source> - <translation>El número de port de servidor VRDP. Heu d'especificar <tt>0</tt> (cero) per a seleccionar el port 3389, el port està ndard per a RDP.</translation> + <translation>El número de port de servidor VRDP. Heu d'especificar <tt>0</tt> (cero) per a seleccionar el port 3389, el port està ndard per a RDP.</translation> </message> <message> <source>Mo&nitor Count:</source> @@ -2608,22 +2607,22 @@ p, li { white-space: pre-wrap; } </message> <message> <source>You have 3D Acceleration enabled for a operation system which uses the WDDM video driver. For maximal performance set the guest VRAM to at least <b>%1</b>.</source> - <translation>Teniu l'accel·leració 3D activada per a una operació del sistema que fa servir el mòdul de vÃdeo WDDM. Per a un rendiment mà xim, establiu la memòria VRAM del client com a mÃnim a <b>%1</b>.</translation> + <translation>Teniu l'accel·leració 3D activada per a una operació del sistema que fa servir el mòdul de vÃdeo WDDM. Per a un rendiment mà xim, establiu la memòria VRAM del client com a mÃnim a <b>%1</b>.</translation> </message> </context> <context> <name>UIMachineSettingsGeneral</name> <message> - <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> - <translation type="obsolete">heu assignat més d'un <b>%1%</b> de la memòria del vostre ordinador (<b>%2</b>) a la mà quina virtual. No heu deixat suficient memòria al sistema amfitrió. Seleccineu un percentatge menor.</translation> + <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> + <translation type="obsolete">heu assignat més d'un <b>%1%</b> de la memòria del vostre ordinador (<b>%2</b>) a la mà quina virtual. No heu deixat suficient memòria al sistema amfitrió. Seleccineu un percentatge menor.</translation> </message> <message> - <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. There might not be enough memory left for your host operating system. Continue at your own risk.</source> - <translation type="obsolete">heu assignat més d'un <b>%1%</b> de la memòria del vostre ordinador (<b>%2</b>) a la mà quina virtual. No heu deixat suficient memòria al sistema amfitrió. Contineu pel vostre compte (no recomanable).</translation> + <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. There might not be enough memory left for your host operating system. Continue at your own risk.</source> + <translation type="obsolete">heu assignat més d'un <b>%1%</b> de la memòria del vostre ordinador (<b>%2</b>) a la mà quina virtual. No heu deixat suficient memòria al sistema amfitrió. Contineu pel vostre compte (no recomanable).</translation> </message> <message> - <source>there is a 64 bits guest OS type assigned for this VM, which requires virtualization feature (VT-x/AMD-V) to be enabled too, else your guest will fail to detect a 64 bits CPU and will not be able to boot, so this feature will be enabled automatically when you'll accept VM Settings by pressing OK button.</source> - <translation type="obsolete">existeix un sistema client de 64 bits assignat a aquesta mà quina virtual que requereix tenir habilitada la caracterÃstica de virtualització (VT-x/AMD-V). El vostre sistema client fallarà al detectar una CPU de 64 bits i no podrà iniciar-se, per la qual cosa aquesta caracterÃstica s'habilitarà per defecte quan accepteu els parà metres de la mà quina virtual prement el botó D'acord.</translation> + <source>there is a 64 bits guest OS type assigned for this VM, which requires virtualization feature (VT-x/AMD-V) to be enabled too, else your guest will fail to detect a 64 bits CPU and will not be able to boot, so this feature will be enabled automatically when you'll accept VM Settings by pressing OK button.</source> + <translation type="obsolete">existeix un sistema client de 64 bits assignat a aquesta mà quina virtual que requereix tenir habilitada la caracterÃstica de virtualització (VT-x/AMD-V). El vostre sistema client fallarà al detectar una CPU de 64 bits i no podrà iniciar-se, per la qual cosa aquesta caracterÃstica s'habilitarà per defecte quan accepteu els parà metres de la mà quina virtual prement el botó D'acord.</translation> </message> <message> <source><qt>%1&nbsp;MB</qt></source> @@ -2631,7 +2630,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of disk space.</source> - <translation>Mostra el camà on les captures d'aquesta mà quina virtual es desaran. Tingueu en compte que les captures poden ocupar prou quantitat d'espai al disc dur.</translation> + <translation>Mostra el camà on les captures d'aquesta mà quina virtual es desaran. Tingueu en compte que les captures poden ocupar prou quantitat d'espai al disc dur.</translation> </message> <message> <source>&Basic</source> @@ -2655,7 +2654,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the operating system type that you plan to install into this virtual machine (called a guest operating system).</source> - <translation type="obsolete">Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'aquesta mà quina virtual (anomenat sistema operatiu client).</translation> + <translation type="obsolete">Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'aquesta mà quina virtual (anomenat sistema operatiu client).</translation> </message> <message> <source>Base &Memory Size</source> @@ -2663,7 +2662,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source> - <translation type="obsolete">Controla la quantitat de memòria amb què es proveeix a la mà quina virtual. Si n'assigneu massa, pot ser que la mà quina no s'iniciï.</translation> + <translation type="obsolete">Controla la quantitat de memòria amb què es proveeix a la mà quina virtual. Si n'assigneu massa, pot ser que la mà quina no s'iniciï.</translation> </message> <message> <source><</source> @@ -2691,11 +2690,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Boo&t Order:</source> - <translation type="obsolete">&Ordre d'inici:</translation> + <translation type="obsolete">&Ordre d'inici:</translation> </message> <message> <source>Defines the boot device order. Use the checkboxes on the left to enable or disable individual boot devices. Move items up and down to change the device order.</source> - <translation type="obsolete">Defineix l'ordre dels dispositius d'arrencada. Useu les caselles de selecció a l'esquerra per activar o desactivar els dispositius d'arrencada individuals. Moveu els elements amunt i avall per a canviar l'ordre dels dispositius.</translation> + <translation type="obsolete">Defineix l'ordre dels dispositius d'arrencada. Useu les caselles de selecció a l'esquerra per activar o desactivar els dispositius d'arrencada individuals. Moveu els elements amunt i avall per a canviar l'ordre dels dispositius.</translation> </message> <message> <source>[device]</source> @@ -2707,7 +2706,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Moves the selected boot device up.</source> - <translation type="obsolete">Mou amunt el dispositiu d'arrecada seleccionat.</translation> + <translation type="obsolete">Mou amunt el dispositiu d'arrecada seleccionat.</translation> </message> <message> <source>Move Down (Ctrl-Down)</source> @@ -2715,31 +2714,31 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Moves the selected boot device down.</source> - <translation type="obsolete">Mou avall el dispositiu d'arrencada seleccionat.</translation> + <translation type="obsolete">Mou avall el dispositiu d'arrencada seleccionat.</translation> </message> <message> <source>Extended Features:</source> <translation type="obsolete">CaracterÃstiques avançades:</translation> </message> <message> - <source>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> - <translation type="obsolete">Quan estigui marcat, la mà quina virtual suportarà la configuració avançada i la interfÃcie de gestió de l'energia (ACPI). <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</translation> + <source>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> + <translation type="obsolete">Quan estigui marcat, la mà quina virtual suportarà la configuració avançada i la interfÃcie de gestió de l'energia (ACPI). <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</translation> </message> <message> <source>Enable A&CPI</source> <translation type="obsolete">Habilita A&CPI</translation> </message> <message> - <source>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> - <translation type="obsolete">Quan estigui marcat, la mà quina virtual suportarà l'entrada/sortida APIC (ES APIC), que pot reduir el rendiment de la mà quina virtual. <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</translation> + <source>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> + <translation type="obsolete">Quan estigui marcat, la mà quina virtual suportarà l'entrada/sortida APIC (ES APIC), que pot reduir el rendiment de la mà quina virtual. <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</translation> </message> <message> <source>Enable IO A&PIC</source> <translation type="obsolete">Habilita IO A&PIC</translation> </message> <message> - <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source> - <translation type="obsolete">Quan estigui marcat, l'aplicació tractarà de fer ús del processador de l'amfitrió per habilitar extensions com Intel VT-x i AMD-V.</translation> + <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source> + <translation type="obsolete">Quan estigui marcat, l'aplicació tractarà de fer ús del processador de l'amfitrió per habilitar extensions com Intel VT-x i AMD-V.</translation> </message> <message> <source>Enable &VT-x/AMD-V</source> @@ -2747,7 +2746,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</source> - <translation type="obsolete">Quan estigui marcat, la mà quina virtual provarà de fer ús de l'extensió de paginació imbricada d'intel VT-x i AMD-V.</translation> + <translation type="obsolete">Quan estigui marcat, la mà quina virtual provarà de fer ús de l'extensió de paginació imbricada d'intel VT-x i AMD-V.</translation> </message> <message> <source>Enable Nested Pa&ging</source> @@ -2755,7 +2754,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source> - <translation type="obsolete">Quan estigui marcat, la caracterÃstica d'extensió d'adreça fÃsica (PAE) del processador de l'amfitrió s'exposarà a la mà quina virtual.</translation> + <translation type="obsolete">Quan estigui marcat, la caracterÃstica d'extensió d'adreça fÃsica (PAE) del processador de l'amfitrió s'exposarà a la mà quina virtual.</translation> </message> <message> <source>Enable PA&E/NX</source> @@ -2767,7 +2766,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Selects which clipboard data will be copied between the guest and the host OS. This feature requires Guest Additions to be installed in the guest OS.</source> - <translation>Defineix el mode de compartició del porta-retalls entre el client i l'amfitrió. Tingueu en compte que aquesta caracterÃstica requereix tenir instal·lades les Guest Additions al sistema client.</translation> + <translation>Defineix el mode de compartició del porta-retalls entre el client i l'amfitrió. Tingueu en compte que aquesta caracterÃstica requereix tenir instal·lades les Guest Additions al sistema client.</translation> </message> <message> <source>Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS.</source> @@ -2803,27 +2802,27 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Runtime:</source> - <translation type="obsolete">Temps d'execució:</translation> + <translation type="obsolete">Temps d'execució:</translation> </message> <message> - <source>you have assigned more than <b>75%</b> of your computer's memory (<b>%1</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> - <translation type="obsolete">heu assignat més del <b>75%</b> de la memòria del vostre ordinador (<b>%1</b>) per a la mà quina virtual. D'aquesta manera no es deixa la suficient memòria per al sistema amfitrió. Seleccioneu una quantitat de memòria inferior.</translation> + <source>you have assigned more than <b>75%</b> of your computer's memory (<b>%1</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> + <translation type="obsolete">heu assignat més del <b>75%</b> de la memòria del vostre ordinador (<b>%1</b>) per a la mà quina virtual. D'aquesta manera no es deixa la suficient memòria per al sistema amfitrió. Seleccioneu una quantitat de memòria inferior.</translation> </message> <message> - <source>you have assigned more than <b>50%</b> of your computer's memory (<b>%1</b>) to the virtual machine. There might not be enough memory left for your host operating system. Continue at your own risk.</source> - <translation type="obsolete">heu assignat més del <b>50%</b> de la memòria del vostre ordinador (<b>%1</b>) per a la mà quina virtual. D'aquesta manera no es deixa la suficient memòria per al sistema amfitrió. Contineu pel vostre compte (no recomanable).</translation> + <source>you have assigned more than <b>50%</b> of your computer's memory (<b>%1</b>) to the virtual machine. There might not be enough memory left for your host operating system. Continue at your own risk.</source> + <translation type="obsolete">heu assignat més del <b>50%</b> de la memòria del vostre ordinador (<b>%1</b>) per a la mà quina virtual. D'aquesta manera no es deixa la suficient memòria per al sistema amfitrió. Contineu pel vostre compte (no recomanable).</translation> </message> <message> <source>you have assigned less than <b>%1</b> of video memory which is the minimum amount required to switch the virtual machine to fullscreen or seamless mode.</source> - <translation type="obsolete">heu assignat menys de l'<b>%1</b> per a la memòria de vÃdeo, que és el mÃnim necessari per arrencar el sistema client en mode de pantalla completa o fluid.</translation> + <translation type="obsolete">heu assignat menys de l'<b>%1</b> per a la memòria de vÃdeo, que és el mÃnim necessari per arrencar el sistema client en mode de pantalla completa o fluid.</translation> </message> <message> <source>When checked, the virtual machine will be given access to the 3D graphics capabilities available on the host.</source> - <translation type="obsolete">Quan estigui marcat, la mà quina virtual permetrà l'accés als grà fics 3D disponibles a l'amfitrió.</translation> + <translation type="obsolete">Quan estigui marcat, la mà quina virtual permetrà l'accés als grà fics 3D disponibles a l'amfitrió.</translation> </message> <message> <source>Enable &3D Acceleration</source> - <translation type="obsolete">Activa l'acceleració &3D</translation> + <translation type="obsolete">Activa l'acceleració &3D</translation> </message> <message> <source>Removable Media:</source> @@ -2835,11 +2834,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Mini ToolBar:</source> - <translation>Barra d'eines mini:</translation> + <translation>Barra d'eines mini:</translation> </message> <message> <source>If checked, show the Mini ToolBar in Fullscreen and Seamless modes.</source> - <translation>Si està marcat, mostra la barra d'eines mini als modes fluid i de pantalla completa.</translation> + <translation>Si està marcat, mostra la barra d'eines mini als modes fluid i de pantalla completa.</translation> </message> <message> <source>Show In &Fullscreen/Seamless</source> @@ -2847,7 +2846,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>If checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source> - <translation>Si està marcat, mostra una barra d'eines petita a la part de dalt de la pantalla en lloc de a la posició per defecte a la part de sota.</translation> + <translation>Si està marcat, mostra una barra d'eines petita a la part de dalt de la pantalla en lloc de a la posició per defecte a la part de sota.</translation> </message> <message> <source>Show At &Top Of Screen</source> @@ -2866,7 +2865,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>no host-only network adapter is selected</source> - <translation>no s'ha seleccionat cap adaptador de només l'amfitrió</translation> + <translation>no s'ha seleccionat cap adaptador de només l'amfitrió</translation> </message> <message> <source>Not selected</source> @@ -2918,31 +2917,31 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Select TAP setup application</source> - <translation type="obsolete">Selecciona l'aplicació de configuració de TAP</translation> + <translation type="obsolete">Selecciona l'aplicació de configuració de TAP</translation> </message> <message> <source>Select TAP terminate application</source> - <translation type="obsolete">Selecciona l'aplicació de finalització de TAP</translation> + <translation type="obsolete">Selecciona l'aplicació de finalització de TAP</translation> </message> <message> <source>When checked, plugs this virtual network adapter into the virtual machine.</source> - <translation>Quan estigui marcat, s'activarà aquest adaptador de xarxa virtual a dins de la mà quina virtual.</translation> + <translation>Quan estigui marcat, s'activarà aquest adaptador de xarxa virtual a dins de la mà quina virtual.</translation> </message> <message> <source>&Enable Network Adapter</source> - <translation>Habilita l'adaptador d&e xarxa</translation> + <translation>Habilita l'adaptador d&e xarxa</translation> </message> <message> <source>A&dapter Type:</source> - <translation type="obsolete">&Tipus d'Adaptador:</translation> + <translation type="obsolete">&Tipus d'Adaptador:</translation> </message> <message> <source>Adapter &Type:</source> - <translation>&Tipus d'adaptador:</translation> + <translation>&Tipus d'adaptador:</translation> </message> <message> <source>Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine.</source> - <translation>Selecciona el tipus d'adaptador de xarxa virtual. Segons el valor, el VirtualBox proveirà diferent maquinari de xarxa per a la mà quina virtual.</translation> + <translation>Selecciona el tipus d'adaptador de xarxa virtual. Segons el valor, el VirtualBox proveirà diferent maquinari de xarxa per a la mà quina virtual.</translation> </message> <message> <source>&Attached to:</source> @@ -2954,7 +2953,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Open additional options dialog for current attachment type.</source> - <translation type="obsolete">Obre el dià leg d'opcions addicionals per a l'actual tipus d'adjunció.</translation> + <translation type="obsolete">Obre el dià leg d'opcions addicionals per a l'actual tipus d'adjunció.</translation> </message> <message> <source>&Name:</source> @@ -2962,11 +2961,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Selects the name of the network adapter for <b>Bridged Adapter</b> or <b>Host-only Adapter</b> attachments and the name of the network <b>Internal Network</b> attachments.</source> - <translation>Selecciona el nom de l'adaptador de xarxa si el tipus d'adjunció és equivalent a <b>Adaptador en pont</b> o <b>Adaptador de només l'amfitrió</b> i el nom de la xarxa interna si el tipus d'adjunció és equivalent a <b>Xarxa interna</b>.</translation> + <translation>Selecciona el nom de l'adaptador de xarxa si el tipus d'adjunció és equivalent a <b>Adaptador en pont</b> o <b>Adaptador de només l'amfitrió</b> i el nom de la xarxa interna si el tipus d'adjunció és equivalent a <b>Xarxa interna</b>.</translation> </message> <message> <source>Open extended settings dialog for current attachment type.</source> - <translation type="obsolete">Obre el dià leg de configuració ampliat per a l'actual tipus d'adjunció.</translation> + <translation type="obsolete">Obre el dià leg de configuració ampliat per a l'actual tipus d'adjunció.</translation> </message> <message> <source>&Network Name:</source> @@ -2982,7 +2981,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source> - <translation>Mostra l'adreça MAC d'aquest adaptador. Conté exactament 12 carà cters compresos entre {0-9,A-F}. Tingueu en compte que el segon carà cter ha d'éser un dÃgit.</translation> + <translation>Mostra l'adreça MAC d'aquest adaptador. Conté exactament 12 carà cters compresos entre {0-9,A-F}. Tingueu en compte que el segon carà cter ha d'éser un dÃgit.</translation> </message> <message> <source>Generates a new random MAC address.</source> @@ -2994,7 +2993,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source> - <translation>Indica si el cable de la xarxa virtual està connectat a l'inici de la mà quina virtual o no.</translation> + <translation>Indica si el cable de la xarxa virtual està connectat a l'inici de la mà quina virtual o no.</translation> </message> <message> <source>Ca&ble Connected</source> @@ -3010,31 +3009,31 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Setup Application:</source> - <translation type="obsolete">&Configura l'aplicació:</translation> + <translation type="obsolete">&Configura l'aplicació:</translation> </message> <message> <source>Displays the command executed to set up the TAP interface.</source> - <translation type="obsolete">Mostra l'ordre executada per engegar l'interfÃcie TAP.</translation> + <translation type="obsolete">Mostra l'ordre executada per engegar l'interfÃcie TAP.</translation> </message> <message> <source>Selects the setup application.</source> - <translation type="obsolete">Selecciona l'aplicació de configuració.</translation> + <translation type="obsolete">Selecciona l'aplicació de configuració.</translation> </message> <message> <source>&Terminate Application:</source> - <translation type="obsolete">Finali&tza l'aplicació:</translation> + <translation type="obsolete">Finali&tza l'aplicació:</translation> </message> <message> <source>Displays the command executed to terminate the TAP interface.</source> - <translation type="obsolete">Mostra l'ordre exexutada per tancar la interfÃcie TAP.</translation> + <translation type="obsolete">Mostra l'ordre exexutada per tancar la interfÃcie TAP.</translation> </message> <message> <source>Selects the terminate application.</source> - <translation type="obsolete">Selecciona l'aplicació de finalització.</translation> + <translation type="obsolete">Selecciona l'aplicació de finalització.</translation> </message> <message> <source>Host Interface Settings</source> - <translation type="obsolete">Parà metres de la interfÃcie de l'amfitrió</translation> + <translation type="obsolete">Parà metres de la interfÃcie de l'amfitrió</translation> </message> <message> <source>A&dvanced</source> @@ -3042,7 +3041,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Shows or hides additional network adapter options.</source> - <translation>Mostra o amaga les opcions addicionals de l'adaptador de xarxa.</translation> + <translation>Mostra o amaga les opcions addicionals de l'adaptador de xarxa.</translation> </message> <message> <source>&Mac Address:</source> @@ -3073,7 +3072,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>no host-only adapter is selected</source> - <translation type="obsolete">no hi ha seleccionat cap adaptador de xarxa de només l'amfitrió</translation> + <translation type="obsolete">no hi ha seleccionat cap adaptador de xarxa de només l'amfitrió</translation> </message> <message> <source>Basic Details</source> @@ -3089,7 +3088,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Host-only Network Details</source> - <translation type="obsolete">Detalls de la xarxa de només l'amfitrió</translation> + <translation type="obsolete">Detalls de la xarxa de només l'amfitrió</translation> </message> <message> <source>Not selected</source> @@ -3097,7 +3096,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Host Settings</source> - <translation type="obsolete">Parà metres de l'amfitrió</translation> + <translation type="obsolete">Parà metres de l'amfitrió</translation> </message> <message> <source>&Bridged Network Adapter:</source> @@ -3105,7 +3104,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the name of the host network adapter selected for bridged networking.</source> - <translation type="obsolete">Mostra el nom de l'adaptador de xarxa seleccionat de l'amfitrió per a la xarxa en pont.</translation> + <translation type="obsolete">Mostra el nom de l'adaptador de xarxa seleccionat de l'amfitrió per a la xarxa en pont.</translation> </message> <message> <source>Internal &Network:</source> @@ -3117,11 +3116,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Host-only &Network Adapter:</source> - <translation type="obsolete">Adaptador de xarxa de &només l'amfitrió:</translation> + <translation type="obsolete">Adaptador de xarxa de &només l'amfitrió:</translation> </message> <message> <source>Displays the name of the VirtualBox network adapter selected for host-only networking.</source> - <translation type="obsolete">Mostra el nom de l'adaptador de xarxa VirtualBox seleccionat per a la xarxa de només l'amfitrió.</translation> + <translation type="obsolete">Mostra el nom de l'adaptador de xarxa VirtualBox seleccionat per a la xarxa de només l'amfitrió.</translation> </message> <message> <source>Guest Settings</source> @@ -3137,7 +3136,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source> - <translation type="obsolete">Mostra l'adreça MAC d'aquest adaptador. Conté exactament 12 carà cters compresos entre {0-9,A-F}. Tingueu en compte que el segon carà cter ha d'ésser un dÃgit.</translation> + <translation type="obsolete">Mostra l'adreça MAC d'aquest adaptador. Conté exactament 12 carà cters compresos entre {0-9,A-F}. Tingueu en compte que el segon carà cter ha d'ésser un dÃgit.</translation> </message> <message> <source>Generates a new random MAC address.</source> @@ -3149,18 +3148,18 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source> - <translation type="obsolete">Indica si el cable de la xarxa virtual està connectat a l'inici de la mà quina virtual o no.</translation> + <translation type="obsolete">Indica si el cable de la xarxa virtual està connectat a l'inici de la mà quina virtual o no.</translation> </message> </context> <context> <name>UIMachineSettingsNetworkPage</name> <message> <source>No host network interface is selected</source> - <translation type="obsolete">No s'ha seleccionat cap interfÃcie de xarxa</translation> + <translation type="obsolete">No s'ha seleccionat cap interfÃcie de xarxa</translation> </message> <message> <source>Internal network name is not set</source> - <translation type="obsolete">No s'ha especificat un nom de xarxa intern</translation> + <translation type="obsolete">No s'ha especificat un nom de xarxa intern</translation> </message> </context> <context> @@ -3172,7 +3171,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, enables the given parallel port of the virtual machine.</source> - <translation>Quan estigui marcat, s'habilitarà el port paral·lel de la mà quina virtual.</translation> + <translation>Quan estigui marcat, s'habilitarà el port paral·lel de la mà quina virtual.</translation> </message> <message> <source>&Enable Parallel Port</source> @@ -3184,7 +3183,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the parallel port number. You can choose one of the standard parallel ports or select <b>User-defined</b> and specify port parameters manually.</source> - <translation>Mostra el número del port parà l·lel. Podeu triar un dels ports paral·lels està ndards o seleccionar <b>Definit per l'usuari</b> i especificar els parà metres manualment.</translation> + <translation>Mostra el número del port parà l·lel. Podeu triar un dels ports paral·lels està ndards o seleccionar <b>Definit per l'usuari</b> i especificar els parà metres manualment.</translation> </message> <message> <source>&IRQ:</source> @@ -3200,7 +3199,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the base I/O port address of this parallel port. This should be a whole number between <tt>0</tt> and <tt>0xFFFF</tt>.</source> - <translation type="obsolete">Mostra l'adreça base del port E/S per a aquest port paral·lel. Valors và lids són nombres enters en un rang des de <tt>0</tt> fins <tt>0xFFFF</tt>.</translation> + <translation type="obsolete">Mostra l'adreça base del port E/S per a aquest port paral·lel. Valors và lids són nombres enters en un rang des de <tt>0</tt> fins <tt>0xFFFF</tt>.</translation> </message> <message> <source>Port &Path:</source> @@ -3212,26 +3211,26 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the IRQ number of this parallel port. This should be a whole number between <tt>0</tt> and <tt>255</tt>. Values greater than <tt>15</tt> may only be used if the <b>IO APIC</b> setting is enabled for this virtual machine.</source> - <translation>Mostra el número IRQ d'aquest port paral·lel. Això hauria de ser un nombre enter entre <tt>0</tt> i <tt>255</tt>. Valors superiors a <tt>15</tt> només s'haurien de fer servir si el parà metre <b>IO APIC</b> és actiu per a aquesta mà quina virtual.</translation> + <translation>Mostra el número IRQ d'aquest port paral·lel. Això hauria de ser un nombre enter entre <tt>0</tt> i <tt>255</tt>. Valors superiors a <tt>15</tt> només s'haurien de fer servir si el parà metre <b>IO APIC</b> és actiu per a aquesta mà quina virtual.</translation> </message> <message> <source>Displays the base I/O port address of this parallel port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source> - <translation>Mostra l'adreça base del port E/S d'aquest port paral·lel. Valors và lids són nombres enters amb un rang entre <tt>0</tt> i <tt>0xFFFF</tt>.</translation> + <translation>Mostra l'adreça base del port E/S d'aquest port paral·lel. Valors và lids són nombres enters amb un rang entre <tt>0</tt> i <tt>0xFFFF</tt>.</translation> </message> </context> <context> <name>UIMachineSettingsParallelPage</name> <message> <source>Duplicate port number selected </source> - <translation>S'ha seleccionat un número de port duplicat</translation> + <translation>S'ha seleccionat un número de port duplicat</translation> </message> <message> <source>Port path not specified </source> - <translation>No s'ha especificat un camà al port</translation> + <translation>No s'ha especificat un camà al port</translation> </message> <message> <source>Duplicate port path entered </source> - <translation>S'ha introduït un camà al port duplicat</translation> + <translation>S'ha introduït un camà al port duplicat</translation> </message> </context> <context> @@ -3308,8 +3307,8 @@ p, li { white-space: pre-wrap; } <translation>Només lectura</translation> </message> <message> - <source>Lists all shared folders accessible to this machine. Use 'net use x: \\vboxsvr\share' to access a shared folder named <i>share</i> from a DOS-like OS, or 'mount -t vboxsf share mount_point' to access it from a Linux OS. This feature requires Guest Additions.</source> - <translation>Mostra totes les carpetes accessibles a aquesta mà quina. Feu servir: 'net use x: \\vboxsvr\share' per accedir a la carpeta anomenada <i>share</i> des d'un sistema tipus DOS, o 'mount -t vboxsf share mount_point' per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requereix les Guest Additions.</translation> + <source>Lists all shared folders accessible to this machine. Use 'net use x: \\vboxsvr\share' to access a shared folder named <i>share</i> from a DOS-like OS, or 'mount -t vboxsf share mount_point' to access it from a Linux OS. This feature requires Guest Additions.</source> + <translation>Mostra totes les carpetes accessibles a aquesta mà quina. Feu servir: 'net use x: \\vboxsvr\share' per accedir a la carpeta anomenada <i>share</i> des d'un sistema tipus DOS, o 'mount -t vboxsf share mount_point' per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requereix les Guest Additions.</translation> </message> <message> <source>Name</source> @@ -3392,7 +3391,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the guest OS will try to automatically mount the shared folder on startup.</source> - <translation>Quan estigui marcat, el sistema operatiu client provarà de muntar automà ticament la carpeta compartida a l'inici.</translation> + <translation>Quan estigui marcat, el sistema operatiu client provarà de muntar automà ticament la carpeta compartida a l'inici.</translation> </message> <message> <source>&Auto-mount</source> @@ -3412,7 +3411,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, enables the given serial port of the virtual machine.</source> - <translation>Quan estigui marcat, s'habilitarà el port en sèrie a la mà quina virtual.</translation> + <translation>Quan estigui marcat, s'habilitarà el port en sèrie a la mà quina virtual.</translation> </message> <message> <source>&Enable Serial Port</source> @@ -3424,7 +3423,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the serial port number. You can choose one of the standard serial ports or select <b>User-defined</b> and specify port parameters manually.</source> - <translation>Mostra el número del port en sèrie. Podeu triar un dels ports sèrie està ndards o bé seleccionar <b>Definit per l'usuari</b> i especificar els parà metres manualment.</translation> + <translation>Mostra el número del port en sèrie. Podeu triar un dels ports sèrie està ndards o bé seleccionar <b>Definit per l'usuari</b> i especificar els parà metres manualment.</translation> </message> <message> <source>&IRQ:</source> @@ -3432,7 +3431,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the IRQ number of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>255</tt>. Values greater than <tt>15</tt> may only be used if the <b>IO APIC</b> is enabled for this virtual machine.</source> - <translation type="obsolete">Mostra el número IRQ d'aquest port sèrie. Valors và lids són nombres enters del rang des de <tt>0</tt> fins <tt>255</tt>. Valors més grans que <tt>15</tt> només s'han de fer servir només si l'<b>IO APIC</b> és actiu per a aquesta mà quina virtual.</translation> + <translation type="obsolete">Mostra el número IRQ d'aquest port sèrie. Valors và lids són nombres enters del rang des de <tt>0</tt> fins <tt>255</tt>. Valors més grans que <tt>15</tt> només s'han de fer servir només si l'<b>IO APIC</b> és actiu per a aquesta mà quina virtual.</translation> </message> <message> <source>I/O Po&rt:</source> @@ -3440,7 +3439,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the base I/O port address of this serial port. This should be a whole number between <tt>0</tt> and <tt>0xFFFF</tt>.</source> - <translation type="obsolete">Mostra l'adreça base del port d'E/S d'aquest port sèrie. Valors và lids són nombres enters del rang des de <tt>0</tt> fins <tt>0xFFFF</tt>.</translation> + <translation type="obsolete">Mostra l'adreça base del port d'E/S d'aquest port sèrie. Valors và lids són nombres enters del rang des de <tt>0</tt> fins <tt>0xFFFF</tt>.</translation> </message> <message> <source>Port &Mode:</source> @@ -3448,11 +3447,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Controls the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source> - <translation>Controla el mode de treball d'aquest port en sèrie. Si seleccioneu <b>Desconnectat</b>, el sistema client detectarà el port en sèrie però no podrà operar amb ell.</translation> + <translation>Controla el mode de treball d'aquest port en sèrie. Si seleccioneu <b>Desconnectat</b>, el sistema client detectarà el port en sèrie però no podrà operar amb ell.</translation> </message> <message> <source>If checked, the pipe specified in the <b>Port Path</b> field will be created by the virtual machine when it starts. Otherwise, the virtual machine will assume that the pipe exists and try to use it.</source> - <translation>Si està marcat, el conducte especificat al camp <b>Camà del port</b> es crearà per la mà quina virtual quan s'iniciï. En altre cas, la mà quina virtual provarà de fer servir el conducte existent.</translation> + <translation>Si està marcat, el conducte especificat al camp <b>Camà del port</b> es crearà per la mà quina virtual quan s'iniciï. En altre cas, la mà quina virtual provarà de fer servir el conducte existent.</translation> </message> <message> <source>&Create Pipe</source> @@ -3463,8 +3462,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete">Ruta del &port:</translation> </message> <message> - <source>Displays the path to the serial port's pipe on the host when the port is working in <b>Host Pipe</b> mode, or the host serial device name when the port is working in <b>Host Device</b> mode.</source> - <translation>Mostra el camà al conducte del port en sèrie a l'amfitrió quan el port treballa en el mode <b>Conducte amfitrió</b>, o al dispositiu sèrie de l'amfitrió quan el port treballa en el mode <b>Dispositiu Amfitrió</b>.</translation> + <source>Displays the path to the serial port's pipe on the host when the port is working in <b>Host Pipe</b> mode, or the host serial device name when the port is working in <b>Host Device</b> mode.</source> + <translation>Mostra el camà al conducte del port en sèrie a l'amfitrió quan el port treballa en el mode <b>Conducte amfitrió</b>, o al dispositiu sèrie de l'amfitrió quan el port treballa en el mode <b>Dispositiu Amfitrió</b>.</translation> </message> <message> <source>Port/File &Path:</source> @@ -3472,33 +3471,33 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the IRQ number of this serial port. This should be a whole number between <tt>0</tt> and <tt>255</tt>. Values greater than <tt>15</tt> may only be used if the <b>IO APIC</b> setting is enabled for this virtual machine.</source> - <translation>Mostra el número IRQ d'aquest port en sèrie. Això hauria de ser un nombre enter entre: <tt>0</tt> i <tt>255</tt>. Valors superiors a <tt>15</tt> només s'haurien de fer servir si el parà metre <b>IO APIC</b> està habilitat per a aquesta mà quina virtual.</translation> + <translation>Mostra el número IRQ d'aquest port en sèrie. Això hauria de ser un nombre enter entre: <tt>0</tt> i <tt>255</tt>. Valors superiors a <tt>15</tt> només s'haurien de fer servir si el parà metre <b>IO APIC</b> està habilitat per a aquesta mà quina virtual.</translation> </message> <message> <source>Displays the base I/O port address of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source> - <translation>Mostra l'adreça base d'E/S d'aquest port en sèrie. Valors và lids són nombres enter amb un rang entre <tt>0</tt> i <tt>0xFFFF</tt>.</translation> + <translation>Mostra l'adreça base d'E/S d'aquest port en sèrie. Valors và lids són nombres enter amb un rang entre <tt>0</tt> i <tt>0xFFFF</tt>.</translation> </message> </context> <context> <name>UIMachineSettingsSerialPage</name> <message> <source>Duplicate port number selected </source> - <translation>S'ha seleccionat un número de port duplicat</translation> + <translation>S'ha seleccionat un número de port duplicat</translation> </message> <message> <source>Port path not specified </source> - <translation>No s'ha especificat un camà al port</translation> + <translation>No s'ha especificat un camà al port</translation> </message> <message> <source>Duplicate port path entered </source> - <translation>S'ha introduït un camà de port duplicat</translation> + <translation>S'ha introduït un camà de port duplicat</translation> </message> </context> <context> <name>UIMachineSettingsStorage</name> <message> <source>No hard disk is selected for <i>%1</i></source> - <translation type="obsolete">No s'ha seleccionat cap disc dur per <i>%1</i></translation> + <translation type="obsolete">No s'ha seleccionat cap disc dur per <i>%1</i></translation> </message> <message> <source><i>%1</i> uses the hard disk that is already attached to <i>%2</i></source> @@ -3522,7 +3521,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Removes the highlighted hard disk attachment.</source> - <translation type="obsolete">Elimina l'adjunció de disc dur remarcada.</translation> + <translation type="obsolete">Elimina l'adjunció de disc dur remarcada.</translation> </message> <message> <source>Invokes the Virtual Disk Manager to select a hard disk to attach to the currently highlighted slot.</source> @@ -3530,7 +3529,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, enables the virtual SATA controller of this machine. Note that you cannot attach hard disks to SATA ports when the virtual SATA controller is disabled.</source> - <translation type="obsolete">Quan estigui marcat, s'habilitarà el controlador virtual SATA per a aquesta mà quina. Tingueu en compte que no podeu connectar discos durs a ports SATA quan el controlador SATA no és actiu.</translation> + <translation type="obsolete">Quan estigui marcat, s'habilitarà el controlador virtual SATA per a aquesta mà quina. Tingueu en compte que no podeu connectar discos durs a ports SATA quan el controlador SATA no és actiu.</translation> </message> <message> <source>&Enable SATA Controller</source> @@ -3550,7 +3549,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Lists all hard disks attached to this machine. Use a mouse click or the <tt>Space</tt> key on the highlighted item to activate the drop-down list and choose the desired value. Use the context menu or buttons to the right to add or remove hard disk attachments.</source> - <translation type="obsolete">Mostra els discos durs connectats a aquesta mà quina. Feu servir el clic de ratolà o la tecla <tt>espai</tt> a l'Ãtem remarcat per activar la llista deslplegable i seleccionar el valor desitjat. Feu servir el menú de context o els botons de la dreta per afegir o suprimir discos durs connectats.</translation> + <translation type="obsolete">Mostra els discos durs connectats a aquesta mà quina. Feu servir el clic de ratolà o la tecla <tt>espai</tt> a l'Ãtem remarcat per activar la llista deslplegable i seleccionar el valor desitjat. Feu servir el menú de context o els botons de la dreta per afegir o suprimir discos durs connectats.</translation> </message> <message> <source>Invokes the Virtual Media Manager to select a hard disk to attach to the currently highlighted slot.</source> @@ -3558,7 +3557,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>If checked, shows the differencing hard disks that are attached to slots rather than their base hard disks (shown for indirect attachments) and allows explicit attaching of differencing hard disks. Check this only if you need a complex hard disk setup.</source> - <translation type="obsolete">Si està marcat, mostrarà de forma diferenciada els discos durs connectats a les ranures en lloc de als discos durs base (mostrat en cas d'adjuncions indirectes), a més permetrà connectar altres discos durs explÃcitament. Marqueu això només si necessiteu una configuració complexa del disc dur.</translation> + <translation type="obsolete">Si està marcat, mostrarà de forma diferenciada els discos durs connectats a les ranures en lloc de als discos durs base (mostrat en cas d'adjuncions indirectes), a més permetrà connectar altres discos durs explÃcitament. Marqueu això només si necessiteu una configuració complexa del disc dur.</translation> </message> <message> <source>&Show Differencing Hard Disks</source> @@ -3642,23 +3641,23 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Remove Attachment</source> - <translation>Elimina l'adjunció</translation> + <translation>Elimina l'adjunció</translation> </message> <message> <source>Adds a new controller to the end of the Storage Tree.</source> - <translation>Afegeix un nou controlador al final de l'Arbre d'emmagatzematge.</translation> + <translation>Afegeix un nou controlador al final de l'Arbre d'emmagatzematge.</translation> </message> <message> <source>Removes the controller highlighted in the Storage Tree.</source> - <translation>Elimina el controlador realçat de l'Arbre d'emmagatzematge.</translation> + <translation>Elimina el controlador realçat de l'Arbre d'emmagatzematge.</translation> </message> <message> <source>Adds a new attachment to the Storage Tree using currently selected controller as parent.</source> - <translation>Afegeix una nova adjunció a l'Arbre d'emmagatzematge fent servir el controlador seleccionat actualment com a pare.</translation> + <translation>Afegeix una nova adjunció a l'Arbre d'emmagatzematge fent servir el controlador seleccionat actualment com a pare.</translation> </message> <message> <source>Removes the attachment highlighted in the Storage Tree.</source> - <translation>Elimina l'adjunció realçada a l'Arbre d'emmagatzematge.</translation> + <translation>Elimina l'adjunció realçada a l'Arbre d'emmagatzematge.</translation> </message> <message> <source>IDE Controller</source> @@ -3690,11 +3689,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Storage Tree</source> - <translation>&Arbre d'emmagatzematge</translation> + <translation>&Arbre d'emmagatzematge</translation> </message> <message> <source>Contains all storage controllers for this machine and the virtual images and host drives attached to them.</source> - <translation>Conté tots els controladors per a aquesta mà quina i les imatges virtual i controladors d'amfitrió connectats a elles.</translation> + <translation>Conté tots els controladors per a aquesta mà quina i les imatges virtual i controladors d'amfitrió connectats a elles.</translation> </message> <message> <source>Information</source> @@ -3702,7 +3701,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>The Storage Tree can contain several controllers of different types. This machine currently has no controllers.</source> - <translation>L'Arbre d'emmagatzematge pot contenir molts controladors de diferents tipus. Aquesta mà quina encara no té cap controlador.</translation> + <translation>L'Arbre d'emmagatzematge pot contenir molts controladors de diferents tipus. Aquesta mà quina encara no té cap controlador.</translation> </message> <message> <source>Attributes</source> @@ -3714,7 +3713,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Changes the name of the storage controller currently selected in the Storage Tree.</source> - <translation>Canvia el nom del controlador d'emmagatzematge actualment seleccionat a l'Arbre d'emmagatzematge.</translation> + <translation>Canvia el nom del controlador d'emmagatzematge actualment seleccionat a l'Arbre d'emmagatzematge.</translation> </message> <message> <source>&Type:</source> @@ -3722,7 +3721,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Selects the sub-type of the storage controller currently selected in the Storage Tree.</source> - <translation>Selecciona el sub-tipus del controlador d'emmagatzematge actualment seleccionat a l'Arbre d'emmagatzematge.</translation> + <translation>Selecciona el sub-tipus del controlador d'emmagatzematge actualment seleccionat a l'Arbre d'emmagatzematge.</translation> </message> <message> <source>S&lot:</source> @@ -3730,11 +3729,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Selects the slot on the storage controller used by this attachment. The available slots depend on the type of the controller and other attachments on it.</source> - <translation>Selecciona la ranura al controlador d'emmagatzematge utilitzada per aquesta adjunció. Les ranures disponibles depenen del tipus del controlador i de les altres adjuncions.</translation> + <translation>Selecciona la ranura al controlador d'emmagatzematge utilitzada per aquesta adjunció. Les ranures disponibles depenen del tipus del controlador i de les altres adjuncions.</translation> </message> <message> <source>Selects the virtual disk image or the host drive used by this attachment.</source> - <translation type="obsolete">Selecciona la imatge de disc virtual o el controlador de l'amfitrió que fa servir per aquesta adjunció.</translation> + <translation type="obsolete">Selecciona la imatge de disc virtual o el controlador de l'amfitrió que fa servir per aquesta adjunció.</translation> </message> <message> <source>Opens the Virtual Media Manager to select a virtual image for this attachment.</source> @@ -3750,7 +3749,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, allows the guest to send ATAPI commands directly to the host-drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source> - <translation>Quan estigui marc, permet a la mà quina client enviar ordres ATAPI directament al controlador amfitrió que fa possible fer servir les gravadores de CD/DVD connectades a l'amfitrio a dins de la mà quina virtual. Tingueu en compte que la gravació de CD's d'à udio encara no està suportada.</translation> + <translation>Quan estigui marc, permet a la mà quina client enviar ordres ATAPI directament al controlador amfitrió que fa possible fer servir les gravadores de CD/DVD connectades a l'amfitrio a dins de la mà quina virtual. Tingueu en compte que la gravació de CD's d'à udio encara no està suportada.</translation> </message> <message> <source>&Passthrough</source> @@ -3782,7 +3781,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Allows to use host I/O caching capabilities.</source> - <translation>Permet l'utilització de les capacitats de captura E/S.</translation> + <translation>Permet l'utilització de les capacitats de captura E/S.</translation> </message> <message> <source>Use host I/O cache</source> @@ -3798,11 +3797,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Storage Controller</source> - <translation type="obsolete">Controlador d'emmagatzematge</translation> + <translation type="obsolete">Controlador d'emmagatzematge</translation> </message> <message> <source>Storage Controller 1</source> - <translation type="obsolete">Controlador d'emmagatzematge 1</translation> + <translation type="obsolete">Controlador d'emmagatzematge 1</translation> </message> <message> <source>Type:</source> @@ -3810,7 +3809,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Host Drive</source> - <translation>Unitat de l'ordinador amfitrió</translation> + <translation>Unitat de l'ordinador amfitrió</translation> </message> <message> <source>Image</source> @@ -3830,7 +3829,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Choose a virtual CD/DVD disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source> - <translation>Seleccioneu un disc CD/DVD virtual o una unitat fÃsica que s'utilitzarà al dispositiu virtual. La mà quina virtual veurà el disc inserit a la unitat amb les dades al fitxer o al disc a la unitat fÃsica i els seus continguts.</translation> + <translation>Seleccioneu un disc CD/DVD virtual o una unitat fÃsica que s'utilitzarà al dispositiu virtual. La mà quina virtual veurà el disc inserit a la unitat amb les dades al fitxer o al disc a la unitat fÃsica i els seus continguts.</translation> </message> <message> <source>Set up the virtual CD/DVD drive</source> @@ -3842,7 +3841,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Choose a virtual floppy disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source> - <translation>Seleccioneu un disquet virtual o una unitat fÃsica que s'utilitzarà al dispositiu virtual. La mà quina virtual veurà el disc inserit a la unitat amb les dades al fitxer o al disc a la unitat fÃsica i els seus continguts.</translation> + <translation>Seleccioneu un disquet virtual o una unitat fÃsica que s'utilitzarà al dispositiu virtual. La mà quina virtual veurà el disc inserit a la unitat amb les dades al fitxer o al disc a la unitat fÃsica i els seus continguts.</translation> </message> <message> <source>Set up the virtual floppy drive</source> @@ -3872,28 +3871,28 @@ p, li { white-space: pre-wrap; } <context> <name>UIMachineSettingsSystem</name> <message> - <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> - <translation>heu assignat més d'un <b>%1%</b> de la memòria del vostre ordinador (<b>%2</b>) a la mà quina virtual. No heu deixat suficient memòria al sistema amfitrió. Seleccineu un percentatge menor.</translation> + <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source> + <translation>heu assignat més d'un <b>%1%</b> de la memòria del vostre ordinador (<b>%2</b>) a la mà quina virtual. No heu deixat suficient memòria al sistema amfitrió. Seleccineu un percentatge menor.</translation> </message> <message> - <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. There might not be enough memory left for your host operating system. Continue at your own risk.</source> - <translation>heu assignat més d'un <b>%1%</b> de la memòria del vostre ordinador (<b>%2</b>) a la mà quina virtual. No heu deixat suficient memòria al sistema amfitrió. Contineu pel vostre compte (no recomanable).</translation> + <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. There might not be enough memory left for your host operating system. Continue at your own risk.</source> + <translation>heu assignat més d'un <b>%1%</b> de la memòria del vostre ordinador (<b>%2</b>) a la mà quina virtual. No heu deixat suficient memòria al sistema amfitrió. Contineu pel vostre compte (no recomanable).</translation> </message> <message> <source>for performance reasons, the number of virtual CPUs attached to the virtual machine may not be more than twice the number of physical CPUs on the host (<b>%1</b>). Please reduce the number of virtual CPUs.</source> - <translation>per raons d'eficiència, el nombre de processadors virtuals assignats a la mà quina virtual no pot ser més del doble del nombre de processadors fÃsics al sistema amfitrió (<b>%1</b>). Reduïu el nombre de processadors virtuals.</translation> + <translation>per raons d'eficiència, el nombre de processadors virtuals assignats a la mà quina virtual no pot ser més del doble del nombre de processadors fÃsics al sistema amfitrió (<b>%1</b>). Reduïu el nombre de processadors virtuals.</translation> </message> <message> <source>you have assigned more virtual CPUs to the virtual machine than the number of physical CPUs on your host system (<b>%1</b>). This is likely to degrade the performance of your virtual machine. Please consider reducing the number of virtual CPUs.</source> - <translation>heu assignat més processadors virtuals a aquesta mà quina virtual que el nombre de processadors fÃsics al sistema amfitrió (<b>%1</b>). Això rebaixarà l'eficiència de la mà quina virtual. Considereu reduir el nombre de processadors virtuals.</translation> + <translation>heu assignat més processadors virtuals a aquesta mà quina virtual que el nombre de processadors fÃsics al sistema amfitrió (<b>%1</b>). Això rebaixarà l'eficiència de la mà quina virtual. Considereu reduir el nombre de processadors virtuals.</translation> </message> <message> <source>you have assigned more than one virtual CPU to this VM. This will not work unless the IO-APIC feature is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation>hi ha més d'un processador virtual assignat a aquesta mà quina virtual, la qual requereix tenir la caracterÃstica IO-APIC també activada, i l'SMP no podrà treballar, per la qual cosa aquesta caracterÃstica s'activarà automà ticament quan accepteu els parà metres de la mà quina virtual prement el botó D'acord.</translation> + <translation>hi ha més d'un processador virtual assignat a aquesta mà quina virtual, la qual requereix tenir la caracterÃstica IO-APIC també activada, i l'SMP no podrà treballar, per la qual cosa aquesta caracterÃstica s'activarà automà ticament quan accepteu els parà metres de la mà quina virtual prement el botó D'acord.</translation> </message> <message> <source>you have assigned more than one virtual CPU to this VM. This will not work unless hardware virtualization (VT-x/AMD-V) is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation>hi ha més d'un processador virtual assignat a aquesta mà quina virtual, la qual requereix tenir la caracterÃstica de virtualització VT-x/AMD-V també activada, i l'SMP no podrà treballar, per la qual cosa aquesta caracterÃstica s'activarà automà ticament quan accepteu els parà metres de la mà quina virtual prement el botó D'acord.</translation> + <translation>hi ha més d'un processador virtual assignat a aquesta mà quina virtual, la qual requereix tenir la caracterÃstica de virtualització VT-x/AMD-V també activada, i l'SMP no podrà treballar, per la qual cosa aquesta caracterÃstica s'activarà automà ticament quan accepteu els parà metres de la mà quina virtual prement el botó D'acord.</translation> </message> <message> <source><qt>%1&nbsp;MB</qt></source> @@ -3919,7 +3918,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source> - <translation>Controla la quantitat de memòria amb què es proveeix a la mà quina virtual. Si n'assigneu massa, pot ser que la mà quina no s'iniciï.</translation> + <translation>Controla la quantitat de memòria amb què es proveeix a la mà quina virtual. Si n'assigneu massa, pot ser que la mà quina no s'iniciï.</translation> </message> <message> <source>MB</source> @@ -3927,11 +3926,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Boot Order:</source> - <translation>&Ordre d'arrencada:</translation> + <translation>&Ordre d'arrencada:</translation> </message> <message> <source>Defines the boot device order. Use the checkboxes on the left to enable or disable individual boot devices. Move items up and down to change the device order.</source> - <translation>Definiu l'ordre dels dispositius d'arrencada. Useu les caselles de selecció a l'esquerra per activar o desactivar els dispositius d'arrencada individuals. Moveu els elements amunt i avall per a canviar l'ordre dels dispositius.</translation> + <translation>Definiu l'ordre dels dispositius d'arrencada. Useu les caselles de selecció a l'esquerra per activar o desactivar els dispositius d'arrencada individuals. Moveu els elements amunt i avall per a canviar l'ordre dels dispositius.</translation> </message> <message> <source>Move Down (Ctrl-Down)</source> @@ -3939,7 +3938,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Moves the selected boot device down.</source> - <translation>Mou avall el dispositiu d'arrencada seleccionat.</translation> + <translation>Mou avall el dispositiu d'arrencada seleccionat.</translation> </message> <message> <source>Move Up (Ctrl-Up)</source> @@ -3947,23 +3946,23 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Moves the selected boot device up.</source> - <translation>Mou amunt el dispositiu d'arrecada seleccionat.</translation> + <translation>Mou amunt el dispositiu d'arrecada seleccionat.</translation> </message> <message> <source>Extended Features:</source> <translation>Funcions ampliades:</translation> </message> <message> - <source>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> - <translation type="obsolete">Quan estigui marcat, la mà quina virtual suportarà la configuració avançada i la interfÃcie de gestió de l'energia (ACPI). <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</translation> + <source>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> + <translation type="obsolete">Quan estigui marcat, la mà quina virtual suportarà la configuració avançada i la interfÃcie de gestió de l'energia (ACPI). <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</translation> </message> <message> <source>Enable &ACPI</source> <translation type="obsolete">Habilita &ACPI</translation> </message> <message> - <source>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> - <translation>Quan estigui marcat, la mà quina virtual suportarà l'entrada/sortida APIC (ES APIC), que pot reduir el rendiment de la mà quina virtual. <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</translation> + <source>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source> + <translation>Quan estigui marcat, la mà quina virtual suportarà l'entrada/sortida APIC (ES APIC), que pot reduir el rendiment de la mà quina virtual. <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</translation> </message> <message> <source>Enable &IO APIC</source> @@ -3983,7 +3982,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source> - <translation>Quan estigui marcat, la caracterÃstica d'extensió d'adreça fÃsica (PAE) del processador de l'amfitrió s'exposarà a la mà quina virtual.</translation> + <translation>Quan estigui marcat, la caracterÃstica d'extensió d'adreça fÃsica (PAE) del processador de l'amfitrió s'exposarà a la mà quina virtual.</translation> </message> <message> <source>Enable PA&E/NX</source> @@ -3998,8 +3997,8 @@ p, li { white-space: pre-wrap; } <translation>Virtualització de maquinari:</translation> </message> <message> - <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source> - <translation>Quan estigui marcat, l'aplicació tractarà de fer ús del processador de l'amfitrió per habilitar extensions com Intel VT-x i AMD-V.</translation> + <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source> + <translation>Quan estigui marcat, l'aplicació tractarà de fer ús del processador de l'amfitrió per habilitar extensions com Intel VT-x i AMD-V.</translation> </message> <message> <source>Enable &VT-x/AMD-V</source> @@ -4007,7 +4006,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</source> - <translation>Quan estigui marcat, la mà quina virtual provarà de fer ús de l'extensió de paginació imbricada d'intel VT-x i AMD-V.</translation> + <translation>Quan estigui marcat, la mà quina virtual provarà de fer ús de l'extensió de paginació imbricada d'intel VT-x i AMD-V.</translation> </message> <message> <source>Enable Nested Pa&ging</source> @@ -4020,7 +4019,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the guest will support the Extended Firmware Interface (EFI), which is required to boot certain guest OSes. Non-EFI aware OSes will not be able to boot if this option is activated.</source> - <translation>Quan estigui marcat, el client tindrà suport per l'Extended Firmware Interface (EFI), requerida per a iniciar alguns sistemes operatius. El sistemes que no facin servir EFI no podran iniciar-se si aquesta opció és activa.</translation> + <translation>Quan estigui marcat, el client tindrà suport per l'Extended Firmware Interface (EFI), requerida per a iniciar alguns sistemes operatius. El sistemes que no facin servir EFI no podran iniciar-se si aquesta opció és activa.</translation> </message> <message> <source>Enable &EFI (special OSes only)</source> @@ -4028,7 +4027,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>If checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source> - <translation>Si està marcat, el dispositiu TRC informarà de l'hora en UTC, d'altra manera es mostrarà en hora local (amfitrió). Els sistemes Unix normalment s'esperen que el rellotge de maquinari estigui definiti com a UTC.</translation> + <translation>Si està marcat, el dispositiu TRC informarà de l'hora en UTC, d'altra manera es mostrarà en hora local (amfitrió). Els sistemes Unix normalment s'esperen que el rellotge de maquinari estigui definiti com a UTC.</translation> </message> <message> <source>Hardware clock in &UTC time</source> @@ -4036,15 +4035,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Controls the number of virtual CPUs in the virtual machine. You need hardware virtualization support on your host system to use more than one virtual CPU.</source> - <translation>Controla el nombre de processadors virtuals de la mà quina virtual. Necessiteu suport per a virtualització de maquinari al vostre sistema amfitrió per fer servir més d'un processador virtual.</translation> + <translation>Controla el nombre de processadors virtuals de la mà quina virtual. Necessiteu suport per a virtualització de maquinari al vostre sistema amfitrió per fer servir més d'un processador virtual.</translation> </message> <message> <source>If checked, an absolute pointing device (a USB tablet) will be supported. Otherwise, only a standard PS/2 mouse will be emulated.</source> - <translation>Si està marcat, se suportarà un dispositiu d'apuntament absolut (un dispositiu USB). D'altra manera s'emularà un ratolà PS/2 està ndard.</translation> + <translation>Si està marcat, se suportarà un dispositiu d'apuntament absolut (un dispositiu USB). D'altra manera s'emularà un ratolà PS/2 està ndard.</translation> </message> <message> <source>Enable &absolute pointing device</source> - <translation>Habilita el dispositiu d'apuntament &absolut</translation> + <translation>Habilita el dispositiu d'apuntament &absolut</translation> </message> <message> <source>&Chipset:</source> @@ -4056,7 +4055,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>you have assigned ICH9 chipset type to this VM. It will not work properly unless the IO-APIC feature is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation>he assignat un tipus de xip ICH9 a aquesta mà quina virtual. No funcionarà correctament a menys que la caracterÃstica IO-APIC estigui habilitada. Això es farà automà ticament quan accepteu els parà metres de la mà quina virtual en prémer el botó «D'acord».</translation> + <translation>he assignat un tipus de xip ICH9 a aquesta mà quina virtual. No funcionarà correctament a menys que la caracterÃstica IO-APIC estigui habilitada. Això es farà automà ticament quan accepteu els parà metres de la mà quina virtual en prémer el botó «D'acord».</translation> </message> </context> <context> @@ -4067,7 +4066,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>A&dd Filter From Device</source> - <translation>Afegeix un filtre des d'un &dispositiu</translation> + <translation>Afegeix un filtre des d'un &dispositiu</translation> </message> <message> <source>&Edit Filter</source> @@ -4087,27 +4086,27 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source> - <translation>Afegeix un filtre d'USB nou amb tots els camps definits inicialment com a cadenes buides. Tingueu en compte que un filtre com aquest concordarà amb qualsevol dispositiu USB connectat.</translation> + <translation>Afegeix un filtre d'USB nou amb tots els camps definits inicialment com a cadenes buides. Tingueu en compte que un filtre com aquest concordarà amb qualsevol dispositiu USB connectat.</translation> </message> <message> <source>Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source> - <translation>Afegeix un filtre d'USB nou amb tots els camps definits amb els valors del dispositiu USB seleccionat dels que estan connectats a l'ordinador amfitrió.</translation> + <translation>Afegeix un filtre d'USB nou amb tots els camps definits amb els valors del dispositiu USB seleccionat dels que estan connectats a l'ordinador amfitrió.</translation> </message> <message> <source>Edits the selected USB filter.</source> - <translation>Edita el filtre d'USB seleccionat.</translation> + <translation>Edita el filtre d'USB seleccionat.</translation> </message> <message> <source>Removes the selected USB filter.</source> - <translation>Elimina el filtre d'USB seleccionat.</translation> + <translation>Elimina el filtre d'USB seleccionat.</translation> </message> <message> <source>Moves the selected USB filter up.</source> - <translation>Mou el filtre d'USB seleccionat amunt.</translation> + <translation>Mou el filtre d'USB seleccionat amunt.</translation> </message> <message> <source>Moves the selected USB filter down.</source> - <translation>Mou el filtre d'USB seleccionat avall.</translation> + <translation>Mou el filtre d'USB seleccionat avall.</translation> </message> <message> <source>New Filter %1</source> @@ -4116,7 +4115,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, enables the virtual USB controller of this machine.</source> - <translation>Quan estigui marcat, s'habilitarà el controlador virtual USB d'aquesta mà quina.</translation> + <translation>Quan estigui marcat, s'habilitarà el controlador virtual USB d'aquesta mà quina.</translation> </message> <message> <source>Enable &USB Controller</source> @@ -4124,7 +4123,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source> - <translation>Quan estigui marcat, s'habilitarà el controlador virtual USB EHCI per a aquesta mà quina. El controlador USB EHCI proveeix de suport USB 2.0.</translation> + <translation>Quan estigui marcat, s'habilitarà el controlador virtual USB EHCI per a aquesta mà quina. El controlador USB EHCI proveeix de suport USB 2.0.</translation> </message> <message> <source>Enable USB 2.0 (E&HCI) Controller</source> @@ -4136,7 +4135,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Lists all USB filters of this machine. The checkbox to the left defines whether the particular filter is enabled or not. Use the context menu or buttons to the right to add or remove USB filters.</source> - <translation>Mostra tots els filtres USB d'aquesta mà quina. La casella de selecció de l'esquerra defeneix si un filtre concret és actiu o no. Feu servir el menú de context o els botons de la dreta per afegir o eliminar filtres USB.</translation> + <translation>Mostra tots els filtres USB d'aquesta mà quina. La casella de selecció de l'esquerra defeneix si un filtre concret és actiu o no. Feu servir el menú de context o els botons de la dreta per afegir o eliminar filtres USB.</translation> </message> <message> <source>[filter]</source> @@ -4214,7 +4213,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Defines the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source> - <translation>Defineix l'ID del venedor del producte. El format de la cadena de <i>seqüència exacta</i> és <tt>XXXX</tt> a on <tt>X</tt> és un dÃgit hexadecimal. Una cadena buida no tindrà cap valor.</translation> + <translation>Defineix l'ID del venedor del producte. El format de la cadena de <i>seqüència exacta</i> és <tt>XXXX</tt> a on <tt>X</tt> és un dÃgit hexadecimal. Una cadena buida no tindrà cap valor.</translation> </message> <message> <source>&Product ID:</source> @@ -4230,7 +4229,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Defines the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source> - <translation>Defineix el número de revisió del filtre. El format de la cadena de <i>seqüència exacta</i> és <tt>IIFF</tt> a on <tt>I</tt> és un dÃgit decimal de la part entera i <tt>F</tt> és un dÃgit decimal d'una part de fracció. Una cadena buida no tindrà cap valor.</translation> + <translation>Defineix el número de revisió del filtre. El format de la cadena de <i>seqüència exacta</i> és <tt>IIFF</tt> a on <tt>I</tt> és un dÃgit decimal de la part entera i <tt>F</tt> és un dÃgit decimal d'una part de fracció. Una cadena buida no tindrà cap valor.</translation> </message> <message> <source>&Manufacturer:</source> @@ -4262,15 +4261,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Defines the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source> - <translation>Defineix el filtre de l'USB de l'amfitrió com una cadena de <i>seqüència exacta</i>. Una cadena buida no tindrà cap valor.</translation> + <translation>Defineix el filtre de l'USB de l'amfitrió com una cadena de <i>seqüència exacta</i>. Una cadena buida no tindrà cap valor.</translation> </message> <message> <source>R&emote:</source> <translation>R&emot:</translation> </message> <message> - <source>Defines whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source> - <translation>Defineix on s'aplica aquest filtre als dispositius USB connectats localment a l'amfitrió (<i>No</i>), al VRDP de la computadora client (<i>SÃ</i>), o a ambdós (<i>Qualsevol</i>).</translation> + <source>Defines whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source> + <translation>Defineix on s'aplica aquest filtre als dispositius USB connectats localment a l'amfitrió (<i>No</i>), al VRDP de la computadora client (<i>SÃ</i>), o a ambdós (<i>Qualsevol</i>).</translation> </message> <message> <source>&Action:</source> @@ -4278,7 +4277,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Defines an action performed by the host computer when a matching device is attached: give it up to the host OS (<i>Ignore</i>) or grab it for later usage by virtual machines (<i>Hold</i>).</source> - <translation>Defineix una acció duta a terme per l'amfitrió quan es conneca un dispositiu: activa-lo al sistema amfitrió (<i>Ignora</i>) o registra-ho per fer-lo servir després per les mà quines virtuals (<i>Manté</i>).</translation> + <translation>Defineix una acció duta a terme per l'amfitrió quan es conneca un dispositiu: activa-lo al sistema amfitrió (<i>Ignora</i>) o registra-ho per fer-lo servir després per les mà quines virtuals (<i>Manté</i>).</translation> </message> <message> <source>USB Filter Details</source> @@ -4289,7 +4288,7 @@ p, li { white-space: pre-wrap; } <name>UIMachineWindowNormal</name> <message> <source>Shows the currently assigned Host key.<br>This key, when pressed alone, toggles the keyboard and mouse capture state. It can also be used in combination with other keys to quickly perform actions from the main menu.</source> - <translation>Mostra la tecla assignada a l'amfitrió.<br>Quan es prem aquesta tecla commuta l'estat de captura del teclat i el punter. També es pot fer servir en combinació amb altres tecles per accedir rà pidament a algunes opcions del menú principal.</translation> + <translation>Mostra la tecla assignada a l'amfitrió.<br>Quan es prem aquesta tecla commuta l'estat de captura del teclat i el punter. També es pot fer servir en combinació amb altres tecles per accedir rà pidament a algunes opcions del menú principal.</translation> </message> </context> <context> @@ -4304,7 +4303,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr></source> - <translation>S'està baixat la imatge de CD de les VirtualBox Guest Additions des de <nobr><b>%1</b>...</nobr></translation> + <translation>S'està baixat la imatge de CD de les VirtualBox Guest Additions des de <nobr><b>%1</b>...</nobr></translation> </message> </context> <context> @@ -4315,15 +4314,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Cancel the VirtualBox User Manual download</source> - <translation>Cancel·la la baixada del manual d'usuari del virtualBox</translation> + <translation>Cancel·la la baixada del manual d'usuari del virtualBox</translation> </message> <message> <source>Downloading the VirtualBox User Manual</source> - <translation>S'està baixant el manual d'usuari del VirtualBox</translation> + <translation>S'està baixant el manual d'usuari del VirtualBox</translation> </message> <message> <source>Downloading the VirtualBox User Manual <nobr><b>%1</b>...</nobr></source> - <translation>S'està baixant el manual d'usuari del VirtualBox <nobr><b>%1</b>...</nobr></translation> + <translation>S'està baixant el manual d'usuari del VirtualBox <nobr><b>%1</b>...</nobr></translation> </message> </context> <context> @@ -4334,7 +4333,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Use Host Screen %1</source> - <translation>Fes servir la pantalla d'amfitrió %1</translation> + <translation>Fes servir la pantalla d'amfitrió %1</translation> </message> </context> <context> @@ -4348,12 +4347,12 @@ p, li { white-space: pre-wrap; } <p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> <translation type="obsolete"><p>Aquest auxiliar us ajudarà a crear una nova imatge de disc dur virtual per a la vostra mà quina virtual.</p> -<p>Feu servir el botó <b>Següent</b> per anar a la pà gina següent de l'auxiliar +<p>Feu servir el botó <b>Següent</b> per anar a la pà gina següent de l'auxiliar i el botó <b>Enrere</b> per a tornar a la pà gina anterior.</p></translation> </message> <message> <source>Welcome to the Create New Virtual Disk Wizard!</source> - <translation type="obsolete">Benvingut a l'auxiliar per a la creació d'un disc virtual nou!</translation> + <translation type="obsolete">Benvingut a l'auxiliar per a la creació d'un disc virtual nou!</translation> </message> <message> <source><p>Select the type of virtual hard disk image you want to create.</p> @@ -4362,20 +4361,20 @@ of space on your physical hard disk. It will grow dynamically (up to the size specified) as the Guest OS claims disk space.</p> <p>A <b>fixed-size image</b> does not grow. It is stored in a file of approximately the same size as the size of the virtual hard disk.</p></source> - <translation type="obsolete"><p>Seleccioneu el tipus d'imatge de disc dur virtual que voleu crear.</p> -<p>Una <b>imatge que s'expandeix dinà micament</b> inicialment ocupa molt poc espai + <translation type="obsolete"><p>Seleccioneu el tipus d'imatge de disc dur virtual que voleu crear.</p> +<p>Una <b>imatge que s'expandeix dinà micament</b> inicialment ocupa molt poc espai al vostre disc dur fÃsic. Augmentarà dinà micament (fins a la mida especificada) a mesura que el sistema operatiu client necessite espai de disc.</p> -<p>Una <b>imatge de mida fixa</b> no augmenta. S'emmagetzema en un fitxer que té +<p>Una <b>imatge de mida fixa</b> no augmenta. S'emmagetzema en un fitxer que té aproximadament la mateixa mida que el disc dur virtual.</p></translation> </message> <message> <source>Image Type</source> - <translation type="obsolete">Tipus d'imatge</translation> + <translation type="obsolete">Tipus d'imatge</translation> </message> <message> <source>&Dynamically expanding image</source> - <translation type="obsolete">Imatge que s'expandeix &dinà micament</translation> + <translation type="obsolete">Imatge que s'expandeix &dinà micament</translation> </message> <message> <source>&Fixed-size image</source> @@ -4383,17 +4382,17 @@ aproximadament la mateixa mida que el disc dur virtual.</p></translation> </message> <message> <source>Virtual Disk Image Type</source> - <translation type="obsolete">Tipus d'imatge de disc virtual</translation> + <translation type="obsolete">Tipus d'imatge de disc virtual</translation> </message> <message> <source><p>Press the <b>Select</b> button to select the location and name of the file to store the virtual hard disk image or type a file name in the entry field.</p></source> <translation type="obsolete"><p>Premeu el botó <b>Selecciona</b> per seleccionar el lloc i el nom del fitxer -on emmagatzemar la imatge del disc dur virtual o escriviu el nom del fitxer en el camp d'entrada.</p></translation> +on emmagatzemar la imatge del disc dur virtual o escriviu el nom del fitxer en el camp d'entrada.</p></translation> </message> <message> <source>&Image File Name</source> - <translation type="obsolete">Nom del fitxer d'&imatge</translation> + <translation type="obsolete">Nom del fitxer d'&imatge</translation> </message> <message> <source>Select</source> @@ -4402,7 +4401,7 @@ on emmagatzemar la imatge del disc dur virtual o escriviu el nom del fitxer en e <message> <source><p>Select the size of the virtual hard disk image in megabytes. This size will be reported to the Guest OS as the size of the virtual hard disk.</p></source> - <translation type="obsolete"><p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Aquesta serà la mida que s'informarà + <translation type="obsolete"><p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Aquesta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p></translation> </message> <message> @@ -4443,7 +4442,7 @@ al sistema operatiu client com a mida del disc dur.</p></translation> </message> <message> <source>Select a file for the new hard disk image file</source> - <translation type="obsolete">Seleccioneu un fitxer per al fitxer d'imatge del disc dur nou</translation> + <translation type="obsolete">Seleccioneu un fitxer per al fitxer d'imatge del disc dur nou</translation> </message> <message> <source><p>Select the type of virtual hard disk image you want to create.</p> @@ -4454,17 +4453,17 @@ the size specified) as the Guest OS claims disk space.</p> the same size as the size of the virtual hard disk. The creation of a fixed-size image may take a long time depending on the image size and the write performance of your harddisk.</p></source> <translation type="obsolete"><p>Seleccioneu la imatge de disc dur virtual que voleu crear.</p> -<p>Una <b>imatge d'expansió dinà mica</b> ocupa inicialment una quantiat -molt petita d'espai al disc dur fÃsic. Creixerà dinà micament (fins a la mida +<p>Una <b>imatge d'expansió dinà mica</b> ocupa inicialment una quantiat +molt petita d'espai al disc dur fÃsic. Creixerà dinà micament (fins a la mida especificada) conforme el Sistema Amfitrió consumisca espai.</p> -<p>Una <b>imatge de mida fixa</b> no creix. S'emmagatzema en un fitxer -de mida aproximadament la que s'indica per al disc dur virtual. La creació d'una +<p>Una <b>imatge de mida fixa</b> no creix. S'emmagatzema en un fitxer +de mida aproximadament la que s'indica per al disc dur virtual. La creació d'una imatge de mida fixa triga un temps segons la grandà ria de la mateixa i de -l'eficiència d'escriptura del disc dur fÃsic.</p></translation> +l'eficiència d'escriptura del disc dur fÃsic.</p></translation> </message> <message> <source><p>This wizard will help you to create a new virtual hard disk image for your virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> - <translation type="obsolete"><p>Aquest auxiliar us ajudarà a crear una nova imatge de disc dur virtual per a la vostra mà quina virtual.</p><p>Feu servir el botó <b>Següent</b> per anar a la pà gina següent de l'auxiliar i el botó <b>Enrere</b> per a tornar a la pà gina anterior.</p></translation> + <translation type="obsolete"><p>Aquest auxiliar us ajudarà a crear una nova imatge de disc dur virtual per a la vostra mà quina virtual.</p><p>Feu servir el botó <b>Següent</b> per anar a la pà gina següent de l'auxiliar i el botó <b>Enrere</b> per a tornar a la pà gina anterior.</p></translation> </message> <message> <source>< &Back</source> @@ -4476,15 +4475,15 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation </message> <message> <source><p>Select the type of virtual hard disk image you want to create.</p><p>A <b>dynamically expanding image</b> initially occupies a very small amount of space on your physical hard disk. It will grow dynamically (up to the size specified) as the Guest OS claims disk space.</p><p>A <b>fixed-size image</b> does not grow. It is stored in a file of approximately the same size as the size of the virtual hard disk. The creation of a fixed-size image may take a long time depending on the image size and the write performance of your harddisk.</p></source> - <translation type="obsolete"><p>Seleccioneu el tipus d'imatge de disc dur virtual que voleu crear.</p> <p>Una <b>imatge que s'expandeix dinà micament</b> inicialment ocupa molt poc espai al vostre disc dur fÃsic. Augmentarà dinà micament (fins a la mida especificada) a mesura que el sistema operatiu client necessite espai de disc.</p><p>Una <b>imatge de mida fixa</b> no augmenta. S'emmagetzema en un fitxer que té aproximadament la mateixa mida que el disc dur virtual.</p></translation> + <translation type="obsolete"><p>Seleccioneu el tipus d'imatge de disc dur virtual que voleu crear.</p> <p>Una <b>imatge que s'expandeix dinà micament</b> inicialment ocupa molt poc espai al vostre disc dur fÃsic. Augmentarà dinà micament (fins a la mida especificada) a mesura que el sistema operatiu client necessite espai de disc.</p><p>Una <b>imatge de mida fixa</b> no augmenta. S'emmagetzema en un fitxer que té aproximadament la mateixa mida que el disc dur virtual.</p></translation> </message> <message> <source><p>Press the <b>Select</b> button to select the location and name of the file to store the virtual hard disk image or type a file name in the entry field.</p></source> - <translation type="obsolete"><p>Premeu el botó <b>Selecciona</b> per seleccionar el lloc i el nom del fitxer on emmagatzemar la imatge del disc dur virtual o escriviu el nom del fitxer en el camp d'entrada.</p></translation> + <translation type="obsolete"><p>Premeu el botó <b>Selecciona</b> per seleccionar el lloc i el nom del fitxer on emmagatzemar la imatge del disc dur virtual o escriviu el nom del fitxer en el camp d'entrada.</p></translation> </message> <message> <source><p>Select the size of the virtual hard disk image in megabytes. This size will be reported to the Guest OS as the size of the virtual hard disk.</p></source> - <translation type="obsolete"><p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Aquesta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p></translation> + <translation type="obsolete"><p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Aquesta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p></translation> </message> <message> <source>If the above settings are correct, press the <b>Finish</b> button. Once you press it, a new hard disk image will be created.</source> @@ -4520,23 +4519,23 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation </message> <message> <source><p>This wizard will help you to create a new virtual hard disk for your virtual machine.</p><p>Use the <b>Next</b> button to go to the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> - <translation type="obsolete"><p>Aquest auxiliar us ajudarà a crear una nova imatge de disc dur virtual per a la vostra mà quina virtual.</p><p>Feu servir el botó <b>Següent</b> per anar a la pà gina següent de l'auxiliar i el botó <b>Enrere</b> per a tornar a la pà gina anterior.</p></translation> + <translation type="obsolete"><p>Aquest auxiliar us ajudarà a crear una nova imatge de disc dur virtual per a la vostra mà quina virtual.</p><p>Feu servir el botó <b>Següent</b> per anar a la pà gina següent de l'auxiliar i el botó <b>Enrere</b> per a tornar a la pà gina anterior.</p></translation> </message> <message> <source>Hard Disk Storage Type</source> - <translation type="obsolete">Tipus d'emmagatzematge per al disc dur</translation> + <translation type="obsolete">Tipus d'emmagatzematge per al disc dur</translation> </message> <message> <source><p>Select the type of virtual hard disk you want to create.</p><p>A <b>dynamically expanding storage</b> initially occupies a very small amount of space on your physical hard disk. It will grow dynamically (up to the size specified) as the Guest OS claims disk space.</p><p>A <b>fixed-size storage</b> does not grow. It is stored in a file of approximately the same size as the size of the virtual hard disk. The creation of a fixed-size storage may take a long time depending on the storage size and the write performance of your harddisk.</p></source> - <translation type="obsolete"><p>Seleccioneu la imatge de disc dur virtual que voleu crear. Una <b>imatge d'expansió dinà mica</b> ocupa inicialment una quantiat molt petita d'espai al disc dur fÃsic. Creixerà dinà micament (fins a la mida especificada) conforme el Sistema Amfitrió consumeixi espai. Una <b>imatge de mida fixa</b> no creix. S'emmagatzema en un fitxer de mida aproximadament la que s'indica per al disc dur virtual. La creació d'una imatge de mida fixa triga un temps segons la mida de la mateixa i de l'eficiència d'escriptura del disc dur fÃsic.</p></translation> + <translation type="obsolete"><p>Seleccioneu la imatge de disc dur virtual que voleu crear. Una <b>imatge d'expansió dinà mica</b> ocupa inicialment una quantiat molt petita d'espai al disc dur fÃsic. Creixerà dinà micament (fins a la mida especificada) conforme el Sistema Amfitrió consumeixi espai. Una <b>imatge de mida fixa</b> no creix. S'emmagatzema en un fitxer de mida aproximadament la que s'indica per al disc dur virtual. La creació d'una imatge de mida fixa triga un temps segons la mida de la mateixa i de l'eficiència d'escriptura del disc dur fÃsic.</p></translation> </message> <message> <source>Storage Type</source> - <translation type="obsolete">Tipus d'emmagatzematge</translation> + <translation type="obsolete">Tipus d'emmagatzematge</translation> </message> <message> <source>&Dynamically expanding storage</source> - <translation type="obsolete">Imatge que s'expandeix &dinà micament</translation> + <translation type="obsolete">Imatge que s'expandeix &dinà micament</translation> </message> <message> <source>&Fixed-size storage</source> @@ -4544,7 +4543,7 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation </message> <message> <source><p>Press the <b>Select</b> button to select the location of a file to store the hard disk data or type a file name in the entry field.</p></source> - <translation type="obsolete"><p>Premeu el botó <b>Selecciona</b> per seleccionar el lloc i el nom del fitxer on emmagatzemar la imatge del disc dur virtual o escriviu el nom del fitxer en el camp d'entrada.</p></translation> + <translation type="obsolete"><p>Premeu el botó <b>Selecciona</b> per seleccionar el lloc i el nom del fitxer on emmagatzemar la imatge del disc dur virtual o escriviu el nom del fitxer en el camp d'entrada.</p></translation> </message> <message> <source>&Location</source> @@ -4552,7 +4551,7 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation </message> <message> <source><p>Select the size of the virtual hard disk in megabytes. This size will be reported to the Guest OS as the maximum size of this hard disk.</p></source> - <translation type="obsolete"><p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Aquesta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p></translation> + <translation type="obsolete"><p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Aquesta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p></translation> </message> <message> <source>&Size</source> @@ -4571,7 +4570,7 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation <name>UINewHDWzdPage1</name> <message> <source>Welcome to the Create New Virtual Disk Wizard!</source> - <translation>Benvingut a l'auxiliar per a la creació d'un disc virtual nou!</translation> + <translation>Benvingut a l'auxiliar per a la creació d'un disc virtual nou!</translation> </message> <message> <source><p>This wizard will help you to create a new virtual hard disk for your virtual machine.</p><p>%1</p></source> @@ -4582,15 +4581,15 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation <name>UINewHDWzdPage2</name> <message> <source><p>Select the type of virtual hard disk you want to create.</p><p>A <b>dynamically expanding storage</b> initially occupies a very small amount of space on your physical hard disk. It will grow dynamically (up to the size specified) as the Guest OS claims disk space.</p><p>A <b>fixed-size storage</b> does not grow. It is stored in a file of approximately the same size as the size of the virtual hard disk. The creation of a fixed-size storage may take a long time depending on the storage size and the write performance of your harddisk.</p></source> - <translation><p>Seleccioneu el tipus de disc dur virtual que voleu crear.<p></p>Un <b>emmagatzematge d'expansió dinà mica</b> ocupa inicialment una quantiat molt petita d'espai al disc dur fÃsic. Creixerà dinà micament (fins a la mida especificada) conforme el Sistema Amfitrió consumeixi espai. Un <b>emmagatzematge de mida fixa</b> no creix. S'emmagatzema en un fitxer de mida aproximadament la que s'indica per al disc dur virtual. La creació d'un emmagatzematge de mida fixa triga un temps segons la mida del mateix i de l'eficiència d'escriptura del disc dur fÃsic.</p></translation> + <translation><p>Seleccioneu el tipus de disc dur virtual que voleu crear.<p></p>Un <b>emmagatzematge d'expansió dinà mica</b> ocupa inicialment una quantiat molt petita d'espai al disc dur fÃsic. Creixerà dinà micament (fins a la mida especificada) conforme el Sistema Amfitrió consumeixi espai. Un <b>emmagatzematge de mida fixa</b> no creix. S'emmagatzema en un fitxer de mida aproximadament la que s'indica per al disc dur virtual. La creació d'un emmagatzematge de mida fixa triga un temps segons la mida del mateix i de l'eficiència d'escriptura del disc dur fÃsic.</p></translation> </message> <message> <source>Storage Type</source> - <translation>Tipus d'emmagatzematge</translation> + <translation>Tipus d'emmagatzematge</translation> </message> <message> <source>&Dynamically expanding storage</source> - <translation>Emmagatzematge que s'expandeix &dinà micament</translation> + <translation>Emmagatzematge que s'expandeix &dinà micament</translation> </message> <message> <source>&Fixed-size storage</source> @@ -4598,14 +4597,14 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation </message> <message> <source>Hard Disk Storage Type</source> - <translation>Tipus d'emmagatzematge per al disc dur</translation> + <translation>Tipus d'emmagatzematge per al disc dur</translation> </message> </context> <context> <name>UINewHDWzdPage3</name> <message> <source><p>Press the <b>Select</b> button to select the location of a file to store the hard disk data or type a file name in the entry field.</p></source> - <translation><p>Premeu el botó <b>Selecciona</b> per seleccionar el lloc i el nom del fitxer on emmagatzemar les dades del disc dur o escriviu el nom del fitxer en el camp d'entrada.</p></translation> + <translation><p>Premeu el botó <b>Selecciona</b> per seleccionar el lloc i el nom del fitxer on emmagatzemar les dades del disc dur o escriviu el nom del fitxer en el camp d'entrada.</p></translation> </message> <message> <source>&Location</source> @@ -4613,7 +4612,7 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation </message> <message> <source><p>Select the size of the virtual hard disk in megabytes. This size will be reported to the Guest OS as the maximum size of this hard disk.</p></source> - <translation><p>Seleccioneu la mida del disc dur virtual en megabytes. Aquesta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p></translation> + <translation><p>Seleccioneu la mida del disc dur virtual en megabytes. Aquesta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p></translation> </message> <message> <source>&Size</source> @@ -4625,7 +4624,7 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation </message> <message> <source>Select a file for the new hard disk image file</source> - <translation>Seleccioneu un fitxer per al fitxer d'imatge del disc dur nou</translation> + <translation>Seleccioneu un fitxer per al fitxer d'imatge del disc dur nou</translation> </message> <message> <source>Hard disk images (*.vdi)</source> @@ -4667,7 +4666,7 @@ l'eficiència d'escriptura del disc dur fÃsic.</p></translation </message> <message> <source>If the above settings are correct, press the <b>%1</b> button. Once you press it, a new hard disk will be created.</source> - <translation>Si els parà metres que hi ha a continuació son correctes, premeu el botó <b>%1</b>. Un cop l'hà giu pres, es crearà un disc dur nou.</translation> + <translation>Si els parà metres que hi ha a continuació son correctes, premeu el botó <b>%1</b>. Un cop l'hà giu pres, es crearà un disc dur nou.</translation> </message> </context> <context> @@ -4683,12 +4682,12 @@ a new virtual machine for VirtualBox.</p> and the <b>Back</b> button to return to the previous page.</p></source> <translation type="obsolete"><p>Aquest auxiliar us guiarà a través dels passos que calen per crear una nova mà quina virtual per a VirtualBox.</p> -<p>Utilitzeu el botó <b>Següent</b> per a anar a la pà gina següent de l'auxiliar +<p>Utilitzeu el botó <b>Següent</b> per a anar a la pà gina següent de l'auxiliar i el botó <b>Enrere</b> per a tornar a la pà gina anterior.</p></translation> </message> <message> <source>Welcome to the New Virtual Machine Wizard!</source> - <translation type="obsolete">Benvingut a l'auxiliar per a la creació d'una mà quina virtual nova!</translation> + <translation type="obsolete">Benvingut a l'auxiliar per a la creació d'una mà quina virtual nova!</translation> </message> <message> <source><p>Enter a name for the new virtual machine and select the type of the guest operating @@ -4714,7 +4713,7 @@ Tots els components del VirtualBox el faran servir per a identificar la mà quina </message> <message> <source><p>Select the amount of base memory (RAM) in megabytes to be allocated to the virtual machine.</p></source> - <translation type="obsolete"><p>Seleccioneu la quantitat de memòria base (RAM) en megabytes que s'assignaran a la mà quina virtual</p></translation> + <translation type="obsolete"><p>Seleccioneu la quantitat de memòria base (RAM) en megabytes que s'assignaran a la mà quina virtual</p></translation> </message> <message> <source>Base &Memory Size</source> @@ -4749,7 +4748,7 @@ button (to invoke the Virtual Disk Manager dialog).</p> <p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> <translation type="obsolete"><p>Seleccioneu la imatge de disc dur que es farà servir -com a disc dur d'arrrencada de la mà quina virtual. Podeu crear un disc dur nou +com a disc dur d'arrrencada de la mà quina virtual. Podeu crear un disc dur nou usant el botó <b>Nou</b> o seleccionar una imatge de disc dur existent de la llista desplegable o prement el botó <b>Existents</b> (per a invocar el dià leg del gestor de discos virtuals).</p> @@ -4758,7 +4757,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>B&oot Hard Disk (Primary Master)</source> - <translation type="obsolete">D&isc dur d'arrencada (primari mestre)</translation> + <translation type="obsolete">D&isc dur d'arrencada (primari mestre)</translation> </message> <message> <source>N&ew...</source> @@ -4824,7 +4823,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source><tr><td>Boot Hard Disk:</td><td>%4</td></tr></source> - <translation type="obsolete"><tr><td>Disc dur d'arrencada:</td><td>%4</td></tr></translation> + <translation type="obsolete"><tr><td>Disc dur d'arrencada:</td><td>%4</td></tr></translation> </message> <message> <source>The recommended base memory size is <b>%1</b> MB.</source> @@ -4832,11 +4831,11 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>The recommended size of the boot hard disk is <b>%1</b> MB.</source> - <translation type="obsolete">La mida del disc dur d'arrencada recomanada és <b>%1</b> MB.</translation> + <translation type="obsolete">La mida del disc dur d'arrencada recomanada és <b>%1</b> MB.</translation> </message> <message> <source><p>This wizard will guide you through the steps that are necessary to create a new virtual machine for VirtualBox.</p><p>Use the <b>Next</b> button to go the next page of the wizard and the <b>Back</b> button to return to the previous page.</p></source> - <translation type="obsolete"><p>Aquest auxiliar us guiarà a través dels passos que calen per crear una nova mà quina virtual per a VirtualBox.</p><p>Utilitzeu el botó <b>Següent</b> per a anar a la pà gina següent de l'auxiliar i el botó <b>Enrere</b> per a tornar a la pà gina anterior.</p></translation> + <translation type="obsolete"><p>Aquest auxiliar us guiarà a través dels passos que calen per crear una nova mà quina virtual per a VirtualBox.</p><p>Utilitzeu el botó <b>Següent</b> per a anar a la pà gina següent de l'auxiliar i el botó <b>Enrere</b> per a tornar a la pà gina anterior.</p></translation> </message> <message> <source>< &Back</source> @@ -4860,7 +4859,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source><p>Select a hard disk image to be used as the boot hard disk of the virtual machine. You can either create a new hard disk using the <b>New</b> button or select an existing hard disk image from the drop-down list or by pressing the <b>Existing</b> button (to invoke the Virtual Disk Manager dialog).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> - <translation type="obsolete"><p>Seleccioneu la imatge de disc dur que es farà servir com a disc dur d'arrrencada de la mà quina virtual. Podeu crear un disc dur nou usant el botó <b>Nou</b> o seleccionar una imatge de disc dur existent de la llista desplegable o prement el botó <b>Existents</b> (per a invocar el dià leg del gestor de discos virtuals).</p> <p>Si us cal una configuració de disc dur més complexa, podeu també saltar-vos aquest pas i connectar discos durs més endavant, fent servir el dià leg de configuració de la mà quina virtual.</p></translation> + <translation type="obsolete"><p>Seleccioneu la imatge de disc dur que es farà servir com a disc dur d'arrrencada de la mà quina virtual. Podeu crear un disc dur nou usant el botó <b>Nou</b> o seleccionar una imatge de disc dur existent de la llista desplegable o prement el botó <b>Existents</b> (per a invocar el dià leg del gestor de discos virtuals).</p> <p>Si us cal una configuració de disc dur més complexa, podeu també saltar-vos aquest pas i connectar discos durs més endavant, fent servir el dià leg de configuració de la mà quina virtual.</p></translation> </message> <message> <source><p>You are going to create a new virtual machine with the following parameters:</p></source> @@ -4905,18 +4904,18 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source><p>Select a hard disk image to be used as the boot hard disk of the virtual machine. You can either create a new hard disk using the <b>New</b> button or select an existing hard disk image from the drop-down list or by pressing the <b>Existing</b> button (to invoke the Virtual Media Manager dialog).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> - <translation type="obsolete"><p>Seleccioneu la imatge de disc dur que es farà servir com a disc dur d'arrrencada de la mà quina virtual. Podeu crear un disc dur nou usant el botó <b>Nou</b> o seleccionar una imatge de disc dur existent de la llista desplegable o prement el botó <b>Existents</b> (per a invocar el dià leg del gestor de discos virtuals). Si us cal una configuració de disc dur més complexa, podeu també saltar-vos aquest pas i connectar discos durs més endavant, fent servir el dià leg de configuració de la mà quina virtual.</p></translation> + <translation type="obsolete"><p>Seleccioneu la imatge de disc dur que es farà servir com a disc dur d'arrrencada de la mà quina virtual. Podeu crear un disc dur nou usant el botó <b>Nou</b> o seleccionar una imatge de disc dur existent de la llista desplegable o prement el botó <b>Existents</b> (per a invocar el dià leg del gestor de discos virtuals). Si us cal una configuració de disc dur més complexa, podeu també saltar-vos aquest pas i connectar discos durs més endavant, fent servir el dià leg de configuració de la mà quina virtual.</p></translation> </message> <message> <source>Boot Hard &Disk (Primary Master)</source> - <translation type="obsolete">D&isc dur d'arrencada (primari mestre)</translation> + <translation type="obsolete">D&isc dur d'arrencada (primari mestre)</translation> </message> </context> <context> <name>UINewVMWzdPage1</name> <message> <source>Welcome to the New Virtual Machine Wizard!</source> - <translation>Benvingut a l'auxiliar per a la creació d'una mà quina virtual nova!</translation> + <translation>Benvingut a l'auxiliar per a la creació d'una mà quina virtual nova!</translation> </message> <message> <source><p>This wizard will guide you through the steps that are necessary to create a new virtual machine for VirtualBox.</p><p>%1</p></source> @@ -4946,7 +4945,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci <name>UINewVMWzdPage3</name> <message> <source><p>Select the amount of base memory (RAM) in megabytes to be allocated to the virtual machine.</p></source> - <translation><p>Seleccioneu la quantitat de memòria base (RAM) en megabytes que s'assignaran a la mà quina virtual</p></translation> + <translation><p>Seleccioneu la quantitat de memòria base (RAM) en megabytes que s'assignaran a la mà quina virtual</p></translation> </message> <message> <source>Base &Memory Size</source> @@ -4974,11 +4973,11 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci <name>UINewVMWzdPage4</name> <message> <source><p>Select a hard disk image to be used as the boot hard disk of the virtual machine. You can either create a new hard disk using the <b>New</b> button or select an existing hard disk image from the drop-down list or by pressing the <b>Existing</b> button (to invoke the Virtual Media Manager dialog).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> - <translation type="obsolete"><p>Seleccioneu la imatge de disc dur que es farà servir com a disc dur d'arrrencada de la mà quina virtual. Podeu crear un disc dur nou usant el botó <b>Nou</b> o seleccionar una imatge de disc dur existent de la llista desplegable o prement el botó <b>Existents</b> (per a invocar el dià leg del gestor de discos virtuals).</p><p>Si us cal una configuració més complexa, podeu també saltar-vos aquest pas i connectar discos durs més endavant, fent servir el dià leg de configuració de la mà quina virtual.</p></translation> + <translation type="obsolete"><p>Seleccioneu la imatge de disc dur que es farà servir com a disc dur d'arrrencada de la mà quina virtual. Podeu crear un disc dur nou usant el botó <b>Nou</b> o seleccionar una imatge de disc dur existent de la llista desplegable o prement el botó <b>Existents</b> (per a invocar el dià leg del gestor de discos virtuals).</p><p>Si us cal una configuració més complexa, podeu també saltar-vos aquest pas i connectar discos durs més endavant, fent servir el dià leg de configuració de la mà quina virtual.</p></translation> </message> <message> <source>Boot Hard &Disk (Primary Master)</source> - <translation type="obsolete">D&isc dur d'arrencada (primari mestre)</translation> + <translation type="obsolete">D&isc dur d'arrencada (primari mestre)</translation> </message> <message> <source>&Create new hard disk</source> @@ -4994,7 +4993,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>The recommended size of the boot hard disk is <b>%1</b> MB.</source> - <translation type="obsolete">La mida del disc dur d'arrencada recomanada és <b>%1</b> MB.</translation> + <translation type="obsolete">La mida del disc dur d'arrencada recomanada és <b>%1</b> MB.</translation> </message> <message> <source>Boot Hard &Disk</source> @@ -5002,7 +5001,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source><p>Select a virtual hard disk to be used as the boot hard disk of the virtual machine. You can either create a new hard disk or select an existing one from the drop-down list or by pressing corresponding button (to invoke file-open window).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> - <translation><p>Seleccioneu un disc dur virtual que s'utilitzarà com a disc d'arrencada de la mà quina virtual. Podeu crear un disc dur nou o bé seleccionar un d'existent de la llista desplegable o bé prement el botó corresponent (per invocar una finestra per obrir el fitxer).</p><p>Si necessiteu una configuració més avançada, podeu ometre aquest pas i adjuntar discos durs més tard des del dià leg de parà metres de la mà quina virtual.</p></translation> + <translation><p>Seleccioneu un disc dur virtual que s'utilitzarà com a disc d'arrencada de la mà quina virtual. Podeu crear un disc dur nou o bé seleccionar un d'existent de la llista desplegable o bé prement el botó corresponent (per invocar una finestra per obrir el fitxer).</p><p>Si necessiteu una configuració més avançada, podeu ometre aquest pas i adjuntar discos durs més tard des del dià leg de parà metres de la mà quina virtual.</p></translation> </message> <message> <source>Choose a virtual hard disk file...</source> @@ -5010,7 +5009,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>The recommended size of the boot hard disk is <b>%1</b>.</source> - <translation>La mida recomanada del disc dur d'arrencada és <b>%1</b>.</translation> + <translation>La mida recomanada del disc dur d'arrencada és <b>%1</b>.</translation> </message> </context> <context> @@ -5050,7 +5049,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source><p>If the above is correct press the <b>%1</b> button. Once you press it, a new virtual machine will be created. </p><p>Note that you can alter these and all other setting of the created virtual machine at any time using the <b>Settings</b> dialog accessible through the menu of the main window.</p></source> - <translation><p>Si el que hi ha a continuació és correcte, premeu el botó <b>%1</b>. Una vegada l'hà giu pres, es crearà una mà quina virtual nova.</p><p>Tingueu en compte que podeu canviar aquest i altres parà metres de la mà quina virtual creada en qualsevol moment fent servir el dià leg <b>Parà metres</b> accessible des del menú de la finestra principal.</p></translation> + <translation><p>Si el que hi ha a continuació és correcte, premeu el botó <b>%1</b>. Una vegada l'hà giu pres, es crearà una mà quina virtual nova.</p><p>Tingueu en compte que podeu canviar aquest i altres parà metres de la mà quina virtual creada en qualsevol moment fent servir el dià leg <b>Parà metres</b> accessible des del menú de la finestra principal.</p></translation> </message> </context> <context> @@ -5065,11 +5064,11 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>Host IP</source> - <translation>IP de l'amfitrió</translation> + <translation>IP de l'amfitrió</translation> </message> <message> <source>Host Port</source> - <translation>Port de l'amfitrió</translation> + <translation>Port de l'amfitrió</translation> </message> <message> <source>Guest IP</source> @@ -5148,20 +5147,20 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>Canceling...</source> - <translation>S'està cancel·lant...</translation> + <translation>S'està cancel·lant...</translation> </message> <message> <source>Cancel the current operation</source> - <translation>Cancel·la l'operació actual</translation> + <translation>Cancel·la l'operació actual</translation> </message> <message> <source>%1, %2 remaining</source> - <comment>You may wish to translate this more like "Time remaining: %1, %2"</comment> + <comment>You may wish to translate this more like "Time remaining: %1, %2"</comment> <translation>Resta %1, %2</translation> </message> <message> <source>%1 remaining</source> - <comment>You may wish to translate this more like "Time remaining: %1"</comment> + <comment>You may wish to translate this more like "Time remaining: %1"</comment> <translation>Resta %1</translation> </message> </context> @@ -5176,7 +5175,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci <name>UISettingsDialog</name> <message> <source><i>Select a settings category from the list on the left-hand side and move the mouse over a settings item to get more information.</i></source> - <translation><i>Seleccioneu una categoria de parà metres de la llista de l'esquerra i moveu el ratolé sobre l'element de parà metres per obtenir més informació.</i></translation> + <translation><i>Seleccioneu una categoria de parà metres de la llista de l'esquerra i moveu el ratolé sobre l'element de parà metres per obtenir més informació.</i></translation> </message> <message> <source>On the <b>%1</b> page, %2</source> @@ -5184,11 +5183,11 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>Invalid settings detected</source> - <translation>S'han detectat parà metres no và lids</translation> + <translation>S'han detectat parà metres no và lids</translation> </message> <message> <source>Non-optimal settings detected</source> - <translation>No s'han detectat els parà metres òptims</translation> + <translation>No s'han detectat els parà metres òptims</translation> </message> <message> <source>Settings</source> @@ -5207,23 +5206,23 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to the virtual machine.</p></source> - <translation><p>Desa l'estat d'execució actual de la mà quina virtual al disc dur fÃsic de l'ordinador amfitrió.</p><p>La propera vegada que s'inicià aquesta mà quina, es restaurarà des de l'estat desat i continuarà l'execució des del mateix lloc en què l'heu desat, cosa que permetrà continuar immediatament amb el vostre treball.</p><p>Tingueu en compte que l'operació de desar l'estat de la mà quina pot prendre molt de temps, depenent del tipus de sistema operatiu client i la quantitat de memòria assignada a la mà quina virtual.</p></translation> + <translation><p>Desa l'estat d'execució actual de la mà quina virtual al disc dur fÃsic de l'ordinador amfitrió.</p><p>La propera vegada que s'inicià aquesta mà quina, es restaurarà des de l'estat desat i continuarà l'execució des del mateix lloc en què l'heu desat, cosa que permetrà continuar immediatament amb el vostre treball.</p><p>Tingueu en compte que l'operació de desar l'estat de la mà quina pot prendre molt de temps, depenent del tipus de sistema operatiu client i la quantitat de memòria assignada a la mà quina virtual.</p></translation> </message> <message> <source>&Save the machine state</source> - <translation>&Desa l'estat de la mà quina</translation> + <translation>&Desa l'estat de la mà quina</translation> </message> <message> - <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> - <translation><p>Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power.</p><p>Normalment, el sistema operatiu client que s'està executant a dins de la mà quina virtual detectarà aquest esdeveniment i realitzarà un procediment de tancament net. Aquesta és una manera recomanada de tancar la mà quina virtual perquè totes les aplicacions que s'estan executant en ella tindran la possibilitat de desar les seves dades i estat.</p><p>Si la mà quina no respon a aquesta acció potser el sistema operatiu client pot estar mal configurat o no entén els events del botó ACPI Power. En aquest cas, seleccioneu l'acció <b>Atura la mà quina</b> per aturar l'execució de la mà quina virtual.</p></translation> + <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> + <translation><p>Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power.</p><p>Normalment, el sistema operatiu client que s'està executant a dins de la mà quina virtual detectarà aquest esdeveniment i realitzarà un procediment de tancament net. Aquesta és una manera recomanada de tancar la mà quina virtual perquè totes les aplicacions que s'estan executant en ella tindran la possibilitat de desar les seves dades i estat.</p><p>Si la mà quina no respon a aquesta acció potser el sistema operatiu client pot estar mal configurat o no entén els events del botó ACPI Power. En aquest cas, seleccioneu l'acció <b>Atura la mà quina</b> per aturar l'execució de la mà quina virtual.</p></translation> </message> <message> <source>S&end the shutdown signal</source> - <translation>&Envia el senyal d'aturada</translation> + <translation>&Envia el senyal d'aturada</translation> </message> <message> <source><p>Turns off the virtual machine.</p><p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source> - <translation><p>Atura la mà quina virtual.</p><p>Tingueu en compte que aquesta acció aturarà immediatament l'execució de la mà quina de manera que el sistema operatiu client que s'hi està executant no podrà realitzar un procediment de tancament net, cosa que podria ocasionar una <i>pèrdua de dades</i> a la mà quina virtual. Només es recomana seleccionar aquesta acció si la mà quina virtual no respon a l'acció <b>Envia el senyal d'aturada</b>.</p></translation> + <translation><p>Atura la mà quina virtual.</p><p>Tingueu en compte que aquesta acció aturarà immediatament l'execució de la mà quina de manera que el sistema operatiu client que s'hi està executant no podrà realitzar un procediment de tancament net, cosa que podria ocasionar una <i>pèrdua de dades</i> a la mà quina virtual. Només es recomana seleccionar aquesta acció si la mà quina virtual no respon a l'acció <b>Envia el senyal d'aturada</b>.</p></translation> </message> <message> <source>&Power off the machine</source> @@ -5231,15 +5230,15 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>Restore the machine state stored in the current snapshot</source> - <translation>Restaura l'estat de la mà quina emmagatzemat a la captura actual</translation> + <translation>Restaura l'estat de la mà quina emmagatzemat a la captura actual</translation> </message> <message> <source><p>When checked, the machine will be returned to the state stored in the current snapshot after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and start again at that snapshot.</p></source> - <translation><p>Quan estigui marcat, es restaurarà l'estat de la mà quina des de l'estat emmagatzemat a la captura actual quan es va aturar. Això és útil si esteu segur que voleu descartar els resultats de les últimes sessions i tornar a la captura actual.</p></translation> + <translation><p>Quan estigui marcat, es restaurarà l'estat de la mà quina des de l'estat emmagatzemat a la captura actual quan es va aturar. Això és útil si esteu segur que voleu descartar els resultats de les últimes sessions i tornar a la captura actual.</p></translation> </message> <message> - <source>&Restore current snapshot '%1'</source> - <translation>&Restaura la captura actual '%1'</translation> + <source>&Restore current snapshot '%1'</source> + <translation>&Restaura la captura actual '%1'</translation> </message> </context> <context> @@ -5257,7 +5256,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci <name>UIVMListView</name> <message> <source>Inaccessible</source> - <translation>No s'hi pot accedir</translation> + <translation>No s'hi pot accedir</translation> </message> <message> <source><nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr></source> @@ -5267,7 +5266,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci <message> <source><nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr></source> <comment>Inaccessible VM tooltip (name, last state change)</comment> - <translation><nobr><b>%1</b><br></nobr><nobr>No s'hi pot accedir des de %2</nobr></translation> + <translation><nobr><b>%1</b><br></nobr><nobr>No s'hi pot accedir des de %2</nobr></translation> </message> <message> <source>S&how</source> @@ -5291,7 +5290,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>Resume the execution of the virtual machine</source> - <translation type="obsolete">Reprèn l'execució de la mà quina virtual</translation> + <translation type="obsolete">Reprèn l'execució de la mà quina virtual</translation> </message> <message> <source>&Pause</source> @@ -5299,14 +5298,14 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>Suspend the execution of the virtual machine</source> - <translation type="obsolete">Suspèn l'execució de la mà quina virtual</translation> + <translation type="obsolete">Suspèn l'execució de la mà quina virtual</translation> </message> </context> <context> <name>UIVMPreviewWindow</name> <message> <source>Update Disabled</source> - <translation>L'actualització està inhabilitada</translation> + <translation>L'actualització està inhabilitada</translation> </message> <message> <source>Every 0.5 s</source> @@ -5385,15 +5384,15 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>you have selected a 64-bit guest OS type for this VM. As such guests require hardware virtualization (VT-x/AMD-V), this feature will be enabled automatically.</source> - <translation>heu seleccionat un tipus de sistema client de 64 bits per a aquesta mà quina virtual. Amb aquests tipus de clients es requereix maquinari de virtualització (VT-x/AMD-V), aquesta caracterÃstica s'activarà automà ticament.</translation> + <translation>heu seleccionat un tipus de sistema client de 64 bits per a aquesta mà quina virtual. Amb aquests tipus de clients es requereix maquinari de virtualització (VT-x/AMD-V), aquesta caracterÃstica s'activarà automà ticament.</translation> </message> <message> <source>you have 2D Video Acceleration enabled. As 2D Video Acceleration is supported for Windows guests only, this feature will be disabled.</source> - <translation>l'acceleració 2D està activada. Atès que l'acceleració 2D només està suportada per clients Windows, es desactivarà aquesta caracterÃstica.</translation> + <translation>l'acceleració 2D està activada. Atès que l'acceleració 2D només està suportada per clients Windows, es desactivarà aquesta caracterÃstica.</translation> </message> <message> <source>you have enabled a USB HID (Human Interface Device). This will not work unless USB emulation is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation>heu habilitat un USB HID (dispositiu d'interfÃcie humana). Això no funcionarà a menys que l'emulació USB també estigui habilitada. Això es farà automà ticament quan accepteu els parà metres de la mà quina virtual en prémer el botó «D'acord».</translation> + <translation>heu habilitat un USB HID (dispositiu d'interfÃcie humana). Això no funcionarà a menys que l'emulació USB també estigui habilitada. Això es farà automà ticament quan accepteu els parà metres de la mà quina virtual en prémer el botó «D'acord».</translation> </message> <message> <source>at most one supported</source> @@ -5405,7 +5404,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci </message> <message> <source>you are currently using more storage controllers than a %1 chipset supports. Please change the chipset type on the System settings page or reduce the number of the following storage controllers on the Storage settings page: %2.</source> - <translation>actualment esteu fent servir més controlador d'emmagatzematge que els xips %1 suporten. Canvieu el tipus de xip a la pà gina de parà metres del sistema o reduïu el nombre dels següents controladors d'emmagatzematge a la pà gina de parà metres d'emmagatzematge: %2.</translation> + <translation>actualment esteu fent servir més controlador d'emmagatzematge que els xips %1 suporten. Canvieu el tipus de xip a la pà gina de parà metres del sistema o reduïu el nombre dels següents controladors d'emmagatzematge a la pà gina de parà metres d'emmagatzematge: %2.</translation> </message> </context> <context> @@ -5417,16 +5416,16 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci <message> <source><qt>VirtualBox Graphical User Interface Version %1<br> %2</qt></source> - <translation type="obsolete"><qt>InterfÃcie grà fica d'usuari del VirtualBox versió %1<br> + <translation type="obsolete"><qt>InterfÃcie grà fica d'usuari del VirtualBox versió %1<br> %2</qt></translation> </message> <message> <source><qt>VirtualBox Graphical User Interface Version %1<br>%2</qt></source> - <translation type="obsolete"><qt>InterfÃcie grà fica d'usuari del VirtualBox versió %1<br>%2</qt></translation> + <translation type="obsolete"><qt>InterfÃcie grà fica d'usuari del VirtualBox versió %1<br>%2</qt></translation> </message> <message> <source>VirtualBox Graphical User Interface</source> - <translation>InterfÃcie grà fica d'usuari del VirtualBox</translation> + <translation>InterfÃcie grà fica d'usuari del VirtualBox</translation> </message> <message> <source>Version %1</source> @@ -5442,7 +5441,7 @@ pas i connectar discos durs més endavant, fent servir el dià leg de configuraci <message> <source>VirtualBox Graphical User Interface Version %1</source> - <translation type="obsolete">InterfÃcie Grà fica d'Usuari de VirtualBox + <translation type="obsolete">InterfÃcie Grà fica d'Usuari de VirtualBox Versió %1</translation> </message> </context> @@ -5450,7 +5449,7 @@ Versió %1</translation> <name>VBoxAddNIDialog</name> <message> <source>Add Host Interface</source> - <translation type="obsolete">Afegeix una interfÃcie de l'amfitrió</translation> + <translation type="obsolete">Afegeix una interfÃcie de l'amfitrió</translation> </message> <message> <source>Interface Name</source> @@ -5462,7 +5461,7 @@ Versió %1</translation> </message> <message> <source>&OK</source> - <translation type="obsolete">&D'acord</translation> + <translation type="obsolete">&D'acord</translation> </message> <message> <source>Cancel</source> @@ -5493,7 +5492,7 @@ Versió %1</translation> </message> <message> <source>Displays the path to an existing folder on the host PC.</source> - <translation type="obsolete">Mostra la ruta cap a una carpeta existent en l'ordinador amfitrió.</translation> + <translation type="obsolete">Mostra la ruta cap a una carpeta existent en l'ordinador amfitrió.</translation> </message> <message> <source>Displays the name of the shared folder (as it will be seen by the guest OS).</source> @@ -5509,7 +5508,7 @@ Versió %1</translation> </message> <message> <source>&OK</source> - <translation type="obsolete">&D'acord</translation> + <translation type="obsolete">&D'acord</translation> </message> <message> <source>&Make Permanent</source> @@ -5657,7 +5656,7 @@ Versió %1</translation> </message> <message> <source>&Save the machine state</source> - <translation type="obsolete">&Desa l'estat de la mà quina</translation> + <translation type="obsolete">&Desa l'estat de la mà quina</translation> </message> <message> <source>&Power off the machine</source> @@ -5669,7 +5668,7 @@ Versió %1</translation> </message> <message> <source>Revert the machine state to the state stored in the current snapshot</source> - <translation type="obsolete">Torna l'estat de la mà quina a l'estat emmagatzemat a la captura actual</translation> + <translation type="obsolete">Torna l'estat de la mà quina a l'estat emmagatzemat a la captura actual</translation> </message> <message> <source>Help</source> @@ -5681,7 +5680,7 @@ Versió %1</translation> </message> <message> <source>&OK</source> - <translation type="obsolete">&D'acord</translation> + <translation type="obsolete">&D'acord</translation> </message> <message> <source>Cancel</source> @@ -5691,51 +5690,51 @@ Versió %1</translation> <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p> <p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p> <p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to the virtual machine.</p></source> - <translation type="obsolete"><p>Desa l'estat d'execució actual de la mà quina virtual al disc dur fÃsic de l'ordinador d'amfitrió.</p> -<p>La propera vegada que s'engegue aquesta mà quina, es restaurarà des de l'estat desat i continuarà l'execució des del mateix lloc en què l'heu desat, cosa que us permetrà continuar immediatament amb el vostre treball.</p> -<p>Tingueu en compte que l'operació de desar l'estat de la mà quina pot prendre molt de temps, depenent del tipus de sistema operatiu client i la quantitat de memòria assignada a la mà quina virtual.</p></translation> + <translation type="obsolete"><p>Desa l'estat d'execució actual de la mà quina virtual al disc dur fÃsic de l'ordinador d'amfitrió.</p> +<p>La propera vegada que s'engegue aquesta mà quina, es restaurarà des de l'estat desat i continuarà l'execució des del mateix lloc en què l'heu desat, cosa que us permetrà continuar immediatament amb el vostre treball.</p> +<p>Tingueu en compte que l'operació de desar l'estat de la mà quina pot prendre molt de temps, depenent del tipus de sistema operatiu client i la quantitat de memòria assignada a la mà quina virtual.</p></translation> </message> <message> <source>S&end the shutdown signal</source> - <translation type="obsolete">&Envia el senyal d'aturada</translation> + <translation type="obsolete">&Envia el senyal d'aturada</translation> </message> <message> <source><p>Sends the ACPI Power Button press event to the virtual machine.</p> <p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p> -<p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> - <translation type="obsolete"><p>Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power.</p> -<p>Normalment, el sistema operatiu client que s'està executant a dins de la mà quina virtual detectarà aquest esdeveniment i realitzarà un procediment de tancament net. Aquesta és una manera recomanada de tancar la mà quina virtual perquè totes les aplicacions que s'estan executant en ella tindran la possibilitat de desar les seves dades i estat.</p> -<p>Si la mà quina no respon a aquesta acció potser el sistema operatiu client pot estar mal configurat o no entén els events del botó ACPI Power. En aquest cas, seleccioneu l'acció <b>Atura la mà quina</b> per aturar l'execució de la mà quina virtual.</p></translation> +<p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> + <translation type="obsolete"><p>Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power.</p> +<p>Normalment, el sistema operatiu client que s'està executant a dins de la mà quina virtual detectarà aquest esdeveniment i realitzarà un procediment de tancament net. Aquesta és una manera recomanada de tancar la mà quina virtual perquè totes les aplicacions que s'estan executant en ella tindran la possibilitat de desar les seves dades i estat.</p> +<p>Si la mà quina no respon a aquesta acció potser el sistema operatiu client pot estar mal configurat o no entén els events del botó ACPI Power. En aquest cas, seleccioneu l'acció <b>Atura la mà quina</b> per aturar l'execució de la mà quina virtual.</p></translation> </message> <message> <source><p>Turns off the virtual machine.</p> <p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source> <translation type="obsolete"><p>Atura la mà quina virtual.</p> -<p>Tingueu en compte que aquesta acció aturarà immediatament l'execució de la mà quina de manera que el sistema operatiu client que s'hi està executant no podrà realitzar un procediment de tancament net, cosa que pot ocasionar una <i>pèrdua de dades</i> en la mà quina virtual. Només es recomana seleccionar aquesta acció si la mà quina virtual no respon a l'acció <b>Envia el senyal d'aturada</b>.</p></translation> +<p>Tingueu en compte que aquesta acció aturarà immediatament l'execució de la mà quina de manera que el sistema operatiu client que s'hi està executant no podrà realitzar un procediment de tancament net, cosa que pot ocasionar una <i>pèrdua de dades</i> en la mà quina virtual. Només es recomana seleccionar aquesta acció si la mà quina virtual no respon a l'acció <b>Envia el senyal d'aturada</b>.</p></translation> </message> <message> <source><p>When checked, the machine will be returned to the state stored in the current snapshot after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and start again at that snapshot.</p></source> - <translation type="obsolete"><p>Quan estigui marcat, es restaurarà l'estat de la mà quina des de l'estat emmagatzemat a la captura actual quan es va aturar. Això és útil si esteu segur que voleu descartar els resultats de les últimes sessions i tornar a la captura actual.</p></translation> + <translation type="obsolete"><p>Quan estigui marcat, es restaurarà l'estat de la mà quina des de l'estat emmagatzemat a la captura actual quan es va aturar. Això és útil si esteu segur que voleu descartar els resultats de les últimes sessions i tornar a la captura actual.</p></translation> </message> <message> <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to the virtual machine.</p></source> - <translation type="obsolete"><p>Desa l'estat d'execució actual de la mà quina virtual al disc dur fÃsic de l'ordinador amfitrió.</p><p>La propera vegada que s'inicià aquesta mà quina, es restaurarà des de l'estat desat i continuarà l'execució des del mateix lloc en què l'heu desat, cosa que permetrà continuar immediatament amb el vostre treball.</p><p>Tingueu en compte que l'operació de desar l'estat de la mà quina pot prendre molt de temps, depenent del tipus de sistema operatiu client i la quantitat de memòria assignada a la mà quina virtual.</p></translation> + <translation type="obsolete"><p>Desa l'estat d'execució actual de la mà quina virtual al disc dur fÃsic de l'ordinador amfitrió.</p><p>La propera vegada que s'inicià aquesta mà quina, es restaurarà des de l'estat desat i continuarà l'execució des del mateix lloc en què l'heu desat, cosa que permetrà continuar immediatament amb el vostre treball.</p><p>Tingueu en compte que l'operació de desar l'estat de la mà quina pot prendre molt de temps, depenent del tipus de sistema operatiu client i la quantitat de memòria assignada a la mà quina virtual.</p></translation> </message> <message> - <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> - <translation type="obsolete"><p>Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power.</p><p>Normalment, el sistema operatiu client que s'està executant a dins de la mà quina virtual detectarà aquest esdeveniment i realitzarà un procediment de tancament net. Aquesta és una manera recomanada de tancar la mà quina virtual perquè totes les aplicacions que s'estan executant en ella tindran la possibilitat de desar les seves dades i estat.</p><p>Si la mà quina no respon a aquesta acció potser el sistema operatiu client pot estar mal configurat o no entén els events del botó ACPI Power. En aquest cas, seleccioneu l'acció <b>Atura la mà quina</b> per aturar l'execució de la mà quina virtual.</p></translation> + <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> + <translation type="obsolete"><p>Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power.</p><p>Normalment, el sistema operatiu client que s'està executant a dins de la mà quina virtual detectarà aquest esdeveniment i realitzarà un procediment de tancament net. Aquesta és una manera recomanada de tancar la mà quina virtual perquè totes les aplicacions que s'estan executant en ella tindran la possibilitat de desar les seves dades i estat.</p><p>Si la mà quina no respon a aquesta acció potser el sistema operatiu client pot estar mal configurat o no entén els events del botó ACPI Power. En aquest cas, seleccioneu l'acció <b>Atura la mà quina</b> per aturar l'execució de la mà quina virtual.</p></translation> </message> <message> <source><p>Turns off the virtual machine.</p><p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source> - <translation type="obsolete"><p>Atura la mà quina virtual.</p><p>Tingueu en compte que aquesta acció aturarà immediatament l'execució de la mà quina de manera que el sistema operatiu client que s'hi està executant no podrà realitzar un procediment de tancament net, cosa que podria ocasionar una <i>pèrdua de dades</i> a la mà quina virtual. Només es recomana seleccionar aquesta acció si la mà quina virtual no respon a l'acció <b>Envia el senyal d'aturada</b>.</p></translation> + <translation type="obsolete"><p>Atura la mà quina virtual.</p><p>Tingueu en compte que aquesta acció aturarà immediatament l'execució de la mà quina de manera que el sistema operatiu client que s'hi està executant no podrà realitzar un procediment de tancament net, cosa que podria ocasionar una <i>pèrdua de dades</i> a la mà quina virtual. Només es recomana seleccionar aquesta acció si la mà quina virtual no respon a l'acció <b>Envia el senyal d'aturada</b>.</p></translation> </message> <message> <source>Restore the machine state stored in the current snapshot</source> - <translation type="obsolete">Restaura l'estat de la mà quina emmagatzemat a la captura actual</translation> + <translation type="obsolete">Restaura l'estat de la mà quina emmagatzemat a la captura actual</translation> </message> <message> - <source>&Restore current snapshot '%1'</source> - <translation type="obsolete">&Restaura la captura actual '%1'</translation> + <source>&Restore current snapshot '%1'</source> + <translation type="obsolete">&Restaura la captura actual '%1'</translation> </message> </context> <context> @@ -5812,7 +5811,7 @@ Versió %1</translation> </message> <message> <source>Send the ACPI Power Button press event to the virtual machine</source> - <translation type="obsolete">Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power</translation> + <translation type="obsolete">Envia a la mà quina virtual l'esdeveniment de prémer el botó ACPI Power</translation> </message> <message> <source>&Close...</source> @@ -5836,7 +5835,7 @@ Versió %1</translation> </message> <message> <source>Mount a floppy image file</source> - <translation type="obsolete">Munta un fitxer d'imatge de disquet</translation> + <translation type="obsolete">Munta un fitxer d'imatge de disquet</translation> </message> <message> <source>Unmount F&loppy</source> @@ -5852,7 +5851,7 @@ Versió %1</translation> </message> <message> <source>Mount a CD/DVD-ROM image file</source> - <translation type="obsolete">Munta un fitxer d'imatge de CD/DVD</translation> + <translation type="obsolete">Munta un fitxer d'imatge de CD/DVD</translation> </message> <message> <source>Unmount C&D/DVD-ROM</source> @@ -5865,7 +5864,7 @@ Versió %1</translation> <message> <source>Remote Desktop (RDP) Server</source> <comment>enable/disable...</comment> - <translation type="obsolete">Servidor d'escriptori remot (RDP)</translation> + <translation type="obsolete">Servidor d'escriptori remot (RDP)</translation> </message> <message> <source>Remote Dis&play</source> @@ -5873,7 +5872,7 @@ Versió %1</translation> </message> <message> <source>Enable or disable remote desktop (RDP) connections to this machine</source> - <translation type="obsolete">Habilita o inhabilita les connexions d'escriptori remot (RDP) a aquesta mà quina</translation> + <translation type="obsolete">Habilita o inhabilita les connexions d'escriptori remot (RDP) a aquesta mà quina</translation> </message> <message> <source>&Shared Folders...</source> @@ -5889,7 +5888,7 @@ Versió %1</translation> </message> <message> <source>Mount the Guest Additions installation image</source> - <translation type="obsolete">Munta la imatge d'instal·lació de les Guest Additions</translation> + <translation type="obsolete">Munta la imatge d'instal·lació de les Guest Additions</translation> </message> <message> <source>&Statistics...</source> @@ -5897,7 +5896,7 @@ Versió %1</translation> </message> <message> <source>&Command line...</source> - <translation type="obsolete">&LÃnia d'ordres...</translation> + <translation type="obsolete">&LÃnia d'ordres...</translation> </message> <message> <source>&VirtualBox Web Site...</source> @@ -5949,15 +5948,15 @@ Versió %1</translation> </message> <message> <source>Indicates whether the guest display auto-resize function is On (<img src=auto_resize_on_16px.png/>) or Off (<img src=auto_resize_off_16px.png/>). Note that this function requires Guest Additions to be installed in the guest OS.</source> - <translation type="obsolete">Indica si la funció d'autoredimensió de la pantalla client està activada (<img src=auto_resize_on_16px.png/>) o desactivada (<img src=auto_resize_off_16px.png/>). Tingueu en compte que aquesta funció requereix tenir les Guest Additions instal·lades en el sistema operatiu client.</translation> + <translation type="obsolete">Indica si la funció d'autoredimensió de la pantalla client està activada (<img src=auto_resize_on_16px.png/>) o desactivada (<img src=auto_resize_off_16px.png/>). Tingueu en compte que aquesta funció requereix tenir les Guest Additions instal·lades en el sistema operatiu client.</translation> </message> <message> <source>Indicates whether the host mouse pointer is captured by the guest OS:<br><nobr><img src=mouse_disabled_16px.png/>&nbsp;&nbsp;pointer is not captured</nobr><br><nobr><img src=mouse_16px.png/>&nbsp;&nbsp;pointer is captured</nobr><br><nobr><img src=mouse_seamless_16px.png/>&nbsp;&nbsp;mouse integration (MI) is On</nobr><br><nobr><img src=mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI is Off, pointer is captured</nobr><br><nobr><img src=mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI is Off, pointer is not captured</nobr><br>Note that the mouse integration feature requires Guest Additions to be installed in the guest OS.</source> - <translation type="obsolete">Indica si el punter del ratolà de l'ordinador amfitrió és capturat pel sistema operatiu client:<br><nobr><img src=mouse_disabled_16px.png/>&nbsp;&nbsp;no captura el punter</nobr><br><nobr><img src=mouse_16px.png/>&nbsp;&nbsp;captura el punter</nobr><br><nobr><img src=mouse_seamless_16px.png/>&nbsp;&nbsp;la integració del ratolà (MI) està activada</nobr><br><nobr><img src=mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI està desactivada, captura el punter</nobr><br><nobr><img src=mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI està desactivada, no captura el punter</nobr><br>Tingueu en compte que la funció d'integració del ratolà requereix tenir instal·lades les Guest Additions en el sistema operatiu client.</translation> + <translation type="obsolete">Indica si el punter del ratolà de l'ordinador amfitrió és capturat pel sistema operatiu client:<br><nobr><img src=mouse_disabled_16px.png/>&nbsp;&nbsp;no captura el punter</nobr><br><nobr><img src=mouse_16px.png/>&nbsp;&nbsp;captura el punter</nobr><br><nobr><img src=mouse_seamless_16px.png/>&nbsp;&nbsp;la integració del ratolà (MI) està activada</nobr><br><nobr><img src=mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI està desactivada, captura el punter</nobr><br><nobr><img src=mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI està desactivada, no captura el punter</nobr><br>Tingueu en compte que la funció d'integració del ratolà requereix tenir instal·lades les Guest Additions en el sistema operatiu client.</translation> </message> <message> <source>Shows the currently assigned Host key.<br>This key, when pressed alone, toggles the the keyboard and mouse capture state. It can also be used in combination with other keys to quickly perform actions from the main menu.</source> - <translation type="obsolete">Mostra la tecla assignada a l'amfitrió.<br>Quan es prem aquesta tecla commuta l'estat de captura del teclat i el ratolÃ. També es pot fer servir en combinació amb altres tecles per accedir rà pidament a algunes opcions del menú principal.</translation> + <translation type="obsolete">Mostra la tecla assignada a l'amfitrió.<br>Quan es prem aquesta tecla commuta l'estat de captura del teclat i el ratolÃ. També es pot fer servir en combinació amb altres tecles per accedir rà pidament a algunes opcions del menú principal.</translation> </message> <message> <source><hr>The VRDP Server is listening on port %1</source> @@ -5965,7 +5964,7 @@ Versió %1</translation> </message> <message> <source><qt>Indicates the status of the hardware virtualization features used by this virtual machine:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></qt></source> - <translation type="obsolete"><qt>Indica l'estat de les caracterÃstiques de virtualització per maquinari utilitzades per aquesta mà quina:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></qt></translation> + <translation type="obsolete"><qt>Indica l'estat de les caracterÃstiques de virtualització per maquinari utilitzades per aquesta mà quina:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></qt></translation> </message> <message> <source>&Pause</source> @@ -5973,7 +5972,7 @@ Versió %1</translation> </message> <message> <source>Suspend the execution of the virtual machine</source> - <translation type="obsolete">Suspèn l'execució de la mà quina virtual</translation> + <translation type="obsolete">Suspèn l'execució de la mà quina virtual</translation> </message> <message> <source>R&esume</source> @@ -5981,7 +5980,7 @@ Versió %1</translation> </message> <message> <source>Resume the execution of the virtual machine</source> - <translation type="obsolete">Reprèn l'execució de la mà quina virtual</translation> + <translation type="obsolete">Reprèn l'execució de la mà quina virtual</translation> </message> <message> <source>Disable &Mouse Integration</source> @@ -5989,7 +5988,7 @@ Versió %1</translation> </message> <message> <source>Temporarily disable host mouse pointer integration</source> - <translation type="obsolete">Desactiva temporalment la integració del punter de l'amfitrió</translation> + <translation type="obsolete">Desactiva temporalment la integració del punter de l'amfitrió</translation> </message> <message> <source>Enable &Mouse Integration</source> @@ -5997,7 +5996,7 @@ Versió %1</translation> </message> <message> <source>Enable temporarily disabled host mouse pointer integration</source> - <translation type="obsolete">Activa la integració del punter de l'amfitrió que s'havia desactivat temporalment</translation> + <translation type="obsolete">Activa la integració del punter de l'amfitrió que s'havia desactivat temporalment</translation> </message> <message> <source>Snapshot %1</source> @@ -6005,7 +6004,7 @@ Versió %1</translation> </message> <message> <source>Host Drive </source> - <translation type="obsolete">Unitat de l'ordinador amfitrió </translation> + <translation type="obsolete">Unitat de l'ordinador amfitrió </translation> </message> <message> <source>&Machine</source> @@ -6023,7 +6022,7 @@ Versió %1</translation> <message> <source>Mount the selected physical drive of the host PC</source> <comment>Floppy tip</comment> - <translation type="obsolete">Munta la unitat fÃsica de l'ordinador amfitrió seleccionada</translation> + <translation type="obsolete">Munta la unitat fÃsica de l'ordinador amfitrió seleccionada</translation> </message> <message> <source>Sun VirtualBox</source> @@ -6032,15 +6031,15 @@ Versió %1</translation> <message> <source>Mount the selected physical drive of the host PC</source> <comment>CD/DVD tip</comment> - <translation type="obsolete">Munta la unitat fÃsica de l'ordinador amfitrió seleccionada</translation> + <translation type="obsolete">Munta la unitat fÃsica de l'ordinador amfitrió seleccionada</translation> </message> <message> <source>Disconnect the cable from the selected virtual network adapter</source> - <translation type="obsolete">Desconnecta el cable de l'adaptador virtual de xarxa seleccionat</translation> + <translation type="obsolete">Desconnecta el cable de l'adaptador virtual de xarxa seleccionat</translation> </message> <message> <source>Connect the cable to the selected virtual network adapter</source> - <translation type="obsolete">Connecta el cable de l'adaptador virtual de xarxa seleccionat</translation> + <translation type="obsolete">Connecta el cable de l'adaptador virtual de xarxa seleccionat</translation> </message> <message> <source>Seam&less Mode</source> @@ -6048,7 +6047,7 @@ Versió %1</translation> </message> <message> <source>Switch to seamless desktop integration mode</source> - <translation type="obsolete">Canvia al mode d'integració de l'escriptori fluid</translation> + <translation type="obsolete">Canvia al mode d'integració de l'escriptori fluid</translation> </message> <message> <source>Indicates whether the keyboard is captured by the guest OS (<img src=hostkey_captured_16px.png/>) or not (<img src=hostkey_16px.png/>).</source> @@ -6057,12 +6056,12 @@ Versió %1</translation> <message> <source><qt><nobr>Indicates the activity of the floppy media:</nobr>%1</qt></source> <comment>Floppy tooltip</comment> - <translation type="obsolete"><qt><nobr>Indica l'activitat del disquet:</nobr>%1</qt></translation> + <translation type="obsolete"><qt><nobr>Indica l'activitat del disquet:</nobr>%1</qt></translation> </message> <message> <source><br><nobr><b>Host Drive</b>: %1</nobr></source> <comment>Floppy tooltip</comment> - <translation type="obsolete"><br><nobr><b>Unitat de l'amfitrió</b>: %1</nobr></translation> + <translation type="obsolete"><br><nobr><b>Unitat de l'amfitrió</b>: %1</nobr></translation> </message> <message> <source><br><nobr><b>Image</b>: %1</nobr></source> @@ -6077,12 +6076,12 @@ Versió %1</translation> <message> <source><qt><nobr>Indicates the activity of the CD/DVD-ROM media:</nobr>%1</qt></source> <comment>DVD-ROM tooltip</comment> - <translation type="obsolete"><qt><nobr>Indica l'activitat del CD/DVD:</nobr>%1</qt></translation> + <translation type="obsolete"><qt><nobr>Indica l'activitat del CD/DVD:</nobr>%1</qt></translation> </message> <message> <source><br><nobr><b>Host Drive</b>: %1</nobr></source> <comment>DVD-ROM tooltip</comment> - <translation type="obsolete"><br><nobr><b>Unitat de l'amfitrió</b>: %1</nobr></translation> + <translation type="obsolete"><br><nobr><b>Unitat de l'amfitrió</b>: %1</nobr></translation> </message> <message> <source><br><nobr><b>Image</b>: %1</nobr></source> @@ -6097,7 +6096,7 @@ Versió %1</translation> <message> <source><qt><nobr>Indicates activity on the the virtual hard disks:</nobr>%1</qt></source> <comment>HDD tooltip</comment> - <translation type="obsolete"><qt><nobr>Indica l'activitat dels discos durs virtuals:</nobr>%1</qt></translation> + <translation type="obsolete"><qt><nobr>Indica l'activitat dels discos durs virtuals:</nobr>%1</qt></translation> </message> <message> <source><br><nobr><b>No hard disks attached</b></nobr></source> @@ -6107,7 +6106,7 @@ Versió %1</translation> <message> <source><qt><nobr>Indicates the activity of the network interfaces:</nobr>%1</qt></source> <comment>Network adapters tooltip</comment> - <translation type="obsolete"><qt><nobr>Indica l'activitat de les interfÃcies de xarxa:</nobr>%1</qt></translation> + <translation type="obsolete"><qt><nobr>Indica l'activitat de les interfÃcies de xarxa:</nobr>%1</qt></translation> </message> <message> <source><br><nobr><b>Adapter %1 (%2)</b>: cable %3</nobr></source> @@ -6132,7 +6131,7 @@ Versió %1</translation> <message> <source><qt><nobr>Indicates the activity of the attached USB devices:</nobr>%1</qt></source> <comment>USB device tooltip</comment> - <translation type="obsolete"><qt><nobr>Indica l'activitat dels dispositius USB connectats:</nobr>%1</qt></translation> + <translation type="obsolete"><qt><nobr>Indica l'activitat dels dispositius USB connectats:</nobr>%1</qt></translation> </message> <message> <source><br><nobr><b>No USB devices attached</b></nobr></source> @@ -6149,9 +6148,9 @@ Versió %1</translation> <translation type="obsolete">Indica si la pantalla remota (servidor VRDP) està activada (<img src=vrdp_16px.png/>) o no (<img src=vrdp_disabled_16px.png/>).</translation> </message> <message> - <source><qt><nobr>Indicates the activity of the machineof the machine'sapos;s shared folders: shared folders:</nobr>%1</qt></source> + <source><qt><nobr>Indicates the activity of the machineof the machine'sapos;s shared folders: shared folders:</nobr>%1</qt></source> <comment>Shared folders tooltip</comment> - <translation type="obsolete"><qt><nobr>Indica l'activitat de les carpetes compartides:</nobr>%1</qt></translation> + <translation type="obsolete"><qt><nobr>Indica l'activitat de les carpetes compartides:</nobr>%1</qt></translation> </message> <message> <source><br><nobr><b>No shared folders</b></nobr></source> @@ -6168,7 +6167,7 @@ Versió %1</translation> </message> <message> <source>Show the online help contents</source> - <translation type="obsolete">Mostra els continguts de l'ajuda en lÃnia</translation> + <translation type="obsolete">Mostra els continguts de l'ajuda en lÃnia</translation> </message> <message> <source>R&egister VirtualBox...</source> @@ -6194,15 +6193,15 @@ Versió %1</translation> <message> <source>&Command Line...</source> <comment>debug action</comment> - <translation type="obsolete">&LÃnia d'ordres...</translation> + <translation type="obsolete">&LÃnia d'ordres...</translation> </message> <message> <source>Indicates whether the guest display auto-resize function is On (<img src=:/auto_resize_on_16px.png/>) or Off (<img src=:/auto_resize_off_16px.png/>). Note that this function requires Guest Additions to be installed in the guest OS.</source> - <translation type="obsolete">Indica si la funció d'autoredimensió de la pantalla client està activada (<img src=:/auto_resize_on_16px.png/>) o desactivada (<img src=:/auto_resize_off_16px.png/>). Tingueu en compte que aquesta funció requereix tenir les Guest Additions instal·lades en el sistema operatiu client.</translation> + <translation type="obsolete">Indica si la funció d'autoredimensió de la pantalla client està activada (<img src=:/auto_resize_on_16px.png/>) o desactivada (<img src=:/auto_resize_off_16px.png/>). Tingueu en compte que aquesta funció requereix tenir les Guest Additions instal·lades en el sistema operatiu client.</translation> </message> <message> <source>Indicates whether the host mouse pointer is captured by the guest OS:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;pointer is not captured</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;pointer is captured</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;mouse integration (MI) is On</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI is Off, pointer is captured</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI is Off, pointer is not captured</nobr><br>Note that the mouse integration feature requires Guest Additions to be installed in the guest OS.</source> - <translation type="obsolete">Indica si el punter de l'ordinador amfitrió és capturat pel sistema operatiu client:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;no captura el punter</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;captura el punter</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;la integració del punter (MI) està activada</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI està desactivada, captura el punter</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI està desactivada, no captura el punter</nobr><br>Tingueu en compte que la funció d'integració del punter requereix tenir instal·lades les Guest Additions en el sistema operatiu client.</translation> + <translation type="obsolete">Indica si el punter de l'ordinador amfitrió és capturat pel sistema operatiu client:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;no captura el punter</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;captura el punter</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;la integració del punter (MI) està activada</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;MI està desactivada, captura el punter</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;MI està desactivada, no captura el punter</nobr><br>Tingueu en compte que la funció d'integració del punter requereix tenir instal·lades les Guest Additions en el sistema operatiu client.</translation> </message> <message> <source>Indicates whether the keyboard is captured by the guest OS (<img src=:/hostkey_captured_16px.png/>) or not (<img src=:/hostkey_16px.png/>).</source> @@ -6215,16 +6214,16 @@ Versió %1</translation> <message> <source>&Logging...</source> <comment>debug action</comment> - <translation type="obsolete">&S'està connectant...</translation> + <translation type="obsolete">&S'està connectant...</translation> </message> <message> <source>Shows the currently assigned Host key.<br>This key, when pressed alone, toggles the keyboard and mouse capture state. It can also be used in combination with other keys to quickly perform actions from the main menu.</source> - <translation type="obsolete">Mostra la tecla assignada a l'amfitrió.<br>Quan es prem aquesta tecla commuta l'estat de captura del teclat i el punter. També es pot fer servir en combinació amb altres tecles per accedir rà pidament a algunes opcions del menú principal.</translation> + <translation type="obsolete">Mostra la tecla assignada a l'amfitrió.<br>Quan es prem aquesta tecla commuta l'estat de captura del teclat i el punter. També es pot fer servir en combinació amb altres tecles per accedir rà pidament a algunes opcions del menú principal.</translation> </message> <message> <source>Indicates the status of the hardware virtualization features used by this virtual machine:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></source> <comment>Virtualization Stuff LED</comment> - <translation type="obsolete">Indica l'estat de les caracterÃstiques de virtualització de maquinari que fa servir aquesta mà quina virtual:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></translation> + <translation type="obsolete">Indica l'estat de les caracterÃstiques de virtualització de maquinari que fa servir aquesta mà quina virtual:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></translation> </message> <message> <source><br><nobr><b>%1:</b>&nbsp;%2</nobr></source> @@ -6273,51 +6272,51 @@ Versió %1</translation> </message> <message> <source>No CD/DVD Devices Attached</source> - <translation type="obsolete">No s'ha conectat cap dispositiu de CD/DVD</translation> + <translation type="obsolete">No s'ha conectat cap dispositiu de CD/DVD</translation> </message> <message> <source>No Floppy Devices Attached</source> - <translation type="obsolete">No s'ha connectat cap dispositiu de disquetera</translation> + <translation type="obsolete">No s'ha connectat cap dispositiu de disquetera</translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the virtual hard disks:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the virtual hard disks:</nobr>%1</p></source> <comment>HDD tooltip</comment> - <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels discos durs virtuals:</nobr>%1</p></translation> + <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels discos durs virtuals:</nobr>%1</p></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the CD/DVD devices:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the CD/DVD devices:</nobr>%1</p></source> <comment>CD/DVD tooltip</comment> - <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de CD/DVD:</nobr>%1</p></translation> + <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de CD/DVD:</nobr>%1</p></translation> </message> <message> <source><br><nobr><b>No CD/DVD devices attached</b></nobr></source> <comment>CD/DVD tooltip</comment> - <translation type="obsolete"><br><nobr><b>No s'ha connectat cap dispositiu de CD/DVD</b></nobr></translation> + <translation type="obsolete"><br><nobr><b>No s'ha connectat cap dispositiu de CD/DVD</b></nobr></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy devices:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy devices:</nobr>%1</p></source> <comment>FD tooltip</comment> - <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de disquetera:</nobr>%1</p></translation> + <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de disquetera:</nobr>%1</p></translation> </message> <message> <source><br><nobr><b>No floppy devices attached</b></nobr></source> <comment>FD tooltip</comment> - <translation type="obsolete"><br><nobr><b>No s'ha connectat cap dispositiu de disquetera</b></nobr></translation> + <translation type="obsolete"><br><nobr><b>No s'ha connectat cap dispositiu de disquetera</b></nobr></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the network interfaces:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the network interfaces:</nobr>%1</p></source> <comment>Network adapters tooltip</comment> - <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de xarxa:</nobr>%1</p></translation> + <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de xarxa:</nobr>%1</p></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the attached USB devices:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the attached USB devices:</nobr>%1</p></source> <comment>USB device tooltip</comment> - <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius USB connectats:</nobr>%1</p></translation> + <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat dels dispositius USB connectats:</nobr>%1</p></translation> </message> <message> - <source><p style='white-space:pre'><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</p></source> + <source><p style='white-space:pre'><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</p></source> <comment>Shared folders tooltip</comment> - <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat de les carpetes compartides per la mà quina virtual:</nobr>%1</p></translation> + <translation type="obsolete"><p style='white-space:pre'><nobr>Indica l'activitat de les carpetes compartides per la mà quina virtual:</nobr>%1</p></translation> </message> <message> <source>Dock Icon</source> @@ -6325,7 +6324,7 @@ Versió %1</translation> </message> <message> <source>Show Application Icon</source> - <translation type="obsolete">Mostra la icona de l'aplicació</translation> + <translation type="obsolete">Mostra la icona de l'aplicació</translation> </message> <message> <source>Show Monitor Preview</source> @@ -6362,7 +6361,7 @@ Versió %1</translation> </message> <message> <source>No supported devices connected to the host PC</source> - <translation type="obsolete">No hi ha dispositius suportats connectats a l'ordinador amfitrió</translation> + <translation type="obsolete">No hi ha dispositius suportats connectats a l'ordinador amfitrió</translation> </message> </context> <context> @@ -6408,12 +6407,12 @@ Versió %1</translation> <translation type="obsolete">F1</translation> </message> <message> - <source>Invoke dialog's help</source> - <translation type="obsolete">Invoca l'ajuda del dià leg</translation> + <source>Invoke dialog's help</source> + <translation type="obsolete">Invoca l'ajuda del dià leg</translation> </message> <message> <source>&OK</source> - <translation type="obsolete">&D'acord</translation> + <translation type="obsolete">&D'acord</translation> </message> <message> <source>Accept dialog</source> @@ -6506,7 +6505,7 @@ Versió %1</translation> </message> <message> <source>Storage Type</source> - <translation type="obsolete">Tipus d'emmagatzematge</translation> + <translation type="obsolete">Tipus d'emmagatzematge</translation> </message> <message> <source>Attached to</source> @@ -6518,16 +6517,16 @@ Versió %1</translation> </message> <message> <source>Checking accessibility</source> - <translation type="obsolete">S'està comprovant l'accessibilitat</translation> + <translation type="obsolete">S'està comprovant l'accessibilitat</translation> </message> <message> <source><nobr><b>%1</b></nobr><br>Checking accessibility...</source> <comment>HDD</comment> - <translation type="obsolete"><nobr><b>%1</b></nobr><br>S'està comprovant l'accessibilitat...</translation> + <translation type="obsolete"><nobr><b>%1</b></nobr><br>S'està comprovant l'accessibilitat...</translation> </message> <message> <source><nobr><b>%1</b></nobr><br><nobr>Disk type:&nbsp;&nbsp;%2</nobr><br><nobr>Storage type:&nbsp;&nbsp;%3</nobr></source> - <translation type="obsolete"><nobr><b>%1</b></nobr><br><nobr>Tipus del disc:&nbsp;&nbsp;%2</nobr><br><nobr>Tipus d'emmagatzematge:&nbsp;&nbsp;%3</nobr></translation> + <translation type="obsolete"><nobr><b>%1</b></nobr><br><nobr>Tipus del disc:&nbsp;&nbsp;%2</nobr><br><nobr>Tipus d'emmagatzematge:&nbsp;&nbsp;%3</nobr></translation> </message> <message> <source><br><nobr>Attached to:&nbsp;&nbsp;%1</nobr></source> @@ -6542,7 +6541,7 @@ Versió %1</translation> <message> <source><nobr><b>%1</b></nobr><br>Error checking media accessibility</source> <comment>HDD</comment> - <translation type="obsolete"><nobr><b>%1</b></nobr><br>S'ha produït un error quan s'estava comprovant l'accessibilitat als suports</translation> + <translation type="obsolete"><nobr><b>%1</b></nobr><br>S'ha produït un error quan s'estava comprovant l'accessibilitat als suports</translation> </message> <message> <source><nobr><b>%1</b></nobr><br>%2</source> @@ -6552,7 +6551,7 @@ Versió %1</translation> <message> <source><nobr><b>%1</b></nobr><br>Checking accessibility...</source> <comment>CD/DVD/Floppy</comment> - <translation type="obsolete"><nobr><b>%1</b></nobr><br>S'està comprovant l'accessibilitat...</translation> + <translation type="obsolete"><nobr><b>%1</b></nobr><br>S'està comprovant l'accessibilitat...</translation> </message> <message> <source><nobr><b>%1</b></nobr></source> @@ -6567,7 +6566,7 @@ Versió %1</translation> <message> <source><nobr><b>%1</b></nobr><br>Error checking media accessibility</source> <comment>CD/DVD/Floppy</comment> - <translation type="obsolete"><nobr><b>%1</b></nobr><br>S'ha produït un error quan s'estava comprovant l'accessibilitat als suports</translation> + <translation type="obsolete"><nobr><b>%1</b></nobr><br>S'ha produït un error quan s'estava comprovant l'accessibilitat als suports</translation> </message> <message> <source><nobr><b>%1</b></nobr><br>%2</source> @@ -6576,7 +6575,7 @@ Versió %1</translation> <message> <source>The image file is not accessible</source> <comment>CD/DVD/Floppy</comment> - <translation type="obsolete">No es pot accedir al fitxer d'imatge</translation> + <translation type="obsolete">No es pot accedir al fitxer d'imatge</translation> </message> <message> <source>&Select</source> @@ -6588,15 +6587,15 @@ Versió %1</translation> </message> <message> <source>Select a hard disk image file</source> - <translation type="obsolete">Seleccioneu un fitxer d'imatge de disc dur</translation> + <translation type="obsolete">Seleccioneu un fitxer d'imatge de disc dur</translation> </message> <message> <source>Select a CD/DVD-ROM disk image file</source> - <translation type="obsolete">Seleccioneu un fitxer d'imatge de disc CD/DVD-ROM</translation> + <translation type="obsolete">Seleccioneu un fitxer d'imatge de disc CD/DVD-ROM</translation> </message> <message> <source>Select a floppy disk image file</source> - <translation type="obsolete">Seleccioneu un fitxer d'imatge de disquet</translation> + <translation type="obsolete">Seleccioneu un fitxer d'imatge de disquet</translation> </message> <message> <source>Create a new virtual hard disk</source> @@ -6604,7 +6603,7 @@ Versió %1</translation> </message> <message> <source>Add (register) an existing image file</source> - <translation type="obsolete">Afegeix (registra) un fitxer d'imatge existent</translation> + <translation type="obsolete">Afegeix (registra) un fitxer d'imatge existent</translation> </message> <message> <source>Remove (unregister) the selected media</source> @@ -6644,7 +6643,7 @@ Versió %1</translation> </message> <message> <source><nobr>&nbsp;&nbsp;Storage Type:</nobr></source> - <translation type="obsolete"><nobr>&nbsp;&nbsp;Tipus d'emmagatzematge:</nobr></translation> + <translation type="obsolete"><nobr>&nbsp;&nbsp;Tipus d'emmagatzematge:</nobr></translation> </message> <message> <source><nobr>Attached to:</nobr></source> @@ -6670,7 +6669,7 @@ Versió %1</translation> </message> <message> <source>The actual default path value will be displayed after accepting the changes and opening this dialog again.</source> - <translation>El camà actual per defecte es mostrarà després d'acceptar els canvis i obrir aquest dià leg novament. </translation> + <translation>El camà actual per defecte es mostrarà després d'acceptar els canvis i obrir aquest dià leg novament. </translation> </message> <message> <source><not selected></source> @@ -6678,7 +6677,7 @@ Versió %1</translation> </message> <message> <source>Please use the <b>Other...</b> item from the drop-down list to select a path.</source> - <translation>Feu servir l'element <b>Altra...</b> a la llista desplegable per a seleccionar el camà desitjat.</translation> + <translation>Feu servir l'element <b>Altra...</b> a la llista desplegable per a seleccionar el camà desitjat.</translation> </message> <message> <source>Other...</source> @@ -6752,15 +6751,15 @@ Versió %1</translation> <name>VBoxGLSettingsInput</name> <message> <source>Host &Key:</source> - <translation type="obsolete">Tecla d'&amfitrió:</translation> + <translation type="obsolete">Tecla d'&amfitrió:</translation> </message> <message> <source>Displays the key used as a Host Key in the VM window. Activate the entry field and press a new Host Key. Note that alphanumeric, cursor movement and editing keys cannot be used.</source> - <translation type="obsolete">Mostra la tecla que es fa servir com a tecla d'amfitrió en la finestra de la mà quina virtual. Activeu el camp d'entrada i premeu una nova tecla d'amfitrió. Tingueu en compte que les tecles alfanumèriques, de moviment del cursor i d'edició no es poden fer servir com a tecles d'amfitrió.</translation> + <translation type="obsolete">Mostra la tecla que es fa servir com a tecla d'amfitrió en la finestra de la mà quina virtual. Activeu el camp d'entrada i premeu una nova tecla d'amfitrió. Tingueu en compte que les tecles alfanumèriques, de moviment del cursor i d'edició no es poden fer servir com a tecles d'amfitrió.</translation> </message> <message> <source>When checked, the keyboard is automatically captured every time the VM window is activated. When the keyboard is captured, all keystrokes (including system ones like Alt-Tab) are directed to the VM.</source> - <translation type="obsolete">Quan estigui marcat, el teclat serà automà ticament capturat cada vegada que s'activi la finestra de la mà quina virtual. Quan el teclat és capturat, totes les pulsacions de tecles (incloses les de sistema, com ara Alt+Tab) es redireccionaran cap a la mà quina virtual.</translation> + <translation type="obsolete">Quan estigui marcat, el teclat serà automà ticament capturat cada vegada que s'activi la finestra de la mà quina virtual. Quan el teclat és capturat, totes les pulsacions de tecles (incloses les de sistema, com ara Alt+Tab) es redireccionaran cap a la mà quina virtual.</translation> </message> <message> <source>&Auto Capture Keyboard</source> @@ -6768,11 +6767,11 @@ Versió %1</translation> </message> <message> <source>Reset Host Key</source> - <translation type="obsolete">Reinicialitza la telca d'amfitrió</translation> + <translation type="obsolete">Reinicialitza la telca d'amfitrió</translation> </message> <message> <source>Resets the key used as a Host Key in the VM window.</source> - <translation type="obsolete">Reinicialitza la tecla que es fa servir com a tecla d'amfitrió a la finestra de la mà quina virtual.</translation> + <translation type="obsolete">Reinicialitza la tecla que es fa servir com a tecla d'amfitrió a la finestra de la mà quina virtual.</translation> </message> </context> <context> @@ -6780,7 +6779,7 @@ Versió %1</translation> <message> <source>Differencing</source> <comment>hard disk</comment> - <translation type="obsolete">S'estan calculant les diferències</translation> + <translation type="obsolete">S'estan calculant les diferències</translation> </message> <message> <source>Unknown device %1:%2</source> @@ -6840,7 +6839,7 @@ Versió %1</translation> <message> <source>Boot Order</source> <comment>details report</comment> - <translation>Ordre d'arrencada</translation> + <translation>Ordre d'arrencada</translation> </message> <message> <source>ACPI</source> @@ -6910,7 +6909,7 @@ Versió %1</translation> <message> <source>Host Drive</source> <comment>details report (floppy)</comment> - <translation type="obsolete">Unitat de l'ordinador amfitrió</translation> + <translation type="obsolete">Unitat de l'ordinador amfitrió</translation> </message> <message> <source>Floppy</source> @@ -6935,7 +6934,7 @@ Versió %1</translation> <message> <source>Host Drive</source> <comment>details report (DVD)</comment> - <translation type="obsolete">Unitat de l'ordinador amfitrió</translation> + <translation type="obsolete">Unitat de l'ordinador amfitrió</translation> </message> <message> <source>CD/DVD-ROM</source> @@ -6963,9 +6962,9 @@ Versió %1</translation> <translation>Adaptador pont, %1</translation> </message> <message> - <source>Host-only adapter, '%1'</source> + <source>Host-only adapter, '%1'</source> <comment>details report (network)</comment> - <translation>Adaptador de només l'amfitrió, '%1'</translation> + <translation>Adaptador de només l'amfitrió, '%1'</translation> </message> <message> <source>Adapter %1</source> @@ -7019,7 +7018,7 @@ Versió %1</translation> </message> <message> <source>Opening URLs is not implemented yet.</source> - <translation type="obsolete">Encara no està implementada l'opció d'obrir URL.</translation> + <translation type="obsolete">Encara no està implementada l'opció d'obrir URL.</translation> </message> <message> <source>Powered Off</source> @@ -7039,7 +7038,7 @@ Versió %1</translation> <message> <source>Running</source> <comment>MachineState</comment> - <translation>S'està executant</translation> + <translation>S'està executant</translation> </message> <message> <source>Paused</source> @@ -7049,27 +7048,27 @@ Versió %1</translation> <message> <source>Starting</source> <comment>MachineState</comment> - <translation>S'està iniciant</translation> + <translation>S'està iniciant</translation> </message> <message> <source>Stopping</source> <comment>MachineState</comment> - <translation>S'està aturant</translation> + <translation>S'està aturant</translation> </message> <message> <source>Saving</source> <comment>MachineState</comment> - <translation>S'està desant</translation> + <translation>S'està desant</translation> </message> <message> <source>Restoring</source> <comment>MachineState</comment> - <translation>S'està restaurant</translation> + <translation>S'està restaurant</translation> </message> <message> <source>Discarding</source> <comment>MachineState</comment> - <translation type="obsolete">S'està descartant</translation> + <translation type="obsolete">S'està descartant</translation> </message> <message> <source>Closed</source> @@ -7084,12 +7083,12 @@ Versió %1</translation> <message> <source>Spawning</source> <comment>SessionState</comment> - <translation>S'està engendrant</translation> + <translation>S'està engendrant</translation> </message> <message> <source>Closing</source> <comment>SessionState</comment> - <translation type="obsolete">S'està tancant</translation> + <translation type="obsolete">S'està tancant</translation> </message> <message> <source>None</source> @@ -7199,7 +7198,7 @@ Versió %1</translation> <message> <source>Null Audio Driver</source> <comment>AudioDriverType</comment> - <translation>Controlador d'à udio nul</translation> + <translation>Controlador d'à udio nul</translation> </message> <message> <source>Windows Multimedia</source> @@ -7209,12 +7208,12 @@ Versió %1</translation> <message> <source>OSS Audio Driver</source> <comment>AudioDriverType</comment> - <translation>Controlador d'à udio OSS</translation> + <translation>Controlador d'à udio OSS</translation> </message> <message> <source>ALSA Audio Driver</source> <comment>AudioDriverType</comment> - <translation>Controlador d'à udio ALSA</translation> + <translation>Controlador d'à udio ALSA</translation> </message> <message> <source>Windows DirectSound</source> @@ -7244,7 +7243,7 @@ Versió %1</translation> <message> <source>Host Interface</source> <comment>NetworkAttachmentType</comment> - <translation type="obsolete">InterfÃcie de xarxa de l'amfitrió</translation> + <translation type="obsolete">InterfÃcie de xarxa de l'amfitrió</translation> </message> <message> <source>Internal Network</source> @@ -7254,7 +7253,7 @@ Versió %1</translation> <message> <source>Host-only Adapter</source> <comment>NetworkAttachmentType</comment> - <translation>Adaptador de només l'amfitrió</translation> + <translation>Adaptador de només l'amfitrió</translation> </message> <message> <source>Not supported</source> @@ -7289,7 +7288,7 @@ Versió %1</translation> <message> <source><i>Checking...</i></source> <comment>hard disk</comment> - <translation type="obsolete"><i>S'està comprovant...</i></translation> + <translation type="obsolete"><i>S'està comprovant...</i></translation> </message> <message> <source><i>Inaccessible</i></source> @@ -7304,12 +7303,12 @@ Versió %1</translation> <message> <source>Host To Guest</source> <comment>ClipboardType</comment> - <translation>De l'amfitrió al client</translation> + <translation>De l'amfitrió al client</translation> </message> <message> <source>Guest To Host</source> <comment>ClipboardType</comment> - <translation>Del client a l'amfitrió</translation> + <translation>Del client a l'amfitrió</translation> </message> <message> <source>Bidirectional</source> @@ -7377,12 +7376,12 @@ Versió %1</translation> <message> <source>Host Pipe</source> <comment>PortMode</comment> - <translation>Conducte cap a l'amfitrió</translation> + <translation>Conducte cap a l'amfitrió</translation> </message> <message> <source>Host Device</source> <comment>PortMode</comment> - <translation>Dispositiu de l'amfitrió</translation> + <translation>Dispositiu de l'amfitrió</translation> </message> <message> <source>Bridged Network</source> @@ -7392,7 +7391,7 @@ Versió %1</translation> <message> <source>Host-only Network</source> <comment>NetworkAttachmentType</comment> - <translation type="obsolete">Xarxa només d'amfitrió</translation> + <translation type="obsolete">Xarxa només d'amfitrió</translation> </message> <message> <source>PIIX3</source> @@ -7427,7 +7426,7 @@ Versió %1</translation> <message> <source>User-defined</source> <comment>serial port</comment> - <translation>Definit per l'usuari</translation> + <translation>Definit per l'usuari</translation> </message> <message> <source>Custom Hard Disk</source> @@ -7480,14 +7479,14 @@ Versió %1</translation> <translation type="obsolete">Xarxa en pont, %1</translation> </message> <message> - <source>Internal network, '%1'</source> + <source>Internal network, '%1'</source> <comment>details report (network)</comment> - <translation>Xarxa interna, '%1'</translation> + <translation>Xarxa interna, '%1'</translation> </message> <message> - <source>Host-only network, '%1'</source> + <source>Host-only network, '%1'</source> <comment>details report (network)</comment> - <translation type="obsolete">Xarxa només de l'amfitrió, '%1'</translation> + <translation type="obsolete">Xarxa només de l'amfitrió, '%1'</translation> </message> <message> <source>Port %1</source> @@ -7655,9 +7654,9 @@ Versió %1</translation> <translation type="obsolete">InterfÃcie amfitriona, %1</translation> </message> <message> - <source>internal network, '%1'</source> + <source>internal network, '%1'</source> <comment>details report (network)</comment> - <translation type="obsolete">xarxa interna, '%1'</translation> + <translation type="obsolete">xarxa interna, '%1'</translation> </message> <message> <source>Adapter %1</source> @@ -7682,12 +7681,12 @@ Versió %1</translation> <message> <source><br><i>Checking accessibility...</i></source> <comment>medium</comment> - <translation type="obsolete"><br><i>S'està comprovant l'accessibilitat...</i></translation> + <translation type="obsolete"><br><i>S'està comprovant l'accessibilitat...</i></translation> </message> <message> <source><hr>Failed to check media accessibility.<br>%1.</source> <comment>medium</comment> - <translation type="obsolete"><hr>Ha fallat la comprovació de l'accessibilitat.<br>%1.</translation> + <translation type="obsolete"><hr>Ha fallat la comprovació de l'accessibilitat.<br>%1.</translation> </message> <message> <source><hr><img src=%1/>&nbsp;Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source> @@ -7697,16 +7696,16 @@ Versió %1</translation> <message> <source>Checking...</source> <comment>medium</comment> - <translation>S'està comprovant...</translation> + <translation>S'està comprovant...</translation> </message> <message> <source>Inaccessible</source> <comment>medium</comment> - <translation>No s'hi pot accedir</translation> + <translation>No s'hi pot accedir</translation> </message> <message> <source><hr>Some of the media in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these media.</source> - <translation type="obsolete"><hr>No s'hi pot accedir a alguns dels suports d'aquest disc. Feu servir el gestor de suports virtuals al mode <b>Mostra diferències als discos durs</b> per inspeccionar aquest suport.</translation> + <translation type="obsolete"><hr>No s'hi pot accedir a alguns dels suports d'aquest disc. Feu servir el gestor de suports virtuals al mode <b>Mostra diferències als discos durs</b> per inspeccionar aquest suport.</translation> </message> <message> <source>%1<hr>This base hard disk is indirectly attached using the following differencing hard disk:<br>%2%3</source> @@ -7730,12 +7729,12 @@ Versió %1</translation> <message> <source>Setting Up</source> <comment>MachineState</comment> - <translation>S'està configurant</translation> + <translation>S'està configurant</translation> </message> <message> <source>Differencing</source> <comment>DiskType</comment> - <translation>S'estan calculant les diferències</translation> + <translation>S'estan calculant les diferències</translation> </message> <message> <source><nobr>%1 MB</nobr></source> @@ -7825,22 +7824,22 @@ Versió %1</translation> <message> <source>Taking Live Snapshot</source> <comment>MachineState</comment> - <translation>S'està capturant la captura</translation> + <translation>S'està capturant la captura</translation> </message> <message> <source>Teleporting Paused VM</source> <comment>MachineState</comment> - <translation>S'està teleportant la MV en pausa</translation> + <translation>S'està teleportant la MV en pausa</translation> </message> <message> <source>Restoring Snapshot</source> <comment>MachineState</comment> - <translation>S'està restaurant la captura</translation> + <translation>S'està restaurant la captura</translation> </message> <message> <source>Deleting Snapshot</source> <comment>MachineState</comment> - <translation>S'està eliminant la captura</translation> + <translation>S'està eliminant la captura</translation> </message> <message> <source>Floppy</source> @@ -7903,9 +7902,9 @@ Versió %1</translation> <translation>Buit</translation> </message> <message> - <source>Host Drive '%1'</source> + <source>Host Drive '%1'</source> <comment>medium</comment> - <translation>Unitat de l'amfitrió %1</translation> + <translation>Unitat de l'amfitrió %1</translation> </message> <message> <source>Host Drive %1 (%2)</source> @@ -7930,21 +7929,21 @@ Versió %1</translation> <message> <source><i>Checking accessibility...</i></source> <comment>medium</comment> - <translation><i>S'està comprovant l'accessibilitat...</i></translation> + <translation><i>S'està comprovant l'accessibilitat...</i></translation> </message> <message> <source>Failed to check media accessibility.</source> <comment>medium</comment> - <translation>No s'ha pogut comprovar l'accessibilitat al suport.</translation> + <translation>No s'ha pogut comprovar l'accessibilitat al suport.</translation> </message> <message> <source><b>No medium selected</b></source> <comment>medium</comment> - <translation><b>No s'ha seleccionat cap suport</b></translation> + <translation><b>No s'ha seleccionat cap suport</b></translation> </message> <message> <source>You can also change this while the machine is running.</source> - <translation>També podeu canviar això mentre la mà quina s'està executant.</translation> + <translation>També podeu canviar això mentre la mà quina s'està executant.</translation> </message> <message> <source><b>No media available</b></source> @@ -7963,7 +7962,7 @@ Versió %1</translation> <message> <source>Some of the media in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these media.</source> <comment>medium</comment> - <translation>Alguns dels suports d'aquest disc dur no són accessibles. Feu servir el Gestor virtual de suports en el mode <b>Mostra els discos durs diferenciats</b> per inspeccionar aquests suports.</translation> + <translation>Alguns dels suports d'aquest disc dur no són accessibles. Feu servir el Gestor virtual de suports en el mode <b>Mostra els discos durs diferenciats</b> per inspeccionar aquests suports.</translation> </message> <message> <source>This base hard disk is indirectly attached using the following differencing hard disk:</source> @@ -8028,9 +8027,9 @@ Versió %1</translation> <translation>Pantalles</translation> </message> <message> - <source>VDE network, '%1'</source> + <source>VDE network, '%1'</source> <comment>details report (network)</comment> - <translation>Xarxa VDE, '%1'</translation> + <translation>Xarxa VDE, '%1'</translation> </message> <message> <source>SAS</source> @@ -8114,12 +8113,12 @@ Versió %1</translation> <message> <source>Remote Desktop Server Port</source> <comment>details report (VRDE Server)</comment> - <translation>Port del servidor d'escriptori remot</translation> + <translation>Port del servidor d'escriptori remot</translation> </message> <message> <source>Remote Desktop Server</source> <comment>details report (VRDE Server)</comment> - <translation>Servidor d'escriptori remot</translation> + <translation>Servidor d'escriptori remot</translation> </message> <message> <source>Disabled</source> @@ -8176,7 +8175,7 @@ Versió %1</translation> <message> <source>Unlocking</source> <comment>SessionState</comment> - <translation>S'està desbloquejant</translation> + <translation>S'està desbloquejant</translation> </message> <message> <source>Null</source> @@ -8230,27 +8229,27 @@ Versió %1</translation> <message> <source>Readonly</source> <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>Només lectura</translation> </message> <message> <source>Multi-attach</source> <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>Adjunció múltiple</translation> </message> </context> <context> <name>VBoxGlobalSettings</name> <message> - <source>'%1 (0x%2)' is an invalid host key code.</source> - <translation>'%1 (0x%2)' no és un codi de tecla d'amfitrió và lid.</translation> + <source>'%1 (0x%2)' is an invalid host key code.</source> + <translation>'%1 (0x%2)' no és un codi de tecla d'amfitrió và lid.</translation> </message> <message> - <source>The value '%1' of the key '%2' doesn't match the regexp constraint '%3'.</source> - <translation>El valor '%1' de la tecla '%2' no concorda amb la restricció de l'expressió regular '%3'.</translation> + <source>The value '%1' of the key '%2' doesn't match the regexp constraint '%3'.</source> + <translation>El valor '%1' de la tecla '%2' no concorda amb la restricció de l'expressió regular '%3'.</translation> </message> <message> - <source>Cannot delete the key '%1'.</source> - <translation>No es pot eliminar la tecla '%1'.</translation> + <source>Cannot delete the key '%1'.</source> + <translation>No es pot eliminar la tecla '%1'.</translation> </message> </context> <context> @@ -8273,7 +8272,7 @@ Versió %1</translation> </message> <message> <source><i>Select a settings category from the list on the left-hand side and move the mouse over a settings item to get more information<i>.</source> - <translation type="obsolete"><i>Seleccioneu una categoria de parà metres en la llista de l'esquerra i deplaceu el ratolà sobre un element de la dreta per obtenir més informació<i>.</translation> + <translation type="obsolete"><i>Seleccioneu una categoria de parà metres en la llista de l'esquerra i deplaceu el ratolà sobre un element de la dreta per obtenir més informació<i>.</translation> </message> <message> <source> General </source> @@ -8329,7 +8328,7 @@ Versió %1</translation> </message> <message> <source>&Host Key</source> - <translation type="obsolete">Tecla d'&amfitrió</translation> + <translation type="obsolete">Tecla d'&amfitrió</translation> </message> <message> <source>&Auto capture keyboard</source> @@ -8365,7 +8364,7 @@ Versió %1</translation> </message> <message> <source>Removes the selected USB filter.</source> - <translation type="obsolete">Elimina el filtre d'USB seleccionat.</translation> + <translation type="obsolete">Elimina el filtre d'USB seleccionat.</translation> </message> <message> <source>Ctrl+Up</source> @@ -8377,7 +8376,7 @@ Versió %1</translation> </message> <message> <source>Moves the selected USB filter up.</source> - <translation type="obsolete">Mou amunt el filtre d'USB seleccionat.</translation> + <translation type="obsolete">Mou amunt el filtre d'USB seleccionat.</translation> </message> <message> <source>Ctrl+Down</source> @@ -8389,7 +8388,7 @@ Versió %1</translation> </message> <message> <source>Moves the selected USB filter down.</source> - <translation type="obsolete">Mou avall el filtre d'USB seleccionat.</translation> + <translation type="obsolete">Mou avall el filtre d'USB seleccionat.</translation> </message> <message> <source>Help</source> @@ -8401,15 +8400,15 @@ Versió %1</translation> </message> <message> <source>Displays the dialog help.</source> - <translation type="obsolete">Mostra el dià leg d'ajuda.</translation> + <translation type="obsolete">Mostra el dià leg d'ajuda.</translation> </message> <message> <source>Invalid settings detected</source> - <translation type="obsolete">S'han detectat parà metres no và lids</translation> + <translation type="obsolete">S'han detectat parà metres no và lids</translation> </message> <message> <source>&OK</source> - <translation type="obsolete">&D'acord</translation> + <translation type="obsolete">&D'acord</translation> </message> <message> <source>Accepts (saves) changes and closes the dialog.</source> @@ -8429,7 +8428,7 @@ Versió %1</translation> </message> <message> <source>Displays the key used as a Host Key in the VM window. Activate the entry field and press a new Host Key. Note that alphanumeric, cursor movement and editing keys cannot be used.</source> - <translation type="obsolete">Mostra la tecla que es fa servir com a tecla d'amfitrió en la finestra de la mà quina virtual. Activeu el camp d'entrada i premeu una nova tecla d'amfitrió. Tingueu en compte les tecles alfanumèriques, de moviment del cursor i d'edició no es poden fer servir com a tecles d'amfitrió.</translation> + <translation type="obsolete">Mostra la tecla que es fa servir com a tecla d'amfitrió en la finestra de la mà quina virtual. Activeu el camp d'entrada i premeu una nova tecla d'amfitrió. Tingueu en compte les tecles alfanumèriques, de moviment del cursor i d'edició no es poden fer servir com a tecles d'amfitrió.</translation> </message> <message> <source>New Filter %1</source> @@ -8482,9 +8481,9 @@ written in <b>bold</b>. Select <i>Default</i> to reset to the system default language.</qt> </source> <translation type="obsolete"> -<qt>Relaciona tots els idiomes d'interfÃcie disponibles. L'idioma actual està +<qt>Relaciona tots els idiomes d'interfÃcie disponibles. L'idioma actual està escrit en <b>negreta</b>. Seleccioneu <i>Predeterminat</i> per tornar a iniciar -a l'idioma predeterminat del sistema.</qt> +a l'idioma predeterminat del sistema.</qt> </translation> </message> <message> @@ -8494,19 +8493,19 @@ a l'idioma predeterminat del sistema.</qt> </message> <message> <source>Displays the path to the default VDI folder. This folder is used, if not explicitly specified otherwise, when adding existing or creating new virtual hard disks.</source> - <translation type="obsolete">Mostra la ruta cap a la carpeta de fitxers VDI predeterminada. S'usa aquesta carpeta, si no se n'especifica explÃcitament una altra, quan s'afegeix o es crea un disc virtual.</translation> + <translation type="obsolete">Mostra la ruta cap a la carpeta de fitxers VDI predeterminada. S'usa aquesta carpeta, si no se n'especifica explÃcitament una altra, quan s'afegeix o es crea un disc virtual.</translation> </message> <message> <source>Resets the virtual machine folder path to the default value. The actual default path will be displayed after accepting the changes and opening this dialog again.</source> - <translation type="obsolete">Reinicia el camà a la carpeta de mà quines virtuals al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir aquest dià leg, s'hi mostrarà aquest camÃ.</translation> + <translation type="obsolete">Reinicia el camà a la carpeta de mà quines virtuals al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir aquest dià leg, s'hi mostrarà aquest camÃ.</translation> </message> <message> <source>Resets the VDI folder path to the default value. The actual default path will be displayed after accepting the changes and opening this dialog again.</source> - <translation type="obsolete">Reinicia el camà a la carpeta de fitxers VDI al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir aquest dià leg, s'hi mostrarà aquest camÃ.</translation> + <translation type="obsolete">Reinicia el camà a la carpeta de fitxers VDI al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir aquest dià leg, s'hi mostrarà aquest camÃ.</translation> </message> <message> <source>Displays the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines.</source> - <translation type="obsolete">Mostra la ruta cap a la carpeta de mà quines virtuals predeterminada. S'usa aquesta carpeta, si no se n'especifica explÃcitament una altra, quan es crea una mà quina virtual.</translation> + <translation type="obsolete">Mostra la ruta cap a la carpeta de mà quines virtuals predeterminada. S'usa aquesta carpeta, si no se n'especifica explÃcitament una altra, quan es crea una mà quina virtual.</translation> </message> <message> <source>Opens a dialog to select the default VDI folder.</source> @@ -8518,35 +8517,35 @@ a l'idioma predeterminat del sistema.</qt> </message> <message> <source>When checked, the keyboard is automatically captured every time the VM window is activated. When the keyboard is captured, all keystrokes (including system ones like Alt-Tab) are directed to the VM.</source> - <translation type="obsolete">Si activeu aquesta casella, el teclat serà automà ticament capturat cada vegada que s'active la finestra de la mà quina virtual. Quan el teclat és capturat, totes les pulsacions de tecles (incloses les de sistema, com ara Alt+Tab) es redireccionaran cap a la mà quina virtual.</translation> + <translation type="obsolete">Si activeu aquesta casella, el teclat serà automà ticament capturat cada vegada que s'active la finestra de la mà quina virtual. Quan el teclat és capturat, totes les pulsacions de tecles (incloses les de sistema, com ara Alt+Tab) es redireccionaran cap a la mà quina virtual.</translation> </message> <message> <source>Lists all global USB filters. The checkbox to the left defines whether the particular filter is enabled or not.</source> - <translation type="obsolete">Relaciona tots els filtres d'USB globals. La casella de selecció de l'esquerra defineix si s'activa o no el filtre corresponent.</translation> + <translation type="obsolete">Relaciona tots els filtres d'USB globals. La casella de selecció de l'esquerra defineix si s'activa o no el filtre corresponent.</translation> </message> <message> <source>Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source> - <translation type="obsolete">Afegeix un filtre d'USB nou amb tots els camps definits inicialment com a cadenes buides. Tingueu en compte que un filtre com aquest concordarà amb qualsevol dispositiu USB connectat.</translation> + <translation type="obsolete">Afegeix un filtre d'USB nou amb tots els camps definits inicialment com a cadenes buides. Tingueu en compte que un filtre com aquest concordarà amb qualsevol dispositiu USB connectat.</translation> </message> <message> <source>Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source> - <translation type="obsolete">Afegeix un filtre d'USB nou amb tots els camps definits amb els valors del dispositiu USB seleccionat dels que estan connectats a l'ordinador amfitrió.</translation> + <translation type="obsolete">Afegeix un filtre d'USB nou amb tots els camps definits amb els valors del dispositiu USB seleccionat dels que estan connectats a l'ordinador amfitrió.</translation> </message> <message> <source>V&RDP Authentication Library</source> - <translation type="obsolete">Biblioteca d'autenticació V&RDP</translation> + <translation type="obsolete">Biblioteca d'autenticació V&RDP</translation> </message> <message> <source>Displays the path to the library that provides authentication for Remote Display (VRDP) clients.</source> - <translation type="obsolete">Mostra la ruta cap a la biblioteca que proveeix l'autenticació per a clients de la pantalla remota (VRDP).</translation> + <translation type="obsolete">Mostra la ruta cap a la biblioteca que proveeix l'autenticació per a clients de la pantalla remota (VRDP).</translation> </message> <message> <source>Opens a dialog to select the VRDP authentication library file.</source> - <translation type="obsolete">Obre un dià leg per seleccionar el fitxer de la biblioteca d'autenticació VRDP .</translation> + <translation type="obsolete">Obre un dià leg per seleccionar el fitxer de la biblioteca d'autenticació VRDP .</translation> </message> <message> <source>Resets the authentication library file to the default value. The actual default library file will be displayed after accepting the changes and opening this dialog again.</source> - <translation type="obsolete">Reinicia el fitxer de la biblioteca d'autenticació al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir aquest dià leg, s'hi mostrarà aquest fitxer.</translation> + <translation type="obsolete">Reinicia el fitxer de la biblioteca d'autenticació al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir aquest dià leg, s'hi mostrarà aquest fitxer.</translation> </message> <message> <source>&Extended Features</source> @@ -8557,8 +8556,8 @@ a l'idioma predeterminat del sistema.</qt> <translation type="obsolete">Activa &VT-x/AMD-V</translation> </message> <message> - <source>Defines whether virtual machines should try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V by default or not.</source> - <translation type="obsolete">Defineix si, per defecte, les mà quines virtuals han de provar d'utilitzar les extensions de virtualització per maquinari de la CPU de l'ordinador amfitrió com ara Intel VT-x i AMD-V, o no.</translation> + <source>Defines whether virtual machines should try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V by default or not.</source> + <translation type="obsolete">Defineix si, per defecte, les mà quines virtuals han de provar d'utilitzar les extensions de virtualització per maquinari de la CPU de l'ordinador amfitrió com ara Intel VT-x i AMD-V, o no.</translation> </message> <message> <source> @@ -8599,11 +8598,11 @@ amb qualsevol dispositiu USB connectat.</qt></translation> </message> <message> <source>Add Filter From Device</source> - <translation type="obsolete">Afegeix un Filtre des d'un Dispositiu</translation> + <translation type="obsolete">Afegeix un Filtre des d'un Dispositiu</translation> </message> <message> <source>A&dd Filter From Device</source> - <translation type="obsolete">Afegeix un Filtre des d'un &Dispositiu</translation> + <translation type="obsolete">Afegeix un Filtre des d'un &Dispositiu</translation> </message> <message> <source><qt>Adds a new USB filter with all fields set to the @@ -8709,7 +8708,7 @@ SATA quan el controlador SATA no es troba actiu.</qt></translation> <translation type="obsolete"><qt>Mostra tots els discos durs connectats a aquesta mà quina. Feu doble clic amb el ratolà o premeu el botó -<tt>F2</tt>/<tt>Espai</tt> a l'element +<tt>F2</tt>/<tt>Espai</tt> a l'element remarcat per activar la llista desplegable i triar el valor que desitgeu. Feu servir el menú de context o els botons de la dreta @@ -8736,11 +8735,11 @@ durs.</qt></translation> </message> <message> <source>Remove Attachment</source> - <translation type="obsolete">Elimina l'adjunció</translation> + <translation type="obsolete">Elimina l'adjunció</translation> </message> <message> <source>&Remove Attachment</source> - <translation type="obsolete">&Elimina l'adjunció</translation> + <translation type="obsolete">&Elimina l'adjunció</translation> </message> <message> <source>Delete</source> @@ -8750,7 +8749,7 @@ durs.</qt></translation> <source> <qt>Removes the highlighted hard disk attachment.</qt> </source> - <translation type="obsolete"><qt>Elimina l'adjunció al disc dur remarcada.</qt></translation> + <translation type="obsolete"><qt>Elimina l'adjunció al disc dur remarcada.</qt></translation> </message> <message> <source>Select Hard Disk</source> @@ -8782,7 +8781,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>No hard disk is selected for <i>%1</i></source> - <translation type="obsolete">No s'ha seleccionat cap disc dur per <i>%1</i></translation> + <translation type="obsolete">No s'ha seleccionat cap disc dur per <i>%1</i></translation> </message> </context> <context> @@ -8796,22 +8795,22 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati <name>VBoxImportApplianceWgt</name> <message> <source>Importing Appliance ...</source> - <translation>S'està important l'aplicació virtual...</translation> + <translation>S'està important l'aplicació virtual...</translation> </message> <message> <source>Reading Appliance ...</source> - <translation>S'està llegint l'aplicació virtual...</translation> + <translation>S'està llegint l'aplicació virtual...</translation> </message> </context> <context> <name>VBoxLicenseViewer</name> <message> <source>I &Agree</source> - <translation>Hi estic d'&acord</translation> + <translation>Hi estic d'&acord</translation> </message> <message> <source>I &Disagree</source> - <translation>&No hi estic d'acord</translation> + <translation>&No hi estic d'acord</translation> </message> <message> <source>VirtualBox License</source> @@ -8865,7 +8864,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>String not found</source> - <translation>No s'ha trobat la cadena</translation> + <translation>No s'ha trobat la cadena</translation> </message> </context> <context> @@ -8947,7 +8946,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Checking accessibility</source> - <translation>S'està comprovant l'accessibilitat</translation> + <translation>S'està comprovant l'accessibilitat</translation> </message> <message> <source>&Select</source> @@ -8963,7 +8962,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Select a hard disk image file</source> - <translation>Seleccioneu un fitxer d'imatge de disc dur</translation> + <translation>Seleccioneu un fitxer d'imatge de disc dur</translation> </message> <message> <source>CD/DVD-ROM images (*.iso);;All files (*)</source> @@ -8971,7 +8970,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Select a CD/DVD-ROM disk image file</source> - <translation>Seleccioneu un fitxer d'imatge de disc CD/DVD</translation> + <translation>Seleccioneu un fitxer d'imatge de disc CD/DVD</translation> </message> <message> <source>Floppy images (*.img);;All files (*)</source> @@ -8979,7 +8978,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Select a floppy disk image file</source> - <translation>Seleccioneu un fitxer d'imatge de disquet</translation> + <translation>Seleccioneu un fitxer d'imatge de disquet</translation> </message> <message> <source><i>Not&nbsp;Attached</i></source> @@ -9058,7 +9057,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati <name>VBoxMiniToolBar</name> <message> <source>Always show the toolbar</source> - <translation>Mostra sempre la barra d'eines</translation> + <translation>Mostra sempre la barra d'eines</translation> </message> <message> <source>Exit Full Screen or Seamless Mode</source> @@ -9081,27 +9080,27 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Do you want to remove the selected host network interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> This interface may be in use by one or more network adapters of this or another VM. After it is removed, these adapters will no longer work until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation type="obsolete"><p>Voleu suprimir la interfÃcie de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Aquesta interfÃcie potser s'estigui fent servir per un o més adaptadors de xarxa d'aquesta o altra mà quina virtual. Després de suprimir-los, aquests adaptadors no podran treballar fins que corregiu els parà metres triant un nom d'interfÃcie diferent o un tipus diferent d'adaptador.</p></translation> + <translation type="obsolete"><p>Voleu suprimir la interfÃcie de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Aquesta interfÃcie potser s'estigui fent servir per un o més adaptadors de xarxa d'aquesta o altra mà quina virtual. Després de suprimir-los, aquests adaptadors no podran treballar fins que corregiu els parà metres triant un nom d'interfÃcie diferent o un tipus diferent d'adaptador.</p></translation> </message> <message> <source>Host &Interfaces</source> - <translation type="obsolete">&InterfÃcies de l'amfitrió</translation> + <translation type="obsolete">&InterfÃcies de l'amfitrió</translation> </message> <message> <source>Lists all available host interfaces.</source> - <translation type="obsolete">Mostra totes les interfÃcies de l'amfitrió disponibles.</translation> + <translation type="obsolete">Mostra totes les interfÃcies de l'amfitrió disponibles.</translation> </message> <message> <source>A&dd New Host Interface</source> - <translation type="obsolete">A&fegeix una Nova InterfÃcie d'Amfitrió</translation> + <translation type="obsolete">A&fegeix una Nova InterfÃcie d'Amfitrió</translation> </message> <message> <source>&Remove Selected Host Interface</source> - <translation type="obsolete">&Suprimeix la InterfÃcie Seleccionada d'Amfitrió</translation> + <translation type="obsolete">&Suprimeix la InterfÃcie Seleccionada d'Amfitrió</translation> </message> <message> <source>Adds a new host interface.</source> - <translation type="obsolete">Afegeix una nova interfÃcie d'amfitrió.</translation> + <translation type="obsolete">Afegeix una nova interfÃcie d'amfitrió.</translation> </message> <message> <source>Removes the selected host interface.</source> @@ -9123,7 +9122,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Displays the operating system family that you plan to install into this virtual machine.</source> - <translation>Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'aquesta mà quina virtual.</translation> + <translation>Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'aquesta mà quina virtual.</translation> </message> <message> <source>V&ersion:</source> @@ -9131,7 +9130,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Displays the operating system type that you plan to install into this virtual machine (called a guest operating system).</source> - <translation>Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'aquesta mà quina virtual (anomenat sistema operatiu client).</translation> + <translation>Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'aquesta mà quina virtual (anomenat sistema operatiu client).</translation> </message> <message> <source>&Version:</source> @@ -9166,155 +9165,155 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to access the USB subsystem.</source> - <translation>No s'ha pogut accedir al subsistema USB.</translation> + <translation>No s'ha pogut accedir al subsistema USB.</translation> </message> <message> <source>Failed to apply the settings to the virtual machine <b>%1</b>.</source> - <translation>No s'han pogut aplicar els parà metres de configuració a la mà quina virtual <b>%1</b>.</translation> + <translation>No s'han pogut aplicar els parà metres de configuració a la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to attach a hard disk image with UUID %1 to the device slot %2 of the controller %3 of the machine <b>%4</b>.</source> - <translation type="obsolete">No s'ha pogut connectar la imatge de disc dur amb UUID %1 al dispositiu %2 del controlador %3 de la mà quina <b>%4</b>.</translation> + <translation type="obsolete">No s'ha pogut connectar la imatge de disc dur amb UUID %1 al dispositiu %2 del controlador %3 de la mà quina <b>%4</b>.</translation> </message> <message> <source>Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.</source> - <translation>No s'ha pogut afegir el dispositiu USB <b>%1</b> a la mà quina virtual <b>%2</b>.</translation> + <translation>No s'ha pogut afegir el dispositiu USB <b>%1</b> a la mà quina virtual <b>%2</b>.</translation> </message> <message> <source>Failed to change the snapshot folder path of the virtual machine <b>%1<b> to <nobr><b>%2</b></nobr>.</source> - <translation type="obsolete">No s'ha pogut canviar el camà de la carpeta de captures de la mà quina virtual <b>%1<b> a <nobr><b>%2</b></nobr>.</translation> + <translation type="obsolete">No s'ha pogut canviar el camà de la carpeta de captures de la mà quina virtual <b>%1<b> a <nobr><b>%2</b></nobr>.</translation> </message> <message> <source>Failed to create a new session.</source> - <translation>No s'ha pogut crear una nova sessió.</translation> + <translation>No s'ha pogut crear una nova sessió.</translation> </message> <message> <source>Failed to create a new virtual machine.</source> - <translation>No s'ha pogut crear una nova mà quina virtual.</translation> + <translation>No s'ha pogut crear una nova mà quina virtual.</translation> </message> <message> <source>Failed to create a new virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut crear una nova mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut crear una nova mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to create the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>.</source> - <translation>No s'ha pogut crear una carpeta compartida <b>%1</b> (senyalant a <nobr><b>%2</b></nobr>) a la mà quina virtual <b>%3</b>.</translation> + <translation>No s'ha pogut crear una carpeta compartida <b>%1</b> (senyalant a <nobr><b>%2</b></nobr>) a la mà quina virtual <b>%3</b>.</translation> </message> <message> <source>Failed to create a snapshot of the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut desar una captura de pantalla de la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut desar una captura de pantalla de la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to create the host network interface <b>%1</b>.</source> - <translation type="obsolete">No s'ha pogut crear la interfÃcie de xarxa <b>%1</b> de l'amfitrió.</translation> + <translation type="obsolete">No s'ha pogut crear la interfÃcie de xarxa <b>%1</b> de l'amfitrió.</translation> </message> <message> <source>Failed to create the virtual hard disk image <nobr><b>%1</b>.</nobr></source> - <translation type="obsolete">No s'ha pogut crear la imatge de disc dur virtual <nobr><b>%1</b>.</nobr></translation> + <translation type="obsolete">No s'ha pogut crear la imatge de disc dur virtual <nobr><b>%1</b>.</nobr></translation> </message> <message> <source>Failed to delete the virtual hard disk image <b>%1</b>.</source> - <translation type="obsolete">No s'ha pogut eliminar la imatge de disc dur <b>%1</b>.</translation> + <translation type="obsolete">No s'ha pogut eliminar la imatge de disc dur <b>%1</b>.</translation> </message> <message> <source>Failed to detach a hard disk image from the device slot %1 of the controller %2 of the machine <b>%3</b>.</source> - <translation type="obsolete">No s'ha pogut treure la imatge de disc dur del despositiu %1 del controlador %2 de la mà quina <b>%3</b>.</translation> + <translation type="obsolete">No s'ha pogut treure la imatge de disc dur del despositiu %1 del controlador %2 de la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.</source> - <translation>No s'ha pogut treure dispositiu USB <b>%1</b> de la mà quina virtual <b>%2</b>.</translation> + <translation>No s'ha pogut treure dispositiu USB <b>%1</b> de la mà quina virtual <b>%2</b>.</translation> </message> <message> <source>Failed to discard the current snapshot and the current state of the virtual machine <b>%1</b>.</source> - <translation type="obsolete">No s'ha pogut descartar l'actual captura ni l'estat actual de la mà quina virtual<b>%1</b>.</translation> + <translation type="obsolete">No s'ha pogut descartar l'actual captura ni l'estat actual de la mà quina virtual<b>%1</b>.</translation> </message> <message> <source>Failed to discard the current state of the virtual machine <b>%1</b>.</source> - <translation type="obsolete">No s'ha pogut descartar l'estat actual de la mà quina virtual <b>%1</b>.</translation> + <translation type="obsolete">No s'ha pogut descartar l'estat actual de la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to discard the saved state of the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut descartar l'estat desat de la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut descartar l'estat desat de la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to discard the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source> - <translation type="obsolete">No s'ha pogut descartar la captura de pantalla <b>%1</b> de la mà quina virtual <b>%2</b>.</translation> + <translation type="obsolete">No s'ha pogut descartar la captura de pantalla <b>%1</b> de la mà quina virtual <b>%2</b>.</translation> </message> <message> <source>Failed to find license files in <nobr><b>%1</b></nobr>.</source> - <translation>No s'ha pogut trobar cap fitxer de llicència a <nobr><b>%1</b></nobr>.</translation> + <translation>No s'ha pogut trobar cap fitxer de llicència a <nobr><b>%1</b></nobr>.</translation> </message> <message> <source>Failed to determine the accessibility state of the media <nobr><b>%1</b></nobr>. Some of the registered media may become inaccessible.</source> - <translation type="obsolete">No s'ha pogut accedir a l'estat del suport <nobr><b>%1</b></nobr>. No es podrà accedir a alguns dels dispositius.</translation> + <translation type="obsolete">No s'ha pogut accedir a l'estat del suport <nobr><b>%1</b></nobr>. No es podrà accedir a alguns dels dispositius.</translation> </message> <message> <source>Failed to load the settings of the virtual machine <b>%1</b>.</source> - <translation type="obsolete">No s'ha pogut carregar els parà metres de la mà quina virtual <b>%1</b>.</translation> + <translation type="obsolete">No s'ha pogut carregar els parà metres de la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to open a session for the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut obrir una sessió per a la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut obrir una sessió per a la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.</source> - <translation>No s'ha pogut obrir el fitxer de llicència <nobr><b>%1</b></nobr>. Comproveu els permisos del fitxer.</translation> + <translation>No s'ha pogut obrir el fitxer de llicència <nobr><b>%1</b></nobr>. Comproveu els permisos del fitxer.</translation> </message> <message> <source>Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type.</source> - <translation>No s'ha pogut obrir <tt>%1</tt>. Assegureu-vos que el vostre entorn d'escriptori pot gestionar aquest tipus d'URL.</translation> + <translation>No s'ha pogut obrir <tt>%1</tt>. Assegureu-vos que el vostre entorn d'escriptori pot gestionar aquest tipus d'URL.</translation> </message> <message> <source>Failed to pause the execution of the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut pausar l'execució de la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut pausar l'execució de la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to register the %1 <nobr><b>%2</b></nobr>.</source> - <translation type="obsolete">No s'ha pogut registrar %1 <nobr><b>%2</b></nobr>.</translation> + <translation type="obsolete">No s'ha pogut registrar %1 <nobr><b>%2</b></nobr>.</translation> </message> <message> <source>Failed to remove the host network interface <b>%1</b>.</source> - <translation>No s'ha pogut suprimir la interfÃcie de xarxa <b>%1</b> de l'amfitrió.</translation> + <translation>No s'ha pogut suprimir la interfÃcie de xarxa <b>%1</b> de l'amfitrió.</translation> </message> <message> <source>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</source> - <translation>No s'ha pogut eliminar la carpeta compartida <b>%1</b> (senyalant a <nobr><b>%2</b></nobr>) a la mà quina virtual <b>%3</b>.</translation> + <translation>No s'ha pogut eliminar la carpeta compartida <b>%1</b> (senyalant a <nobr><b>%2</b></nobr>) a la mà quina virtual <b>%3</b>.</translation> </message> <message> <source>Failed to remove the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut eliminar la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut eliminar la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to resume the execution of the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut reprendre l'execució de la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut reprendre l'execució de la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to save the settings of the virtual machine <b>%1</b>.</source> - <translation type="obsolete">No s'ha pogut desar els canvis de la mà quina virtual <b>%1</b>.</translation> + <translation type="obsolete">No s'ha pogut desar els canvis de la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to save the state of the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut desar l'estat de la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut desar l'estat de la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to send the ACPI Power Button press event to the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut enviar l'esdeveniment de prémer el botó d'iniciar/aturar a la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut enviar l'esdeveniment de prémer el botó d'iniciar/aturar a la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to set global VirtualBox properties.</source> - <translation>No s'han pogut establir les propietats globals del VirtualBox.</translation> + <translation>No s'han pogut establir les propietats globals del VirtualBox.</translation> </message> <message> <source>Failed to start the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut iniciar la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut iniciar la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to stop the virtual machine <b>%1</b>.</source> - <translation>No s'ha pogut aturar la mà quina virtual <b>%1</b>.</translation> + <translation>No s'ha pogut aturar la mà quina virtual <b>%1</b>.</translation> </message> <message> <source>Failed to unregister the %1 <nobr><b>%2</b></nobr>.</source> - <translation type="obsolete">No s'ha pogut elimianar del registre %1 <nobr><b>%2</b></nobr>.</translation> + <translation type="obsolete">No s'ha pogut elimianar del registre %1 <nobr><b>%2</b></nobr>.</translation> </message> <message> <source>floppy image</source> @@ -9332,7 +9331,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati <message> <source><nobr>Error ID: </nobr></source> <comment>runtime error info</comment> - <translation><nobr>ID de l'error:</nobr></translation> + <translation><nobr>ID de l'error:</nobr></translation> </message> <message> <source><nobr>Fatal Error</nobr></source> @@ -9351,23 +9350,23 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nobr> directory, as well as a description of what you were doing when this error happened. Note that you can also access the above files by selecting <b>Show Log</b> from the <b>Machine</b> menu of the main VirualBox window.</p><p>Press <b>OK</b> if you want to power off the machine or press <b>Ignore</b> if you want to leave it as is for debugging. Please note that debugging requires special knowledge and tools, so it is recommended to press <b>OK</b> now.</p></source> - <translation type="obsolete"><p>S'ha produït un error crÃtic mentre s'executava la mà quina virtual, que s'ha aturat.</p><p>Per obtenir ajuda, visiteu la secció Community a <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> o al vostre contracte de suport. Afegiu el contingut del fitxer de registre <tt>VBox.log</tt> i el fitxer d'imatge <tt>VBox.png</tt>,que podreu trobar al directori <nobr><b>%1</b></nobr>, i una descripció sobre allò que està veu fent al moment al qual es va produir l'error. Podeu accedir als fitxers especificats mitjançant <b>Mostra registre</b> des del menú de la <b>Mà quina</b> a la finestra principal del VirtualBox.</p>Premeu <b>D'acord</b> si voleu aturar la mà quina o <b>Ignora</b> si voleu deixar-la en procés de depuració. Tingueu en compte que el procés de depuració requereix coneixements avançats i eines especials, per tant és recomanabla prémer <b>D'acord</b>.</p></translation> + <translation type="obsolete"><p>S'ha produït un error crÃtic mentre s'executava la mà quina virtual, que s'ha aturat.</p><p>Per obtenir ajuda, visiteu la secció Community a <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> o al vostre contracte de suport. Afegiu el contingut del fitxer de registre <tt>VBox.log</tt> i el fitxer d'imatge <tt>VBox.png</tt>,que podreu trobar al directori <nobr><b>%1</b></nobr>, i una descripció sobre allò que està veu fent al moment al qual es va produir l'error. Podeu accedir als fitxers especificats mitjançant <b>Mostra registre</b> des del menú de la <b>Mà quina</b> a la finestra principal del VirtualBox.</p>Premeu <b>D'acord</b> si voleu aturar la mà quina o <b>Ignora</b> si voleu deixar-la en procés de depuració. Tingueu en compte que el procés de depuració requereix coneixements avançats i eines especials, per tant és recomanabla prémer <b>D'acord</b>.</p></translation> </message> <message> <source><p>A fatal error has occurred during virtual machine execution! The virtual machine will be powered off. Please copy the following error message using the clipboard to help diagnose the problem:</p></source> - <translation><p>S'ha produït un error mentre la mà quina virtual s'executava i es tancarà . És recomanable copiar el missatge d'error següent per a una anà lisi posterior:</p></translation> + <translation><p>S'ha produït un error mentre la mà quina virtual s'executava i es tancarà . És recomanable copiar el missatge d'error següent per a una anà lisi posterior:</p></translation> </message> <message> <source><p>An error has occurred during virtual machine execution! The error details are shown below. You may try to correct the error and resume the virtual machine execution.</p></source> - <translation><p>S'ha produït un error mentre la mà quina virtual s'executava. Els detalls de l'error es mostren a continuació. Podeu provar a resoldre l'error i tornar a executar la mà quina virtual.</p></translation> + <translation><p>S'ha produït un error mentre la mà quina virtual s'executava. Els detalls de l'error es mostren a continuació. Podeu provar a resoldre l'error i tornar a executar la mà quina virtual.</p></translation> </message> <message> <source><p>Are you sure you want to discard the saved state of the virtual machine <b>%1</b>?</p><p>This operation is equivalent to resetting or powering off the machine without doing a proper shutdown of the guest OS.</p></source> - <translation><p>Segur que voleu descartar l'estat desat de la mà quina virtual<b>%1</b>?</p><p>Aquesta operació és equivalent a reiniciar o tancar la mà quina virtual de forma no adequada.</p> </translation> + <translation><p>Segur que voleu descartar l'estat desat de la mà quina virtual<b>%1</b>?</p><p>Aquesta operació és equivalent a reiniciar o tancar la mà quina virtual de forma no adequada.</p> </translation> </message> <message> - <source><p>Are you sure you want to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source> - <translation><p>Segur que voleu baixar la imatge del VirtualBox Guest Additions des de <nobr><a href="%1">%2</a></nobr> (mida %3 bytes)?</p></translation> + <source><p>Are you sure you want to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source> + <translation><p>Segur que voleu baixar la imatge del VirtualBox Guest Additions des de <nobr><a href="%1">%2</a></nobr> (mida %3 bytes)?</p></translation> </message> <message> <source><p>Are you sure you want to permanently delete the virtual machine <b>%1</b>?</p><p>This operation cannot be undone.</p></source> @@ -9379,7 +9378,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Cannot run VirtualBox in <i>VM Selector</i> mode due to local restrictions.</p><p>The application will now terminate.</p></source> - <translation><p>No es pot executar VirtualBox en el mode <i>VM Selector</i> degut a restriccions locals.</p><p>L'aplicació es tancarà .</p></translation> + <translation><p>No es pot executar VirtualBox en el mode <i>VM Selector</i> degut a restriccions locals.</p><p>L'aplicació es tancarà .</p></translation> </message> <message> <source><p>Congratulations! You have been successfully registered as a user of VirtualBox.</p><p>Thank you for finding time to fill out the registration form!</p></source> @@ -9391,19 +9390,19 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Could not find a language file for the language <b>%1</b> in the directory <b><nobr>%2</nobr></b>.</p><p>The language will be temporarily reset to the system default language. Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source> - <translation><p>No es pot trobar el fitxer de llengua per a l'idioma <b>%1</b> al directori <b><nobr>%2</nobr></b>.</p><p>Es farà servir l'anglès (llengua per defecte). Aneu al dià leg de <b>Preferències</b> que podeu obrir des del menú <b>Fitxer</b> de la finestra principal del VirtualBox. Allà podreu triar entre les diferents llengües a la secció d'<b>Idioma</b>.</p> </translation> + <translation><p>No es pot trobar el fitxer de llengua per a l'idioma <b>%1</b> al directori <b><nobr>%2</nobr></b>.</p><p>Es farà servir l'anglès (llengua per defecte). Aneu al dià leg de <b>Preferències</b> que podeu obrir des del menú <b>Fitxer</b> de la finestra principal del VirtualBox. Allà podreu triar entre les diferents llengües a la secció d'<b>Idioma</b>.</p> </translation> </message> <message> <source><p>Could not find the VirtualBox Guest Additions CD image file <nobr><b>%1</b></nobr> or <nobr><b>%2</b>.</nobr></p><p>Do you wish to download this CD image from the Internet?</p></source> - <translation><p>No es pot trobar el fitxer d'imatge del VirtualBox Guest Additions <nobr><b>%1</b></nobr> o <nobr><b>%2</b>.</nobr></p><p>Voleu baixar-la des d'internet?</p></translation> + <translation><p>No es pot trobar el fitxer d'imatge del VirtualBox Guest Additions <nobr><b>%1</b></nobr> o <nobr><b>%2</b>.</nobr></p><p>Voleu baixar-la des d'internet?</p></translation> </message> <message> <source><p>Could not load the language file <b><nobr>%1</nobr></b>. <p>The language will be temporarily reset to English (built-in). Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source> - <translation><p>No es pot trobar el fitxer de llengua per a l'idioma<b><nobr>%1</nobr></b>.</p><p>Es farà servir l'anglès (llengua per defecte). Aneu al dià leg de <b>Preferències</b> que podeu obrir des del menú <b>Fitxer</b> de la finestra principal del VirtualBox. Allà podreu triar entre les diferents llengües a la pà gina de <b>Llengües</b>.</p></translation> + <translation><p>No es pot trobar el fitxer de llengua per a l'idioma<b><nobr>%1</nobr></b>.</p><p>Es farà servir l'anglès (llengua per defecte). Aneu al dià leg de <b>Preferències</b> que podeu obrir des del menú <b>Fitxer</b> de la finestra principal del VirtualBox. Allà podreu triar entre les diferents llengües a la pà gina de <b>Llengües</b>.</p></translation> </message> <message> - <source><p>Do you want to delete this hard disk's image file <nobr><b>%1</b>?</nobr></p><p>If you select <b>No</b> then the virtual hard disk will be unregistered and removed from the collection, but the image file will be left on your physical disk.</p><p>If you select <b>Yes</b> then the image file will be permanently deleted after unregistering the hard disk. This operation cannot be undone.</p></source> - <translation type="obsolete"><p>Voleu esborrar aquest fitxer d'imatge de disc dur<nobr><b>%1</b>?</nobr></p><p>Si seleccioneu <b>No</b>, el disc dur virtual se suprimirà del registre, però la imatge es quedarà al disc dur fÃsic.</p><p>Si seleccioneu <b>SÃ</b>, la imatge s'eliminarà completament del registre i del disc dur fÃsic. Aquesta operació no es podrà desfer.</p></translation> + <source><p>Do you want to delete this hard disk's image file <nobr><b>%1</b>?</nobr></p><p>If you select <b>No</b> then the virtual hard disk will be unregistered and removed from the collection, but the image file will be left on your physical disk.</p><p>If you select <b>Yes</b> then the image file will be permanently deleted after unregistering the hard disk. This operation cannot be undone.</p></source> + <translation type="obsolete"><p>Voleu esborrar aquest fitxer d'imatge de disc dur<nobr><b>%1</b>?</nobr></p><p>Si seleccioneu <b>No</b>, el disc dur virtual se suprimirà del registre, però la imatge es quedarà al disc dur fÃsic.</p><p>Si seleccioneu <b>SÃ</b>, la imatge s'eliminarà completament del registre i del disc dur fÃsic. Aquesta operació no es podrà desfer.</p></translation> </message> <message> <source><p>Do you want to remove (unregister) the virtual hard disk <nobr><b>%1</b>?</nobr></p></source> @@ -9411,39 +9410,39 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Failed to connect to the VirtualBox online registration service.</p><p>%1</p></source> - <translation type="obsolete"><p>No s'ha pogut connectar al servei de registre en lÃnia de VirtualBox.</p><p>%1</p></translation> + <translation type="obsolete"><p>No s'ha pogut connectar al servei de registre en lÃnia de VirtualBox.</p><p>%1</p></translation> </message> <message> <source><p>Failed to create the VirtualBox COM object.</p><p>The application will now terminate.</p></source> - <translation><p>No s'ha pogut crear l'objecte VirtualBox COM.</p><p>Ara es tancarà l'aplicació.</p></translation> + <translation><p>No s'ha pogut crear l'objecte VirtualBox COM.</p><p>Ara es tancarà l'aplicació.</p></translation> </message> <message> - <source><p>Failed to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></source> - <translation><p>No s'ha pogut baixar la imatge de les VirtualBox Guest Additions des de <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></translation> + <source><p>Failed to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></source> + <translation><p>No s'ha pogut baixar la imatge de les VirtualBox Guest Additions des de <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></translation> </message> <message> <source><p>Failed to initialize COM or to find the VirtualBox COM server. Most likely, the VirtualBox server is not running or failed to start.</p><p>The application will now terminate.</p></source> - <translation><p>No s'ha pogut inicialitzar COM o no s'ha pogut trobar el servidor VirtualBox COM. Probablement el servidor VirtualBox no s'està executant o no s'ha iniciat.</p><p>Ara es tancarà l'aplicació.</p></translation> + <translation><p>No s'ha pogut inicialitzar COM o no s'ha pogut trobar el servidor VirtualBox COM. Probablement el servidor VirtualBox no s'està executant o no s'ha iniciat.</p><p>Ara es tancarà l'aplicació.</p></translation> </message> <message> <source><p>Failed to load the global GUI configuration.</p><p>The application will now terminate.</p></source> - <translation type="obsolete"><p>No s'ha pogut carregar la configuració global de la interfÃcie.</p><p>Ara es tancarà l'aplicació.</p></translation> + <translation type="obsolete"><p>No s'ha pogut carregar la configuració global de la interfÃcie.</p><p>Ara es tancarà l'aplicació.</p></translation> </message> <message> <source><p>Failed to register the VirtualBox product</p><p>%1</p></source> - <translation type="obsolete"><p>No s'ha pogut registrar el producte VirtualBox</p><p>%1</p></translation> + <translation type="obsolete"><p>No s'ha pogut registrar el producte VirtualBox</p><p>%1</p></translation> </message> <message> <source><p>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p><p>Please close all programs in the guest OS that may be using this shared folder and try again.</p></source> - <translation><p>No s'ha pogut eliminar la carpeta compartida <b>%1</b> (que apunta cap a <nobr><b>%2</b></nobr>) de la mà quina virtual <b>%3</b>.</p><p>Tanqueu tots els programes al sistema client que fan servir la carpeta i proveu novament.</p></translation> + <translation><p>No s'ha pogut eliminar la carpeta compartida <b>%1</b> (que apunta cap a <nobr><b>%2</b></nobr>) de la mà quina virtual <b>%3</b>.</p><p>Tanqueu tots els programes al sistema client que fan servir la carpeta i proveu novament.</p></translation> </message> <message> <source><p>Failed to save the global GUI configuration.<p></source> - <translation type="obsolete"><p>No s'ha pogut desar la configuració global de la interfÃcie.</p></translation> + <translation type="obsolete"><p>No s'ha pogut desar la configuració global de la interfÃcie.</p></translation> </message> <message> <source><p>One or more of the registered virtual hard disks, CD/DVD or floppy media are not currently accessible. As a result, you will not be able to operate virtual machines that use these media until they become accessible later.</p><p>Press <b>OK</b> to open the Virtual Disk Manager window and see what media are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source> - <translation type="obsolete"><p>No es pot accedir a un o més dels discos, CD/DVD o disquet virtuals. Com a resultat, no podreu operar amb les mà quines virtuals que els facin servir fins que estiguin accessibles.</p><p>Premeu <b>D'acord</b> per obrir el gestor de discos virtuals i veure a quins suports no s'hi pot accedir, o premeu <b>ignora</b> per ignorar aquest missatge.</p></translation> + <translation type="obsolete"><p>No es pot accedir a un o més dels discos, CD/DVD o disquet virtuals. Com a resultat, no podreu operar amb les mà quines virtuals que els facin servir fins que estiguin accessibles.</p><p>Premeu <b>D'acord</b> per obrir el gestor de discos virtuals i veure a quins suports no s'hi pot accedir, o premeu <b>ignora</b> per ignorar aquest missatge.</p></translation> </message> <message> <source><p>Releasing this media image will detach it from the following virtual machine(s): <b>%1</b>.</p><p>Continue?</p></source> @@ -9451,27 +9450,27 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>The image file <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this file, because it can be already used by another virtual hard disk.</p><p>Please specify a different image file name.</p></source> - <translation type="obsolete"><p>El fitxer d'imatge <b>%1</b> ja existeix. No podeu crear un nou disc dur virtual que faça servir aquest fitxer ja que pot ser utilitzat per un altre disc dur virtual.</p><p>Especifiqueu un nom diferent per a la imatge.</p></translation> + <translation type="obsolete"><p>El fitxer d'imatge <b>%1</b> ja existeix. No podeu crear un nou disc dur virtual que faça servir aquest fitxer ja que pot ser utilitzat per un altre disc dur virtual.</p><p>Especifiqueu un nom diferent per a la imatge.</p></translation> </message> <message> - <source><p>The VirtualBox Guest Additions CD image has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p><p>Do you wish to register this CD image and mount it on the virtual CD/DVD drive?</p></source> - <translation><p>S'ha baixat la imatge del VirtualBox Guest Additions des de <nobr><a href="%1">%2</a></nobr> i s'ha desat localment com a <nobr><b>%3</b>.</nobr></p><p>Voleu registrar aquesta imatge de CD i montar-la a la unitat virtual de CD/DVD?</p></translation> + <source><p>The VirtualBox Guest Additions CD image has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p><p>Do you wish to register this CD image and mount it on the virtual CD/DVD drive?</p></source> + <translation><p>S'ha baixat la imatge del VirtualBox Guest Additions des de <nobr><a href="%1">%2</a></nobr> i s'ha desat localment com a <nobr><b>%3</b>.</nobr></p><p>Voleu registrar aquesta imatge de CD i montar-la a la unitat virtual de CD/DVD?</p></translation> </message> <message> <source><p>The virtual machine execution may run into an error condition as described below. We suggest that you take an appropriate action to avert the error.</p></source> - <translation><p>La mà quina virtual s'executarà , però amb l'error que es descriu a continuació. Podeu ignorar aquest missatge, però és recomanable solucionar l'error per tal que no es torni a produir.</p></translation> + <translation><p>La mà quina virtual s'executarà , però amb l'error que es descriu a continuació. Podeu ignorar aquest missatge, però és recomanable solucionar l'error per tal que no es torni a produir.</p></translation> </message> <message> <source><p>The Virtual Machine is currently in the <b>Paused</b> state and not able to see any keyboard or mouse input. If you want to continue to work inside the VM, you need to resume it by selecting the corresponding action from the menu bar.</p></source> - <translation><p>La mà quina virtual és actualment en <b>Pausa</b> i per tant no accepta cap acció provinent del teclat o del punter. Si voleu continuar treballant amb la mà quina virtual, haureu de reprendre el funcionament des de l'opció corresponent de la barra de menú.</p></translation> + <translation><p>La mà quina virtual és actualment en <b>Pausa</b> i per tant no accepta cap acció provinent del teclat o del punter. Si voleu continuar treballant amb la mà quina virtual, haureu de reprendre el funcionament des de l'opció corresponent de la barra de menú.</p></translation> </message> <message> <source><p>The Virtual Machine reports that the guest OS does not support <b>mouse pointer integration</b> in the current video mode. You need to capture the mouse (by clicking over the VM display or pressing the host key) in order to use the mouse inside the guest OS.</p></source> <translation><p>La mà quina virtual ha informat que el sistema client no suporta <b>integració del punter</b> al mode de vÃdeo actual. Heu de capturar el punter (clicant sobre la pantalla de la mà quina virtual o prement la tecla amfitrió) per tal de poder controlar el punter a dins del sistema client.</p></translation> </message> <message> - <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the status bar will look like&nbsp;<img src=mouse_seamless_16px.png/>&nbsp;to inform you that mouse pointer integration is supported by the guest OS and is currently turned on.</p><p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. You can always disable it for the current session (and enable it again) by selecting the corresponding action from the menu bar.</p></source> - <translation type="obsolete"><p>La Mà quina Virtual ha informat que el sistema client suporta <b>integració del punter del ratolÃ</b>. Això significa que no necessiteu <i>capturar</i> el punter del ratolà per poder fer-lo servir al sistema client -- totes les accions que executeu quan el punter del ratolà estigui a sobre de la Mà quina virtual s'enviaran directament al sistema client. Si es captura el ratolÃ, automà ticament es tornarà al mode normal.</p><p>La icona del ratolà a la barra d'estat es mostrarà com&nbsp;<img src=mouse_seamless_16px.png/>&nbsp;per informar-vos que la integració del punter està suportada pel sistema client que està actiu.</p><p><b>Nota</b>: Algunes aplicacions poden comportar-se incorrectament treballant en el mode d'integració del ratolÃ. Sempre podeu inhabilitar-ho a la sessió actual (o habilitar-ho) seleccionat l'opció corresponent a la barra de menú.</p></translation> + <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the status bar will look like&nbsp;<img src=mouse_seamless_16px.png/>&nbsp;to inform you that mouse pointer integration is supported by the guest OS and is currently turned on.</p><p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. You can always disable it for the current session (and enable it again) by selecting the corresponding action from the menu bar.</p></source> + <translation type="obsolete"><p>La Mà quina Virtual ha informat que el sistema client suporta <b>integració del punter del ratolÃ</b>. Això significa que no necessiteu <i>capturar</i> el punter del ratolà per poder fer-lo servir al sistema client -- totes les accions que executeu quan el punter del ratolà estigui a sobre de la Mà quina virtual s'enviaran directament al sistema client. Si es captura el ratolÃ, automà ticament es tornarà al mode normal.</p><p>La icona del ratolà a la barra d'estat es mostrarà com&nbsp;<img src=mouse_seamless_16px.png/>&nbsp;per informar-vos que la integració del punter està suportada pel sistema client que està actiu.</p><p><b>Nota</b>: Algunes aplicacions poden comportar-se incorrectament treballant en el mode d'integració del ratolÃ. Sempre podeu inhabilitar-ho a la sessió actual (o habilitar-ho) seleccionat l'opció corresponent a la barra de menú.</p></translation> </message> <message> <source><p>The virtual machine window is optimized to work in <b>%1&nbsp;bit</b> color mode but the virtual display is currently set to <b>%2&nbsp;bit</b>.</p><p>Please open the display properties dialog of the guest OS and select a <b>%3&nbsp;bit</b> color mode, if it is available, for best possible performance of the virtual video subsystem.</p><p><b>Note</b>. Some operating systems, like OS/2, may actually work in 32&nbsp;bit mode but report it as 24&nbsp;bit (16 million colors). You may try to select a different color mode to see if this message disappears or you can simply disable the message now if you are sure the required color mode (%4&nbsp;bit) is not available in the guest OS.</p></source> @@ -9479,35 +9478,35 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%1</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="obsolete"><p>La mà quina virtual passarà ara al mode de <b>pantalla completa</b>. Podeu tornar enrere prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode de pantalla completa. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> + <translation type="obsolete"><p>La mà quina virtual passarà ara al mode de <b>pantalla completa</b>. Podeu tornar enrere prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode de pantalla completa. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%1</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="obsolete"><p>La mà quina virtual passarà ara al mode <b>fluid</b>. Podeu tornar enrere al mode finestra prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode fluid. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> + <translation type="obsolete"><p>La mà quina virtual passarà ara al mode <b>fluid</b>. Podeu tornar enrere al mode finestra prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode fluid. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> </message> <message> <source><p>The VirtualBox Guest Additions installed in the Guest OS are outdated: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) may not work as expected.</p><p>It is recommended to update the Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> - <translation type="obsolete"><p>El programa VirtualBox Guest Additions instal·lat al sistema client no és a la darrera versió: la versió instal·lada és %1 i la més nova és la %2. Algunes caracterÃstiques que requereixen les Guest Additions (integració del punter, la funció de mida automà tica de l'escriptori) poden no treballar correctament.</p><p>Es recomana actualitzar la versió de Guest Additions a la versió actual triant <b>Instal·la les Guest Additions</b> des del menú <b>Dispositius</b>.</p></translation> + <translation type="obsolete"><p>El programa VirtualBox Guest Additions instal·lat al sistema client no és a la darrera versió: la versió instal·lada és %1 i la més nova és la %2. Algunes caracterÃstiques que requereixen les Guest Additions (integració del punter, la funció de mida automà tica de l'escriptori) poden no treballar correctament.</p><p>Es recomana actualitzar la versió de Guest Additions a la versió actual triant <b>Instal·la les Guest Additions</b> des del menú <b>Dispositius</b>.</p></translation> </message> <message> <source><p>The VirtualBox Guest Additions installed in the Guest OS are too old: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) will most likely stop working properly.</p><p>Please update the Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> - <translation type="obsolete"><p>El programa VirtualBox Guest Additions instal·lat al sistema client està antiquat: la versió instal·lada és %1 i la més nova és la %2. Algunes caracterÃstiques que requereixen les Guest Additions (integració del punter, la funció de mida automà tica de l'escriptori) poden no treballar correctament.</p><p>Es recomana actualitzar la versió de Guest Additions a la versió actual triant <b>Instal·la les Guest Additions</b> des del menú <b>Dispositius</b>.</p></translation> + <translation type="obsolete"><p>El programa VirtualBox Guest Additions instal·lat al sistema client està antiquat: la versió instal·lada és %1 i la més nova és la %2. Algunes caracterÃstiques que requereixen les Guest Additions (integració del punter, la funció de mida automà tica de l'escriptori) poden no treballar correctament.</p><p>Es recomana actualitzar la versió de Guest Additions a la versió actual triant <b>Instal·la les Guest Additions</b> des del menú <b>Dispositius</b>.</p></translation> </message> <message> <source><p>The VirtualBox Guest Additions installed in the Guest OS are too recent for this version of VirtualBox: the installed version is %1, the expected version is %2.</p><p>Using a newer version of Additions with an older version of VirtualBox is not supported. Please install the current version of the Guest Additions by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> <translation type="obsolete"><b>El programa VirtualBox Guest Additions instal·lat al sistema client és més recent que la versió suportada: la versió instal·lada és %1 i la més nova és la %2. No es pot fer servir una versió més nova de les Guest Additions amb una versió més antiga del VirtualBox.</p><p>Es recomana instal·lar la versió de Guest Additions a la versió actual triant <b>Instal·lar Guest Additions</b> des del menú <b>Dispositius</b>.</p></translation> </message> <message> - <source><p>You didn't attach a hard disk to the new virtual machine. The machine will not be able to boot unless you attach a hard disk with a guest operating system or some other bootable media to it later using the machine settings dialog or the First Run Wizard.</p><p>Do you wish to continue?</p></source> + <source><p>You didn't attach a hard disk to the new virtual machine. The machine will not be able to boot unless you attach a hard disk with a guest operating system or some other bootable media to it later using the machine settings dialog or the First Run Wizard.</p><p>Do you wish to continue?</p></source> <translation><p>No heu afegit cap disc dur a la nova mà quina virtual. La mà quina no podrà iniciar-se fins que no afegiu un disc dur amb un sistema operatiu client o qualsevol altre suport arrencable.</p><p>Voleu continuar?</p></translation> </message> <message> <source><p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer integration is not currently supported by the guest OS) and the keyboard, which will make them unavailable to other applications running on your host machine.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> - <translation type="obsolete"><p>Heu fet <b>clic amb el ratolÃ</b> a dins de la finestra de la Mà quina Virtual o heu premut la <b>tecla d'amfitrió</b>. Això fa que la Mà quina Virtual <b>capture</b> el punter del ratolà (només en cas que la integració del ratolà no estigui suportada pel sistema client) i el teclat, que ara no estaran disponibles per funcionar a la mà quina amfitriona.</p><p>Podeu prémer la <b>tecla d'amfitrió</b> en qualsevol moment per <b>tornar</b> el ratolà i el teclat al mode normal de funcionament. La tecla d'amfitrió assiganada actualment es mostra a la barra d'estat a la part inferior de la finestra, al costat de la icona &nbsp;<img src=hostkey_16px.png/>&nbsp;. Aquesta icona indica si el teclat i el ratolà estan en estat de captura o no.</p></translation> + <translation type="obsolete"><p>Heu fet <b>clic amb el ratolÃ</b> a dins de la finestra de la Mà quina Virtual o heu premut la <b>tecla d'amfitrió</b>. Això fa que la Mà quina Virtual <b>capture</b> el punter del ratolà (només en cas que la integració del ratolà no estigui suportada pel sistema client) i el teclat, que ara no estaran disponibles per funcionar a la mà quina amfitriona.</p><p>Podeu prémer la <b>tecla d'amfitrió</b> en qualsevol moment per <b>tornar</b> el ratolà i el teclat al mode normal de funcionament. La tecla d'amfitrió assiganada actualment es mostra a la barra d'estat a la part inferior de la finestra, al costat de la icona &nbsp;<img src=hostkey_16px.png/>&nbsp;. Aquesta icona indica si el teclat i el ratolà estan en estat de captura o no.</p></translation> </message> <message> <source><p>You have the <b>Auto capture keyboard</b> option turned on. This will cause the Virtual Machine to automatically <b>capture</b> the keyboard every time the VM window is activated and make it unavailable to other applications running on your host machine: when the keyboard is captured, all keystrokes (including system ones like Alt-Tab) will be directed to the VM.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> - <translation type="obsolete"><p>L'opció de <b>Captura automà tica del teclat</b> és activa. Això farà que la Mà quina Virtual <b>capture</b> el teclat sempre que la finestra de la mà quina virtual estigui activa i farà que el teclat no estigui disponible per a d'altres aplicacions que s'estiguin executant a l'ordinador amfitrió: quan el teclat està capturat, totes les tecles especials (incloent Alt-Tab) es readrecen a la mà quina virtual.</p><p>Podeu prémer la <b>tecla d'amfitrió</b> en qualsevol moment per <b>tornar</b> el ratolà i el teclat al mode normal de funcionament. La tecla d'amfitrió assiganada actualment es mostra a la barra d'estat a la part inferior de la finestra, al costat de la icona &nbsp;<img src=hostkey_16px.png/>&nbsp;. Aquesta icona indica si el teclat i el ratolà estan en estat de captura o no.</p></translation> + <translation type="obsolete"><p>L'opció de <b>Captura automà tica del teclat</b> és activa. Això farà que la Mà quina Virtual <b>capture</b> el teclat sempre que la finestra de la mà quina virtual estigui activa i farà que el teclat no estigui disponible per a d'altres aplicacions que s'estiguin executant a l'ordinador amfitrió: quan el teclat està capturat, totes les tecles especials (incloent Alt-Tab) es readrecen a la mà quina virtual.</p><p>Podeu prémer la <b>tecla d'amfitrió</b> en qualsevol moment per <b>tornar</b> el ratolà i el teclat al mode normal de funcionament. La tecla d'amfitrió assiganada actualment es mostra a la barra d'estat a la part inferior de la finestra, al costat de la icona &nbsp;<img src=hostkey_16px.png/>&nbsp;. Aquesta icona indica si el teclat i el ratolà estan en estat de captura o no.</p></translation> </message> <message> <source>Result&nbsp;Code: </source> @@ -9550,23 +9549,23 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Failed to save the global VirtualBox settings to <b><nobr>%1</nobr></b>.</p></source> - <translation type="obsolete"><p>No s'han pogut desar els parà metres globals del VirtualBox a <b><nobr>%1</nobr></b>.</p></translation> + <translation type="obsolete"><p>No s'han pogut desar els parà metres globals del VirtualBox a <b><nobr>%1</nobr></b>.</p></translation> </message> <message> <source><p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source> - <translation><p>No s'ha pogut carregar la configuració global de la interfÃcie des de <b><nobr>%1</nobr></b>.</p><p>L'aplicació es tancarà .</p></translation> + <translation><p>No s'ha pogut carregar la configuració global de la interfÃcie des de <b><nobr>%1</nobr></b>.</p><p>L'aplicació es tancarà .</p></translation> </message> <message> <source><p>Failed to save the global GUI configuration to <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source> - <translation><p>No s'ha pogut desar la configuració global de la interfÃcie a <b><nobr>%1</nobr></b>.</p><p>L'aplicació es tancarà .</p></translation> + <translation><p>No s'ha pogut desar la configuració global de la interfÃcie a <b><nobr>%1</nobr></b>.</p><p>L'aplicació es tancarà .</p></translation> </message> <message> <source>Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>.</source> - <translation>No s'han pogut desar els parà metres de la mà quina virtual <b>%1</b> a <b><nobr>%2</nobr></b>.</translation> + <translation>No s'han pogut desar els parà metres de la mà quina virtual <b>%1</b> a <b><nobr>%2</nobr></b>.</translation> </message> <message> <source>Failed to load the settings of the virtual machine <b>%1</b> from <b><nobr>%2</nobr></b>.</source> - <translation>No s'ha pogut carregar els parà metres de la mà quina virtual <b>%1</b> des de <b><nobr>%2</nobr></b>.</translation> + <translation>No s'ha pogut carregar els parà metres de la mà quina virtual <b>%1</b> des de <b><nobr>%2</nobr></b>.</translation> </message> <message> <source>Delete</source> @@ -9589,8 +9588,8 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati <translation type="obsolete">Continua</translation> </message> <message> - <source><p>Do you want to delete this hard disk's image file <nobr><b>%1</b>?</nobr></p><p>If you select <b>Delete</b> then the image file will be permanently deleted after unregistering the hard disk. This operation cannot be undone.</p><p>If you select <b>Unregister</b> then the virtual hard disk will be unregistered and removed from the collection, but the image file will be left on your physical disk.</p></source> - <translation type="obsolete"><p>Voleu suprimir aquest fitxer d'imatge de disc dur <nobr><b>%1</b>?</nobr></p><p>Si seleccioneu <b>Suprimeix</b>, el fitxer d'imatge s'eliminarà completament una vegada es lleve del registre el disc dur. Aquesta operació no es pot desfer.</p></translation> + <source><p>Do you want to delete this hard disk's image file <nobr><b>%1</b>?</nobr></p><p>If you select <b>Delete</b> then the image file will be permanently deleted after unregistering the hard disk. This operation cannot be undone.</p><p>If you select <b>Unregister</b> then the virtual hard disk will be unregistered and removed from the collection, but the image file will be left on your physical disk.</p></source> + <translation type="obsolete"><p>Voleu suprimir aquest fitxer d'imatge de disc dur <nobr><b>%1</b>?</nobr></p><p>Si seleccioneu <b>Suprimeix</b>, el fitxer d'imatge s'eliminarà completament una vegada es lleve del registre el disc dur. Aquesta operació no es pot desfer.</p></translation> </message> <message> <source>Delete</source> @@ -9613,11 +9612,11 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to attach a hard disk image with UUID %1 to device slot %2 on channel %3 of the %4 bus of the machine <b>%5</b>.</source> - <translation type="obsolete">No s'ha pogut connectar la imatge del disc dur amb UUID %1 a la ranura de dispositius %2 al canal %3 del bus %4 de la mà quina <b>%5</b>.</translation> + <translation type="obsolete">No s'ha pogut connectar la imatge del disc dur amb UUID %1 a la ranura de dispositius %2 al canal %3 del bus %4 de la mà quina <b>%5</b>.</translation> </message> <message> <source>Failed to detach a hard disk image from device slot %1 on channel %2 of the %3 bus of the machine <b>%4</b>.</source> - <translation type="obsolete">No s'ha pogut desconnectar una imatge de disc dur a la ranura de dispositius %1 al canal %2 del bus %3 de la mà quina <b>%4</b>.</translation> + <translation type="obsolete">No s'ha pogut desconnectar una imatge de disc dur a la ranura de dispositius %1 al canal %2 del bus %3 de la mà quina <b>%4</b>.</translation> </message> <message> <source>Download</source> @@ -9632,7 +9631,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati <message> <source><p>The host key is currently defined as <b>%1</b>.</p></source> <comment>additional message box paragraph</comment> - <translation><p>La tecla d'amfitrió es troba actualment definida com a <b>%1</b>.</p></translation> + <translation><p>La tecla d'amfitrió es troba actualment definida com a <b>%1</b>.</p></translation> </message> <message> <source>Capture</source> @@ -9650,7 +9649,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>The following VirtualBox settings files have been automatically converted to the new settings file format version <b>%1</b>.</p><p>However, the results of the conversion were not saved back to disk yet. Please press:</p><ul><li><b>Save</b> to save all auto-converted files now (it will not be possible to use these settings files with an older version of VirtualBox in the future);</li><li><b>Backup</b> to create backup copies of the settings files in the old format before saving them in the new format;</li><li><b>Cancel</b> to not save the auto-converted settings files now.<li></ul><p>Note that if you select <b>Cancel</b>, the auto-converted settings files will be implicitly saved in the new format anyway once you change a setting or start a virtual machine, but <b>no</b> backup copies will be created in this case.</p></source> - <translation type="obsolete"><p>Els següents fitxers de parà metres del VirtualBox s'han convertit automà ticament al nou format <b>%1</b>.</p><p>Tot i aixÃ, els resultats de la conversió encara no s'han desat al disc. Premeu:</p><ul><li><b>Desa</b> per desar ara els fitxers auto-convertits (ja no serà possible fer servir aquests parà metres amb una versió anterior del VirtualBox);</li><li><b>Còpia de seguretat</b> per crear una còpia de seguretat dels fitxers de parà metres en el format antic abans de desar-los en el nou format;</li><li><b>Cancel·la</b> per no desar ara els fitxers de parà metres auto-convertits.</li></ul><p>Tingueu en compte que si seleccioneu <b>Cancel·la</b>, els fitxers de parà metres auto-convertits es desaran implÃcitament en el nou format tot i que una vegada que canvieu algun parà metre o inicieu una mà quina virtual, en canvi en aquest cas <b>no</b> es faran còpies de seguretat.</p></translation> + <translation type="obsolete"><p>Els següents fitxers de parà metres del VirtualBox s'han convertit automà ticament al nou format <b>%1</b>.</p><p>Tot i aixÃ, els resultats de la conversió encara no s'han desat al disc. Premeu:</p><ul><li><b>Desa</b> per desar ara els fitxers auto-convertits (ja no serà possible fer servir aquests parà metres amb una versió anterior del VirtualBox);</li><li><b>Còpia de seguretat</b> per crear una còpia de seguretat dels fitxers de parà metres en el format antic abans de desar-los en el nou format;</li><li><b>Cancel·la</b> per no desar ara els fitxers de parà metres auto-convertits.</li></ul><p>Tingueu en compte que si seleccioneu <b>Cancel·la</b>, els fitxers de parà metres auto-convertits es desaran implÃcitament en el nou format tot i que una vegada que canvieu algun parà metre o inicieu una mà quina virtual, en canvi en aquest cas <b>no</b> es faran còpies de seguretat.</p></translation> </message> <message> <source>&Save</source> @@ -9698,7 +9697,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to copy file <b><nobr>%1</nobr></b> to <b><nobr>%2</nobr></b> (%3).</source> - <translation type="obsolete">No s'ha pogut copiar el fitxer <b><nobr>%1</nobr></b> a <b><nobr>%2</nobr></b> (%3).</translation> + <translation type="obsolete">No s'ha pogut copiar el fitxer <b><nobr>%1</nobr></b> a <b><nobr>%2</nobr></b> (%3).</translation> </message> <message> <source><p>There are no unused hard disks available for the newly created attachment.</p><p>Press the <b>Create</b> button to start the <i>New Virtual Disk</i> wizard and create a new hard disk, or press the <b>Select</b> if you wish to open the <i>Virtual Disk Manager</i>.</p></source> @@ -9720,7 +9719,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Could not switch the guest display to fullscreen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to fullscreen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source> - <translation><p>No es pot canviar al mode de pantalla completa perquè no hi ha suficient memòria de vÃdeo assignada a la mà quina virtual.</p><p>Haureu d'establir la memòria de vÃdeo com a mÃnim a <b>%1</b>.</p><p>Premeu <b>Ignora</b> per canviar de totes maneres al mode de pantalla completa o premeu <b>Cancel·la</b> per a cancel·lar l'operació.</p></translation> + <translation><p>No es pot canviar al mode de pantalla completa perquè no hi ha suficient memòria de vÃdeo assignada a la mà quina virtual.</p><p>Haureu d'establir la memòria de vÃdeo com a mÃnim a <b>%1</b>.</p><p>Premeu <b>Ignora</b> per canviar de totes maneres al mode de pantalla completa o premeu <b>Cancel·la</b> per a cancel·lar l'operació.</p></translation> </message> <message> <source><p>Unable to obtain the new version information due to the following network error:</p><p><b>%1</b></p></source> @@ -9732,23 +9731,23 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer integration is not currently supported by the guest OS) and the keyboard, which will make them unavailable to other applications running on your host machine.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> - <translation><p>Heu fet <b>clic amb el punter</b> a dins de la finestra de la mà quina virtual o heu premut la <b>tecla d'amfitrió</b>. Això fa que la mà quina virtual <b>capturi</b> el punter (només en cas que la integració del punter no estigui suportada pel sistema client) i el teclat, que ara no estaran disponibles per funcionar a la mà quina amfitriona.</p><p>Podeu prémer la <b>tecla d'amfitrió</b> en qualsevol moment per <b>tornar</b> el punter i el teclat al mode normal de funcionament. La tecla d'amfitrió assiganada actualment es mostra a la barra d'estat a la part inferior de la finestra, al costat de la icona &nbsp;<img src=:/hostkey_16px.png/>&nbsp;. Aquesta icona indica si el teclat i el punter estan en estat de captura o no.</p></translation> + <translation><p>Heu fet <b>clic amb el punter</b> a dins de la finestra de la mà quina virtual o heu premut la <b>tecla d'amfitrió</b>. Això fa que la mà quina virtual <b>capturi</b> el punter (només en cas que la integració del punter no estigui suportada pel sistema client) i el teclat, que ara no estaran disponibles per funcionar a la mà quina amfitriona.</p><p>Podeu prémer la <b>tecla d'amfitrió</b> en qualsevol moment per <b>tornar</b> el punter i el teclat al mode normal de funcionament. La tecla d'amfitrió assiganada actualment es mostra a la barra d'estat a la part inferior de la finestra, al costat de la icona &nbsp;<img src=:/hostkey_16px.png/>&nbsp;. Aquesta icona indica si el teclat i el punter estan en estat de captura o no.</p></translation> </message> <message> <source><p>You have the <b>Auto capture keyboard</b> option turned on. This will cause the Virtual Machine to automatically <b>capture</b> the keyboard every time the VM window is activated and make it unavailable to other applications running on your host machine: when the keyboard is captured, all keystrokes (including system ones like Alt-Tab) will be directed to the VM.</p><p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse (if it is captured) and return them to normal operation. The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p></source> - <translation><p>L'opció de <b>captura automà tica del teclat</b> és activa. Això farà que la mà quina virtual <b>capturi</b> el teclat sempre que la finestra de la mà quina virtual estigui activa i farà que el teclat no estigui disponible per a altres aplicacions que s'estiguin executant a l'ordinador amfitrió: quan el teclat està capturat, totes les tecles especials (incloent Alt-Tab) es readrecen a la mà quina virtual.</p><p>Podeu prémer la <b>tecla d'amfitrió</b> en qualsevol moment per <b>tornar</b> el punter i el teclat al mode normal de funcionament. La tecla d'amfitrió assiganada actualment es mostra a la barra d'estat a la part inferior de la finestra, al costat de la icona &nbsp;<img src=hostkey_16px.png/>&nbsp;. Aquesta icona indica si el teclat i el punter estan en estat de captura o no.</p></translation> + <translation><p>L'opció de <b>captura automà tica del teclat</b> és activa. Això farà que la mà quina virtual <b>capturi</b> el teclat sempre que la finestra de la mà quina virtual estigui activa i farà que el teclat no estigui disponible per a altres aplicacions que s'estiguin executant a l'ordinador amfitrió: quan el teclat està capturat, totes les tecles especials (incloent Alt-Tab) es readrecen a la mà quina virtual.</p><p>Podeu prémer la <b>tecla d'amfitrió</b> en qualsevol moment per <b>tornar</b> el punter i el teclat al mode normal de funcionament. La tecla d'amfitrió assiganada actualment es mostra a la barra d'estat a la part inferior de la finestra, al costat de la icona &nbsp;<img src=hostkey_16px.png/>&nbsp;. Aquesta icona indica si el teclat i el punter estan en estat de captura o no.</p></translation> </message> <message> - <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the status bar will look like&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;to inform you that mouse pointer integration is supported by the guest OS and is currently turned on.</p><p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. You can always disable it for the current session (and enable it again) by selecting the corresponding action from the menu bar.</p></source> - <translation><p>La Mà quina Virtual ha informat que el sistema client suporta <b>integració del punter</b>. Això significa que no necessiteu <i>capturar</i> el punter per poder fer-lo servir al sistema client -- totes les accions que executeu quan el punter estigui a sobre de la Mà quina virtual s'enviaran directament al sistema client. Si es captura el punter, automà ticament es tornarà al mode normal.</p><p>La icona del punter a la barra d'estat es mostrarà com&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;per informar-vos que la integració del punter està suportada pel sistema client que està actiu.</p><p><b>Nota</b>: Algunes aplicacions poden comportar-se incorrectament treballant en el mode d'integració del punter. Sempre podeu inhabilitar-ho a la sessió actual (o habilitar-ho) seleccionat l'opció corresponent a la barra de menú.</p></translation> + <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the status bar will look like&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;to inform you that mouse pointer integration is supported by the guest OS and is currently turned on.</p><p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. You can always disable it for the current session (and enable it again) by selecting the corresponding action from the menu bar.</p></source> + <translation><p>La Mà quina Virtual ha informat que el sistema client suporta <b>integració del punter</b>. Això significa que no necessiteu <i>capturar</i> el punter per poder fer-lo servir al sistema client -- totes les accions que executeu quan el punter estigui a sobre de la Mà quina virtual s'enviaran directament al sistema client. Si es captura el punter, automà ticament es tornarà al mode normal.</p><p>La icona del punter a la barra d'estat es mostrarà com&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;per informar-vos que la integració del punter està suportada pel sistema client que està actiu.</p><p><b>Nota</b>: Algunes aplicacions poden comportar-se incorrectament treballant en el mode d'integració del punter. Sempre podeu inhabilitar-ho a la sessió actual (o habilitar-ho) seleccionat l'opció corresponent a la barra de menú.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="obsolete"><p>La mà quina virtual passarà ara al mode de <b>pantalla completa</b>. Podeu tornar enrere prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode de pantalla completa. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> + <translation type="obsolete"><p>La mà quina virtual passarà ara al mode de <b>pantalla completa</b>. Podeu tornar enrere prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode de pantalla completa. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="obsolete"><p>La mà quina virtual passarà ara al mode <b>fluid</b>. Podeu tornar enrere al mode finestra prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode fluid. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> + <translation type="obsolete"><p>La mà quina virtual passarà ara al mode <b>fluid</b>. Podeu tornar enrere al mode finestra prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode fluid. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> </message> <message> <source>&Contents...</source> @@ -9756,7 +9755,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Show the online help contents</source> - <translation>Mostra els continguts d'ajuda en lÃnia</translation> + <translation>Mostra els continguts d'ajuda en lÃnia</translation> </message> <message> <source>&VirtualBox Web Site...</source> @@ -9799,16 +9798,16 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati <translation>Mostra un dià leg amb la informació del producte</translation> </message> <message> - <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source> - <translation><b>S'ha publicat una nova versió del VirtualBox! La versió <b>%1</b> és disponible a <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>Podeu baixar-la directament des d'aquest enllaç: </p><p><a href=%2>%3</a></p></translation> + <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source> + <translation><b>S'ha publicat una nova versió del VirtualBox! La versió <b>%1</b> és disponible a <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>Podeu baixar-la directament des d'aquest enllaç: </p><p><a href=%2>%3</a></p></translation> </message> <message> <source><p>Are you sure you want to release the %1 <nobr><b>%2</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%3</b>.</p></source> <translation><p>Segur que voleu alliberar el %1 <nobr><b>%2</b></nobr>?</p><p>Això el desconnectarà de les mà quines virtuals següents: <b>%3</b>.</p> </translation> </message> <message> - <source>A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />The file already exists in "%2". Replacing it will overwrite its contents.</source> - <translation type="obsolete">Ja existeix un fitxer anomenat <b>%1</b>. Esteu segur que voleu reemplaçar-lo?<br /><br />El fitxer ja existeix a "%2". Si el reemplaceu se sobreescriuran els continguts.</translation> + <source>A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />The file already exists in "%2". Replacing it will overwrite its contents.</source> + <translation type="obsolete">Ja existeix un fitxer anomenat <b>%1</b>. Esteu segur que voleu reemplaçar-lo?<br /><br />El fitxer ja existeix a "%2". Si el reemplaceu se sobreescriuran els continguts.</translation> </message> <message> <source>The following files already exist:<br /><br />%1<br /><br />Are you sure you want to replace them? Replacing them will overwrite their contents.</source> @@ -9816,7 +9815,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to remove the file <b>%1</b>.<br /><br />Please try to remove the file yourself and try again.</source> - <translatorcomment>We don't use "&" in Catalan.</translatorcomment> + <translatorcomment>We don't use "&" in Catalan.</translatorcomment> <translation type="obsolete">No es pot eliminar el fitxer <b>%1</b>.<br /><br />Elimineu el fitxer i proveu novament.</translation> </message> <message> @@ -9825,7 +9824,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Could not access USB on the host system, because neither the USB file system (usbfs) nor the DBus and hal services are currently available. If you wish to use host USB devices inside guest systems, you must correct this and restart VirtualBox.</source> - <translation>No es pot accedir a l'USB al sistema amfitrió perquè ni el servei de sistema de fitxers USB (usbfs) ni el DBus s'hi troben disponibles. Si voleu fer servir els dispositius USB de l'amfitrió a dins dels sistemes clients, heu de solucionar això i tornar a iniciar el VirtualBox.</translation> + <translation>No es pot accedir a l'USB al sistema amfitrió perquè ni el servei de sistema de fitxers USB (usbfs) ni el DBus s'hi troben disponibles. Si voleu fer servir els dispositius USB de l'amfitrió a dins dels sistemes clients, heu de solucionar això i tornar a iniciar el VirtualBox.</translation> </message> <message> <source>You are trying to shut down the guest with the ACPI power button. This is currently not possible because the guest does not support software shutdown.</source> @@ -9833,7 +9832,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.</p><p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p></source> - <translation><p>S'ha habilitat l'acceleració per maquinari VT-x/AMD-V, però no és operativa. El vostre sistema client de 64 bits fallarà quan detecti un processador de 64 bits i no podrà iniciar-se.</p><p>Assegureu-vos que heu habilitat VT-x/AMD-V correctament al BIOS del vostre ordinador.</p></translation> + <translation><p>S'ha habilitat l'acceleració per maquinari VT-x/AMD-V, però no és operativa. El vostre sistema client de 64 bits fallarà quan detecti un processador de 64 bits i no podrà iniciar-se.</p><p>Assegureu-vos que heu habilitat VT-x/AMD-V correctament al BIOS del vostre ordinador.</p></translation> </message> <message> <source>Close VM</source> @@ -9845,7 +9844,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Are you sure you wish to delete the selected snapshot and saved state?</p></source> - <translation type="obsolete"><p>Esteu segur que voleu eliminar la captura seleccionada i l'estat desat?</p></translation> + <translation type="obsolete"><p>Esteu segur que voleu eliminar la captura seleccionada i l'estat desat?</p></translation> </message> <message> <source>Discard</source> @@ -9870,11 +9869,11 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>The next dialog will let you choose whether you also want to delete the storage unit of this hard disk or keep it for later usage.</source> - <translation>El següent dià leg us permetrà triar si voleu eliminar també la unitat d'emmagatzematge d'aquest disc dur o mantenir-la per a més endavant.</translation> + <translation>El següent dià leg us permetrà triar si voleu eliminar també la unitat d'emmagatzematge d'aquest disc dur o mantenir-la per a més endavant.</translation> </message> <message> <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to add it to the list later again.</p></source> - <translation type="obsolete"><p>Tingueu en compte que la unitat d'emmagatzematge d'aquest medi no s'eliminarà i, a més serà possible afegir-la novament més tard.</p></translation> + <translation type="obsolete"><p>Tingueu en compte que la unitat d'emmagatzematge d'aquest medi no s'eliminarà i, a més serà possible afegir-la novament més tard.</p></translation> </message> <message> <source>Remove</source> @@ -9883,11 +9882,11 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>The hard disk storage unit at location <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this location because it can be already used by another virtual hard disk.</p><p>Please specify a different location.</p></source> - <translation><p>L'ubicació de de disc dur d'emmagatzematge <b>%1</b> ja existeix. No podeu crear un disc dur nou virtual que faci servir la mateixa ubicació perquè ja està fent-se servir per un altre disc dur virtual.</p><p>Especifiqueu una ubicació diferent.</p></translation> + <translation><p>L'ubicació de de disc dur d'emmagatzematge <b>%1</b> ja existeix. No podeu crear un disc dur nou virtual que faci servir la mateixa ubicació perquè ja està fent-se servir per un altre disc dur virtual.</p><p>Especifiqueu una ubicació diferent.</p></translation> </message> <message> <source><p>Do you want to delete the storage unit of the hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which makes it possible to add this hard disk to the list later again.</p></source> - <translation><p>Voleu eliminar la unitat d'emmagatzematge del disc dur <nobr><b>%1</b></nobr>?</p><p>Si seleccioneu <b>Elimina</b>, la unitat especificada s'eliminarà de forma permanent. Aquesta operació <b>no es pot desfer</b>.</p><p>Si seleccioneu <b>Manté</b>, el disc dur s'eliminarà del llistat de discos durs coneguts, però la unitat d'emmagatzematge no s'eliminarà de forma que podreu afegir-la a aquest disc dur novament més tard.</p></translation> + <translation><p>Voleu eliminar la unitat d'emmagatzematge del disc dur <nobr><b>%1</b></nobr>?</p><p>Si seleccioneu <b>Elimina</b>, la unitat especificada s'eliminarà de forma permanent. Aquesta operació <b>no es pot desfer</b>.</p><p>Si seleccioneu <b>Manté</b>, el disc dur s'eliminarà del llistat de discos durs coneguts, però la unitat d'emmagatzematge no s'eliminarà de forma que podreu afegir-la a aquest disc dur novament més tard.</p></translation> </message> <message> <source>Delete</source> @@ -9901,7 +9900,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to delete the storage unit of the hard disk <b>%1</b>.</source> - <translation>No s'ha pugt eliminar la unitat del disc dur <b>%1</b>.</translation> + <translation>No s'ha pugt eliminar la unitat del disc dur <b>%1</b>.</translation> </message> <message> <source><p>There are hard disks attached to ports of the additional controller. If you disable the additional controller, all these hard disks will be automatically detached.</p><p>Are you sure you want to disable the additional controller?</p></source> @@ -9922,47 +9921,47 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to create the hard disk storage <nobr><b>%1</b>.</nobr></source> - <translation>No s'ha pogut crear el disc dur <nobr><b>%1</b>.</nobr></translation> + <translation>No s'ha pogut crear el disc dur <nobr><b>%1</b>.</nobr></translation> </message> <message> <source>Failed to attach the hard disk <nobr><b>%1</b></nobr> to slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation type="obsolete">No s'ha pogut connectar el disc dur <nobr><b>%1</b></nobr> a la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> + <translation type="obsolete">No s'ha pogut connectar el disc dur <nobr><b>%1</b></nobr> a la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to detach the hard disk <nobr><b>%1</b></nobr> from slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation type="obsolete">No s'ha pogut treure el disc dur <nobr><b>%1</b></nobr> de la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> + <translation type="obsolete">No s'ha pogut treure el disc dur <nobr><b>%1</b></nobr> de la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to mount the %1 <nobr><b>%2</b></nobr> on the machine <b>%3</b>.</source> - <translation type="obsolete">No s'ha pogut muntar %1 <nobr><b>%2</b></nobr> a la mà quina <b>%3</b>.</translation> + <translation type="obsolete">No s'ha pogut muntar %1 <nobr><b>%2</b></nobr> a la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>.</source> - <translation type="obsolete">No s'ha pogut desmuntar el %1 <nobr><b>%2</b></nobr> de la mà quina <b>%3</b>.</translation> + <translation type="obsolete">No s'ha pogut desmuntar el %1 <nobr><b>%2</b></nobr> de la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to open the %1 <nobr><b>%2</b></nobr>.</source> - <translation>No s'ha pogut obrir el %1 <nobr><b>%2</b></nobr>.</translation> + <translation>No s'ha pogut obrir el %1 <nobr><b>%2</b></nobr>.</translation> </message> <message> <source>Failed to close the %1 <nobr><b>%2</b></nobr>.</source> - <translation>No s'ha pogut tancar el %1 <nobr><b>%2</b></nobr>.</translation> + <translation>No s'ha pogut tancar el %1 <nobr><b>%2</b></nobr>.</translation> </message> <message> <source>Failed to determine the accessibility state of the medium <nobr><b>%1</b></nobr>.</source> - <translation>No s'ha pogut accedir a l'estat del suport <nobr><b>%1</b></nobr>.</translation> + <translation>No s'ha pogut accedir a l'estat del suport <nobr><b>%1</b></nobr>.</translation> </message> <message> <source><p>Do you want to remove the selected host network interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> This interface may be in use by one or more network adapters of this or another VM. After it is removed, these adapters will no longer work until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation type="obsolete"><p>Voleu suprimir la interfÃcie de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Aquesta interfÃcie potser s'estigui fent servir per un o més adaptadors de xarxa d'aquesta o altra mà quina virtual. Després de suprimir-los, aquests adaptadors no podran treballar fins que corregiu els parà metres triant un nom d'interfÃcie diferent o un tipus diferent d'adaptador.</p></translation> + <translation type="obsolete"><p>Voleu suprimir la interfÃcie de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Aquesta interfÃcie potser s'estigui fent servir per un o més adaptadors de xarxa d'aquesta o altra mà quina virtual. Després de suprimir-los, aquests adaptadors no podran treballar fins que corregiu els parà metres triant un nom d'interfÃcie diferent o un tipus diferent d'adaptador.</p></translation> </message> <message> <source>Failed to create the host-only network interface.</source> - <translation>No s'ha pogut crear una interfÃcie de xarxa de només l'amfitrió.</translation> + <translation>No s'ha pogut crear una interfÃcie de xarxa de només l'amfitrió.</translation> </message> <message> <source><p>Failed to connect to the VirtualBox online registration service due to the following error:</p><p><b>%1</b></p></source> - <translation><p>No s'ha pogut connectar al servei de llegistre en lÃnia del VirtualBox degut al següent error:</p><p><b>%1</b></p></translation> + <translation><p>No s'ha pogut connectar al servei de llegistre en lÃnia del VirtualBox degut al següent error:</p><p><b>%1</b></p></translation> </message> <message> <source><p>Unable to obtain the new version information due to the following error:</p><p><b>%1</b></p></source> @@ -9970,15 +9969,15 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>One or more virtual hard disks, CD/DVD or floppy media are not currently accessible. As a result, you will not be able to operate virtual machines that use these media until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see what media are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source> - <translation><p>No es pot accedir a un o més dels discos, CD/DVD o disquet virtuals. Com a resultat, no podreu operar amb les mà quines virtuals que els facin servir fins que estiguin accessibles.</p><p>Premeu <b>Comprova</b> per obrir el gestor de discos virtuals i veure a quins suports no s'hi pot accedir, o premeu <b>Ignora</b> per ignorar aquest missatge.</p></translation> + <translation><p>No es pot accedir a un o més dels discos, CD/DVD o disquet virtuals. Com a resultat, no podreu operar amb les mà quines virtuals que els facin servir fins que estiguin accessibles.</p><p>Premeu <b>Comprova</b> per obrir el gestor de discos virtuals i veure a quins suports no s'hi pot accedir, o premeu <b>Ignora</b> per ignorar aquest missatge.</p></translation> </message> <message> <source><p>Your existing VirtualBox settings files will be automatically converted from the old format to a new format required by the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>Exit</b> if you want to terminate the VirtualBox application without any further actions.</p></source> - <translation><p>Els fitxers de configuració existents del VirtualBox es convertiran automà ticament des del format antic al nou format necessari per a la nova versió del VirtualBox.</p><p>Premeu <b>D'acord</b> per a iniciar ara el VirtualBox o premeu <b>Surt</b> si voleu tancar el VirtualBox sense realitzar més accions.</p></translation> + <translation><p>Els fitxers de configuració existents del VirtualBox es convertiran automà ticament des del format antic al nou format necessari per a la nova versió del VirtualBox.</p><p>Premeu <b>D'acord</b> per a iniciar ara el VirtualBox o premeu <b>Surt</b> si voleu tancar el VirtualBox sense realitzar més accions.</p></translation> </message> <message> <source><p>Your existing VirtualBox settings files were automatically converted from the old format to a new format required by the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>More</b> if you want to get more information about what files were converted and access additional actions.</p><p>Press <b>Exit</b> to terminate the VirtualBox application without saving the results of the conversion to disk.</p></source> - <translation type="obsolete"><p>Els fitxers de configuració actuals del VirtualBox es convertiran des del format antic al nou format necessari per a la nova versió del VirtualBox.</p><p>Premeu <b>D'acord</b> per iniciar el VirtualBox ara o premeu <b>Més</b> si voleu obtenir més informació sobre quins fitxers es convertiran i accedir a accions addicionals.</p><p>Premeu <b>Surt</b> per tancar l'apliació del VirtualBox sense desar els resultats de la conversió al disc.</p></translation> + <translation type="obsolete"><p>Els fitxers de configuració actuals del VirtualBox es convertiran des del format antic al nou format necessari per a la nova versió del VirtualBox.</p><p>Premeu <b>D'acord</b> per iniciar el VirtualBox ara o premeu <b>Més</b> si voleu obtenir més informació sobre quins fitxers es convertiran i accedir a accions addicionals.</p><p>Premeu <b>Surt</b> per tancar l'apliació del VirtualBox sense desar els resultats de la conversió al disc.</p></translation> </message> <message> <source>&More</source> @@ -9992,11 +9991,11 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Deleting this host-only network will remove the host-only interface this network is based on. Do you want to remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> this interface may be in use by one or more virtual network adapters belonging to one of your VMs. After it is removed, these adapters will no longer be usable until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation><p>Eliminant aquesta xarxa de només l'amfitrió suposarà l'eliminació de la interfÃcie de només amfitrió en la qual està basada. Voleu eliminar aquesta interfÃcie (de només l'amfitrió) <nobr><b>%1</b>?</nobr></p><p><b>Nota</b>: aquesta interfÃcie pot estar en ús per un o més adaptadors de xarxa que pertanyin a alguna de les vostres mà quines virtuals. Després d'eliminar-se, aquests adaptadors no podran fer-se servir fins que corregiu els parà metres a cadascun triant una interfÃcie diferent o un tipus d'adjunció diferent.</p></translation> + <translation><p>Eliminant aquesta xarxa de només l'amfitrió suposarà l'eliminació de la interfÃcie de només amfitrió en la qual està basada. Voleu eliminar aquesta interfÃcie (de només l'amfitrió) <nobr><b>%1</b>?</nobr></p><p><b>Nota</b>: aquesta interfÃcie pot estar en ús per un o més adaptadors de xarxa que pertanyin a alguna de les vostres mà quines virtuals. Després d'eliminar-se, aquests adaptadors no podran fer-se servir fins que corregiu els parà metres a cadascun triant una interfÃcie diferent o un tipus d'adjunció diferent.</p></translation> </message> <message> <source><p>The following VirtualBox settings files have been automatically converted to the new settings file format version <b>%1</b>.</p><p>However, the results of the conversion were not saved back to disk yet. Please press:</p><ul><li><b>Backup</b> to create backup copies of the settings files in the old format before saving them in the new format;</li><li><b>Overwrite</b> to save all auto-converted files without creating backup copies (it will not be possible to use these settings files with an older version of VirtualBox afterwards);</li>%2</ul><p>It is recommended to always select <b>Backup</b> because in this case it will be possible to go back to the previous version of VirtualBox (if necessary) without losing your current settings. See the VirtualBox Manual for more information about downgrading.</p></source> - <translation type="obsolete"><p>Els següents fitxers de parà metres del VirtualBox s'han convertit automà ticament al nou format <b>%1</b>.</p><p>Tot i aixÃ, els resultats de la conversió encara no s'han desat al disc. Premeu:</p><ul><li><b>Desa</b> per desar ara els fitxers auto-convertits (ja no serà possible fer servir aquests parà metres amb una versió anterior del VirtualBox);</li><li><b>Còpia de seguretat</b> per crear una còpia de seguretat dels fitxers de parà metres en el format antic abans de desar-los en el nou format;</li><li><b>Sobreescriu</b> per desar tots els fitxers auto-convertitts sense crear còpies de seguretat;</li>%2</ul><p>Es recomana seleccionar en tot moment <b>Còpia de seguretat</b> perquè sempre serà possible tornar a l'estat anterior sense perdre els parà metres de configuració actuals. Mireu el manual del VirtualBox per a més informació sobre desactualització.</p></translation> + <translation type="obsolete"><p>Els següents fitxers de parà metres del VirtualBox s'han convertit automà ticament al nou format <b>%1</b>.</p><p>Tot i aixÃ, els resultats de la conversió encara no s'han desat al disc. Premeu:</p><ul><li><b>Desa</b> per desar ara els fitxers auto-convertits (ja no serà possible fer servir aquests parà metres amb una versió anterior del VirtualBox);</li><li><b>Còpia de seguretat</b> per crear una còpia de seguretat dels fitxers de parà metres en el format antic abans de desar-los en el nou format;</li><li><b>Sobreescriu</b> per desar tots els fitxers auto-convertitts sense crear còpies de seguretat;</li>%2</ul><p>Es recomana seleccionar en tot moment <b>Còpia de seguretat</b> perquè sempre serà possible tornar a l'estat anterior sense perdre els parà metres de configuració actuals. Mireu el manual del VirtualBox per a més informació sobre desactualització.</p></translation> </message> <message> <source><li><b>Exit</b> to terminate VirtualBox without saving the results of the conversion to disk.</li></source> @@ -10009,35 +10008,35 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nobr> directory, as well as a description of what you were doing when this error happened. Note that you can also access the above files by selecting <b>Show Log</b> from the <b>Machine</b> menu of the main VirtualBox window.</p><p>Press <b>OK</b> if you want to power off the machine or press <b>Ignore</b> if you want to leave it as is for debugging. Please note that debugging requires special knowledge and tools, so it is recommended to press <b>OK</b> now.</p></source> - <translation><p>S'ha produït un error crÃtic mentre s'executava la mà quina virtual, que s'ha aturat.</p><p>Per obtenir ajuda, visiteu la secció Community a <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> o al vostre contracte de suport. Afegiu el contingut del fitxer de registre <tt>VBox.log</tt> i el fitxer d'imatge <tt>VBox.png</tt>,que podreu trobar al directori <nobr><b>%1</b></nobr>, i una descripció sobre allò que està veu fent al moment al qual es va produir l'error. Podeu accedir als fitxers especificats mitjançant <b>Mostra el registre</b> des del menú de la <b>Mà quina</b> a la finestra principal del VirtualBox.</p><p>Premeu <b>D'acord</b> si voleu aturar la mà quina o <b>Ignora</b> si voleu deixar-la en procés de depuració. Tingueu en compte que el procés de depuració requereix coneixements avançats i eines especials, per tant és recomanable prémer <b>D'acord</b>.</p></translation> + <translation><p>S'ha produït un error crÃtic mentre s'executava la mà quina virtual, que s'ha aturat.</p><p>Per obtenir ajuda, visiteu la secció Community a <a href=http://www.virtualbox.org>http://www.virtualbox.org</a> o al vostre contracte de suport. Afegiu el contingut del fitxer de registre <tt>VBox.log</tt> i el fitxer d'imatge <tt>VBox.png</tt>,que podreu trobar al directori <nobr><b>%1</b></nobr>, i una descripció sobre allò que està veu fent al moment al qual es va produir l'error. Podeu accedir als fitxers especificats mitjançant <b>Mostra el registre</b> des del menú de la <b>Mà quina</b> a la finestra principal del VirtualBox.</p><p>Premeu <b>D'acord</b> si voleu aturar la mà quina o <b>Ignora</b> si voleu deixar-la en procés de depuració. Tingueu en compte que el procés de depuració requereix coneixements avançats i eines especials, per tant és recomanable prémer <b>D'acord</b>.</p></translation> </message> <message> <source>Failed to open appliance.</source> - <translation>No s'ha pogut obrir l'aplicació virtual.</translation> + <translation>No s'ha pogut obrir l'aplicació virtual.</translation> </message> <message> <source>Failed to open/interpret appliance <b>%1</b>.</source> - <translation>No s'ha pogut obrir/interpretar l'aplicació virtual <b>%1</b>.</translation> + <translation>No s'ha pogut obrir/interpretar l'aplicació virtual <b>%1</b>.</translation> </message> <message> <source>Failed to import appliance <b>%1</b>.</source> - <translation>No s'ha pogut importar l'aplicació virtual <b>%1</b>.</translation> + <translation>No s'ha pogut importar l'aplicació virtual <b>%1</b>.</translation> </message> <message> <source>Failed to create appliance.</source> - <translation>No s'ha pogut crear l'aplicació virtual.</translation> + <translation>No s'ha pogut crear l'aplicació virtual.</translation> </message> <message> <source>Failed to prepare the export of the appliance <b>%1</b>.</source> - <translation>No s'ha pogut preparar l'exportació de l'aplicació virtual <b>%1</b>.</translation> + <translation>No s'ha pogut preparar l'exportació de l'aplicació virtual <b>%1</b>.</translation> </message> <message> <source>Failed to create an appliance.</source> - <translation>No s'ha pogut crear una aplicació virtual.</translation> + <translation>No s'ha pogut crear una aplicació virtual.</translation> </message> <message> <source>Failed to export appliance <b>%1</b>.</source> - <translation>No s'ha pogut exportar l'aplicació virtual <b>%1</b>.</translation> + <translation>No s'ha pogut exportar l'aplicació virtual <b>%1</b>.</translation> </message> <message> <source>hard disk</source> @@ -10060,23 +10059,23 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Certain guests (e.g. OS/2 and QNX) require this feature.</p><p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p></source> - <translation><p>S'ha activat l'acceleració per maquinari VT-x/AMD-V, però no és operativa. Alguns clients (ex. OS/2 i QNX) requereixen aquesta caracterÃstica.</p><p>Assegureu-vos que heu activat correctament VT-x/AMD-V al BIOS del vostre ordinador.</p></translation> + <translation><p>S'ha activat l'acceleració per maquinari VT-x/AMD-V, però no és operativa. Alguns clients (ex. OS/2 i QNX) requereixen aquesta caracterÃstica.</p><p>Assegureu-vos que heu activat correctament VT-x/AMD-V al BIOS del vostre ordinador.</p></translation> </message> <message> <source><p>Invalid e-mail address or password specified.</p></source> - <translation><p>S'ha especificat una adreça de correu o contrasenya no và lides.</p></translation> + <translation><p>S'ha especificat una adreça de correu o contrasenya no và lides.</p></translation> </message> <message> <source><p>Failed to register the VirtualBox product.</p><p>%1</p></source> - <translation><p>No s'ha pogut registrar el producte VirtualBox.</p><p>%1</p></translation> + <translation><p>No s'ha pogut registrar el producte VirtualBox.</p><p>%1</p></translation> </message> <message> <source>Failed to check files.</source> - <translation>No s'han pogut comprovar els fitxers.</translation> + <translation>No s'han pogut comprovar els fitxers.</translation> </message> <message> <source>Failed to remove file.</source> - <translation>No s'ha pogut eliminar el fitxer.</translation> + <translation>No s'ha pogut eliminar el fitxer.</translation> </message> <message> <source>You seem to have the USBFS filesystem mounted at /sys/bus/usb/drivers. We strongly recommend that you change this, as it is a severe mis-configuration of your system which could cause USB devices to fail in unexpected ways.</source> @@ -10088,7 +10087,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Are you sure you want to restore snapshot <b>%1</b>? This will cause you to lose your current machine state, which cannot be recovered.</p></source> - <translation><p>Segur que voleu restaurar la captura <b>%1</b>? Això suposarà perdre l'estat actual de la mà quina i no podrà ser recuperat.</p></translation> + <translation><p>Segur que voleu restaurar la captura <b>%1</b>? Això suposarà perdre l'estat actual de la mà quina i no podrà ser recuperat.</p></translation> </message> <message> <source>Restore</source> @@ -10096,7 +10095,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and disk data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source> - <translation><p>Si s'esborra una captura, la informació d'estat desada a la mateixa es perdrà i les dades del disc, repartides en diversos fitxers d'imatge que VirtualBox ha creat juntament amb la captura es fusionaran en un sol fitxer. Això pot ser un procés llarg, i la informació de la captura no es podrà recuperar. </p><p>Segur que voleu eliminar la captura seleccionada <b>%1</b>?</p></translation> + <translation><p>Si s'esborra una captura, la informació d'estat desada a la mateixa es perdrà i les dades del disc, repartides en diversos fitxers d'imatge que VirtualBox ha creat juntament amb la captura es fusionaran en un sol fitxer. Això pot ser un procés llarg, i la informació de la captura no es podrà recuperar. </p><p>Segur que voleu eliminar la captura seleccionada <b>%1</b>?</p></translation> </message> <message> <source>Delete</source> @@ -10104,11 +10103,11 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source> - <translation>No s'ha pogut restaurar la captura <b>%1</b> de la mà quina virtual <b>%2</b>.</translation> + <translation>No s'ha pogut restaurar la captura <b>%1</b> de la mà quina virtual <b>%2</b>.</translation> </message> <message> <source>Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source> - <translation>No s'ha pogut eliminar la captura <b>%1</b> de la mà quina virtual <b>%2</b>.</translation> + <translation>No s'ha pogut eliminar la captura <b>%1</b> de la mà quina virtual <b>%2</b>.</translation> </message> <message> <source><p>There are no unused media available for the newly created attachment.</p><p>Press the <b>Create</b> button to start the <i>New Virtual Disk</i> wizard and create a new medium, or press the <b>Select</b> if you wish to open the <i>Virtual Media Manager</i>.</p></source> @@ -10142,7 +10141,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source> Would you like to force mounting of this medium?</source> - <translation>Voleu forçar el muntatge d'aquest suport?</translation> + <translation>Voleu forçar el muntatge d'aquest suport?</translation> </message> <message> <source>Unable to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>.</source> @@ -10150,7 +10149,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source> Would you like to force unmounting of this medium?</source> - <translation>Voleu forçar el desmuntatge d'aquest mitjà ?</translation> + <translation>Voleu forçar el desmuntatge d'aquest mitjà ?</translation> </message> <message> <source>Force Unmount</source> @@ -10158,7 +10157,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to eject the disk from the virtual drive. The drive may be locked by the guest operating system. Please check this and try again.</source> - <translation type="obsolete">No s'ha pogut extreure el disc del dispositiu virtual. Probablement estigui bloquejat pel sistema operatiu client. Comproveu-ho i proveu novament.</translation> + <translation type="obsolete">No s'ha pogut extreure el disc del dispositiu virtual. Probablement estigui bloquejat pel sistema operatiu client. Comproveu-ho i proveu novament.</translation> </message> <message> <source><p>Could not insert the VirtualBox Guest Additions installer CD image into the virtual machine <b>%1</b>, as the machine has no CD/DVD-ROM drives. Please add a drive using the storage page of the virtual machine settings dialog.</p></source> @@ -10171,7 +10170,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>The following VirtualBox settings files will be automatically converted from the old format to a new format required by the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>Exit</b> if you want to terminate the VirtualBox application without any further actions.</p></source> - <translation><p>Els següents fitxers de configuració del VirtualBox es convertiran automà ticament des del vell al nou format que requereix la nova versió del VirtualBox.</p><p>Premeu <b>D'acord</b> per iniciar el VirtualBox ara mateix o premeu <b>Surt</b> si voleu tancar el VirtualBox sense realitzar més accions.</p></translation> + <translation><p>Els següents fitxers de configuració del VirtualBox es convertiran automà ticament des del vell al nou format que requereix la nova versió del VirtualBox.</p><p>Premeu <b>D'acord</b> per iniciar el VirtualBox ara mateix o premeu <b>Surt</b> si voleu tancar el VirtualBox sense realitzar més accions.</p></translation> </message> <message> <source>hard disk</source> @@ -10224,23 +10223,23 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>VT-x/AMD-V hardware acceleration is not available on your system. Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.</source> - <translation><p>L'acceleració per maquinari VT-x/AMD-V no està disponible en el vostre sistema. El client de 64 bits fallarà en detectar un processador de 64 bits i no podrà iniciar-se.</translation> + <translation><p>L'acceleració per maquinari VT-x/AMD-V no està disponible en el vostre sistema. El client de 64 bits fallarà en detectar un processador de 64 bits i no podrà iniciar-se.</translation> </message> <message> <source><p>VT-x/AMD-V hardware acceleration is not available on your system. Certain guests (e.g. OS/2 and QNX) require this feature and will fail to boot without it.</p></source> - <translation><p>L'acceleració per maquinari VT-x/AMD-V no està disponible en el vostre sistema. Alguns clients (p.e. OS/2 i QNX) necessiten aquesta caracterÃstica i no podran iniciar-se sense ella.</p></translation> + <translation><p>L'acceleració per maquinari VT-x/AMD-V no està disponible en el vostre sistema. Alguns clients (p.e. OS/2 i QNX) necessiten aquesta caracterÃstica i no podran iniciar-se sense ella.</p></translation> </message> <message> <source><p>Deleting the snapshot %1 will temporarily need more disk space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of disk space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source> - <translation><p>L'eliminació de la captura %1 necessitarà de forma temporal més espai al disc. En el pitjor cas la mida de la imatge %2 creixerà un %3, tot i aixà en aquest sistema només hi ha %4 d'espai lliure.</p><p>Sobrepassar l'espai al disc durant l'operació d'unió pot resultar en una imatge i configuració de la mà quina virtual corrompudes, -p.e. pèrdua de la mà quina virtual i les seues dades.</p><p>Podeu continuar sota el vostre propi risc.</p></translation> + <translation><p>L'eliminació de la captura %1 necessitarà de forma temporal més espai al disc. En el pitjor cas la mida de la imatge %2 creixerà un %3, tot i aixà en aquest sistema només hi ha %4 d'espai lliure.</p><p>Sobrepassar l'espai al disc durant l'operació d'unió pot resultar en una imatge i configuració de la mà quina virtual corrompudes, -p.e. pèrdua de la mà quina virtual i les seues dades.</p><p>Podeu continuar sota el vostre propi risc.</p></translation> </message> <message> <source><p>Could not change the guest screen to this host screen due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p></source> - <translation><p>No s'ha pogut canviar la pantalla del client a aquest patalla de l'amfitrió perquè no hi ha memòria de vÃdeo suficient.</p><p>Haureu de configurar la mà quina virtual per tal que tingui un mÃnim de <b>%1</b> de memòria de vÃdeo.</p></translation> + <translation><p>No s'ha pogut canviar la pantalla del client a aquest patalla de l'amfitrió perquè no hi ha memòria de vÃdeo suficient.</p><p>Haureu de configurar la mà quina virtual per tal que tingui un mÃnim de <b>%1</b> de memòria de vÃdeo.</p></translation> </message> <message> <source><p>Could not change the guest screen to this host screen due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch the screen anyway or press <b>Cancel</b> to cancel the operation.</p></source> - <translation><p>No s'ha pogut canviar la pantalla del client a aquest patalla de l'amfitrió perquè no hi ha memòria de vÃdeo suficient.</p><p>Haureu de configurar la mà quina virtual per tal que tingui almenys <b>%1</b> de memòria de vÃdeo.</p><p>Premeu <b>Ignora</b> per canviar la pantalla de totes maneres o premeu <b>Cancel·la</b> per cancel·lar l'operació.</p></translation> + <translation><p>No s'ha pogut canviar la pantalla del client a aquest patalla de l'amfitrió perquè no hi ha memòria de vÃdeo suficient.</p><p>Haureu de configurar la mà quina virtual per tal que tingui almenys <b>%1</b> de memòria de vÃdeo.</p><p>Premeu <b>Ignora</b> per canviar la pantalla de totes maneres o premeu <b>Cancel·la</b> per cancel·lar l'operació.</p></translation> </message> <message> <source><p>Can not switch the guest display to fullscreen mode. You have more virtual screens configured than physical screens are attached to your host.</p><p>Please either lower the virtual screens in your VM configuration or attach additional screens to your host.</p></source> @@ -10252,38 +10251,38 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Could not find the VirtualBox User Manual <nobr><b>%1</b>.</nobr></p><p>Do you wish to download this file from the Internet?</p></source> - <translation><p>No s'ha pogut trobar el manual d'usuari del VirtualBox <nobr><b>%1</b>.</nobr></p><p>Voleu baixar aquest fitxer des d'Internet?</p></translation> + <translation><p>No s'ha pogut trobar el manual d'usuari del VirtualBox <nobr><b>%1</b>.</nobr></p><p>Voleu baixar aquest fitxer des d'Internet?</p></translation> </message> <message> - <source><p>Are you sure you want to download the VirtualBox User Manual from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source> - <translation><p>Segur que voleu baixar el manual d'usuari del VirtualBox des de <nobr><a href="%1">%2</a></nobr> (mida %3 bytes)?</p></translation> + <source><p>Are you sure you want to download the VirtualBox User Manual from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source> + <translation><p>Segur que voleu baixar el manual d'usuari del VirtualBox des de <nobr><a href="%1">%2</a></nobr> (mida %3 bytes)?</p></translation> </message> <message> - <source><p>Failed to download the VirtualBox User Manual from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></source> - <translation><p>Ha fallat la baixada del manual d'usuari del VirtualBox des de <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></translation> + <source><p>Failed to download the VirtualBox User Manual from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></source> + <translation><p>Ha fallat la baixada del manual d'usuari del VirtualBox des de <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></translation> </message> <message> - <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p></source> - <translation><p>S'ha baixat el manual d'usuari del VirtualBox des de <nobr><a href="%1">%2</a></nobr> i s'ha desat localment com a <nobr><b>%3</b>.</nobr></p></translation> + <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p></source> + <translation><p>S'ha baixat el manual d'usuari del VirtualBox des de <nobr><a href="%1">%2</a></nobr> i s'ha desat localment com a <nobr><b>%3</b>.</nobr></p></translation> </message> <message> - <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> but can't be saved locally as <nobr><b>%3</b>.</nobr></p><p>Please choose another location for that file.</p></source> - <translation><p>S'ha baixat el manual d'usuari del VirtualBox des de <nobr><a href="%1">%2</a></nobr> però no s'ha pogut desar localment com a <nobr><b>%3</b>.</nobr></p><p>Trieu una altra ubicació per al fitxer.</p></translation> + <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> but can't be saved locally as <nobr><b>%3</b>.</nobr></p><p>Please choose another location for that file.</p></source> + <translation><p>S'ha baixat el manual d'usuari del VirtualBox des de <nobr><a href="%1">%2</a></nobr> però no s'ha pogut desar localment com a <nobr><b>%3</b>.</nobr></p><p>Trieu una altra ubicació per al fitxer.</p></translation> </message> <message> <source>Failed to open virtual machine located in %1.</source> - <translation>No s'ha pogut obrir la mà quina virtual ubicada a %1.</translation> + <translation>No s'ha pogut obrir la mà quina virtual ubicada a %1.</translation> </message> <message> <source>Failed to add virtual machine <b>%1</b> located in <i>%2</i> because its already present.</source> - <translation>No s'ha pogut afegir una mà quina virtual <b>%1</b> ubicada a <i>%2</i> perquè ja es troba present.</translation> + <translation>No s'ha pogut afegir una mà quina virtual <b>%1</b> ubicada a <i>%2</i> perquè ja es troba present.</translation> </message> <message> <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well?</p></source> <translation><p>Ara eliminareu la mà quina virtual <b>%1</b> de la llista de mà quines.</p><p>Voleu eliminar també els fitxers que contenen la mà quina virtual al disc dur?</p></translation> </message> <message> - <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well? Doing this will also remove the files containing the machine's virtual hard disks if they are not in use by another machine.</p></source> + <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well? Doing this will also remove the files containing the machine's virtual hard disks if they are not in use by another machine.</p></source> <translation><p>Ara eliminareu la mà quina virtual <b>%1</b> de la llista de mà quines.</p><p>Voleu eliminar també els fitxers que contenen la mà quina virtual al disc dur? Fent això eliminareu tots els fitxers que conenten els discos durs virtuals de la mà quina virtual si no es fan servir per cap altra mà quina.</p></translation> </message> <message> @@ -10304,7 +10303,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>You are about to add a virtual hard disk to controller <b>%1</b>.</p><p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p></source> - <translation><p>Ara afegireu un disc dur virtual al controlador <b>%1</b>.</p><p>Voleu crear un fitxer nou i buit per emmagatzemar els continguts o seleccionar un d'existent?</p></translation> + <translation><p>Ara afegireu un disc dur virtual al controlador <b>%1</b>.</p><p>Voleu crear un fitxer nou i buit per emmagatzemar els continguts o seleccionar un d'existent?</p></translation> </message> <message> <source>Create &new disk</source> @@ -10336,43 +10335,43 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Failed to detach the hard disk (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>No s'ha pogut desconnectar el disc dur (<nobr><b>%1</b></nobr>) de la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> + <translation>No s'ha pogut desconnectar el disc dur (<nobr><b>%1</b></nobr>) de la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to detach the CD/DVD device (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>No s'ha pogut desconnectar el dispositiu CD/DVD (<nobr><b>%1</b></nobr>) de la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> + <translation>No s'ha pogut desconnectar el dispositiu CD/DVD (<nobr><b>%1</b></nobr>) de la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to detach the floppy device (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>No s'ha pogut desconnectar el disquet (<nobr><b>%1</b></nobr>) de la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> + <translation>No s'ha pogut desconnectar el disquet (<nobr><b>%1</b></nobr>) de la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> </message> <message> <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Machine</b> menu. If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p></source> - <translation type="obsolete"><p>Sembla que les Guest Additions del VirtualBox no estan disponibles en aquesta mà quina i les carpetes compartides no es poden fer servir sense elles. Per fer servir carpetes compartides a la mà quina virtual, instal·leu les Guest Additions si no es troben instal·lades o torneu a instal·lar-les si no estan funcionant correctament seleccionant <b>Instal·la les Guest Additions</b> al menú <b>Mà quina</b>. Si es troben instal·lades però la mà quina no s'ha iniciat completament, aleshores estaran disponibles una vegada estigui iniciada.</p></translation> + <translation type="obsolete"><p>Sembla que les Guest Additions del VirtualBox no estan disponibles en aquesta mà quina i les carpetes compartides no es poden fer servir sense elles. Per fer servir carpetes compartides a la mà quina virtual, instal·leu les Guest Additions si no es troben instal·lades o torneu a instal·lar-les si no estan funcionant correctament seleccionant <b>Instal·la les Guest Additions</b> al menú <b>Mà quina</b>. Si es troben instal·lades però la mà quina no s'ha iniciat completament, aleshores estaran disponibles una vegada estigui iniciada.</p></translation> </message> <message numerus="yes"> <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> <translation> - <numerusform><p>La mà quina virtual <b>%1</b> es troba en un estat desat.</p><p>Si continueu, es descartarà l'estat en temps d'execució de la mà quina virtual exportada. Tingueu en compte que la mà quina existent no canviarà .</p></numerusform> - <numerusform><p>Les mà quines virtuals <b>%1</b> es troben en un estat desat.</p><p>Si continueu, es descartaran els estat en temps d'execució de les mà quines virtuals exportades. Tingueu en compte que les mà quines existents no canviaran.</p></numerusform> - <numerusform><p>Les mà quines virtuals <b>%1</b> es troben en un estat desat.</p><p>Si continueu, es descartaran els estat en temps d'execució de les mà quines virtuals exportades. Tingueu en compte que les mà quines existents no canviaran.</p></numerusform> + <numerusform><p>La mà quina virtual <b>%1</b> es troba en un estat desat.</p><p>Si continueu, es descartarà l'estat en temps d'execució de la mà quina virtual exportada. Tingueu en compte que la mà quina existent no canviarà .</p></numerusform> + <numerusform><p>Les mà quines virtuals <b>%1</b> es troben en un estat desat.</p><p>Si continueu, es descartaran els estat en temps d'execució de les mà quines virtuals exportades. Tingueu en compte que les mà quines existents no canviaran.</p></numerusform> + <numerusform><p>Les mà quines virtuals <b>%1</b> es troben en un estat desat.</p><p>Si continueu, es descartaran els estat en temps d'execució de les mà quines virtuals exportades. Tingueu en compte que les mà quines existents no canviaran.</p></numerusform> </translation> </message> <message> <source>Failed to update Guest Additions. The Guest Additions installation image will be mounted to provide a manual installation.</source> - <translation>No s'ha pogut actualitzar les Guest Additions. Es muntarà la imatge de les Guest Additions per poder fer una instal·lació manual.</translation> + <translation>No s'ha pogut actualitzar les Guest Additions. Es muntarà la imatge de les Guest Additions per poder fer una instal·lació manual.</translation> </message> <message> <source>Failed to install the Extension Pack <b>%1</b>.</source> - <translation>No s'ha pogut instal·lar el paquet d'extensió <b>%1</b>.</translation> + <translation>No s'ha pogut instal·lar el paquet d'extensió <b>%1</b>.</translation> </message> <message> <source>Failed to uninstall the Extension Pack <b>%1</b>.</source> - <translation>No s'ha pogut desinstal·lar el paquet d'extensió <b>%1</b>.</translation> + <translation>No s'ha pogut desinstal·lar el paquet d'extensió <b>%1</b>.</translation> </message> <message> <source>You are about to remove the Extension Pack <b>%1</b>. Are you sure you want to do that?</source> - <translation type="obsolete">Ara eliminareu el paquet d'extensions <b>%1</b>. Segur que voleu fer això?</translation> + <translation type="obsolete">Ara eliminareu el paquet d'extensions <b>%1</b>. Segur que voleu fer això?</translation> </message> <message> <source>&Remove</source> @@ -10380,107 +10379,107 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>The current port forwarding rules are not valid. None of the host or guest port values may be set to zero.</source> - <translation>Les regles de redireccionament de ports actuals no són và lides. Cap dels valors de port de l'amfitrió o dels clients pot ser cero.</translation> + <translation>Les regles de redireccionament de ports actuals no són và lides. Cap dels valors de port de l'amfitrió o dels clients pot ser cero.</translation> </message> <message> <source><p>There are unsaved changes in the port forwarding configuration.</p><p>If you proceed your changes will be discarded.</p></source> - <translation><p>Hi ha canvis que no s'han desat a la configuració de redireccionament de ports.</p><p>Si procediu,es descartaran els canvis.</p></translation> + <translation><p>Hi ha canvis que no s'han desat a la configuració de redireccionament de ports.</p><p>Si procediu,es descartaran els canvis.</p></translation> </message> <message> <source>Sorry, some generic error happens.</source> - <translation>S'han produït alguns errors genèrics.</translation> + <translation>S'han produït alguns errors genèrics.</translation> </message> <message> <source>Failed to attach the hard disk (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>No s'ha pogut connectar el disc dur (<nobr><b>%1</b></nobr>) a la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> + <translation>No s'ha pogut connectar el disc dur (<nobr><b>%1</b></nobr>) a la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to attach the CD/DVD device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>No s'ha pogut connectar el dispositiu CD/DVD (<nobr><b>%1</b></nobr>) a la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> + <translation>No s'ha pogut connectar el dispositiu CD/DVD (<nobr><b>%1</b></nobr>) a la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> </message> <message> <source>Failed to attach the floppy device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation>No s'ha pogut connectar el disquet (<nobr><b>%1</b></nobr>) a la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> + <translation>No s'ha pogut connectar el disquet (<nobr><b>%1</b></nobr>) a la ranura <i>%2</i> de la mà quina <b>%3</b>.</translation> </message> <message> <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to use it later again.</p></source> - <translation type="unfinished"></translation> + <translation><p>Tingueu en compte que la unitat d'emmagatzematge d'aquest suport no s'eliminarà i, a més serà possible fer-la servir de nou més tard.</p></translation> </message> <message> <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p></source> - <translation type="unfinished"></translation> + <translation><p>Sembla que les Guest Additions del VirtualBox no estan disponibles en aquesta mà quina i les carpetes compartides no es poden fer servir sense elles. Per fer servir carpetes compartides a la mà quina virtual, instal·leu les Guest Additions si no es troben instal·lades o torneu a instal·lar-les si no estan funcionant correctament seleccionant <b>Instal·la les Guest Additions</b> al menú <b>Mà quina</b>. Si es troben instal·lades però la mà quina no s'ha iniciat completament, aleshores estaran disponibles una vegada estigui iniciada.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>La mà quina virtual passarà ara al mode de <b>pantalla completa</b>. Podeu tornar enrere prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode de pantalla completa. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>La mà quina virtual passarà ara al mode <b>fluid</b>. Podeu tornar enrere al mode finestra prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode fluid. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Scale</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in scale mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>La mà quina virtual passarà ara al mode <b>fluid</b>. Podeu tornar enrere al mode finestra prement <b>%1</b>. Tingueu en compte que la <i>tecla d'amfitrió</i> està definida actualment com <b>%2</b>.</p><p>La barra de menú estarà amagada al mode fluid. Podreu accedir a ella prement <b>tecla d'amfitrió+Home</b>.</p></translation> </message> <message> <source>Switch</source> <comment>scale</comment> - <translation type="unfinished">Canvia</translation> + <translation>Canvia</translation> </message> <message> <source>Failed to open the Extension Pack <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>No s'ha pogut instal·lar el paquet d'extensió <b>%1</b>.</translation> </message> <message> <source><p>You are about to install a VirtualBox extension pack. Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>Ara s'instal·larà un paquet d'extensió del VirtualBox. Els paquets d'extensió complementen les funcionalitats del VirtualBox i poden incloure programari a nivell de sistema que podra danyar el vostre sistema. Comproveu la descripció següent i procediu només si heu obtingut l'extensió des d'un lloc de confiança.</p><table cellpadding=0 cellspacing=0><tr><td><b>Nom:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Versió:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Descripció:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></translation> </message> <message> <source>&Install</source> - <translation type="unfinished"></translation> + <translation>&Instal·la</translation> </message> <message> <source>Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</source> - <translation type="unfinished"></translation> + <translation>Els paquets d'extensió complementen les funcionalitats del VirtualBox i poden incloure programari a nivell de sistema que podria danyar el vostre sistema. Comproveu la descripció següent i procediu només si heu obtingut el paquet d'extensió des d'un lloc de confiança.</translation> </message> <message> <source><p>An older version of the extension pack is already installed, would you like to upgrade? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>Ja hi ha una versió més antiga instal·lada del paquet d'extensió, voleu actualitzar-la? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Nom:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Versió nova:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Versió actual:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Descripció:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></translation> </message> <message> <source>&Upgrade</source> - <translation type="unfinished"></translation> + <translation>&Actualitza</translation> </message> <message> <source><p>An newer version of the extension pack is already installed, would you like to downgrade? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>Ja hi ha una versió més nova instal·lada del paquet d'extensió, voleu desactualitzar? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Nom:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Versió nova:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Versió actual:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Descripció:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></translation> </message> <message> <source>&Downgrade</source> - <translation type="unfinished"></translation> + <translation>&Desactualitza</translation> </message> <message> <source><p>The extension pack is already installed with the same version, would you like reinstall it? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%4</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>El paquet d'extensió ja es troba instal·lat amb la mateixa versió, voleu tornar-lo a instal·lar? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Nom:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Versió:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Descripció:&nbsp;&nbsp;</b></td><td>%4</td></tr></table></p></translation> </message> <message> <source>&Reinstall</source> - <translation type="unfinished"></translation> + <translation>To&rna a instal·lar</translation> </message> <message> <source><p>You are about to remove the VirtualBox extension pack <b>%1</b>.</p><p>Are you sure you want to proceed?</p></source> - <translation type="unfinished"></translation> + <translation><p>Ara s'eliminarà el paquet d'extensió del VirtualBox <b>%1</b>.</p><p>Segur que voleu procedir?</p></translation> </message> <message> <source>The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.</source> - <translation type="unfinished"></translation> + <translation>S'ha instal·lat el paquet d'extensió br><nobr><b>%1</b><nobr><br>.</translation> </message> </context> <context> <name>VBoxRegistrationDlg</name> <message> <source>Check this box if you do not want to receive mail from innotek at the e-mail address specified above.</source> - <translation type="obsolete">Marqueu aquesta casella si no voleu rebre correus d'innotek a l'adreça de correu especificada.</translation> + <translation type="obsolete">Marqueu aquesta casella si no voleu rebre correus d'innotek a l'adreça de correu especificada.</translation> </message> <message> <source>&Confirm</source> @@ -10488,7 +10487,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Connection timed out.</source> - <translation type="obsolete">S'ha superat el temps d'espera.</translation> + <translation type="obsolete">S'ha superat el temps d'espera.</translation> </message> <message> <source>Could not locate the registration form on the server (response: %1).</source> @@ -10516,7 +10515,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Please fill out this registration form to let us know that you use VirtualBox and, optionally, to keep you informed about VirtualBox news and updates.</p><p>Enter your full name using Latin characters and your e-mail address to the fields below. Please note that innotek will use this information only to gather product usage statistics and to send you VirtualBox newsletters. In particular, innotek will never pass your data to third parties. Detailed information about how we use your personal data can be found in the <b>Privacy Policy</b> section of the VirtualBox Manual or on the <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> page of the VirtualBox web-site.</p></source> - <translation type="obsolete"><p>Ompliu aquest formulari de registre per fer-nos saber que fas servir el VirtualBox i, opcionalment, per mantenir't informat sobre noves versions i actualitzacions.</p><p>Introduïu als camps següents el vostre nom complet fent servir carà cters llatins i la vostra adreça de correu. Teniu en compte que innotek farà servir aquesta informació només per recopilar estadÃstiques d'ús del producte i per informar-vos de novetats. Innotek mai no deixarà les vostres dades a terceres parts. La informació detallada de l'ús de les vostres dades podeu trobar-lo a la secció del manual de VirtualBox de <b>PolÃtica de Privacitat</b> o a la secció <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>PolÃtica de privacitat</a> de la pà gina de VirtualBox.</P></translation> + <translation type="obsolete"><p>Ompliu aquest formulari de registre per fer-nos saber que fas servir el VirtualBox i, opcionalment, per mantenir't informat sobre noves versions i actualitzacions.</p><p>Introduïu als camps següents el vostre nom complet fent servir carà cters llatins i la vostra adreça de correu. Teniu en compte que innotek farà servir aquesta informació només per recopilar estadÃstiques d'ús del producte i per informar-vos de novetats. Innotek mai no deixarà les vostres dades a terceres parts. La informació detallada de l'ús de les vostres dades podeu trobar-lo a la secció del manual de VirtualBox de <b>PolÃtica de Privacitat</b> o a la secció <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>PolÃtica de privacitat</a> de la pà gina de VirtualBox.</P></translation> </message> <message> <source>VirtualBox Registration Dialog</source> @@ -10528,15 +10527,15 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Could not perform connection handshake.</source> - <translation type="obsolete">No s'ha pogut dur a terme la conformitat de connexió.</translation> + <translation type="obsolete">No s'ha pogut dur a terme la conformitat de connexió.</translation> </message> <message> <source><p>Please fill out this registration form to let us know that you use VirtualBox and, optionally, to keep you informed about VirtualBox news and updates.</p><p>Enter your full name using Latin characters and your e-mail address to the fields below. Sun Microsystems will use this information only to gather product usage statistics and to send you VirtualBox newsletters. In particular, Sun Microsystems will never pass your data to third parties. Detailed information about how we use your personal data can be found in the <b>Privacy Policy</b> section of the VirtualBox Manual or on the <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> page of the VirtualBox web-site.</p></source> - <translation type="obsolete"><p>Ompliu aquest formulari de registre per deixar-nos conèixer que feu servir el VirtualBox i, opcionalment, per mantenir-vos informat sobre novetats i actualitzacions.</p><p>Introduïu el vostre nom complet fent servir carà cters llatins i la vostra adreça de correu electrònica als camps següents. Tingueu en compte que Sun Microsystems farà servir aquesta informació només per estadÃstiques del producte i per enviar-vos notÃcies sobre el VirtualBox. En particular, Sun Microsystems no deixarà les vostres dades a terceres parts. Podeu trobar informació detallada sobre l'ús de les dades personals a la secció <b>PolÃtica de Privacitat</b> (en anglès) del manual de VirtualBox o < l'adreça web <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>PolÃtica de Privacitat</a> (en anglès).</p></translation> + <translation type="obsolete"><p>Ompliu aquest formulari de registre per deixar-nos conèixer que feu servir el VirtualBox i, opcionalment, per mantenir-vos informat sobre novetats i actualitzacions.</p><p>Introduïu el vostre nom complet fent servir carà cters llatins i la vostra adreça de correu electrònica als camps següents. Tingueu en compte que Sun Microsystems farà servir aquesta informació només per estadÃstiques del producte i per enviar-vos notÃcies sobre el VirtualBox. En particular, Sun Microsystems no deixarà les vostres dades a terceres parts. Podeu trobar informació detallada sobre l'ús de les dades personals a la secció <b>PolÃtica de Privacitat</b> (en anglès) del manual de VirtualBox o < l'adreça web <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>PolÃtica de Privacitat</a> (en anglès).</p></translation> </message> <message> <source>Check this box if you do not want to receive mail from Sun Microsystems at the e-mail address specified above.</source> - <translation type="obsolete">Marqueu aquesta casella si no voleu rebre informació de Sun Microsystems a l'adreça que heu especificat.</translation> + <translation type="obsolete">Marqueu aquesta casella si no voleu rebre informació de Sun Microsystems a l'adreça que heu especificat.</translation> </message> <message> <source>C&onfirm</source> @@ -10552,7 +10551,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source><p>Please fill out this registration form to let us know that you use VirtualBox and, optionally, to keep you informed about VirtualBox news and updates.</p><p>Please use Latin characters only to fill in the fields below. Sun Microsystems will use this information only to gather product usage statistics and to send you VirtualBox newsletters. In particular, Sun Microsystems will never pass your data to third parties. Detailed information about how we use your personal data can be found in the <b>Privacy Policy</b> section of the VirtualBox Manual or on the <a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> page of the VirtualBox web-site.</p></source> - <translation type="obsolete"><p>Ompliu aquest formulari de registre per permetre'ns conèixer que feu servir el VirtualBox i, opcionalment, mantenir-vos informat sobre novetats i actualitzacions del VirtualBox.</p><p>Feu servir carà cters llatins per omplir els camps següents. Tingueu en compte que Sun Microsystems farà servir aquesta informació només per a usos estadÃstics i per enviar-vos notÃcies sobre el VirtualBox. Sun Microsystems mai compartirà les vostres dades amb terceres parts. Més informació detallada sobre l'ús de les vostres dades personals poden trobar-se a la secció de <b>PolÃtica de privacitat</b> al manual de VirtualBox o al<a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> lloc web del VirtualBox.</p></translation> + <translation type="obsolete"><p>Ompliu aquest formulari de registre per permetre'ns conèixer que feu servir el VirtualBox i, opcionalment, mantenir-vos informat sobre novetats i actualitzacions del VirtualBox.</p><p>Feu servir carà cters llatins per omplir els camps següents. Tingueu en compte que Sun Microsystems farà servir aquesta informació només per a usos estadÃstics i per enviar-vos notÃcies sobre el VirtualBox. Sun Microsystems mai compartirà les vostres dades amb terceres parts. Més informació detallada sobre l'ús de les vostres dades personals poden trobar-se a la secció de <b>PolÃtica de privacitat</b> al manual de VirtualBox o al<a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a> lloc web del VirtualBox.</p></translation> </message> <message> <source>I &already have a Sun Online account:</source> @@ -10615,7 +10614,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>&OK</source> - <translation type="obsolete">D'ac&ord</translation> + <translation type="obsolete">D'ac&ord</translation> </message> <message> <source>Shared Folders</source> @@ -10649,7 +10648,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Close application</source> - <translation>Tanca l'aplicació</translation> + <translation>Tanca l'aplicació</translation> </message> <message> <source>Configure the selected virtual machine</source> @@ -10725,7 +10724,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Discard the saved state of the selected virtual machine</source> - <translation>Descarta l'estat desat de la mà quina virtual seleccionada</translation> + <translation>Descarta l'estat desat de la mà quina virtual seleccionada</translation> </message> <message> <source>Display the global settings dialog</source> @@ -10748,8 +10747,8 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati <translation type="obsolete">&Fitxer</translation> </message> <message> - <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> - <translation type="obsolete"><h3>Benvinguts a VirtualBox!</h3><p>A la part esquerra d'aquesta finestra es mostra un llistat de totes les mà quines virtuals a l'ordinador. Aquest llistat és buit actualment perquè encara no heu creat cap mà quina virtual.<img src=welcome.png align=right/></p><p>Per crear una nova mà quina virtual, premeu sobre el botó <b>Nova</b> a la barra principal que es troba a la part de dalt d'aquesta finestra.</p><p>Podeu prémer la tecla <b>%1</b> per obtenir ajuda o bé visitar <a href=http://www.virtualbox.org>www.virtualbox.org</a> per veure altra informació i novetats.</p></translation> + <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> + <translation type="obsolete"><h3>Benvinguts a VirtualBox!</h3><p>A la part esquerra d'aquesta finestra es mostra un llistat de totes les mà quines virtuals a l'ordinador. Aquest llistat és buit actualment perquè encara no heu creat cap mà quina virtual.<img src=welcome.png align=right/></p><p>Per crear una nova mà quina virtual, premeu sobre el botó <b>Nova</b> a la barra principal que es troba a la part de dalt d'aquesta finestra.</p><p>Podeu prémer la tecla <b>%1</b> per obtenir ajuda o bé visitar <a href=http://www.virtualbox.org>www.virtualbox.org</a> per veure altra informació i novetats.</p></translation> </message> <message> <source>&Help</source> @@ -10794,7 +10793,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Refresh the accessibility state of the selected virtual machine</source> - <translation>Actualitza l'estat d'accessibilitat de la mà quina virtual seleccionada</translation> + <translation>Actualitza l'estat d'accessibilitat de la mà quina virtual seleccionada</translation> </message> <message> <source>R&egister VirtualBox...</source> @@ -10838,7 +10837,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Show the online help contents</source> - <translation type="obsolete">Mostra els continguts d'ajuda en lÃnia</translation> + <translation type="obsolete">Mostra els continguts d'ajuda en lÃnia</translation> </message> <message> <source>&Snapshots</source> @@ -10886,7 +10885,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Resume the execution of the virtual machine</source> - <translation>Reprèn l'execució de la mà quina virtual</translation> + <translation>Reprèn l'execució de la mà quina virtual</translation> </message> <message> <source>&Pause</source> @@ -10898,11 +10897,11 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Suspend the execution of the virtual machine</source> - <translation>Suspèn l'execució de la mà quina virtual</translation> + <translation>Suspèn l'execució de la mà quina virtual</translation> </message> <message> - <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> - <translation><h3>Benvingut a VirtualBox!</h3><p>A la part esquerra d'aquesta finestra es mostra un llistat de totes les mà quines virtuals a l'ordinador. Aquest llistat és buit actualment perquè encara no heu creat cap mà quina virtual.<img src=:/welcome.png align=right/></p><p>Per crear una nova mà quina virtual, premeu sobre el botó <b>Nova</b> a la barra principal que es troba a la part de dalt d'aquesta finestra.</p><p>Podeu prémer la tecla <b>%1</b> per obtenir ajuda o bé visitar <a href=http://www.virtualbox.org>www.virtualbox.org</a> per veure altra informació i novetats.</p></translation> + <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> + <translation><h3>Benvingut a VirtualBox!</h3><p>A la part esquerra d'aquesta finestra es mostra un llistat de totes les mà quines virtuals a l'ordinador. Aquest llistat és buit actualment perquè encara no heu creat cap mà quina virtual.<img src=:/welcome.png align=right/></p><p>Per crear una nova mà quina virtual, premeu sobre el botó <b>Nova</b> a la barra principal que es troba a la part de dalt d'aquesta finestra.</p><p>Podeu prémer la tecla <b>%1</b> per obtenir ajuda o bé visitar <a href=http://www.virtualbox.org>www.virtualbox.org</a> per veure altra informació i novetats.</p></translation> </message> <message> <source>&Virtual Media Manager...</source> @@ -10930,7 +10929,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Export one or more VirtualBox virtual machines as an appliance</source> - <translation>Exporta una aplicació virtual d'una mà quina virtual del VirtualBox</translation> + <translation>Exporta una aplicació virtual d'una mà quina virtual del VirtualBox</translation> </message> <message> <source>Re&fresh</source> @@ -10989,7 +10988,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Create Alias on Desktop</source> - <translation>Crea un à lies a l'escriptori</translation> + <translation>Crea un à lies a l'escriptori</translation> </message> <message> <source>Creates an Alias file to the VirtualBox Machine Definition file on your Desktop.</source> @@ -10997,15 +10996,15 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Show in Explorer</source> - <translation>Mostra a l'Explorer</translation> + <translation>Mostra a l'Explorer</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in Explorer.</source> - <translation>Mostra el fitxer de definició de la mà quina VirtualBox a l'Explorer.</translation> + <translation>Mostra el fitxer de definició de la mà quina VirtualBox a l'Explorer.</translation> </message> <message> <source>Create Shortcut on Desktop</source> - <translation>Crea una drecera a l'escriptori</translation> + <translation>Crea una drecera a l'escriptori</translation> </message> <message> <source>Creates an Shortcut file to the VirtualBox Machine Definition file on your Desktop.</source> @@ -11021,18 +11020,18 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Show Toolbar</source> - <translation>Mostra la barra d'eines</translation> + <translation>Mostra la barra d'eines</translation> </message> <message> <source>Show Statusbar</source> - <translation>Mostra la barra d'estat</translation> + <translation>Mostra la barra d'estat</translation> </message> </context> <context> <name>VBoxSettingsDialog</name> <message> <source><i>Select a settings category from the list on the left-hand side and move the mouse over a settings item to get more information</i>.</source> - <translation type="obsolete"><i>Seleccioneu una categoria de parà metres en la llista de l'esquerra i deplaceu el punter sobre un element de la dreta per obtenir-ne més informació</i>.</translation> + <translation type="obsolete"><i>Seleccioneu una categoria de parà metres en la llista de l'esquerra i deplaceu el punter sobre un element de la dreta per obtenir-ne més informació</i>.</translation> </message> <message> <source>On the <b>%1</b> page, %2</source> @@ -11040,7 +11039,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Invalid settings detected</source> - <translation type="obsolete">S'han detectat parà metres no và lids</translation> + <translation type="obsolete">S'han detectat parà metres no và lids</translation> </message> <message> <source>Settings</source> @@ -11048,7 +11047,7 @@ un disc dur per connectar a la ranura remarcada actualment.</a></translati </message> <message> <source>Non-optimal settings detected</source> - <translation type="obsolete">No s'han seleccionat els parà metres òptims</translation> + <translation type="obsolete">No s'han seleccionat els parà metres òptims</translation> </message> </context> <context> @@ -11103,8 +11102,8 @@ to access it from a Linux OS. This feature requires Guest Additions.</qt>< <translation type="obsolete"><qt>Mostra totes les carpetes accessibles a aquesta mà quina. Feu servir: <tt>net use x: \\vboxsvr\share</tt> -per accedir a la carpeta anomenada <i>share</i> des d'un sistema tipus DOS, o -per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requereix Guest Additions.</qt></translation> +per accedir a la carpeta anomenada <i>share</i> des d'un sistema tipus DOS, o +per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requereix Guest Additions.</qt></translation> </message> <message> <source>Removes the selected shared folder definition.</source> @@ -11128,7 +11127,7 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei </message> <message> <source>VBoxSharedFoldersSettings</source> - <comment>don't translate</comment> + <comment>don't translate</comment> <translation type="obsolete">VBoxSharedFoldersSettings</translation> </message> <message> @@ -11184,7 +11183,7 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei </message> <message> <source>&OK</source> - <translation type="obsolete">&D'acord</translation> + <translation type="obsolete">&D'acord</translation> </message> <message> <source> Snapshot Details </source> @@ -11263,11 +11262,11 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei </message> <message> <source>D&iscard Current Snapshot and State</source> - <translation type="obsolete">D&escarta la captura i l'estat actuals</translation> + <translation type="obsolete">D&escarta la captura i l'estat actuals</translation> </message> <message> <source>Discard Current Snapshot and State</source> - <translation type="obsolete">Descarta la captura i l'estat actual</translation> + <translation type="obsolete">Descarta la captura i l'estat actual</translation> </message> <message> <source>Discard Snapshot</source> @@ -11279,7 +11278,7 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei </message> <message> <source>Discard the current snapshot and revert the machine to the state it had before the snapshot was taken</source> - <translation type="obsolete">Descarta la captura actual i torna la mà quina a l'estat en què es trobava abans que s'hagués fet</translation> + <translation type="obsolete">Descarta la captura actual i torna la mà quina a l'estat en què es trobava abans que s'hagués fet</translation> </message> <message> <source>Discard the selected snapshot of the virtual machine</source> @@ -11297,7 +11296,7 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei </message> <message> <source>Restore the virtual machine state from the state stored in the current snapshot</source> - <translation type="obsolete">Restaura l'estat de la mà quina virtual des de l'estat emmagatzemat a la captura actual</translation> + <translation type="obsolete">Restaura l'estat de la mà quina virtual des de l'estat emmagatzemat a la captura actual</translation> </message> <message> <source>Revert to Current Snapshot</source> @@ -11337,7 +11336,7 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei </message> <message> <source>Take a snapshot of the current virtual machine state</source> - <translation>Fes una captura de l'estat actual de la mà quina virtual</translation> + <translation>Fes una captura de l'estat actual de la mà quina virtual</translation> </message> <message> <source>Taken at %1</source> @@ -11359,11 +11358,11 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei </message> <message> <source>The current state differs from the state stored in the current snapshot</source> - <translation>L'estat actual difereix de l'estat emmagatzemat a la captura actual</translation> + <translation>L'estat actual difereix de l'estat emmagatzemat a la captura actual</translation> </message> <message> <source>The current state is identical to the state stored in the current snapshot</source> - <translation>L'estat actual és idèntic a l'estat emmagatzemat a la captura actual</translation> + <translation>L'estat actual és idèntic a l'estat emmagatzemat a la captura actual</translation> </message> <message> <source>VBoxSnapshotsWgt</source> @@ -11461,7 +11460,7 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei </message> <message> <source>&OK</source> - <translation type="obsolete">&D'acord</translation> + <translation type="obsolete">&D'acord</translation> </message> <message> <source>Snapshot &Description</source> @@ -11478,9 +11477,9 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei <message numerus="yes"> <source>Warning: You are taking a snapshot of a running machine which has %n immutable image(s) attached to it. As long as you are working from this snapshot the immutable image(s) will not be reset to avoid loss of data.</source> <translation> - <numerusform>AvÃs: esteu fent una captura d'una mà quina que té %n imatge immutable connectada. Mentre treballeu amb aquesta captura, la imatge immutable no es reiniciarà per evitar la pèrdua de dades.</numerusform> - <numerusform>AvÃs: esteu fent una captura d'una mà quina que té %n imatge immutables connectades. Mentre treballeu amb aquesta captura, les imatges immutables no es reiniciaran per evitar la pèrdua de dades.</numerusform> - <numerusform>AvÃs: esteu fent una captura d'una mà quina que té %n imatge immutables connectades. Mentre treballeu amb aquesta captura, les imatges immutables no es reiniciaran per evitar la pèrdua de dades.</numerusform> + <numerusform>AvÃs: esteu fent una captura d'una mà quina que té %n imatge immutable connectada. Mentre treballeu amb aquesta captura, la imatge immutable no es reiniciarà per evitar la pèrdua de dades.</numerusform> + <numerusform>AvÃs: esteu fent una captura d'una mà quina que té %n imatge immutables connectades. Mentre treballeu amb aquesta captura, les imatges immutables no es reiniciaran per evitar la pèrdua de dades.</numerusform> + <numerusform>AvÃs: esteu fent una captura d'una mà quina que té %n imatge immutables connectades. Mentre treballeu amb aquesta captura, les imatges immutables no es reiniciaran per evitar la pèrdua de dades.</numerusform> </translation> </message> </context> @@ -11576,7 +11575,7 @@ per accedir a ella des d'un sistema Linux. Aquesta caracterÃstica requerei computer when a matching device is attached: give it up to the host OS (<i>Ignore</i>) or grab it for later usage by virtual machines (<i>Hold</i>).</qt></source> - <translation type="obsolete"><qt>Defineix una acció duta a terme per l'amfitrió + <translation type="obsolete"><qt>Defineix una acció duta a terme per l'amfitrió quan es conneca un dispositiu: activa-lo al sistema amfitrió (<i>Ignora</i>) o registra-ho per fer-lo servir després per les mà quines virtuals (<i>Manté</i>).</qt></translation> @@ -11585,7 +11584,7 @@ virtuals (<i>Manté</i>).</qt></translation> <source><qt>Defines the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</qt></source> - <translation type="obsolete"><qt>Defineix el filtre del port USB de l'amfitrió com una + <translation type="obsolete"><qt>Defineix el filtre del port USB de l'amfitrió com una cadena de <i>seqüència exacta</i>. Una cadena buida no tindrà cap valor.</qt></translation> </message> @@ -11602,7 +11601,7 @@ tindrà cap valor.</qt></translation> <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</qt></source> - <translation type="obsolete"><qt>Defineix l'ID del filtre del producte. El + <translation type="obsolete"><qt>Defineix l'ID del filtre del producte. El format de la cadena de <i>seqüència exacta</i> és <tt>XXXX</tt> a on <tt>X</tt> és un dÃgit hexadecimal. Una cadena buida no tindrà cap valor.</qt></translation> @@ -11623,7 +11622,7 @@ value.</qt></source> <translation type="obsolete"><qt>Defineix el número de revisió del producte. El format de la cadena de <i>seqüència exacta</i> és <tt>IIFF</tt> a on <tt>I</tt> és un dÃgit decimal de la part entera i <tt>F</tt> -és un dÃgit decimal d'una part de fracció. Una cadena buida no +és un dÃgit decimal d'una part de fracció. Una cadena buida no tindrà cap valor.</qt></translation> </message> <message> @@ -11639,7 +11638,7 @@ tindrà cap valor.</qt></translation> <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</qt></source> - <translation type="obsolete"><qt>Defineix l'ID del venedor del producte. El + <translation type="obsolete"><qt>Defineix l'ID del venedor del producte. El format de la cadena de <i>seqüència exacta</i> és <tt>XXXX</tt> a on <tt>X</tt> és un dÃgit hexadecimal. Una cadena buida no tindrà cap valor.</qt></translation> @@ -11647,10 +11646,10 @@ tindrà cap valor.</qt></translation> <message> <source><qt>Defines whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), -to a VRDP client's computer (<i>Yes</i>), +to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</qt></source> - <translation type="obsolete"><qt>Defineix on s'aplica aquest filtre -als dispositius USB connectats localment a l'amfitrió (<i>No</i>), + <translation type="obsolete"><qt>Defineix on s'aplica aquest filtre +als dispositius USB connectats localment a l'amfitrió (<i>No</i>), al VRDP de la computadora client (<i>SÃ</i>), o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> @@ -11668,7 +11667,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>VBoxUSBFilterSettings</source> - <comment>don't translate</comment> + <comment>don't translate</comment> <translation type="obsolete">VBoxUSBFilterSettings</translation> </message> <message> @@ -11691,7 +11690,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> <message> <source>No supported devices connected to the host PC</source> <comment>USB device tooltip</comment> - <translation>No hi ha dispositius suportats connectats a l'ordinador amfitrió</translation> + <translation>No hi ha dispositius suportats connectats a l'ordinador amfitrió</translation> </message> </context> <context> @@ -11742,7 +11741,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Connection timed out.</source> - <translation type="obsolete">S'ha excedit el temps d'espera de la connexió.</translation> + <translation type="obsolete">S'ha excedit el temps d'espera de la connexió.</translation> </message> <message> <source>Could not locate the latest version list on the server (response: %1).</source> @@ -11758,7 +11757,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>VirtualBox Update Wizard</source> - <translation>Auxiliar d'acutliatzació del VirtualBox</translation> + <translation>Auxiliar d'acutliatzació del VirtualBox</translation> </message> <message> <source>Check for Updates</source> @@ -11770,7 +11769,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> <p>You can run this wizard at any time by choosing <b>Check for Updates...</b> from the <b>Help</b> menu.</p></source> <translation type="obsolete"><p>Aquest assistent connectarà amb el lloc web del VirtualBox i comprovarà si hi ha una versió més nova de VirtualBox.</p> <p>Feu servir el botó <b>Comprova</b> per comprovar ara si hi ha noves versions o <b>Cancel·la</b> si no voleu comprovar ara si hi ha noves versions.</p> -<p>Podeu iniciar aquest assistent en qualsevol moment seleccionant <b>Comprova si hi ha actualitzacions...</b> al menú d'<b>Ajuda</b>.</p></translation> +<p>Podeu iniciar aquest assistent en qualsevol moment seleccionant <b>Comprova si hi ha actualitzacions...</b> al menú d'<b>Ajuda</b>.</p></translation> </message> <message> <source>Cancel</source> @@ -11781,8 +11780,8 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> <translation>Resum</translation> </message> <message> - <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source> - <translation><b>S'ha publicat una nova versió del VirtualBox! La versió <b>%1</b> és disponible a <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>Podeu baixar-la directament des d'aquest enllaç: </p><p><a href=%2>%3</a></p></translation> + <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source> + <translation><b>S'ha publicat una nova versió del VirtualBox! La versió <b>%1</b> és disponible a <a href="http://www.virtualbox.org/">virtualbox.org</a>.</p><p>Podeu baixar-la directament des d'aquest enllaç: </p><p><a href=%2>%3</a></p></translation> </message> <message> <source><p>Unable to obtain the new version information due to the following network error:</p><p><b>%1</b></p></source> @@ -11794,7 +11793,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source><p>This wizard will connect to the VirtualBox web-site and check if a newer version of VirtualBox is available.</p><p>Use the <b>Check</b> button to check for a new version now or the <b>Cancel</b> button if you do not want to perform this check.</p><p>You can run this wizard at any time by choosing <b>Check for Updates...</b> from the <b>Help</b> menu.</p></source> - <translation><p>Aquest auxiliar connectarà amb el lloc web del VirtualBox i comprovarà si hi ha una versió més nova del VirtualBox.<p></p>Feu servir el botó <b>Comprova</b> per comprovar ara si hi ha noves versions o <b>Cancel·la</b> si no voleu comprovar ara si hi ha noves versions. Podeu iniciar aquest auxiliar en qualsevol moment seleccionant <b>Comprova si hi ha actualitzacions...</b> al menú d'<b>Ajuda</b>.</p></translation> + <translation><p>Aquest auxiliar connectarà amb el lloc web del VirtualBox i comprovarà si hi ha una versió més nova del VirtualBox.<p></p>Feu servir el botó <b>Comprova</b> per comprovar ara si hi ha noves versions o <b>Cancel·la</b> si no voleu comprovar ara si hi ha noves versions. Podeu iniciar aquest auxiliar en qualsevol moment seleccionant <b>Comprova si hi ha actualitzacions...</b> al menú d'<b>Ajuda</b>.</p></translation> </message> </context> <context> @@ -11820,7 +11819,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> <name>VBoxVMDetailsView</name> <message> <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source> - <translation type="obsolete"><i>No es pot accedir</i> a la mà quina virtual seleccionada. Comproveu el missatge d'error que es mostra i premeu el botó <b>Actualitza</b> si voleu tornar a comprovar l'accessibilitat:</translation> + <translation type="obsolete"><i>No es pot accedir</i> a la mà quina virtual seleccionada. Comproveu el missatge d'error que es mostra i premeu el botó <b>Actualitza</b> si voleu tornar a comprovar l'accessibilitat:</translation> </message> </context> <context> @@ -11843,7 +11842,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>&Runtime</source> - <translation>&Temps d'execució</translation> + <translation>&Temps d'execució</translation> </message> <message> <source>DMA Transfers</source> @@ -11879,7 +11878,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Runtime Attributes</source> - <translation>Atributs del temps d'execució</translation> + <translation>Atributs del temps d'execució</translation> </message> <message> <source>Screen Resolution</source> @@ -11895,7 +11894,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Network Adapter Statistics</source> - <translation type="obsolete">EstadÃstiques de l'adaptador de xarxa</translation> + <translation type="obsolete">EstadÃstiques de l'adaptador de xarxa</translation> </message> <message> <source>Adapter 1</source> @@ -11997,11 +11996,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Storage Statistics</source> - <translation>EstadÃstiques d'emmagatzematge</translation> + <translation>EstadÃstiques d'emmagatzematge</translation> </message> <message> <source>No Storage Devices</source> - <translation>No hi ha cap dispositiu d'emmagatzematge</translation> + <translation>No hi ha cap dispositiu d'emmagatzematge</translation> </message> <message> <source>Network Statistics</source> @@ -12022,7 +12021,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> <name>VBoxVMListBox</name> <message> <source>Inaccessible</source> - <translation type="obsolete">No s'hi pot accedir</translation> + <translation type="obsolete">No s'hi pot accedir</translation> </message> <message> <source><nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr></source> @@ -12063,7 +12062,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source><p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p></source> - <translation><p>No s'ha trobat cap fitxer de registre. Premeu el botó <b>Actualitza</b> per tornar a escanejar la carpeta de registre <nobr><b>%1</b></nobr>.</p></translation> + <translation><p>No s'ha trobat cap fitxer de registre. Premeu el botó <b>Actualitza</b> per tornar a escanejar la carpeta de registre <nobr><b>%1</b></nobr>.</p></translation> </message> <message> <source>&Refresh</source> @@ -12094,19 +12093,19 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Displays the command executed to set up the TAP interface.</source> - <translation type="obsolete">Mostra l'ordre executada per engegar l'interfÃcie TAP.</translation> + <translation type="obsolete">Mostra l'ordre executada per engegar l'interfÃcie TAP.</translation> </message> <message> <source>Displays the command executed to terminate the TAP interface.</source> - <translation type="obsolete">Mostra l'ordre exexutada per tancar la interfÃcie TAP.</translation> + <translation type="obsolete">Mostra l'ordre exexutada per tancar la interfÃcie TAP.</translation> </message> <message> <source>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source> - <translation type="obsolete">Mostra l'adreça MAC d'aquest adaptador. Conté exactament 12 carà cters compresos entre {0-9,A-F}. Tingueu en compte que el segon carà cter ha d'éser un dÃgit.</translation> + <translation type="obsolete">Mostra l'adreça MAC d'aquest adaptador. Conté exactament 12 carà cters compresos entre {0-9,A-F}. Tingueu en compte que el segon carà cter ha d'éser un dÃgit.</translation> </message> <message> <source>Displays the name of the host interface selected for this adapter.</source> - <translation type="obsolete">Mostra el nom de la interfÃcie seleccionada de l'amfitrió per a aquest adaptador.</translation> + <translation type="obsolete">Mostra el nom de la interfÃcie seleccionada de l'amfitrió per a aquest adaptador.</translation> </message> <message> <source>Displays the TAP interface name.</source> @@ -12114,7 +12113,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>&Enable Network Adapter</source> - <translation type="obsolete">Habilita l'adaptador d&e xarxa</translation> + <translation type="obsolete">Habilita l'adaptador d&e xarxa</translation> </message> <message> <source>&File Descriptor</source> @@ -12130,11 +12129,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Host Interface Settings</source> - <translation type="obsolete">Parà metres de la interfÃcie de l'amfitrió</translation> + <translation type="obsolete">Parà metres de la interfÃcie de l'amfitrió</translation> </message> <message> <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source> - <translation type="obsolete">Indica si el cable de la xarxa virtual està connectat a l'inici de la mà quina virtual o no.</translation> + <translation type="obsolete">Indica si el cable de la xarxa virtual està connectat a l'inici de la mà quina virtual o no.</translation> </message> <message> <source>&Interface Name</source> @@ -12150,27 +12149,27 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Selects the setup application.</source> - <translation type="obsolete">Selecciona l'aplicació de configuració.</translation> + <translation type="obsolete">Selecciona l'aplicació de configuració.</translation> </message> <message> <source>Selects the terminate application.</source> - <translation type="obsolete">Selecciona l'aplicació de finalització.</translation> + <translation type="obsolete">Selecciona l'aplicació de finalització.</translation> </message> <message> <source>Select TAP setup application</source> - <translation type="obsolete">Selecciona l'aplicació de configuració de TAP</translation> + <translation type="obsolete">Selecciona l'aplicació de configuració de TAP</translation> </message> <message> <source>Select TAP terminate application</source> - <translation type="obsolete">Selecciona l'aplicació de finalització de TAP</translation> + <translation type="obsolete">Selecciona l'aplicació de finalització de TAP</translation> </message> <message> <source>&Setup Application</source> - <translation type="obsolete">&Configura l'aplicació</translation> + <translation type="obsolete">&Configura l'aplicació</translation> </message> <message> <source>&Terminate Application</source> - <translation type="obsolete">Finali&tza l'aplicació</translation> + <translation type="obsolete">Finali&tza l'aplicació</translation> </message> <message> <source>VBoxVMNetworkSettings</source> @@ -12178,7 +12177,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>When checked, plugs this virtual network adapter into the virtual machine.</source> - <translation type="obsolete">Quan estigui marcat, s'activarà aquest adaptador de xarxa virtual a dins de la mà quina virtual.</translation> + <translation type="obsolete">Quan estigui marcat, s'activarà aquest adaptador de xarxa virtual a dins de la mà quina virtual.</translation> </message> <message> <source>&Network Name</source> @@ -12186,11 +12185,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Adapter &Type</source> - <translation type="obsolete">&Tipus d'Adaptador</translation> + <translation type="obsolete">&Tipus d'Adaptador</translation> </message> <message> <source>Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine.</source> - <translation type="obsolete">Selecciona el tipus d'adaptador de xarxa virtual. Segons el valor, VirtualBox proveirà diferent maquinari de xarxa per a la mà quina virtual.</translation> + <translation type="obsolete">Selecciona el tipus d'adaptador de xarxa virtual. Segons el valor, VirtualBox proveirà diferent maquinari de xarxa per a la mà quina virtual.</translation> </message> <message> <source>Displays the name of the internal network selected for this adapter.</source> @@ -12209,7 +12208,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>When checked, enables the given parallel port of the virtual machine.</source> - <translation type="obsolete">Quan estigui marcat, s'habilitarà el port paral·lel de la mà quina virtual.</translation> + <translation type="obsolete">Quan estigui marcat, s'habilitarà el port paral·lel de la mà quina virtual.</translation> </message> <message> <source>Port &Number</source> @@ -12217,7 +12216,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Displays the parallel port number. You can choose one of the standard parallel ports or select <b>User-defined</b> and specify port parameters manually.</source> - <translation type="obsolete">Mostra el número del port parà l·lel. Podeu triar un dels ports paral·lels està ndards o seleccionar <b>Definit per l'usuari</b> i especificar els parà metres manualment.</translation> + <translation type="obsolete">Mostra el número del port parà l·lel. Podeu triar un dels ports paral·lels està ndards o seleccionar <b>Definit per l'usuari</b> i especificar els parà metres manualment.</translation> </message> <message> <source>&IRQ</source> @@ -12233,7 +12232,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Displays the base I/O port address of this parallel port. This should be a whole number between <tt>0</tt> and <tt>0xFFFF</tt>.</source> - <translation type="obsolete">Mostra l'adreça base del port E/S per a aquest port paral·lel. Valors và lids són nombres enters en un rang des de <tt>0</tt> fins <tt>0xFFFF</tt>.</translation> + <translation type="obsolete">Mostra l'adreça base del port E/S per a aquest port paral·lel. Valors và lids són nombres enters en un rang des de <tt>0</tt> fins <tt>0xFFFF</tt>.</translation> </message> <message> <source>Port &Path</source> @@ -12248,7 +12247,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> <name>VBoxVMSerialPortSettings</name> <message> <source>Controls the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source> - <translation type="obsolete">Controla el mode de treball d'aquest port sèrie. Si seleccioneu <b>Desconnectat</b>, el sistema client detectarà el port sèrie però no podrà operar amb ell.</translation> + <translation type="obsolete">Controla el mode de treball d'aquest port sèrie. Si seleccioneu <b>Desconnectat</b>, el sistema client detectarà el port sèrie però no podrà operar amb ell.</translation> </message> <message> <source>&Create Pipe</source> @@ -12256,19 +12255,19 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Displays the base I/O port address of this serial port. This should be a whole number between <tt>0</tt> and <tt>0xFFFF</tt>.</source> - <translation type="obsolete">Mostra l'adreça base del port d'E/S d'aquest port sèrie. Valors và lids són nombres enters del rang des de <tt>0</tt> fins <tt>0xFFFF</tt>.</translation> + <translation type="obsolete">Mostra l'adreça base del port d'E/S d'aquest port sèrie. Valors và lids són nombres enters del rang des de <tt>0</tt> fins <tt>0xFFFF</tt>.</translation> </message> <message> <source>Displays the IRQ number of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>255</tt>. Values greater than <tt>15</tt> may only be used if the <b>IO APIC</b> is enabled for this virtual machine.</source> - <translation type="obsolete">Mostra el número IRQ d'aquest port sèrie. Valors và lids són nombres enters del rang des de <tt>0</tt> fins <tt>255</tt>. Valors més grans que <tt>15</tt> només s'han de fer servir només si l'<b>IO APIC</b> és actiu per a aquesta mà quina virtual.</translation> + <translation type="obsolete">Mostra el número IRQ d'aquest port sèrie. Valors và lids són nombres enters del rang des de <tt>0</tt> fins <tt>255</tt>. Valors més grans que <tt>15</tt> només s'han de fer servir només si l'<b>IO APIC</b> és actiu per a aquesta mà quina virtual.</translation> </message> <message> - <source>Displays the path to the serial port's pipe on the host when the port is working in <b>Host Pipe</b> mode, or the host serial device name when the port is working in <b>Host Device</b> mode.</source> - <translation type="obsolete">Mostra la ruta al conducte del port sèrie a l'amfitrió quan el port treballa en el mode <b>Conducte Amfitrió</b>, o al dispositiu sèrie de l'amfitrió quan el port treballa en el mode <b>Dispositiu Amfitrió</b>.</translation> + <source>Displays the path to the serial port's pipe on the host when the port is working in <b>Host Pipe</b> mode, or the host serial device name when the port is working in <b>Host Device</b> mode.</source> + <translation type="obsolete">Mostra la ruta al conducte del port sèrie a l'amfitrió quan el port treballa en el mode <b>Conducte Amfitrió</b>, o al dispositiu sèrie de l'amfitrió quan el port treballa en el mode <b>Dispositiu Amfitrió</b>.</translation> </message> <message> <source>Displays the serial port number. You can choose one of the standard serial ports or select <b>User-defined</b> and specify port parameters manually.</source> - <translation type="obsolete">Mostra el número del port sèrie. Podeu triar un dels ports sèrie està ndards o bé seleccionar <b>Definit per l'usuari</b> i especificar els parà metres manualment.</translation> + <translation type="obsolete">Mostra el número del port sèrie. Podeu triar un dels ports sèrie està ndards o bé seleccionar <b>Definit per l'usuari</b> i especificar els parà metres manualment.</translation> </message> <message> <source>&Enable Serial Port</source> @@ -12276,7 +12275,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>If checked, the pipe specified in the <b>Port Path</b> field will be created by the virtual machine when it starts. Otherwise, the virtual machine will assume that the pipe exists and try to use it.</source> - <translation type="obsolete">Si està marcat, el conducte especificat al camp <b>Ruta del Port</b> es crearà per la mà quina virtual quan s'iniciï. En altre cas, la mà quina virtual provarà de fer servir el conducte existent.</translation> + <translation type="obsolete">Si està marcat, el conducte especificat al camp <b>Ruta del Port</b> es crearà per la mà quina virtual quan s'iniciï. En altre cas, la mà quina virtual provarà de fer servir el conducte existent.</translation> </message> <message> <source>I/O Po&rt</source> @@ -12304,18 +12303,18 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>When checked, enables the given serial port of the virtual machine.</source> - <translation type="obsolete">Quan estigui marcat, s'habilitarà el port sèrie a la mà quina virtual.</translation> + <translation type="obsolete">Quan estigui marcat, s'habilitarà el port sèrie a la mà quina virtual.</translation> </message> </context> <context> <name>VBoxVMSettingsCD</name> <message> <source>Host CD/DVD drive is not selected</source> - <translation type="obsolete">No s'ha seleccionat cap controlador de CD/DVD a l'amfitrió</translation> + <translation type="obsolete">No s'ha seleccionat cap controlador de CD/DVD a l'amfitrió</translation> </message> <message> <source>CD/DVD image file is not selected</source> - <translation type="obsolete">No s'ha seleccionat cap imatge de CD/DVD</translation> + <translation type="obsolete">No s'ha seleccionat cap imatge de CD/DVD</translation> </message> <message> <source>When checked, mounts the specified media to the CD/DVD drive of the virtual machine. Note that the CD/DVD drive is always connected to the Secondary Master IDE controller of the machine.</source> @@ -12331,7 +12330,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Host CD/DVD &Drive</source> - <translation type="obsolete">Controla&dor de CD/DVD de l'amfitrió</translation> + <translation type="obsolete">Controla&dor de CD/DVD de l'amfitrió</translation> </message> <message> <source>Lists host CD/DVD drives available to mount to the virtual machine.</source> @@ -12339,7 +12338,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>When checked, allows the guest to send ATAPI commands directly to the host drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source> - <translation type="obsolete">Quan estigui marcat, es permetrà al client enviar ordres ATAPI directament al controlador amfitrió, cosa que permetrà fer servir lectors de CD/DVD de l'amfitrió a dins de la mà quina virtual. Tingueu en compte que gravar CD's d'à udio a dins de la mà quina virtual encara no està suportat.</translation> + <translation type="obsolete">Quan estigui marcat, es permetrà al client enviar ordres ATAPI directament al controlador amfitrió, cosa que permetrà fer servir lectors de CD/DVD de l'amfitrió a dins de la mà quina virtual. Tingueu en compte que gravar CD's d'à udio a dins de la mà quina virtual encara no està suportat.</translation> </message> <message> <source>Enable &Passthrough</source> @@ -12351,11 +12350,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>&ISO Image File</source> - <translation type="obsolete">Fitxer d'imatge &ISO</translation> + <translation type="obsolete">Fitxer d'imatge &ISO</translation> </message> <message> <source>Displays the image file to mount to the virtual CD/DVD drive and allows to quickly select a different image.</source> - <translation type="obsolete">Mostra el fitxer d'imatge que es muntarà al dispositiu virtual de CD/DVD i permet seleccionar de forma rà pida una imatge diferent.</translation> + <translation type="obsolete">Mostra el fitxer d'imatge que es muntarà al dispositiu virtual de CD/DVD i permet seleccionar de forma rà pida una imatge diferent.</translation> </message> <message> <source>Invokes the Virtual Disk Manager to select a CD/DVD image to mount.</source> @@ -12475,11 +12474,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Authentication &Method </source> - <translation type="obsolete">&Mètode d'autenticació</translation> + <translation type="obsolete">&Mètode d'autenticació</translation> </message> <message> <source>Authentication &Timeout </source> - <translation type="obsolete">&Temps d'autenticació excedit</translation> + <translation type="obsolete">&Temps d'autenticació excedit</translation> </message> <message> <source>Base &Memory Size</source> @@ -12491,7 +12490,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Boo&t Order</source> - <translation type="obsolete">&Ordre d'inici</translation> + <translation type="obsolete">&Ordre d'inici</translation> </message> <message> <source>Cancel</source> @@ -12507,7 +12506,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>CD/DVD image file is not selected</source> - <translation type="obsolete">No s'ha seleccionat cap imatge de CD/DVD</translation> + <translation type="obsolete">No s'ha seleccionat cap imatge de CD/DVD</translation> </message> <message> <source> CD/DVD-ROM </source> @@ -12515,7 +12514,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source> - <translation type="obsolete">Controla la quantitat de memòria amb què es proveeix a la mà quina virtual. Si n'assigneu massa, pot ser que la mà quina no s'iniciï.</translation> + <translation type="obsolete">Controla la quantitat de memòria amb què es proveeix a la mà quina virtual. Si n'assigneu massa, pot ser que la mà quina no s'iniciï.</translation> </message> <message> <source>Controls the amount of video memory provided to the virtual machine.</source> @@ -12531,11 +12530,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Selects which clipboard data will be copied between the guest and the host OS. This feature requires Guest Additions to be installed in the guest OS.</source> - <translation type="obsolete">Defineix el mode de compartició del porta-retalls entre el client i l'amfitrió. Tingueu en compte que aquesta caracterÃstica requereix tenir instal·lades les Guest Additions al sistema client.</translation> + <translation type="obsolete">Defineix el mode de compartició del porta-retalls entre el client i l'amfitrió. Tingueu en compte que aquesta caracterÃstica requereix tenir instal·lades les Guest Additions al sistema client.</translation> </message> <message> <source>Defines the VRDP authentication method.</source> - <translation type="obsolete">Defineix el mode d'autenticació del VRDP.</translation> + <translation type="obsolete">Defineix el mode d'autenticació del VRDP.</translation> </message> <message> <source>Del</source> @@ -12551,15 +12550,15 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Displays the dialog help.</source> - <translation type="obsolete">Mostra el dià leg d'ajuda.</translation> + <translation type="obsolete">Mostra el dià leg d'ajuda.</translation> </message> <message> <source>Displays the image file to mount to the virtual CD/DVD drive and allows to quickly select a different image.</source> - <translation type="obsolete">Mostra el fitxer d'imatge que es muntarà al dispositiu virtual de CD/DVD i permet seleccionar de forma rà pida una imatge diferent.</translation> + <translation type="obsolete">Mostra el fitxer d'imatge que es muntarà al dispositiu virtual de CD/DVD i permet seleccionar de forma rà pida una imatge diferent.</translation> </message> <message> <source>Displays the image file to mount to the virtual Floppy drive and allows to quickly select a different image.</source> - <translation type="obsolete">Mostra el fitxer d'imatge que es muntarà al disquet virtual i permet seleccionar de forma rà pida una imatge diferent.</translation> + <translation type="obsolete">Mostra el fitxer d'imatge que es muntarà al disquet virtual i permet seleccionar de forma rà pida una imatge diferent.</translation> </message> <message> <source>Displays the name of the virtual machine.</source> @@ -12567,11 +12566,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Displays the operating system type that you plan to install into this virtual machine (called a guest operating system).</source> - <translation type="obsolete">Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'aquesta mà quina virtual (anomenat sistema operatiu client).</translation> + <translation type="obsolete">Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'aquesta mà quina virtual (anomenat sistema operatiu client).</translation> </message> <message> <source>Displays the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of disk space.</source> - <translation type="obsolete">Mostra la ruta on les captures d'aquesta mà quina virtual es desaran. Tingueu en compte que les captures poden ocupar prou quantitat d'espai al disc dur.</translation> + <translation type="obsolete">Mostra la ruta on les captures d'aquesta mà quina virtual es desaran. Tingueu en compte que les captures poden ocupar prou quantitat d'espai al disc dur.</translation> </message> <message> <source>Displays the virtual hard disk to attach to this IDE slot and allows to quickly select a different hard disk.</source> @@ -12579,11 +12578,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Duplicate port number selected </source> - <translation type="obsolete">S'ha seleccionat un número de port duplicat</translation> + <translation type="obsolete">S'ha seleccionat un número de port duplicat</translation> </message> <message> <source>Duplicate port path entered </source> - <translation type="obsolete">S'ha introduït una ruta de port duplicada</translation> + <translation type="obsolete">S'ha introduït una ruta de port duplicada</translation> </message> <message> <source>Enable A&CPI</source> @@ -12591,7 +12590,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>&Enable Audio</source> - <translation type="obsolete">H&abilita l'à udio</translation> + <translation type="obsolete">H&abilita l'à udio</translation> </message> <message> <source>Enable IO A&PIC</source> @@ -12627,7 +12626,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Floppy image file is not selected</source> - <translation type="obsolete">No s'ha seleccionat cap imatge de disquet</translation> + <translation type="obsolete">No s'ha seleccionat cap imatge de disquet</translation> </message> <message> <source> General </source> @@ -12643,19 +12642,19 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Host Audio &Driver</source> - <translation type="obsolete">Controla&dor d'à udio de l'amfitrió</translation> + <translation type="obsolete">Controla&dor d'à udio de l'amfitrió</translation> </message> <message> <source>Host CD/DVD &Drive</source> - <translation type="obsolete">Controla&dor de CD/DVD de l'amfitrió</translation> + <translation type="obsolete">Controla&dor de CD/DVD de l'amfitrió</translation> </message> <message> <source>Host Floppy &Drive</source> - <translation type="obsolete">&Disquet de l'amfitrió</translation> + <translation type="obsolete">&Disquet de l'amfitrió</translation> </message> <message> <source>Host &Interfaces</source> - <translation type="obsolete">&InterfÃcies de l'amfitrió</translation> + <translation type="obsolete">&InterfÃcies de l'amfitrió</translation> </message> <message> <source>[id]</source> @@ -12671,11 +12670,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>&Image File</source> - <translation type="obsolete">Fitxer d'&imatge</translation> + <translation type="obsolete">Fitxer d'&imatge</translation> </message> <message> <source>Incorrect host network interface is selected</source> - <translation type="obsolete">S'ha seleccionat una interfÃcie de xarxa de l'amfitrió incorrecta</translation> + <translation type="obsolete">S'ha seleccionat una interfÃcie de xarxa de l'amfitrió incorrecta</translation> </message> <message> <source>Ins</source> @@ -12683,7 +12682,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Invalid settings detected</source> - <translation type="obsolete">S'han detectat parà metres incorrectes</translation> + <translation type="obsolete">S'han detectat parà metres incorrectes</translation> </message> <message> <source>Invokes the Virtual Disk Manager to create a new or select an existing virtual hard disk to attach.</source> @@ -12699,11 +12698,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source><i>Select a settings category from the list on the left-hand side and move the mouse over a settings item to get more information<i>.</source> - <translation type="obsolete"><i>Seleccioneu una categoria de configuració de la llista de l'esquerra i moveu el ratolà sobre l'Ãtem de parà metres per obtenir més informació</i>.</translation> + <translation type="obsolete"><i>Seleccioneu una categoria de configuració de la llista de l'esquerra i moveu el ratolà sobre l'Ãtem de parà metres per obtenir més informació</i>.</translation> </message> <message> <source>&ISO Image File</source> - <translation type="obsolete">Fitxer d'imatge &ISO</translation> + <translation type="obsolete">Fitxer d'imatge &ISO</translation> </message> <message> <source>[link]</source> @@ -12711,11 +12710,11 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Lists all available host interfaces.</source> - <translation type="obsolete">Mostra totes les interfÃcies de l'amfitrió disponibles.</translation> + <translation type="obsolete">Mostra totes les interfÃcies de l'amfitrió disponibles.</translation> </message> <message> <source>Lists all USB filters of this machine. The checkbox to the left defines whether the particular filter is enabled or not.</source> - <translation type="obsolete">Mostra tots els filtres USB d'aquesta mà quina. La casella de selecció de l'esquerra defineix si un filtre concret és habilitat o no.</translation> + <translation type="obsolete">Mostra tots els filtres USB d'aquesta mà quina. La casella de selecció de l'esquerra defineix si un filtre concret és habilitat o no.</translation> </message> <message> <source>Lists host CD/DVD drives available to mount to the virtual machine.</source> @@ -12751,7 +12750,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Mounts the specified host Floppy drive to the virtual Floppy drive.</source> - <translation type="obsolete">Munta el disquet especificat de l'amfitrió al dispositiu de disquet virtual.</translation> + <translation type="obsolete">Munta el disquet especificat de l'amfitrió al dispositiu de disquet virtual.</translation> </message> <message> <source>Move Down (Ctrl+Down)</source> @@ -12801,7 +12800,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>&OK</source> - <translation type="obsolete">D'ac&ord</translation> + <translation type="obsolete">D'ac&ord</translation> </message> <message> <source>OS &Type</source> @@ -12817,7 +12816,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source><p>Do you want to remove the selected host network interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> This interface may be in use by one or more network adapters of this or another VM. After it is removed, these adapters will no longer work until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation type="obsolete"><p>Voleu suprimir la interfÃcie de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Aquesta interfÃcie potser s'estigui fent servir per un o més adaptadors de xarxa d'aquesta o altra mà quina virtual. Després de suprimir-los, aquests adaptadors no podran treballar fins que corregiu els parà metres triant un nom d'interfÃcie diferent o un tipus diferent d'adaptador.</p></translation> + <translation type="obsolete"><p>Voleu suprimir la interfÃcie de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Aquesta interfÃcie potser s'estigui fent servir per un o més adaptadors de xarxa d'aquesta o altra mà quina virtual. Després de suprimir-los, aquests adaptadors no podran treballar fins que corregiu els parà metres triant un nom d'interfÃcie diferent o un tipus diferent d'adaptador.</p></translation> </message> <message> <source>Port %1</source> @@ -12830,7 +12829,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Primary Master hard disk is not selected</source> - <translation type="obsolete">No s'ha seleccionat cap disc Primari Mestre</translation> + <translation type="obsolete">No s'ha seleccionat cap disc Primari Mestre</translation> </message> <message> <source>P&rimary Slave</source> @@ -12842,7 +12841,7 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> </message> <message> <source>Primary Slave hard disk is not selected</source> - <translation type="obsolete">No s'ha seleccionat el disc Primari Esclau</translation> + <translation type="obsolete">No s'ha seleccionat el disc Primari Esclau</translation> </message> <message> <source><qt>%1&nbsp;MB</qt></source> @@ -12851,30 +12850,30 @@ o a ambdòs (<i>Qualsevol</i>).</qt></translation> <message> <source><qt>Controls the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</qt></source> - <translation type="obsolete"><qt>Gestiona el controlador de sortida de so. El <b>controlador d'à udio Nul</b> -fa que el client vegi una tarjeta de so, però l'accés a ella s'ignorarà .</qt></translation> + <translation type="obsolete"><qt>Gestiona el controlador de sortida de so. El <b>controlador d'à udio Nul</b> +fa que el client vegi una tarjeta de so, però l'accés a ella s'ignorarà .</qt></translation> </message> <message> <source><qt>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</qt></source> - <translation type="obsolete"><qt>Mostra el nombre del port del Servidor VRDP. heu d'especificar <tt>0</tt> (cero) per reiniciar el port al valor per defecte.</qt></translation> + <translation type="obsolete"><qt>Mostra el nombre del port del Servidor VRDP. heu d'especificar <tt>0</tt> (cero) per reiniciar el port al valor per defecte.</qt></translation> </message> <message> <source><qt>When checked, the virtual machine will support -the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable +the Advanced Configuration and Power Management Interface (ACPI). <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</qt></source> - <translation type="obsolete"><qt>Quan estigui marcat, la mà quina virtual suportarà la Configuració Avançada i la InterfÃcie de Gestió de l'Energia (ACPI). <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</qt></translation> + <translation type="obsolete"><qt>Quan estigui marcat, la mà quina virtual suportarà la Configuració Avançada i la InterfÃcie de Gestió de l'Energia (ACPI). <b>Nota:</b> no inhabiliteu aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</qt></translation> </message> <message> <source><qt>When checked, the virtual machine will support -the Input Output APIC (IO APIC), which may slightly decrease performance. <b>Note:</b> don't disable +the Input Output APIC (IO APIC), which may slightly decrease performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</qt></source> <translation type="obsolete"><qt>Quan estigui marcat, la mà quina virtual suportarà -l'Entrada Sortida APIC (ES APIC), que pot disminuir el rendiment de la mà quina virtual. <b>Nota:</b> no inhabiliteu -aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</qt></translation> +l'Entrada Sortida APIC (ES APIC), que pot disminuir el rendiment de la mà quina virtual. <b>Nota:</b> no inhabiliteu +aquesta caracterÃstica després d'haver instal·lat un Windows al sistema operatiu client!</qt></translation> </message> <message> <source>&Remember Media Mounted at Runtime</source> - <translation type="obsolete">&Recorda els suports muntats en temps d'execució</translation> + <translation type="obsolete">&Recorda els suports muntats en temps d'execució</translation> </message> <message> <source> Remote Display </source> @@ -12914,7 +12913,7 @@ aquesta caracterÃstica després d'haver instal·lat un Windows al sistema </message> <message> <source>Secondary Slave hard disk is not selected</source> - <translation type="obsolete">No s'ha seleccionat cap disc Secondari Esclau</translation> + <translation type="obsolete">No s'ha seleccionat cap disc Secondari Esclau</translation> </message> <message> <source>Select</source> @@ -12954,7 +12953,7 @@ aquesta caracterÃstica després d'haver instal·lat un Windows al sistema </message> <message> <source>Specifies the timeout for guest authentication, in milliseconds.</source> - <translation type="obsolete">Especifica el temps d'espera per a la autenticació el client, en milisegons.</translation> + <translation type="obsolete">Especifica el temps d'espera per a la autenticació el client, en milisegons.</translation> </message> <message> <source> USB </source> @@ -12978,7 +12977,7 @@ aquesta caracterÃstica després d'haver instal·lat un Windows al sistema </message> <message> <source>When checked, allows the guest to send ATAPI commands directly to the host drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source> - <translation type="obsolete">Quan estigui marcat, es permetrà al client enviar ordres ATAPI directament al controlador amfitrió, cosa que permet fer servir lectores de CD/DVD de l'amfitrió a dins de la mà quina virtual. Tingueu en compte que gravar CD's d'à udio a dins de la mà quina virtual encara no és suportat.</translation> + <translation type="obsolete">Quan estigui marcat, es permetrà al client enviar ordres ATAPI directament al controlador amfitrió, cosa que permet fer servir lectores de CD/DVD de l'amfitrió a dins de la mà quina virtual. Tingueu en compte que gravar CD's d'à udio a dins de la mà quina virtual encara no és suportat.</translation> </message> <message> <source>When checked, attaches the specified virtual hard disk to the Master slot of the Primary IDE controller.</source> @@ -12994,7 +12993,7 @@ aquesta caracterÃstica després d'haver instal·lat un Windows al sistema </message> <message> <source>When checked, enables the virtual USB controller of this machine.</source> - <translation type="obsolete">Quan estigui es marcat, habilitarà el controlador virtual USB d'aquesta mà quina.</translation> + <translation type="obsolete">Quan estigui es marcat, habilitarà el controlador virtual USB d'aquesta mà quina.</translation> </message> <message> <source>When checked, mounts the specified media to the CD/DVD drive of the virtual machine. Note that the CD/DVD drive is always connected to the Secondary Master IDE controller of the machine.</source> @@ -13005,16 +13004,16 @@ aquesta caracterÃstica després d'haver instal·lat un Windows al sistema <translation type="obsolete">Quant estigui marcat, es muntarà el suport especificat al dispositiu de disquet de la mà quina virtual.</translation> </message> <message> - <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V. The grayed checkbox state means that this setting is determined by the value of the global setting.</source> - <translation type="obsolete">Quan estigui marcat, la mà quina virtual provarà de fer servir les extensions de virtualització per maquinari de la CPU de l'amfitrió com Intel VT-x i AMD-V. L'estat grayed de la casella de selecció indica que aquest parà metre està determinat pel valor del parà metre global.</translation> + <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V. The grayed checkbox state means that this setting is determined by the value of the global setting.</source> + <translation type="obsolete">Quan estigui marcat, la mà quina virtual provarà de fer servir les extensions de virtualització per maquinari de la CPU de l'amfitrió com Intel VT-x i AMD-V. L'estat grayed de la casella de selecció indica que aquest parà metre està determinat pel valor del parà metre global.</translation> </message> <message> <source>When checked, a virtual PCI audio card will be plugged into the virtual machine and will communicate with the host audio system using the specified driver.</source> - <translation type="obsolete">Quan estigui marcat, la tarjeta de so PCI virtual es connectarà a dins de la mà quina virtual, la qual farà servir un controlador especÃfic per comunicar-se amb la tarjeta de so de l'amfitrió.</translation> + <translation type="obsolete">Quan estigui marcat, la tarjeta de so PCI virtual es connectarà a dins de la mà quina virtual, la qual farà servir un controlador especÃfic per comunicar-se amb la tarjeta de so de l'amfitrió.</translation> </message> <message> <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source> - <translation type="obsolete">Quan estigui marcat, la mà quina virtual actuarà com un servidor Remote Desktop Protocol (RDP), permetent als clients remots connectar la mà quina virtual (quan estigui executant-se) fent servir l'està ndard client RDP.</translation> + <translation type="obsolete">Quan estigui marcat, la mà quina virtual actuarà com un servidor Remote Desktop Protocol (RDP), permetent als clients remots connectar la mà quina virtual (quan estigui executant-se) fent servir l'està ndard client RDP.</translation> </message> <message> <source>00</source> @@ -13083,10 +13082,10 @@ aquesta caracterÃstica després d'haver instal·lat un Windows al sistema </source> <translation type="obsolete"><qt>Quan estigui marcat, la -caracterÃstica d'Extensió -d'Adreça FÃsica (PAE) +caracterÃstica d'Extensió +d'Adreça FÃsica (PAE) de la CPU del sistema -client s'exposarà a la +client s'exposarà a la mà quina virtual.</qt></translation> </message> <message> @@ -13099,7 +13098,7 @@ mà quina virtual.</qt></translation> </message> <message> <source>Audio &Controller</source> - <translation type="obsolete">&Controlador d'à udio</translation> + <translation type="obsolete">&Controlador d'à udio</translation> </message> <message> <source>Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine.</source> @@ -13111,7 +13110,7 @@ mà quina virtual.</qt></translation> </message> <message> <source>When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source> - <translation type="obsolete">Quan estigui marcat, s'habilitarà el controlador virtual USB EHCI per a aquesta mà quina. El controlador USB EHCI proveeix de suport USB 2.0.</translation> + <translation type="obsolete">Quan estigui marcat, s'habilitarà el controlador virtual USB EHCI per a aquesta mà quina. El controlador USB EHCI proveeix de suport USB 2.0.</translation> </message> <message> <source> @@ -13125,7 +13124,7 @@ mà quina virtual.</qt></translation> </source> <translation type="obsolete"> <qt>Llista tots els filtres USB -d'aquesta mà quina. La casella de +d'aquesta mà quina. La casella de seleccióde la dreta defineix què filtre concret està activat o no. Feu servir el menú de context o @@ -13152,11 +13151,11 @@ amb qualsevol dispositiu USB connectat.</qt></translation> </message> <message> <source>Add Filter From Device</source> - <translation type="obsolete">Afegeix un filtre des d'un dispositiu</translation> + <translation type="obsolete">Afegeix un filtre des d'un dispositiu</translation> </message> <message> <source>A&dd Filter From Device</source> - <translation type="obsolete">Afegeix un filtre des d'un &dispositiu</translation> + <translation type="obsolete">Afegeix un filtre des d'un &dispositiu</translation> </message> <message> <source><qt>Adds a new USB filter with all fields set to the @@ -13211,11 +13210,11 @@ al sistema amfitrió.</qt></translation> </message> <message> <source>Internal network name is not set</source> - <translation type="obsolete">No s'ha especificat un nom de xarxa intern</translation> + <translation type="obsolete">No s'ha especificat un nom de xarxa intern</translation> </message> <message> <source>Port path not specified </source> - <translation type="obsolete">No s'ha especificat una ruta al port</translation> + <translation type="obsolete">No s'ha especificat una ruta al port</translation> </message> <message> <source>Port %1</source> @@ -13296,30 +13295,30 @@ al sistema amfitrió.</qt></translation> </message> <message> <source>you have selected a 64-bit guest OS type for this VM. As such guests require hardware virtualization (VT-x/AMD-V), this feature will be enabled automatically.</source> - <translation type="obsolete">heu seleccionat un tipus de sistema client de 64 bits. Amb aquests tipus de clients es requereix maquinari de virtualització (VT-x/AMD-V), aquesta caracterÃstica s'activarà automà ticament.</translation> + <translation type="obsolete">heu seleccionat un tipus de sistema client de 64 bits. Amb aquests tipus de clients es requereix maquinari de virtualització (VT-x/AMD-V), aquesta caracterÃstica s'activarà automà ticament.</translation> </message> <message> <source>you have selected a 64-bit guest OS type for this VM. VirtualBox does not currently support more than one virtual CPU for 64-bit guests executed on 32-bit hosts.</source> - <translation type="obsolete">heu seleccionat un tipus de sistema client de 64 bits. VirtualBox no suporta actualment més d'un processador virtual per a clients de 64 bits executats en amfitrions de 32 bits.</translation> + <translation type="obsolete">heu seleccionat un tipus de sistema client de 64 bits. VirtualBox no suporta actualment més d'un processador virtual per a clients de 64 bits executats en amfitrions de 32 bits.</translation> </message> <message> <source>you have 2D Video Acceleration enabled. As 2D Video Acceleration is supported for Windows guests only, this feature will be disabled.</source> - <translation type="obsolete">l'acceleració 2D està activada. Com que l'acceleració 2D només està suportada per clients Windows, es desactivarà aquest parà metre.</translation> + <translation type="obsolete">l'acceleració 2D està activada. Com que l'acceleració 2D només està suportada per clients Windows, es desactivarà aquest parà metre.</translation> </message> <message> <source>you have enabled a USB HID (Human Interface Device). This will not work unless USB emulation is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="obsolete">heu habilitat un USB HID (dispositiu d'interfÃcie humana). Això no funcionarà a menys que l'emulació USB estigui també activada. Això es farà automà ticament quan accepteu els parà metres de la mà quina virtual en prémer el botó «D'acord».</translation> + <translation type="obsolete">heu habilitat un USB HID (dispositiu d'interfÃcie humana). Això no funcionarà a menys que l'emulació USB estigui també activada. Això es farà automà ticament quan accepteu els parà metres de la mà quina virtual en prémer el botó «D'acord».</translation> </message> </context> <context> <name>VBoxVMSettingsFD</name> <message> <source>Host floppy drive is not selected</source> - <translation type="obsolete">No s'ha seleccionat cap disquet a l'amfitrió</translation> + <translation type="obsolete">No s'ha seleccionat cap disquet a l'amfitrió</translation> </message> <message> <source>Floppy image file is not selected</source> - <translation type="obsolete">No s'ha seleccionat cap imatge de disquet</translation> + <translation type="obsolete">No s'ha seleccionat cap imatge de disquet</translation> </message> <message> <source>When checked, mounts the specified media to the Floppy drive of the virtual machine.</source> @@ -13331,11 +13330,11 @@ al sistema amfitrió.</qt></translation> </message> <message> <source>Mounts the specified host Floppy drive to the virtual Floppy drive.</source> - <translation type="obsolete">Munta el disquet especificat de l'amfitrió al dispositiu de disquet virtual.</translation> + <translation type="obsolete">Munta el disquet especificat de l'amfitrió al dispositiu de disquet virtual.</translation> </message> <message> <source>Host Floppy &Drive</source> - <translation type="obsolete">&Disquet de l'amfitrió</translation> + <translation type="obsolete">&Disquet de l'amfitrió</translation> </message> <message> <source>Lists host Floppy drives available to mount to the virtual machine.</source> @@ -13347,11 +13346,11 @@ al sistema amfitrió.</qt></translation> </message> <message> <source>&Image File</source> - <translation type="obsolete">Fitxer d'&imatge</translation> + <translation type="obsolete">Fitxer d'&imatge</translation> </message> <message> <source>Displays the image file to mount to the virtual Floppy drive and allows to quickly select a different image.</source> - <translation type="obsolete">Mostra el fitxer d'imatge que es muntarà al disquet virtual i permet seleccionar de forma rà pida una imatge diferent.</translation> + <translation type="obsolete">Mostra el fitxer d'imatge que es muntarà al disquet virtual i permet seleccionar de forma rà pida una imatge diferent.</translation> </message> <message> <source>Invokes the Virtual Disk Manager to select a Floppy image to mount.</source> @@ -13366,7 +13365,7 @@ al sistema amfitrió.</qt></translation> <name>VBoxVMSettingsVRDP</name> <message> <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source> - <translation type="obsolete">Quan estigui marcat, la mà quina virtual actuarà com un servidor protocol d'escriptori remot (RDP), permetent als clients remots connectar-se a la mà quina virtual (quan estigui executant-se) fent servir l'està ndard client RDP.</translation> + <translation type="obsolete">Quan estigui marcat, la mà quina virtual actuarà com un servidor protocol d'escriptori remot (RDP), permetent als clients remots connectar-se a la mà quina virtual (quan estigui executant-se) fent servir l'està ndard client RDP.</translation> </message> <message> <source>&Enable VRDP Server</source> @@ -13378,23 +13377,23 @@ al sistema amfitrió.</qt></translation> </message> <message> <source>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</source> - <translation type="obsolete">Mostra el nombre del port del servidor VRDP. Heu d'especificar <tt>0</tt> (cero) per reiniciar el port al valor per defecte.</translation> + <translation type="obsolete">Mostra el nombre del port del servidor VRDP. Heu d'especificar <tt>0</tt> (cero) per reiniciar el port al valor per defecte.</translation> </message> <message> <source>Authentication &Method:</source> - <translation type="obsolete">&Mètode d'autenticació:</translation> + <translation type="obsolete">&Mètode d'autenticació:</translation> </message> <message> <source>Defines the VRDP authentication method.</source> - <translation type="obsolete">Defineix el mode d'autenticació del VRDP.</translation> + <translation type="obsolete">Defineix el mode d'autenticació del VRDP.</translation> </message> <message> <source>Authentication &Timeout:</source> - <translation type="obsolete">&Temps d'autenticació:</translation> + <translation type="obsolete">&Temps d'autenticació:</translation> </message> <message> <source>Specifies the timeout for guest authentication, in milliseconds.</source> - <translation type="obsolete">Especifica el temps d'espera per a la autenticació del client, en milisegons.</translation> + <translation type="obsolete">Especifica el temps d'espera per a la autenticació del client, en milisegons.</translation> </message> </context> </TS> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts index 1ebb448c8..07c13a6c7 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts @@ -6878,12 +6878,12 @@ p, li { white-space: pre-wrap; } <message> <source>Readonly</source> <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>Skrivebeskyttet</translation> </message> <message> <source>Multi-attach</source> <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>Multi-forbundet</translation> </message> </context> <context> @@ -8293,76 +8293,76 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to use it later again.</p></source> - <translation type="unfinished"></translation> + <translation><p>Bemærk at mediets lagerenhed ikke vil blive slettet og derfor kan den bruges igen pÃ¥ et senere tidspunkt.</p></translation> </message> <message> <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p></source> - <translation type="unfinished"></translation> + <translation><p>VirtualBox Gæstetilføjelser er tilsyneladende ikke tilgængelige pÃ¥ denne virtuelle maskine og delte mapper fungerer ikke uden. For at kunne anvende delte mapper i den virtuelle maskine, skal du installere gæstetilføjelserne, hvis de ikke er installeret eller geninstallere, hvis de ikke fungerer korrekt ved at vælge <b>Installér gæstetilføjelser</b> fra menuen <b>Enheder</b>. Delte mapper vil først være tilgængelige, nÃ¥r maskinen er startet helt op.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>Den virtuelle maskines vindue vil nu skifte til <b>fuldskærm</b>. Du kan skifte tilbage til vinduestilstand ved at trykke <b>%1</b>.</p><p><i>Værtstasten</i> er for øjeblikket sat til <b>%2</b>.</p><p>Bemærk at menulinjen er skjult i fuldskærmstilstand, men du kan Ã¥bne den ved at trykke <b>Værtstast+Home</b>.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>Den virtuelle maskines vindue vil nu skifte til <b>rammefri tilstand</b>. Du kan skifte tilbage til vinduestilstand ved at trykke <b>%1</b>.</p><p><i>Værtstasten</i> er for øjeblikket sat til <b>%2</b>.</p><p>Bemærk at menulinjen er skjult i rammefri tilstand, men du kan Ã¥bne den ved at trykke <b>Værtstast+Home</b>.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Scale</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in scale mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>Den virtuelle maskines vindue vil nu skifte til <b>Skaleret tilstand</b>. Du kan skifte tilbage til vinduestilstand ved at trykke <b>%1</b>.</p><p><i>Værtstasten</i> er for øjeblikket sat til <b>%2</b>.</p><p>Bemærk at menulinjen er skjult i skaleret tilstand, men du kan Ã¥bne den ved at trykke <b>Værtstast+Home</b>.</p></translation> </message> <message> <source>Switch</source> <comment>scale</comment> - <translation type="unfinished">Skift</translation> + <translation>Skift</translation> </message> <message> <source>Failed to open the Extension Pack <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Kunne ikke Ã¥bne Udvidelsespakken <b>%1</b>.</translation> </message> <message> <source><p>You are about to install a VirtualBox extension pack. Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>Du er ved at installere en udvidelsespakke til VirtualBox. Udvidelsespakker tilføjer ny funktionalitet til VirtualBox og kan indeholde system-programmer, som potentielt kan skade dit system. Gennemse nedenstÃ¥ende beskrivelse og fortsæt kun hvis du har fÃ¥et udvidelsespakken fra en troværdig kilde.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Navn:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Beskrivelse:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></translation> </message> <message> <source>&Install</source> - <translation type="unfinished"></translation> + <translation>&Installér</translation> </message> <message> <source>Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</source> - <translation type="unfinished"></translation> + <translation>Udvidelsespakker tilføjer ny funktionalitet til VirtualBox og kan indeholde system-programmer, som potentielt kan skade dit system. Gennemse nedenstÃ¥ende beskrivelse og fortsæt kun hvis du har fÃ¥et udvidelsespakken fra en troværdig kilde.</translation> </message> <message> <source><p>An older version of the extension pack is already installed, would you like to upgrade? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>En ældre udgave af udvidelsespakken er allerede installeret. Ønsker du at opgradere? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Navn:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Ny Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Nuværende Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Beskrivelse:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></translation> </message> <message> <source>&Upgrade</source> - <translation type="unfinished"></translation> + <translation>Opgradér</translation> </message> <message> <source><p>An newer version of the extension pack is already installed, would you like to downgrade? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>En nyere udgave af udvidelsespakken er allerede installeret. Ønsker du at nedgradere? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Navn:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Ny version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Nuværende version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Beskrivelse:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></translation> </message> <message> <source>&Downgrade</source> - <translation type="unfinished"></translation> + <translation>&Ne&dgradér</translation> </message> <message> <source><p>The extension pack is already installed with the same version, would you like reinstall it? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%4</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>Denne udgave af udvidelsespakken er allerede installeret. Ønsker du at geninstallere den? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Navn:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Beskrivelse:&nbsp;&nbsp;</b></td><td>%4</td></tr></table></p></translation> </message> <message> <source>&Reinstall</source> - <translation type="unfinished"></translation> + <translation>Geninstallé&r</translation> </message> <message> <source><p>You are about to remove the VirtualBox extension pack <b>%1</b>.</p><p>Are you sure you want to proceed?</p></source> - <translation type="unfinished"></translation> + <translation><p>Du er ved at fjerne VirtualBox udvidelsespakken <b>%1</b>.</p><p>Ønsker du at fortsætte?</p></translation> </message> <message> <source>The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.</source> - <translation type="unfinished"></translation> + <translation>Udvidelsespakken <br><nobr><b>%1</b><nobr><br> blev installeret korrekt.</translation> </message> </context> <context> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts index f0110c847..80a298f01 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts @@ -174,119 +174,119 @@ </message> <message> <source>Pause</source> - <translation>Pause</translation> + <translation type="obsolete">Pause</translation> </message> <message> <source>Print Screen</source> - <translation>Druck</translation> + <translation type="obsolete">Druck</translation> </message> <message> <source>F1</source> - <translation>F1</translation> + <translation type="obsolete">F1</translation> </message> <message> <source>F2</source> - <translation>F2</translation> + <translation type="obsolete">F2</translation> </message> <message> <source>F3</source> - <translation>F3</translation> + <translation type="obsolete">F3</translation> </message> <message> <source>F4</source> - <translation>F4</translation> + <translation type="obsolete">F4</translation> </message> <message> <source>F5</source> - <translation>F5</translation> + <translation type="obsolete">F5</translation> </message> <message> <source>F6</source> - <translation>F6</translation> + <translation type="obsolete">F6</translation> </message> <message> <source>F7</source> - <translation>F7</translation> + <translation type="obsolete">F7</translation> </message> <message> <source>F8</source> - <translation>F8</translation> + <translation type="obsolete">F8</translation> </message> <message> <source>F9</source> - <translation>F9</translation> + <translation type="obsolete">F9</translation> </message> <message> <source>F10</source> - <translation>F10</translation> + <translation type="obsolete">F10</translation> </message> <message> <source>F11</source> - <translation>F11</translation> + <translation type="obsolete">F11</translation> </message> <message> <source>F12</source> - <translation>F12</translation> + <translation type="obsolete">F12</translation> </message> <message> <source>F13</source> - <translation>F13</translation> + <translation type="obsolete">F13</translation> </message> <message> <source>F14</source> - <translation>F14</translation> + <translation type="obsolete">F14</translation> </message> <message> <source>F15</source> - <translation>F15</translation> + <translation type="obsolete">F15</translation> </message> <message> <source>F16</source> - <translation>F16</translation> + <translation type="obsolete">F16</translation> </message> <message> <source>F17</source> - <translation>F17</translation> + <translation type="obsolete">F17</translation> </message> <message> <source>F18</source> - <translation>F18</translation> + <translation type="obsolete">F18</translation> </message> <message> <source>F19</source> - <translation>F19</translation> + <translation type="obsolete">F19</translation> </message> <message> <source>F20</source> - <translation>F20</translation> + <translation type="obsolete">F20</translation> </message> <message> <source>F21</source> - <translation>F21</translation> + <translation type="obsolete">F21</translation> </message> <message> <source>F22</source> - <translation>F22</translation> + <translation type="obsolete">F22</translation> </message> <message> <source>F23</source> - <translation>F23</translation> + <translation type="obsolete">F23</translation> </message> <message> <source>F24</source> - <translation>F24</translation> + <translation type="obsolete">F24</translation> </message> <message> <source>Num Lock</source> - <translation>Num</translation> + <translation type="obsolete">Num</translation> </message> <message> <source>Forward</source> - <translation>Vorw</translation> + <translation type="obsolete">Vorw</translation> </message> <message> <source>Back</source> - <translation>Rückw</translation> + <translation type="obsolete">Rückw</translation> </message> </context> <context> @@ -1182,6 +1182,10 @@ <source>Extension package files (%1)</source> <translation>Zusatzpakete (%1)</translation> </message> + <message> + <source>Extensions</source> + <translation>Zusatzpakete</translation> + </message> </context> <context> <name>UIGlobalSettingsGeneral</name> @@ -1440,7 +1444,11 @@ </message> <message> <source>New Host-Only Interface</source> - <translation>Neues Host-Only Interface</translation> + <translation type="obsolete">Neues Host-Only Interface</translation> + </message> + <message> + <source>Networking</source> + <translation>Netzwerk</translation> </message> </context> <context> @@ -6169,8 +6177,8 @@ <translation>&Neu installieren</translation> </message> <message> - <source>Sorry, some generic error happens.</source> - <translation type="unfinished"></translation> + <source><p>Cannot create the machine folder:</p><p><b>%1</b></p><p>Please check you have the permissions required to do so.</p></source> + <translation><p>Der Ordner für die virtuelle Maschine kann nicht angelegt werden:</p><p><b>%1</b></p><p>Bitte überprüfen Sie die Zugriffsrechte.</p></translation> </message> </context> <context> @@ -6359,7 +6367,7 @@ </message> <message> <source>Manager</source> - <translation>Manager</translation> + <translation type="obsolete">Manager</translation> </message> <message> <source>&Add...</source> @@ -6417,6 +6425,11 @@ <source>Show the VirtualBox Machine Definition file in the File Manager</source> <translation>Zeigt die VirtualBox-VM-Definition im Dateimanager</translation> </message> + <message> + <source>Manager</source> + <comment>Note: main window title which is pretended by the product name.</comment> + <translation>Manager</translation> + </message> </context> <context> <name>VBoxSnapshotDetailsDlg</name> @@ -6572,8 +6585,8 @@ <message numerus="yes"> <source>Warning: You are taking a snapshot of a running machine which has %n immutable image(s) attached to it. As long as you are working from this snapshot the immutable image(s) will not be reset to avoid loss of data.</source> <translation> - <numerusform>Warnung: Sie erstellen einen Snapshot von einer laufenden Machine, die %n unveränderliches Festplattenabbild angeschlossen hat. So lange Sie mit diesem Sicherungspunkt arbeiten, wird das unveränderliche Festplattenabbild nicht zurück gesetzt, um Datenverlust zu vermeiden.</numerusform> - <numerusform>Warnung: Sie erstellen einen Snapshot von einer laufenden Machine, die %n unveränderliche Festplattenabbilder angeschlossen hat. So lange Sie mit diesen Sicherungspunkt arbeiten, werden die unveränderlichen Festplattenabbilder nicht zurück gesetzt, um Datenverlust zu vermeiden.</numerusform> + <numerusform>Warnung: Sie erstellen einen Snapshot von einer laufenden Maschine, die %n unveränderliches Festplattenabbild angeschlossen hat. So lange Sie mit diesem Sicherungspunkt arbeiten, wird das unveränderliche Festplattenabbild nicht zurück gesetzt, um Datenverlust zu vermeiden.</numerusform> + <numerusform>Warnung: Sie erstellen einen Snapshot von einer laufenden Maschine, die %n unveränderliche Festplattenabbilder angeschlossen hat. So lange Sie mit diesen Sicherungspunkt arbeiten, werden die unveränderlichen Festplattenabbilder nicht zurück gesetzt, um Datenverlust zu vermeiden.</numerusform> </translation> </message> </context> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts index ad6d948b5..31d108aa9 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts @@ -619,54 +619,54 @@ </message> <message> <source>Switch to &Fullscreen</source> - <translation type="unfinished"></translation> + <translation>Passer en mode &plein écran</translation> </message> <message> <source>Switch between normal and fullscreen mode</source> - <translation type="unfinished"></translation> + <translation>Permuter entre mode normal et plein écran</translation> </message> <message> <source>Switch to Seam&less Mode</source> - <translation type="unfinished"></translation> + <translation>Utiliser le &bureau intégré</translation> </message> <message> <source>Switch between normal and seamless desktop integration mode</source> - <translation type="unfinished"></translation> + <translation>Permuter entre mode normal et bureau intégré</translation> </message> <message> <source>Switch to &Scale Mode</source> - <translation type="unfinished"></translation> + <translation>Passer en mode &redimensionné</translation> </message> <message> <source>Switch between normal and scale mode</source> - <translation type="unfinished"></translation> + <translation>Permuter entre mode normal et redimensionné</translation> </message> <message> <source>Auto-resize &Guest Display</source> - <translation type="unfinished"></translation> + <translation>&Taille d'écran automatique</translation> </message> <message> <source>Session I&nformation</source> - <translation type="unfinished"></translation> + <translation>Fenêtre &Session</translation> </message> <message> <source>Enable R&emote Display</source> - <translation type="unfinished"></translation> + <translation>&Activer bureau à distance</translation> </message> </context> <context> <name>UIDescriptionPagePrivate</name> <message> <source>No description. Press the Edit button below to add it.</source> - <translation type="unfinished">Pas de description. Cliquez sur Modifier pour en ajouter une.</translation> + <translation>Pas de description. Cliquez sur Modifier pour en ajouter une.</translation> </message> <message> <source>Edit</source> - <translation type="unfinished">Modifier</translation> + <translation>Modifier</translation> </message> <message> <source>Edit (Ctrl+E)</source> - <translation type="unfinished">Modifier (Ctrl+E)</translation> + <translation>Modifier (Ctrl+E)</translation> </message> </context> <context> @@ -674,275 +674,275 @@ <message> <source>Name</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Nom</translation> </message> <message> <source>OS Type</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Système d'exploitation</translation> </message> <message> <source>Base Memory</source> <comment>details report</comment> - <translation type="unfinished">Mémoire vive </translation> + <translation>Mémoire vive </translation> </message> <message> <source><nobr>%1 MB</nobr></source> <comment>details report</comment> - <translation type="unfinished"><nobr>%1 Mo</nobr> </translation> + <translation><nobr>%1 Mio</nobr> </translation> </message> <message> <source>Processors</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Processeurs</translation> </message> <message> <source><nobr>%1</nobr></source> <comment>details report</comment> - <translation type="unfinished"><nobr>%1</nobr> </translation> + <translation><nobr>%1</nobr> </translation> </message> <message> <source>Boot Order</source> <comment>details report</comment> - <translation type="unfinished">Ordre d'amorçage </translation> + <translation>Ordre d'amorçage </translation> </message> <message> <source>ACPI</source> <comment>details report</comment> - <translation type="unfinished">ACPI </translation> + <translation>ACPI </translation> </message> <message> <source>IO APIC</source> <comment>details report</comment> - <translation type="unfinished">IO-APIC </translation> + <translation>IO-APIC </translation> </message> <message> <source>BIOS</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>BIOS</translation> </message> <message> <source>VT-x/AMD-V</source> <comment>details report</comment> - <translation type="unfinished">VT-x/AMD-V </translation> + <translation>VT-x/AMD-V </translation> </message> <message> <source>Nested Paging</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Pagination imbriquée</translation> </message> <message> <source>PAE/NX</source> <comment>details report</comment> - <translation type="unfinished">PAE/NX </translation> + <translation>PAE/NX </translation> </message> <message> <source>Acceleration</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Accélération</translation> </message> <message> <source>Video Memory</source> <comment>details report</comment> - <translation type="unfinished">Mémoire vidéo </translation> + <translation>Mémoire vidéo </translation> </message> <message> <source>Screens</source> <comment>details report</comment> - <translation type="unfinished">Écrans </translation> + <translation>Écrans </translation> </message> <message> <source>2D Video</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>2D</translation> </message> <message> <source>3D</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>3D</translation> </message> <message> <source>Remote Desktop Server Port</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Port du bureau à distance</translation> </message> <message> <source>Remote Desktop Server</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Serveur du bureau à distance (RDP)</translation> </message> <message> <source>Disabled</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Désactivé</translation> </message> <message> <source>(CD/DVD)</source> - <translation type="unfinished">(CD/DVD)</translation> + <translation>(CD/DVD)</translation> </message> <message> <source>Not Attached</source> <comment>details report (Storage)</comment> - <translation type="unfinished">Non connecté</translation> + <translation>Non connecté</translation> </message> <message> <source>Host Driver</source> <comment>details report (audio)</comment> - <translation type="unfinished">Pilote hôte </translation> + <translation>Pilote hôte </translation> </message> <message> <source>Controller</source> <comment>details report (audio)</comment> - <translation type="unfinished">Contrôleur </translation> + <translation>Contrôleur </translation> </message> <message> <source>Disabled</source> <comment>details report (audio)</comment> - <translation type="unfinished"></translation> + <translation>Désactivé</translation> </message> <message> <source>Bridged adapter, %1</source> <comment>details report (network)</comment> - <translation type="unfinished">Pont avec l'interface %1 </translation> + <translation>Pont avec l'interface %1 </translation> </message> <message> <source>Internal network, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">Réseau interne, '%1' </translation> + <translation>Réseau interne, '%1' </translation> </message> <message> <source>Host-only adapter, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">Réseau privé hôte, '%1' </translation> + <translation>Réseau privé hôte, '%1' </translation> </message> <message> <source>VDE network, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">Réseau VDE, '%1' </translation> + <translation>Réseau VDE, '%1' </translation> </message> <message> <source>Adapter %1</source> <comment>details report (network)</comment> - <translation type="unfinished"></translation> + <translation>Carte %1</translation> </message> <message> <source>Disabled</source> <comment>details report (network)</comment> - <translation type="unfinished"></translation> + <translation>Désactivée</translation> </message> <message> <source>Port %1</source> <comment>details report (serial ports)</comment> - <translation type="unfinished"></translation> + <translation>Port %1</translation> </message> <message> <source>Disabled</source> <comment>details report (serial ports)</comment> - <translation type="unfinished"></translation> + <translation>Désactivé</translation> </message> <message> <source>Port %1</source> <comment>details report (parallel ports)</comment> - <translation type="unfinished"></translation> + <translation>Port %1</translation> </message> <message> <source>Disabled</source> <comment>details report (parallel ports)</comment> - <translation type="unfinished"></translation> + <translation>Désactivé</translation> </message> <message> <source>Device Filters</source> <comment>details report (USB)</comment> - <translation type="unfinished">Filtres </translation> + <translation>Filtres </translation> </message> <message> <source>%1 (%2 active)</source> <comment>details report (USB)</comment> - <translation type="unfinished">%1 (%2 actif)</translation> + <translation>%1 (%2 actif)</translation> </message> <message> <source>Disabled</source> <comment>details report (USB)</comment> - <translation type="unfinished"></translation> + <translation>Désactivé</translation> </message> <message> <source>Shared Folders</source> <comment>details report (shared folders)</comment> - <translation type="unfinished"></translation> + <translation>Dossiers partagés</translation> </message> <message> <source>None</source> <comment>details report (shared folders)</comment> - <translation type="unfinished">Aucun</translation> + <translation>Aucun</translation> </message> <message> <source>None</source> <comment>details report (description)</comment> - <translation type="unfinished">Aucun</translation> + <translation>Aucun</translation> </message> <message> <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source> - <translation type="unfinished">La machine virtuelle est <i>inaccessible</i>. Lisez le message d'erreur ci-dessous et cliquez sur <b>Actualiser</b> pour relancer le test :</translation> + <translation>La machine virtuelle est <i>inaccessible</i>. Lisez le message d'erreur ci-dessous et cliquez sur <b>Actualiser</b> pour relancer le test :</translation> </message> <message> <source>General</source> <comment>details report</comment> - <translation type="unfinished">Général</translation> + <translation>Général</translation> </message> <message> <source>System</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Système</translation> </message> <message> <source>Preview</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Prévisualisation</translation> </message> <message> <source>Display</source> <comment>details report</comment> - <translation type="unfinished">Affichage</translation> + <translation>Affichage</translation> </message> <message> <source>Storage</source> <comment>details report</comment> - <translation type="unfinished">Stockage</translation> + <translation>Stockage</translation> </message> <message> <source>Audio</source> <comment>details report</comment> - <translation type="unfinished">Son</translation> + <translation>Son</translation> </message> <message> <source>Network</source> <comment>details report</comment> - <translation type="unfinished">Réseau</translation> + <translation>Réseau</translation> </message> <message> <source>Serial Ports</source> <comment>details report</comment> - <translation type="unfinished">Ports séries</translation> + <translation>Ports séries</translation> </message> <message> <source>Parallel Ports</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Ports parallèles</translation> </message> <message> <source>USB</source> <comment>details report</comment> - <translation type="unfinished">USB</translation> + <translation>USB</translation> </message> <message> <source>Shared Folders</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Dossiers partagés</translation> </message> <message> <source>Description</source> <comment>details report</comment> - <translation type="unfinished">Description</translation> + <translation>Description</translation> </message> </context> <context> @@ -1004,19 +1004,19 @@ </message> <message> <source>Please specify the target for the OVF export. You can choose between a local file system export, uploading the OVF to the Sun Cloud service or an S3 storage server.</source> - <translation type="unfinished">Choisissez une cible pour l'exportation en OVF. Vous pouvez choisir entre une exportation vers le système de fichiers local et un téléchargement vers le service Sun Cloud ou un serveur de stockage S3.</translation> + <translation>Choisissez une cible pour l'exportation en OVF. Vous pouvez choisir entre une exportation vers le système de fichiers local et un téléchargement vers le service Sun Cloud ou un serveur de stockage S3.</translation> </message> <message> <source>&Local Filesystem </source> - <translation type="unfinished">Système de fichiers &local </translation> + <translation>Système de fichiers &local </translation> </message> <message> <source>Sun &Cloud</source> - <translation type="unfinished">Sun &Cloud</translation> + <translation>Sun &Cloud</translation> </message> <message> <source>&Simple Storage System (S3)</source> - <translation type="unfinished">&Simple Storage System (S3)</translation> + <translation>&Simple Storage System (S3)</translation> </message> </context> <context> @@ -1044,67 +1044,67 @@ </message> <message> <source>&Username:</source> - <translation type="unfinished">Nom d'&utilisateur :</translation> + <translation>Nom d'&utilisateur :</translation> </message> <message> <source>&Password:</source> - <translation type="unfinished">Mot de &passe :</translation> + <translation>Mot de &passe :</translation> </message> <message> <source>&Hostname:</source> - <translation type="unfinished">&Hôte :</translation> + <translation>&Hôte :</translation> </message> <message> <source>&Bucket:</source> - <translation type="unfinished">&Bucket :</translation> + <translation>&Bucket :</translation> </message> <message> <source>&File:</source> - <translation type="unfinished">&Fichier :</translation> + <translation>&Fichier :</translation> </message> <message> <source>Write in legacy OVF 0.9 format for compatibility with other virtualization products.</source> - <translation type="unfinished">Utiliser l'ancien format OVF 0.9 pour rester compatible avec certains logiciels de virtualisation.</translation> + <translation>Utiliser l'ancien format OVF 0.9 pour rester compatible avec certains logiciels de virtualisation.</translation> </message> <message> <source>&Write legacy OVF 0.9</source> - <translation type="unfinished">&Utiliser l'ancien format OVF 0.9</translation> + <translation>&Utiliser l'ancien format OVF 0.9</translation> </message> <message> <source>Create a Manifest file for automatic data integrity checks on import.</source> - <translation type="unfinished"></translation> + <translation>Créer un fichier manifeste pour vérifier automatiquement l'integreté des données importées.</translation> </message> <message> <source>Write &Manifest file</source> - <translation type="unfinished"></translation> + <translation>Créer fichier &manifeste</translation> </message> <message> <source>Appliance</source> - <translation type="unfinished">Application virtuelle</translation> + <translation>Application virtuelle</translation> </message> <message> <source>Select a file to export into</source> - <translation type="unfinished">Choisissez un fichier cible pour l'exportation</translation> + <translation>Choisissez un fichier cible pour l'exportation</translation> </message> <message> <source>Open Virtualization Format Archive (%1)</source> - <translation type="unfinished"></translation> + <translation>Archive Open Virtualization Format (%1)</translation> </message> <message> <source>Open Virtualization Format (%1)</source> - <translation type="unfinished">Open Virtualization Format (%1)</translation> + <translation>Open Virtualization Format (%1)</translation> </message> <message> <source>Please choose a filename to export the OVF/OVA to. If you use an <i>ova</i> file name extension, then all the files will be combined into one Open Virtualization Format Archive. If you use an <i>ovf</i> extension, several files will be written separately. Other extensions are not allowed.</source> - <translation type="unfinished"></translation> + <translation>Choisissez un nom de fichier pour l'exportation. Si vous utilisez l'extension de fichier <i>ova</i> les fichiers seront combinés en use seule archive Open Virtualization Format. Si vous utilisez l'extension <i>ovf</i> plusieurs fichiers séparés seront créés. D'autre extensions ne sont pas permis.</translation> </message> <message> <source>Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target.</source> - <translation type="unfinished">Complétez les autres champs (nom d'utilisateur, mot de passe, hôte et bucket) et fournissez un nom pour le fichier OVF cible.</translation> + <translation>Complétez les autres champs (nom d'utilisateur, mot de passe, hôte et bucket) et fournissez un nom pour le fichier OVF cible.</translation> </message> <message> <source>Please complete the additional fields like the username, password, hostname and the bucket, and provide a filename for the OVF target.</source> - <translation type="unfinished">Complétez les autres champs (nom d'utilisateur, mot de passe, hôte et bucket) et fournissez un nom pour le fichier OVF cible.</translation> + <translation>Complétez les autres champs (nom d'utilisateur, mot de passe, hôte et bucket) et fournissez un nom pour le fichier OVF cible.</translation> </message> </context> <context> @@ -1176,11 +1176,11 @@ <message> <source>Exporting Appliance ...</source> <translatorcomment>This entry show up in the window title as "Exporting Applicance ...: Export appliance '/hom". Why the dots then ?</translatorcomment> - <translation>Exportation de l'application virtuelle </translation> + <translation>Exportation de l'application virtuelle ...</translation> </message> <message> <source>Here you can change additional configuration values of the selected virtual machines. You can modify most of the properties shown by double-clicking on the items.</source> - <translation type="unfinished">Vous pouvez effectuer des modifications sur les configurations des machines virtuelles sélectionnées. La plupart des propriétés affichées peuvent être changées en cliquant dessus.</translation> + <translation>Vous pouvez effectuer des modifications sur les configurations des machines virtuelles sélectionnées. La plupart des propriétés affichées peuvent être changées en cliquant dessus.</translation> </message> </context> <context> @@ -1266,74 +1266,74 @@ <name>UIGLSettingsDlg</name> <message> <source>General</source> - <translation type="unfinished">Général</translation> + <translation>Général</translation> </message> <message> <source>Input</source> - <translation type="unfinished">Entrée</translation> + <translation>Entrée</translation> </message> <message> <source>Update</source> - <translation type="unfinished">Mise à jour</translation> + <translation>Mise à jour</translation> </message> <message> <source>Language</source> - <translation type="unfinished">Langue</translation> + <translation>Langue</translation> </message> <message> <source>USB</source> - <translation type="unfinished">USB</translation> + <translation>USB</translation> </message> <message> <source>Network</source> - <translation type="unfinished">Réseau</translation> + <translation>Réseau</translation> </message> <message> <source>Extensions</source> - <translation type="unfinished"></translation> + <translation>Extensions</translation> </message> <message> <source>VirtualBox - %1</source> - <translation type="unfinished">VirtualBox - %1</translation> + <translation>VirtualBox - %1</translation> </message> </context> <context> <name>UIGlobalSettingsExtension</name> <message> <source>&Extension Packages:</source> - <translation type="unfinished"></translation> + <translation>&Paquets:</translation> </message> <message> <source>Lists all installed packages.</source> - <translation type="unfinished"></translation> + <translation>Liste des paquets installés.</translation> </message> <message> <source>Active</source> - <translation type="unfinished"></translation> + <translation>Active</translation> </message> <message> <source>Name</source> - <translation type="unfinished"></translation> + <translation>Nom</translation> </message> <message> <source>Version</source> - <translation type="unfinished">Version</translation> + <translation>Version</translation> </message> <message> <source>Add package</source> - <translation type="unfinished"></translation> + <translation>Ajouter paquet</translation> </message> <message> <source>Remove package</source> - <translation type="unfinished"></translation> + <translation>Supprimer paquet</translation> </message> <message> <source>Select an extension package file</source> - <translation type="unfinished"></translation> + <translation>Sélectionner un paquet</translation> </message> <message> <source>Extension package files (%1)</source> - <translation type="unfinished"></translation> + <translation>Paquet (%1)</translation> </message> </context> <context> @@ -1376,38 +1376,38 @@ </message> <message> <source>When checked, the host screen saver will be disabled whenever a virtual machine is running.</source> - <translation type="unfinished"></translation> + <translation>Si cette case est cochée l'économiseur d'écran du système hôte sera désactivé pendant l'execution de machines virtuelles.</translation> </message> <message> <source>Disable Host &ScreenSaver</source> - <translation type="unfinished"></translation> + <translation>Désactiver l'é&conomiseur écran hôte</translation> </message> </context> <context> <name>UIGlobalSettingsInput</name> <message> <source>Host &Key:</source> - <translation type="unfinished">To&uche hôte :</translation> + <translation>To&uche hôte :</translation> </message> <message> <source>Displays the key used as a Host Key in the VM window. Activate the entry field and press a new Host Key. Note that alphanumeric, cursor movement and editing keys cannot be used.</source> - <translation type="unfinished">Affiche la touche utilisée comme touche hôte dans la fenêtre de la machine virtuelle. Cliquez sur le champ pour choisir une nouvelle touche hôte. Les touches d'édition, les flèches, ainsi que les touches alphanumériques ne peuvent pas être utilisées.</translation> + <translation>Affiche la touche utilisée comme touche hôte dans la fenêtre de la machine virtuelle. Cliquez sur le champ pour choisir une nouvelle touche hôte. Les touches d'édition, les flèches, ainsi que les touches alphanumériques ne peuvent pas être utilisées.</translation> </message> <message> <source>Reset Host Key</source> - <translation type="unfinished">Réinitialiser la touche hôte</translation> + <translation>Réinitialiser la touche hôte</translation> </message> <message> <source>Resets the key used as a Host Key in the VM window.</source> - <translation type="unfinished">Réinitialise la touche utilisée comme touche hôte dans la machine virtuelle.</translation> + <translation>Réinitialise la touche utilisée comme touche hôte dans la machine virtuelle.</translation> </message> <message> <source>When checked, the keyboard is automatically captured every time the VM window is activated. When the keyboard is captured, all keystrokes (including system ones like Alt-Tab) are directed to the VM.</source> - <translation type="unfinished">Si cette case est cochée le clavier sera capturé automatiquement dès l'activation d'une fenêtre machine. Quand le clavier est capturé toutes les frappes (même les combinaisons comme Alt-Tab) sont dirigées vers la machine virtuelle.</translation> + <translation>Si cette case est cochée le clavier sera capturé automatiquement dès l'activation d'une fenêtre machine. Quand le clavier est capturé toutes les frappes (même les combinaisons comme Alt-Tab) sont dirigées vers la machine virtuelle.</translation> </message> <message> <source>&Auto Capture Keyboard</source> - <translation type="unfinished">Capture &automatique du clavier</translation> + <translation>Capture &automatique du clavier</translation> </message> </context> <context> @@ -1473,7 +1473,7 @@ </message> <message> <source>&Remove host-only network</source> - <translation>&Enlever réseau privé hôte</translation> + <translation>&Supprimer réseau privé hôte</translation> </message> <message> <source>&Edit host-only network</source> @@ -1611,7 +1611,7 @@ </message> <message> <source>New Host-Only Interface</source> - <translation type="unfinished"></translation> + <translation>Nouvelle interface privée hôte</translation> </message> </context> <context> @@ -1764,7 +1764,7 @@ <name>UIHelpButton</name> <message> <source>&Help</source> - <translation type="unfinished">&Aide</translation> + <translation>&Aide</translation> </message> </context> <context> @@ -1938,11 +1938,11 @@ </message> <message> <source>Indicates whether the Remote Desktop Server is enabled (<img src=:/vrdp_16px.png/>) or not (<img src=:/vrdp_disabled_16px.png/>).</source> - <translation type="unfinished"></translation> + <translation>Indique si le serveur du bureau à distance est activé (<img src=:/vrdp_16px.png/>) ou non (<img src=:/vrdp_disabled_16px.png/>).</translation> </message> <message> <source><hr>The Remote Desktop Server is listening on port %1</source> - <translation type="unfinished"></translation> + <translation><hr>Le serveur du bureau à distance écoute sur le port %1</translation> </message> </context> <context> @@ -2132,15 +2132,15 @@ </message> <message> <source>Specifies whether multiple simultaneous connections to the VM are permitted.</source> - <translation type="unfinished"></translation> + <translation>Authorise ou non de multiples connexions simultanées vers la machine virtuelle.</translation> </message> <message> <source>&Allow Multiple Connections</source> - <translation type="unfinished"></translation> + <translation>&Autoriser les connexions multiples</translation> </message> <message> <source>You have 3D Acceleration enabled for a operation system which uses the WDDM video driver. For maximal performance set the guest VRAM to at least <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Vous avez activé l'accélération 3D pour un système.invité qui utilise l'architecture vidéo de Windows Vista. Pour une performance optimale vous devrez affecter au moins <b>%1</b> de mémoire vidéo à la machine virtuelle.</translation> </message> </context> <context> @@ -2299,11 +2299,11 @@ </message> <message> <source>Opens dialog to manage port forwarding rules.</source> - <translation type="unfinished"></translation> + <translation>Ouvrir la fenêtre pour gérer les règles de redirection de ports.</translation> </message> <message> <source>&Port Forwarding</source> - <translation type="unfinished"></translation> + <translation>Redirection de &ports</translation> </message> </context> <context> @@ -2373,31 +2373,31 @@ <name>UIMachineSettingsPortForwardingDlg</name> <message> <source>Port Forwarding Rules</source> - <translation type="unfinished"></translation> + <translation>Règles de redirection de ports</translation> </message> <message> <source>This table contains a list of port forwarding rules.</source> - <translation type="unfinished"></translation> + <translation>Cette table contient la liste des règle de redirection de ports.</translation> </message> <message> <source>Insert new rule</source> - <translation type="unfinished"></translation> + <translation>Ajouter une règle</translation> </message> <message> <source>Copy selected rule</source> - <translation type="unfinished"></translation> + <translation>Copier la règle sélectionnée</translation> </message> <message> <source>Delete selected rule</source> - <translation type="unfinished"></translation> + <translation>Supprimer la règle sélectionnée</translation> </message> <message> <source>This button adds new port forwarding rule.</source> - <translation type="unfinished"></translation> + <translation>Ce bouton ajoute une nouvelle règle de redirection de ports.</translation> </message> <message> <source>This button deletes selected port forwarding rule.</source> - <translation type="unfinished"></translation> + <translation>Ce bouton supprime la règle de redirection de ports sélectionnée.</translation> </message> </context> <context> @@ -2460,7 +2460,7 @@ </message> <message> <source>&Remove Shared Folder</source> - <translation>&Enlever un dossier partagé</translation> + <translation>&Supprimer un dossier partagé</translation> </message> <message> <source>&Folders List</source> @@ -2468,11 +2468,11 @@ </message> <message> <source>Auto-Mount</source> - <translation type="unfinished"></translation> + <translation>Montage automatique</translation> </message> <message> <source>Yes</source> - <translation type="unfinished">Oui</translation> + <translation>Oui</translation> </message> </context> <context> @@ -2516,15 +2516,15 @@ </message> <message> <source>When checked, the guest OS will try to automatically mount the shared folder on startup.</source> - <translation type="unfinished"></translation> + <translation>Si cette case est cochée le système d'exploitation invité essayera d'activer automatiquement le dossier partagé au démarrage.</translation> </message> <message> <source>&Auto-mount</source> - <translation type="unfinished"></translation> + <translation>&Montage automatique</translation> </message> <message> <source>If checked, this shared folder will be permanent.</source> - <translation type="unfinished"></translation> + <translation>Si cette case est cochée le dossier partagé sera créé de façon permanente.</translation> </message> </context> <context> @@ -2618,7 +2618,7 @@ </message> <message> <source><nobr>Expand/Collapse&nbsp;Item</nobr></source> - <translation><nobr>&Développer/Réduire</nobr></translation> + <translation><nobr>Développer/Réduire</nobr></translation> </message> <message> <source><nobr>Add&nbsp;Hard&nbsp;Disk</nobr></source> @@ -2662,7 +2662,7 @@ </message> <message> <source>Remove Controller</source> - <translation>Enlever le contrôleur</translation> + <translation>Supprimer le contrôleur</translation> </message> <message> <source>Add Attachment</source> @@ -2846,67 +2846,67 @@ </message> <message> <source>Type:</source> - <translation type="unfinished"></translation> + <translation>Type:</translation> </message> <message> <source>Host Drive</source> - <translation type="unfinished"></translation> + <translation>Lecteur hôte</translation> </message> <message> <source>Image</source> - <translation type="unfinished"></translation> + <translation>Image</translation> </message> <message> <source>Choose or create a virtual hard disk file. The virtual machine will see the data in the file as the contents of the virtual hard disk.</source> - <translation type="unfinished"></translation> + <translation>Choisissez ou créez un fichier de disque dur nouveau. La machine virtuelle vera les données dans le fichier comme contenu du disque dur virtuel.</translation> </message> <message> <source>Set up the virtual hard disk</source> - <translation type="unfinished"></translation> + <translation>Configuration du disque dur virtuel</translation> </message> <message> <source>CD/DVD &Drive:</source> - <translation type="unfinished"></translation> + <translation>&Lecteur CD/DVD :</translation> </message> <message> <source>Choose a virtual CD/DVD disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source> - <translation type="unfinished"></translation> + <translation>Choisissez un disque CD/DVD virtuel ou un lecteur physique pour utiliser avec le lecteur virtuel. La machine virtuelle vera un disque inséré dans le lecteur avec comme contenu les données dans le fichier ou sur le disque.</translation> </message> <message> <source>Set up the virtual CD/DVD drive</source> - <translation type="unfinished"></translation> + <translation>Configuration dulecteur de CD/DVD virtuel</translation> </message> <message> <source>Floppy &Drive:</source> - <translation type="unfinished"></translation> + <translation>&Lecteur de disquettes :</translation> </message> <message> <source>Choose a virtual floppy disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source> - <translation type="unfinished"></translation> + <translation>Choisissez une disquette virtuel ou un lecteur physique pour utiliser avec le lecteur virtuel. La machine virtuelle vera un disque inséré dans le lecteur avec comme contenu les données dans le fichier ou sur la disquette.</translation> </message> <message> <source>Set up the virtual floppy drive</source> - <translation type="unfinished"></translation> + <translation>Configuration du lecteur de disquettes virtuel</translation> </message> <message> <source>Create a new hard disk...</source> - <translation type="unfinished"></translation> + <translation>Créer un nouveau disque dur...</translation> </message> <message> <source>Choose a virtual hard disk file...</source> - <translation type="unfinished"></translation> + <translation>Choisissez un fichier de disque dur virtuel...</translation> </message> <message> <source>Choose a virtual CD/DVD disk file...</source> - <translation type="unfinished"></translation> + <translation>Choisissez un fichier de CD/DVD virtuel...</translation> </message> <message> <source>Remove disk from virtual drive</source> - <translation type="unfinished"></translation> + <translation>Ejecter le disque du lecteur virtuel</translation> </message> <message> <source>Choose a virtual floppy disk file...</source> - <translation type="unfinished"></translation> + <translation>Choisissez un fichier de disquette virtuel...</translation> </message> </context> <context> @@ -3071,15 +3071,15 @@ </message> <message> <source>&Chipset:</source> - <translation type="unfinished"></translation> + <translation>&Chipset:</translation> </message> <message> <source>Defines chipset type used in this VM.</source> - <translation type="unfinished"></translation> + <translation>Définit le chipset utilisé dans cette machine.</translation> </message> <message> <source>you have assigned ICH9 chipset type to this VM. It will not work properly unless the IO-APIC feature is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="unfinished"></translation> + <translation>Vous avez affecté un chipset de type ICH9 à cette machine. Ceci nécessite l'activation d'un contrôleur APIC, qui sera activée automatiquement en cliquant sur OK pour accepter les.paramètres actuels.</translation> </message> </context> <context> @@ -3169,42 +3169,42 @@ <message> <source><nobr>Vendor ID: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>ID du vendeur : %1</nobr></translation> + <translation><nobr>ID du vendeur : %1</nobr></translation> </message> <message> <source><nobr>Product ID: %2</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>ID du produit : %2</nobr></translation> + <translation><nobr>ID du produit : %2</nobr></translation> </message> <message> <source><nobr>Revision: %3</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Révision : %3</nobr></translation> + <translation><nobr>Révision : %3</nobr></translation> </message> <message> <source><nobr>Product: %4</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Produit : %4</nobr></translation> + <translation><nobr>Produit : %4</nobr></translation> </message> <message> <source><nobr>Manufacturer: %5</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Fabricant : %5</nobr></translation> + <translation><nobr>Fabricant : %5</nobr></translation> </message> <message> <source><nobr>Serial No.: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Nº de série : %1</nobr></translation> + <translation><nobr>Nº de série : %1</nobr></translation> </message> <message> <source><nobr>Port: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Port : %1</nobr></translation> + <translation><nobr>Port : %1</nobr></translation> </message> <message> <source><nobr>State: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>État : %1</nobr></translation> + <translation><nobr>État : %1</nobr></translation> </message> </context> <context> @@ -3568,15 +3568,15 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source><p>Select a virtual hard disk to be used as the boot hard disk of the virtual machine. You can either create a new hard disk or select an existing one from the drop-down list or by pressing corresponding button (to invoke file-open window).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> - <translation type="unfinished"></translation> + <translation><p>Choisissez un disque dur virtuel à utiliser pour l'amorçage de la machine virtuelle. Void pouvez soit créer un nouveau disque, soit choisir une image existante dans la liste ou en cliquant sur le bouton corréspontand.</p><p>Si vous avez besoin d'une configuration de disques plus complexe, vous pouvez sauter cette étape et allouer des disques plus tard dans la Configuration de la machine.</p></translation> </message> <message> <source>Choose a virtual hard disk file...</source> - <translation type="unfinished"></translation> + <translation>Choisissez un fichier de disque dur virtuel...</translation> </message> <message> <source>The recommended size of the boot hard disk is <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>La taille recommandée pour le disque dur d'amorçage est de <b>%1</b>.</translation> </message> </context> <context> @@ -3623,27 +3623,27 @@ And the size is not necessarily "in megabytes", the slider chooses the <name>UIPortForwardingModel</name> <message> <source>Name</source> - <translation type="unfinished"></translation> + <translation>Nom</translation> </message> <message> <source>Protocol</source> - <translation type="unfinished"></translation> + <translation>Protocole</translation> </message> <message> <source>Host IP</source> - <translation type="unfinished"></translation> + <translation>IP hôte</translation> </message> <message> <source>Host Port</source> - <translation type="unfinished"></translation> + <translation>Port hôte</translation> </message> <message> <source>Guest IP</source> - <translation type="unfinished"></translation> + <translation>IP invité</translation> </message> <message> <source>Guest Port</source> - <translation type="unfinished"></translation> + <translation>Port invité</translation> </message> </context> <context> @@ -3679,88 +3679,88 @@ And the size is not necessarily "in megabytes", the slider chooses the <name>UISession</name> <message> <source>Install</source> - <translation type="unfinished"></translation> + <translation>Installer</translation> </message> </context> <context> <name>UISettingsDialog</name> <message> <source><i>Select a settings category from the list on the left-hand side and move the mouse over a settings item to get more information.</i></source> - <translation type="unfinished"></translation> + <translation><i>Choisissez une catégorie à configurer dans la liste sur la gauche et déplacez le pointeur de la souris au-dessus d'un élément pour obtenir plus d'informations.</i></translation> </message> <message> <source>On the <b>%1</b> page, %2</source> - <translation type="unfinished">Sur la page <b>%1</b>, %2</translation> + <translation>Sur la page <b>%1</b>, %2</translation> </message> <message> <source>Invalid settings detected</source> - <translation type="unfinished">Paramètre invalide détecté</translation> + <translation>Paramètre invalide détecté</translation> </message> <message> <source>Non-optimal settings detected</source> - <translation type="unfinished">Paramètre non optimal détecté</translation> + <translation>Paramètre non optimal détecté</translation> </message> <message> <source>Settings</source> - <translation type="unfinished">Paramètres</translation> + <translation>Paramètres</translation> </message> </context> <context> <name>UIVMCloseDialog</name> <message> <source>Close Virtual Machine</source> - <translation type="unfinished">Fermer la machine virtuelle</translation> + <translation>Fermer la machine virtuelle</translation> </message> <message> <source>You want to:</source> - <translation type="unfinished">Vous désirez :</translation> + <translation>Vous désirez :</translation> </message> <message> <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to the virtual machine.</p></source> - <translation type="unfinished"><p>Enregistre l'état d'exécution actuel de la machine virtuelle sur le disque dur réel de l'ordinateur.</p><p>Au prochain lancement de cette machine cet état sera lu et l'exécution reprendra comme au moment de la sauvegarde, vous laissant reprendre là où vous en étiez.</p><p>L'enregistrement de l'état de la machine peut prendre un certain temps, qui dépend du système d'exploitation invité et de la quantité de mémoire vive allouée à la machine virtuelle.</p></translation> + <translation><p>Enregistre l'état d'exécution actuel de la machine virtuelle sur le disque dur réel de l'ordinateur.</p><p>Au prochain lancement de cette machine cet état sera lu et l'exécution reprendra comme au moment de la sauvegarde, vous laissant reprendre là où vous en étiez.</p><p>L'enregistrement de l'état de la machine peut prendre un certain temps, qui dépend du système d'exploitation invité et de la quantité de mémoire vive allouée à la machine virtuelle.</p></translation> </message> <message> <source>&Save the machine state</source> - <translation type="unfinished">&Enregistrer l'état de la machine</translation> + <translation>&Enregistrer l'état de la machine</translation> </message> <message> <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> - <translation type="unfinished"><p>Envoie le signal ACPI marche/arrêt à la machine virtuelle.</p><p>Le système d'exploitation invité de la machine virtuelle devrait recevoir ce signal et s'éteindre proprement. C'est la meilleure manière d'éteindre la machine car elle permet aux logiciels de sauvegarder leurs données.</p><p>Si la machine virtuelle ne réagit pas, il est possible que le système d'exploitation invité ne soit pas configuré correctement ou ne gère pas ce signal. Dans ce cas choisissez <b>Éteindre la machine</b> pour l'arrêter.</p></translation> + <translation><p>Envoie le signal ACPI marche/arrêt à la machine virtuelle.</p><p>Le système d'exploitation invité de la machine virtuelle devrait recevoir ce signal et s'éteindre proprement. C'est la meilleure manière d'éteindre la machine car elle permet aux logiciels de sauvegarder leurs données.</p><p>Si la machine virtuelle ne réagit pas, il est possible que le système d'exploitation invité ne soit pas configuré correctement ou ne gère pas ce signal. Dans ce cas choisissez <b>Éteindre la machine</b> pour l'arrêter.</p></translation> </message> <message> <source>S&end the shutdown signal</source> - <translation type="unfinished">Envoyer le &signal d'extinction</translation> + <translation>Envoyer le &signal d'extinction</translation> </message> <message> <source><p>Turns off the virtual machine.</p><p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source> - <translation type="unfinished"><p>Éteint la machine virtuelle</p><p>Cette action arrêtera immédiatement l'exécution de la machine virtuelle donc le système d'exploitation invité ne pourra pas s'éteindre proprement. Ceci peut entrainer la <i>perte de données</i>. Cette action n'est recommandée que si la machine virtuelle ne répond pas à l'action <b>Envoi du signal d'extinction</b>.</p></translation> + <translation><p>Éteint la machine virtuelle</p><p>Cette action arrêtera immédiatement l'exécution de la machine virtuelle donc le système d'exploitation invité ne pourra pas s'éteindre proprement. Ceci peut entrainer la <i>perte de données</i>. Cette action n'est recommandée que si la machine virtuelle ne répond pas à l'action <b>Envoi du signal d'extinction</b>.</p></translation> </message> <message> <source>&Power off the machine</source> - <translation type="unfinished">&Éteindre la machine</translation> + <translation>&Éteindre la machine</translation> </message> <message> <source>Restore the machine state stored in the current snapshot</source> - <translation type="unfinished">Restaurer l'état de la machine sauvegardé dans l'instantané actuel</translation> + <translation>Restaurer l'état de la machine sauvegardé dans l'instantané actuel</translation> </message> <message> <source><p>When checked, the machine will be returned to the state stored in the current snapshot after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and start again at that snapshot.</p></source> - <translation type="unfinished"><p>Si cette case est cochée, lorsque vous l'éteindrez la machine sera remise dans l'état de l'instantané utilisé. Choisissez cette option si vous êtes sûrs de vouloir ignorer les modifications de cette session et repartir de cet instantané.</p></translation> + <translation><p>Si cette case est cochée, lorsque vous l'éteindrez la machine sera remise dans l'état de l'instantané utilisé. Choisissez cette option si vous êtes sûrs de vouloir ignorer les modifications de cette session et repartir de cet instantané.</p></translation> </message> <message> <source>&Restore current snapshot '%1'</source> - <translation type="unfinished">&Restaurer l'instantané actuel '%1'</translation> + <translation>&Restaurer l'instantané actuel '%1'</translation> </message> </context> <context> <name>UIVMDesktop</name> <message> <source>&Details</source> - <translation type="unfinished">&Détails</translation> + <translation>&Détails</translation> </message> <message> <source>&Snapshots</source> - <translation type="unfinished">&Instantanés</translation> + <translation>&Instantanés</translation> </message> </context> <context> @@ -3816,106 +3816,106 @@ And the size is not necessarily "in megabytes", the slider chooses the <name>UIVMPreviewWindow</name> <message> <source>Update Disabled</source> - <translation type="unfinished"></translation> + <translation>Actualisation désactivée</translation> </message> <message> <source>Every 0.5 s</source> - <translation type="unfinished"></translation> + <translation>Toutes les 0.5s</translation> </message> <message> <source>Every 1 s</source> - <translation type="unfinished"></translation> + <translation>Toutes les 1s</translation> </message> <message> <source>Every 2 s</source> - <translation type="unfinished"></translation> + <translation>Toutes les 2s</translation> </message> <message> <source>Every 5 s</source> - <translation type="unfinished"></translation> + <translation>Toutes les 5s</translation> </message> <message> <source>Every 10 s</source> - <translation type="unfinished"></translation> + <translation>Toutes les 10s</translation> </message> <message> <source>No Preview</source> - <translation type="unfinished"></translation> + <translation>Pas de prévisualisation</translation> </message> </context> <context> <name>UIVMSettingsDlg</name> <message> <source>General</source> - <translation type="unfinished">Général</translation> + <translation>Général</translation> </message> <message> <source>System</source> - <translation type="unfinished"></translation> + <translation>Système</translation> </message> <message> <source>Display</source> - <translation type="unfinished">Affichage</translation> + <translation>Affichage</translation> </message> <message> <source>Storage</source> - <translation type="unfinished">Stockage</translation> + <translation>Stockage</translation> </message> <message> <source>Audio</source> - <translation type="unfinished">Son</translation> + <translation>Son</translation> </message> <message> <source>Network</source> - <translation type="unfinished">Réseau</translation> + <translation>Réseau</translation> </message> <message> <source>Ports</source> - <translation type="unfinished">Ports</translation> + <translation>Ports</translation> </message> <message> <source>Serial Ports</source> - <translation type="unfinished">Ports séries</translation> + <translation>Ports séries</translation> </message> <message> <source>Parallel Ports</source> - <translation type="unfinished"></translation> + <translation>Ports parallèle</translation> </message> <message> <source>USB</source> - <translation type="unfinished">USB</translation> + <translation>USB</translation> </message> <message> <source>Shared Folders</source> - <translation type="unfinished"></translation> + <translation>Dossiers partagés</translation> </message> <message> <source>%1 - %2</source> - <translation type="unfinished">%1 - %2</translation> + <translation>%1 - %2</translation> </message> <message> <source>you have selected a 64-bit guest OS type for this VM. As such guests require hardware virtualization (VT-x/AMD-V), this feature will be enabled automatically.</source> - <translation type="unfinished">vous avez choisi un système de type 64 bit pour cette machine virtuelle. Comme la virtualisation matérielle de l'hôte (VT-x/AMD-V) est nécessaire pour un tel invité, elle sera automatiquement activée.</translation> + <translation>vous avez choisi un système de type 64 bit pour cette machine virtuelle. Comme la virtualisation matérielle de l'hôte (VT-x/AMD-V) est nécessaire pour un tel invité, elle sera automatiquement activée.</translation> </message> <message> <source>you have 2D Video Acceleration enabled. As 2D Video Acceleration is supported for Windows guests only, this feature will be disabled.</source> - <translation type="unfinished">vous avez activé l'accélération vidéo 2D. Comme l'accélération 2D n'est supportée que pour des invités Windows, elle sera désactivée.</translation> + <translation>vous avez activé l'accélération vidéo 2D. Comme l'accélération 2D n'est supportée que pour des invités Windows, elle sera désactivée.</translation> </message> <message> <source>you have enabled a USB HID (Human Interface Device). This will not work unless USB emulation is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="unfinished">vous avez activé un périphérique USB HID (clavier, souris ou tablette). Celui-ci ne pourra fonctionner que si l'émulation USB est aussi activée donc elle le sera automatiquement lorsque vous cliquerez sur OK.</translation> + <translation>vous avez activé un périphérique USB HID (clavier, souris ou tablette). Celui-ci ne pourra fonctionner que si l'émulation USB est aussi activée donc elle le sera automatiquement lorsque vous cliquerez sur OK.</translation> </message> <message> <source>at most one supported</source> - <translation type="unfinished"></translation> + <translation>au plus un seul supporté</translation> </message> <message> <source>up to %1 supported</source> - <translation type="unfinished"></translation> + <translation>justqu'à %1 supporté</translation> </message> <message> <source>you are currently using more storage controllers than a %1 chipset supports. Please change the chipset type on the System settings page or reduce the number of the following storage controllers on the Storage settings page: %2.</source> - <translation type="unfinished"></translation> + <translation>Vou utilisez plus de contrôleurs de stockage qu'un chipset %1 ne supporte. Veuillez changer le type du chipset sur la page Système des paramètres de la machine ou bien reduire en nombre les contrôleurs de stockage suivants sur la page Stockage: %2.</translation> </message> </context> <context> @@ -5291,128 +5291,128 @@ And the size is not necessarily "in megabytes", the slider chooses the <message> <source>Remote Desktop Server Port</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Port du bureau à distance</translation> </message> <message> <source>Remote Desktop Server</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Serveur du bureau à distance (RDP)</translation> </message> <message> <source>Disabled</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Désactivé</translation> </message> <message> <source>Choose a virtual hard disk file</source> - <translation type="unfinished"></translation> + <translation>Choisissez un fichier de disque dur virtuel</translation> </message> <message> <source>hard disk</source> - <translation type="unfinished">le disque dur</translation> + <translation>disque dur</translation> </message> <message> <source>Choose a virtual CD/DVD disk file</source> - <translation type="unfinished"></translation> + <translation>Choisissez un fichier de CD/DVD virtuel</translation> </message> <message> <source>CD/DVD-ROM disk</source> - <translation type="unfinished"></translation> + <translation>CD/DVD-ROM</translation> </message> <message> <source>Choose a virtual floppy disk file</source> - <translation type="unfinished"></translation> + <translation>Choisissez un fichier de disquette virtuel</translation> </message> <message> <source>floppy disk</source> - <translation type="unfinished"></translation> + <translation>Disquette</translation> </message> <message> <source>All %1 images (%2)</source> - <translation type="unfinished"></translation> + <translation>Tous les %1 images (%2)</translation> </message> <message> <source>All files (*)</source> - <translation type="unfinished">Tous les fichiers (*)</translation> + <translation>Tous les fichiers (*)</translation> </message> <message> <source>Fault Tolerant Syncing</source> <comment>MachineState</comment> - <translation type="unfinished"></translation> + <translation>Synchronisation tolérent aux erreurs</translation> </message> <message> <source>Unlocked</source> <comment>SessionState</comment> - <translation type="unfinished"></translation> + <translation>Déverrouillée</translation> </message> <message> <source>Locked</source> <comment>SessionState</comment> - <translation type="unfinished"></translation> + <translation>Verrouillée</translation> </message> <message> <source>Unlocking</source> <comment>SessionState</comment> - <translation type="unfinished"></translation> + <translation>Dévérrouillage</translation> </message> <message> <source>Null</source> <comment>AuthType</comment> - <translation type="unfinished">Aucune</translation> + <translation>Aucune</translation> </message> <message> <source>External</source> <comment>AuthType</comment> - <translation type="unfinished">Externe</translation> + <translation>Externe</translation> </message> <message> <source>Guest</source> <comment>AuthType</comment> - <translation type="unfinished">Invité</translation> + <translation>Invité</translation> </message> <message> <source>Intel HD Audio</source> <comment>AudioControllerType</comment> - <translation type="unfinished"></translation> + <translation>Intel Audio HD</translation> </message> <message> <source>UDP</source> <comment>NATProtocolType</comment> - <translation type="unfinished"></translation> + <translation>UDP</translation> </message> <message> <source>TCP</source> <comment>NATProtocolType</comment> - <translation type="unfinished"></translation> + <translation>TCP</translation> </message> <message> <source>PIIX3</source> <comment>ChipsetType</comment> - <translation type="unfinished">PIIX3</translation> + <translation>PIIX3</translation> </message> <message> <source>ICH9</source> <comment>ChipsetType</comment> - <translation type="unfinished">ICH9</translation> + <translation>ICH9</translation> </message> <message> <source>and</source> - <translation type="unfinished"></translation> + <translation>et</translation> </message> <message> <source>MB</source> <comment>size suffix MBytes=1024KBytes</comment> - <translation type="unfinished"></translation> + <translation>Mio</translation> </message> <message> <source>Readonly</source> <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>Lecture seule</translation> </message> <message> <source>Multi-attach</source> <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>Attachements multiples</translation> </message> </context> <context> @@ -5529,7 +5529,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>R&emove</source> - <translation>&Enlever</translation> + <translation>&Supprimer</translation> </message> <message> <source>Re&lease</source> @@ -5549,7 +5549,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>Remove the selected medium</source> - <translation>Enlever le média sélectionné</translation> + <translation>Supprimer le média sélectionné</translation> </message> <message> <source>Release the selected medium by detaching it from the machines</source> @@ -5574,7 +5574,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>Checking accessibility</source> - <translation>Actualisation...</translation> + <translation>Vérifie l'accessibilité</translation> </message> <message> <source>&Select</source> @@ -5669,19 +5669,19 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>CD/DVD-ROM disk</source> - <translation type="unfinished"></translation> + <translation>CD/DVD-ROM</translation> </message> <message> <source>hard disk</source> - <translation type="unfinished">le disque dur</translation> + <translation>disque dur</translation> </message> <message> <source>floppy disk</source> - <translation type="unfinished"></translation> + <translation>Disquette</translation> </message> <message> <source>All %1 images (%2)</source> - <translation type="unfinished"></translation> + <translation>Tous les %1 images (%2)</translation> </message> </context> <context> @@ -5700,7 +5700,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>Minimize Window</source> - <translation type="unfinished"></translation> + <translation>Minimiser la fenêtre</translation> </message> </context> <context> @@ -6207,7 +6207,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source><p>Are you sure you want to remove the %1 <nobr><b>%2</b></nobr> from the list of known media?</p></source> - <translation><p>Voulez-vous vraiment enlever %1 <nobr><b>%2</b></nobr> de la liste des médias connus ?</p></translation> + <translation><p>Voulez-vous vraiment supprimer %1 <nobr><b>%2</b></nobr> de la liste des médias connus ?</p></translation> </message> <message> <source>Note that as this hard disk is inaccessible its storage unit cannot be deleted right now.</source> @@ -6224,7 +6224,7 @@ And the size is not necessarily "in megabytes", the slider chooses the <message> <source>Remove</source> <comment>medium</comment> - <translation>Enlever</translation> + <translation>Supprimer</translation> </message> <message> <source><p>The hard disk storage unit at location <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this location because it can be already used by another virtual hard disk.</p><p>Please specify a different location.</p></source> @@ -6367,7 +6367,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source><p>Deleting this host-only network will remove the host-only interface this network is based on. Do you want to remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> this interface may be in use by one or more virtual network adapters belonging to one of your VMs. After it is removed, these adapters will no longer be usable until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation><p>Si vous enlevez ce réseau privé hôte, l'interface correspondante de la machine hôte (<nobr><b>%1</b></nobr>) sera également enlevée. Voulez-vous vraiment enlever cette interface ?</p><p><b>Note :</b> cette interface est peut-être utilisée par d'autres machines virtuelles. Si vous l'enlevez, ces interfaces ne seront plus utilisables jusqu'à ce que vous modifiez leur configuration en choisissant un autre réseau privé hôte ou un autre mode d'accès.</p></translation> + <translation><p>Si vous enlevez ce réseau privé hôte, l'interface correspondante de la machine hôte (<nobr><b>%1</b></nobr>) sera également enlevée. Voulez-vous vraiment supprimer cette interface ?</p><p><b>Note :</b> cette interface est peut-être utilisée par d'autres machines virtuelles. Si vous l'enlevez, ces interfaces ne seront plus utilisables jusqu'à ce que vous modifiez leur configuration en choisissant un autre réseau privé hôte ou un autre mode d'accès.</p></translation> </message> <message> <source>A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />Replacing it will overwrite its contents.</source> @@ -6531,7 +6531,7 @@ And the size is not necessarily "in megabytes", the slider chooses the <message> <source>&Remove</source> <comment>medium</comment> - <translation>&Enlever</translation> + <translation>&Supprimer</translation> </message> <message> <source><p>Are you sure you want to delete the CD/DVD-ROM device?</p><p>You will not be able to mount any CDs or ISO images or install the Guest Additions without it!</p></source> @@ -6587,39 +6587,39 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>Failed to open virtual machine located in %1.</source> - <translation type="unfinished"></translation> + <translation>Échec du démarrage de la machine virtuelle %1.</translation> </message> <message> <source>Failed to add virtual machine <b>%1</b> located in <i>%2</i> because its already present.</source> - <translation type="unfinished"></translation> + <translation>Échec de l'addition de la machine virtuelle <b>%1</b> de la location <i>%2</i>. La machine est déjà présente.</translation> </message> <message> <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well?</p></source> - <translation type="unfinished"></translation> + <translation><p>Vous êtes sur le point d'enlever la machine virtuelle <b>%1</b> de la liste des machines.</p><p>Voulez-vous également suprimer les fichiers contenant la machine virtuelle de votre disque dur?</p></translation> </message> <message> <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well? Doing this will also remove the files containing the machine's virtual hard disks if they are not in use by another machine.</p></source> - <translation type="unfinished"></translation> + <translation><p>Vous êtes sur le point d'enlever la machine virtuelle <b>%1</b> de la liste des machines.</p><p>Voulez-vous également suprimer les fichiers contenant la machine virtuelle de votre disque dur? Ceci enlevera également les fichiers contenant les disques durs virtuels de la machine s'ils ne sont pas aussi en utilisation par une autre machine.</p></translation> </message> <message> <source>Delete all files</source> - <translation type="unfinished"></translation> + <translation>Supprimer tous les fichiers</translation> </message> <message> <source>Remove only</source> - <translation type="unfinished"></translation> + <translation>Supprimer de la liste</translation> </message> <message> <source>You are about to remove the inaccessible virtual machine <b>%1</b> from the machine list. Do you wish to proceed?</source> - <translation type="unfinished"></translation> + <translation>Vous êtes sur le point d'enlever la machine virtuelle non-disponible <b>%1</b> de la liste des machines. Voulez-vous continuer?</translation> </message> <message> <source>Remove</source> - <translation type="unfinished">Enlever</translation> + <translation>Supprimer</translation> </message> <message> <source><p>You are about to add a virtual hard disk to controller <b>%1</b>.</p><p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p></source> - <translation type="unfinished"></translation> + <translation><p>Vous êtes sur le point d'ajouter un nouveau contrôleur de disques durs virtuels <b>%1</b>.</p><p>Voulez-vous créer un nouveau fichier vide pour le contenu du disque ou bien en choisir un existant?</p></translation> </message> <message> <source>Create &new disk</source> @@ -6665,7 +6665,6 @@ And the size is not necessarily "in megabytes", the slider chooses the <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> - <numerusform></numerusform> </translation> </message> <message> @@ -6682,7 +6681,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>&Remove</source> - <translation type="unfinished">&Enlever</translation> + <translation>&Supprimer</translation> </message> <message> <source>The current port forwarding rules are not valid. None of the host or guest port values may be set to zero.</source> @@ -6731,7 +6730,7 @@ And the size is not necessarily "in megabytes", the slider chooses the <message> <source>Switch</source> <comment>scale</comment> - <translation type="unfinished">Basculer</translation> + <translation>Basculer</translation> </message> <message> <source>Failed to open the Extension Pack <b>%1</b>.</source> @@ -6834,7 +6833,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>&New...</source> - <translation>&Nouvelle...</translation> + <translation>&Créer...</translation> </message> <message> <source>Create a new virtual machine</source> @@ -6977,31 +6976,31 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>Select a virtual machine file</source> - <translation type="unfinished"></translation> + <translation>Choisir un fichier machine virtuelle</translation> </message> <message> <source>Virtual machine files (%1)</source> - <translation type="unfinished"></translation> + <translation>Fichiers machine virtuelle (%1)</translation> </message> <message> <source>Manager</source> - <translation type="unfinished"></translation> + <translation>Gestionnaire</translation> </message> <message> <source>&Add...</source> - <translation type="unfinished">&Ajouter...</translation> + <translation>&Ajouter...</translation> </message> <message> <source>Add an existing virtual machine</source> - <translation type="unfinished"></translation> + <translation>Ajouter une machine virtuelle existante</translation> </message> <message> <source>&Remove</source> - <translation type="unfinished">&Enlever</translation> + <translation>&Supprimer</translation> </message> <message> <source>Remove the selected virtual machine</source> - <translation type="unfinished"></translation> + <translation>Supprimer la machine virtuelle sélectionnée</translation> </message> <message> <source>Show in Finder</source> @@ -7013,7 +7012,7 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>Create Alias on Desktop</source> - <translation type="unfinished"></translation> + <translation>Créer un alias sur le bureau</translation> </message> <message> <source>Creates an Alias file to the VirtualBox Machine Definition file on your Desktop.</source> @@ -7021,35 +7020,35 @@ And the size is not necessarily "in megabytes", the slider chooses the </message> <message> <source>Show in Explorer</source> - <translation type="unfinished"></translation> + <translation>Afficher dans l'explorateur</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in Explorer.</source> - <translation type="unfinished"></translation> + <translation>Afficher le fichier de définition de la machine virtuelle dans l'explorateur</translation> </message> <message> <source>Create Shortcut on Desktop</source> - <translation type="unfinished"></translation> + <translation>Créer un raccourci sur le bureau</translation> </message> <message> <source>Creates an Shortcut file to the VirtualBox Machine Definition file on your Desktop.</source> - <translation type="unfinished"></translation> + <translation>Créer un raccourci vers le fichier de définition de la machine virtuelle</translation> </message> <message> <source>Show in File Manager</source> - <translation type="unfinished"></translation> + <translation>Afficher dans le gestionnaire de fichier</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in the File Manager</source> - <translation type="unfinished"></translation> + <translation>Afficher le fichier de définition de la machine virtuelle dans le gestionnaire de fichier</translation> </message> <message> <source>Show Toolbar</source> - <translation type="unfinished"></translation> + <translation>Afficher la barre d'outils</translation> </message> <message> <source>Show Statusbar</source> - <translation type="unfinished"></translation> + <translation>Afficher la barre d'état</translation> </message> </context> <context> @@ -7500,7 +7499,7 @@ And the size is not necessarily "in megabytes", the slider chooses the <message> <source>Not Available</source> <comment>details report (VRDE server port)</comment> - <translation type="unfinished">Non disponible</translation> + <translation>Non disponible</translation> </message> </context> <context> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts index 579df8697..7acc261a8 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts @@ -8005,7 +8005,7 @@ Versione %1</translation> <message> <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source> <comment>medium</comment> - <translation>Il collegamento di questo disco fisso sarà eseguito indirettamente utilizzando nuovo disco differenziale.</translation> + <translation>Il collegamento di questo disco fisso sarà eseguito indirettamente utilizzando un nuovo disco differenziale.</translation> </message> <message> <source>Some of the media in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these media.</source> @@ -10502,7 +10502,7 @@ la lingua a quella predefinita di sistema.</qt> </message> <message> <source><p>You are about to install a VirtualBox extension pack. Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></source> - <translation><p>Stai per installare un pacchetto di estensione per VirtualBox.I pacchetti di estensione completano le funzionalità di VirtualBox e possono contenere programmi di sistema potenzialmente pericolosi. Leggi con attenzione la descrizione seguente e procedi solo se hai ottenuto il pacchetto di estensione da una fonte attendibile.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Nome:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Versione:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Descrizione:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></translation> + <translation><p>Stai per installare un pacchetto di estensione per VirtualBox. I pacchetti di estensione completano le funzionalità di VirtualBox e possono contenere programmi di sistema potenzialmente pericolosi. Leggi con attenzione la descrizione seguente e procedi solo se hai ottenuto il pacchetto di estensione da una fonte attendibile.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Nome:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Versione:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Descrizione:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></translation> </message> <message> <source>&Install</source> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts index daa8d2b1f..623ca2546 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts @@ -1897,7 +1897,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/wizards/firstrun/UIFirstRunWzd.cpp" line="99"/> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be mounted on the virtual machine and the machine will start execution.</p></source> - <translation type="obsolete"><p>上記ãŒæ£ã—ã„ãªã‚‰ã€<b>[完了]</b>ボタンをクリックã—ã¦ãã ã•ã„。 é¸æŠžã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ã¯ä»®æƒ³ãƒžã‚·ãƒ³ã«å–り付ã‘られã€ä»®æƒ³ãƒžã‚·ãƒ³ã¯å®Ÿè¡Œã‚’開始ã—ã¾ã™ã€‚</p></translation> + <translation type="obsolete"><p>上記ã®è¨å®šãŒæ£ã—ã‘ã‚Œã°ã€<b>[終了]</b>ボタンをクリックã—ã¦ãã ã•ã„。 é¸æŠžã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ã¯ä»®æƒ³ãƒžã‚·ãƒ³ã«å–り付ã‘られã€ä»®æƒ³ãƒžã‚·ãƒ³ã¯å®Ÿè¡Œã‚’開始ã—ã¾ã™ã€‚</p></translation> </message> <message> <location filename="../src/wizards/firstrun/UIFirstRunWzd.cpp" line="99"/> @@ -1917,7 +1917,7 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If the above is correct, press the <span style=" font-weight:600;">Finish</span> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <span style=" font-weight:600;">Unmount...</span> action in the <span style=" font-weight:600;">Devices</span> menu<span style=" font-weight:600;">.</span></p></body></html></source> - <translation type="obsolete"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">上記ãŒæ£ã—ã„ãªã‚‰ã€[<span style=" font-weight:600;">完了</span>]ボタンをクリックã—ã¦ãã ã•ã„。 é¸æŠžã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ãŒä»®æƒ³ãƒžã‚·ãƒ³ã«ä¸€æ™‚çš„ã«ãƒžã‚¦ãƒ³ãƒˆã•ã‚Œã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒèµ·å‹•ã—ã¾ã™ã€‚</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">仮想マシンを終了ã™ã‚‹ã¨ã€æŒ‡å®šã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ã¯è‡ªå‹•çš„ã«ãƒžã‚¦ãƒ³ãƒˆè§£é™¤ã•ã‚Œã€èµ·å‹•ãƒ‡ãƒã‚¤ã‚¹ã¯æœ€åˆã®ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã«è¨å®šã•ã‚Œã¾ã™ã€‚</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">セットアッププãƒã‚°ãƒ©ãƒ ã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ—ãƒã‚»ã‚¹ãŒå†åº¦å®Ÿè¡Œã•ã‚Œãªã„よã†ã«ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®å†èµ·å‹•å¾Œã«ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’手動ã§ãƒžã‚¦ãƒ³ãƒˆè§£é™¤(å–り出ã—)ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã¯<span style=" font-weight:600;">[デãƒã‚¤ã‚¹]</span>メニューã‹ã‚‰å¯¾å¿œã™ã‚‹<span style=" font-weight:600;">[〜ã®ãƒžã‚¦ãƒ³ãƒˆè§£é™¤]</span>ã®å‹•ä½œã‚’é¸æŠžã™ã‚‹ã“ã¨ã§è¡Œãˆã¾ã™ã€‚</span></p></body></html></translation> + <translation type="obsolete"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Arial'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">上記ã®è¨å®šãŒæ£ã—ã‘ã‚Œã°ã€[<span style=" font-weight:600;">完了</span>]ボタンをクリックã—ã¦ãã ã•ã„。 é¸æŠžã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ãŒä»®æƒ³ãƒžã‚·ãƒ³ã«ä¸€æ™‚çš„ã«ãƒžã‚¦ãƒ³ãƒˆã•ã‚Œã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒèµ·å‹•ã—ã¾ã™ã€‚</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">仮想マシンを終了ã™ã‚‹ã¨ã€æŒ‡å®šã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ã¯è‡ªå‹•çš„ã«ãƒžã‚¦ãƒ³ãƒˆè§£é™¤ã•ã‚Œã€èµ·å‹•ãƒ‡ãƒã‚¤ã‚¹ã¯æœ€åˆã®ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã«è¨å®šã•ã‚Œã¾ã™ã€‚</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">セットアッププãƒã‚°ãƒ©ãƒ ã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ—ãƒã‚»ã‚¹ãŒå†åº¦å®Ÿè¡Œã•ã‚Œãªã„よã†ã«ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®å†èµ·å‹•å¾Œã«ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’手動ã§ãƒžã‚¦ãƒ³ãƒˆè§£é™¤(å–り出ã—)ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã¯<span style=" font-weight:600;">[デãƒã‚¤ã‚¹]</span>メニューã‹ã‚‰å¯¾å¿œã™ã‚‹<span style=" font-weight:600;">[〜ã®ãƒžã‚¦ãƒ³ãƒˆè§£é™¤]</span>ã®å‹•ä½œã‚’é¸æŠžã™ã‚‹ã“ã¨ã§è¡Œãˆã¾ã™ã€‚</span></p></body></html></translation> </message> <message> <location filename="../src/wizards/firstrun/UIFirstRunWzd.cpp" line="99"/> @@ -1998,12 +1998,12 @@ p, li { white-space: pre-wrap; } <message> <location filename="../src/wizards/firstrun/UIFirstRunWzdPage3.ui" line="81"/> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p><p>Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p><p>Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <b>Unmount...</b> action in the <b>Devices</b> menu.</p></source> - <translation><p>上記ã®è¨å®šãŒæ£ã—ã‘ã‚Œã°ã€<b>[完了]</b>ボタンをクリックã—ã¦ãã ã•ã„。 クリックã™ã‚‹ã¨ã€é¸æŠžã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ãŒä¸€æ™‚çš„ã«ä»®æƒ³ãƒžã‚·ãƒ³ã«ãƒžã‚¦ãƒ³ãƒˆã•ã‚Œã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒèµ·å‹•ã—ã¾ã™ã€‚</p><p>仮想マシンを閉ã˜ã‚‹ã¨ã€æŒ‡å®šã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ã¯è‡ªå‹•çš„ã«ãƒžã‚¦ãƒ³ãƒˆè§£é™¤ã•ã‚Œã€èµ·å‹•ãƒ‡ãƒã‚¤ã‚¹ã¯æœ€åˆã®ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã«è¨å®šã•ã‚Œã¾ã™ã€‚</p><p>セットアップ プãƒã‚°ãƒ©ãƒ ã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã‚’å†èµ·å‹•ã—ãŸã¨ãã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ä½œæ¥ãŒå†å®Ÿè¡Œã•ã‚Œã‚‹ã“ã¨ã‚’防ããŸã‚ã€æ‰‹å‹•ã§ãƒ‡ãƒã‚¤ã‚¹ã®ãƒžã‚¦ãƒ³ãƒˆè§£é™¤(å–り出ã—)ã‚’è¡Œã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“れを行ã†ã«ã¯<b>[デãƒã‚¤ã‚¹]</b>メニューã‹ã‚‰å¯¾å¿œã™ã‚‹<b>[マウント解除...]</b>ã®å‹•ä½œã‚’é¸æŠžã—ã¾ã™ã€‚</p></translation> + <translation><p>上記ã®è¨å®šãŒæ£ã—ã‘ã‚Œã°ã€<b>[終了]</b>ボタンをクリックã—ã¦ãã ã•ã„。 クリックã™ã‚‹ã¨ã€é¸æŠžã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ãŒä¸€æ™‚çš„ã«ä»®æƒ³ãƒžã‚·ãƒ³ã«ãƒžã‚¦ãƒ³ãƒˆã•ã‚Œã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒèµ·å‹•ã—ã¾ã™ã€‚</p><p>仮想マシンを閉ã˜ã‚‹ã¨ã€æŒ‡å®šã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ã¯è‡ªå‹•çš„ã«ãƒžã‚¦ãƒ³ãƒˆè§£é™¤ã•ã‚Œã€èµ·å‹•ãƒ‡ãƒã‚¤ã‚¹ã¯æœ€åˆã®ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã«è¨å®šã•ã‚Œã¾ã™ã€‚</p><p>セットアップ プãƒã‚°ãƒ©ãƒ ã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã‚’å†èµ·å‹•ã—ãŸã¨ãã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ä½œæ¥ãŒå†å®Ÿè¡Œã•ã‚Œã‚‹ã“ã¨ã‚’防ããŸã‚ã€æ‰‹å‹•ã§ãƒ‡ãƒã‚¤ã‚¹ã®ãƒžã‚¦ãƒ³ãƒˆè§£é™¤(å–り出ã—)ã‚’è¡Œã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“れを行ã†ã«ã¯<b>[デãƒã‚¤ã‚¹]</b>メニューã‹ã‚‰å¯¾å¿œã™ã‚‹<b>[マウント解除...]</b>ã®å‹•ä½œã‚’é¸æŠžã—ã¾ã™ã€‚</p></translation> </message> <message> <location filename="../src/wizards/firstrun/UIFirstRunWzdPage3.ui" line="91"/> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be mounted on the virtual machine and the machine will start execution.</p></source> - <translation><p>上記ãŒæ£ã—ã„ãªã‚‰ã€<b>[完了]</b>ボタンをクリックã—ã¦ãã ã•ã„。 é¸æŠžã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ã¯ä»®æƒ³ãƒžã‚·ãƒ³ã«å–り付ã‘られã€ä»®æƒ³ãƒžã‚·ãƒ³ã¯å®Ÿè¡Œã‚’開始ã—ã¾ã™ã€‚</p></translation> + <translation><p>上記ã®è¨å®šãŒæ£ã—ã‘ã‚Œã°ã€<b>[終了]</b>ボタンをクリックã—ã¦ãã ã•ã„。 é¸æŠžã•ã‚ŒãŸãƒ¡ãƒ‡ã‚£ã‚¢ã¯ä»®æƒ³ãƒžã‚·ãƒ³ã«å–り付ã‘られã€ä»®æƒ³ãƒžã‚·ãƒ³ã¯å®Ÿè¡Œã‚’開始ã—ã¾ã™ã€‚</p></translation> </message> <message> <location filename="../src/wizards/firstrun/UIFirstRunWzd.cpp" line="269"/> @@ -12452,7 +12452,7 @@ USBãƒ•ã‚£ãƒ«ã‚¿ã‚’è¿½åŠ ã¾ãŸã¯é™¤åŽ»ã™ã‚‹ã«ã¯ã‚³ãƒ³ãƒ†ã‚ストメニュム<message> <location filename="../src/globals/VBoxProblemReporter.cpp" line="1914"/> <source><p>The virtual machine window will be now switched to <b>Scale</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in scale mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation><p>仮想マシンã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’"スケール"モードã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚<b>%1</b>ã‚ーを押ã™ã¨ã„ã¤ã§ã‚‚ウィンドウ表示ã«æˆ»ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p><p>注:<i>ホスト</i>ã‚ーã¯ç¾åœ¨<b>%2</b>ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚</p><p>注:シームレスモードã§ã¯ãƒ¡ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒãƒ¼ã¯è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。メニューãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ <b>ホスト+Home</b>ã‚ーを押ã—ã¦ãã ã•ã„。</p></translation> + <translation><p>仮想マシンã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’"スケール"モードã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚<b>%1</b>ã‚ーを押ã™ã¨ã„ã¤ã§ã‚‚ウィンドウ表示ã«æˆ»ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p><p>注:<i>ホスト</i>ã‚ーã¯ç¾åœ¨<b>%2</b>ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚</p><p>注:スケールモードã§ã¯ãƒ¡ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒãƒ¼ã¯è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。メニューãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ <b>ホスト+Home</b>ã‚ーを押ã—ã¦ãã ã•ã„。</p></translation> </message> <message> <location filename="../src/globals/VBoxProblemReporter.cpp" line="1922"/> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts index 79e687054..d8f623298 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts @@ -2934,11 +2934,11 @@ </message> <message> <source>Choose a virtual hard disk file...</source> - <translation>Pasirinkite virtualaus standžiojo disko rinkmenÄ…...</translation> + <translation>Pasirinkti virtualaus standžiojo disko rinkmenÄ…...</translation> </message> <message> <source>Choose a virtual CD/DVD disk file...</source> - <translation>Pasirinkite virtualaus CD/DVD disko rinkmenÄ…...</translation> + <translation>Pasirinkti virtualaus CD/DVD disko rinkmenÄ…...</translation> </message> <message> <source>Remove disk from virtual drive</source> @@ -2946,7 +2946,7 @@ </message> <message> <source>Choose a virtual floppy disk file...</source> - <translation>Pasirinkite virtualaus diskelio rinkmenÄ…....</translation> + <translation>Pasirinkti virtualaus diskelio rinkmenÄ…....</translation> </message> </context> <context> @@ -3626,7 +3626,7 @@ </message> <message> <source>Choose a virtual hard disk file...</source> - <translation>Pasirinkite virtualaus standžiojo disko rinkmenÄ…...</translation> + <translation>Pasirinkti virtualaus standžiojo disko rinkmenÄ…...</translation> </message> <message> <source>The recommended size of the boot hard disk is <b>%1</b>.</source> @@ -6358,7 +6358,7 @@ IPv6.</translation> </message> <message> <source>hard disk</source> - <translation>standusis diskas</translation> + <translation>standžiųjų diskų</translation> </message> <message> <source>Choose a virtual CD/DVD disk file</source> @@ -6366,7 +6366,7 @@ IPv6.</translation> </message> <message> <source>CD/DVD-ROM disk</source> - <translation>CD/DVD diskas</translation> + <translation>CD/DVD diskų</translation> </message> <message> <source>Choose a virtual floppy disk file</source> @@ -6374,7 +6374,7 @@ IPv6.</translation> </message> <message> <source>floppy disk</source> - <translation>diskelis</translation> + <translation>diskelių</translation> </message> <message> <source>All %1 images (%2)</source> @@ -9055,7 +9055,7 @@ konkreÄių nuostatų, matysite paaiÅ¡kinimus<i>.</translation> </message> <message> <source>Select a file to open...</source> - <translation>Pasirinkite atvertinÄ… rinkmenÄ…...</translation> + <translation>Pasirinkti atvertinÄ… rinkmenÄ…...</translation> </message> </context> <context> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts index d1fbff701..0b71d3277 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts @@ -76,11 +76,11 @@ </message> <message> <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source> - <translation>Модуль Ñдра VirtualBox не придатний Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— верÑÑ–Ñ— VirtualBox. Ðапевно, вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ VirtualBox закінчилоÑÑŒ неуÑпішно. Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñ– повторне вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ допомогти.</translation> + <translation>Модуль Ñдра VirtualBox не придатний Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— верÑÑ–Ñ— VirtualBox. Ðапевно, вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ VirtualBox закінчилоÑÑŒ невдало. Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñ– повторне вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ допомогти.</translation> </message> <message> <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source> - <translation>Модуль Ñдра VirtualBox не придатний Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— верÑÑ–Ñ— VirtualBox. Ðапевно, вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ VirtualBox закінчилоÑÑŒ неуÑпішно. ЗдійÑненнÑ<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>має виправити цю проблему. ПереконайтеÑÑŒ, що ви не змішували верÑÑ–ÑŽ OSE та PUEL.</translation> + <translation>Модуль Ñдра VirtualBox не придатний Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— верÑÑ–Ñ— VirtualBox. Ðапевно, вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ VirtualBox закінчилоÑÑŒ невдало. ЗдійÑненнÑ<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>має виправити цю проблему. ПереконайтеÑÑŒ, що ви не змішували верÑÑ–ÑŽ OSE та PUEL.</translation> </message> <message> <source>Make sure the kernel module has been loaded successfully.</source> @@ -122,11 +122,11 @@ <name>QIFileDialog</name> <message> <source>Select a directory</source> - <translation>Виберати теку</translation> + <translation>Вибрати теку</translation> </message> <message> <source>Select a file</source> - <translation>Виберати файл</translation> + <translation>Вибрати файл</translation> </message> </context> <context> @@ -423,7 +423,7 @@ </message> <message> <source>Auto-resize &Guest Display</source> - <translation type="unfinished">Ðвторозмір &гоÑтьового екрану</translation> + <translation>Ðвтоматичний розмір &гоÑтьового екрану</translation> </message> <message> <source>Automatically resize the guest display when the window is resized (requires Guest Additions)</source> @@ -664,50 +664,50 @@ </message> <message> <source>Switch to &Fullscreen</source> - <translation type="unfinished"></translation> + <translation>ПеремкнутиÑÑŒ у &повноекранний режим</translation> </message> <message> <source>Switch between normal and fullscreen mode</source> - <translation type="unfinished"></translation> + <translation>ПеремкнутиÑÑŒ між повноекранним Ñ– звичайним екраном</translation> </message> <message> <source>Switch to Seam&less Mode</source> - <translation type="unfinished"></translation> + <translation>ПеремкнутиÑÑŒ у &ціловикроєний режим</translation> </message> <message> <source>Switch between normal and seamless desktop integration mode</source> - <translation type="unfinished"></translation> + <translation>ПеремкнутиÑÑŒ між звичайним Ñ– ціловикроєним режимом Ñтільничної інтеграції</translation> </message> <message> <source>Switch to &Scale Mode</source> - <translation type="unfinished"></translation> + <translation>ПеремкнутиÑÑŒ на &маÑштабний режим</translation> </message> <message> <source>Switch between normal and scale mode</source> - <translation type="unfinished"></translation> + <translation>ПеремкнутиÑÑŒ між звичайним Ñ– маÑштабним режимом</translation> </message> <message> <source>Session I&nformation</source> - <translation type="unfinished"></translation> + <translation>&Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ ÑеанÑ</translation> </message> <message> <source>Enable R&emote Display</source> - <translation type="unfinished"></translation> + <translation>Увімкнути віддалений &екран</translation> </message> </context> <context> <name>UIDescriptionPagePrivate</name> <message> <source>No description. Press the Edit button below to add it.</source> - <translation type="unfinished">ÐžÐ¿Ð¸Ñ Ð²Ñ–Ð´Ñутній. ÐатиÑніть кнопку Редагувати знизу, щоб додати його.</translation> + <translation>ОпиÑу нема. ÐатиÑніть кнопку «Редагувати» знизу, щоб додати його.</translation> </message> <message> <source>Edit</source> - <translation type="unfinished">Редагувати</translation> + <translation>Редагувати</translation> </message> <message> <source>Edit (Ctrl+E)</source> - <translation type="unfinished">Редагувати (Ctrl+E)</translation> + <translation>Редагувати (Ctrl+E)</translation> </message> </context> <context> @@ -715,275 +715,275 @@ <message> <source>Name</source> <comment>details report</comment> - <translation type="unfinished">Ðазва</translation> + <translation>Ðазва</translation> </message> <message> <source>OS Type</source> <comment>details report</comment> - <translation type="unfinished">Тип операційної ÑиÑтеми</translation> + <translation>Тип операційної ÑиÑтеми</translation> </message> <message> <source>Base Memory</source> <comment>details report</comment> - <translation type="unfinished">ОÑновна пам'ÑÑ‚ÑŒ</translation> + <translation>ОÑновна пам'ÑÑ‚ÑŒ</translation> </message> <message> <source><nobr>%1 MB</nobr></source> <comment>details report</comment> - <translation type="unfinished"><nobr>%1 МБ</nobr></translation> + <translation><nobr>%1 МБ</nobr></translation> </message> <message> <source>Processors</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>ПроцеÑори</translation> </message> <message> <source><nobr>%1</nobr></source> <comment>details report</comment> - <translation type="unfinished"><nobr>%1</nobr></translation> + <translation><nobr>%1</nobr></translation> </message> <message> <source>Boot Order</source> <comment>details report</comment> - <translation type="unfinished">ПорÑдок завантаженнÑ</translation> + <translation>ПорÑдок завантаженнÑ</translation> </message> <message> <source>ACPI</source> <comment>details report</comment> - <translation type="unfinished">ACPI</translation> + <translation>ACPI</translation> </message> <message> <source>IO APIC</source> <comment>details report</comment> - <translation type="unfinished">APIC Ð’/Ð’</translation> + <translation>APIC Ð’/Ð’</translation> </message> <message> <source>BIOS</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>BIOS</translation> </message> <message> <source>VT-x/AMD-V</source> <comment>details report</comment> - <translation type="unfinished">VT-x/AMD-V</translation> + <translation>VT-x/AMD-V</translation> </message> <message> <source>Nested Paging</source> <comment>details report</comment> - <translation type="unfinished">Вкладене Ð·Ð°Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñторінок</translation> + <translation>Вкладене Ð·Ð°Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñторінок</translation> </message> <message> <source>PAE/NX</source> <comment>details report</comment> - <translation type="unfinished">PAE/NX</translation> + <translation>PAE/NX</translation> </message> <message> <source>Acceleration</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>ПриÑкореннÑ</translation> </message> <message> <source>Video Memory</source> <comment>details report</comment> - <translation type="unfinished">Відеопам'ÑÑ‚ÑŒ</translation> + <translation>Відеопам'ÑÑ‚ÑŒ</translation> </message> <message> <source>Screens</source> <comment>details report</comment> - <translation type="unfinished">Екрани</translation> + <translation>Екрани</translation> </message> <message> <source>2D Video</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Двовимірне відео</translation> </message> <message> <source>3D</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>ПроÑторове</translation> </message> <message> <source>Remote Desktop Server Port</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Порт віддаленого Ñтільничного Ñервера</translation> </message> <message> <source>Remote Desktop Server</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Віддалений Ñтільничний Ñервер</translation> </message> <message> <source>Disabled</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Вимкнений</translation> </message> <message> <source>(CD/DVD)</source> - <translation type="unfinished">(CD/DVD)</translation> + <translation>(CD/DVD)</translation> </message> <message> <source>Not Attached</source> <comment>details report (Storage)</comment> - <translation type="unfinished"></translation> + <translation>Ðе під'єднано</translation> </message> <message> <source>Host Driver</source> <comment>details report (audio)</comment> - <translation type="unfinished">Головний аудіодрайвер</translation> + <translation>Головний аудіодрайвер</translation> </message> <message> <source>Controller</source> <comment>details report (audio)</comment> - <translation type="unfinished">Контролер</translation> + <translation>Контролер</translation> </message> <message> <source>Disabled</source> <comment>details report (audio)</comment> - <translation type="unfinished"></translation> + <translation>Вимкнено</translation> </message> <message> <source>Bridged adapter, %1</source> <comment>details report (network)</comment> - <translation type="unfinished">Проміжний адаптер, %1</translation> + <translation>Проміжний адаптер, %1</translation> </message> <message> <source>Internal network, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¼ÐµÑ€ÐµÐ¶Ð°, '%1'</translation> + <translation>Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¼ÐµÑ€ÐµÐ¶Ð°, '%1'</translation> </message> <message> <source>Host-only adapter, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">Лише головний адаптер, '%1'</translation> + <translation>Лише головний адаптер, '%1'</translation> </message> <message> <source>VDE network, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">Мережа VDE, '%1'</translation> + <translation>Мережа VDE, '%1'</translation> </message> <message> <source>Adapter %1</source> <comment>details report (network)</comment> - <translation type="unfinished">Ðдаптер %1</translation> + <translation>Ðдаптер %1</translation> </message> <message> <source>Disabled</source> <comment>details report (network)</comment> - <translation type="unfinished"></translation> + <translation>Вимкнена</translation> </message> <message> <source>Port %1</source> <comment>details report (serial ports)</comment> - <translation type="unfinished">Порт %1</translation> + <translation>Порт %1</translation> </message> <message> <source>Disabled</source> <comment>details report (serial ports)</comment> - <translation type="unfinished"></translation> + <translation>Вимкнені</translation> </message> <message> <source>Port %1</source> <comment>details report (parallel ports)</comment> - <translation type="unfinished">Порт %1</translation> + <translation>Порт %1</translation> </message> <message> <source>Disabled</source> <comment>details report (parallel ports)</comment> - <translation type="unfinished"></translation> + <translation>Вимкнені</translation> </message> <message> <source>Device Filters</source> <comment>details report (USB)</comment> - <translation type="unfinished">Фільтр приÑтроїв</translation> + <translation>Фільтр приÑтроїв</translation> </message> <message> <source>%1 (%2 active)</source> <comment>details report (USB)</comment> - <translation type="unfinished">%1 (%2 активно)</translation> + <translation>%1 (%2 активно)</translation> </message> <message> <source>Disabled</source> <comment>details report (USB)</comment> - <translation type="unfinished"></translation> + <translation>Вимкнений</translation> </message> <message> <source>Shared Folders</source> <comment>details report (shared folders)</comment> - <translation type="unfinished"></translation> + <translation>Спільні теки</translation> </message> <message> <source>None</source> <comment>details report (shared folders)</comment> - <translation type="unfinished"></translation> + <translation>Ðема</translation> </message> <message> <source>None</source> <comment>details report (description)</comment> - <translation type="unfinished"></translation> + <translation>Ðема</translation> </message> <message> <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source> - <translation type="unfinished">Вибрана віртуальна машина <i>недоÑтупна</i>. Будь лаÑка, переглÑньте Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилки, що показані нижче та натиÑніть <b>Оновити</b>, Ñкщо ви бажаєте повторити перевірку доÑтупноÑÑ‚Ñ–:</translation> + <translation>Вибрана віртуальна машина <i>недоÑтупна</i>. Будь лаÑка, переглÑньте Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилки, що показані нижче та натиÑніть <b>Оновити</b>, Ñкщо ви бажаєте повторити перевірку доÑтупноÑÑ‚Ñ–:</translation> </message> <message> <source>General</source> <comment>details report</comment> - <translation type="unfinished">Загально</translation> + <translation>Загальне</translation> </message> <message> <source>System</source> <comment>details report</comment> - <translation type="unfinished">СиÑтема</translation> + <translation>СиÑтема</translation> </message> <message> <source>Preview</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>ПереглÑд</translation> </message> <message> <source>Display</source> <comment>details report</comment> - <translation type="unfinished">Екран</translation> + <translation>Екран</translation> </message> <message> <source>Storage</source> <comment>details report</comment> - <translation type="unfinished">Пам'ÑÑ‚ÑŒ</translation> + <translation>Пам'ÑÑ‚ÑŒ</translation> </message> <message> <source>Audio</source> <comment>details report</comment> - <translation type="unfinished">Ðудіо</translation> + <translation>Ðудіо</translation> </message> <message> <source>Network</source> <comment>details report</comment> - <translation type="unfinished">Мережа</translation> + <translation>Мережа</translation> </message> <message> <source>Serial Ports</source> <comment>details report</comment> - <translation type="unfinished">ПоÑлідовні порти</translation> + <translation>ПоÑлідовні порти</translation> </message> <message> <source>Parallel Ports</source> <comment>details report</comment> - <translation type="unfinished">Паралельні порти</translation> + <translation>Паралельні порти</translation> </message> <message> <source>USB</source> <comment>details report</comment> - <translation type="unfinished">USB</translation> + <translation>USB</translation> </message> <message> <source>Shared Folders</source> <comment>details report</comment> - <translation type="unfinished"></translation> + <translation>Спільні теки</translation> </message> <message> <source>Description</source> <comment>details report</comment> - <translation type="unfinished">ОпиÑ</translation> + <translation>ОпиÑ</translation> </message> </context> <context> @@ -1166,7 +1166,7 @@ p, li { white-space: pre-wrap; } <name>UIExportApplianceWzdPage1</name> <message> <source>Welcome to the Appliance Export Wizard!</source> - <translation>ЛаÑкаво проÑимо до майÑтера екÑпорту образа віртуальної машини!</translation> + <translation>ЛаÑкаво проÑимо до майÑтра екÑпорту образа віртуальної машини!</translation> </message> <message> <source><p>This wizard will guide you through the process of exporting an appliance.</p><p>%1</p><p>Please select the virtual machines that should be added to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></source> @@ -1185,19 +1185,19 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Please specify the target for the OVF export. You can choose between a local file system export, uploading the OVF to the Sun Cloud service or an S3 storage server.</source> - <translation type="unfinished">Будь лаÑка, вкажіть ціль екÑпорту OVF. Ви можете вибрати між екÑпортом локальної файлової ÑиÑтеми Ñ– завантаженнÑм OVF на хмарні Ñлужби Sun або на Ñервер Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ S3.</translation> + <translation>Будь лаÑка, вкажіть ціль екÑпорту OVF. Ви можете вибрати між екÑпортом локальної файлової ÑиÑтеми Ñ– завантаженнÑм OVF на хмарні Ñлужби Sun або на Ñервер Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ S3.</translation> </message> <message> <source>&Local Filesystem </source> - <translation type="unfinished">&Локальна файлова ÑиÑтема </translation> + <translation>&Локальна файлова ÑиÑтема </translation> </message> <message> <source>Sun &Cloud</source> - <translation type="unfinished">&Хмаринки Sun</translation> + <translation>&Хмаринки Sun</translation> </message> <message> <source>&Simple Storage System (S3)</source> - <translation type="unfinished">&ПроÑта ÑиÑтема Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ (S3)</translation> + <translation>&ПроÑта ÑиÑтема Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ (S3)</translation> </message> </context> <context> @@ -1224,67 +1224,67 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Username:</source> - <translation type="unfinished">&Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача:</translation> + <translation>&Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача:</translation> </message> <message> <source>&Password:</source> - <translation type="unfinished">&Пароль:</translation> + <translation>&Пароль:</translation> </message> <message> <source>&Hostname:</source> - <translation type="unfinished">&Ðазва вузла:</translation> + <translation>&Ðазва вузла:</translation> </message> <message> <source>&Bucket:</source> - <translation type="unfinished">&Крилата діжка:</translation> + <translation>&Крилата діжка:</translation> </message> <message> <source>&File:</source> - <translation type="unfinished">&Файл:</translation> + <translation>&Файл:</translation> </message> <message> <source>Write in legacy OVF 0.9 format for compatibility with other virtualization products.</source> - <translation type="unfinished">ЗапиÑати в форматі OVF 0.9 Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ– з іншими продуктами віртуалізації.</translation> + <translation>ЗапиÑати в форматі OVF 0.9 Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ– з іншими продуктами віртуалізації.</translation> </message> <message> <source>&Write legacy OVF 0.9</source> - <translation type="unfinished">&ЗапиÑати в OVF 0.9</translation> + <translation>&ЗапиÑати в OVF 0.9</translation> </message> <message> <source>Create a Manifest file for automatic data integrity checks on import.</source> - <translation type="unfinished"></translation> + <translation>Створіть файл проÑвленнÑ, щоб автоматично перевірити ціліÑніÑÑ‚ÑŒ даних на імпорті.</translation> </message> <message> <source>Write &Manifest file</source> - <translation type="unfinished"></translation> + <translation>ЗапиÑати файл &проÑвленнÑ</translation> </message> <message> <source>Appliance</source> - <translation type="unfinished">Образ віртуальної машини</translation> + <translation>Образ віртуальної машини</translation> </message> <message> <source>Select a file to export into</source> - <translation type="unfinished">Вибрати файл Ð´Ð»Ñ ÐµÐºÑпорту</translation> + <translation>Вибрати файл Ð´Ð»Ñ ÐµÐºÑпорту</translation> </message> <message> <source>Open Virtualization Format Archive (%1)</source> - <translation type="unfinished"></translation> + <translation>Відкрити архів віртуалізаційного формату (%1)</translation> </message> <message> <source>Open Virtualization Format (%1)</source> - <translation type="unfinished"></translation> + <translation>Відкрити віртуалізаційний формат (%1)</translation> </message> <message> <source>Please choose a filename to export the OVF/OVA to. If you use an <i>ova</i> file name extension, then all the files will be combined into one Open Virtualization Format Archive. If you use an <i>ovf</i> extension, several files will be written separately. Other extensions are not allowed.</source> - <translation type="unfinished"></translation> + <translation>Будь лаÑка, виберіть назву файла Ð´Ð»Ñ ÐµÐºÑпорту OVF/OVA, Ñкщо ви викориÑтовуєте Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° <i>ova</i>, то вÑÑ– файли об'єднаютьÑÑ Ð² один архів. Якщо ви викориÑтовуєте Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ <i>ovf</i>, деÑкі файли буде запиÑано окремо. Інші Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимі.</translation> </message> <message> <source>Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target.</source> - <translation type="unfinished">Будь лаÑка, заповніть додаткові Ð¿Ð¾Ð»Ñ Ñ‚Ð°ÐºÑ–, Ñк ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, пароль Ñ– крилата діжка. ÐаоÑтанок, ви маєте надати назву файлові Ð´Ð»Ñ Ñ†Ñ–Ð»Ñ– OVF.</translation> + <translation>Будь лаÑка, заповніть додаткові Ð¿Ð¾Ð»Ñ Ñ‚Ð°ÐºÑ–, Ñк ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, пароль Ñ– крилата діжка. ÐаоÑтанок, ви маєте надати назву файлові Ð´Ð»Ñ Ñ†Ñ–Ð»Ñ– OVF.</translation> </message> <message> <source>Please complete the additional fields like the username, password, hostname and the bucket, and provide a filename for the OVF target.</source> - <translation type="unfinished">Будь лаÑка, заповніть додаткові Ð¿Ð¾Ð»Ñ Ñ‚Ð°ÐºÑ–, Ñк ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, пароль, назва вузла Ñ– крилата діжка. ÐаоÑтанок, ви маєте надати назву файлові Ð´Ð»Ñ Ñ†Ñ–Ð»Ñ– OVF.</translation> + <translation>Будь лаÑка, заповніть додаткові Ð¿Ð¾Ð»Ñ Ñ‚Ð°ÐºÑ–, Ñк ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, пароль, назва вузла Ñ– крилата діжка. ÐаоÑтанок, ви маєте надати назву файлові Ð´Ð»Ñ Ñ†Ñ–Ð»Ñ– OVF.</translation> </message> </context> <context> @@ -1359,7 +1359,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Here you can change additional configuration values of the selected virtual machines. You can modify most of the properties shown by double-clicking on the items.</source> - <translation type="unfinished">Тут ви можете змінити додаткові Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— віртуальної машини. Ви можете змінити більшіÑÑ‚ÑŒ показаних влаÑтивоÑтей подвійним клацом по пунктах.</translation> + <translation>Тут ви можете змінити додаткові Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— віртуальної машини. Ви можете змінити більшіÑÑ‚ÑŒ показаних влаÑтивоÑтей подвійним кліком по пунктах.</translation> </message> </context> <context> @@ -1496,7 +1496,7 @@ p, li { white-space: pre-wrap; } <name>UIFirstRunWzdPage1</name> <message> <source>Welcome to the First Run Wizard!</source> - <translation>ЛаÑкаво проÑимо до майÑтера першого запуÑку!</translation> + <translation>ЛаÑкаво проÑимо до майÑтра першого запуÑку!</translation> </message> <message> <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for installing an operating system of your choice onto this virtual machine.</p><p>%1</p></source> @@ -1504,7 +1504,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>You have started a newly created virtual machine for the first time. This wizard will help you to perform the steps necessary for booting an operating system of your choice on the virtual machine.</p><p>Note that you will not be able to install an operating system into this virtual machine right now because you did not attach any hard disk to it. If this is not what you want, you can cancel the execution of this wizard, select <b>Settings</b> from the <b>Machine</b> menu of the main VirtualBox window to access the settings dialog of this machine and change the hard disk configuration.</p><p>%1</p></source> - <translation><p>Ви запуÑтили новоÑтворену віртуальну машину вперше. Цей майÑтер допоможе вам пройти потрібні кроки, щоб завантажити операційну ÑиÑтему за вашими вподобаннÑми у віртуальну машину.</p><p>Майте на увазі, ви не зможете вÑтановити Ñку-будь операційну ÑиÑтему у цю віртаульну машину зараз, оÑкільки ви не під'єднали до неї жодоного жорÑткого диÑка. Якщо це не те, що ви бажаєте, то можете вимкнути майÑтра, виберіть <b>ÐалаштуваннÑ</b> у меню <b>Машина</b> головного меню вікна VirtualBox, щоб дозволити діалог налаштувань цієї машини Ñ– змінити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¶Ð¾Ñ€Ñткого диÑка.</p><p>%1</p></translation> + <translation><p>Ви запуÑтили новоÑтворену віртуальну машину вперше. Цей майÑтер допоможе вам пройти потрібні кроки, щоб завантажити операційну ÑиÑтему за вашими вподобаннÑми у віртуальну машину.</p><p>Майте на увазі, ви не зможете вÑтановити Ñку-будь операційну ÑиÑтему у цю віртуальну машину зараз, оÑкільки ви не під'єднали до неї жодного твердого диÑка. Якщо це не те, що ви бажаєте, то можете вимкнути майÑтра, виберіть <b>ÐалаштуваннÑ</b> у меню <b>Машина</b> головного меню вікна VirtualBox, щоб дозволити діалог налаштувань цієї машини Ñ– змінити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð²ÐµÑ€Ð´Ð¾Ð³Ð¾ диÑка.</p><p>%1</p></translation> </message> </context> <context> @@ -1538,7 +1538,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be temporarily mounted on the virtual machine and the machine will start execution.</p><p>Please note that when you close the virtual machine, the specified media will be automatically unmounted and the boot device will be set back to the first hard disk.</p><p>Depending on the type of the setup program, you may need to manually unmount (eject) the media after the setup program reboots the virtual machine, to prevent the installation process from starting again. You can do this by selecting the corresponding <b>Unmount...</b> action in the <b>Devices</b> menu.</p></source> - <translation><p>Якщо вищевказане правильне, натиÑніть кнопку <b>Закінчити</b>. ПіÑÐ»Ñ Ð½Ð°Ñ‚Ð¸ÑненнÑ, вибрані ноÑÑ–Ñ— будуть тимчаÑово змонтовані на віртуальну машину, Ñка відразу ж розпочне Ñвою роботу.</p><p>Будь лаÑка, майте на увазі, коли ви закриєте віртуальну машину, вказані ноÑÑ–Ñ— будуть демонтовані та приÑтрій Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ вказано до першого жорÑткого диÑка.</p><p>Залежно від типу програми вÑтановленнÑ, вам, можливо, буде потрібно вручну демонтувати(вийнÑти) ноÑій піÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑку машини цією програмою, щоб запобігти вÑтановленню з Ñамого початку ще раз. Ви можете це зробити, вибравши відповідну дію <b>Демонтувати...</b> у меню <b>ПриÑтрої</b>.</p></translation> + <translation><p>Якщо вищевказане правильне, натиÑніть кнопку <b>Закінчити</b>. ПіÑÐ»Ñ Ð½Ð°Ñ‚Ð¸ÑненнÑ, вибрані ноÑÑ–Ñ— будуть тимчаÑово змонтовані на віртуальну машину, Ñка відразу ж розпочне Ñвою роботу.</p><p>Будь лаÑка, майте на увазі, коли ви закриєте віртуальну машину, вказані ноÑÑ–Ñ— будуть демонтовані та приÑтрій Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ вказано до першого твердого диÑка.</p><p>Залежно від типу програми вÑтановленнÑ, вам, можливо, буде потрібно вручну демонтувати(вийнÑти) ноÑій піÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑку машини цією програмою, щоб запобігти вÑтановленню з Ñамого початку ще раз. Ви можете це зробити, вибравши відповідну дію <b>Демонтувати...</b> у меню <b>ПриÑтрої</b>.</p></translation> </message> <message> <source><p>If the above is correct, press the <b>Finish</b> button. Once you press it, the selected media will be mounted on the virtual machine and the machine will start execution.</p></source> @@ -1567,74 +1567,74 @@ p, li { white-space: pre-wrap; } <name>UIGLSettingsDlg</name> <message> <source>General</source> - <translation type="unfinished">Загально</translation> + <translation>Загальне</translation> </message> <message> <source>Input</source> - <translation type="unfinished">Ввід</translation> + <translation>Ввід</translation> </message> <message> <source>Update</source> - <translation type="unfinished">ОновленнÑ</translation> + <translation>ОновленнÑ</translation> </message> <message> <source>Language</source> - <translation type="unfinished">Мова</translation> + <translation>Мова</translation> </message> <message> <source>USB</source> - <translation type="unfinished">USB</translation> + <translation>USB</translation> </message> <message> <source>Network</source> - <translation type="unfinished">Мережа</translation> + <translation>Мережа</translation> </message> <message> <source>Extensions</source> - <translation type="unfinished"></translation> + <translation>РозширеннÑ</translation> </message> <message> <source>VirtualBox - %1</source> - <translation type="unfinished">VirtualBox — %1</translation> + <translation>VirtualBox — %1</translation> </message> </context> <context> <name>UIGlobalSettingsExtension</name> <message> <source>&Extension Packages:</source> - <translation type="unfinished"></translation> + <translation>&Пакунки розширеннÑ:</translation> </message> <message> <source>Lists all installed packages.</source> - <translation type="unfinished"></translation> + <translation>Перелічує вÑÑ– вÑтановлені пакунки.</translation> </message> <message> <source>Active</source> - <translation type="unfinished"></translation> + <translation>Ðктивні</translation> </message> <message> <source>Name</source> - <translation type="unfinished">Ðазва</translation> + <translation>Ðазва</translation> </message> <message> <source>Version</source> - <translation type="unfinished">ВерÑÑ–Ñ</translation> + <translation>ВерÑÑ–Ñ</translation> </message> <message> <source>Add package</source> - <translation type="unfinished"></translation> + <translation>Додати пакунок</translation> </message> <message> <source>Remove package</source> - <translation type="unfinished"></translation> + <translation>Вилучити пакунок</translation> </message> <message> <source>Select an extension package file</source> - <translation type="unfinished"></translation> + <translation>Виберіть файл пакунка розширеннÑ</translation> </message> <message> <source>Extension package files (%1)</source> - <translation type="unfinished"></translation> + <translation>Файл пакунка Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ (%1)</translation> </message> </context> <context> @@ -1685,38 +1685,38 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the host screen saver will be disabled whenever a virtual machine is running.</source> - <translation type="unfinished"></translation> + <translation>Якщо це відмічено, зберігач головного екрана буде вимкнено, коли віртуальна машина запущена.</translation> </message> <message> <source>Disable Host &ScreenSaver</source> - <translation type="unfinished"></translation> + <translation>Вимкнути &зберігач головного екрана</translation> </message> </context> <context> <name>UIGlobalSettingsInput</name> <message> <source>Host &Key:</source> - <translation type="unfinished">&Головна клавіша:</translation> + <translation>&Головна клавіша:</translation> </message> <message> <source>Displays the key used as a Host Key in the VM window. Activate the entry field and press a new Host Key. Note that alphanumeric, cursor movement and editing keys cannot be used.</source> - <translation type="unfinished">Показує клавішу, Ñка викориÑтовуєтьÑÑ Ñк головна клавіша у вікні віртуальної машини. Перейдіть до Ð¿Ð¾Ð»Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ– натиÑніть нову головну клавішу. Майте на увазі, рух курÑора Ñ– клавіші, що редагують, не можуть викориÑтовуватиÑÑŒ Ñк головні клавіші.</translation> + <translation>Показує клавішу, Ñка викориÑтовуєтьÑÑ Ñк головна клавіша у вікні віртуальної машини. Перейдіть до Ð¿Ð¾Ð»Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ– натиÑніть нову головну клавішу. Майте на увазі, рух курÑора Ñ– клавіші, що редагують, не можуть викориÑтовуватиÑÑŒ Ñк головні клавіші.</translation> </message> <message> <source>Reset Host Key</source> - <translation type="unfinished">Скинути головну клавішу</translation> + <translation>Скинути головну клавішу</translation> </message> <message> <source>Resets the key used as a Host Key in the VM window.</source> - <translation type="unfinished">Скидає комбінацію клавіш Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¼Ñ–Ð¶ машиною Ñ– ÑиÑтемою.</translation> + <translation>Скидає комбінацію клавіш Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¼Ñ–Ð¶ машиною Ñ– ÑиÑтемою.</translation> </message> <message> <source>When checked, the keyboard is automatically captured every time the VM window is activated. When the keyboard is captured, all keystrokes (including system ones like Alt-Tab) are directed to the VM.</source> - <translation type="unfinished">Якщо це відмічено, клавіатура автоматично захоплюєтьÑÑ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ разу, коли вікно віртуальної машини активне. Якщо клавіатура захоплена, будь-Ñкі натиÑÐ½ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ (за винÑтком ÑиÑтемних, наприклад, Alt-Tab) ÑпрÑмовуютьÑÑ Ñƒ віртуальну машину.</translation> + <translation>Якщо це відмічено, клавіатура автоматично захоплюєтьÑÑ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ разу, коли вікно віртуальної машини активне. Якщо клавіатура захоплена, будь-Ñкі натиÑÐ½ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ (за винÑтком ÑиÑтемних, наприклад, Alt-Tab) ÑпрÑмовуютьÑÑ Ñƒ віртуальну машину.</translation> </message> <message> <source>&Auto Capture Keyboard</source> - <translation type="unfinished">&ÐÐ²Ñ‚Ð¾Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ð°Ñ‚ÑƒÑ€Ð¸</translation> + <translation>&ÐÐ²Ñ‚Ð¾Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ð°Ñ‚ÑƒÑ€Ð¸</translation> </message> </context> <context> @@ -1920,7 +1920,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>New Host-Only Interface</source> - <translation type="unfinished"></translation> + <translation>Ðовий лише головний інтерфейÑ</translation> </message> </context> <context> @@ -2062,18 +2062,18 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Choose this to be notified about all new VirtualBox releases and pre-release versions of VirtualBox.</p></source> - <translation><p>Виберіть це, Ñкщо ви бажаєте ÑповіщатиÑÑŒ про вÑÑ– нові та передвипуÑки VirtualBox.</p></translation> + <translation><p>Виберіть це, Ñкщо ви бажаєте ÑповіщатиÑÑŒ про вÑÑ– нові та підготовчі випуÑки VirtualBox.</p></translation> </message> <message> <source>All new releases and &pre-releases</source> - <translation>УÑÑ– н&ові випуÑки Ñ– передвипуÑки</translation> + <translation>УÑÑ– н&ові випуÑки Ñ– підготовчі випуÑки</translation> </message> </context> <context> <name>UIHelpButton</name> <message> <source>&Help</source> - <translation type="unfinished">&Довідка</translation> + <translation>&Довідка</translation> </message> </context> <context> @@ -2155,14 +2155,14 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>This wizard will guide you through importing an appliance.</p><p>%1</p><p>VirtualBox currently supports importing appliances saved in the Open Virtualization Format (OVF). To continue, select the file to import below:</p></source> - <translation><p>Цей майÑтер допоможе вам пройти Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ обрзазу віртуальної машини.</p><p>%1</p><p>Зараз VirtualBox підтримує імпорт образів, Ñкі збережені у відкритому віртуалізаційному форматі (OVF). Щоб пройти далі, виберіть файл Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ нижче:</p></translation> + <translation><p>Цей майÑтер допоможе вам пройти Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ образу віртуальної машини.</p><p>%1</p><p>Зараз VirtualBox підтримує імпорт образів, Ñкі збережені у відкритому віртуалізаційному форматі (OVF). Щоб пройти далі, виберіть файл Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ нижче:</p></translation> </message> </context> <context> <name>UIImportApplianceWzdPage2</name> <message> <source>These are the virtual machines contained in the appliance and the suggested settings of the imported VirtualBox machines. You can change many of the properties shown by double-clicking on the items and disable others using the check boxes below.</source> - <translation>Це віртуальні машини, Ñк опиÑано в образі віртуальної машини з їхнім рекомендованим відображеннÑм Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ до VirtualBox. Ви можете змінити багато з показаних влаÑтивоÑтей, натиÑнувши подвійним клацом на пункти, Ñ– вимкнути інші, викориÑтовуючи мітки нижче.</translation> + <translation>Це віртуальні машини, Ñк опиÑано в образі віртуальної машини з їхнім рекомендованим відображеннÑм Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ до VirtualBox. Ви можете змінити багато з показаних влаÑтивоÑтей, натиÑнувши подвійним кліком на пункти, Ñ– вимкнути інші, викориÑтовуючи мітки нижче.</translation> </message> <message> <source>Appliance Import Settings</source> @@ -2209,7 +2209,7 @@ p, li { white-space: pre-wrap; } <message> <source><p style='white-space:pre'><nobr>Indicates the activity of the virtual hard disks:</nobr>%1</p></source> <comment>HDD tooltip</comment> - <translation><p style='white-space:pre'><nobr>Індикатори активноÑÑ‚Ñ– віртуальних жорÑтких диÑків:</nobr>%1</p></translation> + <translation><p style='white-space:pre'><nobr>Індикатори активноÑÑ‚Ñ– віртуальних твердих диÑків:</nobr>%1</p></translation> </message> <message> <source><p style='white-space:pre'><nobr>Indicates the activity of the CD/DVD devices:</nobr>%1</p></source> @@ -2299,11 +2299,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Indicates whether the Remote Desktop Server is enabled (<img src=:/vrdp_16px.png/>) or not (<img src=:/vrdp_disabled_16px.png/>).</source> - <translation type="unfinished"></translation> + <translation>Показує, чи ввімкнений Ñервер віддаленої Ñтільниці (<img src=:/vrdp_16px.png/>), чи ні (<img src=:/vrdp_disabled_16px.png/>).</translation> </message> <message> <source><hr>The Remote Desktop Server is listening on port %1</source> - <translation type="unfinished"></translation> + <translation><hr>Сервер віддаленої Ñтільниці очікуєтьÑÑ Ð½Ð° порті %1</translation> </message> </context> <context> @@ -2314,7 +2314,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source> EXPERIMENTAL build %1r%2 - %3</source> - <translation> ЕКСПЕРЕМЕÐТÐЛЬÐРзбірка %1r%2 — %3</translation> + <translation> ЕКСПИРЕМЕÐТÐЛЬÐРзбірка %1r%2 — %3</translation> </message> <message> <source>Preview Monitor %1</source> @@ -2326,19 +2326,19 @@ p, li { white-space: pre-wrap; } </message> <message> <source>More CD/DVD Images...</source> - <translation type="obsolete">Більше образів CD/DVD…</translation> + <translation>Більше образів CD/DVD…</translation> </message> <message> <source>Unmount CD/DVD Device</source> - <translation type="obsolete">Демонтувати приÑтрій CD/DVD</translation> + <translation>Демонтувати приÑтрій CD/DVD</translation> </message> <message> <source>More Floppy Images...</source> - <translation type="obsolete">Більше образів диÑкет…</translation> + <translation>Більше образів диÑкет…</translation> </message> <message> <source>Unmount Floppy Device</source> - <translation type="obsolete">Демонтувати приÑтрій диÑкет</translation> + <translation>Демонтувати приÑтрій диÑкет</translation> </message> <message> <source>No CD/DVD Devices Attached</source> @@ -2480,7 +2480,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>The VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source> - <translation>Ðомер порта Ñервера VRDP. Ви можете вказати <tt>0</tt> (нуль), щоб вибрати порт 3389, Ñкий Ñ” Ñтандарнтим Ð´Ð»Ñ RDP.</translation> + <translation>Ðомер порту Ñервера VRDP. Ви можете вказати <tt>0</tt> (нуль), щоб вибрати порт 3389, Ñкий Ñ” Ñтандартним Ð´Ð»Ñ RDP.</translation> </message> <message> <source>Mo&nitor Count:</source> @@ -2496,15 +2496,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Specifies whether multiple simultaneous connections to the VM are permitted.</source> - <translation type="unfinished"></translation> + <translation>Вказує, чи дозволено багато одночаÑних з'єднаннь до віртуальної машини.</translation> </message> <message> <source>&Allow Multiple Connections</source> - <translation type="unfinished"></translation> + <translation>&Дозволити багато з'єднань</translation> </message> <message> <source>You have 3D Acceleration enabled for a operation system which uses the WDDM video driver. For maximal performance set the guest VRAM to at least <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Ви увімкнули проÑторове приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ñ— ÑиÑтеми, Ñка викориÑтовує відеодрайвер WDDM. Ð”Ð»Ñ Ð½Ð°Ð¹Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð¸Ð²Ð½Ñ–ÑˆÐ¾Ñ— роботи ввімкніть хоча би гоÑтьову VRAM<b>%1</b>.</translation> </message> </context> <context> @@ -2707,11 +2707,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>If checked, show the Mini ToolBar in Fullscreen and Seamless modes.</source> - <translation>Якщо це відмічено, показувати зменшену панель інÑтрументів в повноекранному Ñ– цілокроєному режимі.</translation> + <translation>Якщо це відмічено, показувати зменшену панель інÑтрументів в повноекранному Ñ– ціловикроєному режимі.</translation> </message> <message> <source>Show In &Fullscreen/Seamless</source> - <translation>&Показати в повноекранному/цілокроєному</translation> + <translation>&Показати в повноекранному/ціловикроєному</translation> </message> <message> <source>If checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source> @@ -2770,7 +2770,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source> - <translation>Показує адреÑу MAC цього адаптера. Вона міÑтить 12 Ñимволів вибраних з діапозону {0-9,A-F}. Майте на увазі, другий Ñимвол повиннен бути лише чиÑлом.</translation> + <translation>Показує адреÑу MAC цього адаптера. Вона міÑтить 12 Ñимволів вибраних з діапазону {0-9,A-F}. Майте на увазі, другий Ñимвол повинен бути лише чиÑлом.</translation> </message> <message> <source>Generates a new random MAC address.</source> @@ -2847,7 +2847,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Controls how this virtual adapter is attached to the real network of the Host OS.</source> - <translation>Котролює, Ñк цей віртуальний адаптер під'єднаний до Ñправжньої мережі головної операційної ÑиÑтеми.</translation> + <translation>Контролює, Ñк цей віртуальний адаптер під'єднаний до Ñправжньої мережі головної операційної ÑиÑтеми.</translation> </message> <message> <source>Open additional options dialog for current attachment type.</source> @@ -2859,7 +2859,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Selects the name of the network adapter for <b>Bridged Adapter</b> or <b>Host-only Adapter</b> attachments and the name of the network <b>Internal Network</b> attachments.</source> - <translation>Вибирає назву мережевого адаптера, Ñкщо тип під'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€Ñ–Ð²Ð½Ð¾Ñильний до <b>проміжного адаптера</b> або <b>лише головного адаптера</b> Ñ– назву внутрьошньої мережі, Ñкщо тип під'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€Ñ–Ð²Ð½Ð¾Ñильний до <b>внутрьошньої мережі</b>.</translation> + <translation>Вибирає назву мережевого адаптера, Ñкщо тип під'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€Ñ–Ð²Ð½Ð¾Ñильний до <b>проміжного адаптера</b> або <b>лише головного адаптера</b> Ñ– назву внутрішньої мережі, Ñкщо тип під'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€Ñ–Ð²Ð½Ð¾Ñильний до <b>внутрішньої мережі</b>.</translation> </message> <message> <source>A&dvanced</source> @@ -2879,11 +2879,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Opens dialog to manage port forwarding rules.</source> - <translation type="unfinished"></translation> + <translation>Відкриває діалог, щоб уÑтановити правила переадреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ.</translation> </message> <message> <source>&Port Forwarding</source> - <translation type="unfinished"></translation> + <translation>&ПереадреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ</translation> </message> </context> <context> @@ -2999,31 +2999,31 @@ p, li { white-space: pre-wrap; } <name>UIMachineSettingsPortForwardingDlg</name> <message> <source>Port Forwarding Rules</source> - <translation type="unfinished"></translation> + <translation>Правила переадреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ</translation> </message> <message> <source>This table contains a list of port forwarding rules.</source> - <translation type="unfinished"></translation> + <translation>Ð¦Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¼Ñ–Ñтить перелік правил переадреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð².</translation> </message> <message> <source>Insert new rule</source> - <translation type="unfinished"></translation> + <translation>Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ правила</translation> </message> <message> <source>Copy selected rule</source> - <translation type="unfinished"></translation> + <translation>Скопіювати вибране правило</translation> </message> <message> <source>Delete selected rule</source> - <translation type="unfinished"></translation> + <translation>Вилучити вибране правило</translation> </message> <message> <source>This button adds new port forwarding rule.</source> - <translation type="unfinished"></translation> + <translation>Ð¦Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° додає нове правило переадреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ.</translation> </message> <message> <source>This button deletes selected port forwarding rule.</source> - <translation type="unfinished"></translation> + <translation>Ð¦Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вилучає вибране правило переадреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ.</translation> </message> </context> <context> @@ -3106,11 +3106,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Auto-Mount</source> - <translation type="unfinished"></translation> + <translation>Ðвтоматичне змонтуваннÑ</translation> </message> <message> <source>Yes</source> - <translation type="unfinished">Так</translation> + <translation>Так</translation> </message> </context> <context> @@ -3153,15 +3153,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the guest OS will try to automatically mount the shared folder on startup.</source> - <translation type="unfinished"></translation> + <translation>Якщо це відмічено, гоÑтьова операційна ÑиÑтема буде автоматично монтувати Ñпільні теки при запуÑку.</translation> </message> <message> <source>&Auto-mount</source> - <translation type="unfinished"></translation> + <translation>&Ðвтоматичне монтуваннÑ</translation> </message> <message> <source>If checked, this shared folder will be permanent.</source> - <translation type="unfinished"></translation> + <translation>Якщо це відмічено, Ñ†Ñ Ñільна тека буде незмінною.</translation> </message> </context> <context> @@ -3339,7 +3339,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><nobr>Add&nbsp;Hard&nbsp;Disk</nobr></source> - <translation><nobr>Додати&nbsp;жорÑткий&nbsp;диÑк</nobr></translation> + <translation><nobr>Додати&nbsp;твердий&nbsp;диÑк</nobr></translation> </message> <message> <source><nobr>Add&nbsp;CD/DVD&nbsp;Device</nobr></source> @@ -3351,7 +3351,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>No hard disk is selected for <i>%1</i>.</source> - <translation>Ðе вибрано жорÑткий диÑк Ð´Ð»Ñ <i>%1</i>.</translation> + <translation>Ðе вибрано твердий диÑк Ð´Ð»Ñ <i>%1</i>.</translation> </message> <message> <source><i>%1</i> uses a medium that is already attached to <i>%2</i>.</source> @@ -3387,7 +3387,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Add Hard Disk</source> - <translation>Додати жорÑткий диÑк</translation> + <translation>Додати твердий диÑк</translation> </message> <message> <source>Add CD/DVD Device</source> @@ -3435,7 +3435,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Hard &Disk:</source> - <translation>&ЖорÑткий диÑк:</translation> + <translation>&Твердий диÑк:</translation> </message> <message> <source>&CD/DVD Device:</source> @@ -3451,7 +3451,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Contains all storage controllers for this machine and the virtual images and host drives attached to them.</source> - <translation>МіÑтить вÑÑ– контролери пам'ÑÑ‚Ñ– Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— машини Ñ– віртуальні образи та головін драйвери, Ñкі долучено до них.</translation> + <translation>МіÑтить вÑÑ– контролери пам'ÑÑ‚Ñ– Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— машини Ñ– віртуальні образи та головні драйвери, Ñкі долучено до них.</translation> </message> <message> <source>Information</source> @@ -3507,7 +3507,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, allows the guest to send ATAPI commands directly to the host-drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source> - <translation>Якщо це відмічено, то гоÑтьова ÑиÑтема може відправлÑти команди ATAPI напрÑму до головних приÑтроїв, що довзволÑÑ” викориÑтовувати Ð·Ð°Ð¿Ð¸Ñ CD/DVD, Ñкі під'єднано до головної ÑиÑтеми. Майте на увазі, Ð·Ð°Ð¿Ð¸Ñ Ð°ÑƒÐ´Ñ–Ð¾ CD поки що не підтримуєтьÑÑ.</translation> + <translation>Якщо це відмічено, то гоÑтьова ÑиÑтема може відправлÑти команди ATAPI напрÑму до головних приÑтроїв, що дозволÑÑ” викориÑтовувати Ð·Ð°Ð¿Ð¸Ñ CD/DVD, Ñкі під'єднано до головної ÑиÑтеми. Майте на увазі, Ð·Ð°Ð¿Ð¸Ñ Ð°ÑƒÐ´Ñ–Ð¾ CD поки що не підтримуєтьÑÑ.</translation> </message> <message> <source>&Passthrough</source> @@ -3527,7 +3527,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Location:</source> - <translation>МіÑцероÑташуваннÑ:</translation> + <translation>ÐдреÑа:</translation> </message> <message> <source>Type (Format):</source> @@ -3563,67 +3563,67 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Type:</source> - <translation type="unfinished"></translation> + <translation>Тип:</translation> </message> <message> <source>Host Drive</source> - <translation type="unfinished">Головний приÑтрій</translation> + <translation>Головний приÑтрій</translation> </message> <message> <source>Image</source> - <translation type="unfinished">Образ</translation> + <translation>Образ</translation> </message> <message> <source>Choose or create a virtual hard disk file. The virtual machine will see the data in the file as the contents of the virtual hard disk.</source> - <translation type="unfinished"></translation> + <translation>Вибрати або Ñтворити віртуальний файл твердого диÑка. Віртуальна машина покаже дані в файлі Ñк вміÑÑ‚ віртуального твердого диÑка.</translation> </message> <message> <source>Set up the virtual hard disk</source> - <translation type="unfinished"></translation> + <translation>Ðалаштувати віртуальний твердий диÑк</translation> </message> <message> <source>CD/DVD &Drive:</source> - <translation type="unfinished"></translation> + <translation>&ÐоÑій CD/DVD:</translation> </message> <message> <source>Choose a virtual CD/DVD disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source> - <translation type="unfinished"></translation> + <translation>Виберіть віртуальний диÑк CD/DVD або фізичний ноÑій Ð´Ð»Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¼ ноÑієм. Віртуальна машина розпізнає диÑк заміÑÑ‚ÑŒ ноÑÑ–Ñ Ð· даними у файлі або на диÑку у фізичного ноÑÑ–Ñ Ñк його вміÑÑ‚.</translation> </message> <message> <source>Set up the virtual CD/DVD drive</source> - <translation type="unfinished"></translation> + <translation>Ðалаштувати віртуальний ноÑій CD/DVD</translation> </message> <message> <source>Floppy &Drive:</source> - <translation type="unfinished"></translation> + <translation>&ДиÑкети:</translation> </message> <message> <source>Choose a virtual floppy disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source> - <translation type="unfinished"></translation> + <translation>Виберіть віртуальну диÑкету або фізичний ноÑій, щоб викориÑтовувати віртуальним ноÑієм. Віртуальна машина розпізнає диÑк заміÑÑ‚ÑŒ ноÑÑ–Ñ Ð· даними у файлі або на диÑку у фізичного ноÑÑ–Ñ Ñк його вміÑÑ‚.</translation> </message> <message> <source>Set up the virtual floppy drive</source> - <translation type="unfinished"></translation> + <translation>Ðалаштувати віртуальний ноÑій диÑкет</translation> </message> <message> <source>Create a new hard disk...</source> - <translation type="unfinished"></translation> + <translation>Створити новий твердий диÑк…</translation> </message> <message> <source>Choose a virtual hard disk file...</source> - <translation type="unfinished"></translation> + <translation>Вибрати файл віртуального твердого диÑка…</translation> </message> <message> <source>Choose a virtual CD/DVD disk file...</source> - <translation type="unfinished"></translation> + <translation>Вибрати файл віртуально диÑка CD/DVD…</translation> </message> <message> <source>Remove disk from virtual drive</source> - <translation type="unfinished"></translation> + <translation>Вилучити диÑк з віртуального ноÑÑ–Ñ</translation> </message> <message> <source>Choose a virtual floppy disk file...</source> - <translation type="unfinished"></translation> + <translation>Вибрати файл віртуальної диÑкети…</translation> </message> </context> <context> @@ -3650,7 +3650,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>you have assigned more than one virtual CPU to this VM. This will not work unless hardware virtualization (VT-x/AMD-V) is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation>ви вказали більше, ніж один віртуальний процеÑор Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— машини. Це також не працює, Ñкщо не ввімкнено віртуалізацію апаратури (VT-x/AMD-V). Це буде автоматично здійÑнено, коли ви дозволите Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини, натиÑнувши кнопку Гаразд.</translation> + <translation>ви вказали більше, ніж один віртуальний процеÑор Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— машини. Це не працює, Ñкщо не ввімкнено віртуалізацію апаратури (VT-x/AMD-V). Це буде автоматично здійÑнено, коли ви дозволите Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини, натиÑнувши кнопку Гаразд.</translation> </message> <message> <source><qt>%1&nbsp;MB</qt></source> @@ -3777,15 +3777,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, the guest will support the Extended Firmware Interface (EFI), which is required to boot certain guest OSes. Non-EFI aware OSes will not be able to boot if this option is activated.</source> - <translation>Якщо це відмічено, у гоÑтьової буде підтримка інтерфейÑу розширних мікропропрам (EFI), Ñкі потребують Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÐ²Ð½Ð¸Ñ… гоÑтьових операційних ÑиÑтем, але вона унеможливлює Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑˆÐ¸Ñ….</translation> + <translation>Якщо це відмічено, у гоÑтьової буде підтримка інтерфейÑу розширних мікропрограм (EFI), Ñкі потребують Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÐ²Ð½Ð¸Ñ… гоÑтьових операційних ÑиÑтем, але вона унеможливлює Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑˆÐ¸Ñ….</translation> </message> <message> <source>Enable &EFI (special OSes only)</source> - <translation>Увімкнут&и EFI (лише Ð´Ð»Ñ Ñпеціальни операційних ÑиÑтем)</translation> + <translation>Увімкнут&и EFI (лише Ð´Ð»Ñ Ñпеціальних операційних ÑиÑтем)</translation> </message> <message> <source>If checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source> - <translation>Якщо це відмічено, приÑтрій RTC буде доповідати про Ñ‡Ð°Ñ Ð² UTC, Ñкщо ні, то в локальному чаÑÑ– голової машини. Unix переважно викориÑтовує апаратний годинник Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ UTC.</translation> + <translation>Якщо це відмічено, приÑтрій RTC буде доповідати про Ñ‡Ð°Ñ Ð² UTC, Ñкщо ні, то в локальному чаÑÑ– головної машини. Unix переважно викориÑтовує апаратний годинник Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ UTC.</translation> </message> <message> <source>Hardware clock in &UTC time</source> @@ -3793,7 +3793,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Controls the number of virtual CPUs in the virtual machine. You need hardware virtualization support on your host system to use more than one virtual CPU.</source> - <translation>Контролює чиÑло віртуальних процеÑорів у віртуальній машині. Вам потрібнопідтримка апаратної віртуалізації на головній ÑиÑтемі, щоб викориÑтовувати понад один віртуальний процеÑор.</translation> + <translation>Контролює чиÑло віртуальних процеÑорів у віртуальній машині. Вам потрібна підтримка апаратної віртуалізації на головній ÑиÑтемі, щоб викориÑтовувати понад один віртуальний процеÑор.</translation> </message> <message> <source>If checked, an absolute pointing device (a USB tablet) will be supported. Otherwise, only a standard PS/2 mouse will be emulated.</source> @@ -3805,15 +3805,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Chipset:</source> - <translation type="unfinished"></translation> + <translation>&Комплект мікроÑхем:</translation> </message> <message> <source>Defines chipset type used in this VM.</source> - <translation type="unfinished"></translation> + <translation>Визначає тип комплекту мікроÑхем, Ñкі викориÑтовуєтьÑÑ Ñƒ віртуальній машині.</translation> </message> <message> <source>you have assigned ICH9 chipset type to this VM. It will not work properly unless the IO-APIC feature is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="unfinished"></translation> + <translation>ви вказали тип комплекту мікроÑхем ICH9 Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— віртуальної машини. Це не буде працювати Ñк Ñлід, допоки IO-APIC увімкнуто. Це буде автоматично здійÑнено, коли ви дозволите Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини, натиÑнувши кнопку Гаразд.</translation> </message> </context> <context> @@ -3873,7 +3873,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>When checked, enables the virtual USB controller of this machine.</source> - <translation>Якщо це відмічено, буде увімкнено віртуальний контролер USB цьієї машини.</translation> + <translation>Якщо це відмічено, буде увімкнено віртуальний контролер USB цієї машини.</translation> </message> <message> <source>Enable &USB Controller</source> @@ -3902,42 +3902,42 @@ p, li { white-space: pre-wrap; } <message> <source><nobr>Vendor ID: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>ID ПродавцÑ: %1</nobr></translation> + <translation><nobr>ID ПродавцÑ: %1</nobr></translation> </message> <message> <source><nobr>Product ID: %2</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>ID Продукту: %2<nobr></translation> + <translation><nobr>ID Продукту: %2<nobr></translation> </message> <message> <source><nobr>Revision: %3</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>ПереглÑд: %3</nobr></translation> + <translation><nobr>ПереглÑд: %3</nobr></translation> </message> <message> <source><nobr>Product: %4</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Продукт: %4</nobr></translation> + <translation><nobr>Продукт: %4</nobr></translation> </message> <message> <source><nobr>Manufacturer: %5</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Виробник: %5</nobr></translation> + <translation><nobr>Виробник: %5</nobr></translation> </message> <message> <source><nobr>Serial No.: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Серійний номер: %1</nobr></translation> + <translation><nobr>Серійний номер: %1</nobr></translation> </message> <message> <source><nobr>Port: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Порт: %1</nobr></translation> + <translation><nobr>Порт: %1</nobr></translation> </message> <message> <source><nobr>State: %1</nobr></source> <comment>USB filter tooltip</comment> - <translation type="unfinished"><nobr>Стан: %1</nobr></translation> + <translation><nobr>Стан: %1</nobr></translation> </message> </context> <context> @@ -4019,7 +4019,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Defines the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source> - <translation>ОпиÑує фільтр головного порта USB Ñк Ñ€Ñдок <i>точна відповідніÑÑ‚ÑŒ</i>. Порожній Ñ€Ñдок відповідає будь-Ñкому значенню.</translation> + <translation>ОпиÑує фільтр головного порту USB Ñк Ñ€Ñдок <i>точна відповідніÑÑ‚ÑŒ</i>. Порожній Ñ€Ñдок відповідає будь-Ñкому значенню.</translation> </message> <message> <source>R&emote:</source> @@ -4217,14 +4217,14 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>This wizard will help you to create a new virtual hard disk for your virtual machine.</p><p>%1</p></source> - <translation><p>Цей майÑтер допоможе вам Ñтворити новий віртуальний жорÑткий диÑк Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— віртуальної машини.</p><p>%1</p></translation> + <translation><p>Цей майÑтер допоможе вам Ñтворити новий віртуальний твердий диÑк Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— віртуальної машини.</p><p>%1</p></translation> </message> </context> <context> <name>UINewHDWzdPage2</name> <message> <source><p>Select the type of virtual hard disk you want to create.</p><p>A <b>dynamically expanding storage</b> initially occupies a very small amount of space on your physical hard disk. It will grow dynamically (up to the size specified) as the Guest OS claims disk space.</p><p>A <b>fixed-size storage</b> does not grow. It is stored in a file of approximately the same size as the size of the virtual hard disk. The creation of a fixed-size storage may take a long time depending on the storage size and the write performance of your harddisk.</p></source> - <translation><p>Виберіть тип віртуального жорÑткого диÑка, Ñкий ви бажаєте Ñтворити.</p><p><b>Динамічно розширна пам'ÑÑ‚ÑŒ</b> початково займає дуже малу величину міÑÑ†Ñ Ð½Ð° фізичному жорÑткому диÑку. Розмір буде динамічно зроÑтати (до вказаного розміру) до тих пір, поки гоÑтьова операційна ÑиÑтема може викориÑтовувати диÑковий проÑÑ‚Ñ–Ñ€.</p><p><b>Ðезмінної розмірноÑÑ‚Ñ– пам'ÑÑ‚ÑŒ</b> не збільшуєтьÑÑ. Він зберігаєтьÑÑ Ñƒ файлі приблизно такого ж розміру, Ñк розмір віртуального жорÑткого диÑка. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÐ·Ð¼Ñ–Ð½Ð½Ð¾Ñ— розмірноÑÑ‚Ñ– пам'ÑÑ‚Ñ– може забрати багато чаÑу, Ñкий залежить від розміру пам'ÑÑ‚Ñ– та швидкодії вашого жорÑткого диÑка.</p></translation> + <translation><p>Виберіть тип віртуального твердого диÑка, Ñкий ви бажаєте Ñтворити.</p><p><b>Динамічно розширна пам'ÑÑ‚ÑŒ</b> початково займає дуже малу величину міÑÑ†Ñ Ð½Ð° фізичному твердому диÑку. Розмір буде динамічно зроÑтати (до вказаного розміру) до тих пір, поки гоÑтьова операційна ÑиÑтема може викориÑтовувати диÑковий проÑÑ‚Ñ–Ñ€.</p><p><b>Ðезмінної розмірноÑÑ‚Ñ– пам'ÑÑ‚ÑŒ</b> не збільшуєтьÑÑ. Він зберігаєтьÑÑ Ñƒ файлі приблизно такого ж розміру, Ñк розмір віртуального твердого диÑка. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÐ·Ð¼Ñ–Ð½Ð½Ð¾Ñ— розмірноÑÑ‚Ñ– пам'ÑÑ‚Ñ– може забрати багато чаÑу, Ñкий залежить від розміру пам'ÑÑ‚Ñ– та швидкодії вашого твердого диÑка.</p></translation> </message> <message> <source>Storage Type</source> @@ -4240,14 +4240,14 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Hard Disk Storage Type</source> - <translation>Тип пам'ÑÑ‚Ñ– жорÑткого диÑка</translation> + <translation>Тип пам'ÑÑ‚Ñ– твердого диÑка</translation> </message> </context> <context> <name>UINewHDWzdPage3</name> <message> <source><p>Press the <b>Select</b> button to select the location of a file to store the hard disk data or type a file name in the entry field.</p></source> - <translation><p>ÐатиÑніть кнопку <b>Вибрати</b>, щоб вибрати адреÑу файла Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… віртуального жорÑткого диÑка або введіть назву файла у поле вводіннÑ.</p></translation> + <translation><p>ÐатиÑніть кнопку <b>Вибрати</b>, щоб вибрати адреÑу файла Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… віртуального твердого диÑка або введіть назву файла у поле вводу.</p></translation> </message> <message> <source>&Location</source> @@ -4255,7 +4255,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Select the size of the virtual hard disk in megabytes. This size will be reported to the Guest OS as the maximum size of this hard disk.</p></source> - <translation><p>Виберіть розмір віртуального жорÑткого диÑка у магабайтах. Цей розмір буде вказаний гоÑтьовій операційної ÑиÑтеми Ñк розмір жорÑткого диÑку.</p></translation> + <translation><p>Виберіть розмір віртуального твердого диÑка у мегабайтах. Цей розмір буде вказаний гоÑтьовій операційній ÑиÑтемі Ñк макÑимальний розмір твердого диÑка.</p></translation> </message> <message> <source>&Size</source> @@ -4267,11 +4267,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Select a file for the new hard disk image file</source> - <translation>Виберіть файл Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ образа жорÑткого диÑка</translation> + <translation>Виберіть файл Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ образа твердого диÑка</translation> </message> <message> <source>Hard disk images (*.vdi)</source> - <translation>Образ жорÑткого диÑка (*.vdi)</translation> + <translation>Образ твердого диÑка (*.vdi)</translation> </message> <message> <source><nobr>%1 (%2 B)</nobr></source> @@ -4282,7 +4282,7 @@ p, li { white-space: pre-wrap; } <name>UINewHDWzdPage4</name> <message> <source>You are going to create a new virtual hard disk with the following parameters:</source> - <translation>Ви збираєтеÑÑŒ Ñтворити новий віртуальний жорÑткий диÑк з такими параметрами:</translation> + <translation>Ви збираєтеÑÑŒ Ñтворити новий віртуальний твердий диÑк з такими параметрами:</translation> </message> <message> <source>Summary</source> @@ -4309,7 +4309,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>If the above settings are correct, press the <b>%1</b> button. Once you press it, a new hard disk will be created.</source> - <translation>Якщо Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ñ‰Ðµ коректні, натиÑніть <b>%1</b>. Як тільки ви натиÑнете це, новий жорÑткий диÑк буде Ñтворено.</translation> + <translation>Якщо Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ñ‰Ðµ коректні, натиÑніть <b>%1</b>. Як тільки ви натиÑнете це, новий твердий диÑк буде Ñтворено.</translation> </message> </context> <context> @@ -4518,15 +4518,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Create new hard disk</source> - <translation>&Створити новий жорÑткий диÑк</translation> + <translation>&Створити новий твердий диÑк</translation> </message> <message> <source>&Use existing hard disk</source> - <translation>&ВикориÑтовувати наÑвний жорÑткий диÑк</translation> + <translation>&ВикориÑтовувати наÑвний твердий диÑк</translation> </message> <message> <source>Virtual Hard Disk</source> - <translation>Віртуальний жорÑткий диÑк</translation> + <translation>Віртуальний твердий диÑк</translation> </message> <message> <source>The recommended size of the boot hard disk is <b>%1</b> MB.</source> @@ -4534,19 +4534,19 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Boot Hard &Disk</source> - <translation>З&авантажувальний жорÑткий диÑк</translation> + <translation>З&авантажувальний твердий диÑк</translation> </message> <message> <source><p>Select a virtual hard disk to be used as the boot hard disk of the virtual machine. You can either create a new hard disk or select an existing one from the drop-down list or by pressing corresponding button (to invoke file-open window).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> - <translation type="unfinished"></translation> + <translation><p>Виберіть твердий диÑк, Ñкий буде завантажувальним Ð´Ð»Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини. Ви можете або Ñтворити новий твердий диÑк, або вибрати наÑвний зі Ñпадного ÑпиÑку або натиÑнувши відповідну кнопку (щоб викликати потрібне вікно).</p><p>Якщо вам потрібно Ñкладніші Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð²ÐµÑ€Ð´Ð¾Ð³Ð¾ диÑка, можна також пропуÑтити цей крок Ñ– під'єднати тверді диÑки викориÑтовуючи діалог налаштувань віртуальної машини.</p></translation> </message> <message> <source>Choose a virtual hard disk file...</source> - <translation type="unfinished"></translation> + <translation>Виберіть файл віртуального твердого диÑка…</translation> </message> <message> <source>The recommended size of the boot hard disk is <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Рекомендований розмір завантажувального твердого диÑка — <b>%1</b>.</translation> </message> </context> <context> @@ -4582,7 +4582,7 @@ p, li { white-space: pre-wrap; } <message> <source>Boot Hard Disk</source> <comment>summary</comment> - <translation>Завантажувальний жорÑткий диÑк</translation> + <translation>Завантажувальний твердий диÑк</translation> </message> <message> <source><p>If the above is correct press the <b>%1</b> button. Once you press it, a new virtual machine will be created. </p><p>Note that you can alter these and all other setting of the created virtual machine at any time using the <b>Settings</b> dialog accessible through the menu of the main window.</p></source> @@ -4593,27 +4593,27 @@ p, li { white-space: pre-wrap; } <name>UIPortForwardingModel</name> <message> <source>Name</source> - <translation type="unfinished">Ðазва</translation> + <translation>Ðазва</translation> </message> <message> <source>Protocol</source> - <translation type="unfinished"></translation> + <translation>Протокол</translation> </message> <message> <source>Host IP</source> - <translation type="unfinished"></translation> + <translation>Головний IP</translation> </message> <message> <source>Host Port</source> - <translation type="unfinished"></translation> + <translation>Головний порт</translation> </message> <message> <source>Guest IP</source> - <translation type="unfinished"></translation> + <translation>ГоÑтьовий IP</translation> </message> <message> <source>Guest Port</source> - <translation type="unfinished"></translation> + <translation>ГоÑтьовий порт</translation> </message> </context> <context> @@ -4676,7 +4676,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>A few seconds remaining</source> - <translation>залишлоÑÑŒ кілька Ñекунд</translation> + <translation>залишилоÑÑŒ кілька Ñекунд</translation> </message> <message> <source>Canceling...</source> @@ -4705,88 +4705,88 @@ p, li { white-space: pre-wrap; } <name>UISession</name> <message> <source>Install</source> - <translation type="unfinished"></translation> + <translation>Ð’Ñтановити</translation> </message> </context> <context> <name>UISettingsDialog</name> <message> <source><i>Select a settings category from the list on the left-hand side and move the mouse over a settings item to get more information.</i></source> - <translation type="unfinished"></translation> + <translation><i>Виберіть категорію налаштувань зі ÑпиÑку зліва Ñ– підведіть курÑор миші, щоб одержати докладнішу інформацію.</i></translation> </message> <message> <source>On the <b>%1</b> page, %2</source> - <translation type="unfinished"></translation> + <translation>Ðа Ñторінці <b>%1</b>, %2</translation> </message> <message> <source>Invalid settings detected</source> - <translation type="unfinished">ВиÑвлено неправильні налаштуваннÑ</translation> + <translation>ВиÑвлено неправильні налаштуваннÑ</translation> </message> <message> <source>Non-optimal settings detected</source> - <translation type="unfinished">ВиÑвлено неÑприÑтливі налаштуваннÑ</translation> + <translation>ВиÑвлено неÑприÑтливі налаштуваннÑ</translation> </message> <message> <source>Settings</source> - <translation type="unfinished">ÐалаштуваннÑ</translation> + <translation>ÐалаштуваннÑ</translation> </message> </context> <context> <name>UIVMCloseDialog</name> <message> <source>Close Virtual Machine</source> - <translation type="unfinished">Закрити віртуальну машину</translation> + <translation>Закрити віртуальну машину</translation> </message> <message> <source>You want to:</source> - <translation type="unfinished">Ви бажаєте:</translation> + <translation>Ви бажаєте:</translation> </message> <message> <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to the virtual machine.</p></source> - <translation type="unfinished"><p>Зберігає поточне Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñтану віртуальної машини на фізичний жорÑткий диÑк головного комп'ютера.</p><p>ÐаÑтупного разу Ñ†Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð° буде запущена з етапу, на Ñкому вона була збережена, що дозволÑÑ” швидко продовжити вашу роботу.</p><p>Майте на увазі, що Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñтану машини може зайнÑти багато чаÑу, в залежноÑÑ‚Ñ– від типу гоÑтьової операційної ÑиÑтеми Ñ– кількоÑÑ‚Ñ– оперативної пам'ÑÑ‚Ñ–, Ñка була задана Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— машини.</p></translation> + <translation><p>Зберігає поточне Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñтану віртуальної машини на фізичний твердий диÑк головного комп'ютера.</p><p>ÐаÑтупного разу Ñ†Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð° буде запущена з етапу, на Ñкому вона була збережена, що дозволÑÑ” швидко продовжити вашу роботу.</p><p>Майте на увазі, що Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñтану машини може зайнÑти багато чаÑу, в залежноÑÑ‚Ñ– від типу гоÑтьової операційної ÑиÑтеми Ñ– кількоÑÑ‚Ñ– оперативної пам'ÑÑ‚Ñ–, Ñка була задана Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— машини.</p></translation> </message> <message> <source>&Save the machine state</source> - <translation type="unfinished">&Зберегти Ñтан машини</translation> + <translation>&Зберегти Ñтан машини</translation> </message> <message> <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system may be misconfigured or doesn't understand ACPI Power Button events at all. In this case you should select the <b>Power off the machine</b> action to stop virtual machine execution.</p></source> - <translation type="unfinished"><p>ВідÑилає Ñигнал ACPI натиÑÐ½ÐµÐ½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ Ð¶Ð¸Ð²Ð»ÐµÐ½Ð½Ñ Ñƒ віртуальній машині.</p><p>Зазвичай, гоÑтьова операційна ÑиÑтема, Ñка виконуєтьÑÑ Ð²Ñередині віртуальної машини, визначить цей Ñигнал Ñ– виконає Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸. Цей варіант Ñ” рекомендованим шлÑхом Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини, бо вÑÑ– запущені програми вÑередині гоÑтьової операційної ÑиÑтеми зможуть зберегти Ñвої дані та Ñтан.</p><p>Якщо машина ніÑк не реагує на ці дії, тоді гоÑтьова операційна ÑиÑтема може бути неправильно налаштована, або вона взагалі не розпізнає Ñигнал ACPI живленнÑ. У такому випадку, ви повинні вибрати дію <b>Вимкнути машину</b> Ð´Ð»Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини.</p></translation> + <translation><p>ВідÑилає Ñигнал ACPI натиÑÐ½ÐµÐ½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ Ð¶Ð¸Ð²Ð»ÐµÐ½Ð½Ñ Ñƒ віртуальній машині.</p><p>Зазвичай, гоÑтьова операційна ÑиÑтема, Ñка виконуєтьÑÑ Ð²Ñередині віртуальної машини, визначить цей Ñигнал Ñ– виконає Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸. Цей варіант Ñ” рекомендованим шлÑхом Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини, бо вÑÑ– запущені програми вÑередині гоÑтьової операційної ÑиÑтеми зможуть зберегти Ñвої дані та Ñтан.</p><p>Якщо машина ніÑк не реагує на ці дії, тоді гоÑтьова операційна ÑиÑтема може бути неправильно налаштована, або вона взагалі не розпізнає Ñигнал ACPI живленнÑ. У такому випадку, ви повинні вибрати дію <b>Вимкнути машину</b> Ð´Ð»Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини.</p></translation> </message> <message> <source>S&end the shutdown signal</source> - <translation type="unfinished">&ÐадіÑлати Ñигнал завершеннÑ</translation> + <translation>&ÐадіÑлати Ñигнал завершеннÑ</translation> </message> <message> <source><p>Turns off the virtual machine.</p><p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source> - <translation type="unfinished"><p>Ð’Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини.</p><p>Майте на увазі, що Ñ†Ñ Ð´Ñ–Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾ зупинить Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸. Ð’ такому випадку, гоÑтьова операційна ÑиÑтема, Ñка виконуєтьÑÑ Ð²Ñередині неї, не матиме можливоÑÑ‚Ñ– виконати Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ нормально, що може закінчитиÑÑŒ <i>втратою даних</i> вÑередині віртуальної машини. Вибирати цю дію рекомендуєтьÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸, Ñкщо віртуальна машина не реагує на <b>ВідіÑлати Ñигнал вимкненнÑ</b>.</p></translation> + <translation><p>Ð’Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини.</p><p>Майте на увазі, що Ñ†Ñ Ð´Ñ–Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾ зупинить Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸. Ð’ такому випадку, гоÑтьова операційна ÑиÑтема, Ñка виконуєтьÑÑ Ð²Ñередині неї, не матиме можливоÑÑ‚Ñ– виконати Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ нормально, що може закінчитиÑÑŒ <i>втратою даних</i> вÑередині віртуальної машини. Вибирати цю дію рекомендуєтьÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸, Ñкщо віртуальна машина не реагує на <b>ВідіÑлати Ñигнал вимкненнÑ</b>.</p></translation> </message> <message> <source>&Power off the machine</source> - <translation type="unfinished">&Вимкнути машину</translation> + <translation>&Вимкнути машину</translation> </message> <message> <source>Restore the machine state stored in the current snapshot</source> - <translation type="unfinished">Відновити Ñтан машини до збереженої на поточному зрізі</translation> + <translation>Відновити Ñтан машини до збереженої на поточному зрізі</translation> </message> <message> <source><p>When checked, the machine will be returned to the state stored in the current snapshot after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and start again at that snapshot.</p></source> - <translation type="unfinished"><p>Якщо це відмічено, Ñтан машини буде відновлено до Ñтану, Ñкий збережено в поточному зрізі, відразу піÑÐ»Ñ Ñ—Ñ— вимкненнÑ. Це може бути кориÑним, Ñкщо ви впевнені, що бажаєте відкинути результати оÑтаннього ÑеанÑу Ñ– вернутиÑÑŒ до поточного зрізу.</p></translation> + <translation><p>Якщо це відмічено, Ñтан машини буде відновлено до того, Ñкий збережено в поточному зрізі, відразу піÑÐ»Ñ Ñ—Ñ— вимкненнÑ. Це може бути кориÑним, Ñкщо ви впевнені, що бажаєте відкинути результати оÑтаннього ÑеанÑу Ñ– вернутиÑÑŒ до поточного зрізу.</p></translation> </message> <message> <source>&Restore current snapshot '%1'</source> - <translation type="unfinished">&Відновити поточний зріз '%1'</translation> + <translation>&Відновити поточний зріз '%1'</translation> </message> </context> <context> <name>UIVMDesktop</name> <message> <source>&Details</source> - <translation type="unfinished">&Подробиці</translation> + <translation>&Подробиці</translation> </message> <message> <source>&Snapshots</source> - <translation type="unfinished">&Зрізи</translation> + <translation>&Зрізи</translation> </message> </context> <context> @@ -4842,106 +4842,106 @@ p, li { white-space: pre-wrap; } <name>UIVMPreviewWindow</name> <message> <source>Update Disabled</source> - <translation type="unfinished"></translation> + <translation>ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾</translation> </message> <message> <source>Every 0.5 s</source> - <translation type="unfinished"></translation> + <translation>Кожні 0.5 Ñекунди</translation> </message> <message> <source>Every 1 s</source> - <translation type="unfinished"></translation> + <translation>Кожну 1 Ñекунду</translation> </message> <message> <source>Every 2 s</source> - <translation type="unfinished"></translation> + <translation>Кожні 2 Ñекунди</translation> </message> <message> <source>Every 5 s</source> - <translation type="unfinished"></translation> + <translation>Кожних 5 Ñекунд</translation> </message> <message> <source>Every 10 s</source> - <translation type="unfinished"></translation> + <translation>Кожних 10 Ñекунд</translation> </message> <message> <source>No Preview</source> - <translation type="unfinished"></translation> + <translation>Без переглÑду</translation> </message> </context> <context> <name>UIVMSettingsDlg</name> <message> <source>General</source> - <translation type="unfinished">Загально</translation> + <translation>Загально</translation> </message> <message> <source>System</source> - <translation type="unfinished">СиÑтема</translation> + <translation>СиÑтема</translation> </message> <message> <source>Display</source> - <translation type="unfinished">Екран</translation> + <translation>Екран</translation> </message> <message> <source>Storage</source> - <translation type="unfinished">Пам'ÑÑ‚ÑŒ</translation> + <translation>Пам'ÑÑ‚ÑŒ</translation> </message> <message> <source>Audio</source> - <translation type="unfinished">Ðудіо</translation> + <translation>Ðудіо</translation> </message> <message> <source>Network</source> - <translation type="unfinished">Мережа</translation> + <translation>Мережа</translation> </message> <message> <source>Ports</source> - <translation type="unfinished">Порти</translation> + <translation>Порти</translation> </message> <message> <source>Serial Ports</source> - <translation type="unfinished">ПоÑлідовні порти</translation> + <translation>ПоÑлідовні порти</translation> </message> <message> <source>Parallel Ports</source> - <translation type="unfinished">Паралельні порти</translation> + <translation>Паралельні порти</translation> </message> <message> <source>USB</source> - <translation type="unfinished">USB</translation> + <translation>USB</translation> </message> <message> <source>Shared Folders</source> - <translation type="unfinished"></translation> + <translation>Спільні теки</translation> </message> <message> <source>%1 - %2</source> - <translation type="unfinished">%1 — %2</translation> + <translation>%1 — %2</translation> </message> <message> <source>you have selected a 64-bit guest OS type for this VM. As such guests require hardware virtualization (VT-x/AMD-V), this feature will be enabled automatically.</source> - <translation type="unfinished">ви вибрали 64-ох бітну гоÑтьову операційну ÑиÑтему, Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— віртуальної машини. необхідна Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ (VT-x/AMD-V), ці влаÑтивоÑÑ‚Ñ– будуть автоматично ввімкнуто.</translation> + <translation>ви вибрали 64-ох бітну гоÑтьову операційну ÑиÑтему Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— віртуальної машини. Потрібна відповідна апаратна Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ (VT-x/AMD-V), цю можливіÑÑ‚ÑŒ буде автоматично ввімкнено.</translation> </message> <message> <source>you have 2D Video Acceleration enabled. As 2D Video Acceleration is supported for Windows guests only, this feature will be disabled.</source> - <translation type="unfinished">ви маєте приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ÐµÐ¾ 2D увікнутим. ОÑкільки приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ÐµÐ¾ 2D підтримуєтьÑÑ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ Ð³Ð¾Ñтьових Windows, цю влаÑтивіÑÑ‚ÑŒ вимкнено.</translation> + <translation>ви маєте приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð²Ð¾Ð²Ð¸Ð¼Ñ–Ñ€Ð½Ð¾Ð³Ð¾ відео увікнутим. ОÑкільки приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð²Ð¾Ñ…Ð²Ð¸Ð¼Ñ–Ñ€Ð½Ð¾Ð³Ð¾ відео підтримуєтьÑÑ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ Ð³Ð¾Ñтьових Windows, цю влаÑтивіÑÑ‚ÑŒ вимкнено.</translation> </message> <message> <source>you have enabled a USB HID (Human Interface Device). This will not work unless USB emulation is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source> - <translation type="unfinished">ви маєте USB HID (людÑький Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ñ€Ð¸Ñтрою) увімкнутим. Це не буде працювати, Ñкщо вимкнено ÐµÐ¼ÑƒÐ»ÑŽÐ²Ð°Ð½Ð½Ñ USB. Воно буде ввімкнуто автоматично, Ñкщо ви даÑте згоду на це в налаштуваннÑÑ… віртуальної машини.</translation> + <translation>ви маєте USB HID (людÑький Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ñ€Ð¸Ñтрою) увімкнутим. Це не буде працювати, Ñкщо вимкнено ÐµÐ¼ÑƒÐ»ÑŽÐ²Ð°Ð½Ð½Ñ USB. Воно буде ввімкнуто автоматично, Ñкщо ви даÑте згоду на це в налаштуваннÑÑ… віртуальної машини.</translation> </message> <message> <source>at most one supported</source> - <translation type="unfinished"></translation> + <translation>щонайбільше один підтримуєтьÑÑ</translation> </message> <message> <source>up to %1 supported</source> - <translation type="unfinished"></translation> + <translation>до %1 підтримуєтьÑÑ</translation> </message> <message> <source>you are currently using more storage controllers than a %1 chipset supports. Please change the chipset type on the System settings page or reduce the number of the following storage controllers on the Storage settings page: %2.</source> - <translation type="unfinished"></translation> + <translation>ви тепер викориÑтовуєте більше пам'ÑÑ‚Ñ– контролерів, аніж підтримуєтьÑÑ â€” %1. Будь лаÑка, змініть тип ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑ Ð¼Ñ–ÐºÑ€Ð¾Ñхем на Ñторінці налаштувань ÑиÑтеми або або збільште кількіÑÑ‚ÑŒ кількіÑÑ‚ÑŒ пам'ÑÑ‚Ñ– таких контролерів на Ñторінці налаштувань пам'ÑÑ‚Ñ–: %2.</translation> </message> </context> <context> @@ -5034,15 +5034,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Hard Disk Controller (IDE)</source> - <translation>Котролер жорÑткого диÑка IDE</translation> + <translation>Контролер твердого диÑка IDE</translation> </message> <message> <source>Hard Disk Controller (SATA)</source> - <translation>Котролер жорÑткого диÑка SATA</translation> + <translation>Контролер твердого диÑка SATA</translation> </message> <message> <source>Hard Disk Controller (SCSI)</source> - <translation>Котролер жорÑткого диÑка SCSI</translation> + <translation>Контролер твердого диÑка SCSI</translation> </message> <message> <source>DVD</source> @@ -5100,7 +5100,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Hard Disk Controller (SAS)</source> - <translation>Котролер жорÑткого диÑка (SAS)</translation> + <translation>Контролер твердого диÑка (SAS)</translation> </message> </context> <context> @@ -6082,7 +6082,7 @@ p, li { white-space: pre-wrap; } <message> <source>Hard Disk</source> <comment>DeviceType</comment> - <translation>ЖорÑткий диÑк</translation> + <translation>Твердий диÑк</translation> </message> <message> <source>Network</source> @@ -6881,17 +6881,17 @@ p, li { white-space: pre-wrap; } <message> <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source> <comment>medium</comment> - <translation>Ð”Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ жорÑткого диÑка буде здійÑнюватиÑÑŒ непрÑмим чином, викориÑтовуючи невоÑтворені обчиÑÐ»ÐµÐ½Ð½Ñ Ð¶Ð¾Ñ€Ñткого диÑка.</translation> + <translation>Під'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ твердого диÑка буде здійÑнюватиÑÑŒ непрÑмим чином, викориÑтовуючи новоÑтворені обчиÑÐ»ÐµÐ½Ð½Ñ Ñ‚Ð²ÐµÑ€Ð´Ð¾Ð³Ð¾ диÑка.</translation> </message> <message> <source>Some of the media in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these media.</source> <comment>medium</comment> - <translation>ДеÑкі ноÑÑ–Ñ— цієї низки жорÑтких диÑків недоÑтупні. Будь лаÑка, викориÑтайте ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¼Ð¸ ноÑÑ–Ñми в режимі <b>Показати обчиÑÐ»ÐµÐ½Ð½Ñ Ð¶Ð¾Ñ€Ñтких диÑків</b>, щоб оглÑнути цей ноÑій.</translation> + <translation>ДеÑкі ноÑÑ–Ñ— цієї низки твердих диÑків недоÑтупні. Будь лаÑка, викориÑтайте ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¼Ð¸ ноÑÑ–Ñми в режимі <b>Показати обчиÑÐ»ÐµÐ½Ð½Ñ Ñ‚Ð²ÐµÑ€Ð´Ð¸Ñ… диÑків</b>, щоб оглÑнути цей ноÑій.</translation> </message> <message> <source>This base hard disk is indirectly attached using the following differencing hard disk:</source> <comment>medium</comment> - <translation>Цей базовий жорÑткий диÑк не напрÑму під'єднано, викориÑтовуючи такі обчиÑÐ»ÐµÐ½Ð½Ñ Ð¶Ð¾Ñ€Ñткого диÑка:</translation> + <translation>Цей базовий твердий диÑк не напрÑму під'єднано, викориÑтовуючи такі обчиÑÐ»ÐµÐ½Ð½Ñ Ñ‚Ð²ÐµÑ€Ð´Ð¾Ð³Ð¾ диÑка:</translation> </message> <message numerus="yes"> <source>%n year(s)</source> @@ -7037,128 +7037,118 @@ p, li { white-space: pre-wrap; } <message> <source>Remote Desktop Server Port</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Порт Ñервера віддаленої Ñтільниці</translation> </message> <message> <source>Remote Desktop Server</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Віддалений Ñтільничний Ñервер</translation> </message> <message> <source>Disabled</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished"></translation> + <translation>Вимкнений</translation> </message> <message> <source>Choose a virtual hard disk file</source> - <translation type="unfinished"></translation> + <translation>Вибрати файл віртуального твердого диÑка</translation> </message> <message> <source>hard disk</source> - <translation type="unfinished">жорÑткий диÑк</translation> + <translation>твердий диÑк</translation> </message> <message> <source>Choose a virtual CD/DVD disk file</source> - <translation type="unfinished"></translation> + <translation>Вибрати файл віртуально диÑка CD/DVD</translation> </message> <message> <source>CD/DVD-ROM disk</source> - <translation type="unfinished"></translation> + <translation>ДиÑк CD/DVD</translation> </message> <message> <source>Choose a virtual floppy disk file</source> - <translation type="unfinished"></translation> + <translation>Вибрати файл віртуальної диÑкети</translation> </message> <message> <source>floppy disk</source> - <translation type="unfinished"></translation> + <translation>диÑкета</translation> </message> <message> <source>All %1 images (%2)</source> - <translation type="unfinished"></translation> + <translation>УÑÑ– образи %1 (%2)</translation> </message> <message> <source>All files (*)</source> - <translation type="unfinished">УÑÑ– файли (*)</translation> + <translation>УÑÑ– файли (*)</translation> </message> <message> <source>Fault Tolerant Syncing</source> <comment>MachineState</comment> - <translation type="unfinished"></translation> + <translation>Безвідмовна ÑинхронізаціÑ</translation> </message> <message> <source>Unlocked</source> <comment>SessionState</comment> - <translation type="unfinished"></translation> + <translation>Розблоковано</translation> </message> <message> <source>Locked</source> <comment>SessionState</comment> - <translation type="unfinished"></translation> + <translation>Заблоковано</translation> </message> <message> <source>Unlocking</source> <comment>SessionState</comment> - <translation type="unfinished"></translation> + <translation>РозблокуваннÑ</translation> </message> <message> <source>Null</source> <comment>AuthType</comment> - <translation type="unfinished">ВідÑÑƒÑ‚Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ</translation> + <translation>Ðема інформації</translation> </message> <message> <source>External</source> <comment>AuthType</comment> - <translation type="unfinished">ЗовнішнÑ</translation> + <translation>ЗовнішнÑ</translation> </message> <message> <source>Guest</source> <comment>AuthType</comment> - <translation type="unfinished">ГіÑÑ‚ÑŒ</translation> + <translation>ГіÑÑ‚ÑŒ</translation> </message> <message> <source>Intel HD Audio</source> <comment>AudioControllerType</comment> - <translation type="unfinished"></translation> + <translation>Intel HD Audio</translation> </message> <message> <source>UDP</source> <comment>NATProtocolType</comment> - <translation type="unfinished"></translation> + <translation>UDP</translation> </message> <message> <source>TCP</source> <comment>NATProtocolType</comment> - <translation type="unfinished"></translation> + <translation>TCP</translation> </message> <message> <source>PIIX3</source> <comment>ChipsetType</comment> - <translation type="unfinished">PIIX3</translation> + <translation>PIIX3</translation> </message> <message> <source>ICH9</source> <comment>ChipsetType</comment> - <translation type="unfinished">ICH9</translation> + <translation>ICH9</translation> </message> <message> <source>and</source> - <translation type="unfinished"></translation> + <translation>Ñ–</translation> </message> <message> <source>MB</source> <comment>size suffix MBytes=1024KBytes</comment> - <translation type="unfinished">МБ</translation> - </message> - <message> - <source>Readonly</source> - <comment>DiskType</comment> - <translation type="unfinished"></translation> - </message> - <message> - <source>Multi-attach</source> - <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>МБ</translation> </message> </context> <context> @@ -7346,7 +7336,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Select a hard disk image file</source> - <translation>Вибрати файл образа жорÑткого диÑка</translation> + <translation>Вибрати файл образа твердого диÑка</translation> </message> <message> <source>CD/DVD-ROM images (*.iso);;All files (*)</source> @@ -7379,7 +7369,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Hard &Disks</source> - <translation>&ЖорÑткі диÑки</translation> + <translation>&Тверді диÑки</translation> </message> <message> <source>Name</source> @@ -7422,19 +7412,19 @@ p, li { white-space: pre-wrap; } </message> <message> <source>CD/DVD-ROM disk</source> - <translation type="unfinished"></translation> + <translation>ДиÑк CD/DVD</translation> </message> <message> <source>hard disk</source> - <translation type="unfinished">жорÑткий диÑк</translation> + <translation>твердий диÑк</translation> </message> <message> <source>floppy disk</source> - <translation type="unfinished"></translation> + <translation>диÑкета</translation> </message> <message> <source>All %1 images (%2)</source> - <translation type="unfinished"></translation> + <translation>УÑÑ– образи %1 (%2)</translation> </message> </context> <context> @@ -7445,7 +7435,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Exit Full Screen or Seamless Mode</source> - <translation>Вийти з повноекранного або цілокроєного режиму</translation> + <translation>Вийти з повноекранного або ціловикроєного режиму</translation> </message> <message> <source>Close VM</source> @@ -7453,7 +7443,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Minimize Window</source> - <translation type="unfinished"></translation> + <translation>Зменшити вікно</translation> </message> </context> <context> @@ -7753,11 +7743,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Could not find a language file for the language <b>%1</b> in the directory <b><nobr>%2</nobr></b>.</p><p>The language will be temporarily reset to the system default language. Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source> - <translation><p>Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ мовні файли Ð´Ð»Ñ Ð¼Ð¾Ð²Ð¸ <b>%1</b> у теці <b><nobr>%2</nobr></b>.</p><p>ТимчаÑово буде вÑтановлена типова мова. Будь лаÑка, перейдіть у діалог <b>ÐалаштуваннÑ</b>, Ñкий можна відкрити з меню <b>Файл</b> головного вікна VirtualBox, Ñ– виберіть один з Ñ–Ñнуючих мов на Ñторінці <b>Мова</b>.</p></translation> + <translation><p>Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ мовні файли Ð´Ð»Ñ Ð¼Ð¾Ð²Ð¸ <b>%1</b> у теці <b><nobr>%2</nobr></b>.</p><p>ТимчаÑово буде вÑтановлена типова мова. Будь лаÑка, перейдіть у діалог <b>ÐалаштуваннÑ</b>, Ñкий можна відкрити з меню <b>Файл</b> головного вікна VirtualBox, Ñ– виберіть один з наÑвних мов на Ñторінці <b>Мова</b>.</p></translation> </message> <message> <source><p>Could not load the language file <b><nobr>%1</nobr></b>. <p>The language will be temporarily reset to English (built-in). Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source> - <translation><p>Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл мови <b><nobr>%1</nobr></b>. <p>ТимчаÑово буде вÑтановлена англійÑька мова (вбудована). Будь лаÑка, перейдіть у діалог <b>ÐалаштуваннÑ</b>, Ñкий можна відкрити з меню <b>Файл</b> головного вікна VirtualBox, Ñ– виберіть один з Ñ–Ñнуючих мов на Ñторінці <b>Мова</b>.</p></translation> + <translation><p>Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл мови <b><nobr>%1</nobr></b>. <p>ТимчаÑово буде вÑтановлена англійÑька мова (вбудована). Будь лаÑка, перейдіть у діалог <b>ÐалаштуваннÑ</b>, Ñкий можна відкрити з меню <b>Файл</b> головного вікна VirtualBox, Ñ– виберіть один з наÑвних мов на Ñторінці <b>Мова</b>.</p></translation> </message> <message> <source><p>The VirtualBox Guest Additions installed in the Guest OS are too old: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) will most likely stop working properly.</p><p>Please update the Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source> @@ -7801,7 +7791,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>You didn't attach a hard disk to the new virtual machine. The machine will not be able to boot unless you attach a hard disk with a guest operating system or some other bootable media to it later using the machine settings dialog or the First Run Wizard.</p><p>Do you wish to continue?</p></source> - <translation><p>Ви не під'єднали жорÑткий диÑк до нової віртуальної машини. Машина не зможе завантажитиÑÑŒ, Ñкщо ви не під'єднаєте жорÑткий диÑк з гоÑтьовою операційною ÑиÑтемою або ÑкіÑÑŒ інші ноÑÑ–Ñ— Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÐ¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ñ–Ð°Ð»Ð¾Ð³Ñƒ налаштувань машини або майÑтра першого запуÑку.</p><p>Ви бажаєте продовжити?</p></translation> + <translation><p>Ви не під'єднали твердий диÑк до нової віртуальної машини. Машина не зможе завантажитиÑÑŒ, Ñкщо ви не під'єднаєте твердий диÑк з гоÑтьовою операційною ÑиÑтемою або ÑкіÑÑŒ інші ноÑÑ–Ñ— Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÐ¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ñ–Ð°Ð»Ð¾Ð³Ñƒ налаштувань машини або майÑтра першого запуÑку.</p><p>Бажаєте продовжити?</p></translation> </message> <message> <source>Failed to find license files in <nobr><b>%1</b></nobr>.</source> @@ -7942,7 +7932,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Could not enter seamless mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p></source> - <translation><p>Ðе вдалоÑÑŒ ввійти в цілекроєний режим через недоÑтатній обÑÑг гоÑтьової відеопам'ÑÑ‚Ñ–.</p><p>Вам необхідно вказати мінімум <b>%1</b> відеопам'ÑÑ‚Ñ–.</p></translation> + <translation><p>Ðе вдалоÑÑŒ ввійти в ціловикроєний режим через недоÑтатній обÑÑг гоÑтьової відеопам'ÑÑ‚Ñ–.</p><p>Вам необхідно вказати мінімум <b>%1</b> відеопам'ÑÑ‚Ñ–.</p></translation> </message> <message> <source><p>Could not switch the guest display to fullscreen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to fullscreen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source> @@ -7966,11 +7956,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="obsolete"><p>Вікно віртуальної машини зараз перемкнетьÑÑ Ð² <b>повноекранний</b> режим. Ви можете повернутиÑÑŒ назад до віконного режиму в будь-Ñкий момент натиÑнувши <b>%1</b>. Майте на увазі, <i>Головна</i> клавіша зараз — <b>%2</b>.</p><p>Майте на увазі, у повноекранному режимі панель головного меню не показуєтьÑÑ. Ви можете виправити це натиÑнувши <b>Головну клавішу+Home</b>.</p></translation> + <translation><p>Вікно віртуальної машини зараз перемкнетьÑÑ Ð² <b>повноекранний</b> режим. Ви можете повернутиÑÑŒ назад до віконного режиму в будь-Ñкий момент натиÑнувши <b>%1</b>. Майте на увазі, <i>Головна</i> клавіша зараз — <b>%2</b>.</p><p>Майте на увазі, у повноекранному режимі панель головного меню не показуєтьÑÑ. Ви можете виправити це натиÑнувши <b>Головну клавішу+Home</b>.</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="obsolete"><p>Вікно віртуальної машини зараз перемкнетьÑÑ Ð² <b>цілокроєний</b> режим. Ви можете повернутиÑÑŒ назад до віконного режиму в будь-Ñкий момент натиÑнувши <b>%1</b>. Майте на увазі, <i>Головна</i> клавіша зараз — <b>%2</b>.</p><p>Майте на увазі, у цілокроєному режимі панель головного меню не показуєтьÑÑ. Ви можете виправити це натиÑнувши <b>Головну клавішу+Home</b>.</p></translation> + <translation><p>Вікно віртуальної машини зараз перемкнетьÑÑ Ð² <b>ціловикроєний</b> режим. Ви можете повернутиÑÑŒ назад до віконного режиму в будь-Ñкий момент натиÑнувши <b>%1</b>. Майте на увазі, <i>Головна</i> клавіша зараз — <b>%2</b>.</p><p>Майте на увазі, у ціловикроєному режимі панель головного меню не показуєтьÑÑ. Ви можете виправити це натиÑнувши <b>Головну клавішу+Home</b>.</p></translation> </message> <message> <source>&Contents...</source> @@ -8039,15 +8029,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Note that as this hard disk is inaccessible its storage unit cannot be deleted right now.</source> - <translation>Майте на увазі, цей жорÑткий диÑк недоÑтупний, тому його блок пам'ÑÑ‚Ñ– неможливо розпізнанати зараз.</translation> + <translation>Майте на увазі, цей твердий диÑк недоÑтупний, тому його блок пам'ÑÑ‚Ñ– неможливо розпізнанати зараз.</translation> </message> <message> <source>The next dialog will let you choose whether you also want to delete the storage unit of this hard disk or keep it for later usage.</source> - <translation>ÐаÑтупний діалог даÑÑ‚ÑŒ вам вибирати між тим, чи ви бажаєте вилучити блок пам'ÑÑ‚Ñ– цього жорÑткого диÑка, чи затримати це на пізніше.</translation> + <translation>ÐаÑтупний діалог даÑÑ‚ÑŒ вам вибирати між тим, чи ви бажаєте вилучити блок пам'ÑÑ‚Ñ– цього твердого диÑка, чи затримати це на пізніше.</translation> </message> <message> <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to add it to the list later again.</p></source> - <translation type="obsolete"><p>Майте на увазі, блок пам'ÑÑ‚Ñ– цього ноÑÑ–Ñ Ð½Ðµ будуть вилучені, таким чином буде можливо знову додати його до ÑпиÑку пізніше.</p></translation> + <translation><p>Майте на увазі, блок пам'ÑÑ‚Ñ– цього ноÑÑ–Ñ Ð½Ðµ будуть вилучені, таким чином буде можливо знову додати його до ÑпиÑку пізніше.</p></translation> </message> <message> <source>Remove</source> @@ -8056,11 +8046,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>The hard disk storage unit at location <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this location because it can be already used by another virtual hard disk.</p><p>Please specify a different location.</p></source> - <translation><p>Блок пам'ÑÑ‚Ñ– жорÑткого диÑка в <b>%1</b> вже Ñ–Ñнує. Ви не можете Ñтворити новий віртуальний жорÑткий диÑк, що викориÑтовує це міÑце, оÑкільки він вже задіÑний іншим віртуальним жорÑтким диÑком.</p><p>Будь лаÑка, вкажіть інше міÑце.</p></translation> + <translation><p>Блок пам'ÑÑ‚Ñ– твердого диÑка в <b>%1</b> вже Ñ–Ñнує. Ви не можете Ñтворити новий віртуальний твердий диÑк, що викориÑтовує це міÑце, оÑкільки він вже викориÑтовуєтьÑÑ Ñ–Ð½ÑˆÐ¸Ð¼ віртуальним твердим диÑком.</p><p>Будь лаÑка, вкажіть інше міÑце.</p></translation> </message> <message> <source><p>Do you want to delete the storage unit of the hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which makes it possible to add this hard disk to the list later again.</p></source> - <translation><p>Ви бажаєте вилучити блок пам'ÑÑ‚Ñ– жорÑткого диÑка <nobr><b>%1</b></nobr>?</p><p>Якщо ви виберете <b>Вилучити</b>, вказаний блок пам'ÑÑ‚Ñ– буде безповоротно вилучено. Цю операцію <b>неможливо ÑкаÑувати</b>.</p><p>Якщо ви виберете <b>Затримати</b>, жорÑткий диÑк буде вилучено лише зі ÑпиÑку жорÑтких диÑків, але блок пам'ÑÑ‚Ñ– залишитьÑÑ Ð½ÐµÐ´Ð¾Ñ‚Ð¾Ñ€ÐºÐ°Ð½Ð¸Ð¼, що дозволить додати цей жорÑткий диÑк до ÑпиÑку згодом.</p></translation> + <translation><p>Бажаєте вилучити блок пам'ÑÑ‚Ñ– твердого диÑка <nobr><b>%1</b></nobr>?</p><p>Якщо ви виберете <b>Вилучити</b>, вказаний блок пам'ÑÑ‚Ñ– буде безповоротно вилучено. Цю операцію <b>неможливо ÑкаÑувати</b>.</p><p>Якщо ви виберете <b>Затримати</b>, твердий диÑк буде вилучено лише зі ÑпиÑку твердих диÑків, але блок пам'ÑÑ‚Ñ– залишитьÑÑ Ð½ÐµÐ´Ð¾Ñ‚Ð¾Ñ€ÐºÐ°Ð½Ð¸Ð¼, що дозволить додати цей твердий диÑк до ÑпиÑку згодом.</p></translation> </message> <message> <source>Delete</source> @@ -8074,7 +8064,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Failed to delete the storage unit of the hard disk <b>%1</b>.</source> - <translation>Ðе вдаєтьÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ блок пам'ÑÑ‚Ñ– жорÑкого диÑка <b>%1</b>.</translation> + <translation>Ðе вдаєтьÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ блок пам'ÑÑ‚Ñ– твердого диÑка <b>%1</b>.</translation> </message> <message> <source><p>There are no unused hard disks available for the newly created attachment.</p><p>Press the <b>Create</b> button to start the <i>New Virtual Disk</i> wizard and create a new hard disk, or press the <b>Select</b> if you wish to open the <i>Virtual Media Manager</i>.</p></source> @@ -8082,7 +8072,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Failed to create the hard disk storage <nobr><b>%1</b>.</nobr></source> - <translation>Ðе вдалоÑÑ Ñтворити Ñховище на жорÑткому диÑку <nobr><b>%1</b>.</nobr></translation> + <translation>Ðе вдалоÑÑ Ñтворити Ñховище на твердому диÑку <nobr><b>%1</b>.</nobr></translation> </message> <message> <source>Failed to attach the hard disk <nobr><b>%1</b></nobr> to slot <i>%2</i> of the machine <b>%3</b>.</source> @@ -8122,7 +8112,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>One or more virtual hard disks, CD/DVD or floppy media are not currently accessible. As a result, you will not be able to operate virtual machines that use these media until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see what media are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source> - <translation><p>Один або більше віртуальних ноÑіїв жорÑтких диÑків, CD/DVD або диÑкет — недоÑтупні. У результаті, ви не можете керувати віртуальною машиною, що викориÑтовує той ноÑій, допоки ноÑій не Ñтане доÑтупним.</p><p>ÐатиÑніÑÑ‚ÑŒ <b>Перевірити</b>, щоб відкрити вікно менеджера віртуальних ноÑіїв Ñ– побачити Ñкі ноÑÑ–Ñ— недоÑтупні, або натиÑнути <b>Ігнорувати</b>, щоб уникнути цього повідомленнÑ.</p></translation> + <translation><p>Один або більше віртуальних ноÑіїв твердих диÑків, CD/DVD або диÑкет — недоÑтупні. У результаті, ви не можете керувати віртуальною машиною, що викориÑтовує той ноÑій, допоки ноÑій не Ñтане доÑтупним.</p><p>ÐатиÑніÑÑ‚ÑŒ <b>Перевірити</b>, щоб відкрити вікно менеджера віртуальних ноÑіїв Ñ– побачити Ñкі ноÑÑ–Ñ— недоÑтупні, або натиÑнути <b>Ігнорувати</b>, щоб уникнути цього повідомленнÑ.</p></translation> </message> <message> <source><p>Your existing VirtualBox settings files were automatically converted from the old format to a new format required by the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>More</b> if you want to get more information about what files were converted and access additional actions.</p><p>Press <b>Exit</b> to terminate the VirtualBox application without saving the results of the conversion to disk.</p></source> @@ -8188,7 +8178,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Could not access USB on the host system, because neither the USB file system (usbfs) nor the DBus and hal services are currently available. If you wish to use host USB devices inside guest systems, you must correct this and restart VirtualBox.</source> - <translation>Ðема доÑтупу до USB на головній операційній ÑиÑтемі, бо ані файлова ÑиÑтема USB (usbfs), ані DBus Ñ– Ñлужби hal зараз недоÑтуні. Якщо ви бажаєте викориÑтовувати головний приÑтрій USB вÑередині гоÑтьової операційної ÑиÑтеми, вам потрібно виправити це Ñ– перезавантажити VirtualBox.</translation> + <translation>Ðема доÑтупу до USB на головній операційній ÑиÑтемі, бо ані файлова ÑиÑтема USB (usbfs), ані DBus Ñ– Ñлужби hal зараз недоÑтупні. Якщо ви бажаєте викориÑтовувати головний приÑтрій USB вÑередині гоÑтьової операційної ÑиÑтеми, вам потрібно виправити це Ñ– перезавантажити VirtualBox.</translation> </message> <message> <source>You are trying to shut down the guest with the ACPI power button. This is currently not possible because the guest does not support software shutdown.</source> @@ -8237,7 +8227,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Deleting this host-only network will remove the host-only interface this network is based on. Do you want to remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> this interface may be in use by one or more virtual network adapters belonging to one of your VMs. After it is removed, these adapters will no longer be usable until you correct their settings by either choosing a different interface name or a different adapter attachment type.</p></source> - <translation><p>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— лише головної мережі Ñпричинить Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ головного інтерфейÑа цієї мережі, Ñкий базуєтьÑÑ Ð½Ð° ній. Ви бажаєте вилучити (лише головної мережі) Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ <nobr><b>%1</b>?</nobr></p><p><b>Майте на увазі:</b> цей Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ викриÑтовувати одним або більше адаперами віртуальної мережі, Ñка належить до ваших віртуальних мереж. ПіÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ він вилучитьÑÑ, Ñ‚Ñ– адаптери більше не викориÑтовуватимутьÑÑ, допоки ви не зміните їхні налаштуваннÑ, вибравши іншу назву інтерфейÑа або інший тип під'Ñ”Ð½Ð°Ð½Ð½Ñ Ð°Ð´Ð°Ð¿Ñ‚ÐµÑ€Ð°.</p></translation> + <translation><p>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— лише головної мережі Ñпричинить Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ головного інтерфейÑу цієї мережі, Ñкий базуєтьÑÑ Ð½Ð° ній. Ви бажаєте вилучити (лише головної мережі) Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ <nobr><b>%1</b>?</nobr></p><p><b>Майте на увазі:</b> цей Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ викориÑтовувати одним або більше адаптерами віртуальної мережі, Ñка належить до ваших віртуальних мереж. ПіÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ він вилучитьÑÑ, Ñ‚Ñ– адаптери більше не викориÑтовуватимутьÑÑ, допоки ви не зміните їхні налаштуваннÑ, вибравши іншу назву інтерфейÑу або інший тип під'Ñ”Ð½Ð°Ð½Ð½Ñ Ð°Ð´Ð°Ð¿Ñ‚ÐµÑ€Ð°.</p></translation> </message> <message> <source>Failed to create the host-only network interface.</source> @@ -8297,7 +8287,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>You are running an EXPERIMENTAL build of VirtualBox. This version is not suitable for production use.</source> - <translation>Ви запуÑтили екÑперементальну збірку VirtualBox. Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ Ð½Ðµ придатна Ð´Ð»Ñ Ð¿Ð¾Ð²ÑÑкденного викориÑтаннÑ.</translation> + <translation>Ви запуÑтили екÑпериментальну збірку VirtualBox. Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ Ð½Ðµ придатна Ð´Ð»Ñ Ð¿Ð¾Ð²ÑÑкденного викориÑтаннÑ.</translation> </message> <message> <source><p>Are you sure you want to restore snapshot <b>%1</b>? This will cause you to lose your current machine state, which cannot be recovered.</p></source> @@ -8363,7 +8353,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source> Would you like to force unmounting of this medium?</source> - <translation> Бажаєте впримуÑово демонтувати цей ноÑій?</translation> + <translation> Бажаєте примуÑово демонтувати цей ноÑій?</translation> </message> <message> <source>Force Unmount</source> @@ -8375,7 +8365,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Could not insert the VirtualBox Guest Additions installer CD image into the virtual machine <b>%1</b>, as the machine has no CD/DVD-ROM drives. Please add a drive using the storage page of the virtual machine settings dialog.</p></source> - <translation><p>Ðеможливо вÑтавити образ CD вÑтановлювача гоÑтьових доповнень VirtualBox у віртуальну машину <b>%1</b>, бо машина не має приÑÑ‚Ñ€Ð¾Ñ CD/DVD-ROM. Будь лаÑка, додайте цей приÑтрій через діалог налаштувань.</p></translation> + <translation><p>Ðеможливо вÑтавити образ CD вÑтановлювача гоÑтьових доповнень VirtualBox у віртуальну машину <b>%1</b>, бо машина не має приÑтрою CD/DVD-ROM. Будь лаÑка, додайте цей приÑтрій через діалог налаштувань.</p></translation> </message> <message> <source>E&xit</source> @@ -8389,7 +8379,7 @@ p, li { white-space: pre-wrap; } <message> <source>hard disk</source> <comment>failed to mount ...</comment> - <translation>жорÑткий диÑк</translation> + <translation>твердий диÑк</translation> </message> <message> <source>CD/DVD</source> @@ -8440,7 +8430,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Deleting the snapshot %1 will temporarily need more disk space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of disk space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source> - <translation><p>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ñ€Ñ–Ð·Ñƒ %1 потребувати більше міÑÑ†Ñ Ð´Ð¸Ñка на деÑкий чаÑ. У найгішому випадку розмір образу %2 може ÑÑгнути %3, утім на файловій ÑиÑтемі вільно лише %4.</p><p>Брак міÑÑ†Ñ Ð¿Ñ€Ð¾Ñ‚Ñгом об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ викривити образ Ñ– Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини, наприклад, втрата віртуальної машини Ñ– Ñ—Ñ— даних.</p><p>Ви можете й надалі вилучати зріз на Ñвій ризик.</p></translation> + <translation><p>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ñ€Ñ–Ð·Ñƒ %1 потребувати більше міÑÑ†Ñ Ð´Ð¸Ñка на деÑкий чаÑ. У найгіршому випадку розмір образу %2 може ÑÑгнути %3, утім на файловій ÑиÑтемі вільно лише %4.</p><p>Брак міÑÑ†Ñ Ð¿Ñ€Ð¾Ñ‚Ñгом об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ викривити образ Ñ– Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— машини, наприклад, втрата віртуальної машини Ñ– Ñ—Ñ— даних.</p><p>Ви можете й надалі вилучати зріз на Ñвій ризик.</p></translation> </message> <message> <source><p>Could not change the guest screen to this host screen due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p></source> @@ -8456,7 +8446,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Can not switch the guest display to seamless mode. You have more virtual screens configured than physical screens are attached to your host.</p><p>Please either lower the virtual screens in your VM configuration or attach additional screens to your host.</p></source> - <translation><p>Ðеможливо перемкнути гоÑтьовий екран до цілокроєного режиму. У Ð²Ð°Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾ більше віртуальних екранів, аніж фізично під'єднано.</p><p>Будь лаÑка, вкажіть менше екранів у налаштуваннÑÑ… віртуальної машини або під'єднайте більше додаткових до головної ÑиÑтеми.</p></translation> + <translation><p>Ðеможливо перемкнути гоÑтьовий екран до ціловикроєного режиму. У Ð²Ð°Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾ більше віртуальних екранів, аніж фізично під'єднано.</p><p>Будь лаÑка, вкажіть менше екранів у налаштуваннÑÑ… віртуальної машини або під'єднайте більше додаткових до головної ÑиÑтеми.</p></translation> </message> <message> <source><p>Are you sure you want to delete the CD/DVD-ROM device?</p><p>You will not be able to mount any CDs or ISO images or install the Guest Additions without it!</p></source> @@ -8469,7 +8459,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><p>Could not find the VirtualBox User Manual <nobr><b>%1</b>.</nobr></p><p>Do you wish to download this file from the Internet?</p></source> - <translation><p>Ðеможливо знайти поÑібник коритувача VirtualBox <nobr><b>%1</b>.</nobr></p><p>Бажаєте звантажити його з інтернету?</p></translation> + <translation><p>Ðеможливо знайти поÑібник кориÑтувача VirtualBox <nobr><b>%1</b>.</nobr></p><p>Бажаєте звантажити його з інтернету?</p></translation> </message> <message> <source><p>Are you sure you want to download the VirtualBox User Manual from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source> @@ -8489,200 +8479,135 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Failed to open virtual machine located in %1.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ відкрити віртуальну машину, Ñка знаходитьÑÑ Ð² %1.</translation> </message> <message> <source>Failed to add virtual machine <b>%1</b> located in <i>%2</i> because its already present.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ додати віртуальну машину <b>%1</b>, Ñка знаходитьÑÑ Ð² <i>%2</i>, оÑкільки така вже наÑвна.</translation> </message> <message> <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well?</p></source> - <translation type="unfinished"></translation> + <translation><p>Ви збираєтеÑÑŒ вилучити віртуальну машину <b>%1</b> зі ÑпиÑку.</p><p>Бажаєте вилучити файли, Ñкі міÑÑ‚ÑÑ‚ÑŒ віртуальну машину, з вашого твердого диÑка також?</p></translation> </message> <message> <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well? Doing this will also remove the files containing the machine's virtual hard disks if they are not in use by another machine.</p></source> - <translation type="unfinished"></translation> + <translation><p>Ви збираєтеÑÑŒ вилучити віртуальну машину <b>%1</b> зі ÑпиÑку.</p><p>Бажаєте вилучити файли, Ñкі міÑÑ‚ÑÑ‚ÑŒ віртуальну машину, з вашого твердого диÑка також? Це Ñпричинить також Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð², Ñкі міÑÑ‚ÑÑ‚ÑŒ віртуальні тверді диÑки, Ñкщо вони не викориÑтовуєтьÑÑ Ñ–Ð½ÑˆÐ¸Ð¼Ð¸ машинами.</p></translation> </message> <message> <source>Delete all files</source> - <translation type="unfinished"></translation> + <translation>Вилучити вÑÑ– файли</translation> </message> <message> <source>Remove only</source> - <translation type="unfinished"></translation> + <translation>Вилучити лише</translation> </message> <message> <source>You are about to remove the inaccessible virtual machine <b>%1</b> from the machine list. Do you wish to proceed?</source> - <translation type="unfinished"></translation> + <translation>Ви збираєтеÑÑŒ вилучити недоÑтупну віртуальну машину <b>%1</b> зі ÑпиÑку. Продовжити?</translation> </message> <message> <source>Remove</source> - <translation type="unfinished">Вилучити</translation> + <translation>Вилучити</translation> </message> <message> <source><p>You are about to add a virtual hard disk to controller <b>%1</b>.</p><p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p></source> - <translation type="unfinished"></translation> + <translation><p>Ви збираєтеÑÑŒ додати додати віртуальний твердий диÑк до контролера <b>%1</b>.</p><p>Бажаєте Ñтворити новий, порожній файл, щоб тримати там його дані, чи вибрати наÑвний?</p></translation> </message> <message> <source>Create &new disk</source> <comment>add attachment routine</comment> - <translation type="unfinished"></translation> + <translation>Створити &новий диÑк</translation> </message> <message> <source>&Choose existing disk</source> <comment>add attachment routine</comment> - <translation type="unfinished"></translation> + <translation>&Вибрати наÑвний диÑк</translation> </message> <message> <source><p>You are about to add a new CD/DVD drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual CD/DVD disk to put in the drive or to leave it empty for now?</p></source> - <translation type="unfinished"></translation> + <translation><p>Ви збираєтеÑÑŒ додати новий ноÑій CD/DVD до контролера <b>%1</b>.</p><p>Бажаєте вибрати віртуальний диÑк CD/DVD, щоб заÑтоÑувати у ноÑÑ–Ñ—, або залишити це порожнім поки що?</p></translation> </message> <message> <source>&Choose disk</source> <comment>add attachment routine</comment> - <translation type="unfinished"></translation> + <translation>&Вибрати диÑк</translation> </message> <message> <source>Leave &empty</source> <comment>add attachment routine</comment> - <translation type="unfinished"></translation> + <translation>&Залишити порожнім</translation> </message> <message> <source><p>You are about to add a new floppy drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual floppy disk to put in the drive or to leave it empty for now?</p></source> - <translation type="unfinished"></translation> + <translation><p>Ви збираєтеÑÑŒ додати нову ноÑій диÑкет до контролера <b>%1</b>.</p><p>Бажаєте вибрати віртуальну диÑкету, щоб заÑтоÑувати у ноÑÑ–Ñ—, або залишити це порожнім поки що?</p></translation> </message> <message> <source>Failed to detach the hard disk (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ від'єднати твердий диÑк (<nobr><b>%1</b></nobr>) із гнізда <i>%2</i> машини <b>%3</b>.</translation> </message> <message> <source>Failed to detach the CD/DVD device (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ від'єднати ноÑій CD/DVD (<nobr><b>%1</b></nobr>) із гнізда <i>%2</i> машини <b>%3</b>.</translation> </message> <message> <source>Failed to detach the floppy device (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ від'єднати ноÑій диÑкет (<nobr><b>%1</b></nobr>) із гнізда <i>%2</i> машини <b>%3</b>.</translation> + </message> + <message> + <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Machine</b> menu. If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p></source> + <translation><p>ГоÑтьові Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ VirtualBox не з'ÑвилиÑÑŒ доÑтупними на віртуальній машині, Ñ– без них неможливо викориÑтовувати Ñпільні теки. Щоб викориÑтовувати Ñ—Ñ… уÑередині віртуальної машини, будь лаÑка, вÑтановіть гоÑтьові доповненнÑ, Ñкщо вони вÑе ще не вÑтановлені, або перевÑтановіть, Ñкщо вони працюють некоректно, вибравши <b>Ð’Ñтановити гоÑтьові доповненнÑ</b> з меню <b>Машина</b>. Якщо вони вÑтановлені, але машина поки що неповніÑÑ‚ÑŽ запущена, то потрібно зачекати поки вона запуÑтитьÑÑ Ð´Ð¾ кінцÑ.</p></translation> </message> <message numerus="yes"> <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation type="unfinished"> - <numerusform></numerusform> - <numerusform></numerusform> - <numerusform></numerusform> + <translation> + <numerusform><p>Віртуальна машина <b>%1</b> знаходитьÑÑ Ñƒ збереженому Ñтані.</p><p>Якщо ви покинете цей Ñтан, то екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸ буде відкинуто. Майте на увазі, наÑвну машину не змінено.</p></numerusform> + <numerusform><p>Віртуальні машини <b>%1</b> знаходÑÑ‚ÑŒÑÑ Ñƒ збереженому Ñтані.</p><p>Якщо ви покинете цей Ñтан, то екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÑˆÐ¸Ð½ буде відкинуто. Майте на увазі, наÑвні машини не змінено.</p></numerusform> + <numerusform><p>Віртуальні машини <b>%1</b> знаходÑÑ‚ÑŒÑÑ Ñƒ збереженому Ñтані.</p><p>Якщо ви покинете цей Ñтан, то екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÑˆÐ¸Ð½ буде відкинуто. Майте на увазі, наÑвні машини не змінено.</p></numerusform> </translation> </message> <message> <source>Failed to update Guest Additions. The Guest Additions installation image will be mounted to provide a manual installation.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ оновити гоÑтьові доповненнÑ. УÑтановчий образ гоÑтьових доповнень буде змонтовано, щоб забезпечити ручне вÑтановленнÑ.</translation> </message> <message> <source>Failed to install the Extension Pack <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ уÑтановити пакунок Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ <b>%1</b>.</translation> </message> <message> <source>Failed to uninstall the Extension Pack <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ вилучити пакунок Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ <b>%1</b>.</translation> + </message> + <message> + <source>You are about to remove the Extension Pack <b>%1</b>. Are you sure you want to do that?</source> + <translation>Ви збираєтеÑÑŒ вилучити пакунок Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ <b>%1</b>. Упевнені, що бажаєте це зробити?</translation> </message> <message> <source>&Remove</source> - <translation type="unfinished">&Вилучити</translation> + <translation>&Вилучити</translation> </message> <message> <source>The current port forwarding rules are not valid. None of the host or guest port values may be set to zero.</source> - <translation type="unfinished"></translation> + <translation>Теперішні правила переадреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð² неправильні. Жодне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð³Ð¾Ñтьового чи головного порту не може бути нульовим.</translation> </message> <message> <source><p>There are unsaved changes in the port forwarding configuration.</p><p>If you proceed your changes will be discarded.</p></source> - <translation type="unfinished"></translation> + <translation><p>У налаштуваннÑÑ… порту переадреÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ñ– зміни.</p><p>Якщо ви продовжите, зміни буде відкинуто.</p></translation> </message> <message> <source>Sorry, some generic error happens.</source> - <translation type="unfinished"></translation> + <translation>Вибачте, трапилаÑÑŒ деÑка випадкова помилка.</translation> </message> <message> <source>Failed to attach the hard disk (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ під'єднати твердий диÑк (<nobr><b>%1</b></nobr>) до гнізда <i>%2</i> машини <b>%3</b>.</translation> </message> <message> <source>Failed to attach the CD/DVD device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ під'єднати ноÑій CD/DVD (<nobr><b>%1</b></nobr>) до гнізда <i>%2</i> машини <b>%3</b>.</translation> </message> <message> <source>Failed to attach the floppy device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to use it later again.</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>The virtual machine window will be now switched to <b>Scale</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in scale mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Switch</source> - <comment>scale</comment> - <translation type="unfinished">Перемкнути</translation> - </message> - <message> - <source>Failed to open the Extension Pack <b>%1</b>.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>You are about to install a VirtualBox extension pack. Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Install</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>An older version of the extension pack is already installed, would you like to upgrade? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Upgrade</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>An newer version of the extension pack is already installed, would you like to downgrade? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Downgrade</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>The extension pack is already installed with the same version, would you like reinstall it? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%4</td></tr></table></p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>&Reinstall</source> - <translation type="unfinished"></translation> - </message> - <message> - <source><p>You are about to remove the VirtualBox extension pack <b>%1</b>.</p><p>Are you sure you want to proceed?</p></source> - <translation type="unfinished"></translation> - </message> - <message> - <source>The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.</source> - <translation type="unfinished"></translation> + <translation>Ðе вдалоÑÑŒ під'єднати ноÑій диÑкет (<nobr><b>%1</b></nobr>) до гнізда <i>%2</i> машини <b>%3</b>.</translation> </message> </context> <context> @@ -8955,11 +8880,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Virtual Media Manager...</source> - <translation>&ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ð½Ñ Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¼Ð¸ ÐоÑÑ–Ñми...</translation> + <translation>&ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¼Ð¸ ноÑÑ–Ñми...</translation> </message> <message> <source>Display the Virtual Media Manager dialog</source> - <translation>Показати діалог ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ноÑÑ–Ñ</translation> + <translation>Показати діалог ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ноÑÑ–Ñ</translation> </message> <message> <source>Log</source> @@ -8992,7 +8917,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> - <translation><h3>ЛаÑкаво проÑимо до VirtualBox!</h3><p>У лівій чаÑтині цього вікна показуєтьÑÑ ÑпиÑок віртуальних машин на вашому комп'ютері. Зараз ÑпиÑок порожній, оÑкільки, поки що, ви не маєте Ñтворених віртуальних машин.<img src=:/welcome.png align=right/></p><p>Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб Ñтворити нову віртуальну машину, натиÑніть <b>Створити</b> в головному меню панелі інÑтрументів , Ñкі знаходÑÑ‚ÑŒÑÑ Ð²Ð²ÐµÑ€Ñ…Ñƒ вікна.</p><p>Ви можете натиÑнути <b>%1</b>, щоб отримати миттєву довідку, або відвідайте <a href=http://www.virtualbox.org>www.virtualbox.org</a> щодо оÑтаніх новин.</p></translation> + <translation><h3>ЛаÑкаво проÑимо до VirtualBox!</h3><p>У лівій чаÑтині цього вікна показуєтьÑÑ ÑпиÑок віртуальних машин на вашому комп'ютері. Зараз ÑпиÑок порожній, оÑкільки, поки що, ви не маєте Ñтворених віртуальних машин.<img src=:/welcome.png align=right/></p><p>Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб Ñтворити нову віртуальну машину, натиÑніть <b>Створити</b> в головному меню панелі інÑтрументів , Ñкі знаходÑÑ‚ÑŒÑÑ Ð²Ð²ÐµÑ€Ñ…Ñƒ вікна.</p><p>Ви можете натиÑнути <b>%1</b>, щоб отримати миттєву довідку, або відвідайте <a href=http://www.virtualbox.org>www.virtualbox.org</a> щодо оÑтанніх новин.</p></translation> </message> <message> <source>&File</source> @@ -9006,79 +8931,79 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Select a virtual machine file</source> - <translation type="unfinished"></translation> + <translation>Вибрати файл віртуальної машини</translation> </message> <message> <source>Virtual machine files (%1)</source> - <translation type="unfinished"></translation> + <translation>Файли віртуальної машини (%1)</translation> </message> <message> <source>Manager</source> - <translation type="unfinished"></translation> + <translation>КеруваннÑ</translation> </message> <message> <source>&Add...</source> - <translation type="unfinished">&Додати...</translation> + <translation>&Додати...</translation> </message> <message> <source>Add an existing virtual machine</source> - <translation type="unfinished"></translation> + <translation>Додати наÑвну віртуальну машину</translation> </message> <message> <source>&Remove</source> - <translation type="unfinished">&Вилучити</translation> + <translation>&Вилучити</translation> </message> <message> <source>Remove the selected virtual machine</source> - <translation type="unfinished"></translation> + <translation>Вилучити вибрану віртуальну машину</translation> </message> <message> <source>Show in Finder</source> - <translation type="unfinished"></translation> + <translation>Показати в пошуку</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in Finder.</source> - <translation type="unfinished"></translation> + <translation>Показати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° віртуальної машини в пошуку.</translation> </message> <message> <source>Create Alias on Desktop</source> - <translation type="unfinished"></translation> + <translation>Створити назву на Ñтільниці</translation> </message> <message> <source>Creates an Alias file to the VirtualBox Machine Definition file on your Desktop.</source> - <translation type="unfinished"></translation> + <translation>Створює назву файла Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° віртуальної машини на Ñтільниці.</translation> </message> <message> <source>Show in Explorer</source> - <translation type="unfinished"></translation> + <translation>Показати в переглÑдачі</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in Explorer.</source> - <translation type="unfinished"></translation> + <translation>Показати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° віртуальної машин у переглÑдачі.</translation> </message> <message> <source>Create Shortcut on Desktop</source> - <translation type="unfinished"></translation> + <translation>Створити ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð½Ð° Ñтільниці</translation> </message> <message> <source>Creates an Shortcut file to the VirtualBox Machine Definition file on your Desktop.</source> - <translation type="unfinished"></translation> + <translation>Створює файл ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° віртуальної машин на Ñтільниці.</translation> </message> <message> <source>Show in File Manager</source> - <translation type="unfinished"></translation> + <translation>Показати у файловому менеджері</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in the File Manager</source> - <translation type="unfinished"></translation> + <translation>Показати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° віртуальної машин у файловому менеджері</translation> </message> <message> <source>Show Toolbar</source> - <translation type="unfinished"></translation> + <translation>Показати панель інÑтрументів</translation> </message> <message> <source>Show Statusbar</source> - <translation type="unfinished"></translation> + <translation>Показати панель Ñтану</translation> </message> </context> <context> @@ -9132,7 +9057,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Click to enlarge the screenshot.</source> - <translation>кілкніть, щоб збільшити зріз.</translation> + <translation>клікніть, щоб збільшити зріз.</translation> </message> <message> <source>&Name:</source> @@ -9645,7 +9570,7 @@ p, li { white-space: pre-wrap; } <message> <source>Not Available</source> <comment>details report (VRDE server port)</comment> - <translation type="unfinished">ÐедоÑтупний</translation> + <translation>ÐедоÑтупний</translation> </message> </context> <context> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts index 27b777b1a..aacfe1b43 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts @@ -922,7 +922,7 @@ </message> <message> <source>Please specify the target for the OVF export. You can choose between a local file system export, uploading the OVF to the Sun Cloud service or an S3 storage server.</source> - <translation>請指定 OVF 匯出的目標。 您å¯ä»¥é¸æ“‡æœ¬æ©Ÿæª”案系統匯出ã€ä¸Šå‚³ OVF 到 Sun Cloud æœå‹™æˆ– S3 儲å˜ä¼ºæœå™¨ã€‚</translation> + <translation>請指定 OVF 匯出的目標。 您å¯ä»¥é¸æ“‡æœ¬æ©Ÿæª”案系統匯出ã€ä¸Šå‚³ OVF 到 Sun Cloud æœå‹™æˆ– S3 å˜æ”¾ä¼ºæœå™¨ã€‚</translation> </message> <message> <source>&Local Filesystem </source> @@ -1586,7 +1586,7 @@ </message> <message> <source>All new releases and &pre-releases</source> - <translation>所有新的發佈與é 先發佈(&P)</translation> + <translation>所有新的發佈和é 先發佈(&P)</translation> </message> </context> <context> @@ -1785,22 +1785,6 @@ <translation>å¿«ç…§ %1</translation> </message> <message> - <source>More CD/DVD Images...</source> - <translation type="obsolete">更多 CD/DVD æ˜ åƒ...</translation> - </message> - <message> - <source>Unmount CD/DVD Device</source> - <translation type="obsolete">å¸è¼‰ CD/DVD è£ç½®</translation> - </message> - <message> - <source>More Floppy Images...</source> - <translation type="obsolete">æ›´å¤šè»Ÿç¢Ÿæ˜ åƒ...</translation> - </message> - <message> - <source>Unmount Floppy Device</source> - <translation type="obsolete">å¸è¼‰è»Ÿç¢Ÿè£ç½®</translation> - </message> - <message> <source>No CD/DVD Devices Attached</source> <translation>æœªé™„åŠ CD/DVD è£ç½®</translation> </message> @@ -3325,7 +3309,7 @@ </message> <message> <source><p>Select a virtual hard disk to be used as the boot hard disk of the virtual machine. You can either create a new hard disk or select an existing one from the drop-down list or by pressing corresponding button (to invoke file-open window).</p><p>If you need a more complicated hard disk setup, you can also skip this step and attach hard disks later using the VM Settings dialog.</p></source> - <translation><p>é¸å–虛擬硬碟以用來作為虛擬機器的開機硬碟。 您å¯ä»¥å»ºç«‹æ–°çš„硬碟或從下拉清單é¸å–ç¾æœ‰çš„一個或按下相å°çš„按鈕 (調用 [開啟檔案] 視窗)。</p><p>如果您需è¦æ›´è¤‡é›œçš„硬碟è¨å®šï¼Œæ‚¨ä¹Ÿå¯ä»¥ç•¥éŽé€™å€‹æ¥é©Ÿä¸¦ç¨å€™ä½¿ç”¨ VM è¨å®šå°è©±æ–¹å¡Šé™„åŠ ç¡¬ç¢Ÿã€‚</p></translation> + <translation><p>é¸å–用來作為虛擬機器開機硬碟的虛擬硬碟。 您å¯ä»¥å»ºç«‹æ–°çš„硬碟或從下拉清單é¸å–ç¾æœ‰çš„一個或按下相應的按鈕 (調用 [開啟檔案] 視窗)。</p><p>如果您需è¦æ›´è¤‡é›œçš„硬碟è¨å®šï¼Œæ‚¨ä¹Ÿå¯ä»¥ç•¥éŽé€™å€‹æ¥é©Ÿä¸¦ç¨å¾Œä½¿ç”¨ VM è¨å®šå°è©±æ–¹å¡Šé™„åŠ ç¡¬ç¢Ÿã€‚</p></translation> </message> <message> <source>Choose a virtual hard disk file...</source> @@ -3442,7 +3426,7 @@ </message> <message> <source>On the <b>%1</b> page, %2</source> - <translation>æ–¼ <b>%1</b> é , %2</translation> + <translation>在<b>%1</b>é ,%2</translation> </message> <message> <source>Invalid settings detected</source> @@ -4721,7 +4705,7 @@ <message numerus="yes"> <source>%n month(s)</source> <translation> - <numerusform>%n 個月</numerusform> + <numerusform>%n 月</numerusform> </translation> </message> <message numerus="yes"> @@ -4955,12 +4939,12 @@ <message> <source>Readonly</source> <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>唯讀</translation> </message> <message> <source>Multi-attach</source> <comment>DiskType</comment> - <translation type="unfinished"></translation> + <translation>多é‡é™„åŠ </translation> </message> </context> <context> @@ -5612,14 +5596,6 @@ <translation><p>è™›æ“¬æ©Ÿå™¨å›žå ±å®¢é«”ä½œæ¥ç³»çµ±æ”¯æ´<b>æ»‘é¼ æŒ‡æ¨™æ•´åˆ</b>。 這æ„味著您ä¸éœ€è¦åœ¨å®¢é«”作æ¥ç³»çµ±ä¸ä½¿ç”¨<i>æ“·å–</i>æ»‘é¼ æŒ‡æ¨™ä¾†ä½¿ç”¨å®ƒ -- ç•¶æ»‘é¼ æŒ‡æ¨™ä½æ–¼è™›æ“¬æ©Ÿå™¨çš„é¡¯ç¤ºä¸Šæ–¹æ™‚ï¼Œæ‰€æœ‰æ‚¨åŸ·è¡Œçš„æ»‘é¼ å‹•ä½œå°‡ç›´æŽ¥å‚³é€åˆ°å®¢é«”作æ¥ç³»çµ±ã€‚ 如果目å‰å·²æ“·å–æ»‘é¼ ï¼Œå°‡æœƒè‡ªå‹•å–消擷å–。</p><p>ç‹€æ…‹åˆ—çš„æ»‘é¼ åœ–ç¤ºå°‡çœ‹èµ·ä¾†åƒ&nbsp;< img src=:/mouse_seamless_16px.png/ >&nbsp;以通知您客體作æ¥ç³»çµ±æ”¯æ´æ»‘é¼ æŒ‡æ¨™æ•´åˆä¸¦ä¸”ç›®å‰å·²é–‹å•Ÿã€‚ </p><p><b>注æ„</b>: æŸäº›æ‡‰ç”¨ç¨‹å¼å¯èƒ½åœ¨æ»‘é¼ æŒ‡æ¨™æ•´åˆæ¨¡å¼ä¸‹çš„行為ä¸æ£ç¢ºã€‚ 您å¯ä»¥å¾žåŠŸèƒ½è¡¨åˆ—ä¸é¸å–相å°æ‡‰çš„動作於目å‰å·¥ä½œéšŽæ®µä¸€å¾‹åœç”¨å®ƒ (與å†æ¬¡å•Ÿç”¨) 。</p></translation> </message> <message> - <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="obsolete"><p>將切æ›è™›æ“¬æ©Ÿå™¨è¦–窗到<b>全螢幕</b>模å¼ã€‚您å¯ä»¥éš¨æ™‚按下 [<b>%1</b>] 以回到視窗模å¼ã€‚請注æ„,目å‰çš„ <i>Host</i> éµå·²å®šç¾©ç‚º <b>%2</b>。</p><p>請注æ„,主功能表列在全螢幕模å¼ä¸æ˜¯éš±è—的。您å¯ä»¥æŒ‰ä¸‹ [<b>Host+Home</b>] 來å˜å–它。</p></translation> - </message> - <message> - <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>. Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="obsolete"><p>將切æ›è™›æ“¬æ©Ÿå™¨è¦–窗到<b>無縫</b>模å¼ã€‚ 您å¯ä»¥éš¨æ™‚按下 [<b>%1</b>] 以回到視窗模å¼ã€‚請注æ„,目å‰çš„ <i>Host</i> éµå·²å®šç¾©ç‚º <b>%2</b>。</p><p>請注æ„,主功能表列在無縫模å¼ä¸æ˜¯éš±è—的。您å¯ä»¥æŒ‰ä¸‹ [<b>Host+Home</b>] 來å˜å–它。</p></translation> - </message> - <message> <source>&Contents...</source> <translation>內容(&C)...</translation> </message> @@ -5693,10 +5669,6 @@ <translation>下一個å°è©±æ–¹å¡Šæœƒè®“您é¸æ“‡æ˜¯å¦ä¹Ÿè¦åˆªé™¤é€™å€‹ç¡¬ç¢Ÿå˜æ”¾å–®å…ƒæˆ–ä¿ç•™å®ƒä¾›ä»¥å¾Œä½¿ç”¨ã€‚</translation> </message> <message> - <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to add it to the list later again.</p></source> - <translation type="obsolete"><p>請注æ„,這個媒體的å˜æ”¾å–®å…ƒå°‡ä¸æœƒåˆªé™¤ä¸”這將有å¯èƒ½ç¨å¾Œå†æ¬¡å°‡å…¶åŠ 入到清單ä¸ã€‚</p></translation> - </message> - <message> <source>Remove</source> <comment>medium</comment> <translation>移除</translation> @@ -6056,7 +6028,7 @@ <message> <source>Leave &empty</source> <comment>add attachment routine</comment> - <translation>ä¿ç•™ç©ºç™½(&E)</translation> + <translation>ä¿æŒç‚ºç©º(&E)</translation> </message> <message> <source><p>You are about to add a new floppy drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual floppy disk to put in the drive or to leave it empty for now?</p></source> @@ -6074,10 +6046,6 @@ <source>Failed to detach the floppy device (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source> <translation>從機器 <b>%3</b> çš„æ’槽 <i>%2</i> 分離軟碟è£ç½® (<nobr><b>%1</b></nobr>) 失敗。</translation> </message> - <message> - <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Machine</b> menu. If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p></source> - <translation type="obsolete"><p>VirtualBox Guest Additions 似乎在這個虛擬機器ä¸å¯ä½¿ç”¨ï¼Œå› æ¤å…±ç”¨è³‡æ–™å¤¾ç„¡æ³•ä½¿ç”¨ã€‚ è‹¥è¦åœ¨è™›æ“¬æ©Ÿå™¨ä¸ä½¿ç”¨å…±ç”¨è³‡æ–™å¤¾ï¼Œè«‹å®‰è£ Guest Additions 如果是未安è£ï¼Œæˆ–é‡æ–°å®‰è£å¦‚果是未æ£å¸¸å‹•ä½œï¼Œå¾ž<b>機器</b>功能表é¸å–<b>å®‰è£ Guest Additions</b>。 如果已安è£ä½†æ©Ÿå™¨å°šæœªå®Œå…¨å•Ÿå‹•ï¼Œå‰‡å…±ç”¨è³‡æ–™å¤¾å°‡åœ¨å•Ÿå‹•å¾Œå¯ä»¥ä½¿ç”¨ã€‚</p></translation> - </message> <message numerus="yes"> <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> <translation> @@ -6097,10 +6065,6 @@ <translation>解除安è£æ“´å……包 <b>%1</b> 失敗。</translation> </message> <message> - <source>You are about to remove the Extension Pack <b>%1</b>. Are you sure you want to do that?</source> - <translation type="obsolete">您å³å°‡ç§»é™¤æ“´å……包 <b>%1</b>,您確定嗎?</translation> - </message> - <message> <source>&Remove</source> <translation>移除(&R)</translation> </message> @@ -6130,76 +6094,76 @@ </message> <message> <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to use it later again.</p></source> - <translation type="unfinished"></translation> + <translation><p>請注æ„,這個媒體的å˜æ”¾å–®å…ƒå°‡ä¸æœƒåˆªé™¤ä¸”å¯ä»¥ç¨å¾Œå†æ¬¡ä½¿ç”¨ã€‚</p></translation> </message> <message> <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p></source> - <translation type="unfinished"></translation> + <translation><p>VirtualBox Guest Additions 似乎在這部虛擬機器ä¸å¯ä½¿ç”¨ï¼Œå› æ¤å…±ç”¨è³‡æ–™å¤¾ç„¡æ³•ä½¿ç”¨ã€‚ è‹¥è¦åœ¨è™›æ“¬æ©Ÿå™¨å…§ä½¿ç”¨å…±ç”¨è³‡æ–™å¤¾ï¼Œå¦‚果是未安è£è«‹å®‰è£ Guest Additions ,或如果是未æ£å¸¸å‹•ä½œå‰‡é‡æ–°å®‰è£ï¼Œå¾ž<b>è£ç½®</b>功能表é¸å–<b>å®‰è£ Guest Additions</b>。 如果已安è£ä½†æ©Ÿå™¨å°šæœªå®Œå…¨å•Ÿå‹•ï¼Œå‰‡å…±ç”¨è³‡æ–™å¤¾å°‡åœ¨å•Ÿå‹•å¾Œå¯ä»¥ä½¿ç”¨ã€‚</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>ç¾åœ¨å°‡åˆ‡æ›è™›æ“¬æ©Ÿå™¨è¦–窗到<b>全螢幕</b>模å¼ã€‚ 您å¯ä»¥éš¨æ™‚按下 [<b>%1</b>] 回到視窗模å¼ã€‚</p><p>請注æ„,<i>Host</i> éµç›®å‰å®šç¾©ç‚º <b>%2</b>。</p><p>主功能表列在全螢幕模å¼ä¸æ˜¯éš±è—的。 您å¯ä»¥æŒ‰ä¸‹ [<b>Host+Home</b>] 來å˜å–。</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Seamless</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>ç¾åœ¨å°‡åˆ‡æ›è™›æ“¬æ©Ÿå™¨è¦–窗到<b>無縫</b>模å¼ã€‚ 您å¯ä»¥éš¨æ™‚按下 [<b>%1</b>] 回到視窗模å¼ã€‚</p><p>請注æ„,<i>Host</i> éµç›®å‰å®šç¾©ç‚º <b>%2</b>。</p><p>主功能表列在無縫模å¼ä¸æ˜¯éš±è—的。 您å¯ä»¥æŒ‰ä¸‹ [<b>Host+Home</b>] 來å˜å–。</p></translation> </message> <message> <source><p>The virtual machine window will be now switched to <b>Scale</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in scale mode. You can access it by pressing <b>Host+Home</b>.</p></source> - <translation type="unfinished"></translation> + <translation><p>ç¾åœ¨å°‡åˆ‡æ›è™›æ“¬æ©Ÿå™¨è¦–窗到<b>縮放</b>模å¼ã€‚ 您å¯ä»¥éš¨æ™‚按下 [<b>%1</b>] 回到視窗模å¼ã€‚</p><p>請注æ„,<i>Host</i> éµç›®å‰å®šç¾©ç‚º <b>%2</b>。</p><p>請注æ„,主功能表列在縮放模å¼ä¸æ˜¯éš±è—的。您å¯ä»¥æŒ‰ä¸‹ [<b>Host+Home</b>] 來å˜å–。</p></translation> </message> <message> <source>Switch</source> <comment>scale</comment> - <translation type="unfinished">切æ›</translation> + <translation>切æ›</translation> </message> <message> <source>Failed to open the Extension Pack <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>開啟擴充包 <b>%1</b> 失敗。</translation> </message> <message> <source><p>You are about to install a VirtualBox extension pack. Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>您å³å°‡å®‰è£ VirtualBox 擴充包。 擴充包補充 VirtualBox 的功能且å¯ä»¥åŒ…å«ç³»çµ±å±¤ç´šçš„軟體,å¯èƒ½æ½›åœ¨å±å®³æ‚¨çš„系統。 請檢閱以下æ述,並åªé€²è¡Œå¾žä¿¡ä»»ä¾†æºæ‰€å–得的擴充包。</p><p><table cellpadding=0 cellspacing=0><tr><td><b>å稱:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>版本:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>æè¿°:&nbsp;&nbsp;</b></td><td>%3</td></tr></table></p></translation> </message> <message> <source>&Install</source> - <translation type="unfinished"></translation> + <translation>安è£(&I)</translation> </message> <message> <source>Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</source> - <translation type="unfinished"></translation> + <translation>擴充包補充 VirtualBox 的功能且å¯ä»¥åŒ…å«ç³»çµ±å±¤ç´šçš„軟體,å¯èƒ½æ½›åœ¨å±å®³æ‚¨çš„系統。 請檢閱以下æ述,並åªé€²è¡Œå¾žä¿¡ä»»ä¾†æºæ‰€å–得的擴充包。</translation> </message> <message> <source><p>An older version of the extension pack is already installed, would you like to upgrade? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>已經安è£æ“´å……包的較舊版本,您希望昇級嗎? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>å稱:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>新的版本:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>ç›®å‰ç‰ˆæœ¬:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>æè¿°:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></translation> </message> <message> <source>&Upgrade</source> - <translation type="unfinished"></translation> + <translation>å‡ç´š(&U)</translation> </message> <message> <source><p>An newer version of the extension pack is already installed, would you like to downgrade? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>已經安è£æ“´å……包的較新版本,您希望é™ç´šå—Ž? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>å稱:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>新的版本:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>ç›®å‰ç‰ˆæœ¬:&nbsp;&nbsp;</b></td><td>%4</td></tr><tr><td><b>æè¿°:&nbsp;&nbsp;</b></td><td>%5</td></tr></table></p></translation> </message> <message> <source>&Downgrade</source> - <translation type="unfinished"></translation> + <translation>é™ç´š(&D)</translation> </message> <message> <source><p>The extension pack is already installed with the same version, would you like reinstall it? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%4</td></tr></table></p></source> - <translation type="unfinished"></translation> + <translation><p>已經安è£æ“´å……包的相åŒç‰ˆæœ¬ï¼Œæ‚¨å¸Œæœ›é‡æ–°å®‰è£å—Ž? <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>å稱:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>版本:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>æè¿°:&nbsp;&nbsp;</b></td><td>%4</td></tr></table></p></translation> </message> <message> <source>&Reinstall</source> - <translation type="unfinished"></translation> + <translation>é‡æ–°å®‰è£(&R)</translation> </message> <message> <source><p>You are about to remove the VirtualBox extension pack <b>%1</b>.</p><p>Are you sure you want to proceed?</p></source> - <translation type="unfinished"></translation> + <translation><p>您å³å°‡ç§»é™¤ VirtualBox 擴充包 <b>%1</b>。</p><p>您確定è¦é€²è¡Œå—Ž?</p></translation> </message> <message> <source>The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.</source> - <translation type="unfinished"></translation> + <translation>擴充包 <br><nobr><b>%1</b><nobr><br> 已安è£æˆåŠŸã€‚</translation> </message> </context> <context> diff --git a/src/VBox/Frontends/VirtualBox/nls/qt_it.ts b/src/VBox/Frontends/VirtualBox/nls/qt_it.ts index b310d8e2c..a732ab529 100644 --- a/src/VBox/Frontends/VirtualBox/nls/qt_it.ts +++ b/src/VBox/Frontends/VirtualBox/nls/qt_it.ts @@ -36,7 +36,7 @@ <name>AudioOutput</name> <message> <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> - <translation type="unfinished"></translation> + <translation><html>Il dispositivo di riproduzione audio <b>%1</b> non funziona.<br/>Ripiego su <b>%2</b>.</html></translation> </message> <message> <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source> @@ -79,12 +79,14 @@ <message> <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.</source> - <translation type="unfinished"></translation> + <translation>Avviso: sembra che il pacchetto gstreamer0.10-plugins-good non sia installato. + Alcune funzionalità video sono state disabilitate.</translation> </message> <message> <source>Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled</source> - <translation type="unfinished"></translation> + <translation>Avviso: sembra che il componente GStreamer di base non sia installato. + Tutti i supporti audio e video sono stati disabilitati</translation> </message> </context> <context> @@ -252,7 +254,7 @@ have libgstreamer-plugins-base installed.</source> </message> <message> <source>Preview File Contents</source> - <translation type="unfinished"></translation> + <translation>Anteprima del contenuto dei file</translation> </message> <message> <source>Read-write</source> @@ -1910,7 +1912,7 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source> - <translation type="unfinished"></translation> + <translation>Il plugin '%1' utilizza librerie QT non compatibili. Versione di compilazione attesa "%2", ottenuta "%3"</translation> </message> <message> <source>Unknown error</source> @@ -1987,7 +1989,7 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>%1: Remote closed</source> - <translation type="unfinished"></translation> + <translation>%1: terminazione remota</translation> </message> <message> <source>%1: Invalid name</source> @@ -2015,7 +2017,7 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>%1: The socket operation is not supported</source> - <translation type="unfinished"></translation> + <translation>%1: l'operazione di socket non è supportata</translation> </message> <message> <source>%1: Unknown error %2</source> @@ -2089,7 +2091,7 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>Unable to store next result</source> - <translation type="unfinished"></translation> + <translation>Impossibile memorizzare il risultato successivo</translation> </message> </context> <context> @@ -2384,11 +2386,11 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>Error while downloading %1: %2</source> - <translation type="unfinished"></translation> + <translation>Errore durante lo scaricamento di %1: %2</translation> </message> <message> <source>Error while uploading %1: %2</source> - <translation type="unfinished"></translation> + <translation>Errore durante l'invio di %1: %2</translation> </message> </context> <context> @@ -2634,11 +2636,11 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>Form</source> - <translation type="unfinished"></translation> + <translation>Modulo</translation> </message> <message> <source>Paper</source> - <translation type="unfinished"></translation> + <translation>Carta</translation> </message> <message> <source>Page size:</source> @@ -2646,11 +2648,11 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>Width:</source> - <translation type="unfinished"></translation> + <translation>Larghezza:</translation> </message> <message> <source>Height:</source> - <translation type="unfinished"></translation> + <translation>Altezza:</translation> </message> <message> <source>Paper source:</source> @@ -2670,11 +2672,11 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>Reverse landscape</source> - <translation type="unfinished"></translation> + <translation>Orizzontale inverso</translation> </message> <message> <source>Reverse portrait</source> - <translation type="unfinished"></translation> + <translation>Verticale inverso</translation> </message> <message> <source>Margins</source> @@ -2682,19 +2684,19 @@ Vuoi eliminarlo comunque?</translation> </message> <message> <source>top margin</source> - <translation type="unfinished"></translation> + <translation>margine superiore</translation> </message> <message> <source>left margin</source> - <translation type="unfinished"></translation> + <translation>margine sinistro</translation> </message> <message> <source>right margin</source> - <translation type="unfinished"></translation> + <translation>margine destro</translation> </message> <message> <source>bottom margin</source> - <translation type="unfinished"></translation> + <translation>margine inferiore</translation> </message> </context> <context> @@ -2894,50 +2896,50 @@ Scegli un nome diverso.</translation> </message> <message> <source>Write %1 file</source> - <translation type="unfinished"></translation> + <translation>Scrivi %1 file</translation> </message> </context> <context> <name>QPrintPreviewDialog</name> <message> <source>Page Setup</source> - <translation type="unfinished"></translation> + <translation>Impostazioni di pagina</translation> </message> <message> <source>Print Preview</source> - <translation type="unfinished"></translation> + <translation>Anteprima di stampa</translation> </message> <message> <source>Next page</source> - <translation type="unfinished"></translation> + <translation>Pagina successiva</translation> </message> <message> <source>Previous page</source> - <translation type="unfinished"></translation> + <translation>Pagina precedente</translation> </message> <message> <source>First page</source> - <translation type="unfinished"></translation> + <translation>Prima pagina</translation> </message> <message> <source>Last page</source> - <translation type="unfinished"></translation> + <translation>Ultima pagina</translation> </message> <message> <source>Fit width</source> - <translation type="unfinished"></translation> + <translation>Adatta alla larghezza</translation> </message> <message> <source>Fit page</source> - <translation type="unfinished"></translation> + <translation>Adatta alla pagina</translation> </message> <message> <source>Zoom in</source> - <translation type="unfinished"></translation> + <translation>Aumenta zoom</translation> </message> <message> <source>Zoom out</source> - <translation type="unfinished"></translation> + <translation>Riduci zoom</translation> </message> <message> <source>Portrait</source> @@ -2953,7 +2955,7 @@ Scegli un nome diverso.</translation> </message> <message> <source>Show facing pages</source> - <translation type="unfinished">Mostra pagine</translation> + <translation>Mostra pagine affiancate</translation> </message> <message> <source>Show overview of all pages</source> @@ -4128,7 +4130,7 @@ Scegli un nome diverso.</translation> <message> <source>Open Frame</source> <comment>Open Frame in New Window context menu item</comment> - <translation type="unfinished"></translation> + <translation>Apri riquadro</translation> </message> <message> <source>Copy</source> @@ -4168,7 +4170,7 @@ Scegli un nome diverso.</translation> <message> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> - <translation type="unfinished"></translation> + <translation>Nessuna stima trovata</translation> </message> <message> <source>Ignore</source> @@ -4203,7 +4205,7 @@ Scegli un nome diverso.</translation> <message> <source>Spelling</source> <comment>Spelling and Grammar context sub-menu item</comment> - <translation type="unfinished"></translation> + <translation>Ortografia</translation> </message> <message> <source>Show Spelling and Grammar</source> diff --git a/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts b/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts index e2c452446..3086e917d 100644 --- a/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts +++ b/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts @@ -104,7 +104,7 @@ have libgstreamer-plugins-base installed.</source> <message numerus="yes"> <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source> <translation> - <numerusform>缺少所需的轉碼器。 您需è¦å®‰è£ä»¥ä¸‹è½‰ç¢¼å™¨ä»¥æ’放這個內容: %0</numerusform> + <numerusform>éºå¤±æ‰€éœ€çš„轉碼器。 您需è¦å®‰è£ä»¥ä¸‹è½‰ç¢¼å™¨ä»¥æ’放這個內容: %0</numerusform> </translation> </message> <message> diff --git a/src/VBox/Frontends/VirtualBox/shaders/COPYRIGHT b/src/VBox/Frontends/VirtualBox/shaders/COPYRIGHT new file mode 100644 index 000000000..cc70b7b0b --- /dev/null +++ b/src/VBox/Frontends/VirtualBox/shaders/COPYRIGHT @@ -0,0 +1,7 @@ +The *.c files in this directory are all part of VirtualBox Open Source +Edition (OSE), as available from http://www.virtualbox.org. The files +are free software; you can redistribute them and/or modify them under +the terms of the GNU General Public License (GPL) as published by the +Free Software Foundation, in version 2 as it comes in the "COPYING" file +of the VirtualBox OSE distribution. VirtualBox OSE is distributed in the +hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp index 7bfbc0941..89ba55643 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxFBOverlay.cpp 35280 2010-12-21 16:48:30Z vboxsync $ */ +/* $Id: VBoxFBOverlay.cpp 35500 2011-01-12 09:25:33Z vboxsync $ */ /** @file * VBoxFBOverlay implementation */ @@ -36,7 +36,7 @@ #ifdef VBOX_WITH_VIDEOHWACCEL #include <VBox/VBoxVideo.h> #include <VBox/types.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #endif #include <iprt/semaphore.h> @@ -1641,7 +1641,7 @@ void VBoxVHWATextureNP2RectPBO::doUpdate(uchar * pAddress, const QRect * pRect) unmapped = vboxglUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); ); - Assert(unmapped); + Assert(unmapped); NOREF(unmapped); VBoxVHWATextureNP2Rect::doUpdate(0, &mRect); @@ -1730,7 +1730,7 @@ void VBoxVHWATextureNP2RectPBOMapped::unmapBuffer() unmapped = vboxglUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); ); - Assert(unmapped); + Assert(unmapped); NOREF(unmapped); VBOXQGL_CHECKERR( vboxglBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); @@ -1771,7 +1771,7 @@ void VBoxVHWATextureNP2RectPBOMapped::doUpdate(uchar * pAddress, const QRect * p unmapped = vboxglUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); ); - Assert(unmapped); + Assert(unmapped); NOREF(unmapped); mpMappedAllignedBuffer = NULL; } diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h index 31b1238a5..f5d1a45be 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h +++ b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h @@ -692,7 +692,7 @@ public: unmapped = vboxglUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); ); - Assert(unmapped); + Assert(unmapped); NOREF(unmapped); VBoxVHWATextureImage::setAddress(0); diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIHotKeyEdit.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIHotKeyEdit.cpp index 184605cac..e6236bc03 100644 --- a/src/VBox/Frontends/VirtualBox/src/extensions/QIHotKeyEdit.cpp +++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIHotKeyEdit.cpp @@ -1,4 +1,4 @@ -/* $Id: QIHotKeyEdit.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: QIHotKeyEdit.cpp 35580 2011-01-17 12:09:32Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -6,7 +6,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -17,27 +17,24 @@ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ +/* Local includes */ #include "QIHotKeyEdit.h" #include "VBoxDefs.h" #include "VBoxGlobal.h" -/* Qt includes */ +/* Global includes */ #include <QApplication> #include <QStyleOption> #include <QStylePainter> #ifdef Q_WS_WIN /* VBox/cdefs.h defines these: */ -#undef LOWORD -#undef HIWORD -#undef LOBYTE -#undef HIBYTE -#include <windows.h> -#endif - -#if defined (Q_WS_PM) -QMap<int, QString> QIHotKeyEdit::sKeyNames; -#endif +# undef LOWORD +# undef HIWORD +# undef LOBYTE +# undef HIBYTE +# include <windows.h> +#endif /* Q_WS_WIN */ #ifdef Q_WS_X11 /* We need to capture some X11 events directly which @@ -45,25 +42,25 @@ QMap<int, QString> QIHotKeyEdit::sKeyNames; * including the Xlib header file will cause some nasty * conflicts with Qt. Therefore we use the following hack * to redefine those conflicting identifiers. */ -#define XK_XKB_KEYS -#define XK_MISCELLANY -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <X11/keysymdef.h> -#ifdef KeyPress +# define XK_XKB_KEYS +# define XK_MISCELLANY +# include <X11/Xlib.h> +# include <X11/Xutil.h> +# include <X11/keysymdef.h> +# ifdef KeyPress const int XFocusOut = FocusOut; const int XFocusIn = FocusIn; const int XKeyPress = KeyPress; const int XKeyRelease = KeyRelease; -#undef KeyRelease -#undef KeyPress -#undef FocusOut -#undef FocusIn -#endif -#include "XKeyboard.h" -QMap<QString, QString> QIHotKeyEdit::sKeyNames; -#include <QX11Info> -#endif +# undef KeyRelease +# undef KeyPress +# undef FocusOut +# undef FocusIn +# endif /* KeyPress */ +# include "XKeyboard.h" +QMap<QString, QString> QIHotKeyEdit::s_keyNames; +# include <QX11Info> +#endif /* Q_WS_X11 */ #ifdef Q_WS_MAC # include "UICocoaApplication.h" @@ -73,76 +70,66 @@ QMap<QString, QString> QIHotKeyEdit::sKeyNames; #endif -#if defined (Q_WS_WIN32) -/** - * Returns the correct modifier vkey for the *last* keyboard message, - * distinguishing between left and right keys. If both are pressed - * the left key wins. If the pressed key not a modifier, wParam is returned - * unchanged. - */ -int qi_distinguish_modifier_vkey (WPARAM wParam) +#ifdef Q_WS_WIN +/* Returns the correct modifier vkey for the *last* keyboard message, + * distinguishing between left and right keys. If both are pressed + * the left key wins. If the pressed key not a modifier, wParam is returned + * unchanged. */ +int qi_distinguish_modifier_vkey(WPARAM wParam) { int keyval = wParam; switch (wParam) { case VK_SHIFT: - if (::GetKeyState (VK_LSHIFT) & 0x8000) keyval = VK_LSHIFT; - else if (::GetKeyState (VK_RSHIFT) & 0x8000) keyval = VK_RSHIFT; + if (::GetKeyState(VK_LSHIFT) & 0x8000) keyval = VK_LSHIFT; + else if (::GetKeyState(VK_RSHIFT) & 0x8000) keyval = VK_RSHIFT; break; case VK_CONTROL: - if (::GetKeyState (VK_LCONTROL) & 0x8000) keyval = VK_LCONTROL; - else if (::GetKeyState (VK_RCONTROL) & 0x8000) keyval = VK_RCONTROL; + if (::GetKeyState(VK_LCONTROL) & 0x8000) keyval = VK_LCONTROL; + else if (::GetKeyState(VK_RCONTROL) & 0x8000) keyval = VK_RCONTROL; break; case VK_MENU: - if (::GetKeyState (VK_LMENU) & 0x8000) keyval = VK_LMENU; - else if (::GetKeyState (VK_RMENU) & 0x8000) keyval = VK_RMENU; + if (::GetKeyState(VK_LMENU) & 0x8000) keyval = VK_LMENU; + else if (::GetKeyState(VK_RMENU) & 0x8000) keyval = VK_RMENU; break; } return keyval; } -#endif +#endif /* Q_WS_WIN */ -/** @class QIHotKeyEdit - * - * The QIHotKeyEdit widget is a hot key editor. - */ -const char *QIHotKeyEdit::kNoneSymbName = "None"; +const char *QIHotKeyEdit::m_spNoneSymbName = "None"; -QIHotKeyEdit::QIHotKeyEdit (QWidget *aParent) : - QLabel (aParent) +QIHotKeyEdit::QIHotKeyEdit(QWidget *pParent) + : QLabel(pParent) { #ifdef Q_WS_X11 - /* Initialize the X keyboard subsystem */ - initMappedX11Keyboard(QX11Info::display(), - vboxGlobal().settings().publicProperty ("GUI/RemapScancodes")); -#endif + /* Initialize the X keyboard subsystem: */ + initMappedX11Keyboard(QX11Info::display(), vboxGlobal().settings().publicProperty("GUI/RemapScancodes")); +#endif /* Q_WS_X11 */ clear(); -#if defined (Q_WS_WIN32) - /* Qt documentation hasn't mentioned this is - * windows-only flag, but looks like that is so, - * anyway it is required for winEvent() handler only */ - setAttribute (Qt::WA_NativeWindow); -#endif - setFrameStyle (QFrame::StyledPanel | Sunken); - setAlignment (Qt::AlignCenter); - setFocusPolicy (Qt::StrongFocus); - setAutoFillBackground (true); +#ifdef Q_WS_WIN + /* Qt documentation hasn't mentioned this is windows-only flag, + * but looks like that is so, anyway it is required for winEvent() handler only: */ + setAttribute(Qt::WA_NativeWindow); +#endif /* Q_WS_WIN */ + setFrameStyle(QFrame::StyledPanel | Sunken); + setAlignment(Qt::AlignCenter); + setFocusPolicy(Qt::StrongFocus); + setAutoFillBackground(true); QPalette p = palette(); - p.setColor (QPalette::Active, QPalette::Foreground, - p.color (QPalette::Active, QPalette::Text)); - p.setColor (QPalette::Active, QPalette::Background, - p.color (QPalette::Active, QPalette::Base)); - setPalette (p); + p.setColor(QPalette::Active, QPalette::Foreground, p.color(QPalette::Active, QPalette::Text)); + p.setColor(QPalette::Active, QPalette::Background, p.color(QPalette::Active, QPalette::Base)); + setPalette(p); #ifdef Q_WS_MAC - mDarwinKeyModifiers = GetCurrentEventKeyModifiers(); + m_uDarwinKeyModifiers = GetCurrentEventKeyModifiers(); UICocoaApplication::instance()->registerForNativeEvents(RT_BIT_32(10) | RT_BIT_32(11) | RT_BIT_32(12) /* NSKeyDown | NSKeyUp | | NSFlagsChanged */, QIHotKeyEdit::darwinEventHandlerProc, this); - ::DarwinGrabKeyboard (false /* just modifiers */); -#endif + ::DarwinGrabKeyboard(false /* just modifiers */); +#endif /* Q_WS_MAC */ } QIHotKeyEdit::~QIHotKeyEdit() @@ -153,9 +140,6 @@ QIHotKeyEdit::~QIHotKeyEdit() #endif } -// Public members -///////////////////////////////////////////////////////////////////////////// - /** * Set the hot key value. O means there is no hot key. * @@ -164,10 +148,10 @@ QIHotKeyEdit::~QIHotKeyEdit() * virtual key, on Linux it is the first (0) keysym corresponding * to the keycode. */ -void QIHotKeyEdit::setKey (int aKeyVal) +void QIHotKeyEdit::setKey(int iKeyVal) { - mKeyVal = aKeyVal; - mSymbName = QIHotKeyEdit::keyName (aKeyVal); + m_iKeyVal = iKeyVal; + m_strSymbName = QIHotKeyEdit::keyName(iKeyVal); updateText(); } @@ -182,166 +166,30 @@ void QIHotKeyEdit::setKey (int aKeyVal) * to the keycode. */ -/** - * Stolen from QLineEdit. - */ QSize QIHotKeyEdit::sizeHint() const { ensurePolished(); - QFontMetrics fm (font()); - int h = qMax (fm.lineSpacing(), 14) + 2; - int w = fm.width ('x') * 17; // "some" + QFontMetrics fm(font()); + int h = qMax(fm.lineSpacing(), 14) + 2; + int w = fm.width('x') * 17; int m = frameWidth() * 2; QStyleOption option; - option.initFrom (this); - return (style()->sizeFromContents (QStyle::CT_LineEdit, &option, - QSize (w + m, h + m) - .expandedTo (QApplication::globalStrut()), - this)); + option.initFrom(this); + return (style()->sizeFromContents(QStyle::CT_LineEdit, &option, + QSize(w + m, h + m) + .expandedTo(QApplication::globalStrut()), + this)); } -/** - * Stolen from QLineEdit. - */ QSize QIHotKeyEdit::minimumSizeHint() const { ensurePolished(); QFontMetrics fm = fontMetrics(); - int h = fm.height() + qMax (2, fm.leading()); + int h = fm.height() + qMax(2, fm.leading()); int w = fm.maxWidth(); int m = frameWidth() * 2; - return QSize (w + m, h + m); -} - -#if defined (Q_WS_PM) -/** - * Returns the virtual key extracted from the QMSG structure. - * - * This function tries to detect some extra virtual keys definitions missing - * in PM (like Left Shift, Left Ctrl, Win keys). In all other cases it simply - * returns SHORT2FROMMP (aMsg->mp2). - * - * @param aMsg Pointer to the QMSG structure to extract the virtual key from. - * @return The extracted virtual key code or zero if there is no virtual key. - */ -/* static */ -int QIHotKeyEdit::virtualKey (QMSG *aMsg) -{ - USHORT f = SHORT1FROMMP (aMsg->mp1); - CHAR scan = CHAR4FROMMP (aMsg->mp1); - USHORT ch = SHORT1FROMMP (aMsg->mp2); - int vkey = (unsigned int) SHORT2FROMMP (aMsg->mp2); - - if (f & KC_VIRTUALKEY) - { - /* distinguish Left Shift from Right Shift) */ - if (vkey == VK_SHIFT && scan == 0x2A) - vkey = VK_LSHIFT; - /* distinguish Left Ctrl from Right Ctrl */ - else if (vkey == VK_CTRL && scan == 0x1D) - vkey = VK_LCTRL; - /* distinguish Ctrl+ScrLock from Ctrl+Break */ - else if (vkey == VK_BREAK && scan == 0x46 && f & KC_CTRL) - vkey = VK_SCRLLOCK; - } - else if (!(f & KC_CHAR)) - { - /* detect some special keys that have a pseudo char code in the high - * byte of ch (probably this is less device-dependent than - * scancode) */ - switch (ch) - { - case 0xEC00: vkey = VK_LWIN; break; - case 0xED00: vkey = VK_RWIN; break; - case 0xEE00: vkey = VK_WINMENU; break; - case 0xF900: vkey = VK_FORWARD; break; - case 0xFA00: vkey = VK_BACKWARD; break; - default: vkey = 0; - } - } - - return vkey; + return QSize(w + m, h + m); } -#endif - -#if defined (Q_WS_PM) -/** - * Updates the associative array containing the translations of PM virtual - * keys to human readable key names. - */ -void QIHotKeyEdit::retranslateUi() -{ - /* Note: strings for the same key must match strings in retranslateUi() - * versions for all platforms, to keep translators happy. */ - - sKeyNames [VK_LSHIFT] = tr ("Left Shift"); - sKeyNames [VK_SHIFT] = tr ("Right Shift"); - sKeyNames [VK_LCTRL] = tr ("Left Ctrl"); - sKeyNames [VK_CTRL] = tr ("Right Ctrl"); - sKeyNames [VK_ALT] = tr ("Left Alt"); - sKeyNames [VK_ALTGRAF] = tr ("Right Alt"); - sKeyNames [VK_LWIN] = tr ("Left WinKey"); - sKeyNames [VK_RWIN] = tr ("Right WinKey"); - sKeyNames [VK_WINMENU] = tr ("Menu key"); - sKeyNames [VK_CAPSLOCK] = tr ("Caps Lock"); - sKeyNames [VK_SCRLLOCK] = tr ("Scroll Lock"); - - sKeyNames [VK_PAUSE] = tr ("Pause"); - sKeyNames [VK_PRINTSCRN] = tr ("Print Screen"); - - sKeyNames [VK_F1] = tr ("F1"); - sKeyNames [VK_F2] = tr ("F2"); - sKeyNames [VK_F3] = tr ("F3"); - sKeyNames [VK_F4] = tr ("F4"); - sKeyNames [VK_F5] = tr ("F5"); - sKeyNames [VK_F6] = tr ("F6"); - sKeyNames [VK_F7] = tr ("F7"); - sKeyNames [VK_F8] = tr ("F8"); - sKeyNames [VK_F9] = tr ("F9"); - sKeyNames [VK_F10] = tr ("F10"); - sKeyNames [VK_F11] = tr ("F11"); - sKeyNames [VK_F12] = tr ("F12"); - sKeyNames [VK_F13] = tr ("F13"); - sKeyNames [VK_F14] = tr ("F14"); - sKeyNames [VK_F15] = tr ("F15"); - sKeyNames [VK_F16] = tr ("F16"); - sKeyNames [VK_F17] = tr ("F17"); - sKeyNames [VK_F18] = tr ("F18"); - sKeyNames [VK_F19] = tr ("F19"); - sKeyNames [VK_F20] = tr ("F20"); - sKeyNames [VK_F21] = tr ("F21"); - sKeyNames [VK_F22] = tr ("F22"); - sKeyNames [VK_F23] = tr ("F23"); - sKeyNames [VK_F24] = tr ("F24"); - - sKeyNames [VK_NUMLOCK] = tr ("Num Lock"); - sKeyNames [VK_FORWARD] = tr ("Forward"); - sKeyNames [VK_BACKWARD] = tr ("Back"); -} -#elif defined (Q_WS_X11) -/** - * Updates the associative array containing the translations of X11 key strings to human - * readable key names. - */ -void QIHotKeyEdit::retranslateUi() -{ - /* Note: strings for the same key must match strings in retranslateUi() - * versions for all platforms, to keep translators happy. */ - - sKeyNames ["Shift_L"] = tr ("Left Shift"); - sKeyNames ["Shift_R"] = tr ("Right Shift"); - sKeyNames ["Control_L"] = tr ("Left Ctrl"); - sKeyNames ["Control_R"] = tr ("Right Ctrl"); - sKeyNames ["Alt_L"] = tr ("Left Alt"); - sKeyNames ["Alt_R"] = tr ("Right Alt"); - sKeyNames ["Super_L"] = tr ("Left WinKey"); - sKeyNames ["Super_R"] = tr ("Right WinKey"); - sKeyNames ["Menu"] = tr ("Menu key"); - sKeyNames ["ISO_Level3_Shift"] = tr ("Alt Gr"); - sKeyNames ["Caps_Lock"] = tr ("Caps Lock"); - sKeyNames ["Scroll_Lock"] = tr ("Scroll Lock"); -} -#endif /** * Returns the string representation of a given key. @@ -352,23 +200,23 @@ void QIHotKeyEdit::retranslateUi() * to the keycode. */ /* static */ -QString QIHotKeyEdit::keyName (int aKeyVal) +QString QIHotKeyEdit::keyName(int iKeyVal) { - QString name; + QString strName; - if (!aKeyVal) + if (!iKeyVal) { - name = tr (kNoneSymbName); + strName = tr(m_spNoneSymbName); } else { -#if defined (Q_WS_WIN32) +#if defined (Q_WS_WIN) /* Stupid MapVirtualKey doesn't distinguish between right and left * vkeys, even under XP, despite that it stated in msdn. Do it by * hands. Besides that it can't recognize such virtual keys as * VK_DIVIDE & VK_PAUSE, this is also known bug. */ int scan; - switch (aKeyVal) + switch (iKeyVal) { /* Processing special keys... */ case VK_PAUSE: scan = 0x45 << 16; break; @@ -379,123 +227,100 @@ QString QIHotKeyEdit::keyName (int aKeyVal) case VK_APPS: case VK_LWIN: case VK_RWIN: - case VK_NUMLOCK: scan = (::MapVirtualKey (aKeyVal, 0) | 256) << 16; break; - default: scan = ::MapVirtualKey (aKeyVal, 0) << 16; + case VK_NUMLOCK: scan = (::MapVirtualKey(iKeyVal, 0) | 256) << 16; break; + default: scan = ::MapVirtualKey(iKeyVal, 0) << 16; } - TCHAR *str = new TCHAR [256]; - if (::GetKeyNameText (scan, str, 256)) + TCHAR *str = new TCHAR[256]; + if (::GetKeyNameText(scan, str, 256)) { - name = QString::fromUtf16 (str); + strName = QString::fromUtf16(str); } else { AssertFailed(); - name = QString (tr ("<key_%1>")).arg (aKeyVal); + strName = QString(tr("<key_%1>")).arg(iKeyVal); } delete[] str; -#elif defined (Q_WS_PM) - name = sKeyNames [aKeyVal]; - if (name.isNull()) - { - AssertFailed(); - name = QString (tr ("<key_%1>")).arg (aKeyVal); - } #elif defined (Q_WS_X11) - char *sn = ::XKeysymToString ((KeySym) aKeyVal); + char *sn = ::XKeysymToString((KeySym)iKeyVal); if (sn) { - name = sKeyNames [sn]; - if (name.isEmpty()) - name = sn; + strName = s_keyNames[sn]; + if (strName.isEmpty()) + strName = sn; } else { AssertFailed(); - name = QString (tr ("<key_%1>")).arg (aKeyVal); + strName = QString(tr("<key_%1>")).arg(iKeyVal); } #elif defined(Q_WS_MAC) - UInt32 modMask = DarwinKeyCodeToDarwinModifierMask (aKeyVal); + UInt32 modMask = DarwinKeyCodeToDarwinModifierMask(iKeyVal); switch (modMask) { case shiftKey: case optionKey: case controlKey: case cmdKey: - name = tr ("Left "); + strName = tr("Left "); break; case rightShiftKey: case rightOptionKey: case rightControlKey: case kEventKeyModifierRightCmdKeyMask: - name = tr ("Right "); + strName = tr("Right "); break; default: - AssertMsgFailedReturn (("modMask=%#x\n", modMask), QString()); + AssertMsgFailedReturn(("modMask=%#x\n", modMask), QString()); } switch (modMask) { case shiftKey: case rightShiftKey: - name += QChar (kShiftUnicode); + strName += QChar(kShiftUnicode); break; case optionKey: case rightOptionKey: - name += QChar (kOptionUnicode); + strName += QChar(kOptionUnicode); break; case controlKey: case rightControlKey: - name += QChar (kControlUnicode); + strName += QChar(kControlUnicode); break; case cmdKey: case kEventKeyModifierRightCmdKeyMask: - name += QChar (kCommandUnicode); + strName += QChar(kCommandUnicode); break; } #else AssertFailed(); - name = QString (tr ("<key_%1>")).arg (aKeyVal); + strName = QString(tr("<key_%1>")).arg(iKeyVal); #endif } - return name; + return strName; } /* static */ -bool QIHotKeyEdit::isValidKey (int aKeyVal) +bool QIHotKeyEdit::isValidKey(int iKeyVal) { /* Empty value is correct: */ - if (aKeyVal == 0) + if (iKeyVal == 0) return true; -#if defined(Q_WS_WIN32) - return ( - (aKeyVal >= VK_SHIFT && aKeyVal <= VK_CAPITAL) || - aKeyVal == VK_PRINT || - aKeyVal == VK_LWIN || aKeyVal == VK_RWIN || - aKeyVal == VK_APPS || - (aKeyVal >= VK_F1 && aKeyVal <= VK_F24) || - aKeyVal == VK_NUMLOCK || aKeyVal == VK_SCROLL || - (aKeyVal >= VK_LSHIFT && aKeyVal <= VK_RMENU)); -#elif defined(Q_WS_PM) - return ( - (aKeyVal >= VK_SHIFT && aKeyVal <= VK_CAPSLOCK) || - aKeyVal == VK_PRINTSCRN || - (aKeyVal >= VK_F1 && aKeyVal <= VK_F24) || - aKeyVal == VK_NUMLOCK || aKeyVal == VK_SCRLLOCK || - (aKeyVal >= VK_LSHIFT && aKeyVal <= VK_BACKWARD)); +#if defined(Q_WS_WIN) + return ((iKeyVal >= VK_SHIFT && iKeyVal <= VK_CAPITAL) || + iKeyVal == VK_PRINT || + iKeyVal == VK_LWIN || iKeyVal == VK_RWIN || + iKeyVal == VK_APPS || + (iKeyVal >= VK_F1 && iKeyVal <= VK_F24) || + iKeyVal == VK_NUMLOCK || iKeyVal == VK_SCROLL || + (iKeyVal >= VK_LSHIFT && iKeyVal <= VK_RMENU)); #elif defined(Q_WS_X11) - KeySym ks = (KeySym) aKeyVal; - return - ( - ks != NoSymbol && - ks != XK_Insert - ) && ( - ks == XK_Scroll_Lock || - IsModifierKey (ks) || - IsFunctionKey (ks) || - IsMiscFunctionKey (ks) - ); + KeySym ks = (KeySym)iKeyVal; + return (ks != NoSymbol && ks != XK_Insert) && + (ks == XK_Scroll_Lock || IsModifierKey(ks) || IsFunctionKey(ks) || IsMiscFunctionKey(ks)); #elif defined(Q_WS_MAC) - UInt32 modMask = ::DarwinKeyCodeToDarwinModifierMask (aKeyVal); + UInt32 modMask = ::DarwinKeyCodeToDarwinModifierMask(iKeyVal); switch (modMask) { case shiftKey: @@ -511,100 +336,86 @@ bool QIHotKeyEdit::isValidKey (int aKeyVal) return false; } #else - Q_UNUSED (aKeyVal); + Q_UNUSED(iKeyVal); return true; #endif } -// Public slots -///////////////////////////////////////////////////////////////////////////// +#ifdef Q_WS_X11 +/* Updates the associative array containing the translations + * of X11 key strings to human readable key names. */ +void QIHotKeyEdit::retranslateUi() +{ + /* Note: strings for the same key must match strings in retranslateUi() + * versions for all platforms, to keep translators happy. */ + + s_keyNames["Shift_L"] = tr("Left Shift"); + s_keyNames["Shift_R"] = tr("Right Shift"); + s_keyNames["Control_L"] = tr("Left Ctrl"); + s_keyNames["Control_R"] = tr("Right Ctrl"); + s_keyNames["Alt_L"] = tr("Left Alt"); + s_keyNames["Alt_R"] = tr("Right Alt"); + s_keyNames["Super_L"] = tr("Left WinKey"); + s_keyNames["Super_R"] = tr("Right WinKey"); + s_keyNames["Menu"] = tr("Menu key"); + s_keyNames["ISO_Level3_Shift"] = tr("Alt Gr"); + s_keyNames["Caps_Lock"] = tr("Caps Lock"); + s_keyNames["Scroll_Lock"] = tr("Scroll Lock"); +} +#endif /* Q_WS_X11 */ void QIHotKeyEdit::clear() { - mKeyVal = 0; - mSymbName = tr (kNoneSymbName); + m_iKeyVal = 0; + m_strSymbName = tr(m_spNoneSymbName); updateText(); } -// Protected members -///////////////////////////////////////////////////////////////////////////// +#if defined (Q_WS_WIN) -// Protected events -///////////////////////////////////////////////////////////////////////////// - -#if defined (Q_WS_WIN32) - -bool QIHotKeyEdit::winEvent (MSG *aMsg, long* /* aResult */) +bool QIHotKeyEdit::winEvent(MSG *pMsg, long* /* pResult */) { - if (!(aMsg->message == WM_KEYDOWN || aMsg->message == WM_SYSKEYDOWN || - aMsg->message == WM_KEYUP || aMsg->message == WM_SYSKEYUP || - aMsg->message == WM_CHAR || aMsg->message == WM_SYSCHAR || - aMsg->message == WM_DEADCHAR || aMsg->message == WM_SYSDEADCHAR || - aMsg->message == WM_CONTEXTMENU)) + if (!(pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN || + pMsg->message == WM_KEYUP || pMsg->message == WM_SYSKEYUP || + pMsg->message == WM_CHAR || pMsg->message == WM_SYSCHAR || + pMsg->message == WM_DEADCHAR || pMsg->message == WM_SYSDEADCHAR || + pMsg->message == WM_CONTEXTMENU)) return false; - /* ignore if not a valid hot key */ - if (!isValidKey (aMsg->wParam)) + /* Ignore if not a valid hot key: */ + if (!isValidKey(pMsg->wParam)) return false; #if 0 - LogFlow (("%WM_%04X: vk=%04X rep=%05d scan=%02X ext=%01d" - "rzv=%01X ctx=%01d prev=%01d tran=%01d\n", - aMsg->message, aMsg->wParam, - (aMsg->lParam & 0xFFFF), - ((aMsg->lParam >> 16) & 0xFF), - ((aMsg->lParam >> 24) & 0x1), - ((aMsg->lParam >> 25) & 0xF), - ((aMsg->lParam >> 29) & 0x1), - ((aMsg->lParam >> 30) & 0x1), - ((aMsg->lParam >> 31) & 0x1))); + LogFlow(("%WM_%04X: vk=%04X rep=%05d scan=%02X ext=%01d" + "rzv=%01X ctx=%01d prev=%01d tran=%01d\n", + pMsg->message, pMsg->wParam, + (pMsg->lParam & 0xFFFF), + ((pMsg->lParam >> 16) & 0xFF), + ((pMsg->lParam >> 24) & 0x1), + ((pMsg->lParam >> 25) & 0xF), + ((pMsg->lParam >> 29) & 0x1), + ((pMsg->lParam >> 30) & 0x1), + ((pMsg->lParam >> 31) & 0x1))); #endif - if (aMsg->message == WM_KEYDOWN || aMsg->message == WM_SYSKEYDOWN) + if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN) { - /* determine platform-dependent key */ - mKeyVal = qi_distinguish_modifier_vkey (aMsg->wParam); - /* determine symbolic name */ - TCHAR *str = new TCHAR [256]; - if (::GetKeyNameText (aMsg->lParam, str, 256)) + /* Determine platform-dependent key: */ + m_iKeyVal = qi_distinguish_modifier_vkey(pMsg->wParam); + /* Determine symbolic name: */ + TCHAR *pStr = new TCHAR[256]; + if (::GetKeyNameText(pMsg->lParam, pStr, 256)) { - mSymbName = QString::fromUtf16 (str); + m_strSymbName = QString::fromUtf16(pStr); } else { AssertFailed(); - mSymbName = QString (tr ("<key_%1>")).arg (mKeyVal); + m_strSymbName = QString(tr("<key_%1>")).arg(m_iKeyVal); } - delete[] str; - /* update the display */ - updateText(); - } - - return true; -} - -#elif defined (Q_WS_PM) - -bool QIHotKeyEdit::pmEvent (QMSG *aMsg) -{ - if (aMsg->msg != WM_CHAR) - return false; - - USHORT f = SHORT1FROMMP (aMsg->mp1); - - int vkey = QIHotKeyEdit::virtualKey (aMsg); - - /* ignore if not a valid hot key */ - if (!isValidKey (vkey)) - return false; - - if (!(f & KC_KEYUP)) - { - /* determine platform-dependent key */ - mKeyVal = vkey; - /* determine symbolic name */ - mSymbName = QIHotKeyEdit::keyName (mKeyVal); - /* update the display */ + delete[] pStr; + /* Update the display: */ updateText(); } @@ -613,34 +424,34 @@ bool QIHotKeyEdit::pmEvent (QMSG *aMsg) #elif defined (Q_WS_X11) -bool QIHotKeyEdit::x11Event (XEvent *event) +bool QIHotKeyEdit::x11Event(XEvent *pEvent) { - switch (event->type) + switch (pEvent->type) { case XKeyPress: case XKeyRelease: { - XKeyEvent *ke = (XKeyEvent *) event; - KeySym ks = ::XKeycodeToKeysym (ke->display, ke->keycode, 0); - /* ignore if not a valid hot key */ - if (!isValidKey ((int) ks)) + XKeyEvent *pKeyEvent = (XKeyEvent*)pEvent; + KeySym ks = ::XKeycodeToKeysym(pKeyEvent->display, pKeyEvent->keycode, 0); + /* Ignore if not a valid hot key: */ + if (!isValidKey((int)ks)) return false; - /* skip key releases */ - if (event->type == XKeyRelease) + /* Skip key releases: */ + if (pEvent->type == XKeyRelease) return true; - /* determine platform-dependent key */ - mKeyVal = (int) ks; - /* determine symbolic name */ - mSymbName = QIHotKeyEdit::keyName (mKeyVal); - /* update the display */ + /* Determine platform-dependent key: */ + m_iKeyVal = (int)ks; + /* Determine symbolic name: */ + m_strSymbName = QIHotKeyEdit::keyName(m_iKeyVal); + /* Update the display: */ updateText(); #if 0 - LogFlow (("%s: state=%08X keycode=%08X keysym=%08X symb=%s\n", - event->type == XKeyPress ? "XKeyPress" : "XKeyRelease", - ke->state, ke->keycode, ks, - symbname.latin1())); + LogFlow(("%s: state=%08X keycode=%08X keysym=%08X symb=%s\n", + pEvent->type == XKeyPress ? "XKeyPress" : "XKeyRelease", + pKeyEvent->state, pKeyEvent->keycode, ks, + symbname.latin1())); #endif return true; } @@ -650,29 +461,29 @@ bool QIHotKeyEdit::x11Event (XEvent *event) } #elif defined (Q_WS_MAC) + /* static */ -bool QIHotKeyEdit::darwinEventHandlerProc (const void *pvCocoaEvent, const void *pvCarbonEvent, void *pvUser) +bool QIHotKeyEdit::darwinEventHandlerProc(const void *pvCocoaEvent, const void *pvCarbonEvent, void *pvUser) { - QIHotKeyEdit *edit = (QIHotKeyEdit *) pvUser; + QIHotKeyEdit *edit = (QIHotKeyEdit*)pvUser; EventRef inEvent = (EventRef)pvCarbonEvent; - UInt32 EventClass = ::GetEventClass (inEvent); + UInt32 EventClass = ::GetEventClass(inEvent); if (EventClass == kEventClassKeyboard) - return edit->darwinKeyboardEvent (pvCocoaEvent, inEvent); + return edit->darwinKeyboardEvent(pvCocoaEvent, inEvent); return false; } - -bool QIHotKeyEdit::darwinKeyboardEvent (const void *pvCocoaEvent, EventRef inEvent) +bool QIHotKeyEdit::darwinKeyboardEvent(const void *pvCocoaEvent, EventRef inEvent) { #if 0 /* for debugging */ ::darwinDebugPrintEvent("QIHotKeyEdit", inEvent); #endif - /* ignore key changes unless we're the focus widget */ + /* Ignore key changes unless we're the focus widget: */ if (!hasFocus()) return false; - UInt32 eventKind = ::GetEventKind (inEvent); + UInt32 eventKind = ::GetEventKind(inEvent); switch (eventKind) { /*case kEventRawKeyDown: @@ -681,25 +492,25 @@ bool QIHotKeyEdit::darwinKeyboardEvent (const void *pvCocoaEvent, EventRef inEve case kEventRawKeyModifiersChanged: { UInt32 modifierMask = 0; - ::GetEventParameter (inEvent, kEventParamKeyModifiers, typeUInt32, NULL, - sizeof (modifierMask), NULL, &modifierMask); + ::GetEventParameter(inEvent, kEventParamKeyModifiers, typeUInt32, NULL, + sizeof(modifierMask), NULL, &modifierMask); - modifierMask = ::DarwinAdjustModifierMask (modifierMask, pvCocoaEvent); - UInt32 changed = mDarwinKeyModifiers ^ modifierMask; - mDarwinKeyModifiers = modifierMask; + modifierMask = ::DarwinAdjustModifierMask(modifierMask, pvCocoaEvent); + UInt32 changed = m_uDarwinKeyModifiers ^ modifierMask; + m_uDarwinKeyModifiers = modifierMask; - /* skip key releases */ + /* Skip key releases: */ if (changed && (changed & modifierMask)) break; - /* convert to keycode and skip keycodes we don't care about. */ - unsigned keyCode = ::DarwinModifierMaskToDarwinKeycode (changed); - if (!keyCode || keyCode == ~0U || !isValidKey (keyCode)) + /* Convert to keycode and skip keycodes we don't care about. */ + unsigned keyCode = ::DarwinModifierMaskToDarwinKeycode(changed); + if (!keyCode || keyCode == ~0U || !isValidKey(keyCode)) break; - /* update key current key. */ - mKeyVal = keyCode; - mSymbName = QIHotKeyEdit::keyName (keyCode); + /* Update key current key: */ + m_iKeyVal = keyCode; + m_strSymbName = QIHotKeyEdit::keyName(keyCode); updateText(); break; //return true; } @@ -712,49 +523,42 @@ bool QIHotKeyEdit::darwinKeyboardEvent (const void *pvCocoaEvent, EventRef inEve # warning "Port me!" #endif -void QIHotKeyEdit::focusInEvent (QFocusEvent *aEvent) +void QIHotKeyEdit::focusInEvent(QFocusEvent *pEvent) { - QLabel::focusInEvent (aEvent); + QLabel::focusInEvent(pEvent); QPalette p = palette(); - p.setColor (QPalette::Active, QPalette::Foreground, - p.color (QPalette::Active, QPalette::HighlightedText)); - p.setColor (QPalette::Active, QPalette::Background, - p.color (QPalette::Active, QPalette::Highlight)); - setPalette (p); + p.setColor(QPalette::Active, QPalette::Foreground, p.color(QPalette::Active, QPalette::HighlightedText)); + p.setColor(QPalette::Active, QPalette::Background, p.color(QPalette::Active, QPalette::Highlight)); + setPalette(p); } -void QIHotKeyEdit::focusOutEvent (QFocusEvent *aEvent) +void QIHotKeyEdit::focusOutEvent(QFocusEvent *pEvent) { - QLabel::focusOutEvent (aEvent); + QLabel::focusOutEvent(pEvent); QPalette p = palette(); - p.setColor (QPalette::Active, QPalette::Foreground, - p.color (QPalette::Active, QPalette::Text)); - p.setColor (QPalette::Active, QPalette::Background, - p.color (QPalette::Active, QPalette::Base)); - setPalette (p); + p.setColor(QPalette::Active, QPalette::Foreground, p.color(QPalette::Active, QPalette::Text)); + p.setColor(QPalette::Active, QPalette::Background, p.color(QPalette::Active, QPalette::Base)); + setPalette(p); } -void QIHotKeyEdit::paintEvent (QPaintEvent *aEvent) +void QIHotKeyEdit::paintEvent(QPaintEvent *pEvent) { if (hasFocus()) { - QStylePainter painter (this); + QStylePainter painter(this); QStyleOptionFocusRect option; - option.initFrom (this); - option.backgroundColor = palette().color (QPalette::Background); + option.initFrom(this); + option.backgroundColor = palette().color(QPalette::Background); option.rect = contentsRect(); - painter.drawPrimitive (QStyle::PE_FrameFocusRect, option); + painter.drawPrimitive(QStyle::PE_FrameFocusRect, option); } - QLabel::paintEvent (aEvent); + QLabel::paintEvent(pEvent); } -// Private members -///////////////////////////////////////////////////////////////////////////// - void QIHotKeyEdit::updateText() { - setText (QString (" %1 ").arg (mSymbName)); + setText(QString(" %1 ").arg(m_strSymbName)); } diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIHotKeyEdit.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIHotKeyEdit.h index ed4f16afa..4bae24814 100644 --- a/src/VBox/Frontends/VirtualBox/src/extensions/QIHotKeyEdit.h +++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIHotKeyEdit.h @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -19,22 +19,12 @@ #ifndef ___QIHotKeyEdit_h___ #define ___QIHotKeyEdit_h___ +/* Global includes */ #include <QLabel> #ifdef Q_WS_X11 # include <QMap> -#endif - -#ifdef Q_WS_PM -/* Extra virtual keys returned by QIHotKeyEdit::virtualKey() */ -# define VK_LSHIFT VK_USERFIRST + 0 -# define VK_LCTRL VK_USERFIRST + 1 -# define VK_LWIN VK_USERFIRST + 2 -# define VK_RWIN VK_USERFIRST + 3 -# define VK_WINMENU VK_USERFIRST + 4 -# define VK_FORWARD VK_USERFIRST + 5 -# define VK_BACKWARD VK_USERFIRST + 6 -#endif +#endif /* Q_WS_X11 */ class QIHotKeyEdit : public QLabel { @@ -42,26 +32,22 @@ class QIHotKeyEdit : public QLabel public: - QIHotKeyEdit (QWidget *aParent); + QIHotKeyEdit(QWidget *pParent); virtual ~QIHotKeyEdit(); - void setKey (int aKeyVal); - int key() const { return mKeyVal; } + void setKey(int iKeyVal); + int key() const { return m_iKeyVal; } - QString symbolicName() const { return mSymbName; } + QString symbolicName() const { return m_strSymbName; } QSize sizeHint() const; QSize minimumSizeHint() const; -#ifdef Q_WS_PM - static int virtualKey (QMSG *aMsg); -#endif - -#if defined (Q_WS_PM) || defined (Q_WS_X11) + static QString keyName(int iKeyVal); + static bool isValidKey(int iKeyVal); +#ifdef Q_WS_X11 static void retranslateUi(); -#endif - static QString keyName (int aKeyVal); - static bool isValidKey (int aKeyVal); +#endif /* Q_WS_X11 */ public slots: @@ -70,41 +56,36 @@ public slots: protected: #if defined (Q_WS_WIN32) - bool winEvent (MSG *aMsg, long *aResult); -#elif defined (Q_WS_PM) - bool pmEvent (QMSG *aMsg); + bool winEvent(MSG *pMsg, long *pResult); #elif defined (Q_WS_X11) - bool x11Event (XEvent *event); + bool x11Event(XEvent *pEvent); #elif defined (Q_WS_MAC) - static bool darwinEventHandlerProc (const void *pvCocoaEvent, const void *pvCarbonEvent, void *pvUser); - bool darwinKeyboardEvent (const void *pvCocoaEvent, EventRef inEvent); + static bool darwinEventHandlerProc(const void *pvCocoaEvent, const void *pvCarbonEvent, void *pvUser); + bool darwinKeyboardEvent(const void *pvCocoaEvent, EventRef inEvent); #endif - void focusInEvent (QFocusEvent *); - void focusOutEvent (QFocusEvent *); - - void paintEvent (QPaintEvent *); + void focusInEvent(QFocusEvent *pEvent); + void focusOutEvent(QFocusEvent *pEvent); + void paintEvent(QPaintEvent *pEvent); private: void updateText(); - int mKeyVal; - QString mSymbName; + int m_iKeyVal; + QString m_strSymbName; -#if defined (Q_WS_PM) - static QMap <int, QString> sKeyNames; -#elif defined (Q_WS_X11) - static QMap <QString, QString> sKeyNames; -#endif +#ifdef Q_WS_X11 + static QMap<QString, QString> s_keyNames; +#endif /* Q_WS_X11 */ #ifdef Q_WS_MAC - /** The current modifier key mask. Used to figure out which modifier - * key was pressed when we get a kEventRawKeyModifiersChanged event. */ - uint32_t mDarwinKeyModifiers; -#endif + /* The current modifier key mask. Used to figure out which modifier + * key was pressed when we get a kEventRawKeyModifiersChanged event. */ + uint32_t m_uDarwinKeyModifiers; +#endif /* Q_WS_MAC */ - static const char *kNoneSymbName; + static const char *m_spNoneSymbName; }; #endif // !___QIHotKeyEdit_h___ diff --git a/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp b/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp index 07a5e8af8..065bf0d0e 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp +++ b/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp @@ -1,4 +1,4 @@ -/* $Id: COMDefs.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: COMDefs.cpp 35524 2011-01-13 13:41:03Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -225,7 +225,15 @@ void COMBase::FromSafeArray (const com::SafeGUIDArray &aArr, void COMErrorInfo::init(const CVirtualBoxErrorInfo &info) { - AssertReturnVoid (!info.isNull()); + if (info.isNull()) + { + mIsNull = true; + mIsBasicAvailable = false; + mIsFullAvailable = false; + mResultCode = S_OK; + m_pNext = NULL; + AssertMsgFailedReturnVoid(("error info is NULL!\n")); + } bool gotSomething = false; bool gotAll = true; diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.cpp index 7fd70d34b..fa4e996f1 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.cpp +++ b/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.cpp @@ -1,4 +1,4 @@ -/* $Id: UIImageTools.cpp 30692 2010-07-07 09:17:35Z vboxsync $ */ +/* $Id: UIImageTools.cpp 35424 2011-01-07 13:05:41Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -20,6 +20,12 @@ /* Local include */ #include "UIImageTools.h" +/* Qt includes */ +#include <QPainter> + +/* System includes */ +#include <math.h> + /* Todo: Think about the naming convention and if the images should be * processed in place or return changed copies. Make it more uniform. Add * asserts if the bit depth of the given image could not processed. */ @@ -141,6 +147,7 @@ void blurImageHorizontal(const QImage &source, QImage &dest, int r) } } } + void blurImageVertical(const QImage &source, QImage &dest, int r) { QSize s = source.size(); @@ -196,3 +203,77 @@ void blurImageVertical(const QImage &source, QImage &dest, int r) } } +static QImage betaLabelImage(const QSize& ls) +{ + /* Beta label */ + QColor bgc(246, 179, 0); + QImage i(ls, QImage::Format_ARGB32); + i.fill(Qt::transparent); + QPainter p(&i); + p.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); + p.setPen(Qt::NoPen); + /* Background */ + p.setBrush(bgc); + p.drawRect(0, 0, ls.width(), ls.height()); + /* The black stripes */ + p.setPen(QPen(QColor(70, 70, 70), 5)); + float c = ((float)ls.width() / ls.height()) + 1; + float g = (ls.width() / (c - 1)); + for (int i = 0; i < c; ++i) + p.drawLine(-g / 2 + g * i, ls.height(), -g / 2 + g * (i + 1), 0); + /* The text */ + QFont f = p.font(); + f.setBold(true); + QPainterPath tp; + tp.addText(0, 0, f, "BETA"); + QRectF r = tp.boundingRect(); + /* Center the text path */ + p.translate((ls.width() - r.width()) / 2, ls.height() - (ls.height() - r.height()) / 2); + QPainterPathStroker pps; + QPainterPath pp = pps.createStroke(tp); + p.setPen(QPen(bgc.darker(80), 2, Qt::SolidLine, Qt::RoundCap)); + p.drawPath(pp); + p.setBrush(Qt::black); + p.setPen(Qt::NoPen); + p.drawPath(tp); + p.end(); + + /* Smoothing */ + QImage i1(ls, QImage::Format_ARGB32); + i1.fill(Qt::transparent); + QPainter p1(&i1); + p1.setCompositionMode(QPainter::CompositionMode_Source); + p1.drawImage(0, 0, i); + p1.setCompositionMode(QPainter::CompositionMode_DestinationIn); + QLinearGradient lg(0, 0, ls.width(), 0); + lg.setColorAt(0, QColor(Qt::transparent)); + lg.setColorAt(0.20, QColor(Qt::white)); + lg.setColorAt(0.80, QColor(Qt::white)); + lg.setColorAt(1, QColor(Qt::transparent)); + p1.fillRect(0, 0, ls.width(), ls.height(), lg); + p1.end(); + + return i1; +} + +QPixmap betaLabel(const QSize &ls /* = QSize(80, 16) */) +{ + return QPixmap::fromImage(betaLabelImage(ls)); +} + +QPixmap betaLabelSleeve(const QSize &ls /* = QSize(80, 16) */) +{ + const QImage &i = betaLabelImage(ls); + /* Create a secondary image which will contain the rotated banner. */ + int w = sqrtf(powf(ls.width(), 2) / 2); + QImage i1(w, w, QImage::Format_ARGB32); + i1.fill(Qt::transparent); + QPainter p1(&i1); + p1.setRenderHints(QPainter::SmoothPixmapTransform); + p1.rotate(45); + p1.drawImage(0, -ls.height(), i); + p1.end(); + + return QPixmap::fromImage(i1); +} + diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.h b/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.h index 6a8225705..29a47dd18 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.h +++ b/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.h @@ -28,5 +28,8 @@ void blurImage(const QImage &source, QImage &dest, int r); void blurImageHorizontal(const QImage &source, QImage &dest, int r); void blurImageVertical(const QImage &source, QImage &dest, int r); +QPixmap betaLabel(const QSize &ls = QSize(80, 16)); +QPixmap betaLabelSleeve(const QSize &ls = QSize(80, 16)); + #endif /* !__UIImageTools_h__ */ diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp index aac923e17..276189854 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp +++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxGlobal.cpp 35191 2010-12-16 15:25:20Z vboxsync $ */ +/* $Id: VBoxGlobal.cpp 35564 2011-01-14 13:52:02Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -65,6 +65,10 @@ #include <QHelpEvent> #include <QLocale> +#ifdef VBOX_GUI_WITH_PIDFILE +# include <QTextStream> +#endif /* VBOX_GUI_WITH_PIDFILE */ + #include <math.h> #ifdef Q_WS_X11 @@ -363,6 +367,11 @@ uint VBoxGlobal::qtCTVersion() ct_ver_str.section ('.', 2, 2).toInt(); } +bool VBoxGlobal::isBeta() const +{ + return mVBox.GetVersion().contains("BETA", Qt::CaseInsensitive); +} + /** * Sets the new global settings and saves them to the VirtualBox server. */ @@ -439,6 +448,31 @@ UIMachine* VBoxGlobal::virtualMachine() return m_pVirtualMachine; } +#ifdef VBOX_GUI_WITH_PIDFILE +void VBoxGlobal::createPidfile() +{ + if (!m_strPidfile.isEmpty()) + { + qint64 pid = qApp->applicationPid(); + QFile file(m_strPidfile); + if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + QTextStream out(&file); + out << pid << endl; + } + else + LogRel(("Failed to create pid file %s\n", m_strPidfile.toUtf8().constData())); + } +} + +void VBoxGlobal::deletePidfile() +{ + if ( !m_strPidfile.isEmpty() + && QFile::exists(m_strPidfile)) + QFile::remove(m_strPidfile); +} +#endif + bool VBoxGlobal::brandingIsActive (bool aForce /* = false*/) { if (aForce) @@ -2654,12 +2688,12 @@ QString VBoxGlobal::openMediumWithFileOpenDialog(VBoxDefs::MediumType mediumType /* If dialog has some result: */ if (!files.empty() && !files[0].isEmpty()) - return openMedium(mediumType, files[0]); + return openMedium(mediumType, files[0], pParent); return QString(); } -QString VBoxGlobal::openMedium(VBoxDefs::MediumType mediumType, QString strMediumLocation) +QString VBoxGlobal::openMedium(VBoxDefs::MediumType mediumType, QString strMediumLocation, QWidget *pParent /* = 0*/) { /* Convert to native separators: */ strMediumLocation = QDir::toNativeSeparators(strMediumLocation); @@ -2702,7 +2736,7 @@ QString VBoxGlobal::openMedium(VBoxDefs::MediumType mediumType, QString strMediu return vboxMedium.id(); } else - vboxProblem().cannotOpenMedium(0, vbox, mediumType, strMediumLocation); + vboxProblem().cannotOpenMedium(pParent, vbox, mediumType, strMediumLocation); return QString(); } @@ -5000,6 +5034,13 @@ void VBoxGlobal::init() startVM = true; } } +#ifdef VBOX_GUI_WITH_PIDFILE + else if (!::strcmp(arg, "-pidfile") || !::strcmp(arg, "--pidfile")) + { + if (++i < argc) + m_strPidfile = QString(qApp->argv()[i]); + } +#endif /* VBOX_GUI_WITH_PIDFILE */ else if (!::strcmp(arg, "-seamless") || !::strcmp(arg, "--seamless")) { bForceSeamless = true; @@ -5168,6 +5209,10 @@ void VBoxGlobal::cleanup() } #endif +#ifdef VBOX_GUI_WITH_PIDFILE + deletePidfile(); +#endif + /* Destroy our event handlers */ UIExtraDataEventHandler::destroy(); diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h index 956a90253..7c54ec2da 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h +++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h @@ -127,7 +127,8 @@ public: static QString qtCTVersionString(); static uint qtCTVersion(); - QString versionString() { return mVerString; } + QString versionString() const { return mVerString; } + bool isBeta() const; CVirtualBox virtualBox() const { return mVBox; } @@ -145,6 +146,11 @@ public: void setMainWindow (QWidget *aMainWindow) { mMainWindow = aMainWindow; } QWidget *mainWindow() const { return mMainWindow; } +#ifdef VBOX_GUI_WITH_PIDFILE + void createPidfile(); + void deletePidfile(); +#endif + /* branding */ bool brandingIsActive (bool aForce = false); QString brandingGetKey (QString aKey); @@ -180,9 +186,9 @@ public: bool isStartPausedEnabled() const { return mStartPaused; } #else - bool isDebuggerAutoShowEnabled() const { return false; } - bool isDebuggerAutoShowCommandLineEnabled() const { return false; } - bool isDebuggerAutoShowStatisticsEnabled() const { return false; } + bool isDebuggerAutoShowEnabled(CMachine & /*aMachine*/) const { return false; } + bool isDebuggerAutoShowCommandLineEnabled(CMachine & /*aMachine*/) const { return false; } + bool isDebuggerAutoShowStatisticsEnabled(CMachine & /*aMachine*/) const { return false; } bool isStartPausedEnabled() const { return false; } #endif @@ -594,7 +600,7 @@ public: QString openMediumWithFileOpenDialog(VBoxDefs::MediumType mediumType, QWidget *pParent = 0, const QString &strDefaultFolder = QString(), bool fUseLastFolder = true); - QString openMedium(VBoxDefs::MediumType mediumType, QString strMediumLocation); + QString openMedium(VBoxDefs::MediumType mediumType, QString strMediumLocation, QWidget *pParent = 0); /* Returns the number of current running Fe/Qt4 main windows. */ int mainWindowCount(); @@ -861,6 +867,10 @@ private: QFileIconProvider m_globalIconProvider; +#ifdef VBOX_GUI_WITH_PIDFILE + QString m_strPidfile; +#endif + friend VBoxGlobal &vboxGlobal(); }; diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp index 51bd208ad..4ee2f5c9f 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp +++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxProblemReporter.cpp 35274 2010-12-21 12:53:59Z vboxsync $ */ +/* $Id: VBoxProblemReporter.cpp 35587 2011-01-17 14:21:04Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -1971,6 +1971,14 @@ bool VBoxProblemReporter::confirmVMReset (QWidget *aParent) tr ("Reset", "machine")); } +void VBoxProblemReporter::warnAboutCannotCreateMachineFolder(QWidget *pParent, const QString &strFolderName) +{ + message(pParent ? pParent : mainWindowShown(), Critical, + tr("<p>Cannot create the machine folder:</p>" + "<p><b>%1</b></p>" + "<p>Please check you have the permissions required to do so.</p>").arg(strFolderName)); +} + /** * @return @c true if the user has selected to continue without attaching a * hard disk. diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h index 43a997cfb..a63098f80 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h +++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h @@ -322,6 +322,7 @@ public: bool confirmVMReset (QWidget *aParent); + void warnAboutCannotCreateMachineFolder(QWidget *pParent, const QString &strFolderName); bool confirmHardDisklessMachine (QWidget *aParent); void cannotRunInSelectorMode(); diff --git a/src/VBox/Frontends/VirtualBox/src/main.cpp b/src/VBox/Frontends/VirtualBox/src/main.cpp index adbfcae48..9ec09e1d4 100644 --- a/src/VBox/Frontends/VirtualBox/src/main.cpp +++ b/src/VBox/Frontends/VirtualBox/src/main.cpp @@ -1,4 +1,4 @@ -/* $Id: main.cpp 34623 2010-12-02 16:28:31Z vboxsync $ */ +/* $Id: main.cpp 35564 2011-01-14 13:52:02Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -259,6 +259,9 @@ static void showHelp() " --fullscreen switch to fullscreen mode during startup\n" " --rmode %-18s select different render mode (default is %s)\n" " --no-startvm-errormsgbox do not show a message box for VM start errors\n" +# ifdef VBOX_GUI_WITH_PIDFILE + " --pid-file file create a pidfile file when a VM is up and running\n" +# endif # ifdef VBOX_WITH_DEBUGGER_GUI " --dbg enable the GUI debug menu\n" " --debug like --dbg and show debug windows at VM startup\n" diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin-cocoa.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin-cocoa.mm index 8a69e2b8f..f8b18de0e 100644 --- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin-cocoa.mm +++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin-cocoa.mm @@ -1,4 +1,4 @@ -/* $Id: VBoxUtils-darwin-cocoa.mm 34401 2010-11-26 16:37:51Z vboxsync $ */ +/* $Id: VBoxUtils-darwin-cocoa.mm 35424 2011-01-07 13:05:41Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -95,6 +95,29 @@ void darwinSetShowsToolbarButtonImpl(NativeNSWindowRef pWindow, bool fEnabled) [pWindow setShowsToolbarButton:fEnabled]; } +void darwinLabelWindow(NativeNSWindowRef pWindow, NativeNSImageRef pImage, bool fCenter) +{ + /* Get the parent view of the close button. */ + NSView *wv = [[pWindow standardWindowButton:NSWindowCloseButton] superview]; + if (wv) + { + /* We have to calculate the size of the title bar for the center case. */ + NSSize s = [pImage size]; + NSSize s1 = [wv frame].size; + NSSize s2 = [[pWindow contentView] frame].size; + /* Correctly position the label. */ + NSImageView *iv = [[NSImageView alloc] initWithFrame:NSMakeRect(s1.width - s.width - (fCenter ? 10 : 0), + fCenter ? s2.height + (s1.height - s2.height - s.height) / 2 : s1.height - s.height - 1, + s.width, s.height)]; + /* Configure the NSImageView for auto moving. */ + [iv setImage:pImage]; + [iv setAutoresizesSubviews:true]; + [iv setAutoresizingMask:NSViewMinXMargin | NSViewMinYMargin]; + /* Add it to the parent of the close button. */ + [wv addSubview:iv positioned:NSWindowBelow relativeTo:nil]; + } +} + void darwinSetShowsResizeIndicatorImpl(NativeNSWindowRef pWindow, bool fEnabled) { [pWindow setShowsResizeIndicator:fEnabled]; diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.cpp b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.cpp index a66d839c6..65db3d19d 100644 --- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.cpp +++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxUtils-darwin.cpp 34401 2010-11-26 16:37:51Z vboxsync $ */ +/* $Id: VBoxUtils-darwin.cpp 35424 2011-01-07 13:05:41Z vboxsync $ */ /** @file * Qt GUI - Utility Classes and Functions specific to Darwin. */ @@ -66,6 +66,11 @@ void darwinSetShowsToolbarButton(QToolBar *aToolBar, bool fEnabled) ::darwinSetShowsToolbarButtonImpl(::darwinToNativeWindow(parent), fEnabled); } +void darwinLabelWindow(QWidget *pWidget, QPixmap *pPixmap, bool fCenter) +{ + ::darwinLabelWindow(::darwinToNativeWindow(pWidget), ::darwinToNSImageRef(pPixmap), fCenter); +} + void darwinSetHidesAllTitleButtons(QWidget *pWidget) { #ifdef QT_MAC_USE_COCOA diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h index 495e50a42..85d069aa9 100644 --- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h +++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h @@ -58,6 +58,7 @@ NativeNSStringRef darwinToNativeString(const char* pcszString); void darwinSetShowsToolbarButtonImpl(NativeNSWindowRef pWindow, bool fEnabled); void darwinSetShowsResizeIndicatorImpl(NativeNSWindowRef pWindow, bool fEnabled); void darwinSetHidesAllTitleButtonsImpl(NativeNSWindowRef pWindow); +void darwinLabelWindow(NativeNSWindowRef pWindow, NativeNSImageRef pImage, bool fCenter); void darwinSetShowsWindowTransparentImpl(NativeNSWindowRef pWindow, bool fEnabled); void darwinSetMouseCoalescingEnabled(bool fEnabled); @@ -173,6 +174,7 @@ NativeNSImageRef darwinToNSImageRef(const char *pczSource); * ********************************************************************************/ void darwinSetShowsToolbarButton(QToolBar *aToolBar, bool fEnabled); +void darwinLabelWindow(QWidget *pWidget, QPixmap *pPixmap, bool fCenter); void darwinSetShowsResizeIndicator(QWidget *pWidget, bool fEnabled); void darwinSetHidesAllTitleButtons(QWidget *pWidget); void darwinSetShowsWindowTransparent(QWidget *pWidget, bool fEnabled); diff --git a/src/VBox/Frontends/VirtualBox/src/precomp.h b/src/VBox/Frontends/VirtualBox/src/precomp.h index 2d4017e36..b0f962d6d 100644 --- a/src/VBox/Frontends/VirtualBox/src/precomp.h +++ b/src/VBox/Frontends/VirtualBox/src/precomp.h @@ -1,4 +1,4 @@ -/* $Id: precomp.h 33882 2010-11-09 09:32:27Z vboxsync $*/ +/* $Id: precomp.h 35347 2010-12-27 16:25:58Z vboxsync $*/ /** @file * Header used if VBOX_WITH_PRECOMPILED_HEADERS is active. */ @@ -319,7 +319,7 @@ RT_C_DECLS_END /* rhel3 build hack */ #include <VBox/VBoxGL2D.h> #ifdef VBOX_WITH_VIDEOHWACCEL # include <VBox/VBoxVideo.h> -# include <VBox/ssm.h> +# include <VBox/vmm/ssm.h> #endif #ifdef Q_WS_MAC diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h index 82358a99a..b522901b2 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h +++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2010 Oracle Corporation + * Copyright (C) 2010-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -235,8 +235,8 @@ protected: UIMachineView *m_pMachineView; RTCRITSECT m_critSect; - int m_width; - int m_height; + ulong m_width; + ulong m_height; QSize m_scaledSize; int64_t m_WinId; bool m_fIsDeleted; diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp index 00d8e36a2..98cd8d966 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp +++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp @@ -1,4 +1,4 @@ -/* $Id: UIFrameBufferQImage.cpp 34850 2010-12-09 00:06:51Z vboxsync $ */ +/* $Id: UIFrameBufferQImage.cpp 35613 2011-01-18 14:41:37Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -6,7 +6,7 @@ */ /* - * Copyright (C) 2010 Oracle Corporation + * Copyright (C) 2010-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -92,7 +92,7 @@ void UIFrameBufferQImage::paintEvent(QPaintEvent *pEvent) QPainter painter(m_pMachineView->viewport()); - if (r.width() < m_width * 2 / 3) + if ((ulong)r.width() < m_width * 2 / 3) { /* This method is faster for narrow updates */ m_PM = QPixmap::fromImage(pSourceImage->copy(r.x() + m_pMachineView->contentsX(), @@ -185,6 +185,7 @@ void UIFrameBufferQImage::resizeEvent(UIResizeEvent *pEvent) /* we don't support either the pixel format or the color depth, * bFallback to a self-provided 32bpp RGB buffer */ m_img = QImage (m_width, m_height, QImage::Format_RGB32); + m_img.fill(0); m_uPixelFormat = FramebufferPixelFormat_FOURCC_RGB; m_bUsesGuestVRAM = false; } diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQuartz2D.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQuartz2D.cpp index a01b1cfc4..0afac7e17 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQuartz2D.cpp +++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQuartz2D.cpp @@ -1,4 +1,4 @@ -/* $Id: UIFrameBufferQuartz2D.cpp 35281 2010-12-21 17:08:46Z vboxsync $ */ +/* $Id: UIFrameBufferQuartz2D.cpp 35615 2011-01-18 14:48:41Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -398,7 +398,7 @@ void UIFrameBufferQuartz2D::resizeEvent(UIResizeEvent *aEvent) // int bitmapBytesPerRow = RT_ALIGN (m_width * 4, 16); int bitmapBytesPerRow = m_width * 4; int bitmapByteCount = (bitmapBytesPerRow * m_height); - m_pBitmapData = RTMemAlloc(bitmapByteCount); + m_pBitmapData = RTMemAllocZ(bitmapByteCount); CGDataProviderRef dp = CGDataProviderCreateWithData(NULL, m_pBitmapData, bitmapByteCount, NULL); m_image = CGImageCreate(m_width, m_height, 8, 32, bitmapBytesPerRow, cs, kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little, dp, 0, false, diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp index dbaff41dd..c7c042e6c 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp +++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp @@ -1,4 +1,4 @@ -/* $Id: UIKeyboardHandler.cpp 35176 2010-12-16 12:41:00Z vboxsync $ */ +/* $Id: UIKeyboardHandler.cpp 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -315,7 +315,7 @@ bool UIKeyboardHandler::winEventFilter(MSG *pMsg, ulong uScreenId) if (!(pMsg->lParam & 0x80000000)) flags |= KeyPressed; - /* Check for special Korean keys. Based on the keyboard layout selected + /* Check for special Korean keys. Based on the keyboard layout selected * on the host, the scancode in lParam might be 0x71/0x72 or 0xF1/0xF2. * In either case, we must deliver 0xF1/0xF2 scancode to the guest when * the key is pressed and nothing when it's released. @@ -489,7 +489,7 @@ bool UIKeyboardHandler::x11EventFilter(XEvent *pEvent, ulong uScreenId) /* Special Korean keys must send scancode 0xF1/0xF2 when pressed and nothing * when released. */ - if (scan == 0x71 || scan == 0x72) + if (scan == 0x71 || scan == 0x72) { if (pEvent->type == XKeyRelease) /* Ignore. */ { diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.cpp index 2b2eee7c9..706684005 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.cpp +++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.cpp @@ -1,4 +1,4 @@ -/* $Id: UIMachineMenuBar.cpp 34158 2010-11-18 09:56:36Z vboxsync $ */ +/* $Id: UIMachineMenuBar.cpp 35424 2011-01-07 13:05:41Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -24,9 +24,13 @@ #include "VBoxGlobal.h" #include "VBoxProblemReporter.h" #include "UIExtraDataEventHandler.h" +#include "UIImageTools.h" /* Global includes */ #include <QMenuBar> +#include <QPainter> +#include <QPaintEvent> +#include <QPixmapCache> /* Helper QMenu reimplementation which allows * to highlight first menu item for popped up menu: */ @@ -49,6 +53,46 @@ private slots: } }; +class UIMenuBar: public QMenuBar +{ +public: + + UIMenuBar(QWidget *pParent = 0) + : QMenuBar(pParent) + , m_fShowBetaLabel(false) + { + /* Check for beta versions */ + if (vboxGlobal().isBeta()) + m_fShowBetaLabel = true; + } + +protected: + + void paintEvent(QPaintEvent *pEvent) + { + QMenuBar::paintEvent(pEvent); + if (m_fShowBetaLabel) + { + QPixmap betaLabel; + const QString key("vbox:betaLabel"); + if (!QPixmapCache::find(key, betaLabel)) + { + betaLabel = ::betaLabel(); + QPixmapCache::insert(key, betaLabel); + } + QSize s = size(); + QPainter painter(this); + painter.setClipRect(pEvent->rect()); + painter.drawPixmap(s.width() - betaLabel.width() - 10, (height() - betaLabel.height()) / 2, betaLabel); + } + } + +private: + + /* Private member vars */ + bool m_fShowBetaLabel; +}; + UIMachineMenuBar::UIMachineMenuBar() /* On the Mac we add some items only the first time, cause otherwise they * will be merged more than once to the application menu by Qt. */ @@ -72,7 +116,7 @@ QMenu* UIMachineMenuBar::createMenu(UIActionsPool *pActionsPool, UIMainMenuType QMenuBar* UIMachineMenuBar::createMenuBar(UIActionsPool *pActionsPool, UIMainMenuType fOptions /* = UIMainMenuType_All */) { /* Create empty menubar: */ - QMenuBar *pMenuBar = new QMenuBar; + QMenuBar *pMenuBar = new UIMenuBar; /* Fill menubar with prepared items: */ foreach (QMenu *pSubMenu, prepareSubMenus(pActionsPool, fOptions)) diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp index 62582b659..7b9c8321f 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp +++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp @@ -1,4 +1,4 @@ -/* $Id: UIMouseHandler.cpp 34778 2010-12-07 13:26:44Z vboxsync $ */ +/* $Id: UIMouseHandler.cpp 35509 2011-01-12 16:58:16Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -305,6 +305,9 @@ void UIMouseHandler::sltMachineStateChanged() default: break; } + + /* Notify all listeners: */ + emit mouseStateChanged(mouseState()); } /* Mouse capability-change handler: */ @@ -379,8 +382,9 @@ void UIMouseHandler::sltMousePointerShapeChanged() else /* Otherwise we should show host pointer with guest shape assigned to it if: - * mouse is 'integrated', 'absolute', valid pointer shape is present. */ - if (uisession()->isMouseIntegrated() && + * machine is NOT 'paused', mouse is 'integrated', 'absolute', valid pointer shape is present. */ + if (!uisession()->isPaused() && + uisession()->isMouseIntegrated() && uisession()->isMouseSupportsAbsolute() && uisession()->isValidPointerShapePresent()) { @@ -392,8 +396,9 @@ void UIMouseHandler::sltMousePointerShapeChanged() else /* There could be other states covering such situations as: - * 1. mouse is 'not captured', 'integrated', 'not absolute' or - * 2. mouse is 'not captured', 'not integrated', 'absolute'. + * 1. machine is 'paused' or + * 2. mouse is 'not captured', 'integrated', 'not absolute' or + * 3. mouse is 'not captured', 'not integrated', 'absolute'. * We have nothing to do with that except just unset the cursor. */ { QList<ulong> screenIds = m_viewports.keys(); diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp index dfa6715fc..2cc7f5fdc 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp +++ b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp @@ -1,4 +1,4 @@ -/* $Id: UISession.cpp 35141 2010-12-15 15:51:59Z vboxsync $ */ +/* $Id: UISession.cpp 35564 2011-01-14 13:52:02Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -281,6 +281,10 @@ void UISession::powerUp() : "disabled")); #endif +#ifdef VBOX_GUI_WITH_PIDFILE + vboxGlobal().createPidfile(); +#endif + /* Warn listeners about machine was started: */ emit sigMachineStarted(); } diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp index 3407af48f..8e6d52457 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp +++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp @@ -1,4 +1,4 @@ -/* $Id: UIMachineWindowNormal.cpp 30930 2010-07-20 14:26:06Z vboxsync $ */ +/* $Id: UIMachineWindowNormal.cpp 35424 2011-01-07 13:05:41Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -38,6 +38,9 @@ #include "UIMachineView.h" #include "UIDownloaderAdditions.h" #include "UIDownloaderUserManual.h" +#ifdef Q_WS_MAC +# include "UIImageTools.h" +#endif /* Q_WS_MAC */ #include "QIStatusBar.h" #include "QIStateIndicator.h" @@ -89,6 +92,15 @@ UIMachineWindowNormal::UIMachineWindowNormal(UIMachineLogic *pMachineLogic, ulon /* Update all the elements: */ updateAppearanceOf(UIVisualElement_AllStuff); +#ifdef Q_WS_MAC + /* Beta label? */ + if (vboxGlobal().isBeta()) + { + QPixmap betaLabel = ::betaLabel(QSize(100, 16)); + ::darwinLabelWindow(this, &betaLabel, true); + } +#endif /* Q_WS_MAC */ + /* Show window: */ showSimple(); } diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp index d11f8e17d..d2c8af97c 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp +++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp @@ -1,4 +1,4 @@ -/* $Id: UIMachineWindowScale.cpp 35247 2010-12-20 14:19:48Z vboxsync $ */ +/* $Id: UIMachineWindowScale.cpp 35424 2011-01-07 13:05:41Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -33,6 +33,9 @@ #include "UIMachineLogic.h" #include "UIMachineView.h" #include "UIMachineWindowScale.h" +#ifdef Q_WS_MAC +# include "UIImageTools.h" +#endif /* Q_WS_MAC */ UIMachineWindowScale::UIMachineWindowScale(UIMachineLogic *pMachineLogic, ulong uScreenId) : QIWithRetranslateUI2<QMainWindow>(0, Qt::Window) @@ -73,6 +76,16 @@ UIMachineWindowScale::UIMachineWindowScale(UIMachineLogic *pMachineLogic, ulong /* Update all the elements: */ updateAppearanceOf(UIVisualElement_AllStuff); +#ifdef Q_WS_MAC + /* Beta label? */ + if (vboxGlobal().isBeta()) + { + QPixmap betaLabel = ::betaLabel(QSize(100, 16)); + ::darwinLabelWindow(this, &betaLabel, true); + } +#endif /* Q_WS_MAC */ + + /* Show window: */ showSimple(); } diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h index 9efb1c48b..5f26a095c 100644 --- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h +++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h @@ -55,7 +55,7 @@ private: /* Event handlers: */ bool event(QEvent *pEvent); #ifdef Q_WS_WIN - bool winEvent(MSG *pMessage, long *pResult); + bool winEvent(MSG *pMessage, long *pResult); #endif #ifdef Q_WS_X11 bool x11Event(XEvent *pEvent); diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp index bf6eaddb5..c21d3586e 100644 --- a/src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp +++ b/src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp @@ -1,4 +1,4 @@ -/* $Id: UIVMDesktop.cpp 33471 2010-10-26 14:19:13Z vboxsync $ */ +/* $Id: UIVMDesktop.cpp 35415 2011-01-06 17:33:14Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -1357,7 +1357,11 @@ UIVMDesktop::UIVMDesktop(UIToolBar *pToolBar, QAction *pRefreshAction, QWidget * pToolBar->addWidget(new UIHorizontalSpacerWidget(this)); pToolBar->addWidget(m_pHeaderBtn); QWidget *pSpace = new QWidget(this); - pSpace->setFixedSize(10, 1); + /* We need a little bit more space for the beta label. */ + if (vboxGlobal().isBeta()) + pSpace->setFixedSize(28, 1); + else + pSpace->setFixedSize(10, 1); pToolBar->addWidget(pSpace); pToolBar->updateLayout(); } else diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.h b/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.h index 78aa463f4..d71e1df69 100644 --- a/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.h +++ b/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.h @@ -55,6 +55,8 @@ public: KMachineState machineState() const { return m_machineState; } KSessionState sessionState() const { return m_sessionState; } + QString settingsFile() const { return m_strSettingsFile; } + bool recache(); bool canSwitchTo() const; diff --git a/src/VBox/Frontends/VirtualBox/src/selector/VBoxSelectorWnd.cpp b/src/VBox/Frontends/VirtualBox/src/selector/VBoxSelectorWnd.cpp index 08bb7f1bb..61d54a5a6 100644 --- a/src/VBox/Frontends/VirtualBox/src/selector/VBoxSelectorWnd.cpp +++ b/src/VBox/Frontends/VirtualBox/src/selector/VBoxSelectorWnd.cpp @@ -48,6 +48,7 @@ #ifdef Q_WS_MAC # include "VBoxUtils.h" # include "UIWindowMenuManager.h" +# include "UIImageTools.h" #endif /* Global includes */ @@ -220,7 +221,7 @@ VBoxSelectorWnd(VBoxSelectorWnd **aSelf, QWidget* aParent, pLeftVLayout->setContentsMargins(0, 0, 0, 0); pLeftVLayout->setSpacing(0); # ifdef BIG_TOOLBAR - m_pBar = new UIBar(this); + m_pBar = new UIMainBar(this); m_pBar->setContentWidget(mVMToolBar); pLeftVLayout->addWidget(m_pBar); pLeftVLayout->addWidget(m_pSplitter); @@ -431,7 +432,7 @@ VBoxSelectorWnd(VBoxSelectorWnd **aSelf, QWidget* aParent, connect(mVmNewAction, SIGNAL(triggered()), this, SLOT(vmNew())); connect(mVmAddAction, SIGNAL(triggered()), this, SLOT(vmAdd())); - connect(mVmConfigAction, SIGNAL(triggered()), this, SLOT(vmSettings()), Qt::QueuedConnection); + connect(mVmConfigAction, SIGNAL(triggered()), this, SLOT(vmSettings())); connect(mVmDeleteAction, SIGNAL(triggered()), this, SLOT(vmDelete())); connect(mVmStartAction, SIGNAL(triggered()), this, SLOT(vmStart())); connect(mVmDiscardAction, SIGNAL(triggered()), this, SLOT(vmDiscard())); @@ -487,6 +488,12 @@ VBoxSelectorWnd(VBoxSelectorWnd **aSelf, QWidget* aParent, #ifdef Q_WS_MAC UIWindowMenuManager::instance()->addWindow(this); + /* Beta label? */ + if (vboxGlobal().isBeta()) + { + QPixmap betaLabel = ::betaLabelSleeve(QSize(107, 16)); + ::darwinLabelWindow(this, &betaLabel, false); + } #endif /* Q_WS_MAC */ } @@ -1178,7 +1185,7 @@ void VBoxSelectorWnd::retranslateUi() #else QString title(VBOX_PRODUCT); #endif - title += " " + tr("Manager"); + title += " " + tr("Manager", "Note: main window title which is pretended by the product name."); #ifdef VBOX_BLEEDING_EDGE title += QString(" EXPERIMENTAL build ") @@ -1426,7 +1433,14 @@ void VBoxSelectorWnd::vmListViewCurrentChanged(bool aRefreshDetails, mVmShowLogsAction->setEnabled(true); /* Enable the shell interaction features. */ mVmOpenInFileManagerAction->setEnabled(true); +#ifdef Q_WS_MAC + /* On Mac OS X this are real alias files, which don't work with the old + * legacy xml files. On the other OS's some kind of start up script is + * used. */ + mVmCreateShortcut->setEnabled(item->settingsFile().endsWith(".vbox", Qt::CaseInsensitive)); +#else /* Q_WS_MAC */ mVmCreateShortcut->setEnabled(true); +#endif /* Q_WS_MAC */ } else { diff --git a/src/VBox/Frontends/VirtualBox/src/selector/VBoxSelectorWnd.h b/src/VBox/Frontends/VirtualBox/src/selector/VBoxSelectorWnd.h index 36d09b3ca..fb76cc186 100644 --- a/src/VBox/Frontends/VirtualBox/src/selector/VBoxSelectorWnd.h +++ b/src/VBox/Frontends/VirtualBox/src/selector/VBoxSelectorWnd.h @@ -35,7 +35,7 @@ /* Local forward declarations */ class QISplitter; -class UIBar; +class UIMainBar; class UIVMDesktop; class UIVMItem; class UIVMItemModel; @@ -148,7 +148,7 @@ private: /* Main toolbar */ #ifndef Q_WS_MAC - UIBar *m_pBar; + UIMainBar *m_pBar; #endif /* !Q_WS_MAC */ UIToolBar *mVMToolBar; diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsLanguage.cpp b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsLanguage.cpp index c2b717958..afb4ee14b 100644 --- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsLanguage.cpp +++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsLanguage.cpp @@ -1,4 +1,4 @@ -/* $Id: UIGlobalSettingsLanguage.cpp 33961 2010-11-11 10:00:58Z vboxsync $ */ +/* $Id: UIGlobalSettingsLanguage.cpp 35522 2011-01-13 13:06:44Z vboxsync $ */ /** @file * * VBox frontends: Qt4 GUI ("VirtualBox"): @@ -232,10 +232,7 @@ void UIGlobalSettingsLanguage::saveFromCacheTo(QVariant &data) /* Save from cache: */ if (m_fIsLanguageChanged) - { m_settings.setLanguageId(m_cache.m_strLanguageId); - VBoxGlobal::loadLanguage(m_cache.m_strLanguageId); - } /* Upload properties & settings to data: */ UISettingsPageGlobal::uploadData(data); @@ -343,7 +340,7 @@ void UIGlobalSettingsLanguage::sltLanguageItemPainted(QTreeWidgetItem *pItem, QP } } -/* Slot to handle currentl language change fact: */ +/* Slot to handle currently language change fact: */ void UIGlobalSettingsLanguage::sltCurrentLanguageChanged(QTreeWidgetItem *pItem) { if (!pItem) return; diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp index eca52cf99..997f87eab 100644 --- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp +++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp @@ -1,4 +1,4 @@ -/* $Id: UIGlobalSettingsNetwork.cpp 34740 2010-12-06 11:56:28Z vboxsync $ */ +/* $Id: UIGlobalSettingsNetwork.cpp 35552 2011-01-13 18:17:02Z vboxsync $ */ /** @file * * VBox frontends: Qt4 GUI ("VirtualBox"): @@ -256,30 +256,7 @@ void UIGlobalSettingsNetwork::loadToCacheFrom(QVariant &data) { const CHostNetworkInterface &iface = interfaces[iNetworkIndex]; if (iface.GetInterfaceType() == KHostNetworkInterfaceType_HostOnly) - { - /* Initialization: */ - CDHCPServer dhcp = vboxGlobal().virtualBox().FindDHCPServerByNetworkName(iface.GetNetworkName()); - if (dhcp.isNull()) vboxGlobal().virtualBox().CreateDHCPServer(iface.GetNetworkName()); - dhcp = vboxGlobal().virtualBox().FindDHCPServerByNetworkName(iface.GetNetworkName()); - AssertMsg(!dhcp.isNull(), ("DHCP Server creation failed!\n")); - UIHostNetworkData data; - /* Host-only interface settings */ - data.m_interface.m_strName = iface.GetName(); - data.m_interface.m_fDhcpClientEnabled = iface.GetDhcpEnabled(); - data.m_interface.m_strInterfaceAddress = iface.GetIPAddress(); - data.m_interface.m_strInterfaceMask = iface.GetNetworkMask(); - data.m_interface.m_fIpv6Supported = iface.GetIPV6Supported(); - data.m_interface.m_strInterfaceAddress6 = iface.GetIPV6Address(); - data.m_interface.m_strInterfaceMaskLength6 = QString::number(iface.GetIPV6NetworkMaskPrefixLength()); - /* DHCP server settings: */ - data.m_dhcpserver.m_fDhcpServerEnabled = dhcp.GetEnabled(); - data.m_dhcpserver.m_strDhcpServerAddress = dhcp.GetIPAddress(); - data.m_dhcpserver.m_strDhcpServerMask = dhcp.GetNetworkMask(); - data.m_dhcpserver.m_strDhcpLowerAddress = dhcp.GetLowerIP(); - data.m_dhcpserver.m_strDhcpUpperAddress = dhcp.GetUpperIP(); - /* Cache: */ - m_cache.m_items << data; - } + appendCacheItem(iface); } /* Upload properties & settings to data: */ @@ -292,12 +269,8 @@ void UIGlobalSettingsNetwork::getFromCache() { /* Fetch from cache: */ for (int iNetworkIndex = 0; iNetworkIndex < m_cache.m_items.size(); ++iNetworkIndex) - { - const UIHostNetworkData &data = m_cache.m_items[iNetworkIndex]; - UIHostInterfaceItem *pItem = new UIHostInterfaceItem; - pItem->fetchNetworkData(data); - m_pInterfacesTree->addTopLevelItem(pItem); - } + appendListItem(m_cache.m_items[iNetworkIndex]); + /* Set first list item as current: */ m_pInterfacesTree->setCurrentItem(m_pInterfacesTree->topLevelItem(0)); sltUpdateCurrentItem(); } @@ -306,8 +279,9 @@ void UIGlobalSettingsNetwork::getFromCache() * this task SHOULD be performed in GUI thread only: */ void UIGlobalSettingsNetwork::putToCache() { - /* Upload to cache: */ + /* Eraze cache: */ m_cache.m_items.clear(); + /* Upload to cache: */ for (int iNetworkIndex = 0; iNetworkIndex < m_pInterfacesTree->topLevelItemCount(); ++iNetworkIndex) { UIHostNetworkData data; @@ -328,94 +302,56 @@ void UIGlobalSettingsNetwork::saveFromCacheTo(QVariant &data) /* Fetch data to properties & settings: */ UISettingsPageGlobal::fetchData(data); - /* Save from cache: */ + /* Prepare useful variables: */ CVirtualBox vbox = vboxGlobal().virtualBox(); CHost host = vbox.GetHost(); - const CHostNetworkInterfaceVector &interfaces = host.GetNetworkInterfaces(); - /* Remove all the old interfaces first: */ - for (int iNetworkIndex = 0; iNetworkIndex < interfaces.size() && !failed(); ++iNetworkIndex) + + /* Update all the host-only interfaces: */ + for (int iNetworkIndex = 0; iNetworkIndex < m_cache.m_items.size(); ++iNetworkIndex) { - /* Get iterated interface: */ - const CHostNetworkInterface &iface = interfaces[iNetworkIndex]; - if (iface.GetInterfaceType() == KHostNetworkInterfaceType_HostOnly) + /* Get iterated data: */ + const UIHostNetworkData &data = m_cache.m_items[iNetworkIndex]; + /* Find corresponding interface: */ + CHostNetworkInterface iface = host.FindHostNetworkInterfaceByName(data.m_interface.m_strName); + if (!iface.isNull()) { - /* Search for this interface's dhcp sserver: */ - CDHCPServer dhcp = vboxGlobal().virtualBox().FindDHCPServerByNetworkName(iface.GetNetworkName()); - /* Delete it if its present: */ - if (!dhcp.isNull()) - vbox.RemoveDHCPServer(dhcp); - /* Delete interface finally: */ - CProgress progress = host.RemoveHostOnlyNetworkInterface(iface.GetId()); - if (host.isOk()) + /* Host-only interface configuring: */ + if (data.m_interface.m_fDhcpClientEnabled) { - progress.WaitForCompletion(-1); - if (progress.GetResultCode() != 0) - { - /* Mark the page as failed: */ - setFailed(true); - /* Show error message: */ - vboxProblem().cannotRemoveHostInterface(progress, iface); - } + iface.EnableDynamicIpConfig(); } else { - /* Mark the page as failed: */ - setFailed(true); - /* Show error message: */ - vboxProblem().cannotRemoveHostInterface(host, iface); - } - } - } - /* Add all the new interfaces finally: */ - for (int iNetworkIndex = 0; iNetworkIndex < m_cache.m_items.size() && !failed(); ++iNetworkIndex) - { - /* Get iterated data: */ - const UIHostNetworkData &data = m_cache.m_items[iNetworkIndex]; - CHostNetworkInterface iface; - /* Create interface: */ - CProgress progress = host.CreateHostOnlyNetworkInterface(iface); - if (host.isOk()) - { - progress.WaitForCompletion(-1); - if (progress.GetResultCode() == 0) - { - /* Create DHCP server: */ - CDHCPServer dhcp = vbox.FindDHCPServerByNetworkName(iface.GetNetworkName()); - if (dhcp.isNull()) vbox.CreateDHCPServer(iface.GetNetworkName()); - dhcp = vbox.FindDHCPServerByNetworkName(iface.GetNetworkName()); - AssertMsg(!dhcp.isNull(), ("DHCP Server creation failed!\n")); - /* Host-only Interface configuring: */ - if (data.m_interface.m_fDhcpClientEnabled) + AssertMsg(data.m_interface.m_strInterfaceAddress.isEmpty() || + QHostAddress(data.m_interface.m_strInterfaceAddress).protocol() == QAbstractSocket::IPv4Protocol, + ("Interface IPv4 address must be empty or IPv4-valid!\n")); + AssertMsg(data.m_interface.m_strInterfaceMask.isEmpty() || + QHostAddress(data.m_interface.m_strInterfaceMask).protocol() == QAbstractSocket::IPv4Protocol, + ("Interface IPv4 network mask must be empty or IPv4-valid!\n")); + iface.EnableStaticIpConfig(data.m_interface.m_strInterfaceAddress, data.m_interface.m_strInterfaceMask); + if (iface.GetIPV6Supported()) { - iface.EnableDynamicIpConfig(); + AssertMsg(data.m_interface.m_strInterfaceAddress6.isEmpty() || + QHostAddress(data.m_interface.m_strInterfaceAddress6).protocol() == QAbstractSocket::IPv6Protocol, + ("Interface IPv6 address must be empty or IPv6-valid!\n")); + iface.EnableStaticIpConfigV6(data.m_interface.m_strInterfaceAddress6, data.m_interface.m_strInterfaceMaskLength6.toULong()); } - else - { - AssertMsg(data.m_interface.m_strInterfaceAddress.isEmpty() || - QHostAddress(data.m_interface.m_strInterfaceAddress).protocol() == QAbstractSocket::IPv4Protocol, - ("Interface IPv4 address must be empty or IPv4-valid!\n")); - AssertMsg(data.m_interface.m_strInterfaceMask.isEmpty() || - QHostAddress(data.m_interface.m_strInterfaceMask).protocol() == QAbstractSocket::IPv4Protocol, - ("Interface IPv4 network mask must be empty or IPv4-valid!\n")); - iface.EnableStaticIpConfig(data.m_interface.m_strInterfaceAddress, data.m_interface.m_strInterfaceMask); - if (iface.GetIPV6Supported()) - { - AssertMsg(data.m_interface.m_strInterfaceAddress6.isEmpty() || - QHostAddress(data.m_interface.m_strInterfaceAddress6).protocol() == QAbstractSocket::IPv6Protocol, - ("Interface IPv6 address must be empty or IPv6-valid!\n")); - iface.EnableStaticIpConfigV6(data.m_interface.m_strInterfaceAddress6, data.m_interface.m_strInterfaceMaskLength6.toULong()); - } - } - /* DHCP Server configuring: */ + } + + /* Find corresponding DHCP server: */ + CDHCPServer dhcp = vbox.FindDHCPServerByNetworkName(iface.GetNetworkName()); + if (!dhcp.isNull()) + { + /* DHCP server configuring: */ dhcp.SetEnabled(data.m_dhcpserver.m_fDhcpServerEnabled); -// AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpServerAddress).protocol() == QAbstractSocket::IPv4Protocol, -// ("DHCP Server IPv4 address must be IPv4-valid!\n")); -// AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpServerMask).protocol() == QAbstractSocket::IPv4Protocol, -// ("DHCP Server IPv4 network mask must be IPv4-valid!\n")); -// AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpLowerAddress).protocol() == QAbstractSocket::IPv4Protocol, -// ("DHCP Server IPv4 lower bound must be IPv4-valid!\n")); -// AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpUpperAddress).protocol() == QAbstractSocket::IPv4Protocol, -// ("DHCP Server IPv4 upper bound must be IPv4-valid!\n")); + AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpServerAddress).protocol() == QAbstractSocket::IPv4Protocol, + ("DHCP server IPv4 address must be IPv4-valid!\n")); + AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpServerMask).protocol() == QAbstractSocket::IPv4Protocol, + ("DHCP server IPv4 network mask must be IPv4-valid!\n")); + AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpLowerAddress).protocol() == QAbstractSocket::IPv4Protocol, + ("DHCP server IPv4 lower bound must be IPv4-valid!\n")); + AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpUpperAddress).protocol() == QAbstractSocket::IPv4Protocol, + ("DHCP server IPv4 upper bound must be IPv4-valid!\n")); if (QHostAddress(data.m_dhcpserver.m_strDhcpServerAddress).protocol() == QAbstractSocket::IPv4Protocol && QHostAddress(data.m_dhcpserver.m_strDhcpServerMask).protocol() == QAbstractSocket::IPv4Protocol && QHostAddress(data.m_dhcpserver.m_strDhcpLowerAddress).protocol() == QAbstractSocket::IPv4Protocol && @@ -423,20 +359,6 @@ void UIGlobalSettingsNetwork::saveFromCacheTo(QVariant &data) dhcp.SetConfiguration(data.m_dhcpserver.m_strDhcpServerAddress, data.m_dhcpserver.m_strDhcpServerMask, data.m_dhcpserver.m_strDhcpLowerAddress, data.m_dhcpserver.m_strDhcpUpperAddress); } - else - { - /* Mark the page as failed: */ - setFailed(true); - /* Show error message: */ - vboxProblem().cannotCreateHostInterface(progress); - } - } - else - { - /* Mark the page as failed: */ - setFailed(true); - /* Show error message: */ - vboxProblem().cannotCreateHostInterface(host); } } @@ -486,25 +408,38 @@ void UIGlobalSettingsNetwork::retranslateUi() /* Adds new network interface: */ void UIGlobalSettingsNetwork::sltAddInterface() { - /* Creating interface item: */ - UIHostInterfaceItem *pItem = new UIHostInterfaceItem; - /* Fill item's data: */ - UIHostNetworkData data; - /* Interface data: */ - // TODO: Make unique name! - data.m_interface.m_strName = tr("New Host-Only Interface"); - data.m_interface.m_fDhcpClientEnabled = true; - data.m_interface.m_fIpv6Supported = false; - /* DHCP data: */ - data.m_dhcpserver.m_fDhcpServerEnabled = false; - /* Fetch item with data: */ - pItem->fetchNetworkData(data); - /* Add new top-level item: */ - m_pInterfacesTree->addTopLevelItem(pItem); - m_pInterfacesTree->sortItems(0, Qt::AscendingOrder); - m_pInterfacesTree->setCurrentItem(pItem); - /* Mark dialog as edited: */ - m_fChanged = true; + /* Prepare useful variables: */ + CVirtualBox vbox = vboxGlobal().virtualBox(); + CHost host = vbox.GetHost(); + + /* Create new host-only interface: */ + CHostNetworkInterface iface; + CProgress progress = host.CreateHostOnlyNetworkInterface(iface); + if (host.isOk()) + { + vboxProblem().showModalProgressDialog(progress, tr("Networking"), + ":/nw_32px.png", this, true, 0); + if (progress.GetResultCode() == 0) + { + /* Create DHCP server: */ + CDHCPServer dhcp = vbox.FindDHCPServerByNetworkName(iface.GetNetworkName()); + if (dhcp.isNull()) + { + vbox.CreateDHCPServer(iface.GetNetworkName()); + dhcp = vbox.FindDHCPServerByNetworkName(iface.GetNetworkName()); + } + AssertMsg(!dhcp.isNull(), ("DHCP server creation failed!\n")); + + /* Append cache with new item: */ + appendCacheItem(iface); + /* Append list with new item: */ + appendListItem(m_cache.m_items.last()); + } + else + vboxProblem().cannotCreateHostInterface(progress); + } + else + vboxProblem().cannotRemoveHostInterface(host, iface); } /* Removes selected network interface: */ @@ -518,10 +453,37 @@ void UIGlobalSettingsNetwork::sltDelInterface() /* Asking user about deleting selected network interface: */ if (vboxProblem().confirmDeletingHostInterface(strInterfaceName, this) == QIMessageBox::Cancel) return; - /* Removing interface: */ - delete pItem; - /* Mark dialog as edited: */ - m_fChanged = true; + + /* Prepare useful variables: */ + CVirtualBox vbox = vboxGlobal().virtualBox(); + CHost host = vbox.GetHost(); + + /* Find corresponding interface: */ + const CHostNetworkInterface &iface = host.FindHostNetworkInterfaceByName(strInterfaceName); + + /* Remove DHCP server first: */ + CDHCPServer dhcp = vboxGlobal().virtualBox().FindDHCPServerByNetworkName(iface.GetNetworkName()); + if (!dhcp.isNull()) + vbox.RemoveDHCPServer(dhcp); + + /* Remove interface finally: */ + CProgress progress = host.RemoveHostOnlyNetworkInterface(iface.GetId()); + if (host.isOk()) + { + vboxProblem().showModalProgressDialog(progress, tr("Networking"), + ":/nw_32px.png", this, true, 0); + if (progress.GetResultCode() == 0) + { + /* Remove list item: */ + removeListItem(pItem); + /* Remove cache item: */ + removeCacheItem(strInterfaceName); + } + else + vboxProblem().cannotRemoveHostInterface(progress, iface); + } + else + vboxProblem().cannotRemoveHostInterface(host, iface); } /* Edits selected network interface: */ @@ -537,11 +499,10 @@ void UIGlobalSettingsNetwork::sltEditInterface() { details.putBackToItem(); pItem->updateInfo(); + sltUpdateCurrentItem(); + m_pValidator->revalidate(); + m_fChanged = true; } - sltUpdateCurrentItem(); - m_pValidator->revalidate(); - /* Mark dialog as edited: */ - m_fChanged = true; } /* Update current network interface data relations: */ @@ -569,7 +530,69 @@ void UIGlobalSettingsNetwork::sltChowContextMenu(const QPoint &pos) { menu.addAction(m_pAddAction); } - menu.exec(m_pInterfacesTree->mapToGlobal(pos)); } +void UIGlobalSettingsNetwork::appendCacheItem(const CHostNetworkInterface &iface) +{ + /* Get DHCP server (create if necessary): */ + CDHCPServer dhcp = vboxGlobal().virtualBox().FindDHCPServerByNetworkName(iface.GetNetworkName()); + if (dhcp.isNull()) + { + vboxGlobal().virtualBox().CreateDHCPServer(iface.GetNetworkName()); + dhcp = vboxGlobal().virtualBox().FindDHCPServerByNetworkName(iface.GetNetworkName()); + } + AssertMsg(!dhcp.isNull(), ("DHCP server creation failed!\n")); + + /* Prepare cache item: */ + UIHostNetworkData data; + + /* Host-only interface settings */ + data.m_interface.m_strName = iface.GetName(); + data.m_interface.m_fDhcpClientEnabled = iface.GetDhcpEnabled(); + data.m_interface.m_strInterfaceAddress = iface.GetIPAddress(); + data.m_interface.m_strInterfaceMask = iface.GetNetworkMask(); + data.m_interface.m_fIpv6Supported = iface.GetIPV6Supported(); + data.m_interface.m_strInterfaceAddress6 = iface.GetIPV6Address(); + data.m_interface.m_strInterfaceMaskLength6 = QString::number(iface.GetIPV6NetworkMaskPrefixLength()); + + /* DHCP server settings: */ + data.m_dhcpserver.m_fDhcpServerEnabled = dhcp.GetEnabled(); + data.m_dhcpserver.m_strDhcpServerAddress = dhcp.GetIPAddress(); + data.m_dhcpserver.m_strDhcpServerMask = dhcp.GetNetworkMask(); + data.m_dhcpserver.m_strDhcpLowerAddress = dhcp.GetLowerIP(); + data.m_dhcpserver.m_strDhcpUpperAddress = dhcp.GetUpperIP(); + + /* Append cache item: */ + m_cache.m_items << data; +} + +void UIGlobalSettingsNetwork::removeCacheItem(const QString &strInterfaceName) +{ + /* Search for invalidated cache item: */ + for (int iNetworkIndex = 0; iNetworkIndex < m_cache.m_items.size(); ++iNetworkIndex) + { + /* Get iterated data: */ + const UIHostNetworkData &data = m_cache.m_items[iNetworkIndex]; + if (data.m_interface.m_strName == strInterfaceName) + { + m_cache.m_items.removeAll(data); + break; + } + } +} + +void UIGlobalSettingsNetwork::appendListItem(const UIHostNetworkData &data) +{ + /* Add new item to the list: */ + UIHostInterfaceItem *pItem = new UIHostInterfaceItem; + pItem->fetchNetworkData(data); + m_pInterfacesTree->addTopLevelItem(pItem); +} + +void UIGlobalSettingsNetwork::removeListItem(UIHostInterfaceItem *pItem) +{ + /* Delete passed item: */ + delete pItem; +} + diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.h b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.h index a67bb072b..36491dfb2 100644 --- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.h +++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.h @@ -34,6 +34,16 @@ struct UIHostInterfaceData bool m_fIpv6Supported; QString m_strInterfaceAddress6; QString m_strInterfaceMaskLength6; + bool operator==(const UIHostInterfaceData &other) const + { + return m_strName == other.m_strName && + m_fDhcpClientEnabled == other.m_fDhcpClientEnabled && + m_strInterfaceAddress == other.m_strInterfaceAddress && + m_strInterfaceMask == other.m_strInterfaceMask && + m_fIpv6Supported == other.m_fIpv6Supported && + m_strInterfaceAddress6 == other.m_strInterfaceAddress6 && + m_strInterfaceMaskLength6 == other.m_strInterfaceMaskLength6; + } }; /* Global settings / Network page / DHCP server data: */ @@ -45,6 +55,14 @@ struct UIDHCPServerData QString m_strDhcpServerMask; QString m_strDhcpLowerAddress; QString m_strDhcpUpperAddress; + bool operator==(const UIDHCPServerData &other) const + { + return m_fDhcpServerEnabled == other.m_fDhcpServerEnabled && + m_strDhcpServerAddress == other.m_strDhcpServerAddress && + m_strDhcpServerMask == other.m_strDhcpServerMask && + m_strDhcpLowerAddress == other.m_strDhcpLowerAddress && + m_strDhcpUpperAddress == other.m_strDhcpUpperAddress; + } }; /* Global settings / Network page / Full network data: */ @@ -52,6 +70,11 @@ struct UIHostNetworkData { UIHostInterfaceData m_interface; UIDHCPServerData m_dhcpserver; + bool operator==(const UIHostNetworkData &other) const + { + return m_interface == other.m_interface && + m_dhcpserver == other.m_dhcpserver; + } }; /* Global settings / Network page / Cache: */ @@ -160,6 +183,12 @@ private slots: private: + /* Helper members: */ + void appendCacheItem(const CHostNetworkInterface &iface); + void removeCacheItem(const QString &strInterfaceName); + void appendListItem(const UIHostNetworkData &data); + void removeListItem(UIHostInterfaceItem *pItem); + /* Validator: */ QIWidgetValidator *m_pValidator; diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.cpp index cc7ee699f..074d478c9 100644 --- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.cpp +++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.cpp @@ -1,4 +1,4 @@ -/* $Id: UIMachineSettingsGeneral.cpp 33882 2010-11-09 09:32:27Z vboxsync $ */ +/* $Id: UIMachineSettingsGeneral.cpp 35476 2011-01-11 10:52:14Z vboxsync $ */ /** @file * * VBox frontends: Qt4 GUI ("VirtualBox"): @@ -191,9 +191,3 @@ void UIMachineSettingsGeneral::retranslateUi() mCbClipboard->setItemText (3, vboxGlobal().toString (KClipboardMode_Bidirectional)); } -void UIMachineSettingsGeneral::showEvent (QShowEvent *aEvent) -{ - QCoreApplication::sendPostedEvents(); - UISettingsPage::showEvent (aEvent); -} - diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.h b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.h index 1b98f93ab..dd6e85955 100644 --- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.h +++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.h @@ -81,8 +81,6 @@ protected: private: - void showEvent (QShowEvent *aEvent); - QIWidgetValidator *mValidator; /* Cache: */ diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp index f0b918ca8..c9ff1dd4c 100644 --- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp +++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp @@ -1,4 +1,4 @@ -/* $Id: UIMachineSettingsSF.cpp 34740 2010-12-06 11:56:28Z vboxsync $ */ +/* $Id: UIMachineSettingsSF.cpp 35475 2011-01-11 10:50:13Z vboxsync $ */ /** @file * * VBox frontends: Qt4 GUI ("VirtualBox"): @@ -640,7 +640,7 @@ void UIMachineSettingsSF::adjustFields() void UIMachineSettingsSF::showEvent (QShowEvent *aEvent) { - QWidget::showEvent (aEvent); + UISettingsPageMachine::showEvent (aEvent); /* Connect header-resize signal just before widget is shown after all the items properly loaded and initialized. */ connect (mTwFolders->header(), SIGNAL (sectionResized (int, int, int)), this, SLOT (adjustFields())); diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp index 2950ef105..88169aa5b 100644 --- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp +++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp @@ -1,4 +1,4 @@ -/* $Id: UIMachineSettingsStorage.cpp 35133 2010-12-15 13:32:39Z vboxsync $ */ +/* $Id: UIMachineSettingsStorage.cpp 35475 2011-01-11 10:50:13Z vboxsync $ */ /** @file * * VBox frontends: Qt4 GUI ("VirtualBox"): @@ -764,6 +764,7 @@ StorageModel::StorageModel (QObject *aParent) : QAbstractItemModel (aParent) , mRootItem (new RootItem) , mToolTipType (DefaultToolTip) + , m_chipsetType(KChipsetType_PIIX3) { } @@ -1554,7 +1555,7 @@ void StorageDelegate::paint (QPainter *aPainter, const QStyleOptionViewItem &aOp class UIMediumIDHolder : public QObject { Q_OBJECT; - + public: UIMediumIDHolder(QWidget *pParent) : QObject(pParent) {} @@ -1930,7 +1931,7 @@ void UIMachineSettingsStorage::saveFromCacheTo(QVariant &data) vboxProblem().cannotAttachDevice(m_machine, VBoxDefs::MediumType_HardDisk, vboxMedium.location(), StorageSlot(controllerData.m_controllerBus, attachmentData.m_iAttachmentPort, - attachmentData.m_iAttachmentDevice)); + attachmentData.m_iAttachmentDevice), this); } } if (!failed() && controllerData.m_controllerBus == KStorageBus_SATA) @@ -2054,7 +2055,7 @@ void UIMachineSettingsStorage::showEvent (QShowEvent *aEvent) mLtAttachment->setColumnMinimumWidth (1, maxWidth); #endif } - UISettingsPage::showEvent (aEvent); + UISettingsPageMachine::showEvent (aEvent); } void UIMachineSettingsStorage::mediumUpdated (const VBoxMedium &aMedium) @@ -2461,7 +2462,7 @@ void UIMachineSettingsStorage::sltUnmountDevice() void UIMachineSettingsStorage::sltChooseExistingMedium() { - QString strMachineFolder(QFileInfo(m_machine.GetSettingsFilePath()).absolutePath()); + QString strMachineFolder(QFileInfo(m_machine.GetSettingsFilePath()).absolutePath()); QString strMediumId = vboxGlobal().openMediumWithFileOpenDialog(m_pMediumIdHolder->type(), this, strMachineFolder); if (!strMediumId.isNull()) m_pMediumIdHolder->setId(strMediumId); @@ -2487,7 +2488,7 @@ void UIMachineSettingsStorage::sltChooseRecentMedium() QStringList mediumInfoList = pChooseRecentMediumAction->data().toString().split(','); VBoxDefs::MediumType mediumType = (VBoxDefs::MediumType)mediumInfoList[0].toUInt(); QString strMediumLocation = mediumInfoList[1]; - QString strMediumId = vboxGlobal().openMedium(mediumType, strMediumLocation); + QString strMediumId = vboxGlobal().openMedium(mediumType, strMediumLocation, this); if (!strMediumId.isNull()) m_pMediumIdHolder->setId(strMediumId); } diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIBar.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIBar.cpp index 85013d78d..459f90427 100644 --- a/src/VBox/Frontends/VirtualBox/src/widgets/UIBar.cpp +++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIBar.cpp @@ -1,4 +1,4 @@ -/* $Id: UIBar.cpp 30868 2010-07-16 09:42:12Z vboxsync $ */ +/* $Id: UIBar.cpp 35424 2011-01-07 13:05:41Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -19,11 +19,14 @@ /* Local includes */ #include "UIBar.h" +#include "UIImageTools.h" +#include "VBoxGlobal.h" /* Global includes */ #include <QPaintEvent> #include <QPainter> #include <QVBoxLayout> +#include <QPixmapCache> UIBar::UIBar(QWidget *pParent /* = 0 */) : QWidget(pParent) @@ -106,3 +109,31 @@ void UIBar::paintContent(QPainter *pPainter) #endif /* !Q_WS_MAC */ +UIMainBar::UIMainBar(QWidget *pParent /* = 0 */) + : UIBar(pParent) + , m_fShowBetaLabel(false) +{ + /* Check for beta versions */ + if (vboxGlobal().isBeta()) + m_fShowBetaLabel = true; +} + +void UIMainBar::paintEvent(QPaintEvent *pEvent) +{ + UIBar::paintEvent(pEvent); + if (m_fShowBetaLabel) + { + QPixmap betaLabel; + const QString key("vbox:betaLabelSleeve"); + if (!QPixmapCache::find(key, betaLabel)) + { + betaLabel = ::betaLabelSleeve(); + QPixmapCache::insert(key, betaLabel); + } + QSize s = size(); + QPainter painter(this); + painter.setClipRect(pEvent->rect()); + painter.drawPixmap(s.width() - betaLabel.width(), 0, betaLabel); + } +} + diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIBar.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIBar.h index bbdeb1a6a..0dff7a0bc 100644 --- a/src/VBox/Frontends/VirtualBox/src/widgets/UIBar.h +++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIBar.h @@ -50,5 +50,23 @@ private: QWidget *m_pContentWidget; }; +class UIMainBar: public UIBar +{ + Q_OBJECT; + +public: + + UIMainBar(QWidget *pParent = 0); + +protected: + + void paintEvent(QPaintEvent *pEvent); + +private: + + /* Private member vars */ + bool m_fShowBetaLabel; +}; + #endif /* !__UIBar_h__ */ diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIProgressDialog.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIProgressDialog.cpp index 401c466ca..a24032a73 100644 --- a/src/VBox/Frontends/VirtualBox/src/widgets/UIProgressDialog.cpp +++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIProgressDialog.cpp @@ -1,4 +1,4 @@ -/* $Id: UIProgressDialog.cpp 34479 2010-11-29 16:44:03Z vboxsync $ */ +/* $Id: UIProgressDialog.cpp 35516 2011-01-13 09:42:47Z vboxsync $ */ /** @file * * VBox frontends: Qt GUI ("VirtualBox"): @@ -50,7 +50,6 @@ UIProgressDialog::UIProgressDialog(CProgress &progress, bool fSheetOnDarwin /* = false */, int cMinDuration /* = 2000 */, QWidget *pParent /* = 0 */) -// : QIDialog(aParent, Qt::Sheet | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint) : QIDialog(pParent, Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint) , m_progress(progress) , m_pImageLbl(0) @@ -151,8 +150,16 @@ int UIProgressDialog::run(int cRefreshInterval) /* Start refresh timer */ int id = startTimer(cRefreshInterval); - /* Set busy cursor */ - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + /* Set busy cursor. + * We don't do this on the Mac, cause regarding the design rules of + * Apple there is no busy window behavior. A window should always be + * responsive and is it in our case (We show the progress dialog bar). */ +#ifndef Q_WS_MAC + if (m_fCancelEnabled) + QApplication::setOverrideCursor(QCursor(Qt::BusyCursor)); + else + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); +#endif /* Q_WS_MAC */ /* Enter the modal loop, but don't show the window immediately */ exec(false); @@ -160,7 +167,10 @@ int UIProgressDialog::run(int cRefreshInterval) /* Kill refresh timer */ killTimer(id); +#ifndef Q_WS_MAC + /* Reset the busy cursor */ QApplication::restoreOverrideCursor(); +#endif /* Q_WS_MAC */ return result(); } diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp index f7a0c13d8..24e9d1cac 100644 --- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp +++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp @@ -1,4 +1,4 @@ -/* $Id: UINewVMWzd.cpp 35234 2010-12-20 09:40:31Z vboxsync $ */ +/* $Id: UINewVMWzd.cpp 35587 2011-01-17 14:21:04Z vboxsync $ */ /** @file * * VBox frontends: Qt4 GUI ("VirtualBox"): @@ -265,7 +265,13 @@ bool UINewVMWzdPage2::validatePage() bool UINewVMWzdPage2::createMachineFolder() { /* Cleanup old folder if present: */ - cleanupMachineFolder(); + bool fMachineFolderDeleted = cleanupMachineFolder(); + if (!fMachineFolderDeleted) + { + vboxProblem().warnAboutCannotCreateMachineFolder(this, m_strMachineFolder); + return false; + } + /* Get VBox: */ CVirtualBox vbox = vboxGlobal().virtualBox(); /* Get default machines directory: */ @@ -275,20 +281,25 @@ bool UINewVMWzdPage2::createMachineFolder() QFileInfo fileInfo(strMachineFilename); /* Get machine directory: */ QString strMachineFolder = fileInfo.absolutePath(); + /* Try to create this machine directory (and it's predecessors): */ bool fMachineFolderCreated = QDir().mkpath(strMachineFolder); + if (!fMachineFolderCreated) + { + vboxProblem().warnAboutCannotCreateMachineFolder(this, strMachineFolder); + return false; + } + /* Initialize machine dir value: */ - if (fMachineFolderCreated) - m_strMachineFolder = strMachineFolder; - /* Return creation result: */ - return fMachineFolderCreated; + m_strMachineFolder = strMachineFolder; + return true; } bool UINewVMWzdPage2::cleanupMachineFolder() { /* Return if machine folder was NOT set: */ if (m_strMachineFolder.isEmpty()) - return false; + return true; /* Try to cleanup this machine directory (and it's predecessors): */ bool fMachineFolderRemoved = QDir().rmpath(m_strMachineFolder); /* Reset machine dir value: */ diff --git a/src/VBox/GuestHost/OpenGL/LICENSE b/src/VBox/GuestHost/OpenGL/LICENSE new file mode 100644 index 000000000..d609a3581 --- /dev/null +++ b/src/VBox/GuestHost/OpenGL/LICENSE @@ -0,0 +1,32 @@ +Copyright (c) 2002, Stanford University +All rights reserved. + +Some portions of Chromium are copyrighted by individual organizations. +Please see the files COPYRIGHT.LLNL and COPYRIGHT.REDHAT for more +information. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of Stanford University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/src/VBox/GuestHost/OpenGL/Makefile.kmk b/src/VBox/GuestHost/OpenGL/Makefile.kmk index 317096fca..fa657099e 100644 --- a/src/VBox/GuestHost/OpenGL/Makefile.kmk +++ b/src/VBox/GuestHost/OpenGL/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 35152 2010-12-15 16:45:42Z vboxsync $ +# $Id: Makefile.kmk 35351 2010-12-27 17:04:17Z vboxsync $ ## @file # Sub-Makefile for the VirtualBox Guest/Host OpenGL part # @@ -41,7 +41,7 @@ endif # VBoxOGLcrutil_TEMPLATE = VBOXCROGLR3GUESTDLL if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) - VBoxOGLcrutil_NOINST.win.x86 = true + VBoxOGLcrutil_NOINST.win = true endif VBoxOGLcrutil_SDKS.win = DXSDK VBoxOGLcrutil_INTERMEDIATES = $(VBOX_PATH_CROGL_GENFILES)/cr_opcodes.h @@ -85,11 +85,10 @@ VBoxOGLcrutil_LIBS.win = \ $(PATH_SDK_DXSDK_LIB)/dxguid.lib VBoxOGLcrutil_LIBS = \ $(VBOX_LIB_IPRT_GUEST_R3_SHARED) \ - $(VBOX_LIB_VBGL_R3_SHARED) \ - $(VBOX_LIB_IPRT_GUEST_R3_SHARED) + $(VBOX_LIB_VBGL_R3_SHARED) ifdef VBOX_WITH_CRHGSMI -VBoxOGLcrutil_DEFS.win.x86 += VBOX_WITH_CRHGSMI -VBoxOGLcrutil_LIBS.win.x86 += $(VBOX_PATH_ADDITIONS_LIB)/VBoxCrHgsmi$(VBOX_SUFF_LIB) +VBoxOGLcrutil_DEFS.win += VBOX_WITH_CRHGSMI +VBoxOGLcrutil_LIBS.win += $(VBOX_PATH_ADDITIONS_LIB)/VBoxCrHgsmi$(VBOX_SUFF_LIB) endif VBoxOGLcrutil_CLEAN = \ $(VBOX_PATH_CROGL_GENFILES)/debug_opcodes.c @@ -98,6 +97,29 @@ VBoxOGLcrutil_CLEAN = \ VBoxOGLcrutil_pixel.c_CFLAGS.win.x86 += -Od VBoxOGLhostcrutil_pixel.c_CFLAGS.win.x86 += -Od +if defined(VBOX_WITH_WDDM) && !defined(VBOX_WITHOUT_ADDITIONS) +# +# VBoxOGLcrutil-x86 - x86 VBoxOGLcrutil version built for amd64 build +# +DLLS.win.amd64 += VBoxOGLcrutil-x86 +VBoxOGLcrutil-x86_TEMPLATE = VBOXCROGLR3GUESTDLL +VBoxOGLcrutil-x86_EXTENDS = VBoxOGLcrutil +VBoxOGLcrutil-x86_BLD_TRG_ARCH = x86 +VBoxOGLcrutil-x86_LIBS = $(VBOX_LIB_IPRT_GUEST_R3_SHARED_X86) \ + $(VBOX_LIB_VBGL_R3_SHARED_X86) +VBoxOGLcrutil-x86_LIBS.win = \ + $(PATH_SDK_DXSDK_LIB.x86)/ddraw.lib \ + $(PATH_SDK_DXSDK_LIB.x86)/dxguid.lib +ifdef VBOX_WITH_CRHGSMI +# VBOX_WITH_CRHGSMI define is inherited from VBoxOGLcrutil +VBoxOGLcrutil-x86_LIBS.win += $(VBOX_PATH_ADDITIONS_LIB)/VBoxCrHgsmi-x86$(VBOX_SUFF_LIB) +endif +VBoxOGLcrutil-x86_DEFS = $(VBoxOGLcrutil_DEFS) VBOX_WDDM_WOW64 +# vc7 hangs during compilation of this file when optimizations are enabled. +VBoxOGLcrutil-x86_pixel.c_CFLAGS += -Od +VBoxOGLcrutil-x86_pixel.c_CFLAGS += -Od +endif + # # VBoxOGLhostcrutil # @@ -105,7 +127,7 @@ VBoxOGLhostcrutil_EXTENDS = VBoxOGLcrutil VBoxOGLhostcrutil_TEMPLATE = VBOXCROGLR3HOSTDLL if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) # need to reset the NOINST flag - VBoxOGLhostcrutil_NOINST.win.x86 = $(NO_SUCH_VARIABLE) + VBoxOGLhostcrutil_NOINST.win = $(NO_SUCH_VARIABLE) endif VBoxOGLhostcrutil_LDFLAGS.darwin = $(VBoxOGLcrutil_LDFLAGS.darwin) \ -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxOGLhostcrutil.dylib @@ -116,8 +138,8 @@ VBoxOGLhostcrutil_LDFLAGS.darwin = $(VBoxOGLcrutil_LDFLAGS.darwin) \ VBoxOGLhostcrutil_LIBS.win = $(VBoxOGLcrutil_LIBS.win) VBoxOGLhostcrutil_LIBS = $(LIB_RUNTIME) ifdef VBOX_WITH_CRHGSMI -VBoxOGLhostcrutil_DEFS.win.x86 = $(subst VBOX_WITH_CRHGSMI,,$(VBoxOGLcrutil_DEFS.win.x86)) -VBoxOGLhostcrutil_LIBS.win.x86 = $(subst $(VBOX_PATH_ADDITIONS_LIB)/VBoxCrHgsmi$(VBOX_SUFF_LIB),,$(VBoxOGLcrutil_LIBS.win.x86)) +VBoxOGLhostcrutil_DEFS.win = $(subst VBOX_WITH_CRHGSMI,,$(VBoxOGLcrutil_DEFS.win)) +VBoxOGLhostcrutil_LIBS.win = $(subst $(VBOX_PATH_ADDITIONS_LIB)/VBoxCrHgsmi$(VBOX_SUFF_LIB),,$(VBoxOGLcrutil_LIBS.win)) endif # @@ -127,7 +149,6 @@ $(VBOX_PATH_CROGL_GENFILES)/debug_opcodes.c: $(PATH_SUB_CURRENT)/util/debug_opco $(call MSG_GENERATE,python,$@,$<) $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) - # # VBoxOGLcrpacker # @@ -220,6 +241,17 @@ VBoxOGLcrpacker_CLEAN = \ $(VBOX_PATH_CROGL_GENFILES)/cr_opcodes.h \ $(VBOX_PATH_CROGL_GENFILES)/state/cr_currentpointers.h +if defined(VBOX_WITH_WDDM) && !defined(VBOX_WITHOUT_ADDITIONS) +# +# VBoxOGLcrpacker-x86 - x86 VBoxOGLcrpacker version built for amd64 build +# +LIBRARIES.win.amd64 += VBoxOGLcrpacker-x86 +VBoxOGLcrpacker-x86_TEMPLATE = VBOXCROGLR3GUESTLIB +VBoxOGLcrpacker-x86_EXTENDS = VBoxOGLcrpacker +VBoxOGLcrpacker-x86_BLD_TRG_ARCH = x86 +VBoxOGLcrpacker-x86_DEFS = $(VBoxOGLcrpacker_DEFS) VBOX_WDDM_WOW64 +endif + # # VBoxOGLhostcrpacker # @@ -288,8 +320,20 @@ VBoxOGLspuload_CLEAN = \ $(VBOX_PATH_CROGL_GENFILES)/spu_dispatch_table.h +if defined(VBOX_WITH_WDDM) && !defined(VBOX_WITHOUT_ADDITIONS) # -# VBoxOGLspuload +# VBoxOGLspuload-x86 - x86 VBoxOGLspuload version built for amd64 build +# +LIBRARIES.win.amd64 += VBoxOGLspuload-x86 +VBoxOGLspuload-x86_TEMPLATE = VBOXCROGLR3GUESTLIB +VBoxOGLspuload-x86_EXTENDS = VBoxOGLspuload +VBoxOGLspuload-x86_BLD_TRG_ARCH = x86 +VBoxOGLspuload-x86_DEFS = $(VBoxOGLspuload_DEFS) VBOX_WDDM_WOW64 +endif + + +# +# VBoxOGLhostspuload # VBoxOGLhostspuload_EXTENDS = VBoxOGLspuload VBoxOGLhostspuload_TEMPLATE = VBOXCROGLR3HOSTLIB @@ -401,9 +445,22 @@ VBoxOGLcrstate_CLEAN = \ $(VBOX_PATH_CROGL_GENFILES)/state/cr_statefuncs.h ifneq ($(KBUILD_TARGET),win) state_tracker/state_lists.c_CFLAGS += $(VBOX_GCC_Wno-pointer-sign) -VBoxOGLcrstate_CFLAGS += +VBoxOGLcrstate_CFLAGS += +endif + + +if defined(VBOX_WITH_WDDM) && !defined(VBOX_WITHOUT_ADDITIONS) +# +# VBoxOGLcrstate-x86 - x86 VBoxOGLcrstate version built for amd64 build +# +LIBRARIES.win.amd64 += VBoxOGLcrstate-x86 +VBoxOGLcrstate-x86_TEMPLATE = VBOXCROGLR3GUESTLIB +VBoxOGLcrstate-x86_EXTENDS = VBoxOGLcrstate +VBoxOGLcrstate-x86_BLD_TRG_ARCH = x86 +VBoxOGLcrstate-x86_DEFS = $(VBoxOGLcrstate_DEFS) VBOX_WDDM_WOW64 endif + # # VBoxOGLhostcrstate # @@ -494,7 +551,7 @@ $(VBOX_PATH_CROGL_GENFILES)/state/cr_statefuncs.h: $(addprefix $(PATH_SUB_CURREN # VBoxOGLerrorspu_TEMPLATE = VBOXCROGLR3GUESTDLL if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) - VBoxOGLerrorspu_NOINST.win.x86 = true + VBoxOGLerrorspu_NOINST.win = true endif VBoxOGLerrorspu_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/spu_dispatch_table.h @@ -513,6 +570,19 @@ VBoxOGLerrorspu_CLEAN = \ VBoxOGLerrorspu_LIBS = \ $(VBOX_LIB_OGL_CRUTIL) +if defined(VBOX_WITH_WDDM) && !defined(VBOX_WITHOUT_ADDITIONS) +# +# VBoxOGLerrorspu-x86 - x86 VBoxOGLerrorspu version built for amd64 build +# +DLLS.win.amd64 += VBoxOGLerrorspu-x86 +VBoxOGLerrorspu-x86_TEMPLATE = VBOXCROGLR3GUESTDLL +VBoxOGLerrorspu-x86_EXTENDS = VBoxOGLerrorspu +VBoxOGLerrorspu-x86_BLD_TRG_ARCH = x86 +VBoxOGLerrorspu-x86_LIBS = \ + $(VBOX_LIB_OGL_CRUTIL_X86) +VBoxOGLerrorspu-x86_DEFS = $(VBoxOGLerrorspu_DEFS) VBOX_WDDM_WOW64 +endif + # # VBoxOGLhosterrorspu # @@ -520,7 +590,7 @@ VBoxOGLhosterrorspu_EXTENDS = VBoxOGLerrorspu VBoxOGLhosterrorspu_TEMPLATE = VBOXCROGLR3HOSTDLL if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_WDDM) # need to reset the NOINST flag - VBoxOGLhosterrorspu_NOINST.win.x86 = $(NO_SUCH_VARIABLE) + VBoxOGLhosterrorspu_NOINST.win = $(NO_SUCH_VARIABLE) endif VBoxOGLhosterrorspu_LDFLAGS.darwin += $(VBoxOGLerrorspu_LDFLAGS.darwin) \ -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxOGLhosterrorspu.dylib @@ -534,6 +604,5 @@ VBoxOGLhosterrorspu_LIBS = \ $(VBOX_PATH_CROGL_GENFILES)/errorspu.c: $(PATH_SUB_CURRENT)/error/error.py $(VBOX_CROGL_API_FILES) $(call MSG_GENERATE,python,$@,$<) $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) - include $(KBUILD_PATH)/subfooter.kmk diff --git a/src/VBox/GuestHost/OpenGL/error/errorspu.rc b/src/VBox/GuestHost/OpenGL/error/errorspu.rc index 84eb20c4a..c62821d41 100644 --- a/src/VBox/GuestHost/OpenGL/error/errorspu.rc +++ b/src/VBox/GuestHost/OpenGL/error/errorspu.rc @@ -1,4 +1,4 @@ -/* $Id: errorspu.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: errorspu.rc 35319 2010-12-24 15:42:36Z vboxsync $ */ /** @file * VBoxOGLerrorspu - Resource file containing version info and icon. */ @@ -38,7 +38,11 @@ BEGIN VALUE "FileVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD "." VBOX_SVN_REV "\0" VALUE "InternalName", "VBoxOGLerrorspu\0" VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT +#ifdef VBOX_WDDM_WOW64 + VALUE "OriginalFilename", "VBoxOGLerrorspu-x86.dll\0" +#else VALUE "OriginalFilename", "VBoxOGLerrorspu.dll\0" +#endif VALUE "ProductName", VBOX_PRODUCT " Guest Additions\0" VALUE "ProductVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD ".r" VBOX_SVN_REV "\0" END diff --git a/src/VBox/GuestHost/OpenGL/include/cr_glstate.h b/src/VBox/GuestHost/OpenGL/include/cr_glstate.h index 8c77cdbb4..52703324c 100644 --- a/src/VBox/GuestHost/OpenGL/include/cr_glstate.h +++ b/src/VBox/GuestHost/OpenGL/include/cr_glstate.h @@ -48,7 +48,7 @@ typedef struct CRContext CRContext; #include <iprt/cdefs.h> #ifndef IN_GUEST -#include <VBox/ssm.h> +# include <VBox/vmm/ssm.h> #endif #define CR_MAX_EXTENTS 256 diff --git a/src/VBox/GuestHost/OpenGL/include/cr_server.h b/src/VBox/GuestHost/OpenGL/include/cr_server.h index 0cc793171..2d9bba686 100644 --- a/src/VBox/GuestHost/OpenGL/include/cr_server.h +++ b/src/VBox/GuestHost/OpenGL/include/cr_server.h @@ -19,7 +19,7 @@ #include <iprt/types.h> #include <iprt/err.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #ifdef __cplusplus extern "C" { @@ -55,7 +55,7 @@ typedef struct { GLuint width, height; GLint gX, gY; /*guest coordinates*/ GLint hX, hY; /*host coordinates, screenID related*/ - + int spuWindow; /*the SPU's corresponding window ID */ int screenId; @@ -210,7 +210,7 @@ typedef struct { /*@{*/ GLfloat alignment_matrix[16], unnormalized_alignment_matrix[16]; /*@}*/ - + /** tile overlap/blending info - this should probably be per-mural */ /*@{*/ CRPoly **overlap_geom; diff --git a/src/VBox/GuestHost/OpenGL/spu_loader/spuload.c b/src/VBox/GuestHost/OpenGL/spu_loader/spuload.c index 2bfedb173..f5ad8616d 100644 --- a/src/VBox/GuestHost/OpenGL/spu_loader/spuload.c +++ b/src/VBox/GuestHost/OpenGL/spu_loader/spuload.c @@ -19,7 +19,11 @@ #include <stdio.h> #ifdef WINDOWS +#ifdef VBOX_WDDM_WOW64 +#define DLL_SUFFIX "-x86.dll" +#else #define DLL_SUFFIX ".dll" +#endif #define DLL_PREFIX "VBoxOGL" #define snprintf _snprintf #elif defined(DARWIN) diff --git a/src/VBox/GuestHost/OpenGL/util/util.rc b/src/VBox/GuestHost/OpenGL/util/util.rc index dc9eda271..cff1898b5 100644 --- a/src/VBox/GuestHost/OpenGL/util/util.rc +++ b/src/VBox/GuestHost/OpenGL/util/util.rc @@ -1,4 +1,4 @@ -/* $Id: util.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: util.rc 35319 2010-12-24 15:42:36Z vboxsync $ */ /** @file * VBoxOGLcrutil - Resource file containing version info and icon. */ @@ -38,7 +38,11 @@ BEGIN VALUE "FileVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD "." VBOX_SVN_REV "\0" VALUE "InternalName", "VBoxOGLcrutil\0" VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT +#ifdef VBOX_WDDM_WOW64 + VALUE "OriginalFilename", "VBoxOGLcrutil-x86.dll\0" +#else VALUE "OriginalFilename", "VBoxOGLcrutil.dll\0" +#endif VALUE "ProductName", VBOX_PRODUCT " Guest Additions\0" VALUE "ProductVersion", VBOX_VERSION_MAJOR "." VBOX_VERSION_MINOR "." VBOX_VERSION_BUILD ".r" VBOX_SVN_REV "\0" END diff --git a/src/VBox/GuestHost/SharedClipboard/Makefile.kmk b/src/VBox/GuestHost/SharedClipboard/Makefile.kmk index eaa443c0b..07de4ee07 100644 --- a/src/VBox/GuestHost/SharedClipboard/Makefile.kmk +++ b/src/VBox/GuestHost/SharedClipboard/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the shared clipboard code for both host and guest. # @@ -23,28 +23,30 @@ if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBO # # Set these in LocalConfig.kmk if you are working on the X11 clipboard service # to automatically run the unit tests at build time: - # OTHERS += $(PATH_tstClipboardX11)/tstClipboardX11.run - # OTHERS += $(PATH_tstClipboardX11Smoke)/tstClipboardX11Smoke.run + # OTHERS += $(tstClipboardX11_0_OUTDIR)/tstClipboardX11.run + # OTHERS += $(tstClipboardX11Smoke_0_OUTDIR)/tstClipboardX11Smoke.run # PROGRAMS += tstClipboardX11 tstClipboardX11Smoke - TESTING += $(PATH_tstClipboardX11)/tstClipboardX11.run $(PATH_tstClipboardX11Smoke)/tstClipboardX11Smoke.run + TESTING += \ + $(tstClipboardX11_0_OUTDIR)/tstClipboardX11.run \ + $(tstClipboardX11Smoke_0_OUTDIR)/tstClipboardX11Smoke.run tstClipboardX11_TEMPLATE = VBOXR3TSTEXE tstClipboardX11_DEFS = VBOX_WITH_HGCM TESTCASE tstClipboardX11_SOURCES = x11-clipboard.cpp clipboard-helper.cpp - tstClipboardX11_CLEAN = $(PATH_tstClipboardX11)/tstClipboardX11.run + tstClipboardX11_CLEAN = $(tstClipboardX11_0_OUTDIR)/tstClipboardX11.run tstClipboardX11Smoke_TEMPLATE = VBOXR3TSTEXE tstClipboardX11Smoke_DEFS = VBOX_WITH_HGCM SMOKETEST tstClipboardX11Smoke_SOURCES = x11-clipboard.cpp clipboard-helper.cpp tstClipboardX11Smoke_LIBPATH = $(VBOX_LIBPATH_X11) tstClipboardX11Smoke_LIBS = X11 Xt - tstClipboardX11Smoke_CLEAN = $(PATH_tstClipboardX11Smoke)/tstClipboardX11Smoke.run + tstClipboardX11Smoke_CLEAN = $(tstClipboardX11Smoke_0_OUTDIR)/tstClipboardX11Smoke.run -$$(PATH_tstClipboardX11)/tstClipboardX11.run: $$(INSTARGET_tstClipboardX11) +$$(tstClipboardX11_0_OUTDIR)/tstClipboardX11.run: $$(INSTARGET_tstClipboardX11) export VBOX_LOG_DEST=nofile; $(INSTARGET_tstClipboardX11) quiet $(QUIET)$(APPEND) -t "$@" "done" -$$(PATH_tstClipboardX11Smoke)/tstClipboardX11Smoke.run: $$(INSTARGET_tstClipboardX11) +$$(tstClipboardX11Smoke_0_OUTDIR)/tstClipboardX11Smoke.run: $$(INSTARGET_tstClipboardX11) export VBOX_LOG_DEST=nofile; $(INSTARGET_tstClipboardX11Smoke) quiet $(QUIET)$(APPEND) -t "$@" "done" endif diff --git a/src/VBox/HostDrivers/Makefile.kmk b/src/VBox/HostDrivers/Makefile.kmk index a16b7ac20..09a6ebbb2 100644 --- a/src/VBox/HostDrivers/Makefile.kmk +++ b/src/VBox/HostDrivers/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34484 2010-11-29 17:45:20Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Top-level makefile for the VBox Host drivers. # @@ -56,16 +56,16 @@ if !defined(VBOX_ONLY_DOCS) \ INSTALLS += HostDrivers-dkms-sh HostDrivers-dkms-sh_INST = bin/src/ HostDrivers-dkms-sh_MODE = a+rx,u+w - HostDrivers-dkms-sh_SOURCES = $(PATH_HostDrivers-dkms-sh)/do_dkms - HostDrivers-dkms-sh_CLEAN = $(PATH_HostDrivers-dkms-sh)/do_dkms + HostDrivers-dkms-sh_SOURCES = $(HostDrivers-dkms-sh_0_OUTDIR)/do_dkms + HostDrivers-dkms-sh_CLEAN = $(HostDrivers-dkms-sh_0_OUTDIR)/do_dkms INSTALLS += HostDrivers-dkms-src HostDrivers-dkms-src_INST = bin/src/ HostDrivers-dkms-src_MODE = a+r,u+w - HostDrivers-dkms-src_SOURCES = $(PATH_HostDrivers-dkms-src)/dkms.conf - HostDrivers-dkms-src_CLEAN = $(PATH_HostDrivers-dkms-src)/dkms.conf + HostDrivers-dkms-src_SOURCES = $(HostDrivers-dkms-src_0_OUTDIR)/dkms.conf + HostDrivers-dkms-src_CLEAN = $(HostDrivers-dkms-src_0_OUTDIR)/dkms.conf -$$(PATH_HostDrivers-dkms-src)/dkms.conf: \ +$$(HostDrivers-dkms-src_0_OUTDIR)/dkms.conf: \ $(PATH_SUB_CURRENT)/linux/dkms.conf \ $(VBOX_VERSION_STAMP) \ | $$(dir $$@) @@ -76,7 +76,7 @@ $$(PATH_HostDrivers-dkms-src)/dkms.conf: \ -e "s;_OMIT_VBOXNETADP_;$(if $(VBOX_WITH_NETADP),,#);g" \ --output $@ $< -$$(PATH_HostDrivers-dkms-sh)/do_dkms: \ +$$(HostDrivers-dkms-sh_0_OUTDIR)/do_dkms: \ $(PATH_SUB_CURRENT)/linux/do_dkms \ $(VBOX_VERSION_STAMP) \ | $$(dir $$@) diff --git a/src/VBox/HostDrivers/Support/Makefile.kmk b/src/VBox/HostDrivers/Support/Makefile.kmk index 47746a703..473267efd 100644 --- a/src/VBox/HostDrivers/Support/Makefile.kmk +++ b/src/VBox/HostDrivers/Support/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34484 2010-11-29 17:45:20Z vboxsync $ +# $Id: Makefile.kmk 35381 2010-12-30 16:12:47Z vboxsync $ ## @file # Sub-Makefile for the support library and the drivers/modules/kexts it uses. # @@ -140,8 +140,8 @@ ifeq ($(VBOX_LDR_FMT),pe) SUPR0_SOURCES += SUPR0.def endif ifeq ($(VBOX_LDR_FMT),lx) -SUPR0_SOURCES += $$(PATH_SUPR0)/SUPR0.def -$$(PATH_SUPR0)/SUPR0.def: $(PATH_SUB_CURRENT)/SUPR0.def | $$(dir $$@) +SUPR0_SOURCES += $$(SUPR0_0_OUTDIR)/SUPR0.def +$$(SUPR0_0_OUTDIR)/SUPR0.def: $(PATH_SUB_CURRENT)/SUPR0.def | $$(dir $$@) $(SED) \ -e 's/^[ \t][ \t]*\([gA-Z]\)/ _\1/' \ -e 's/[ \t]DATA[ \t]*/ /' \ @@ -210,7 +210,7 @@ VBoxDrv-inf_SOURCES = \ VBoxDrv-inf_CLEAN = $(VBoxDrv-inf_SOURCES) VBoxDrv-inf_BLDDIRS = $(PATH_TARGET)/VBoxDrvCat.dir -$(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.inf: $(PATH_SUB_CURRENT)/win/VBoxDrv.inf $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(@D)) +$(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.inf: $(PATH_SUB_CURRENT)/win/VBoxDrv.inf $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_GENERATE,VBoxDrv-inf,$@,$<) $(call VBOX_EDIT_INF_FN,$<,$@) @@ -219,7 +219,7 @@ VBoxDrv-inf_SOURCES += \ $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.sys \ $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.cat -$(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.sys: $$(TARGET_VBoxDrv) | $$(call DIRDEP,$$(@D)) +$(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.sys: $$(TARGET_VBoxDrv) | $$(dir $$@) $(INSTALL) -m 644 $< $(@D) $(PATH_TARGET)/VBoxDrvCat.dir/VBoxDrv.cat: \ @@ -263,23 +263,23 @@ vboxdrv-mod_INST = bin/src/vboxdrv/ vboxdrv-mod_MODE = a+r,u+w vboxdrv-mod_SOURCES = $(subst ",,$(FILES_VBOXDRV_NOBIN)) #" vboxdrv-mod_SOURCES += \ - $(PATH_vboxdrv-mod)/Makefile + $(vboxdrv-mod_0_OUTDIR)/Makefile vboxdrv-mod_CLEAN = \ - $(PATH_vboxdrv-mod)/Makefile + $(vboxdrv-mod_0_OUTDIR)/Makefile vboxdrv-sh_INST = bin/src/vboxdrv vboxdrv-sh_MODE = a+rx,u+w vboxdrv-sh_SOURCES = $(subst ",,$(FILES_VBOXDRV_BIN)) #" vboxdrv-sh_SOURCES += \ - $(PATH_vboxdrv-sh)/build_in_tmp \ + $(vboxdrv-sh_0_OUTDIR)/build_in_tmp \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/do_Module.symvers vboxdrv-sh_CLEAN = \ $(PATH_TARGET)/vboxdrv-sh-1.dep \ - $(PATH_vboxdrv-sh)/build_in_tmp + $(vboxdrv-sh_0_OUTDIR)/build_in_tmp # Scripts needed for building the kernel modules -$$(PATH_vboxdrv-sh)/build_in_tmp: \ +$$(vboxdrv-sh_0_OUTDIR)/build_in_tmp: \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/build_in_tmp \ $(VBOX_VERSION_STAMP) \ | $$(dir $$@) @@ -291,7 +291,7 @@ $$(PATH_vboxdrv-sh)/build_in_tmp: \ $(QUIET)chmod 0755 $@ includedep $(PATH_TARGET)/vboxdrv-sh-1.dep -$$(PATH_vboxdrv-mod)/Makefile: \ +$$(vboxdrv-mod_0_OUTDIR)/Makefile: \ $(PATH_SUB_CURRENT)/linux/Makefile \ $$(if $$(eq $$(Support/linux/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \ | $$(dir $$@) @@ -338,10 +338,10 @@ endif INSTALLS += VBoxDrv.kext VBoxDrv.kext_INST = $(INST_VBOXDRV)Contents/ -VBoxDrv.kext_SOURCES = $(PATH_VBoxDrv.kext)/Info.plist -VBoxDrv.kext_CLEAN = $(PATH_VBoxDrv.kext)/Info.plist +VBoxDrv.kext_SOURCES = $(VBoxDrv.kext_0_OUTDIR)/Info.plist +VBoxDrv.kext_CLEAN = $(VBoxDrv.kext_0_OUTDIR)/Info.plist -$$(PATH_VBoxDrv.kext)/Info.plist: \ +$$(VBoxDrv.kext_0_OUTDIR)/Info.plist: \ $(PATH_SUB_CURRENT)/darwin/Info.plist \ $(VBOX_VERSION_MK) | $$(dir $$@) $(call MSG_GENERATE,VBoxDrv,$@,$<) @@ -419,11 +419,11 @@ vboxdrv-mod_INST = bin/src/vboxdrv/ vboxdrv-mod_MODE = a+r,u+w vboxdrv-mod_SOURCES = $(subst ",,$(FILES_VBOXDRV_NOBIN)) #" vboxdrv-mod_SOURCES += \ - $(PATH_vboxdrv-mod)/Makefile + $(vboxdrv-mod_0_OUTDIR)/Makefile vboxdrv-mod_CLEAN = \ - $(PATH_vboxdrv-mod)/Makefile + $(vboxdrv-mod_0_OUTDIR)/Makefile -$$(PATH_vboxdrv-mod)/Makefile: \ +$$(vboxdrv-mod_0_OUTDIR)/Makefile: \ $(PATH_SUB_CURRENT)/freebsd/Makefile \ $$(if $$(eq $$(Support/freebsd/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \ | $$(dir $$@) diff --git a/src/VBox/HostDrivers/Support/SUPDrv.c b/src/VBox/HostDrivers/Support/SUPDrv.c index d05933e8b..7909cd7f7 100644 --- a/src/VBox/HostDrivers/Support/SUPDrv.c +++ b/src/VBox/HostDrivers/Support/SUPDrv.c @@ -1,4 +1,4 @@ -/* $Revision: 35051 $ */ +/* $Revision: 35346 $ */ /** @file * VBoxDrv - The VirtualBox Support Driver - Common code. */ @@ -58,8 +58,8 @@ #include <VBox/param.h> #include <VBox/log.h> #include <VBox/err.h> -#include <VBox/hwacc_svm.h> -#include <VBox/hwacc_vmx.h> +#include <VBox/vmm/hwacc_svm.h> +#include <VBox/vmm/hwacc_vmx.h> #include <VBox/x86.h> #ifdef VBOX_WITH_DTRACE diff --git a/src/VBox/HostDrivers/Support/SUPDrvInternal.h b/src/VBox/HostDrivers/Support/SUPDrvInternal.h index e40ca69d4..5b835b762 100644 --- a/src/VBox/HostDrivers/Support/SUPDrvInternal.h +++ b/src/VBox/HostDrivers/Support/SUPDrvInternal.h @@ -1,4 +1,4 @@ -/* $Revision: 33940 $ */ +/* $Revision: 35494 $ */ /** @file * VirtualBox Support Driver - Internal header. */ @@ -219,7 +219,7 @@ typedef enum /** Locked memory (r3 mapping only) allocated by the support driver. */ MEMREF_TYPE_PAGE, /** Blow the type up to 32-bit and mark the end. */ - MEMREG_TYPE_32BIT_HACK = 0x7fffffff + MEMREF_TYPE_32BIT_HACK = 0x7fffffff } SUPDRVMEMREFTYPE, *PSUPDRVMEMREFTYPE; diff --git a/src/VBox/HostDrivers/Support/SUPLib.cpp b/src/VBox/HostDrivers/Support/SUPLib.cpp index 627687dff..0293a1ba7 100644 --- a/src/VBox/HostDrivers/Support/SUPLib.cpp +++ b/src/VBox/HostDrivers/Support/SUPLib.cpp @@ -1,4 +1,4 @@ -/* $Id: SUPLib.cpp 35191 2010-12-16 15:25:20Z vboxsync $ */ +/* $Id: SUPLib.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VirtualBox Support Library - Common code. */ @@ -49,7 +49,6 @@ #include <VBox/sup.h> #include <VBox/err.h> #include <VBox/param.h> -#include <VBox/vmm.h> #include <VBox/log.h> #include <VBox/x86.h> diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp index 6b7fe2edc..d54f88a77 100644 --- a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp +++ b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp @@ -1,4 +1,4 @@ -/* $Id: SUPR3HardenedMain.cpp 34701 2010-12-03 14:49:53Z vboxsync $ */ +/* $Id: SUPR3HardenedMain.cpp 35311 2010-12-23 14:13:30Z vboxsync $ */ /** @file * VirtualBox Support Library - Hardened main(). */ @@ -648,36 +648,41 @@ static void supR3HardenedMainGrabCapabilites(void) # elif defined(RT_OS_SOLARIS) /* - * Add net_icmpaccess privilege to permitted, effective and inheritable - * privileges before dropping root privileges. Skip this hacky code for - * real root, as it removes lots of privileges due to the harcoded set. + * Add net_icmpaccess privilege to effective privileges and limit + * permitted privileges before completely dropping root privileges. + * This requires dropping root privileges temporarily to get the normal + * user's privileges. */ - if (getuid() != 0) + seteuid(g_uid); + priv_set_t *pPrivEffective = priv_allocset(); + priv_set_t *pPrivNew = priv_allocset(); + if (pPrivEffective && pPrivNew) { - priv_set_t *pPrivSet = priv_str_to_set("basic", ",", NULL); - if (pPrivSet) + int rc = getppriv(PRIV_EFFECTIVE, pPrivEffective); + seteuid(0); + if (!rc) { - priv_addset(pPrivSet, PRIV_NET_ICMPACCESS); - int rc = setppriv(PRIV_SET, PRIV_INHERITABLE, pPrivSet); + priv_copyset(pPrivEffective, pPrivNew); + rc = priv_addset(pPrivNew, PRIV_NET_ICMPACCESS); if (!rc) { - rc = setppriv(PRIV_SET, PRIV_PERMITTED, pPrivSet); - if (!rc) - { - rc = setppriv(PRIV_SET, PRIV_EFFECTIVE, pPrivSet); - if (rc) - supR3HardenedError(rc, false, "SUPR3HardenedMain: failed to set effective privilege set.\n"); - } - else + /* Order is important, as one can't set a privilege which is + * not in the permitted privilege set. */ + rc = setppriv(PRIV_SET, PRIV_EFFECTIVE, pPrivNew); + if (rc) + supR3HardenedError(rc, false, "SUPR3HardenedMain: failed to set effective privilege set.\n"); + rc = setppriv(PRIV_SET, PRIV_PERMITTED, pPrivNew); + if (rc) supR3HardenedError(rc, false, "SUPR3HardenedMain: failed to set permitted privilege set.\n"); } else - supR3HardenedError(rc, false, "SUPR3HardenedMain: failed to set inheritable privilege set.\n"); - - priv_freeset(pPrivSet); + supR3HardenedError(rc, false, "SUPR3HardenedMain: failed to add NET_ICMPACCESS privilege.\n"); } - else - supR3HardenedError(-1, false, "SUPR3HardenedMain: failed to get basic privilege set.\n"); + } + else + { + /* for memory allocation failures just continue */ + seteuid(0); } # endif } diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp index b19973157..76985c212 100644 --- a/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp +++ b/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp @@ -1,4 +1,4 @@ -/* $Id: SUPR3HardenedVerify.cpp 35188 2010-12-16 15:13:07Z vboxsync $ */ +/* $Id: SUPR3HardenedVerify.cpp 35403 2011-01-05 11:23:09Z vboxsync $ */ /** @file * VirtualBox Support Library - Verification of Hardened Installation. */ @@ -1150,6 +1150,28 @@ static int supR3HardenedVerifyFsObject(PCSUPR3HARDENEDFSOBJSTATE pFsObjState, bo return supR3HardenedSetError3(VERR_SUPLIB_OWNER_NOT_ROOT, pErrInfo, "The owner is not root: '", pszPath, "'"); /* + * The object type must be directory or file, no symbolic links or other + * risky stuff (sorry dude, but we're paranoid on purpose here). + */ + if ( !S_ISDIR(pFsObjState->Stat.st_mode) + && !S_ISREG(pFsObjState->Stat.st_mode)) + { + if (S_ISLNK(pFsObjState->Stat.st_mode)) + return supR3HardenedSetError3(VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED, pErrInfo, + "Symlinks are not permitted: '", pszPath, "'"); + return supR3HardenedSetError3(VERR_SUPLIB_NOT_DIR_NOT_FILE, pErrInfo, + "Not regular file or directory: '", pszPath, "'"); + } + if (fDir != !!S_ISDIR(pFsObjState->Stat.st_mode)) + { + if (S_ISDIR(pFsObjState->Stat.st_mode)) + return supR3HardenedSetError3(VERR_SUPLIB_IS_DIRECTORY, pErrInfo, + "Expected file but found directory: '", pszPath, "'"); + return supR3HardenedSetError3(VERR_SUPLIB_IS_FILE, pErrInfo, + "Expected directory but found file: '", pszPath, "'"); + } + + /* * The group does not matter if it does not have write access, if it has * write access it must be group 0 (root/wheel/whatever). * @@ -1181,27 +1203,6 @@ static int supR3HardenedVerifyFsObject(PCSUPR3HARDENEDFSOBJSTATE pFsObjState, bo */ /** @todo */ - /* - * Check the object type. - */ - if ( !S_ISDIR(pFsObjState->Stat.st_mode) - && !S_ISREG(pFsObjState->Stat.st_mode)) - { - if (S_ISLNK(pFsObjState->Stat.st_mode)) - return supR3HardenedSetError3(VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED, pErrInfo, - "Symlinks are not permitted: '", pszPath, "'"); - return supR3HardenedSetError3(VERR_SUPLIB_NOT_DIR_NOT_FILE, pErrInfo, - "Not regular file or directory: '", pszPath, "'"); - } - if (fDir != !!S_ISDIR(pFsObjState->Stat.st_mode)) - { - if (S_ISDIR(pFsObjState->Stat.st_mode)) - return supR3HardenedSetError3(VERR_SUPLIB_IS_DIRECTORY, pErrInfo, - "Expected file but found directory: '", pszPath, "'"); - return supR3HardenedSetError3(VERR_SUPLIB_IS_FILE, pErrInfo, - "Expected directory but found file: '", pszPath, "'"); - } - return VINF_SUCCESS; #endif diff --git a/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv b/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv index 9b7a3f653..b42293655 100644 --- a/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv +++ b/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: files_vboxdrv 33376 2010-10-24 12:55:23Z vboxsync $ +# $Id: files_vboxdrv 35346 2010-12-27 16:13:13Z vboxsync $ ## @file # Shared file between Makefile.kmk and export_modules # @@ -75,8 +75,8 @@ FILES_VBOXDRV_NOBIN=" \ ${PATH_ROOT}/include/VBox/sup.h=>include/VBox/sup.h \ ${PATH_ROOT}/include/VBox/types.h=>include/VBox/types.h \ ${PATH_ROOT}/include/VBox/version.h=>include/VBox/version.h \ - ${PATH_ROOT}/include/VBox/hwacc_vmx.h=>include/VBox/hwacc_vmx.h \ - ${PATH_ROOT}/include/VBox/hwacc_svm.h=>include/VBox/hwacc_svm.h \ + ${PATH_ROOT}/include/VBox/vmm/hwacc_vmx.h=>include/VBox/vmm/hwacc_vmx.h \ + ${PATH_ROOT}/include/VBox/vmm/hwacc_svm.h=>include/VBox/vmm/hwacc_svm.h \ ${PATH_ROOT}/include/VBox/x86.h=>include/VBox/x86.h \ ${PATH_ROOT}/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c=>freebsd/SUPDrv-freebsd.c \ ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrv.c=>SUPDrv.c \ diff --git a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c index f245acc50..c15c4e9f0 100644 --- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c +++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c @@ -1,4 +1,4 @@ -/* $Rev: 35294 $ */ +/* $Rev: 35495 $ */ /** @file * VBoxDrv - The VirtualBox Support Driver - Linux specifics. */ @@ -60,8 +60,6 @@ # include <linux/platform_device.h> #endif -#include <iprt/mem.h> - /******************************************************************************* * Defined Constants And Macros * diff --git a/src/VBox/HostDrivers/Support/linux/files_vboxdrv b/src/VBox/HostDrivers/Support/linux/files_vboxdrv index 8a26303e0..cdc15519d 100644 --- a/src/VBox/HostDrivers/Support/linux/files_vboxdrv +++ b/src/VBox/HostDrivers/Support/linux/files_vboxdrv @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: files_vboxdrv 33033 2010-10-11 09:55:12Z vboxsync $ +# $Id: files_vboxdrv 35346 2010-12-27 16:13:13Z vboxsync $ ## @file # Shared file between Makefile.kmk and export_modules # @@ -69,8 +69,8 @@ FILES_VBOXDRV_NOBIN=" \ ${PATH_ROOT}/include/VBox/param.h=>include/VBox/param.h \ ${PATH_ROOT}/include/VBox/sup.h=>include/VBox/sup.h \ ${PATH_ROOT}/include/VBox/types.h=>include/VBox/types.h \ - ${PATH_ROOT}/include/VBox/hwacc_vmx.h=>include/VBox/hwacc_vmx.h \ - ${PATH_ROOT}/include/VBox/hwacc_svm.h=>include/VBox/hwacc_svm.h \ + ${PATH_ROOT}/include/VBox/vmm/hwacc_vmx.h=>include/VBox/vmm/hwacc_vmx.h \ + ${PATH_ROOT}/include/VBox/vmm/hwacc_svm.h=>include/VBox/vmm/hwacc_svm.h \ ${PATH_ROOT}/include/VBox/x86.h=>include/VBox/x86.h \ ${PATH_ROOT}/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c=>linux/SUPDrv-linux.c \ ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrv.c=>SUPDrv.c \ diff --git a/src/VBox/HostDrivers/Support/testcase/tstInt.cpp b/src/VBox/HostDrivers/Support/testcase/tstInt.cpp index f28840369..349bf00ee 100644 --- a/src/VBox/HostDrivers/Support/testcase/tstInt.cpp +++ b/src/VBox/HostDrivers/Support/testcase/tstInt.cpp @@ -1,4 +1,4 @@ -/* $Id: tstInt.cpp 29250 2010-05-09 17:53:58Z vboxsync $ */ +/* $Id: tstInt.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * SUP Testcase - Test the interrupt gate feature of the support library. */ @@ -29,8 +29,8 @@ * Header Files * *******************************************************************************/ #include <VBox/sup.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <VBox/param.h> #include <iprt/asm-amd64-x86.h> diff --git a/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk b/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk index bbd5c42f1..a6c1f18a8 100644 --- a/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk +++ b/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33540 2010-10-28 09:27:05Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the Network Adapter Driver (VBoxNetAdp). # @@ -67,11 +67,11 @@ ifeq ($(KBUILD_TARGET),darwin) INSTALLS += VBoxNetAdp.kext VBoxNetAdp.kext_INST = $(INST_VBOXNETADP)Contents/ VBoxNetAdp.kext_SOURCES = \ - $(PATH_VBoxNetAdp.kext)/Info.plist + $(VBoxNetAdp.kext_0_OUTDIR)/Info.plist VBoxNetAdp.kext_CLEAN = \ - $(PATH_VBoxNetAdp.kext)/Info.plist + $(VBoxNetAdp.kext_0_OUTDIR)/Info.plist -$$(PATH_VBoxNetAdp.kext)/Info.plist: $(PATH_SUB_CURRENT)/darwin/Info.plist $(VBOX_VERSION_MK) | $$(dir $$@) +$$(VBoxNetAdp.kext_0_OUTDIR)/Info.plist: $(PATH_SUB_CURRENT)/darwin/Info.plist $(VBOX_VERSION_MK) | $$(dir $$@) $(call MSG_GENERATE,VBoxNetAdp,$@,$<) $(QUIET)$(RM) -f $@ $(QUIET)$(SED) \ @@ -102,21 +102,21 @@ ifeq ($(KBUILD_TARGET),linux) VBoxNetAdp-src_MODE = a+r,u+w VBoxNetAdp-src_SOURCES = $(subst ",,$(VBOX_VBOXNETADP_SOURCES)) #" VBoxNetAdp-src_SOURCES+= \ - $(PATH_VBoxNetAdp-src)/Makefile + $(VBoxNetAdp-src_0_OUTDIR)/Makefile VBoxNetAdp-src_CLEAN = \ - $(PATH_VBoxNetAdp-src)/Makefile \ + $(VBoxNetAdp-src_0_OUTDIR)/Makefile \ $(PATH_TARGET)/VBoxNetAdp-src-1.dep VBoxNetAdp-sh_INST = bin/src/vboxnetadp/ VBoxNetAdp-sh_MODE = a+rx,u+w VBoxNetAdp-sh_SOURCES = \ - $(PATH_VBoxNetAdp-sh)/build_in_tmp \ + $(VBoxNetAdp-sh_0_OUTDIR)/build_in_tmp \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/do_Module.symvers - VBoxNetAdp-sh_CLEAN = $(PATH_VBoxNetAdp-sh)/build_in_tmp + VBoxNetAdp-sh_CLEAN = $(VBoxNetAdp-sh_0_OUTDIR)/build_in_tmp includedep $(PATH_TARGET)/VBoxNetAdp-src-1.dep -$$(PATH_VBoxNetAdp-src)/Makefile: \ +$$(VBoxNetAdp-src_0_OUTDIR)/Makefile: \ $(PATH_SUB_CURRENT)/linux/Makefile \ $$(if $$(eq $$(VBoxNetAdp/linux/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \ | $$(dir $$@) @@ -130,7 +130,7 @@ endif ## Scripts needed for building the kernel modules -$$(PATH_VBoxNetAdp-sh)/build_in_tmp: \ +$$(VBoxNetAdp-sh_0_OUTDIR)/build_in_tmp: \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/build_in_tmp \ $(VBOX_VERSION_STAMP) \ | $$(dir $$@) @@ -151,11 +151,11 @@ ifeq ($(KBUILD_TARGET),freebsd) VBoxNetAdp-src_MODE = a+r,u+w VBoxNetAdp-src_SOURCES = $(subst ",,$(VBOX_VBOXNETADP_SOURCES)) #" VBoxNetAdp-src_SOURCES+= \ - $(PATH_VBoxNetAdp-src)/Makefile + $(VBoxNetAdp-src_0_OUTDIR)/Makefile VBoxNetAdp-src_CLEAN = \ - $(PATH_VBoxNetAdp-src)/Makefile \ + $(VBoxNetAdp-src_0_OUTDIR)/Makefile \ -$$(PATH_VBoxNetAdp-src)/Makefile: \ +$$(VBoxNetAdp-src_0_OUTDIR)/Makefile: \ $(PATH_SUB_CURRENT)/freebsd/Makefile \ $$(if $$(eq $$(VBoxNetAdp/freebsd/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \ | $$(dir $$@) diff --git a/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp b/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp index 3ba6cbaa1..676a90b17 100644 --- a/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp +++ b/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: files_vboxnetadp 33111 2010-10-13 17:07:08Z vboxsync $ +# $Id: files_vboxnetadp 35346 2010-12-27 16:13:13Z vboxsync $ ## @file # Shared file between Makefile.kmk and export_modules # @@ -63,7 +63,7 @@ VBOX_VBOXNETADP_SOURCES=" \ ${PATH_ROOT}/include/VBox/err.h=>include/VBox/err.h \ ${PATH_ROOT}/include/VBox/log.h=>include/VBox/log.h \ ${PATH_ROOT}/include/VBox/intnet.h=>include/VBox/intnet.h \ - ${PATH_ROOT}/include/VBox/stam.h=>include/VBox/stam.h \ + ${PATH_ROOT}/include/VBox/vmm/stam.h=>include/VBox/vmm/stam.h \ ${PATH_ROOT}/include/VBox/sup.h=>include/VBox/sup.h \ ${PATH_ROOT}/include/VBox/types.h=>include/VBox/types.h \ ${PATH_ROOT}/include/VBox/version.h=>include/VBox/version.h \ diff --git a/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp b/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp index 9b84406ee..9b0444657 100644 --- a/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp +++ b/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp @@ -1,5 +1,5 @@ #!/bin/sh -# $Revision: 31250 $ +# $Revision: 35346 $ ## @files # Shared file between Makefile.kmk and export_modules # @@ -54,7 +54,7 @@ VBOX_VBOXNETADP_SOURCES=" \ ${PATH_ROOT}/include/VBox/err.h=>include/VBox/err.h \ ${PATH_ROOT}/include/VBox/log.h=>include/VBox/log.h \ ${PATH_ROOT}/include/VBox/intnet.h=>include/VBox/intnet.h \ - ${PATH_ROOT}/include/VBox/stam.h=>include/VBox/stam.h \ + ${PATH_ROOT}/include/VBox/vmm/stam.h=>include/VBox/vmm/stam.h \ ${PATH_ROOT}/include/VBox/sup.h=>include/VBox/sup.h \ ${PATH_ROOT}/include/VBox/types.h=>include/VBox/types.h \ ${PATH_ROOT}/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c=>linux/VBoxNetAdp-linux.c \ diff --git a/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk b/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk index 04672c519..07d183141 100644 --- a/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk +++ b/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33540 2010-10-28 09:27:05Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the Network Filter Driver (VBoxNetFlt). # @@ -72,11 +72,11 @@ ifeq ($(KBUILD_TARGET),darwin) INSTALLS += VBoxNetFlt.kext VBoxNetFlt.kext_INST = $(INST_VBOXNETFLT)Contents/ VBoxNetFlt.kext_SOURCES = \ - $(PATH_VBoxNetFlt.kext)/Info.plist + $(VBoxNetFlt.kext_0_OUTDIR)/Info.plist VBoxNetFlt.kext_CLEAN = \ - $(PATH_VBoxNetFlt.kext)/Info.plist + $(VBoxNetFlt.kext_0_OUTDIR)/Info.plist -$$(PATH_VBoxNetFlt.kext)/Info.plist: $(PATH_SUB_CURRENT)/darwin/Info.plist $(VBOX_VERSION_MK) | $$(dir $$@) +$$(VBoxNetFlt.kext_0_OUTDIR)/Info.plist: $(PATH_SUB_CURRENT)/darwin/Info.plist $(VBOX_VERSION_MK) | $$(dir $$@) $(call MSG_GENERATE,VBoxNetFlt,$@,$<) $(QUIET)$(RM) -f $@ $(QUIET)$(SED) \ @@ -208,7 +208,7 @@ VBoxNetFltNotify_TEMPLATE = VBOXR3STATIC VBoxNetFltNotify_SDKS = WINPSDK W2K3DDK VBOX_NTDLL VBoxNetFltNotify_DEFS = _WIN32_WINNT=0x0500 WIN32 _ATL_STATIC_REGISTRY VBoxNetFltNotify_INCS = \ - $(PATH_VBoxNetFltNotify) + $(VBoxNetFltNotify_0_OUTDIR) VBoxNetFltNotify_SOURCES = \ win/notifyobj/VBoxNetFltNotify.cpp \ win/notifyobj/VBoxNetFltNotify.def \ @@ -217,11 +217,11 @@ VBoxNetFltNotify_LIBS = \ $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls$(VBOX_VCC_CRT_TYPE).lib #VBoxNetFltNotify_INTERMEDIATES = VBoxNetFltNotify_DEPS = \ - $(PATH_VBoxNetFltNotify)/VBoxNetFltNotifyn_i.c \ - $(PATH_VBoxNetFltNotify)/VBoxNetFltNotifyn_p.c \ - $(PATH_VBoxNetFltNotify)/VBoxNetFltNotifyn.h \ - $(PATH_VBoxNetFltNotify)/dlldata.c \ - $(PATH_VBoxNetFltNotify)/VBoxNetFltNotifyn.tlb + $(VBoxNetFltNotify_0_OUTDIR)/VBoxNetFltNotifyn_i.c \ + $(VBoxNetFltNotify_0_OUTDIR)/VBoxNetFltNotifyn_p.c \ + $(VBoxNetFltNotify_0_OUTDIR)/VBoxNetFltNotifyn.h \ + $(VBoxNetFltNotify_0_OUTDIR)/dlldata.c \ + $(VBoxNetFltNotify_0_OUTDIR)/VBoxNetFltNotifyn.tlb VBoxNetFltNotify_CLEAN = $(VBoxNetFltNotify_DEPS) VBOXNETFLT_NOTIFY_IDL ?= $(EXEC_X86_WIN32) $(call VBOX_FN_MAKE_WIN_PATH,$(firstword $(wildcard \ @@ -230,15 +230,15 @@ VBOXNETFLT_NOTIFY_IDL ?= $(EXEC_X86_WIN32) $(call VBOX_FN_MAKE_WIN_PATH,$(f $(PATH_DEVTOOLS)/win.x86/bin/midl.exe\ ) Sorry_Cannot_Find_The_Midl_Compiler_In_The_PSDK)) -$$(PATH_VBoxNetFltNotify)/VBoxNetFltNotifyn_i.c \ -+ $$(PATH_VBoxNetFltNotify)/VBoxNetFltNotifyn_p.c \ -+ $$(PATH_VBoxNetFltNotify)/VBoxNetFltNotifyn.h \ -+ $$(PATH_VBoxNetFltNotify)/dlldata.c \ -+ $$(PATH_VBoxNetFltNotify)/VBoxNetFltNotifyn.tlb: \ +$$(VBoxNetFltNotify_0_OUTDIR)/VBoxNetFltNotifyn_i.c \ ++ $$(VBoxNetFltNotify_0_OUTDIR)/VBoxNetFltNotifyn_p.c \ ++ $$(VBoxNetFltNotify_0_OUTDIR)/VBoxNetFltNotifyn.h \ ++ $$(VBoxNetFltNotify_0_OUTDIR)/dlldata.c \ ++ $$(VBoxNetFltNotify_0_OUTDIR)/VBoxNetFltNotifyn.tlb: \ $(PATH_SUB_CURRENT)/win/notifyobj/VBoxNetFltNotifyn.idl \ | $$(dir $$@) $(VBOXNETFLT_NOTIFY_IDL) /nologo \ - /out $(call VBOX_FN_MAKE_WIN_PATH,$(PATH_VBoxNetFltNotify)) \ + /out $(call VBOX_FN_MAKE_WIN_PATH,$(VBoxNetFltNotify_0_OUTDIR)) \ /cpp_cmd $(subst $(EXEC_X86_WIN32),,$(call VBOX_FN_MAKE_WIN_PATH,$(TOOL_$(VBOX_VCC_TOOL)_CC))) \ $(addprefix /I , $(call VBOX_FN_MAKE_WIN_PATH,$(SDK_W2K3DDK_INCS))) \ $(call VBOX_FN_MAKE_WIN_PATH,$<) @@ -362,21 +362,21 @@ ifeq ($(KBUILD_TARGET),linux) VBoxNetFlt-src_MODE = a+r,u+w VBoxNetFlt-src_SOURCES = $(subst ",,$(VBOX_VBOXNETFLT_SOURCES)) #" VBoxNetFlt-src_SOURCES+= \ - $(PATH_VBoxNetFlt-src)/Makefile + $(VBoxNetFlt-src_0_OUTDIR)/Makefile VBoxNetFlt-src_CLEAN = \ - $(PATH_VBoxNetFlt-src)/Makefile \ + $(VBoxNetFlt-src_0_OUTDIR)/Makefile \ $(PATH_TARGET)/VBoxNetFlt-src-1.dep VBoxNetFlt-sh_INST = bin/src/vboxnetflt/ VBoxNetFlt-sh_MODE = a+rx,u+w VBoxNetFlt-sh_SOURCES = \ - $(PATH_VBoxNetFlt-sh)/build_in_tmp \ + $(VBoxNetFlt-sh_0_OUTDIR)/build_in_tmp \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/do_Module.symvers - VBoxNetFlt-sh_CLEAN = $(PATH_VBoxNetFlt-sh)/build_in_tmp + VBoxNetFlt-sh_CLEAN = $(VBoxNetFlt-sh_0_OUTDIR)/build_in_tmp includedep $(PATH_TARGET)/VBoxNetFlt-src-1.dep - $$(PATH_VBoxNetFlt-src)/Makefile: \ + $$(VBoxNetFlt-src_0_OUTDIR)/Makefile: \ $(PATH_SUB_CURRENT)/linux/Makefile \ $$(if $$(eq $$(VBoxNetFlt/linux/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \ | $$(dir $$@) @@ -389,7 +389,7 @@ ifeq ($(KBUILD_TARGET),linux) %$(QUIET2)$(APPEND) '$(PATH_TARGET)/VBoxNetFlt-src-1.dep' 'VBoxNetFlt/linux/Makefile_VBOX_HARDENED=$(VBOX_WITH_HARDENING)' # Script needed for building the kernel module - $$(PATH_VBoxNetFlt-sh)/build_in_tmp: \ + $$(VBoxNetFlt-sh_0_OUTDIR)/build_in_tmp: \ $(PATH_ROOT)/src/VBox/HostDrivers/linux/build_in_tmp \ $(VBOX_VERSION_STAMP) \ | $$(dir $$@) @@ -416,11 +416,11 @@ $(PATH_OUT)/opt_netgraph.h: VBoxNetFlt-src_MODE = a+r,u+w VBoxNetFlt-src_SOURCES = $(subst ",,$(VBOX_VBOXNETFLT_SOURCES)) #" VBoxNetFlt-src_SOURCES+= \ - $(PATH_VBoxNetFlt-src)/Makefile + $(VBoxNetFlt-src_0_OUTDIR)/Makefile VBoxNetFlt-src_CLEAN = \ - $(PATH_VBoxNetFlt-src)/Makefile \ + $(VBoxNetFlt-src_0_OUTDIR)/Makefile \ - $$(PATH_VBoxNetFlt-src)/Makefile: \ + $$(VBoxNetFlt-src_0_OUTDIR)/Makefile: \ $(PATH_SUB_CURRENT)/freebsd/Makefile \ $$(if $$(eq $$(VBoxNetFlt/freebsd/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \ | $$(dir $$@) diff --git a/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt b/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt index f333dca21..15b756a63 100644 --- a/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt +++ b/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: files_vboxnetflt 33111 2010-10-13 17:07:08Z vboxsync $ +# $Id: files_vboxnetflt 35346 2010-12-27 16:13:13Z vboxsync $ ## @file # Shared file between Makefile.kmk and export_modules # @@ -63,7 +63,7 @@ VBOX_VBOXNETFLT_SOURCES=" \ ${PATH_ROOT}/include/VBox/log.h=>include/VBox/log.h \ ${PATH_ROOT}/include/VBox/intnet.h=>include/VBox/intnet.h \ ${PATH_ROOT}/include/VBox/intnetinline.h=>include/VBox/intnetinline.h \ - ${PATH_ROOT}/include/VBox/stam.h=>include/VBox/stam.h \ + ${PATH_ROOT}/include/VBox/vmm/stam.h=>include/VBox/vmm/stam.h \ ${PATH_ROOT}/include/VBox/sup.h=>include/VBox/sup.h \ ${PATH_ROOT}/include/VBox/types.h=>include/VBox/types.h \ ${PATH_ROOT}/include/VBox/version.h=>include/VBox/version.h \ diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c index 19c4c3b2f..bb2dc64c0 100644 --- a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c +++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c @@ -1,4 +1,4 @@ -/* $Id: VBoxNetFlt-linux.c 35066 2010-12-14 11:37:21Z vboxsync $ */ +/* $Id: VBoxNetFlt-linux.c 35554 2011-01-14 08:46:18Z vboxsync $ */ /** @file * VBoxNetFlt - Network Filter Driver (Host), Linux Specific Code. */ @@ -32,7 +32,7 @@ #include <VBox/log.h> #include <VBox/err.h> #include <VBox/intnetinline.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmnetinline.h> #include <VBox/param.h> #include <iprt/alloca.h> #include <iprt/assert.h> @@ -583,6 +583,9 @@ static void vboxNetFltLinuxQdiscInstall(PVBOXNETFLTINS pThis, struct net_device PVBOXNETQDISCPRIV pPriv; struct Qdisc *pExisting = QDISC_GET(pDev); + /* Do not install our qdisc for devices with no TX queues */ + if (!pExisting->enqueue) + return; if (strcmp(pExisting->ops->id, "vboxnetflt")) { /* The existing qdisc is different from ours, let's create new one. */ @@ -668,9 +671,12 @@ static void vboxNetFltLinuxQdiscRemove(PVBOXNETFLTINS pThis, struct net_device * pQdisc = QDISC_GET(pDev); if (strcmp(pQdisc->ops->id, "vboxnetflt")) { - /* Looks like the user has replaced our qdisc manually. */ - printk("VBoxNetFlt: Failed to detach qdisc, wrong qdisc: %s\n", - pQdisc->ops->id); + if (pQdisc->enqueue) + { + /* Looks like the user has replaced our qdisc manually. */ + printk("VBoxNetFlt: Failed to detach qdisc, wrong qdisc: %s\n", + pQdisc->ops->id); + } return; // TODO: Consider returing an error } @@ -821,22 +827,45 @@ static void __exit VBoxNetFltLinuxUnload(void) */ #ifdef VBOXNETFLT_WITH_FILTER_HOST2GUEST_SKBS_EXPERIMENT +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) + +# include <linux/ethtool.h> + +typedef struct ethtool_ops OVR_OPSTYPE; +# define OVR_OPS ethtool_ops +# define OVR_XMIT pfnStartXmit + +# else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) */ + +typedef struct net_device_ops OVR_OPSTYPE; +# define OVR_OPS netdev_ops +# define OVR_XMIT pOrgOps->ndo_start_xmit + +# endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) */ + /** * The overridden net_device_ops of the device we're attached to. * - * Requires Linux 2.6.29 or later. + * As there is no net_device_ops structure in pre-2.6.29 kernels we override + * ethtool_ops instead along with hard_start_xmit callback in net_device + * structure. * - * This is a very dirty hack that was create to explore how much we can improve - * the host to guest transfers by not CC'ing the NIC. + * This is a very dirty hack that was created to explore how much we can improve + * the host to guest transfers by not CC'ing the NIC. It turns out to be + * the only way to filter outgoing packets for devices without TX queue. */ typedef struct VBoxNetDeviceOpsOverride { /** Our overridden ops. */ - struct net_device_ops Ops; + OVR_OPSTYPE Ops; /** Magic word. */ uint32_t u32Magic; /** Pointer to the original ops. */ - struct net_device_ops const *pOrgOps; + OVR_OPSTYPE const *pOrgOps; +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) + /** Pointer to the original hard_start_xmit function. */ + int (*pfnStartXmit)(struct sk_buff *pSkb, struct net_device *pDev); +# endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) */ /** Pointer to the net filter instance. */ PVBOXNETFLTINS pVBoxNetFlt; /** The number of filtered packages. */ @@ -857,7 +886,7 @@ typedef struct VBoxNetDeviceOpsOverride */ static int vboxNetFltLinuxStartXmitFilter(struct sk_buff *pSkb, struct net_device *pDev) { - PVBOXNETDEVICEOPSOVERRIDE pOverride = (PVBOXNETDEVICEOPSOVERRIDE)pDev->netdev_ops; + PVBOXNETDEVICEOPSOVERRIDE pOverride = (PVBOXNETDEVICEOPSOVERRIDE)pDev->OVR_OPS; uint8_t abHdrBuf[sizeof(RTNETETHERHDR) + sizeof(uint32_t) + RTNETIPV4_MIN_LEN]; PCRTNETETHERHDR pEtherHdr; PINTNETTRUNKSWPORT pSwitchPort; @@ -909,7 +938,7 @@ static int vboxNetFltLinuxStartXmitFilter(struct sk_buff *pSkb, struct net_devic } } - return pOverride->pOrgOps->ndo_start_xmit(pSkb, pDev); + return pOverride->OVR_XMIT(pSkb, pDev); } /** @@ -926,16 +955,23 @@ static void vboxNetFltLinuxHookDev(PVBOXNETFLTINS pThis, struct net_device *pDev pOverride = RTMemAlloc(sizeof(*pOverride)); if (!pOverride) return; - pOverride->pOrgOps = pDev->netdev_ops; - pOverride->Ops = *pDev->netdev_ops; + pOverride->pOrgOps = pDev->OVR_OPS; + pOverride->Ops = *pDev->OVR_OPS; +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) + pOverride->pfnStartXmit = pDev->hard_start_xmit; +# else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) */ pOverride->Ops.ndo_start_xmit = vboxNetFltLinuxStartXmitFilter; +# endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) */ pOverride->u32Magic = VBOXNETDEVICEOPSOVERRIDE_MAGIC; pOverride->cTotal = 0; pOverride->cFiltered = 0; pOverride->pVBoxNetFlt = pThis; RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); /* (this isn't necessary, but so what) */ - ASMAtomicWritePtr((void * volatile *)&pDev->netdev_ops, pOverride); + ASMAtomicWritePtr((void * volatile *)&pDev->OVR_OPS, pOverride); +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) + ASMAtomicXchgPtr((void * volatile *)&pDev->hard_start_xmit, vboxNetFltLinuxStartXmitFilter); +# endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) */ RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); } @@ -956,13 +992,16 @@ static void vboxNetFltLinuxUnhookDev(PVBOXNETFLTINS pThis, struct net_device *pD pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); if (VALID_PTR(pDev)) { - pOverride = (PVBOXNETDEVICEOPSOVERRIDE)pDev->netdev_ops; + pOverride = (PVBOXNETDEVICEOPSOVERRIDE)pDev->OVR_OPS; if ( VALID_PTR(pOverride) && pOverride->u32Magic == VBOXNETDEVICEOPSOVERRIDE_MAGIC && VALID_PTR(pOverride->pOrgOps) ) { - ASMAtomicWritePtr((void * volatile *)&pDev->netdev_ops, pOverride->pOrgOps); +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) + ASMAtomicWritePtr((void * volatile *)&pDev->hard_start_xmit, pOverride->pfnStartXmit); +# endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) */ + ASMAtomicWritePtr((void * volatile *)&pDev->OVR_OPS, pOverride->pOrgOps); ASMAtomicWriteU32(&pOverride->u32Magic, 0); } else diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt b/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt index d08d00adf..7dc5f722e 100644 --- a/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt +++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: files_vboxnetflt 31250 2010-07-30 14:50:01Z vboxsync $ +# $Id: files_vboxnetflt 35346 2010-12-27 16:13:13Z vboxsync $ ## @file # Shared file between Makefile.kmk and export_modules # @@ -55,9 +55,9 @@ VBOX_VBOXNETFLT_SOURCES=" \ ${PATH_ROOT}/include/VBox/log.h=>include/VBox/log.h \ ${PATH_ROOT}/include/VBox/intnet.h=>include/VBox/intnet.h \ ${PATH_ROOT}/include/VBox/intnetinline.h=>include/VBox/intnetinline.h \ - ${PATH_ROOT}/include/VBox/pdmnetinline.h=>include/VBox/pdmnetinline.h \ + ${PATH_ROOT}/include/VBox/vmm/pdmnetinline.h=>include/VBox/vmm/pdmnetinline.h \ ${PATH_ROOT}/include/VBox/param.h=>include/VBox/param.h \ - ${PATH_ROOT}/include/VBox/stam.h=>include/VBox/stam.h \ + ${PATH_ROOT}/include/VBox/vmm/stam.h=>include/VBox/vmm/stam.h \ ${PATH_ROOT}/include/VBox/sup.h=>include/VBox/sup.h \ ${PATH_ROOT}/include/VBox/types.h=>include/VBox/types.h \ ${PATH_ROOT}/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c=>linux/VBoxNetFlt-linux.c \ diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltPt-win.c b/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltPt-win.c index 9823772f6..e91624c79 100644 --- a/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltPt-win.c +++ b/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFltPt-win.c @@ -1,4 +1,4 @@ -/* $Id: VBoxNetFltPt-win.c 34109 2010-11-16 12:02:12Z vboxsync $ */ +/* $Id: VBoxNetFltPt-win.c 35359 2010-12-28 08:18:10Z vboxsync $ */ /** @file * VBoxNetFlt - Network Filter Driver (Host), Windows Specific Code. Protocol edge of ndis filter driver */ @@ -968,7 +968,7 @@ static bool vboxNetFltWinPtTransferDataCompleteActive(IN PADAPT pAdapt, if(!vboxNetFltWinLbIsFromIntNet(pLb)) { /* the packet is not from int net, need to pass it up to the host */ - vboxNetFltWinPtQueueReceivedPacket(pAdapt, pPacket, FALSE); + vboxNetFltWinPtQueueReceivedPacket(pAdapt, pPacket, TRUE); /* dereference NetFlt, pAdapt will be dereferenced on Packet return */ vboxNetFltWinDereferenceNetFlt(pNetFltIf); break; @@ -1162,7 +1162,8 @@ vboxNetFltWinPtFlushReceiveQueue( static INT vboxNetFltWinRecvPacketPassThru( IN PADAPT pAdapt, - IN PNDIS_PACKET pPacket + IN PNDIS_PACKET pPacket, + IN BOOLEAN bForceIndicate ) { NDIS_STATUS fStatus; @@ -1189,7 +1190,7 @@ vboxNetFltWinRecvPacketPassThru( return 0; } - vboxNetFltWinPtQueueReceivedPacket(pAdapt, pMyPacket, FALSE); + vboxNetFltWinPtQueueReceivedPacket(pAdapt, pMyPacket, bForceIndicate); return 1; } @@ -1365,7 +1366,7 @@ vboxNetFltWinPtReceiveActive( false); /* bool bCopyMemory */ if(pMyPacket) { - vboxNetFltWinPtQueueReceivedPacket(pAdapt, pMyPacket, FALSE); + vboxNetFltWinPtQueueReceivedPacket(pAdapt, pMyPacket, TRUE); /* dereference the NetFlt here & indicate SUCCESS, which would mean the caller would not do a dereference * the pAdapt dereference will be done on packet return */ vboxNetFltWinDereferenceNetFlt(pNetFlt); @@ -2103,7 +2104,7 @@ vboxNetFltWinPtReceivePacket( #endif } - cRefCount = vboxNetFltWinRecvPacketPassThru(pAdapt, pPacket); + cRefCount = vboxNetFltWinRecvPacketPassThru(pAdapt, pPacket, bNetFltActive); if(cRefCount) { Assert(cRefCount == 1); diff --git a/src/VBox/HostDrivers/VBoxUSB/Makefile.kmk b/src/VBox/HostDrivers/VBoxUSB/Makefile.kmk index 2705b18f5..278cc8f8e 100644 --- a/src/VBox/HostDrivers/VBoxUSB/Makefile.kmk +++ b/src/VBox/HostDrivers/VBoxUSB/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 31911 2010-08-24 11:56:45Z vboxsync $ +# $Id: Makefile.kmk 35440 2011-01-09 23:43:10Z vboxsync $ ## @file # Sub-Makefile for the Windows USB drivers. # @@ -59,7 +59,7 @@ tstUSBFilter_DEFS = IN_USBLIB tstUSBFilter_SOURCES = \ testcase/tstUSBFilter.cpp tstUSBFilter_LIBS = \ - $(TARGET_USBLib) + $(USBLib_1_TARGET) endif diff --git a/src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk b/src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk index 5785c2576..d6a0ecda6 100644 --- a/src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk +++ b/src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 31898 2010-08-24 09:28:43Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the Darwin VBoxUSB kernel extension. # @@ -37,10 +37,10 @@ VBoxUSB_INST = $(INST_VBOXUSB)Contents/MacOS/ INSTALLS += VBoxUSB.kext VBoxUSB.kext_INST = $(INST_VBOXUSB)Contents/ -VBoxUSB.kext_SOURCES = $(PATH_VBoxUSB.kext)/Info.plist -VBoxUSB.kext_CLEAN = $(PATH_VBoxUSB.kext)/Info.plist +VBoxUSB.kext_SOURCES = $(VBoxUSB.kext_0_OUTDIR)/Info.plist +VBoxUSB.kext_CLEAN = $(VBoxUSB.kext_0_OUTDIR)/Info.plist -$$(PATH_VBoxUSB.kext)/Info.plist: $(PATH_SUB_CURRENT)/Info.plist $(VBOX_VERSION_MK) | $$(dir $$@) +$$(VBoxUSB.kext_0_OUTDIR)/Info.plist: $(PATH_SUB_CURRENT)/Info.plist $(VBOX_VERSION_MK) | $$(dir $$@) $(call MSG_GENERATE,VBoxUSB,$@,$<) $(QUIET)$(RM) -f $@ $(QUIET)$(SED) \ diff --git a/src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk b/src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk index 75fc03c89..a4dd97372 100644 --- a/src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk +++ b/src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 31898 2010-08-24 09:28:43Z vboxsync $ +# $Id: Makefile.kmk 35381 2010-12-30 16:12:47Z vboxsync $ ## @file # Sub-Makefile for the Windows USB drivers. # @@ -156,15 +156,15 @@ install-infs_BLDDIRS = \ $(PATH_TARGET)/VBoxUSBCat.dir \ $(PATH_TARGET)/VBoxUSBMonCat.dir -$(PATH_TARGET)/VBoxUSBCat.dir/VBoxUSB.inf: $(PATH_SUB_CURRENT)/Device/VBoxUSB.inf $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(@D)) +$(PATH_TARGET)/VBoxUSBCat.dir/VBoxUSB.inf: $(PATH_SUB_CURRENT)/Device/VBoxUSB.inf $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_GENERATE,install-infs,$@,$<) $(call VBOX_EDIT_INF_FN,$<,$@) -$(PATH_TARGET)/VBoxUSBMonCat.dir/VBoxUSBMon.inf: $(PATH_SUB_CURRENT)/Monitor/VBoxUSBMon.inf $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(@D)) +$(PATH_TARGET)/VBoxUSBMonCat.dir/VBoxUSBMon.inf: $(PATH_SUB_CURRENT)/Monitor/VBoxUSBMon.inf $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_GENERATE,install-infs,$@,$<) $(call VBOX_EDIT_INF_FN,$<,$@) -$(PATH_TARGET)/VBoxUSBFltCat.dir/VBoxUSBFlt.inf: $(PATH_SUB_CURRENT)/Filter/VBoxUSBFlt.inf $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(@D)) +$(PATH_TARGET)/VBoxUSBFltCat.dir/VBoxUSBFlt.inf: $(PATH_SUB_CURRENT)/Filter/VBoxUSBFlt.inf $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_GENERATE,install-infs,$@,$<) $(call VBOX_EDIT_INF_FN,$<,$@) @@ -175,7 +175,7 @@ install-infs_SOURCES += \ $(PATH_TARGET)/VBoxUSBMonCat.dir/VBoxUSBMon.cat \ $(PATH_TARGET)/VBoxUSBMonCat.dir/VBoxUSBMon.sys -$(PATH_TARGET)/VBoxUSBCat.dir/VBoxUSB.sys: $$(TARGET_VBoxUSB) | $$(call DIRDEP,$$(@D)) +$(PATH_TARGET)/VBoxUSBCat.dir/VBoxUSB.sys: $$(TARGET_VBoxUSB) | $$(dir $$@) $(INSTALL) -m 644 $< $(@D) $(PATH_TARGET)/VBoxUSBCat.dir/VBoxUSB.cat: \ @@ -184,7 +184,7 @@ $(PATH_TARGET)/VBoxUSBCat.dir/VBoxUSB.cat: \ $(call MSG_TOOL,Inf2Cat,VBoxUSB-inf,$@,$<) $(call VBOX_MAKE_CAT_FN, $(@D),$@) -$(PATH_TARGET)/VBoxUSBMonCat.dir/VBoxUSBMon.sys: $$(TARGET_VBoxUSBMon) | $$(call DIRDEP,$$(@D)) +$(PATH_TARGET)/VBoxUSBMonCat.dir/VBoxUSBMon.sys: $$(TARGET_VBoxUSBMon) | $$(dir $$@) $(INSTALL) -m 644 $< $(@D) $(PATH_TARGET)/VBoxUSBMonCat.dir/VBoxUSBMon.cat: \ diff --git a/src/VBox/HostServices/GuestControl/testcase/Makefile.kmk b/src/VBox/HostServices/GuestControl/testcase/Makefile.kmk index a781b38a2..4cf085b2d 100644 --- a/src/VBox/HostServices/GuestControl/testcase/Makefile.kmk +++ b/src/VBox/HostServices/GuestControl/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the Guest Control Host Service testcases. # @@ -22,11 +22,11 @@ if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBO # Set this in LocalConfig.kmk if you are working on the guest property # service to automatically run the testcase at build time. - # OTHERS += $(PATH_tstGuestControlSvc)/tstGuestControlSvc.run + # OTHERS += $(tstGuestControlSvc_0_OUTDIR)/tstGuestControlSvc.run # PROGRAMS += tstGuestControlSvc - TESTING += $(PATH_tstGuestPropSvc)/tstGuestControlSvc.run + TESTING += $(tstGuestControlSvc_0_OUTDIR)/tstGuestControlSvc.run tstGuestControlSvc_TEMPLATE = VBOXR3TSTEXE # The second define here is to ensure that the testcase will run fast, # without waiting for any thread synchronisation. @@ -37,7 +37,7 @@ if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBO tstGuestControlSvc.cpp tstGuestControlSvc_LIBS = $(LIB_RUNTIME) -$$(PATH_tstGuestControlSvc)/tstGuestControlSvc.run: $$(INSTARGET_tstGuestControlSvc) +$$(tstGuestControlSvc_0_OUTDIR)/tstGuestControlSvc.run: $$(INSTARGET_tstGuestControlSvc) export VBOX_LOG_DEST=nofile; $(INSTARGET_tstGuestControlSvc) quiet $(QUIET)$(APPEND) -t "$@" "done" diff --git a/src/VBox/HostServices/GuestProperties/testcase/Makefile.kmk b/src/VBox/HostServices/GuestProperties/testcase/Makefile.kmk index 845fc8d35..e9598cb5f 100644 --- a/src/VBox/HostServices/GuestProperties/testcase/Makefile.kmk +++ b/src/VBox/HostServices/GuestProperties/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the Guest Properties Host Service testcases. # @@ -22,11 +22,11 @@ if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBO # Set this in LocalConfig.kmk if you are working on the guest property # service to automatically run the testcase at build time. - # OTHERS += $(PATH_tstGuestPropSvc)/tstGuestPropSvc.run + # OTHERS += $(tstGuestPropSvc_0_OUTDIR)/tstGuestPropSvc.run # PROGRAMS += tstGuestPropSvc - TESTING += $(PATH_tstGuestPropSvc)/tstGuestPropSvc.run + TESTING += $(tstGuestPropSvc_0_OUTDIR)/tstGuestPropSvc.run tstGuestPropSvc_TEMPLATE = VBOXR3TSTEXE # The second define here is to ensure that the testcase will run fast, # without waiting for any thread synchronisation. @@ -34,7 +34,7 @@ if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBO tstGuestPropSvc_SOURCES = tstGuestPropSvc.cpp ../service.cpp tstGuestPropSvc_LIBS = $(LIB_RUNTIME) -$$(PATH_tstGuestPropSvc)/tstGuestPropSvc.run: $$(INSTARGET_tstGuestPropSvc) +$$(tstGuestPropSvc_0_OUTDIR)/tstGuestPropSvc.run: $$(INSTARGET_tstGuestPropSvc) export VBOX_LOG_DEST=nofile; $(INSTARGET_tstGuestPropSvc) quiet $(QUIET)$(APPEND) -t "$@" "done" diff --git a/src/VBox/HostServices/SharedClipboard/Makefile.kmk b/src/VBox/HostServices/SharedClipboard/Makefile.kmk index 2435fad7d..a162660d6 100644 --- a/src/VBox/HostServices/SharedClipboard/Makefile.kmk +++ b/src/VBox/HostServices/SharedClipboard/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the Shared Clipboard Host Service. # @@ -69,16 +69,16 @@ if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBO # # Set this in LocalConfig.kmk if you are working on the X11 clipboard service # to automatically run the unit test at build time. - # OTHERS += $(PATH_tstClipboardX11-2)/tstClipboardX11-2.run + # OTHERS += $(tstClipboardX11-2_0_OUTDIR)/tstClipboardX11-2.run PROGRAMS += tstClipboardX11-2 - TESTING += $(PATH_tstClipboardX11-2)/tstClipboardX11-2.run + TESTING += $(tstClipboardX11-2_0_OUTDIR)/tstClipboardX11-2.run tstClipboardX11-2_TEMPLATE = VBOXR3TSTEXE tstClipboardX11-2_DEFS = VBOX_WITH_HGCM TESTCASE tstClipboardX11-2_SOURCES = x11-clipboard.cpp tstClipboardX11-2_LIBS = $(LIB_RUNTIME) - tstClipboardX11-2_CLEANS = $(PATH_tstClipboardX11-2)/tstClipboardX11-2.run + tstClipboardX11-2_CLEANS = $(tstClipboardX11-2_0_OUTDIR)/tstClipboardX11-2.run -$$(PATH_tstClipboardX11-2)/tstClipboardX11-2.run: $$(INSTARGET_tstClipboardX11-2) +$$(tstClipboardX11-2_0_OUTDIR)/tstClipboardX11-2.run: $$(INSTARGET_tstClipboardX11-2) export VBOX_LOG_DEST=nofile; $(INSTARGET_tstClipboardX11-2) quiet $(QUIET)$(APPEND) -t "$@" "done" endif # 1of ($(KBUILD_TARGET),freebsd linux netbsd openbsd solaris) diff --git a/src/VBox/HostServices/SharedClipboard/service.cpp b/src/VBox/HostServices/SharedClipboard/service.cpp index 1bc9c800b..5734ebd11 100644 --- a/src/VBox/HostServices/SharedClipboard/service.cpp +++ b/src/VBox/HostServices/SharedClipboard/service.cpp @@ -1,7 +1,6 @@ +/* $Id: service.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file - * - * Shared Clipboard: - * Host service entry points. + * Shared Clipboard: Host service entry points. */ /* @@ -77,7 +76,7 @@ #include <iprt/string.h> #include <iprt/assert.h> #include <iprt/critsect.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #include "VBoxClipboard.h" diff --git a/src/VBox/HostServices/SharedFolders/service.cpp b/src/VBox/HostServices/SharedFolders/service.cpp index 75c5641c0..4d37c3dd1 100644 --- a/src/VBox/HostServices/SharedFolders/service.cpp +++ b/src/VBox/HostServices/SharedFolders/service.cpp @@ -24,8 +24,8 @@ #include <iprt/alloc.h> #include <iprt/string.h> #include <iprt/assert.h> -#include <VBox/ssm.h> -#include <VBox/pdm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/pdmifs.h> #define SHFL_SSM_VERSION 2 @@ -1168,11 +1168,10 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 { rc = VERR_INVALID_PARAMETER; } - else - if ( paParms[0].type != VBOX_HGCM_SVC_PARM_32BIT /* root */ - || paParms[1].type != VBOX_HGCM_SVC_PARM_PTR /* newPath */ - || paParms[2].type != VBOX_HGCM_SVC_PARM_PTR /* oldPath */ - || paParms[3].type != VBOX_HGCM_SVC_PARM_PTR /* info */ + else if ( paParms[0].type != VBOX_HGCM_SVC_PARM_32BIT /* root */ + || paParms[1].type != VBOX_HGCM_SVC_PARM_PTR /* newPath */ + || paParms[2].type != VBOX_HGCM_SVC_PARM_PTR /* oldPath */ + || paParms[3].type != VBOX_HGCM_SVC_PARM_PTR /* info */ ) { rc = VERR_INVALID_PARAMETER; @@ -1183,13 +1182,13 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 SHFLROOT root = (SHFLROOT)paParms[0].u.uint32; SHFLSTRING *pNewPath = (SHFLSTRING *)paParms[1].u.pointer.addr; SHFLSTRING *pOldPath = (SHFLSTRING *)paParms[2].u.pointer.addr; - RTFSOBJINFO *pInfo = (RTFSOBJINFO *)paParms[3].u.pointer.addr; + SHFLFSOBJINFO *pInfo = (SHFLFSOBJINFO *)paParms[3].u.pointer.addr; uint32_t cbInfo = paParms[3].u.pointer.size; /* Verify parameters values. */ if ( !ShflStringIsValid(pNewPath, paParms[1].u.pointer.size) || !ShflStringIsValid(pOldPath, paParms[2].u.pointer.size) - || (cbInfo != sizeof(RTFSOBJINFO)) + || (cbInfo != sizeof(SHFLFSOBJINFO)) ) { rc = VERR_INVALID_PARAMETER; diff --git a/src/VBox/HostServices/SharedFolders/testcase/Makefile.kmk b/src/VBox/HostServices/SharedFolders/testcase/Makefile.kmk index 51cf725e0..aca880b69 100644 --- a/src/VBox/HostServices/SharedFolders/testcase/Makefile.kmk +++ b/src/VBox/HostServices/SharedFolders/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the Shared Folders Host Service testcases. # @@ -22,20 +22,20 @@ include $(KBUILD_PATH)/subheader.kmk # Structure size testcase. # PROGRAMS += tstShflSizes -TESTING += $(PATH_tstShflSizes)/tstShflSizes.run +TESTING += $(tstShflSizes_0_OUTDIR)/tstShflSizes.run ifndef VBOX_ONLY_SDK ifeq ($(KBUILD_TARGET),$(KBUILD_HOST)) if1of ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH), x86.x86 amd64.amd64 x86.amd64) - OTHERS += $(PATH_tstShflSizes)/tstShflSizes.run + OTHERS += $(tstShflSizes_0_OUTDIR)/tstShflSizes.run endif endif endif tstShflSizes_TEMPLATE = VBOXR3AUTOTST tstShflSizes_DEFS = VBOX_WITH_HGCM tstShflSizes_SOURCES = tstShflSizes.cpp -tstShflSizes_CLEAN = $(PATH_tstShflSizes)/tstShflSizes.run +tstShflSizes_CLEAN = $(tstShflSizes_0_OUTDIR)/tstShflSizes.run -$$(PATH_tstShflSizes)/tstShflSizes.run: $$(INSTARGET_tstShflSizes) +$$(tstShflSizes_0_OUTDIR)/tstShflSizes.run: $$(INSTARGET_tstShflSizes) $(INSTARGET_tstShflSizes) quiet $(QUIET)$(APPEND) -t "$@" "done" diff --git a/src/VBox/HostServices/SharedFolders/vbsf.cpp b/src/VBox/HostServices/SharedFolders/vbsf.cpp index b54973997..e78438843 100644 --- a/src/VBox/HostServices/SharedFolders/vbsf.cpp +++ b/src/VBox/HostServices/SharedFolders/vbsf.cpp @@ -549,8 +549,7 @@ static int vbsfBuildFullPath (SHFLCLIENTDATA *pClient, SHFLROOT root, PSHFLSTRIN rc = RTPathQueryInfoEx(src, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); Assert(rc == VINF_SUCCESS || rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND); } - else - if (end == src) + else if (end == src) rc = VINF_SUCCESS; /* trailing delimiter */ else rc = VERR_FILE_NOT_FOUND; @@ -2146,7 +2145,7 @@ int vbsfRename(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pSrc, SHFLSTR return rc; } -int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SHFLSTRING *pOldPath, RTFSOBJINFO *pInfo) +int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SHFLSTRING *pOldPath, SHFLFSOBJINFO *pInfo) { int rc = VINF_SUCCESS; @@ -2163,7 +2162,12 @@ int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SH rc = RTSymlinkCreate(pszFullNewPath, (const char *)pOldPath->String.utf8, RTSYMLINKTYPE_UNKNOWN); if (RT_SUCCESS (rc)) - rc = RTPathQueryInfoEx(pszFullNewPath, pInfo, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); + { + RTFSOBJINFO info; + rc = RTPathQueryInfoEx(pszFullNewPath, &info, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient)); + if (RT_SUCCESS(rc)) + vbfsCopyFsObjInfoFromIprt(pInfo, &info); + } vbsfFreeFullPath(pszFullNewPath); diff --git a/src/VBox/HostServices/SharedFolders/vbsf.h b/src/VBox/HostServices/SharedFolders/vbsf.h index 7827bca38..76979681c 100644 --- a/src/VBox/HostServices/SharedFolders/vbsf.h +++ b/src/VBox/HostServices/SharedFolders/vbsf.h @@ -38,6 +38,6 @@ int vbsfFlush(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle); int vbsfDisconnect(SHFLCLIENTDATA *pClient); int vbsfQueryFileInfo(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, uint32_t flags, uint32_t *pcbBuffer, uint8_t *pBuffer); int vbsfReadLink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pPath, uint32_t cbPath, uint8_t *pBuffer, uint32_t cbBuffer); -int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SHFLSTRING *pOldPath, RTFSOBJINFO *pInfo); +int vbsfSymlink(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pNewPath, SHFLSTRING *pOldPath, SHFLFSOBJINFO *pInfo); #endif /* __VBSF__H */ diff --git a/src/VBox/HostServices/SharedOpenGL/LICENSE b/src/VBox/HostServices/SharedOpenGL/LICENSE new file mode 100644 index 000000000..d609a3581 --- /dev/null +++ b/src/VBox/HostServices/SharedOpenGL/LICENSE @@ -0,0 +1,32 @@ +Copyright (c) 2002, Stanford University +All rights reserved. + +Some portions of Chromium are copyrighted by individual organizations. +Please see the files COPYRIGHT.LLNL and COPYRIGHT.REDHAT for more +information. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of Stanford University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/src/VBox/HostServices/SharedOpenGL/Makefile.kmk b/src/VBox/HostServices/SharedOpenGL/Makefile.kmk index 190cab7fe..fdd1cf467 100644 --- a/src/VBox/HostServices/SharedOpenGL/Makefile.kmk +++ b/src/VBox/HostServices/SharedOpenGL/Makefile.kmk @@ -1,10 +1,10 @@ -# $Id: Makefile.kmk 33146 2010-10-15 10:34:58Z vboxsync $ +# $Id: Makefile.kmk 35447 2011-01-10 11:12:06Z vboxsync $ ## @file -# Sub-Makefile for the VirtualBox HGCM Service. +# Sub-Makefile for the Shared OpenGL Host Service. # # -# Copyright (C) 2008 Oracle Corporation +# Copyright (C) 2008-2010 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; @@ -55,12 +55,9 @@ VBoxSharedCrOpenGL_INTERMEDIATES = \ $(TEMPLATE_VBOXMAINEXE_INTERMEDIATES) VBoxSharedCrOpenGL_INCS.win = \ $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC) \ - $(VBOX_PATH_SDK)/bindings/mscom/include \ -VBoxSharedCrOpenGL_INCS = \ - $(PATH_VBoxSVC) \ - $(PATH_VBoxCOM) + $(VBOX_PATH_SDK)/bindings/mscom/include ifdef VBOX_WITH_XPCOM - VBoxSharedCrOpenGL_INCS += \ +VBoxSharedCrOpenGL_INCS += \ $(VBOX_XPCOM_INCS) endif VBoxSharedCrOpenGL_SOURCES = \ @@ -147,8 +144,8 @@ VBoxOGLcrserverlib_CLEAN = \ $(VBOX_PATH_CROGL_GENFILES)/server_simpleget.c \ $(VBOX_PATH_CROGL_GENFILES)/server_dispatch.h ifdef VBOXCR_LOGFPS -VBoxOGLcrserverlib_DEFS += VBOXCR_LOGFPS -endif +VBoxOGLcrserverlib_DEFS += VBOXCR_LOGFPS +endif # # Generate files for VBoxOGLcrserverlib diff --git a/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp b/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp index 616661fa5..fc26c8c21 100644 --- a/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp +++ b/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp @@ -1,4 +1,4 @@ -/* $Id: crservice.cpp 34571 2010-12-01 13:45:57Z vboxsync $ */ +/* $Id: crservice.cpp 35347 2010-12-27 16:25:58Z vboxsync $ */ /** @file * VBox crOpenGL: Host service entry points. @@ -19,41 +19,41 @@ #define __STDC_CONSTANT_MACROS /* needed for a definition in iprt/string.h */ #ifdef RT_OS_WINDOWS -#include <iprt/alloc.h> -#include <iprt/string.h> -#include <iprt/assert.h> -#include <iprt/stream.h> -#include <VBox/ssm.h> -#include <VBox/hgcmsvc.h> -#include <VBox/HostServices/VBoxCrOpenGLSvc.h> -#include "cr_server.h" -#define LOG_GROUP LOG_GROUP_SHARED_CROPENGL -#include <VBox/log.h> - -#include <VBox/com/com.h> -#include <VBox/com/string.h> -#include <VBox/com/array.h> -#include <VBox/com/Guid.h> -#include <VBox/com/ErrorInfo.h> -#include <VBox/com/EventQueue.h> -#include <VBox/com/VirtualBox.h> -#include <VBox/com/assert.h> +# include <iprt/alloc.h> +# include <iprt/string.h> +# include <iprt/assert.h> +# include <iprt/stream.h> +# include <VBox/vmm/ssm.h> +# include <VBox/hgcmsvc.h> +# include <VBox/HostServices/VBoxCrOpenGLSvc.h> +# include "cr_server.h" +# define LOG_GROUP LOG_GROUP_SHARED_CROPENGL +# include <VBox/log.h> + +# include <VBox/com/com.h> +# include <VBox/com/string.h> +# include <VBox/com/array.h> +# include <VBox/com/Guid.h> +# include <VBox/com/ErrorInfo.h> +# include <VBox/com/EventQueue.h> +# include <VBox/com/VirtualBox.h> +# include <VBox/com/assert.h> #else -#include <VBox/com/VirtualBox.h> -#include <iprt/assert.h> -#include <VBox/ssm.h> -#include <VBox/hgcmsvc.h> -#include <VBox/HostServices/VBoxCrOpenGLSvc.h> - -#include "cr_server.h" -#define LOG_GROUP LOG_GROUP_SHARED_CROPENGL -#include <VBox/log.h> -#include <VBox/com/ErrorInfo.h> +# include <VBox/com/VirtualBox.h> +# include <iprt/assert.h> +# include <VBox/vmm/ssm.h> +# include <VBox/hgcmsvc.h> +# include <VBox/HostServices/VBoxCrOpenGLSvc.h> + +# include "cr_server.h" +# define LOG_GROUP LOG_GROUP_SHARED_CROPENGL +# include <VBox/log.h> +# include <VBox/com/ErrorInfo.h> #endif /* RT_OS_WINDOWS */ #ifdef VBOX_WITH_CRHGSMI -#include <VBox/VBoxVideo.h> +# include <VBox/VBoxVideo.h> #endif #include <VBox/com/errorprint.h> @@ -66,8 +66,8 @@ static uint8_t* g_pvVRamBase; #endif #ifndef RT_OS_WINDOWS -#define DWORD int -#define WINAPI +# define DWORD int +# define WINAPI #endif static const char* gszVBoxOGLSSMMagic = "***OpenGL state data***"; @@ -727,7 +727,7 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32 rc = VERR_INVALID_PARAMETER; break; } - + uint8_t *pBuffer = (uint8_t *)pSvcBuffer->pData; uint32_t cbBuffer = pSvcBuffer->uiSize; diff --git a/src/VBox/HostServices/auth/Makefile.kmk b/src/VBox/HostServices/auth/Makefile.kmk index 8062fb8e6..fa6d596f0 100644 --- a/src/VBox/HostServices/auth/Makefile.kmk +++ b/src/VBox/HostServices/auth/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34563 2010-12-01 11:39:52Z vboxsync $ +# $Id: Makefile.kmk 35507 2011-01-12 14:52:23Z vboxsync $ ## @file # Sub-Makefile for the VBox RDP authentication plugins. # @@ -20,7 +20,9 @@ include $(KBUILD_PATH)/subheader.kmk # The plugin. ifndef VBOX_ONLY_SDK - DLLS += VBoxAuth + if ("$(KBUILD_TARGET)" != "linux" && "$(KBUILD_TARGET)" != "solaris") || defined(VBOX_WITH_PAM) + DLLS += VBoxAuth + endif endif VBoxAuth_TEMPLATE = VBOXR3 VBoxAuth_SOURCES.linux = pam/VBoxAuthPAM.c diff --git a/src/VBox/HostServices/testcase/Makefile.kmk b/src/VBox/HostServices/testcase/Makefile.kmk index 17776e8b3..cc66229a0 100644 --- a/src/VBox/HostServices/testcase/Makefile.kmk +++ b/src/VBox/HostServices/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the HGCM service testcase. # @@ -23,16 +23,16 @@ if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBO # # Set this in LocalConfig.kmk if you are working on HGCM service internals # to automatically run the unit test at build time: - # OTHERS += $(PATH_tstHGCMSvc)/tstHGCMSvc.run + # OTHERS += $(tstHGCMSvc_0_OUTDIR)/tstHGCMSvc.run # PROGRAMS += tstHGCMSvc - TESTING += $(PATH_tstHGCMSvc)/tstHGCMSvc.run + TESTING += $(tstHGCMSvc_0_OUTDIR)/tstHGCMSvc.run tstHGCMSvc_TEMPLATE = VBOXR3TSTEXE tstHGCMSvc_DEFS = VBOX_WITH_HGCM VBOX_TEST_HGCM_PARMS tstHGCMSvc_SOURCES = tstHGCMSvc.cpp - tstHGCMSvc_CLEAN = $(PATH_tstHGCMSvc)/tstHGCMSvc.run + tstHGCMSvc_CLEAN = $(tstHGCMSvc_0_OUTDIR)/tstHGCMSvc.run -$$(PATH_tstHGCMSvc)/tstHGCMSvc.run: $$(INSTARGET_tstHGCMSvc) +$$(tstHGCMSvc_0_OUTDIR)/tstHGCMSvc.run: $$(INSTARGET_tstHGCMSvc) export VBOX_LOG_DEST=nofile; $(INSTARGET_tstHGCMSvc) quiet $(QUIET)$(APPEND) -t "$@" "done" diff --git a/src/VBox/Installer/darwin/Makefile.kmk b/src/VBox/Installer/darwin/Makefile.kmk index 1bbf04002..f708b1527 100644 --- a/src/VBox/Installer/darwin/Makefile.kmk +++ b/src/VBox/Installer/darwin/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34737 2010-12-06 11:21:23Z vboxsync $ +# $Id: Makefile.kmk 35440 2011-01-09 23:43:10Z vboxsync $ ## @file # Install misc stuff and create dist packages for Mac OS X. # @@ -188,7 +188,7 @@ $(VBOX_PATH_PACK_TMP)/DiskImage/VirtualBox.mpkg: \ $(VBOX_PATH_PACK_TMP)/Packages/VBoxKEXTs.pkg \ $(VBOX_PATH_PACK_TMP)/Packages/VirtualBoxCLI.pkg \ $(VBOX_PATH_PACK_TMP)/Packages/VirtualBox.pkg \ - $$(TARGET_RegistrationPane) \ + $$(RegistrationPane_1_TARGET) \ $(if $(VBOX_OSE), , \ $(VBOX_PATH_DI_SRC)/InstallerPlugins/RegistrationPane/Info.plist \ $$(wildcard $(VBOX_PATH_DI_SRC)/InstallerPlugins/RegistrationPane/Resources/*.lproj/*.strings \ @@ -292,7 +292,7 @@ endif @# Copy the Registration Pane plugin. $(MKDIR) -p $@/Contents/Plugins/RegistrationPane.bundle/Contents/MacOS/ $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/InstallerPlugins/RegistrationPane/Info.plist $@/Contents/Plugins/RegistrationPane.bundle/Contents/ - $(INSTALL) -m 0644 $(TARGET_RegistrationPane) $@/Contents/Plugins/RegistrationPane.bundle/Contents/MacOS/ + $(INSTALL) -m 0644 $(RegistrationPane_1_TARGET) $@/Contents/Plugins/RegistrationPane.bundle/Contents/MacOS/ $(MKDIR) -p $@/Contents/Plugins/RegistrationPane.bundle/Contents/Resources/English.lproj/RegistrationPane.nib $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/InstallerPlugins/RegistrationPane/Resources/English.lproj/InfoPlist.strings $@/Contents/Plugins/RegistrationPane.bundle/Contents/Resources/English.lproj/ $(INSTALL) -m 0644 $(VBOX_PATH_DI_SRC)/InstallerPlugins/RegistrationPane/Resources/English.lproj/Localizable.strings $@/Contents/Plugins/RegistrationPane.bundle/Contents/Resources/English.lproj/ diff --git a/src/VBox/Installer/freebsd/Makefile.kmk b/src/VBox/Installer/freebsd/Makefile.kmk index 0b541dd35..e5e3f2efe 100644 --- a/src/VBox/Installer/freebsd/Makefile.kmk +++ b/src/VBox/Installer/freebsd/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34563 2010-12-01 11:39:52Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Makefile for the FreeBSD installer. # @@ -59,8 +59,8 @@ freebsd-misc_MODE = a+r,u+w freebsd-misc_SOURCES = \ $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/$(if $(VBOX_OSE),OSE,NonOSE)/VirtualBox_32px.png=>VBox.png \ $(if $(VBOX_OSE),,$(VBOX_BRAND_LICENSE_TXT)=>LICENSE) \ - $(if $(VBOX_WITH_QTGUI),$(PATH_freebsd-misc)/virtualbox.desktop,) -freebsd-misc_CLEAN = $(PATH_freebsd-misc)/virtualbox.desktop + $(if $(VBOX_WITH_QTGUI),$(freebsd-misc_0_OUTDIR)/virtualbox.desktop,) +freebsd-misc_CLEAN = $(freebsd-misc_0_OUTDIR)/virtualbox.desktop $$(PATH_freebsd-misc)/virtualbox.desktop: $(PATH_SUB_CURRENT)/virtualbox.desktop $(VBOX_VERSION_STAMP) | $$(dir $$@) $(call MSG_GENERATE,,$@,$<) diff --git a/src/VBox/Installer/linux/Makefile.kmk b/src/VBox/Installer/linux/Makefile.kmk index d52f80f73..5f87876c5 100644 --- a/src/VBox/Installer/linux/Makefile.kmk +++ b/src/VBox/Installer/linux/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 35206 2010-12-16 21:54:47Z vboxsync $ +# $Id: Makefile.kmk 35463 2011-01-10 16:29:56Z vboxsync $ ## @file # Makefile for the Linux installer. # @@ -76,10 +76,10 @@ linux-misc_SOURCES = \ $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/$(if $(VBOX_OSE),OSE,NonOSE)/VirtualBox_32px.png=>VBox.png \ $(PATH_ROOT)/src/VBox/Installer/common/virtualbox.xml \ $(if $(VBOX_OSE),,$(VBOX_BRAND_LICENSE_TXT)=>LICENSE) \ - $(if $(VBOX_WITH_QTGUI),$(PATH_linux-misc)/virtualbox.desktop,) -linux-misc_CLEAN = $(PATH_linux-misc)/virtualbox.desktop + $(if $(VBOX_WITH_QTGUI),$(linux-misc_0_OUTDIR)/virtualbox.desktop,) +linux-misc_CLEAN = $(linux-misc_0_OUTDIR)/virtualbox.desktop -$$(PATH_linux-misc)/virtualbox.desktop: $(PATH_ROOT)/src/VBox/Installer/common/virtualbox.desktop.in $(VBOX_VERSION_STAMP) | $$(dir $$@) +$$(linux-misc_0_OUTDIR)/virtualbox.desktop: $(PATH_ROOT)/src/VBox/Installer/common/virtualbox.desktop.in $(VBOX_VERSION_STAMP) | $$(dir $$@) $(call MSG_GENERATE,,$@,$<) ifdef VBOX_PATH_PACKAGE_DOCS $(QUIET)$(SED) -e "s+@VBOX_DOC_PATH@+$(VBOX_PATH_PACKAGE_DOCS)+" \ diff --git a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec index 9fe7fe274..85013b26a 100644 --- a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec +++ b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec @@ -106,7 +106,7 @@ rmdir icons mv virtualbox.xml $RPM_BUILD_ROOT/usr/share/mime/packages for i in VBoxManage VBoxSVC VBoxSDL VirtualBox VBoxHeadless VBoxExtPackHelperApp vboxwebsrv webtest; do mv $i $RPM_BUILD_ROOT/usr/lib/virtualbox; done -for i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl VBoxExtPackHelperApp; do +for i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl; do chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/$i; done mv VBoxTunctl $RPM_BUILD_ROOT/usr/bin for d in /lib/modules/*; do diff --git a/src/VBox/Installer/win/Resources/Makefile.kmk b/src/VBox/Installer/win/Resources/Makefile.kmk index 658a90e05..663f49648 100644 --- a/src/VBox/Installer/win/Resources/Makefile.kmk +++ b/src/VBox/Installer/win/Resources/Makefile.kmk @@ -1,10 +1,10 @@ -# $Id: Makefile.kmk 34355 2010-11-25 09:17:01Z vboxsync $ +# $Id: Makefile.kmk 35450 2011-01-10 11:14:34Z vboxsync $ ## @file # Sub-Makefile for VBoxRes.dll. # # -# Copyright (C) 2010 Oracle Corporation +# Copyright (C) 2010-2011 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; @@ -22,12 +22,13 @@ DLLS += VBoxRes VBoxRes_TEMPLATE = VBOXR3STATIC VBoxRes_DEPS = $(VBOX_SVN_REV_KMK) VBoxRes_SOURCES = \ + dummy.cpp \ VBoxRes.rc # The icon location is configurable. -VBoxRes.rc_INCS += $(PATH_VBoxRes) -VBoxRes.rc_DEPS += $(PATH_VBoxRes)/VBoxRes-icons.rc -VBoxRes.rc_CLEAN = $(PATH_VBoxRes)/VBoxRes-icons.rc +VBoxRes.rc_INCS += $(VBoxRes_0_OUTDIR) +VBoxRes.rc_DEPS += $(VBoxRes_0_OUTDIR)/VBoxRes-icons.rc +VBoxRes.rc_CLEAN = $(VBoxRes_0_OUTDIR)/VBoxRes-icons.rc # The resource path. VBOX_RESOURCES_PATH_WIN := $(subst /,\\,$(PATH_ROOT))/src/VBox/Resources/win @@ -55,7 +56,7 @@ VBOX_RESOURCES_WIN := \ $(VBOX_WINDOWS_ICON_EXT_OVA) \ $(VBOX_WINDOWS_ICON_EXT_OVF) -$$(PATH_VBoxRes)/VBoxRes-icons.rc: \ +$$(VBoxRes_0_OUTDIR)/VBoxRes-icons.rc: \ $$(VBOX_RESOURCES_WIN) $(MAKEFILE_CURRENT) | $$(dir $$@) $(RM) -f $@ $(APPEND) $@ 'IDI_VIRTUALBOX ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"' diff --git a/src/VBox/Installer/win/Resources/dummy.cpp b/src/VBox/Installer/win/Resources/dummy.cpp new file mode 100644 index 000000000..6bd5dca1b --- /dev/null +++ b/src/VBox/Installer/win/Resources/dummy.cpp @@ -0,0 +1,26 @@ +/* $Id: dummy.cpp 35477 2011-01-11 11:20:35Z vboxsync $ */ +/** @file + * dummy.cpp - file to make kBuild happy when building a resource only DLL. + */ + +/* + * Copyright (C) 2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#include <iprt/cdefs.h> + +RT_C_DECLS_BEGIN + +DECLEXPORT(void) VBoxResDummy(void) +{ +} + +RT_C_DECLS_END diff --git a/src/VBox/Installer/win/Stub/Makefile.kmk b/src/VBox/Installer/win/Stub/Makefile.kmk index 0fe515be5..e12d65b5a 100644 --- a/src/VBox/Installer/win/Stub/Makefile.kmk +++ b/src/VBox/Installer/win/Stub/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 31667 2010-08-13 15:57:03Z vboxsync $ +# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $ ## @file # Sub-Makefile for the stub installer. # @@ -41,12 +41,12 @@ VBoxStub.cpp_DEFS += VBOX_SVN_REV=$(VBOX_SVN_REV) VBoxStub.cpp_DEPS = $(VBOX_SVN_REV_KMK) # The icon location is configurable. -VBoxStub.rc_INCS += $(PATH_VBoxStub) -VBoxStub.rc_DEPS += $(PATH_VBoxStub)/VBoxStub-icon.rc -VBoxStub.rc_CLEAN = $(PATH_VBoxStub)/VBoxStub-icon.rc +VBoxStub.rc_INCS += $(VBoxStub_0_OUTDIR) +VBoxStub.rc_DEPS += $(VBoxStub_0_OUTDIR)/VBoxStub-icon.rc +VBoxStub.rc_CLEAN = $(VBoxStub_0_OUTDIR)/VBoxStub-icon.rc # Icon include file. -$$(PATH_VBoxStub)/VBoxStub-icon.rc: $(VBOX_WINDOWS_ICON_FILE) $(MAKEFILE_CURRENT) | $$(dir $$@) +$$(VBoxStub_0_OUTDIR)/VBoxStub-icon.rc: $(VBOX_WINDOWS_ICON_FILE) $(MAKEFILE_CURRENT) | $$(dir $$@) $(APPEND) -t $@ 'IDI_VIRTUALBOX ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"' endif # x86 only diff --git a/src/VBox/Main/Makefile.kmk b/src/VBox/Main/Makefile.kmk index e0ca6f174..579fa8336 100644 --- a/src/VBox/Main/Makefile.kmk +++ b/src/VBox/Main/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 35284 2010-12-21 20:49:53Z vboxsync $ +# $Id: Makefile.kmk 35498 2011-01-12 08:10:13Z vboxsync $ ## @file # Makefile for the VBox Main module. # @@ -34,10 +34,9 @@ include $(PATH_SUB_CURRENT)/cbinding/Makefile.kmk VBOX_PATH_MAIN_SRC := $(PATH_SUB_CURRENT) ifdef VBOX_ONLY_SDK - # used by some rules - PATH_VBoxCOM = $(PATH_TARGET)/VBoxCOM - BLDDIRS += $(PATH_VBoxCOM) $(PATH_BIN)/components # I'm Evil! Dr. Evil. + VBoxCOM_0_OUTDIR = $(PATH_TARGET)/VBoxCOM + BLDDIRS += $(VBoxCOM_0_OUTDIR) $(PATH_BIN)/components include $(KBUILD_PATH)/tools/VCC70.kmk include $(KBUILD_PATH)/sdks/WINPSDK.kmk endif # !VBOX_ONLY_SDK @@ -86,11 +85,11 @@ if defined(VBOX_ONLY_SDK) || "$(KBUILD_TARGET)" == "win" $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h \ $(VBOX_PATH_SDK)/bindings/mscom/lib/VirtualBox.tlb \ $(VBOX_PATH_SDK)/bindings/mscom/lib/VirtualBox_i.c \ - $(PATH_VBoxCOM)/VirtualBox.h \ - $(PATH_VBoxCOM)/VirtualBox_i.c \ - $(PATH_VBoxCOM)/VirtualBox.tlb + $(VBoxCOM_0_OUTDIR)/VirtualBox.h \ + $(VBoxCOM_0_OUTDIR)/VirtualBox_i.c \ + $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb - VBOX_MAIN_PREREQS += $(PATH_VBoxCOM)/VirtualBox_i.c + VBOX_MAIN_PREREQS += $(VBoxCOM_0_OUTDIR)/VirtualBox_i.c BLDDIRS += $(VBOX_PATH_SDK)/bindings/mscom/idl endif @@ -251,11 +250,11 @@ VBoxSVC_CXXFLAGS.freebsd = -O0 VBoxSVC_INCS = \ include \ - $(PATH_VBoxSVC) \ + $(VBoxSVC_0_OUTDIR) \ $(dir $(VBOX_XML_SCHEMADEFS_H)) \ . VBoxSVC_INCS.win = \ - $(PATH_VBoxCOM) + $(VBoxCOM_0_OUTDIR) ifdef VBOX_WITH_USB VBoxSVC_INCS.os2 = \ $(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/os2 @@ -278,99 +277,99 @@ VBoxSVC_INTERMEDIATES = \ $(VBOX_AUTOGEN_EVENT_H) VBoxSVC_SOURCES = \ - Global.cpp \ - Logging.cpp \ - Matching.cpp \ - xml/Settings.cpp \ - VirtualBoxBase.cpp \ - VirtualBoxErrorInfoImpl.cpp \ - VirtualBoxImpl.cpp \ - ApplianceImpl.cpp \ - ApplianceImplIO.cpp \ - ApplianceImplExport.cpp \ - ApplianceImplImport.cpp \ + src-all/DisplayPNGUtil.cpp \ + src-all/DisplayResampleImage.cpp \ + src-all/DisplayUtils.cpp \ + src-all/EventImpl.cpp \ + src-all/Global.cpp \ + src-all/Logging.cpp \ + src-all/PciDeviceAttachmentImpl.cpp \ + src-all/ProgressImpl.cpp \ + src-all/SharedFolderImpl.cpp \ + src-all/VirtualBoxBase.cpp \ + src-all/VirtualBoxErrorInfoImpl.cpp \ + $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \ + src-server/ApplianceImpl.cpp \ + src-server/ApplianceImplExport.cpp \ + src-server/ApplianceImplImport.cpp \ + src-server/ApplianceImplIO.cpp \ + src-server/AudioAdapterImpl.cpp \ + src-server/BandwidthControlImpl.cpp \ + src-server/BandwidthGroupImpl.cpp \ + src-server/BIOSSettingsImpl.cpp \ + src-server/DHCPServerImpl.cpp \ + src-server/DHCPServerRunner.cpp \ + src-server/GuestOSTypeImpl.cpp \ + src-server/HostImpl.cpp \ + src-server/HostNetworkInterfaceImpl.cpp \ + src-server/HostPower.cpp \ + src-server/MachineImpl.cpp \ + src-server/Matching.cpp \ + src-server/MediumAttachmentImpl.cpp \ + src-server/MediumFormatImpl.cpp \ + src-server/MediumImpl.cpp \ + src-server/MediumLock.cpp \ + src-server/NATEngineImpl.cpp \ + src-server/NetworkAdapterImpl.cpp \ + src-server/ParallelPortImpl.cpp \ + src-server/ProgressProxyImpl.cpp \ + src-server/SerialPortImpl.cpp \ + src-server/SnapshotImpl.cpp \ + src-server/StorageControllerImpl.cpp \ + src-server/SystemPropertiesImpl.cpp \ + src-server/USBControllerImpl.cpp \ + src-server/VFSExplorerImpl.cpp \ + src-server/VirtualBoxImpl.cpp \ + src-server/VRDEServerImpl.cpp \ xml/ovfreader.cpp \ - VFSExplorerImpl.cpp \ - MachineImpl.cpp \ - PciDeviceAttachmentImpl.cpp \ - SnapshotImpl.cpp \ - MediumImpl.cpp \ - MediumLock.cpp \ - MediumAttachmentImpl.cpp \ - MediumFormatImpl.cpp \ - ProgressImpl.cpp \ - ProgressProxyImpl.cpp \ - HostImpl.cpp \ - HostNetworkInterfaceImpl.cpp \ - DHCPServerImpl.cpp \ - DHCPServerRunner.cpp \ - GuestOSTypeImpl.cpp \ - NATEngineImpl.cpp \ - NetworkAdapterImpl.cpp \ - SerialPortImpl.cpp \ - ParallelPortImpl.cpp \ - USBControllerImpl.cpp \ - StorageControllerImpl.cpp \ - AudioAdapterImpl.cpp \ - SharedFolderImpl.cpp \ - SystemPropertiesImpl.cpp \ - BIOSSettingsImpl.cpp \ - HostPower.cpp \ - EventImpl.cpp \ - DisplayUtils.cpp \ - DisplayPNGUtil.cpp \ - DisplayResampleImage.cpp \ - BandwidthControlImpl.cpp \ - BandwidthGroupImpl.cpp \ - $(VBOX_AUTOGEN_EVENT_CPP) \ - VRDEServerImpl.cpp \ - $(if $(VBOX_WITH_XPCOM),xpcom/server.cpp,) \ + xml/Settings.cpp \ $(VBOX_XML_SCHEMADEFS_CPP) \ - $(if $(VBOX_WITH_EXTPACK),ExtPackManagerImpl.cpp ExtPackUtil.cpp,) + $(VBOX_AUTOGEN_EVENT_CPP) \ + $(if $(VBOX_WITH_XPCOM),src-server/xpcom/server.cpp,) VBoxSVC_SOURCES.darwin = \ - darwin/iokit.cpp \ - darwin/HostPowerDarwin.cpp + src-server/darwin/iokit.cpp \ + src-server/darwin/HostPowerDarwin.cpp ifdef VBOX_WITH_CROGL ifneq ($(KBUILD_TARGET),darwin) - VBoxSVC_SOURCES += generic/OpenGLTest.cpp + VBoxSVC_SOURCES += src-server/generic/OpenGLTest.cpp endif - VBoxSVC_SOURCES.darwin += darwin/OpenGLTestDarwin.cpp + VBoxSVC_SOURCES.darwin += src-server/darwin/OpenGLTestDarwin.cpp endif VBoxSVC_SOURCES.win = \ - win/svcmain.cpp \ - win/svchlp.cpp \ - win/HostPowerWin.cpp \ - win/VBoxSVC.rc \ - win/VBoxComEvents.cpp + src-server/win/svcmain.cpp \ + src-server/win/svchlp.cpp \ + src-server/win/HostPowerWin.cpp \ + src-server/win/VBoxSVC.rc \ + src-server/win/VBoxComEvents.cpp VBoxSVC_SOURCES.linux = \ - linux/HostHardwareLinux.cpp + src-server/linux/HostHardwareLinux.cpp VBoxSVC_SOURCES.solaris = \ - linux/vbox-libhal.cpp \ - solaris/DynLoadLibSolaris.cpp + src-server/linux/vbox-libhal.cpp \ + src-server/solaris/DynLoadLibSolaris.cpp VBoxSVC_SOURCES.freebsd = \ - freebsd/HostHardwareFreeBSD.cpp + src-server/freebsd/HostHardwareFreeBSD.cpp ifdef VBOX_WITH_USB ifdef VBOX_WITH_SYSFS_BY_DEFAULT - linux/USBProxyServiceLinux.cpp_DEFS += VBOX_WITH_SYSFS_BY_DEFAULT + src-server/linux/USBProxyServiceLinux.cpp_DEFS += VBOX_WITH_SYSFS_BY_DEFAULT endif VBoxSVC_SOURCES += \ - USBDeviceFilterImpl.cpp \ - USBProxyService.cpp \ - HostUSBDeviceImpl.cpp - VBoxSVC_SOURCES.darwin += darwin/USBProxyServiceDarwin.cpp - VBoxSVC_SOURCES.linux += linux/USBProxyServiceLinux.cpp - VBoxSVC_SOURCES.linux += linux/USBGetDevices.cpp - VBoxSVC_SOURCES.os2 += os2/USBProxyServiceOs2.cpp - VBoxSVC_SOURCES.solaris += solaris/USBProxyServiceSolaris.cpp - VBoxSVC_SOURCES.win += win/USBProxyServiceWindows.cpp - VBoxSVC_SOURCES.freebsd += freebsd/USBProxyServiceFreeBSD.cpp + src-server/USBDeviceFilterImpl.cpp \ + src-server/USBProxyService.cpp \ + src-server/HostUSBDeviceImpl.cpp + VBoxSVC_SOURCES.darwin += src-server/darwin/USBProxyServiceDarwin.cpp + VBoxSVC_SOURCES.linux += src-server/linux/USBProxyServiceLinux.cpp + VBoxSVC_SOURCES.linux += src-server/linux/USBGetDevices.cpp + VBoxSVC_SOURCES.os2 += src-server/os2/USBProxyServiceOs2.cpp + VBoxSVC_SOURCES.solaris += src-server/solaris/USBProxyServiceSolaris.cpp + VBoxSVC_SOURCES.win += src-server/win/USBProxyServiceWindows.cpp + VBoxSVC_SOURCES.freebsd += src-server/freebsd/USBProxyServiceFreeBSD.cpp endif ifdef VBOX_WITH_NETFLT @@ -379,7 +378,7 @@ ifdef VBOX_WITH_NETFLT # we're using the VCC since we're not using the DDK compiler/crt. # Since this is potentially risky, restrict it to the source file # needing it. - win/NetIf-win.cpp_INCS.win += $(PATH_TOOL_$(VBOX_VCC_TOOL)_INC) + src-server/win/NetIf-win.cpp_INCS.win += $(PATH_TOOL_$(VBOX_VCC_TOOL)_INC) VBoxSVC_LIBS.win += \ $(PATH_LIB)/WinNetConfig.lib \ $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \ @@ -400,40 +399,40 @@ endif ifdef VBOX_WITH_RESOURCE_USAGE_API VBoxSVC_SOURCES += \ - PerformanceImpl.cpp \ - Performance.cpp - VBoxSVC_SOURCES.darwin += darwin/PerformanceDarwin.cpp - VBoxSVC_SOURCES.freebsd += freebsd/PerformanceFreeBSD.cpp - VBoxSVC_SOURCES.linux += linux/PerformanceLinux.cpp - VBoxSVC_SOURCES.os2 += os2/PerformanceOs2.cpp - VBoxSVC_SOURCES.solaris += solaris/PerformanceSolaris.cpp - VBoxSVC_SOURCES.win += win/PerformanceWin.cpp + src-server/PerformanceImpl.cpp \ + src-server/Performance.cpp + VBoxSVC_SOURCES.darwin += src-server/darwin/PerformanceDarwin.cpp + VBoxSVC_SOURCES.freebsd += src-server/freebsd/PerformanceFreeBSD.cpp + VBoxSVC_SOURCES.linux += src-server/linux/PerformanceLinux.cpp + VBoxSVC_SOURCES.os2 += src-server/os2/PerformanceOs2.cpp + VBoxSVC_SOURCES.solaris += src-server/solaris/PerformanceSolaris.cpp + VBoxSVC_SOURCES.win += src-server/win/PerformanceWin.cpp VBoxSVC_LDFLAGS.darwin += -lproc VBoxSVC_LDFLAGS.solaris += -lkstat VBoxSVC_LDFLAGS.win += psapi.lib powrprof.lib endif ifdef VBOX_WITH_HOSTNETIF_API - VBoxSVC_SOURCES.win += win/NetIf-win.cpp - VBoxSVC_SOURCES.linux += linux/NetIf-linux.cpp - VBoxSVC_SOURCES.os2 += os2/NetIf-os2.cpp - VBoxSVC_SOURCES.darwin += darwin/NetIf-darwin.cpp - VBoxSVC_SOURCES.solaris += solaris/NetIf-solaris.cpp - VBoxSVC_SOURCES.freebsd += freebsd/NetIf-freebsd.cpp + VBoxSVC_SOURCES.win += src-server/win/NetIf-win.cpp + VBoxSVC_SOURCES.linux += src-server/linux/NetIf-linux.cpp + VBoxSVC_SOURCES.os2 += src-server/os2/NetIf-os2.cpp + VBoxSVC_SOURCES.darwin += src-server/darwin/NetIf-darwin.cpp + VBoxSVC_SOURCES.solaris += src-server/solaris/NetIf-solaris.cpp + VBoxSVC_SOURCES.freebsd += src-server/freebsd/NetIf-freebsd.cpp VBoxSVC_DEFS += VBOX_WITH_HOSTNETIF_API if1of ($(KBUILD_TARGET), linux darwin solaris freebsd) - VBoxSVC_SOURCES += generic/NetIf-generic.cpp + VBoxSVC_SOURCES += src-server/generic/NetIf-generic.cpp endif endif -win/VBoxSVC.rc_INCS = $(PATH_VBoxSVC) -win/VBoxSVC.rc_DEPS = $(PATH_VBoxSVC)/VBoxSVC.rgs $(PATH_VBoxSVC)/VBoxSVC-icon.rc -win/VBoxSVC.rc_CLEAN = $(PATH_VBoxSVC)/VBoxSVC.rgs $(PATH_VBoxSVC)/VBoxSVC-icon.rc +src-server/win/VBoxSVC.rc_INCS = $(VBoxSVC_0_OUTDIR) +src-server/win/VBoxSVC.rc_DEPS = $(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs $(VBoxSVC_0_OUTDIR)/VBoxSVC-icon.rc +src-server/win/VBoxSVC.rc_CLEAN = $(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs $(VBoxSVC_0_OUTDIR)/VBoxSVC-icon.rc -$$(PATH_VBoxSVC)/VBoxSVC-icon.rc: $(MAKEFILE_CURRENT) $(VBOX_WINDOWS_ICON_FILE) | $$(dir $$(@D)) +$$(VBoxSVC_0_OUTDIR)/VBoxSVC-icon.rc: $(MAKEFILE_CURRENT) $(VBOX_WINDOWS_ICON_FILE) | $$(dir $$(@D)) $(APPEND) -t $@ '1 ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"' -$$(PATH_VBoxSVC)/VBoxSVC.rgs: $(VBOX_PATH_MAIN_SRC)/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$(@D)) +$$(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs: $(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$(@D)) $(VBOX_XSLTPROC) --stringparam Module VBoxSVC -o $@ $< $(VBOX_XIDL_FILE) @@ -450,15 +449,15 @@ VBOX_XML_SCHEMA.solaris = $(VBOX_PATH_MAIN_SRC)/xml/VirtualBox-settings-so VBOX_XML_CONVERTER_TEMPLATE = $(VBOX_PATH_MAIN_SRC)/xml/SettingsConverter.xsl -$$(PATH_VBoxSVC)/xml_VirtualBox_settings_xsd.h: $(VBOX_XML_SCHEMA.$(KBUILD_TARGET)) $(VBOX_BIN2C) +$$(VBoxSVC_0_OUTDIR)/xml_VirtualBox_settings_xsd.h: $(VBOX_XML_SCHEMA.$(KBUILD_TARGET)) $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,VBoxSVC,$<,$@) $(QUIET)$(VBOX_BIN2C) _xml_VirtualBox_settings_xsd $< $@ -$$(PATH_VBoxSVC)/xml_VirtualBox_settings_common_xsd.h: $(VBOX_XML_SCHEMA_COMMON) $(VBOX_BIN2C) +$$(VBoxSVC_0_OUTDIR)/xml_VirtualBox_settings_common_xsd.h: $(VBOX_XML_SCHEMA_COMMON) $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,VBoxSVC,$<,$@) $(QUIET)$(VBOX_BIN2C) _xml_VirtualBox_settings_common_xsd $< $@ -$$(PATH_VBoxSVC)/xml_SettingsConverter_xsl.h: $(VBOX_XML_CONVERTER_TEMPLATE) $(VBOX_BIN2C) +$$(VBoxSVC_0_OUTDIR)/xml_SettingsConverter_xsl.h: $(VBOX_XML_CONVERTER_TEMPLATE) $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,VBoxSVC,$<,$@) $(QUIET)$(VBOX_BIN2C) _xml_SettingsConverter_xsl $< $@ @@ -500,7 +499,7 @@ if ( defined(VBOX_WITH_QTGUI) \ endif PROGRAMS += VBoxTestOGL VBoxTestOGL_TEMPLATE = $(if $(VBOX_WITH_VIDEOHWACCEL),$(if $(VBOX_WITH_HARDENING),VBOXQT4GUI,VBOXQT4GUIEXE),VBOXMAINEXE) - VBoxTestOGL_SOURCES = generic/OpenGLTestApp.cpp + VBoxTestOGL_SOURCES = src-server/generic/OpenGLTestApp.cpp VBoxTestOGL_LIBS = \ $(if $(VBOX_WITH_CROGL), \ $(PATH_LIB)/VBoxOGLhostspuload$(VBOX_SUFF_LIB) \ @@ -515,7 +514,7 @@ if ( defined(VBOX_WITH_QTGUI) \ ifdef VBOX_WITH_VIDEOHWACCEL VBoxTestOGL_QT_MODULES += Core Gui OpenGL VBoxTestOGL_LDFLAGS.darwin += -framework OpenGL - VBoxTestOGL_LIBS.win += $(PATH_SDK_WINPSDK_LIB)/Opengl32.lib + VBoxTestOGL_LIBS.win += $(PATH_SDK_WINPSDK_LIB)/Opengl32.lib if1of ($(KBUILD_TARGET), solaris linux freebsd) # must come after VBoxOGL2D, therefore don't set the arch-specific LIBS variable here! VBoxTestOGL_LIBS += GL @@ -538,18 +537,18 @@ ifdef VBOX_WITH_HARDENING endif VBoxSVCM_INCS = \ include \ - $(PATH_VBoxC) \ + $(VBoxC_0_OUTDIR) \ . VBoxSVCM_INTERMEDIATES = $(VBOX_MAIN_PREREQS) VBoxSVCM_SOURCES = \ - xpcom/server_module.cpp + src-server/xpcom/server_module.cpp VBoxSVCM_LDFLAGS.darwin = \ -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/components/VBoxSVCM.dylib \ - -exported_symbols_list $(PATH_VBoxSVCM)/VBoxSVCM.def + -exported_symbols_list $(VBoxSVCM_0_OUTDIR)/VBoxSVCM.def ifeq ($(KBUILD_TARGET),darwin) -VBoxSVCM_ORDERDEPS += $(PATH_VBoxSVCM)/VBoxSVCM.def -VBoxSVCM_CLEAN += $(PATH_VBoxSVCM)/VBoxSVCM.def -$$(PATH_VBoxSVCM)/VBoxSVCM.def: +VBoxSVCM_ORDERDEPS += $(VBoxSVCM_0_OUTDIR)/VBoxSVCM.def +VBoxSVCM_CLEAN += $(VBoxSVCM_0_OUTDIR)/VBoxSVCM.def +$$(VBoxSVCM_0_OUTDIR)/VBoxSVCM.def: $(RM) -f $@ $(APPEND) $@ _NSGetModule endif @@ -581,7 +580,6 @@ VBoxC_DEFS = \ $(if $(VBOX_WITH_PDM_ASYNC_COMPLETION),VBOX_WITH_PDM_ASYNC_COMPLETION,) \ $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \ $(if $(VBOX_WITH_VUSB),VBOX_WITH_VUSB,) \ - $(if $(VBOX_WITH_OLD_VBVA_LOCK),VBOX_WITH_OLD_VBVA_LOCK,) \ $(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \ $(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \ $(if $(VBOX_WITH_USB),VBOX_WITH_USB,) \ @@ -592,20 +590,17 @@ VBoxC_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE VBoxC_DEFS.win.x86 += _WIN32_WINNT=0x0500 VBoxC_DEFS.win.amd64 += _WIN32_WINNT=0x0510 -#temporary define -VBoxC_DEFS += MMSEAMLESS - VBoxC_INCS = \ include \ - $(PATH_VBoxC) \ + $(VBoxC_0_OUTDIR) \ $(dir $(VBOX_XML_SCHEMADEFS_H)) VBoxC_INCS.win = \ - $(PATH_VBoxCOM) \ + $(VBoxCOM_0_OUTDIR) \ . VBoxC_LDFLAGS.darwin = \ -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/components/VBoxC.dylib \ - -exported_symbols_list $(PATH_VBoxC)/VBoxC.def \ + -exported_symbols_list $(VBoxC_0_OUTDIR)/VBoxC.def \ -framework IOKit ifdef VBOX_USE_VCC80 VBoxC_LDFLAGS.win = /MANIFEST @@ -627,54 +622,54 @@ VBoxC_INTERMEDIATES = \ $(VBOX_AUTOGEN_EVENT_H) VBoxC_SOURCES = \ - Global.cpp \ - Logging.cpp \ - USBDeviceImpl.cpp \ - RemoteUSBDeviceImpl.cpp \ - VirtualBoxBase.cpp \ - VirtualBoxErrorInfoImpl.cpp \ - VirtualBoxClientImpl.cpp \ - ProgressImpl.cpp \ - SharedFolderImpl.cpp \ - SessionImpl.cpp \ - ConsoleImpl.cpp \ - ConsoleImpl2.cpp \ - ConsoleImplTeleporter.cpp \ - ConsoleVRDPServer.cpp \ - GuestImpl.cpp \ - GuestCtrlImpl.cpp \ - KeyboardImpl.cpp \ - MouseImpl.cpp \ - DisplayImpl.cpp \ - DisplayUtils.cpp \ - DisplayPNGUtil.cpp \ - DisplayResampleImage.cpp \ - MachineDebuggerImpl.cpp \ - VBoxDriversRegister.cpp \ - AudioSnifferInterface.cpp \ - VMMDevInterface.cpp \ - EventImpl.cpp \ - BusAssignmentManager.cpp \ - PciDeviceAttachmentImpl.cpp \ + src-all/DisplayPNGUtil.cpp \ + src-all/DisplayResampleImage.cpp \ + src-all/DisplayUtils.cpp \ + src-all/EventImpl.cpp \ + src-all/Global.cpp \ + src-all/Logging.cpp \ + src-all/PciDeviceAttachmentImpl.cpp \ + src-all/ProgressImpl.cpp \ + src-all/SharedFolderImpl.cpp \ + src-all/VirtualBoxBase.cpp \ + src-all/VirtualBoxErrorInfoImpl.cpp \ + $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \ + src-client/AudioSnifferInterface.cpp \ + src-client/BusAssignmentManager.cpp \ + src-client/ConsoleImpl.cpp \ + src-client/ConsoleImpl2.cpp \ + src-client/ConsoleImplTeleporter.cpp \ + src-client/ConsoleVRDPServer.cpp \ + src-client/DisplayImpl.cpp \ + src-client/GuestCtrlImpl.cpp \ + src-client/GuestImpl.cpp \ + src-client/KeyboardImpl.cpp \ + src-client/MachineDebuggerImpl.cpp \ + src-client/MouseImpl.cpp \ + src-client/RemoteUSBDeviceImpl.cpp \ + src-client/SessionImpl.cpp \ + src-client/USBDeviceImpl.cpp \ + src-client/VBoxDriversRegister.cpp \ + src-client/VirtualBoxClientImpl.cpp \ + src-client/VMMDevInterface.cpp \ $(VBOX_AUTOGEN_EVENT_CPP) \ - $(VBOX_XML_SCHEMADEFS_CPP) \ - $(if $(VBOX_WITH_EXTPACK),ExtPackManagerImpl.cpp ExtPackUtil.cpp,) + $(VBOX_XML_SCHEMADEFS_CPP) VBoxC_SOURCES.win = \ - win/dllmain.cpp \ - win/VBoxC.def \ - win/VBoxC.rc + src-client/win/dllmain.cpp \ + src-client/win/VBoxC.def \ + src-client/win/VBoxC.rc ifdef VBOX_WITH_XPCOM VBoxC_SOURCES += \ - xpcom/module.cpp + src-client/xpcom/module.cpp endif ifdef VBOX_WITH_HGCM VBoxC_SOURCES += \ - hgcm/HGCMObjects.cpp \ - hgcm/HGCMThread.cpp \ - hgcm/HGCM.cpp + src-client/HGCMObjects.cpp \ + src-client/HGCMThread.cpp \ + src-client/HGCM.cpp endif ifdef VBOX_WITH_CRHGSMI @@ -683,27 +678,27 @@ endif ifdef VBOX_WITH_USB VBoxC_SOURCES += \ - RemoteUSBBackend.cpp + src-client/RemoteUSBBackend.cpp endif ifeq ($(KBUILD_TARGET),darwin) -VBoxC_ORDERDEPS += $(PATH_VBoxC)/VBoxC.def -VBoxC_CLEAN += $(PATH_VBoxC)/VBoxC.def -$$(PATH_VBoxC)/VBoxC.def: $(MAKEFILE_CURRENT) +VBoxC_ORDERDEPS += $(VBoxC_0_OUTDIR)/VBoxC.def +VBoxC_CLEAN += $(VBoxC_0_OUTDIR)/VBoxC.def +$$(VBoxC_0_OUTDIR)/VBoxC.def: $(MAKEFILE_CURRENT) $(RM) -f $@ $(APPEND) $@ _NSGetModule $(APPEND) $@ _VBoxDriversRegister endif -ConsoleImpl.cpp_DEFS = \ +src-client/ConsoleImpl.cpp_DEFS = \ VBOX_BUILD_TARGET=\"$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)\" \ $(if $(VBOX_BLEEDING_EDGE),VBOX_BLEEDING_EDGE=\"$(VBOX_BLEEDING_EDGE)\",) -win/VBoxC.rc_DEPS = $(PATH_VBoxC)/VBoxC.rgs $(PATH_VBoxCOM)/VirtualBox.tlb -VBoxC_CLEAN.win += $(PATH_VBoxC)/VBoxC.rgs +src-client/win/VBoxC.rc_DEPS = $(VBoxC_0_OUTDIR)/VBoxC.rgs $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb +VBoxC_CLEAN.win += $(VBoxC_0_OUTDIR)/VBoxC.rgs -$$(PATH_VBoxC)/VBoxC.rgs: $(VBOX_PATH_MAIN_SRC)/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(PATH_VBoxC)/ +$$(VBoxC_0_OUTDIR)/VBoxC.rgs: $(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$@) $(VBOX_XSLTPROC) --stringparam Module VBoxC -o $@ $< $(VBOX_XIDL_FILE) @@ -728,10 +723,10 @@ ifeq ($(KBUILD_TARGET),win) VBoxCOM_DEFS.x86 += _WIN32_WINNT=0x0500 VBoxCOM_DEFS.amd64 += _WIN32_WINNT=0x0510 VBoxCOM_SOURCES += \ - $(PATH_VBoxCOM)/VirtualBox_i.c + $(VBoxCOM_0_OUTDIR)/VirtualBox_i.c else # !win VBoxCOM_SOURCES += \ - xpcom/helpers.cpp + glue/xpcom/helpers.cpp endif # !win @@ -744,8 +739,8 @@ ifdef VBOX_WITH_EXTPACK VBoxExtPackHelperApp_LDFLAGS.darwin = -framework Security VBoxExtPackHelperApp_LDFLAGS.win = /SUBSYSTEM:windows VBoxExtPackHelperApp_SOURCES = \ - VBoxExtPackHelperApp.cpp \ - ExtPackUtil.cpp + src-helper-apps/VBoxExtPackHelperApp.cpp \ + src-all/ExtPackUtil.cpp VBoxExtPackHelperApp_LIBS = \ $(LIB_RUNTIME) endif # VBOX_WITH_EXTPACK @@ -759,8 +754,7 @@ endif # !VBOX_ONLY_SDK (the ifndef is far above) # INSTALLS.win += VBoxMain-com-inst VBoxMain-com-inst_INST = $(INST_BIN) -VBoxMain-com-inst_SOURCES = \ - win/comregister.cmd +VBoxMain-com-inst_SOURCES = src-all/win/comregister.cmd if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "linux" @@ -788,7 +782,7 @@ include $(KBUILD_PATH)/subfooter.kmk # ## @todo this hack ain't cutting it any longer. (the file name is abspath'ed since ages now.) -xpcom/helpers.cpp: $(VBOX_IDL_TYPELIB.XPCOM) +glue/xpcom/helpers.cpp: $(VBOX_IDL_TYPELIB.XPCOM) $(VBOX_IDL_FILE.XPCOM): $(VBOX_PATH_MAIN_SRC)/idl/xpidl.xsl $(VBOX_XIDL_FILE) | $$(dir $$@) $(call MSG_TOOL,xsltproc,VBoxSVC,$<,$@) @@ -821,7 +815,7 @@ ifdef VBOX_WITH_XPCOM testidl: $(VBOX_IDL_FILE.XPCOM) $(VBOX_IDL_TYPELIB.XPCOM) testidlhdr: $(VBOX_IDL_HEADER.XPCOM) else -testidl: $(VBOX_IDL_FILE.MSCOM) $(PATH_VBoxCOM)/VirtualBox_i.c +testidl: $(VBOX_IDL_FILE.MSCOM) $(VBoxCOM_0_OUTDIR)/VirtualBox_i.c endif @@ -830,23 +824,23 @@ endif # and (b) generating more stuff *after* the main target has been completed. # # What needs to be done is to not depend on _i.c in the object subdir, but on all the final outputs. -$(PATH_VBoxCOM)/VirtualBox_i.c \ +$(VBoxCOM_0_OUTDIR)/VirtualBox_i.c \ + $(VBOX_PATH_SDK)/bindings/mscom/lib/VirtualBox_i.c \ -+ $(PATH_VBoxCOM)/VirtualBox.h \ ++ $(VBoxCOM_0_OUTDIR)/VirtualBox.h \ + $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h \ -+ $(PATH_VBoxCOM)/VirtualBox.tlb \ -+ $(VBOX_PATH_SDK)/bindings/mscom/lib/VirtualBox.tlb: $(VBOX_IDL_FILE.MSCOM) | $(call DIRDEP,$(PATH_VBoxCOM)) ++ $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb \ ++ $(VBOX_PATH_SDK)/bindings/mscom/lib/VirtualBox.tlb: $(VBOX_IDL_FILE.MSCOM) | $$(dir $$@) $(VBOX_MAIN_IDL) $(IDL_DEFS) \ - /out $(call VBOX_FN_MAKE_WIN_PATH,$(PATH_VBoxCOM)) \ + /out $(call VBOX_FN_MAKE_WIN_PATH,$(VBoxCOM_0_OUTDIR)) \ /cpp_cmd $(subst $(EXEC_X86_WIN32),,$(call VBOX_FN_MAKE_WIN_PATH,$(TOOL_$(VBOX_VCC_TOOL)_CC))) \ /I $(call VBOX_FN_MAKE_WIN_PATH,$(PATH_SDK_WINPSDK_INC)) \ /I idl \ $(call VBOX_FN_MAKE_WIN_PATH,$<) $(MKDIR) -p $(VBOX_PATH_SDK)/bindings/mscom/include - $(CP) $(PATH_VBoxCOM)/VirtualBox.h $(VBOX_PATH_SDK)/bindings/mscom/include + $(CP) $(VBoxCOM_0_OUTDIR)/VirtualBox.h $(VBOX_PATH_SDK)/bindings/mscom/include $(MKDIR) -p $(VBOX_PATH_SDK)/bindings/mscom/lib - $(CP) $(PATH_VBoxCOM)/VirtualBox.tlb $(VBOX_PATH_SDK)/bindings/mscom/lib - $(CP) $(PATH_VBoxCOM)/VirtualBox_i.c $(VBOX_PATH_SDK)/bindings/mscom/lib + $(CP) $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb $(VBOX_PATH_SDK)/bindings/mscom/lib + $(CP) $(VBoxCOM_0_OUTDIR)/VirtualBox_i.c $(VBOX_PATH_SDK)/bindings/mscom/lib # # Translation stuff diff --git a/src/VBox/Main/darwin/Makefile.kup b/src/VBox/Main/glue/xpcom/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/Main/darwin/Makefile.kup +++ b/src/VBox/Main/glue/xpcom/Makefile.kup diff --git a/src/VBox/Main/xpcom/helpers.cpp b/src/VBox/Main/glue/xpcom/helpers.cpp index 38ce71297..38ce71297 100644 --- a/src/VBox/Main/xpcom/helpers.cpp +++ b/src/VBox/Main/glue/xpcom/helpers.cpp diff --git a/src/VBox/Main/idl/VirtualBox.xidl b/src/VBox/Main/idl/VirtualBox.xidl index e509ac941..28e78a9c6 100644 --- a/src/VBox/Main/idl/VirtualBox.xidl +++ b/src/VBox/Main/idl/VirtualBox.xidl @@ -2,7 +2,7 @@ <!-- - Copyright (C) 2006-2010 Oracle Corporation + Copyright (C) 2006-2011 Oracle Corporation This file is part of VirtualBox Open Source Edition (OSE), as available from http://www.virtualbox.org. This file is free software; @@ -2906,7 +2906,7 @@ <interface name="IInternalMachineControl" extends="$unknown" - uuid="476126af-e223-4490-a8a0-b1f1575be013" + uuid="8e723ab0-812c-5662-dd8e-7ebc89637acf" internal="yes" wsmap="suppress" > @@ -2958,6 +2958,44 @@ <param name="result" type="long" dir="in"/> </method> + <method name="beginPoweringDown"> + <desc> + Called by the VM process to inform the server it wants to + stop the VM execution and power down. + </desc> + <param name="progress" type="IProgress" dir="out"> + <desc> + Progress object created by VBoxSVC to wait until + the VM is powered down. + </desc> + </param> + </method> + + <method name="endPoweringDown"> + <desc> + Called by the VM process to inform the server that powering + down previously requested by #beginPoweringDown is either + successfully finished or there was a failure. + + <result name="VBOX_E_FILE_ERROR"> + Settings file not accessible. + </result> + <result name="VBOX_E_XML_ERROR"> + Could not parse the settings file. + </result> + + </desc> + + <param name="result" type="long" dir="in"> + <desc>@c S_OK to indicate success. + </desc> + </param> + <param name="errMsg" type="wstring" dir="in"> + <desc>@c human readable error message in case of failure. + </desc> + </param> + </method> + <method name="runUSBDeviceFilters"> <desc> Asks the server to run USB devices filters of the associated @@ -5342,8 +5380,9 @@ Returns a snapshot of this machine with the given UUID. A @c null argument can be used to obtain the first snapshot - taken on this machine. This is useful if you want to traverse - the whole tree of snapshots starting from the root. + taken on this machine. To traverse the whole tree of snapshots + starting from the root, inspect the root snapshot's + <link to="ISnapshot::children" /> attribute and recurse over those children. <result name="VBOX_E_OBJECT_NOT_FOUND"> Virtual machine has no snapshots or snapshot not found. @@ -8628,11 +8667,10 @@ This simplifies restoring a machine to the state of a snapshot: only the differencing images need to be deleted. - The current machine state is not changed by taking a snapshot. - If the machine is running, it will resume execution after the - snapshot has been taken. After calling this, - <link to="IMachine::currentSnapshot" /> is set to the snapshot - just created. + The current machine state is not changed by taking a snapshot + except that <link to="IMachine::currentSnapshot" /> is set to + the newly created snapshot, which is also added to the machine's + snapshots tree. </li> <li><link to="IConsole::restoreSnapshot"/> resets a machine to @@ -8641,8 +8679,8 @@ settings and state to the state that was saved in the snapshot (if any). This destroys the machine's current state. After calling this, - <link to="IMachine::currentSnapshot" /> is set to the snapshot that was - restored. + <link to="IMachine::currentSnapshot" /> points to the snapshot + that was restored. </li> <li><link to="IConsole::deleteSnapshot"/> deletes a snapshot @@ -8663,15 +8701,21 @@ </li> </ul> - Each snapshot contains the settings of the virtual machine (hardware - configuration etc.). In addition, if the machine was running when the + Each snapshot contains a copy of virtual machine's settings (hardware + configuration etc.). This copy is contained in an immutable (read-only) + instance of <link to="IMachine" /> which is available from the snapshot's + <link to="#machine" /> attribute. When restoring the snapshot, these + settings are copied back to the original machine. + + In addition, if the machine was running when the snapshot was taken (<link to="IMachine::state"/> is <link to="MachineState_Running"/>), the current VM state is saved in the snapshot (similarly to what happens - when a VM's state is saved). The snapshot is then said to - be <i>online</i> because when restoring it, the VM will be running. + when a VM's state is saved). The snapshot is then said to be <i>online</i> + because when restoring it, the VM will be running. - If the machine is saved (<link to="MachineState_Saved"/>), the snapshot - receives a copy of the execution state file (<link to="IMachine::stateFilePath"/>). + If the machine was in <link to="MachineState_Saved">saved</link> saved, + the snapshot receives a copy of the execution state file + (<link to="IMachine::stateFilePath"/>). Otherwise, if the machine was not running (<link to="MachineState_PoweredOff"/> or <link to="MachineState_Aborted"/>), the snapshot is <i>offline</i>; @@ -8684,11 +8728,17 @@ </attribute> <attribute name="name" type="wstring"> - <desc>Short name of the snapshot.</desc> + <desc>Short name of the snapshot. + <note>Setting this attribute causes <link to="IMachine::saveSettings" /> to + be called implicitly.</note> + </desc> </attribute> <attribute name="description" type="wstring"> - <desc>Optional description of the snapshot.</desc> + <desc>Optional description of the snapshot. + <note>Setting this attribute causes <link to="IMachine::saveSettings" /> to + be called implicitly.</note> + </desc> </attribute> <attribute name="timeStamp" type="long long" readonly="yes"> @@ -8730,6 +8780,9 @@ <attribute name="children" type="ISnapshot" readonly="yes" safearray="yes"> <desc> Child snapshots (all snapshots having this one as a parent). + By inspecting this attribute starting with a machine's root snapshot + (which can be obtained by calling <link to="IMachine::findSnapshot" /> + with a @c null UUID), a machine's snapshots tree can be iterated over. </desc> </attribute> @@ -14810,8 +14863,7 @@ Snapshot 1 (B.vdi) Snapshot 1 (B.vdi) </param> <param name="progess" type="IProgress" dir="return"> <desc> - Progress object for the operation if it was decided that it should - be executed asynchronously - i.e. never in 4.0.0, but maybe in 4.0.x. + Progress object for the operation. </desc> </param> </method> @@ -14882,8 +14934,7 @@ Snapshot 1 (B.vdi) Snapshot 1 (B.vdi) </param> <param name="progess" type="IProgress" dir="return"> <desc> - Progress object for the operation if it was decided that it should - be executed asynchronously - i.e. never in 4.0.0, but maybe in 4.0.x. + Progress object for the operation. </desc> </param> </method> diff --git a/src/VBox/Main/include/AudioSnifferInterface.h b/src/VBox/Main/include/AudioSnifferInterface.h index 445e5ee44..3c467bc7e 100644 --- a/src/VBox/Main/include/AudioSnifferInterface.h +++ b/src/VBox/Main/include/AudioSnifferInterface.h @@ -18,7 +18,7 @@ #define ____H_AUDIOSNIFFERINTERFACE #include <VBox/com/ptr.h> -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> class Console; diff --git a/src/VBox/Main/include/ConsoleImpl.h b/src/VBox/Main/include/ConsoleImpl.h index 48c9c4458..68c357145 100644 --- a/src/VBox/Main/include/ConsoleImpl.h +++ b/src/VBox/Main/include/ConsoleImpl.h @@ -1,10 +1,10 @@ -/* $Id: ConsoleImpl.h 35171 2010-12-16 10:53:50Z vboxsync $ */ +/* $Id: ConsoleImpl.h 35460 2011-01-10 14:24:13Z vboxsync $ */ /** @file * VBox Console COM Class definition */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -44,13 +44,13 @@ class ExtPackManager; #endif #include <VBox/RemoteDesktop/VRDE.h> -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #ifdef VBOX_WITH_GUEST_PROPS # include <VBox/HostServices/GuestPropertySvc.h> /* For the property notification callback */ #endif #ifdef RT_OS_WINDOWS -# include "win/VBoxComEvents.h" +# include "../src-server/win/VBoxComEvents.h" #endif struct VUSBIRHCONFIG; @@ -434,7 +434,7 @@ private: HRESULT consoleInitReleaseLog(const ComPtr<IMachine> aMachine); HRESULT powerUp(IProgress **aProgress, bool aPaused); - HRESULT powerDown(Progress *aProgress = NULL); + HRESULT powerDown(IProgress *aProgress = NULL); HRESULT callTapSetupApplication(bool isStatic, RTFILE tapFD, Bstr &tapDevice, Bstr &tapSetupApplication); diff --git a/src/VBox/Main/include/ConsoleVRDPServer.h b/src/VBox/Main/include/ConsoleVRDPServer.h index ffd52c96c..9266ec3c6 100644 --- a/src/VBox/Main/include/ConsoleVRDPServer.h +++ b/src/VBox/Main/include/ConsoleVRDPServer.h @@ -1,7 +1,5 @@ -/* $Id: ConsoleVRDPServer.h 34906 2010-12-09 16:29:49Z vboxsync $ */ - +/* $Id: ConsoleVRDPServer.h 35374 2010-12-30 14:42:15Z vboxsync $ */ /** @file - * * VBox Console VRDE Server Helper class and implementation of IVRDEServerInfo */ @@ -21,7 +19,7 @@ #define ____H_CONSOLEVRDPSERVER #include "RemoteUSBBackend.h" -#include <hgcm/HGCM.h> +#include "HGCM.h" #include <VBox/VBoxAuth.h> diff --git a/src/VBox/Main/include/DisplayImpl.h b/src/VBox/Main/include/DisplayImpl.h index 6109f68d6..269de78ef 100644 --- a/src/VBox/Main/include/DisplayImpl.h +++ b/src/VBox/Main/include/DisplayImpl.h @@ -1,4 +1,4 @@ -/* $Id: DisplayImpl.h 35177 2010-12-16 12:41:35Z vboxsync $ */ +/* $Id: DisplayImpl.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ @@ -22,7 +22,7 @@ #include "SchemaDefs.h" #include <iprt/semaphore.h> -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <VBox/VMMDev.h> #include <VBox/VBoxVideo.h> @@ -144,10 +144,9 @@ public: } void getFramebufferDimensions(int32_t *px1, int32_t *py1, int32_t *px2, int32_t *py2); -#ifdef MMSEAMLESS + int handleSetVisibleRegion(uint32_t cRect, PRTRECT pRect); int handleQueryVisibleRegion(uint32_t *pcRect, PRTRECT pRect); -#endif int VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory); void VideoAccelFlush (void); @@ -272,7 +271,6 @@ private: void handleResizeCompletedEMT (void); -#ifdef VBOX_WITH_OLD_VBVA_LOCK RTCRITSECT mVBVALock; volatile uint32_t mfu32PendingVideoAccelDisable; @@ -291,7 +289,6 @@ private: /* Functions run under VBVA lock. */ int videoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory); void videoAccelFlush (void); -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ #ifdef VBOX_WITH_HGSMI volatile uint32_t mu32UpdateVBVAFlags; diff --git a/src/VBox/Main/include/DisplayUtils.h b/src/VBox/Main/include/DisplayUtils.h index ce4d24289..ff928aa68 100644 --- a/src/VBox/Main/include/DisplayUtils.h +++ b/src/VBox/Main/include/DisplayUtils.h @@ -21,6 +21,7 @@ using namespace com; #define sSSMDisplayScreenshotVer 0x00010001 #define sSSMDisplayVer 0x00010001 #define sSSMDisplayVer2 0x00010002 +#define sSSMDisplayVer3 0x00010003 int readSavedGuestSize(const Utf8Str &strStateFilePath, uint32_t u32ScreenId, uint32_t *pu32Width, uint32_t *pu32Height); diff --git a/src/VBox/Main/include/ExtPackManagerImpl.h b/src/VBox/Main/include/ExtPackManagerImpl.h index 43ead60fe..804941a13 100644 --- a/src/VBox/Main/include/ExtPackManagerImpl.h +++ b/src/VBox/Main/include/ExtPackManagerImpl.h @@ -1,4 +1,4 @@ -/* $Id: ExtPackManagerImpl.h 35273 2010-12-21 12:52:38Z vboxsync $ */ +/* $Id: ExtPackManagerImpl.h 35523 2011-01-13 13:12:03Z vboxsync $ */ /** @file * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC. */ @@ -45,7 +45,7 @@ public: HRESULT FinalConstruct(); void FinalRelease(); - HRESULT initWithFile(const char *a_pszFile, class ExtPackManager *a_pExtPackMgr); + HRESULT initWithFile(const char *a_pszFile, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox); void uninit(); RTMEMEF_NEW_AND_DELETE_OPERATORS(); /** @} */ @@ -218,8 +218,10 @@ class ATL_NO_VTABLE ExtPackManager : /** @name Internal interfaces used by other Main classes. * @{ */ - HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo, - IProgress **a_ppProgress); + static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob); + HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo); + static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob); + HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo); void callAllVirtualBoxReadyHooks(void); void callAllConsoleReadyHooks(IConsole *a_pConsole); void callAllVmCreatedHooks(IMachine *a_pMachine); diff --git a/src/VBox/Main/include/ExtPackUtil.h b/src/VBox/Main/include/ExtPackUtil.h index b67b61f6d..461856d87 100644 --- a/src/VBox/Main/include/ExtPackUtil.h +++ b/src/VBox/Main/include/ExtPackUtil.h @@ -1,4 +1,4 @@ -/* $Id: ExtPackUtil.h 34938 2010-12-10 09:15:46Z vboxsync $ */ +/* $Id: ExtPackUtil.h 35523 2011-01-13 13:12:03Z vboxsync $ */ /** @file * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++. */ @@ -109,6 +109,7 @@ typedef VBOXEXTPACKDESC *PVBOXEXTPACKDESC; typedef VBOXEXTPACKDESC const *PCVBOXEXTPACKDESC; +void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc); iprt::MiniString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo); iprt::MiniString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo); iprt::MiniString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball); diff --git a/src/VBox/Main/include/GuestImpl.h b/src/VBox/Main/include/GuestImpl.h index 63276cc4d..ab134b72e 100644 --- a/src/VBox/Main/include/GuestImpl.h +++ b/src/VBox/Main/include/GuestImpl.h @@ -1,5 +1,4 @@ /** @file - * * VirtualBox COM class implementation */ @@ -24,7 +23,7 @@ #ifdef VBOX_WITH_GUEST_CONTROL # include <VBox/HostServices/GuestControlSvc.h> -# include <hgcm/HGCM.h> +# include "HGCM.h" using namespace guestControl; #endif @@ -179,8 +178,10 @@ private: int notifyCtrlExecInStatus(uint32_t u32Function, PCALLBACKDATAEXECINSTATUS pData); CallbackMapIter getCtrlCallbackContextByID(uint32_t u32ContextID); GuestProcessMapIter getProcessByPID(uint32_t u32PID); + void notifyCtrlCallbackContext(Guest::CallbackMapIter it, const char *pszText); void destroyCtrlCallbackContext(CallbackMapIter it); uint32_t addCtrlCallbackContext(eVBoxGuestCtrlCallbackType enmType, void *pvData, uint32_t cbData, Progress* pProgress); + HRESULT waitForProcessStatusChange(ULONG uPID, ULONG *puRetStatus, ULONG *puRetExitCode, ULONG uTimeoutMS); # endif struct Data diff --git a/src/VBox/Main/include/hgcm/HGCM.h b/src/VBox/Main/include/HGCM.h index b9ea70316..f96d84321 100644 --- a/src/VBox/Main/include/hgcm/HGCM.h +++ b/src/VBox/Main/include/HGCM.h @@ -19,7 +19,7 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pdmifs.h> #include <VBox/VMMDev.h> #include <VBox/hgcmsvc.h> diff --git a/src/VBox/Main/include/hgcm/HGCMObjects.h b/src/VBox/Main/include/HGCMObjects.h index f7f51884d..f7f51884d 100644 --- a/src/VBox/Main/include/hgcm/HGCMObjects.h +++ b/src/VBox/Main/include/HGCMObjects.h diff --git a/src/VBox/Main/include/hgcm/HGCMThread.h b/src/VBox/Main/include/HGCMThread.h index e15d9c16c..fb01cebca 100644 --- a/src/VBox/Main/include/hgcm/HGCMThread.h +++ b/src/VBox/Main/include/HGCMThread.h @@ -1,5 +1,4 @@ /** @file - * * HGCMThread - Host-Guest Communication Manager worker threads header. */ @@ -20,7 +19,7 @@ #include <VBox/types.h> -#include <hgcm/HGCMObjects.h> +#include "HGCMObjects.h" /** A handle for HGCM message. */ typedef uint32_t HGCMMSGHANDLE; diff --git a/src/VBox/Main/include/HostImpl.h b/src/VBox/Main/include/HostImpl.h index a7bb16e42..1dcf2be4c 100644 --- a/src/VBox/Main/include/HostImpl.h +++ b/src/VBox/Main/include/HostImpl.h @@ -1,4 +1,4 @@ -/* $Id: HostImpl.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: HostImpl.h 35429 2011-01-07 14:42:24Z vboxsync $ */ /** @file * Implementation of IHost. */ @@ -108,7 +108,8 @@ public: HRESULT saveSettings(settings::Host &data); HRESULT getDrives(DeviceType_T mediumType, bool fRefresh, MediaList *&pll); - HRESULT findHostDrive(DeviceType_T mediumType, const Guid &uuid, bool fRefresh, ComObjPtr<Medium> &pMedium); + HRESULT findHostDriveById(DeviceType_T mediumType, const Guid &uuid, bool fRefresh, ComObjPtr<Medium> &pMedium); + HRESULT findHostDriveByName(DeviceType_T mediumType, const Utf8Str &strLocationFull, bool fRefresh, ComObjPtr<Medium> &pMedium); #ifdef VBOX_WITH_USB typedef std::list< ComObjPtr<HostUSBDeviceFilter> > USBDeviceFilterList; diff --git a/src/VBox/Main/include/KeyboardImpl.h b/src/VBox/Main/include/KeyboardImpl.h index 166cf40c7..3273f6a0d 100644 --- a/src/VBox/Main/include/KeyboardImpl.h +++ b/src/VBox/Main/include/KeyboardImpl.h @@ -1,4 +1,4 @@ -/* $Id: KeyboardImpl.h 33849 2010-11-08 14:36:38Z vboxsync $ */ +/* $Id: KeyboardImpl.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ @@ -22,7 +22,7 @@ #include "ConsoleEvents.h" #include "EventImpl.h" -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> /** Limit of simultaneously attached devices (just USB and/or PS/2). */ enum { KEYBOARD_MAX_DEVICES = 2 }; diff --git a/src/VBox/Main/include/MachineDebuggerImpl.h b/src/VBox/Main/include/MachineDebuggerImpl.h index 788a368ec..ef7a471e4 100644 --- a/src/VBox/Main/include/MachineDebuggerImpl.h +++ b/src/VBox/Main/include/MachineDebuggerImpl.h @@ -1,4 +1,4 @@ -/* $Id: MachineDebuggerImpl.h 35250 2010-12-20 16:10:30Z vboxsync $ */ +/* $Id: MachineDebuggerImpl.h 35506 2011-01-12 14:50:52Z vboxsync $ */ /** @file * @@ -120,5 +120,5 @@ private: bool mFlushMode; }; -#endif /* ____H_MACHINEDEBUGGER */ +#endif /* !____H_MACHINEDEBUGGER */ /* vi: set tabstop=4 shiftwidth=4 expandtab: */ diff --git a/src/VBox/Main/include/MachineImpl.h b/src/VBox/Main/include/MachineImpl.h index c45bc407c..150f5c019 100644 --- a/src/VBox/Main/include/MachineImpl.h +++ b/src/VBox/Main/include/MachineImpl.h @@ -1,10 +1,10 @@ -/* $Id: MachineImpl.h 35175 2010-12-16 12:36:00Z vboxsync $ */ +/* $Id: MachineImpl.h 35460 2011-01-10 14:24:13Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -926,6 +926,8 @@ public: STDMETHOD(GetIPCId)(BSTR *id); STDMETHOD(BeginPowerUp)(IProgress *aProgress); STDMETHOD(EndPowerUp)(LONG iResult); + STDMETHOD(BeginPoweringDown)(IProgress **aProgress); + STDMETHOD(EndPoweringDown)(LONG aResult, IN_BSTR aErrMsg); STDMETHOD(RunUSBDeviceFilters)(IUSBDevice *aUSBDevice, BOOL *aMatched, ULONG *aMaskedIfs); STDMETHOD(CaptureUSBDevice)(IN_BSTR aId); STDMETHOD(DetachUSBDevice)(IN_BSTR aId, BOOL aDone); diff --git a/src/VBox/Main/include/MouseImpl.h b/src/VBox/Main/include/MouseImpl.h index d3972ab3c..546ba27df 100644 --- a/src/VBox/Main/include/MouseImpl.h +++ b/src/VBox/Main/include/MouseImpl.h @@ -1,4 +1,4 @@ -/* $Id: MouseImpl.h 35212 2010-12-16 23:15:43Z vboxsync $ */ +/* $Id: MouseImpl.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ @@ -24,7 +24,7 @@ #ifndef VBOXBFE_WITHOUT_COM #include "EventImpl.h" #endif -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> /** Maximum number of devices supported */ enum { MOUSE_MAX_DEVICES = 3 }; diff --git a/src/VBox/Main/include/VMMDev.h b/src/VBox/Main/include/VMMDev.h index 629985ef3..3258bdfed 100644 --- a/src/VBox/Main/include/VMMDev.h +++ b/src/VBox/Main/include/VMMDev.h @@ -18,7 +18,7 @@ #define ____H_VMMDEV #include "VirtualBoxBase.h" -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/asm.h> class Console; diff --git a/src/VBox/Main/include/VirtualBoxBase.h b/src/VBox/Main/include/VirtualBoxBase.h index ec455e858..92c60d17c 100644 --- a/src/VBox/Main/include/VirtualBoxBase.h +++ b/src/VBox/Main/include/VirtualBoxBase.h @@ -202,7 +202,7 @@ public: if (RT_UNLIKELY(!(expr))) \ setError(E_FAIL, \ "Assertion failed: [%s] at '%s' (%d) in %s.\n%s.\nPlease contact the product vendor!", \ - #expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \ + #expr, __FILE__, __LINE__, __PRETTY_FUNCTION__, Utf8StrFmt a .c_str()); \ } while (0) #endif diff --git a/src/VBox/Main/include/VirtualBoxImpl.h b/src/VBox/Main/include/VirtualBoxImpl.h index ae50a118d..b1635c15c 100644 --- a/src/VBox/Main/include/VirtualBoxImpl.h +++ b/src/VBox/Main/include/VirtualBoxImpl.h @@ -1,4 +1,4 @@ -/* $Id: VirtualBoxImpl.h 34244 2010-11-22 14:31:02Z vboxsync $ */ +/* $Id: VirtualBoxImpl.h 35608 2011-01-18 14:19:31Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ @@ -232,6 +232,7 @@ public: HRESULT findRemoveableMedium(DeviceType_T mediumType, const Guid &uuid, bool fRefresh, + bool aSetError, ComObjPtr<Medium> &pMedium); HRESULT findGuestOSType(const Bstr &bstrOSType, diff --git a/src/VBox/Main/include/netif.h b/src/VBox/Main/include/netif.h index fd6081dd7..65cbb6752 100644 --- a/src/VBox/Main/include/netif.h +++ b/src/VBox/Main/include/netif.h @@ -67,6 +67,7 @@ typedef struct NETIFINFO RTNETADDRIPV6 IPv6Address; RTNETADDRIPV6 IPv6NetMask; BOOL bDhcpEnabled; + BOOL bIsDefault; RTMAC MACAddress; NETIFTYPE enmMediumType; NETIFSTATUS enmStatus; diff --git a/src/VBox/Main/include/ovfreader.h b/src/VBox/Main/include/ovfreader.h index 049f0f017..03fda6a71 100644 --- a/src/VBox/Main/include/ovfreader.h +++ b/src/VBox/Main/include/ovfreader.h @@ -1,4 +1,4 @@ -/* $Id: ovfreader.h 35043 2010-12-13 20:31:13Z vboxsync $ */ +/* $Id: ovfreader.h 35536 2011-01-13 15:12:10Z vboxsync $ */ /** @file * OVF reader declarations. * @@ -216,6 +216,7 @@ struct VirtualHardwareItem ResourceType_T resourceType; iprt::MiniString strOtherResourceType; iprt::MiniString strResourceSubType; + bool fResourceRequired; iprt::MiniString strHostResource; // "Abstractly specifies how a device shall connect to a resource on the deployment platform. // Not all devices need a backing." Used with disk items, for which this references a virtual diff --git a/src/VBox/Main/win/resource.h b/src/VBox/Main/include/win/resource.h index 173a49b8e..173a49b8e 100644 --- a/src/VBox/Main/win/resource.h +++ b/src/VBox/Main/include/win/resource.h diff --git a/src/VBox/Main/DisplayPNGUtil.cpp b/src/VBox/Main/src-all/DisplayPNGUtil.cpp index e3678174d..2ad1bfc1d 100644 --- a/src/VBox/Main/DisplayPNGUtil.cpp +++ b/src/VBox/Main/src-all/DisplayPNGUtil.cpp @@ -1,4 +1,4 @@ -/* $Id: DisplayPNGUtil.cpp 31958 2010-08-25 13:28:44Z vboxsync $ */ +/* $Id: DisplayPNGUtil.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * PNG utilities */ diff --git a/src/VBox/Main/DisplayResampleImage.cpp b/src/VBox/Main/src-all/DisplayResampleImage.cpp index b9c1729a9..85c29d652 100644 --- a/src/VBox/Main/DisplayResampleImage.cpp +++ b/src/VBox/Main/src-all/DisplayResampleImage.cpp @@ -315,3 +315,4 @@ void BitmapScale32 (uint8_t *dst, } } } + diff --git a/src/VBox/Main/DisplayUtils.cpp b/src/VBox/Main/src-all/DisplayUtils.cpp index 7940ce7c8..29cf02553 100644 --- a/src/VBox/Main/DisplayUtils.cpp +++ b/src/VBox/Main/src-all/DisplayUtils.cpp @@ -1,4 +1,4 @@ -/* $Id: DisplayUtils.cpp 32398 2010-09-10 12:46:23Z vboxsync $ */ +/* $Id: DisplayUtils.cpp 35576 2011-01-14 18:46:03Z vboxsync $ */ /** @file * Implementation of IDisplay helpers. */ @@ -19,7 +19,7 @@ #include <iprt/log.h> #include <VBox/err.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> int readSavedDisplayScreenshot(const Utf8Str &strStateFilePath, uint32_t u32Type, uint8_t **ppu8Data, uint32_t *pcbData, uint32_t *pu32Width, uint32_t *pu32Height) { @@ -163,7 +163,8 @@ int readSavedGuestSize(const Utf8Str &strStateFilePath, uint32_t u32ScreenId, ui if (RT_SUCCESS(vrc)) { /* Only the second version is supported. */ - if (uVersion == sSSMDisplayVer2) + if ( uVersion == sSSMDisplayVer2 + || uVersion == sSSMDisplayVer3) { uint32_t cMonitors; SSMR3GetU32(pSSM, &cMonitors); diff --git a/src/VBox/Main/EventImpl.cpp b/src/VBox/Main/src-all/EventImpl.cpp index dd8fc0889..73d46bdc4 100644 --- a/src/VBox/Main/EventImpl.cpp +++ b/src/VBox/Main/src-all/EventImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: EventImpl.cpp 34316 2010-11-24 12:52:20Z vboxsync $ */ +/* $Id: EventImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox COM Event class implementation */ diff --git a/src/VBox/Main/ExtPackManagerImpl.cpp b/src/VBox/Main/src-all/ExtPackManagerImpl.cpp index 24a778e43..c126b9fb4 100644 --- a/src/VBox/Main/ExtPackManagerImpl.cpp +++ b/src/VBox/Main/src-all/ExtPackManagerImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: ExtPackManagerImpl.cpp 35273 2010-12-21 12:52:38Z vboxsync $ */ +/* $Id: ExtPackManagerImpl.cpp 35523 2011-01-13 13:12:03Z vboxsync $ */ /** @file * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC. */ @@ -43,6 +43,7 @@ #include <VBox/version.h> #include "AutoCaller.h" #include "Global.h" +#include "ProgressImpl.h" #include "SystemPropertiesImpl.h" #include "VirtualBoxImpl.h" @@ -93,6 +94,8 @@ public: RTMANIFEST hOurManifest; /** Pointer to the extension pack manager. */ ComObjPtr<ExtPackManager> ptrExtPackMgr; + /** Pointer to the VirtualBox object so we can create a progress object. */ + VirtualBox *pVirtualBox; RTMEMEF_NEW_AND_DELETE_OPERATORS(); }; @@ -157,6 +160,44 @@ struct ExtPackManager::Data RTMEMEF_NEW_AND_DELETE_OPERATORS(); }; +/** + * Extension pack installation job. + */ +typedef struct EXTPACKINSTALLJOB +{ + /** Smart pointer to the extension pack file. */ + ComPtr<ExtPackFile> ptrExtPackFile; + /** The replace argument. */ + bool fReplace; + /** The display info argument. */ + Utf8Str strDisplayInfo; + /** Smart pointer to the extension manager. */ + ComPtr<ExtPackManager> ptrExtPackMgr; + /** Smart pointer to the progress object for this job. */ + ComObjPtr<Progress> ptrProgress; +} EXTPACKINSTALLJOB; +/** Pointer to an extension pack installation job. */ +typedef EXTPACKINSTALLJOB *PEXTPACKINSTALLJOB; + +/** + * Extension pack uninstallation job. + */ +typedef struct EXTPACKUNINSTALLJOB +{ + /** Smart pointer to the extension manager. */ + ComPtr<ExtPackManager> ptrExtPackMgr; + /** The name of the extension pack. */ + Utf8Str strName; + /** The replace argument. */ + bool fForcedRemoval; + /** The display info argument. */ + Utf8Str strDisplayInfo; + /** Smart pointer to the progress object for this job. */ + ComObjPtr<Progress> ptrProgress; +} EXTPACKUNINSTALLJOB; +/** Pointer to an extension pack uninstallation job. */ +typedef EXTPACKUNINSTALLJOB *PEXTPACKUNINSTALLJOB; + DEFINE_EMPTY_CTOR_DTOR(ExtPackFile) @@ -179,8 +220,9 @@ HRESULT ExtPackFile::FinalConstruct() * @returns COM status code. * @param a_pszFile The path to the extension pack file. * @param a_pExtPackMgr Pointer to the extension pack manager. + * @param a_pVirtualBox Pointer to the VirtualBox object. */ -HRESULT ExtPackFile::initWithFile(const char *a_pszFile, ExtPackManager *a_pExtPackMgr) +HRESULT ExtPackFile::initWithFile(const char *a_pszFile, ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox) { AutoInitSpan autoInitSpan(this); AssertReturn(autoInitSpan.isOk(), E_FAIL); @@ -189,7 +231,7 @@ HRESULT ExtPackFile::initWithFile(const char *a_pszFile, ExtPackManager *a_pExtP * Allocate + initialize our private data. */ m = new ExtPackFile::Data; - m->Desc.strName = NULL; + VBoxExtPackInitDesc(&m->Desc); RT_ZERO(m->ObjInfoDesc); m->fUsable = false; m->strWhyUnusable = tr("ExtPack::init failed"); @@ -197,6 +239,7 @@ HRESULT ExtPackFile::initWithFile(const char *a_pszFile, ExtPackManager *a_pExtP m->hExtPackFile = NIL_RTFILE; m->hOurManifest = NIL_RTMANIFEST; m->ptrExtPackMgr = a_pExtPackMgr; + m->pVirtualBox = a_pVirtualBox; iprt::MiniString *pstrTarName = VBoxExtPackExtractNameFromTarballPath(a_pszFile); if (pstrTarName) @@ -588,14 +631,55 @@ STDMETHODIMP ExtPackFile::Install(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IP { if (a_ppProgress) *a_ppProgress = NULL; - Utf8Str strDisplayInfo(a_bstrDisplayInfo); AutoCaller autoCaller(this); HRESULT hrc = autoCaller.rc(); if (SUCCEEDED(hrc)) { if (m->fUsable) - hrc = m->ptrExtPackMgr->doInstall(this, RT_BOOL(a_fReplace), &strDisplayInfo, a_ppProgress); + { + PEXTPACKINSTALLJOB pJob = NULL; + try + { + pJob = new EXTPACKINSTALLJOB; + pJob->ptrExtPackFile = this; + pJob->fReplace = a_fReplace; + pJob->strDisplayInfo = a_bstrDisplayInfo; + pJob->ptrExtPackMgr = m->ptrExtPackMgr; + hrc = pJob->ptrProgress.createObject(); + if (SUCCEEDED(hrc)) + { + Bstr bstrDescription = tr("Installing extension pack"); + hrc = pJob->ptrProgress->init( +#ifndef VBOX_COM_INPROC + m->pVirtualBox, +#endif + static_cast<IExtPackFile *>(this), + bstrDescription.raw(), + FALSE /*aCancelable*/, + NULL /*aId*/); + } + if (SUCCEEDED(hrc)) + { + ComPtr<Progress> ptrProgress = pJob->ptrProgress; + int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doInstallThreadProc, pJob, 0, + RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackInst"); + if (RT_SUCCESS(vrc)) + { + pJob = NULL; /* the thread deletes it */ + ptrProgress.queryInterfaceTo(a_ppProgress); + } + else + hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc); + } + } + catch (std::bad_alloc) + { + hrc = E_OUTOFMEMORY; + } + if (pJob) + delete pJob; + } else hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str()); } @@ -662,6 +746,7 @@ HRESULT ExtPack::initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, * Allocate + initialize our private data. */ m = new Data; + VBoxExtPackInitDesc(&m->Desc); m->Desc.strName = a_pszName; RT_ZERO(m->ObjInfoDesc); m->fUsable = false; @@ -1184,7 +1269,7 @@ void ExtPack::probeAndLoad(void) if (RT_FAILURE(vrc)) { m->hMainMod = NIL_RTLDRMOD; - m->strWhyUnusable.printf(tr("Failed to locate load the main module ('%s'): %Rrc - %s"), + m->strWhyUnusable.printf(tr("Failed to load the main module ('%s'): %Rrc - %s"), m->strMainModPath.c_str(), vrc, ErrInfo.Core.pszMsg); return; } @@ -1920,7 +2005,7 @@ STDMETHODIMP ExtPackManager::OpenExtPackFile(IN_BSTR a_bstrTarball, IExtPackFile ComObjPtr<ExtPackFile> NewExtPackFile; HRESULT hrc = NewExtPackFile.createObject(); if (SUCCEEDED(hrc)) - hrc = NewExtPackFile->initWithFile(strTarball.c_str(), this); + hrc = NewExtPackFile->initWithFile(strTarball.c_str(), this, m->pVirtualBox); if (SUCCEEDED(hrc)) NewExtPackFile.queryInterfaceTo(a_ppExtPackFile); @@ -1931,8 +2016,6 @@ STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval IProgress **a_ppProgress) { CheckComArgNotNull(a_bstrName); - Utf8Str strName(a_bstrName); - Utf8Str strDisplayInfo(a_bstrDisplayInfo); if (a_ppProgress) *a_ppProgress = NULL; Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); @@ -1941,74 +2024,47 @@ STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval HRESULT hrc = autoCaller.rc(); if (SUCCEEDED(hrc)) { - AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); - - /* - * Refresh the data we have on the extension pack as it may be made - * stale by direct meddling or some other user. - */ - ExtPack *pExtPack; - hrc = refreshExtPack(strName.c_str(), false /*a_fUnusableIsError*/, &pExtPack); - if (SUCCEEDED(hrc)) + PEXTPACKUNINSTALLJOB pJob = NULL; + try { - if (!pExtPack) + pJob = new EXTPACKUNINSTALLJOB; + pJob->ptrExtPackMgr = this; + pJob->strName = a_bstrName; + pJob->fForcedRemoval = a_fForcedRemoval != FALSE; + pJob->strDisplayInfo = a_bstrDisplayInfo; + hrc = pJob->ptrProgress.createObject(); + if (SUCCEEDED(hrc)) { - LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", strName.c_str())); - hrc = S_OK; /* nothing to uninstall */ + Bstr bstrDescription = tr("Uninstalling extension pack"); + hrc = pJob->ptrProgress->init( +#ifndef VBOX_COM_INPROC + m->pVirtualBox, +#endif + static_cast<IExtPackManager *>(this), + bstrDescription.raw(), + FALSE /*aCancelable*/, + NULL /*aId*/); } - else + if (SUCCEEDED(hrc)) { - /* - * Call the uninstall hook and unload the main dll. - */ - hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval != FALSE); - if (SUCCEEDED(hrc)) + ComPtr<Progress> ptrProgress = pJob->ptrProgress; + int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doUninstallThreadProc, pJob, 0, + RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackUninst"); + if (RT_SUCCESS(vrc)) { - /* - * Run the set-uid-to-root binary that performs the - * uninstallation. Then refresh the object. - * - * This refresh is theorically subject to races, but it's of - * the don't-do-that variety. - */ - const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL; - hrc = runSetUidToRootHelper(&strDisplayInfo, - "uninstall", - "--base-dir", m->strBaseDir.c_str(), - "--name", strName.c_str(), - pszForcedOpt, /* Last as it may be NULL. */ - (const char *)NULL); - if (SUCCEEDED(hrc)) - { - hrc = refreshExtPack(strName.c_str(), false /*a_fUnusableIsError*/, &pExtPack); - if (SUCCEEDED(hrc)) - { - if (!pExtPack) - LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", strName.c_str())); - else - hrc = setError(E_FAIL, - tr("Uninstall extension pack '%s' failed under mysterious circumstances"), - strName.c_str()); - } - } - else - { - ErrorInfoKeeper Eik; - refreshExtPack(strName.c_str(), false /*a_fUnusableIsError*/, NULL); - } + pJob = NULL; /* the thread deletes it */ + ptrProgress.queryInterfaceTo(a_ppProgress); } + else + hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc); } } - - /* - * Do VirtualBoxReady callbacks now for any freshly installed - * extension pack (old ones will not be called). - */ - if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) + catch (std::bad_alloc) { - autoLock.release(); - callAllVirtualBoxReadyHooks(); + hrc = E_OUTOFMEMORY; } + if (pJob) + delete pJob; } return hrc; @@ -2471,8 +2527,28 @@ HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIs } /** + * Thread wrapper around doInstall. + * + * @returns VINF_SUCCESS (ignored) + * @param hThread The thread handle (ignored). + * @param pvJob The job structure. + */ +/*static*/ DECLCALLBACK(int) ExtPackManager::doInstallThreadProc(RTTHREAD hThread, void *pvJob) +{ + PEXTPACKINSTALLJOB pJob = (PEXTPACKINSTALLJOB)pvJob; + HRESULT hrc = pJob->ptrExtPackMgr->doInstall(pJob->ptrExtPackFile, pJob->fReplace, &pJob->strDisplayInfo); + pJob->ptrProgress->notifyComplete(hrc); + delete pJob; + + NOREF(hThread); + return VINF_SUCCESS; +} + +/** * Worker for IExtPackFile::Install. * + * Called on a worker thread via doInstallThreadProc. + * * @returns COM status code. * @param a_pExtPackFile The extension pack file, caller checks that * it's usable. @@ -2482,13 +2558,11 @@ HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIs * @param a_ppProgress Where to return a progress object some day. Can * be NULL. */ -HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo, - IProgress **a_ppProgress) +HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo) { AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED); iprt::MiniString const * const pStrName = &a_pExtPackFile->m->Desc.strName; iprt::MiniString const * const pStrTarball = &a_pExtPackFile->m->strExtPackFile; - NOREF(a_ppProgress); /** @todo implement progress object */ AutoCaller autoCaller(this); HRESULT hrc = autoCaller.rc(); @@ -2579,6 +2653,117 @@ HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, return hrc; } +/** + * Thread wrapper around doUninstall. + * + * @returns VINF_SUCCESS (ignored) + * @param hThread The thread handle (ignored). + * @param pvJob The job structure. + */ +/*static*/ DECLCALLBACK(int) ExtPackManager::doUninstallThreadProc(RTTHREAD hThread, void *pvJob) +{ + PEXTPACKUNINSTALLJOB pJob = (PEXTPACKUNINSTALLJOB)pvJob; + HRESULT hrc = pJob->ptrExtPackMgr->doUninstall(&pJob->strName, pJob->fForcedRemoval, &pJob->strDisplayInfo); + pJob->ptrProgress->notifyComplete(hrc); + delete pJob; + + NOREF(hThread); + return VINF_SUCCESS; +} + +/** + * Worker for IExtPackManager::Uninstall. + * + * Called on a worker thread via doUninstallThreadProc. + * + * @returns COM status code. + * @param a_pstrName The name of the extension pack to uninstall. + * @param a_fForcedRemoval Whether to be skip and ignore certain bits of + * the extpack feedback. To deal with misbehaving + * extension pack hooks. + * @param a_pstrDisplayInfo Host specific display information hacks. + */ +HRESULT ExtPackManager::doUninstall(Utf8Str const *a_pstrName, bool a_fForcedRemoval, Utf8Str const *a_pstrDisplayInfo) +{ + Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON); + + AutoCaller autoCaller(this); + HRESULT hrc = autoCaller.rc(); + if (SUCCEEDED(hrc)) + { + AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); + + /* + * Refresh the data we have on the extension pack as it may be made + * stale by direct meddling or some other user. + */ + ExtPack *pExtPack; + hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); + if (SUCCEEDED(hrc)) + { + if (!pExtPack) + { + LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", a_pstrName->c_str())); + hrc = S_OK; /* nothing to uninstall */ + } + else + { + /* + * Call the uninstall hook and unload the main dll. + */ + hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval); + if (SUCCEEDED(hrc)) + { + /* + * Run the set-uid-to-root binary that performs the + * uninstallation. Then refresh the object. + * + * This refresh is theorically subject to races, but it's of + * the don't-do-that variety. + */ + const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL; + hrc = runSetUidToRootHelper(a_pstrDisplayInfo, + "uninstall", + "--base-dir", m->strBaseDir.c_str(), + "--name", a_pstrName->c_str(), + pszForcedOpt, /* Last as it may be NULL. */ + (const char *)NULL); + if (SUCCEEDED(hrc)) + { + hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack); + if (SUCCEEDED(hrc)) + { + if (!pExtPack) + LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", a_pstrName->c_str())); + else + hrc = setError(E_FAIL, + tr("Uninstall extension pack '%s' failed under mysterious circumstances"), + a_pstrName->c_str()); + } + } + else + { + ErrorInfoKeeper Eik; + refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, NULL); + } + } + } + } + + /* + * Do VirtualBoxReady callbacks now for any freshly installed + * extension pack (old ones will not be called). + */ + if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON) + { + autoLock.release(); + callAllVirtualBoxReadyHooks(); + } + } + + return hrc; +} + /** * Calls the pfnVirtualBoxReady hook for all working extension packs. diff --git a/src/VBox/Main/ExtPackUtil.cpp b/src/VBox/Main/src-all/ExtPackUtil.cpp index df6bbaa01..2636cb06a 100644 --- a/src/VBox/Main/ExtPackUtil.cpp +++ b/src/VBox/Main/src-all/ExtPackUtil.cpp @@ -1,4 +1,4 @@ -/* $Id: ExtPackUtil.cpp 35158 2010-12-15 17:15:21Z vboxsync $ */ +/* $Id: ExtPackUtil.cpp 35523 2011-01-13 13:12:03Z vboxsync $ */ /** @file * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++. */ @@ -19,7 +19,7 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include "include/ExtPackUtil.h" +#include "../include/ExtPackUtil.h" #include <iprt/ctype.h> #include <iprt/dir.h> @@ -78,6 +78,18 @@ static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc) } /** + * Initializes an extension pack descriptor so that it's safe to call free on + * it whatever happens later on. + * + * @param a_pExtPackDesc The descirptor to initialize. + */ +void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc) +{ + vboxExtPackClearDesc(a_pExtPackDesc); +} + + +/** * Load the extension pack descriptor from an XML document. * * @returns NULL on success, pointer to an error message on failure (caller diff --git a/src/VBox/Main/Global.cpp b/src/VBox/Main/src-all/Global.cpp index 34e2ca5c6..e064e0a98 100644 --- a/src/VBox/Main/Global.cpp +++ b/src/VBox/Main/src-all/Global.cpp @@ -1,4 +1,4 @@ -/* $Id: Global.cpp 34904 2010-12-09 16:28:56Z vboxsync $ */ +/* $Id: Global.cpp 35426 2011-01-07 13:48:53Z vboxsync $ */ /** @file * @@ -215,19 +215,19 @@ const Global::OSType Global::sOSTypes[SchemaDefs::OSTypeId_COUNT] = VBOXOSTYPE_Linux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET, 256, 12, 8 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE, StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, - { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Solaris legacy", + { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Oracle Solaris 10 5/09 and earlier", VBOXOSTYPE_Solaris, VBOXOSHINT_NONE, 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, - { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Solaris legacy (64 bit)", + { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Oracle Solaris 10 5/09 and earlier (64 bit)", VBOXOSTYPE_Solaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC, 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE, StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 }, - { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Solaris modern (S10U8+)", + { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Oracle Solaris 10 10/09 and later", VBOXOSTYPE_OpenSolaris, VBOXOSHINT_USBTABLET, 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA, StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, - { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Solaris modern (S10U8+) (64 bit)", + { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Oracle Solaris 10 10/09 and later (64 bit)", VBOXOSTYPE_OpenSolaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET, 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA, StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 }, diff --git a/src/VBox/Main/Logging.cpp b/src/VBox/Main/src-all/Logging.cpp index 5b4095e6c..5b4095e6c 100644 --- a/src/VBox/Main/Logging.cpp +++ b/src/VBox/Main/src-all/Logging.cpp diff --git a/src/VBox/Main/generic/Makefile.kup b/src/VBox/Main/src-all/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/Main/generic/Makefile.kup +++ b/src/VBox/Main/src-all/Makefile.kup diff --git a/src/VBox/Main/PciDeviceAttachmentImpl.cpp b/src/VBox/Main/src-all/PciDeviceAttachmentImpl.cpp index ea3858a23..59b58517f 100644 --- a/src/VBox/Main/PciDeviceAttachmentImpl.cpp +++ b/src/VBox/Main/src-all/PciDeviceAttachmentImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: PciDeviceAttachmentImpl.cpp 34331 2010-11-24 16:24:17Z vboxsync $ */ +/* $Id: PciDeviceAttachmentImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/ProgressImpl.cpp b/src/VBox/Main/src-all/ProgressImpl.cpp index a72b822cd..4161d65e3 100644 --- a/src/VBox/Main/ProgressImpl.cpp +++ b/src/VBox/Main/src-all/ProgressImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: ProgressImpl.cpp 33621 2010-10-29 16:15:40Z vboxsync $ */ +/* $Id: ProgressImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * * VirtualBox Progress COM class implementation diff --git a/src/VBox/Main/SharedFolderImpl.cpp b/src/VBox/Main/src-all/SharedFolderImpl.cpp index fa5cf21d9..fa5cf21d9 100644 --- a/src/VBox/Main/SharedFolderImpl.cpp +++ b/src/VBox/Main/src-all/SharedFolderImpl.cpp diff --git a/src/VBox/Main/VirtualBoxBase.cpp b/src/VBox/Main/src-all/VirtualBoxBase.cpp index 99589dcc7..a5b140670 100644 --- a/src/VBox/Main/VirtualBoxBase.cpp +++ b/src/VBox/Main/src-all/VirtualBoxBase.cpp @@ -1,4 +1,4 @@ -/* $Id: VirtualBoxBase.cpp 34237 2010-11-22 13:24:35Z vboxsync $ */ +/* $Id: VirtualBoxBase.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/VirtualBoxErrorInfoImpl.cpp b/src/VBox/Main/src-all/VirtualBoxErrorInfoImpl.cpp index 6ad17a37f..6ad17a37f 100644 --- a/src/VBox/Main/VirtualBoxErrorInfoImpl.cpp +++ b/src/VBox/Main/src-all/VirtualBoxErrorInfoImpl.cpp diff --git a/src/VBox/Main/win/VirtualBox_rgs.xsl b/src/VBox/Main/src-all/win/VirtualBox_rgs.xsl index aca873983..aca873983 100644 --- a/src/VBox/Main/win/VirtualBox_rgs.xsl +++ b/src/VBox/Main/src-all/win/VirtualBox_rgs.xsl diff --git a/src/VBox/Main/win/comregister.cmd b/src/VBox/Main/src-all/win/comregister.cmd index d4ffd423d..d4ffd423d 100644 --- a/src/VBox/Main/win/comregister.cmd +++ b/src/VBox/Main/src-all/win/comregister.cmd diff --git a/src/VBox/Main/AudioSnifferInterface.cpp b/src/VBox/Main/src-client/AudioSnifferInterface.cpp index e6f55b82e..adbf028dd 100644 --- a/src/VBox/Main/AudioSnifferInterface.cpp +++ b/src/VBox/Main/src-client/AudioSnifferInterface.cpp @@ -1,4 +1,4 @@ -/* $Id: AudioSnifferInterface.cpp 34906 2010-12-09 16:29:49Z vboxsync $ */ +/* $Id: AudioSnifferInterface.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox Driver Interface to Audio Sniffer device */ @@ -21,9 +21,9 @@ #include "Logging.h" -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <VBox/RemoteDesktop/VRDE.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/err.h> // diff --git a/src/VBox/Main/BusAssignmentManager.cpp b/src/VBox/Main/src-client/BusAssignmentManager.cpp index d61efd305..1f25a8212 100644 --- a/src/VBox/Main/BusAssignmentManager.cpp +++ b/src/VBox/Main/src-client/BusAssignmentManager.cpp @@ -1,4 +1,4 @@ -/* $Id: BusAssignmentManager.cpp 34331 2010-11-24 16:24:17Z vboxsync $ */ +/* $Id: BusAssignmentManager.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * @@ -21,7 +21,7 @@ #include <iprt/asm.h> #include <iprt/string.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/com/array.h> diff --git a/src/VBox/Main/ConsoleImpl.cpp b/src/VBox/Main/src-client/ConsoleImpl.cpp index e4c6f3994..f04ffdfd2 100644 --- a/src/VBox/Main/ConsoleImpl.cpp +++ b/src/VBox/Main/src-client/ConsoleImpl.cpp @@ -1,10 +1,10 @@ -/* $Id: ConsoleImpl.cpp 35171 2010-12-16 10:53:50Z vboxsync $ */ +/* $Id: ConsoleImpl.cpp 35563 2011-01-14 13:49:23Z vboxsync $ */ /** @file * VBox Console COM Class implementation */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -86,20 +86,21 @@ #include <iprt/string.h> #include <iprt/system.h> -#include <VBox/vmapi.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vmapi.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmasynccompletion.h> +#include <VBox/vmm/pdmnetifs.h> +#ifdef VBOX_WITH_USB +# include <VBox/vmm/pdmusb.h> +#endif +#include <VBox/vmm/mm.h> +#include <VBox/vmm/ftm.h> +#include <VBox/vmm/ssm.h> #include <VBox/err.h> #include <VBox/param.h> -#include <VBox/pdmnetifs.h> #include <VBox/vusb.h> -#include <VBox/mm.h> -#include <VBox/ftm.h> -#include <VBox/ssm.h> #include <VBox/version.h> -#include <VBox/pdmasynccompletion.h> -#ifdef VBOX_WITH_USB -# include <VBox/pdmusb.h> -#endif #include <VBox/VMMDev.h> @@ -140,9 +141,14 @@ */ struct VMTask { - VMTask(Console *aConsole, bool aUsesVMPtr) + VMTask(Console *aConsole, + Progress *aProgress, + const ComPtr<IProgress> &aServerProgress, + bool aUsesVMPtr) : mConsole(aConsole), mConsoleCaller(aConsole), + mProgress(aProgress), + mServerProgress(aServerProgress), mVMCallerAdded(false) { AssertReturnVoid(aConsole); @@ -176,6 +182,9 @@ struct VMTask const ComObjPtr<Console> mConsole; AutoCaller mConsoleCaller; + const ComObjPtr<Progress> mProgress; + Utf8Str mErrorMsg; + const ComPtr<IProgress> mServerProgress; private: @@ -183,27 +192,14 @@ private: bool mVMCallerAdded : 1; }; -struct VMProgressTask : public VMTask -{ - VMProgressTask(Console *aConsole, - Progress *aProgress, - bool aUsesVMPtr) - : VMTask(aConsole, aUsesVMPtr), - mProgress(aProgress) - {} - - const ComObjPtr<Progress> mProgress; - - Utf8Str mErrorMsg; -}; - -struct VMTakeSnapshotTask : public VMProgressTask +struct VMTakeSnapshotTask : public VMTask { VMTakeSnapshotTask(Console *aConsole, Progress *aProgress, IN_BSTR aName, IN_BSTR aDescription) - : VMProgressTask(aConsole, aProgress, false /* aUsesVMPtr */), + : VMTask(aConsole, aProgress, NULL /* aServerProgress */, + false /* aUsesVMPtr */), bstrName(aName), bstrDescription(aDescription), lastMachineState(MachineState_Null) @@ -217,11 +213,12 @@ struct VMTakeSnapshotTask : public VMProgressTask ULONG ulMemSize; }; -struct VMPowerUpTask : public VMProgressTask +struct VMPowerUpTask : public VMTask { VMPowerUpTask(Console *aConsole, Progress *aProgress) - : VMProgressTask(aConsole, aProgress, false /* aUsesVMPtr */), + : VMTask(aConsole, aProgress, NULL /* aServerProgress */, + false /* aUsesVMPtr */), mConfigConstructor(NULL), mStartPaused(false), mTeleporterEnabled(FALSE), @@ -240,17 +237,26 @@ struct VMPowerUpTask : public VMProgressTask ProgressList hardDiskProgresses; }; -struct VMSaveTask : public VMProgressTask +struct VMPowerDownTask : public VMTask +{ + VMPowerDownTask(Console *aConsole, + const ComPtr<IProgress> &aServerProgress) + : VMTask(aConsole, NULL /* aProgress */, aServerProgress, + true /* aUsesVMPtr */) + {} +}; + +struct VMSaveTask : public VMTask { - VMSaveTask(Console *aConsole, Progress *aProgress, const ComPtr<IProgress> &aServerProgress) - : VMProgressTask(aConsole, aProgress, true /* aUsesVMPtr */), - mLastMachineState(MachineState_Null), - mServerProgress(aServerProgress) + VMSaveTask(Console *aConsole, + const ComPtr<IProgress> &aServerProgress, + const Utf8Str &aSavedStateFile) + : VMTask(aConsole, NULL /* aProgress */, aServerProgress, + true /* aUsesVMPtr */), + mSavedStateFile(aSavedStateFile) {} Utf8Str mSavedStateFile; - MachineState_T mLastMachineState; - ComPtr<IProgress> mServerProgress; }; // Handler for global events @@ -1396,7 +1402,7 @@ DECLCALLBACK(int) Console::doGuestPropNotification(void *pvExtension, else { LogFunc(("Console::doGuestPropNotification: hrc=%Rhrc pCBData={.pcszName=%s, .pcszValue=%s, .pcszFlags=%s}\n", - pCBData->pcszName, pCBData->pcszValue, pCBData->pcszFlags)); + hrc, pCBData->pcszName, pCBData->pcszValue, pCBData->pcszFlags)); rc = Global::vboxStatusCodeFromCOM(hrc); } return rc; @@ -1721,12 +1727,11 @@ STDMETHODIMP Console::PowerUpPaused(IProgress **aProgress) STDMETHODIMP Console::PowerDown(IProgress **aProgress) { - if (aProgress == NULL) - return E_POINTER; - LogFlowThisFuncEnter(); LogFlowThisFunc(("mMachineState=%d\n", mMachineState)); + CheckComArgOutPointerValid(aProgress); + AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); @@ -1783,36 +1788,73 @@ STDMETHODIMP Console::PowerDown(IProgress **aProgress) LogFlowThisFunc(("Initiating SHUTDOWN request...\n")); - /* create an IProgress object to track progress of this operation */ - ComObjPtr<Progress> pProgress; - pProgress.createObject(); - pProgress->init(static_cast<IConsole *>(this), - Bstr(tr("Stopping virtual machine")).raw(), - FALSE /* aCancelable */); - - /* setup task object and thread to carry out the operation asynchronously */ - std::auto_ptr<VMProgressTask> task(new VMProgressTask(this, pProgress, true /* aUsesVMPtr */)); - AssertReturn(task->isOk(), E_FAIL); - - int vrc = RTThreadCreate(NULL, Console::powerDownThread, - (void *) task.get(), 0, - RTTHREADTYPE_MAIN_WORKER, 0, - "VMPowerDown"); - if (RT_FAILURE(vrc)) - return setError(E_FAIL, "Could not create VMPowerDown thread (%Rrc)", vrc); + /* memorize the current machine state */ + MachineState_T lastMachineState = mMachineState; + + HRESULT rc = S_OK; + bool fBeganPowerDown = false; + + do + { + ComPtr<IProgress> pProgress; - /* task is now owned by powerDownThread(), so release it */ - task.release(); + /* + * request a progress object from the server + * (this will set the machine state to Stopping on the server to block + * others from accessing this machine) + */ + rc = mControl->BeginPoweringDown(pProgress.asOutParam()); + if (FAILED(rc)) + break; - /* go to Stopping state to forbid state-dependent operations */ - setMachineState(MachineState_Stopping); + fBeganPowerDown = true; - /* pass the progress to the caller */ - pProgress.queryInterfaceTo(aProgress); + /* sync the state with the server */ + setMachineStateLocally(MachineState_Stopping); + /* setup task object and thread to carry out the operation asynchronously */ + std::auto_ptr<VMPowerDownTask> task(new VMPowerDownTask(this, pProgress)); + AssertBreakStmt(task->isOk(), rc = E_FAIL); + + int vrc = RTThreadCreate(NULL, Console::powerDownThread, + (void *) task.get(), 0, + RTTHREADTYPE_MAIN_WORKER, 0, + "VMPowerDown"); + if (RT_FAILURE(vrc)) + { + rc = setError(E_FAIL, "Could not create VMPowerDown thread (%Rrc)", vrc); + break; + } + + /* task is now owned by powerDownThread(), so release it */ + task.release(); + + /* pass the progress to the caller */ + pProgress.queryInterfaceTo(aProgress); + } + while (0); + + if (FAILED(rc)) + { + /* preserve existing error info */ + ErrorInfoKeeper eik; + + if (fBeganPowerDown) + { + /* + * cancel the requested power down procedure. + * This will reset the machine state to the state it had right + * before calling mControl->BeginPoweringDown(). + */ + mControl->EndPoweringDown(eik.getResultCode(), eik.getText().raw()); } + + setMachineStateLocally(lastMachineState); + } + + LogFlowThisFunc(("rc=%Rhrc\n", rc)); LogFlowThisFuncLeave(); - return S_OK; + return rc; } STDMETHODIMP Console::Reset() @@ -1846,7 +1888,7 @@ STDMETHODIMP Console::Reset() tr("Could not reset the machine (%Rrc)"), vrc); - LogFlowThisFunc(("mMachineState=%d, rc=%08X\n", mMachineState, rc)); + LogFlowThisFunc(("mMachineState=%d, rc=%Rhrc\n", mMachineState, rc)); LogFlowThisFuncLeave(); return rc; } @@ -1976,7 +2018,7 @@ HRESULT Console::doCPURemove(ULONG aCpu) rc = setError(VBOX_E_VM_ERROR, tr("Hot-Remove was aborted because the CPU may still be used by the guest"), VERR_RESOURCE_BUSY); - LogFlowThisFunc(("mMachineState=%d, rc=%08X\n", mMachineState, rc)); + LogFlowThisFunc(("mMachineState=%d, rc=%Rhrc\n", mMachineState, rc)); LogFlowThisFuncLeave(); return rc; } @@ -2093,7 +2135,7 @@ HRESULT Console::doCPUAdd(ULONG aCpu) /** @todo warning if the guest doesn't support it */ } - LogFlowThisFunc(("mMachineState=%d, rc=%08X\n", mMachineState, rc)); + LogFlowThisFunc(("mMachineState=%d, rc=%Rhrc\n", mMachineState, rc)); LogFlowThisFuncLeave(); return rc; } @@ -2184,7 +2226,7 @@ STDMETHODIMP Console::Resume() tr("Could not resume the machine execution (%Rrc)"), vrc); - LogFlowThisFunc(("rc=%08X\n", rc)); + LogFlowThisFunc(("rc=%Rhrc\n", rc)); LogFlowThisFuncLeave(); return rc; } @@ -2222,7 +2264,7 @@ STDMETHODIMP Console::PowerButton() tr("Controlled power off failed (%Rrc)"), vrc); - LogFlowThisFunc(("rc=%08X\n", rc)); + LogFlowThisFunc(("rc=%Rhrc\n", rc)); LogFlowThisFuncLeave(); return rc; } @@ -2266,7 +2308,7 @@ STDMETHODIMP Console::GetPowerButtonHandled(BOOL *aHandled) *aHandled = handled; - LogFlowThisFunc(("rc=%08X\n", rc)); + LogFlowThisFunc(("rc=%Rhrc\n", rc)); LogFlowThisFuncLeave(); return rc; } @@ -2341,7 +2383,7 @@ STDMETHODIMP Console::SleepButton() tr("Sending sleep button event failed (%Rrc)"), vrc); - LogFlowThisFunc(("rc=%08X\n", rc)); + LogFlowThisFunc(("rc=%Rhrc\n", rc)); LogFlowThisFuncLeave(); return rc; } @@ -2398,21 +2440,6 @@ STDMETHODIMP Console::SaveState(IProgress **aProgress) /* sync the state with the server */ setMachineStateLocally(MachineState_Saving); - /* create a task object early to ensure mpVM protection is successful */ - std::auto_ptr<VMSaveTask> task(new VMSaveTask(this, NULL, pProgress)); - rc = task->rc(); - /* - * If we fail here it means a PowerDown() call happened on another - * thread while we were doing Pause() (which leaves the Console lock). - * We assign PowerDown() a higher precedence than SaveState(), - * therefore just return the error to the caller. - */ - if (FAILED(rc)) - { - fTaskCreationFailed = true; - break; - } - /* ensure the directory for the saved state file exists */ { Utf8Str dir = stateFilePath; @@ -2430,10 +2457,21 @@ STDMETHODIMP Console::SaveState(IProgress **aProgress) } } - /* setup task object and thread to carry out the operation asynchronously */ - task->mSavedStateFile = stateFilePath; - /* set the state the operation thread will restore when it is finished */ - task->mLastMachineState = lastMachineState; + /* create a task object early to ensure mpVM protection is successful */ + std::auto_ptr<VMSaveTask> task(new VMSaveTask(this, pProgress, + stateFilePath)); + rc = task->rc(); + /* + * If we fail here it means a PowerDown() call happened on another + * thread while we were doing Pause() (which leaves the Console lock). + * We assign PowerDown() a higher precedence than SaveState(), + * therefore just return the error to the caller. + */ + if (FAILED(rc)) + { + fTaskCreationFailed = true; + break; + } /* create a thread to wait until the VM state is saved */ int vrc = RTThreadCreate(NULL, Console::saveStateThread, (void *) task.get(), @@ -2478,7 +2516,7 @@ STDMETHODIMP Console::SaveState(IProgress **aProgress) setMachineStateLocally(lastMachineState); } - LogFlowThisFunc(("rc=%08X\n", rc)); + LogFlowThisFunc(("rc=%Rhrc\n", rc)); LogFlowThisFuncLeave(); return rc; } @@ -2915,7 +2953,7 @@ STDMETHODIMP Console::TakeSnapshot(IN_BSTR aName, IProgress **aProgress) { LogFlowThisFuncEnter(); - LogFlowThisFunc(("aName='%ls' mMachineState=%08X\n", aName, mMachineState)); + LogFlowThisFunc(("aName='%ls' mMachineState=%d\n", aName, mMachineState)); CheckComArgStrNotEmptyOrNull(aName); CheckComArgOutPointerValid(aProgress); @@ -3035,7 +3073,7 @@ STDMETHODIMP Console::TakeSnapshot(IN_BSTR aName, catch (HRESULT erc) { delete pTask; - NOREF(erc); + rc = erc; mptrCancelableProgress.setNull(); } @@ -3501,7 +3539,6 @@ HRESULT Console::onNetworkAdapterChange(INetworkAdapter *aNetworkAdapter, BOOL c const char *pszAdapterName = networkAdapterTypeToName(adapterType); PPDMIBASE pBase; int vrc = PDMR3QueryDeviceLun(mpVM, pszAdapterName, ulInstance, 0, &pBase); - ComAssertRC(vrc); if (RT_SUCCESS(vrc)) { Assert(pBase); @@ -3534,10 +3571,17 @@ HRESULT Console::onNetworkAdapterChange(INetworkAdapter *aNetworkAdapter, BOOL c { vrc = pINetCfg->pfnSetLinkState(pINetCfg, PDMNETWORKLINKSTATE_UP); ComAssertRC(vrc); - } + } } } } + else if (vrc == VERR_PDM_DEVICE_INSTANCE_NOT_FOUND) + { + return setError(E_FAIL, + tr("The network adapter #%u is not enabled"), ulInstance); + } + else + ComAssertRC(vrc); if (RT_FAILURE(vrc)) rc = E_FAIL; @@ -5299,374 +5343,416 @@ HRESULT Console::consoleInitReleaseLog(const ComPtr<IMachine> aMachine) * * @param aProgress Where to return the progress object. * @param aPaused true if PowerUpPaused called. - * - * @todo move down to powerDown(); */ HRESULT Console::powerUp(IProgress **aProgress, bool aPaused) { - if (aProgress == NULL) - return E_POINTER; - LogFlowThisFuncEnter(); LogFlowThisFunc(("mMachineState=%d\n", mMachineState)); + CheckComArgOutPointerValid(aProgress); + AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); - if (Global::IsOnlineOrTransient(mMachineState)) - return setError(VBOX_E_INVALID_VM_STATE, - tr("The virtual machine is already running or busy (machine state: %s)"), - Global::stringifyMachineState(mMachineState)); - HRESULT rc = S_OK; + ComObjPtr<Progress> pPowerupProgress; + bool fBeganPoweringUp = false; - /* the network cards will undergo a quick consistency check */ - for (ULONG slot = 0; - slot < SchemaDefs::NetworkAdapterCount; - ++slot) + try { - ComPtr<INetworkAdapter> pNetworkAdapter; - mMachine->GetNetworkAdapter(slot, pNetworkAdapter.asOutParam()); - BOOL enabled = FALSE; - pNetworkAdapter->COMGETTER(Enabled)(&enabled); - if (!enabled) - continue; + if (Global::IsOnlineOrTransient(mMachineState)) + throw setError(VBOX_E_INVALID_VM_STATE, + tr("The virtual machine is already running or busy (machine state: %s)"), + Global::stringifyMachineState(mMachineState)); - NetworkAttachmentType_T netattach; - pNetworkAdapter->COMGETTER(AttachmentType)(&netattach); - switch (netattach) + /* test and clear the TeleporterEnabled property */ + BOOL fTeleporterEnabled; + rc = mMachine->COMGETTER(TeleporterEnabled)(&fTeleporterEnabled); + if (FAILED(rc)) + throw rc; +#if 0 /** @todo we should save it afterwards, but that isn't necessarily a good idea. Find a better place for this (VBoxSVC). */ + if (fTeleporterEnabled) { - case NetworkAttachmentType_Bridged: - { -#ifdef RT_OS_WINDOWS - /* a valid host interface must have been set */ - Bstr hostif; - pNetworkAdapter->COMGETTER(HostInterface)(hostif.asOutParam()); - if (hostif.isEmpty()) - { - return setError(VBOX_E_HOST_ERROR, - tr("VM cannot start because host interface networking requires a host interface name to be set")); - } - ComPtr<IVirtualBox> pVirtualBox; - mMachine->COMGETTER(Parent)(pVirtualBox.asOutParam()); - ComPtr<IHost> pHost; - pVirtualBox->COMGETTER(Host)(pHost.asOutParam()); - ComPtr<IHostNetworkInterface> pHostInterface; - if (!SUCCEEDED(pHost->FindHostNetworkInterfaceByName(hostif.raw(), - pHostInterface.asOutParam()))) - { - return setError(VBOX_E_HOST_ERROR, - tr("VM cannot start because the host interface '%ls' does not exist"), - hostif.raw()); - } -#endif /* RT_OS_WINDOWS */ - break; - } - default: - break; + rc = mMachine->COMSETTER(TeleporterEnabled)(FALSE); + if (FAILED(rc)) + throw rc; } - } - - /* Read console data stored in the saved state file (if not yet done) */ - rc = loadDataFromSavedState(); - if (FAILED(rc)) return rc; - - /* Check all types of shared folders and compose a single list */ - SharedFolderDataMap sharedFolders; - { - /* first, insert global folders */ - for (SharedFolderDataMap::const_iterator it = mGlobalSharedFolders.begin(); - it != mGlobalSharedFolders.end(); ++ it) - sharedFolders[it->first] = it->second; - - /* second, insert machine folders */ - for (SharedFolderDataMap::const_iterator it = mMachineSharedFolders.begin(); - it != mMachineSharedFolders.end(); ++ it) - sharedFolders[it->first] = it->second; - - /* third, insert console folders */ - for (SharedFolderMap::const_iterator it = mSharedFolders.begin(); - it != mSharedFolders.end(); ++ it) - sharedFolders[it->first] = SharedFolderData(it->second->getHostPath(), - it->second->isWritable(), - it->second->isAutoMounted()); - } - - Bstr savedStateFile; - - /* - * Saved VMs will have to prove that their saved states seem kosher. - */ - if (mMachineState == MachineState_Saved) - { - rc = mMachine->COMGETTER(StateFilePath)(savedStateFile.asOutParam()); - if (FAILED(rc)) return rc; - ComAssertRet(!savedStateFile.isEmpty(), E_FAIL); - int vrc = SSMR3ValidateFile(Utf8Str(savedStateFile).c_str(), false /* fChecksumIt */); - if (RT_FAILURE(vrc)) - return setError(VBOX_E_FILE_ERROR, - tr("VM cannot start because the saved state file '%ls' is invalid (%Rrc). Delete the saved state prior to starting the VM"), - savedStateFile.raw(), vrc); - } - - /* test and clear the TeleporterEnabled property */ - BOOL fTeleporterEnabled; - rc = mMachine->COMGETTER(TeleporterEnabled)(&fTeleporterEnabled); - if (FAILED(rc)) return rc; -#if 0 /** @todo we should save it afterwards, but that isn't necessarily a good idea. Find a better place for this (VBoxSVC). */ - if (fTeleporterEnabled) - { - rc = mMachine->COMSETTER(TeleporterEnabled)(FALSE); - if (FAILED(rc)) return rc; - } #endif - /* test the FaultToleranceState property */ - FaultToleranceState_T enmFaultToleranceState; - rc = mMachine->COMGETTER(FaultToleranceState)(&enmFaultToleranceState); - if (FAILED(rc)) return rc; - BOOL fFaultToleranceSyncEnabled = (enmFaultToleranceState == FaultToleranceState_Standby); - - /* create a progress object to track progress of this operation */ - ComObjPtr<Progress> pPowerupProgress; - pPowerupProgress.createObject(); - Bstr progressDesc; - if (mMachineState == MachineState_Saved) - progressDesc = tr("Restoring virtual machine"); - else if (fTeleporterEnabled) - progressDesc = tr("Teleporting virtual machine"); - else if (fFaultToleranceSyncEnabled) - progressDesc = tr("Fault Tolerance syncing of remote virtual machine"); - else - progressDesc = tr("Starting virtual machine"); - if ( mMachineState == MachineState_Saved - || (!fTeleporterEnabled && !fFaultToleranceSyncEnabled)) - rc = pPowerupProgress->init(static_cast<IConsole *>(this), - progressDesc.raw(), - FALSE /* aCancelable */); - else - if (fTeleporterEnabled) - rc = pPowerupProgress->init(static_cast<IConsole *>(this), - progressDesc.raw(), - TRUE /* aCancelable */, - 3 /* cOperations */, - 10 /* ulTotalOperationsWeight */, - Bstr(tr("Teleporting virtual machine")).raw(), - 1 /* ulFirstOperationWeight */, - NULL); - else - if (fFaultToleranceSyncEnabled) - rc = pPowerupProgress->init(static_cast<IConsole *>(this), - progressDesc.raw(), - TRUE /* aCancelable */, - 3 /* cOperations */, - 10 /* ulTotalOperationsWeight */, - Bstr(tr("Fault Tolerance syncing of remote virtual machine")).raw(), - 1 /* ulFirstOperationWeight */, - NULL); - - if (FAILED(rc)) - return rc; + /* test the FaultToleranceState property */ + FaultToleranceState_T enmFaultToleranceState; + rc = mMachine->COMGETTER(FaultToleranceState)(&enmFaultToleranceState); + if (FAILED(rc)) + throw rc; + BOOL fFaultToleranceSyncEnabled = (enmFaultToleranceState == FaultToleranceState_Standby); + + /* Create a progress object to track progress of this operation. Must + * be done as early as possible (together with BeginPowerUp()) as this + * is vital for communicating as much as possible early powerup + * failure information to the API caller */ + pPowerupProgress.createObject(); + Bstr progressDesc; + if (mMachineState == MachineState_Saved) + progressDesc = tr("Restoring virtual machine"); + else if (fTeleporterEnabled) + progressDesc = tr("Teleporting virtual machine"); + else if (fFaultToleranceSyncEnabled) + progressDesc = tr("Fault Tolerance syncing of remote virtual machine"); + else + progressDesc = tr("Starting virtual machine"); + if ( mMachineState == MachineState_Saved + || (!fTeleporterEnabled && !fFaultToleranceSyncEnabled)) + rc = pPowerupProgress->init(static_cast<IConsole *>(this), + progressDesc.raw(), + FALSE /* aCancelable */); + else + if (fTeleporterEnabled) + rc = pPowerupProgress->init(static_cast<IConsole *>(this), + progressDesc.raw(), + TRUE /* aCancelable */, + 3 /* cOperations */, + 10 /* ulTotalOperationsWeight */, + Bstr(tr("Teleporting virtual machine")).raw(), + 1 /* ulFirstOperationWeight */, + NULL); + else + if (fFaultToleranceSyncEnabled) + rc = pPowerupProgress->init(static_cast<IConsole *>(this), + progressDesc.raw(), + TRUE /* aCancelable */, + 3 /* cOperations */, + 10 /* ulTotalOperationsWeight */, + Bstr(tr("Fault Tolerance syncing of remote virtual machine")).raw(), + 1 /* ulFirstOperationWeight */, + NULL); - /* Tell VBoxSVC and Machine about the progress object so they can combine - proxy it to any openRemoteSession caller. */ - LogFlowThisFunc(("Calling BeginPowerUp...\n")); - rc = mControl->BeginPowerUp(pPowerupProgress); - if (FAILED(rc)) - { - LogFlowThisFunc(("BeginPowerUp failed\n")); - return rc; - } + if (FAILED(rc)) + throw rc; - LogFlowThisFunc(("Checking if canceled...\n")); - BOOL fCanceled; - rc = pPowerupProgress->COMGETTER(Canceled)(&fCanceled); - if (FAILED(rc)) - return rc; - if (fCanceled) - { - LogFlowThisFunc(("Canceled in BeginPowerUp\n")); - return setError(E_FAIL, tr("Powerup was canceled")); - } - LogFlowThisFunc(("Not canceled yet.\n")); + /* Tell VBoxSVC and Machine about the progress object so they can + combine/proxy it to any openRemoteSession caller. */ + LogFlowThisFunc(("Calling BeginPowerUp...\n")); + rc = mControl->BeginPowerUp(pPowerupProgress); + if (FAILED(rc)) + { + LogFlowThisFunc(("BeginPowerUp failed\n")); + throw rc; + } + fBeganPoweringUp = true; + + /** @todo this code prevents starting a VM with unavailable bridged + * networking interface. The only benefit is a slightly better error + * message, which should be moved to the driver code. This is the + * only reason why I left the code in for now. The driver allows + * unavailable bridged networking interfaces in certain circumstances, + * and this is sabotaged by this check. The VM will initially have no + * network connectivity, but the user can fix this at runtime. */ +#if 0 + /* the network cards will undergo a quick consistency check */ + for (ULONG slot = 0; + slot < SchemaDefs::NetworkAdapterCount; + ++slot) + { + ComPtr<INetworkAdapter> pNetworkAdapter; + mMachine->GetNetworkAdapter(slot, pNetworkAdapter.asOutParam()); + BOOL enabled = FALSE; + pNetworkAdapter->COMGETTER(Enabled)(&enabled); + if (!enabled) + continue; + + NetworkAttachmentType_T netattach; + pNetworkAdapter->COMGETTER(AttachmentType)(&netattach); + switch (netattach) + { + case NetworkAttachmentType_Bridged: + { + /* a valid host interface must have been set */ + Bstr hostif; + pNetworkAdapter->COMGETTER(HostInterface)(hostif.asOutParam()); + if (hostif.isEmpty()) + { + throw setError(VBOX_E_HOST_ERROR, + tr("VM cannot start because host interface networking requires a host interface name to be set")); + } + ComPtr<IVirtualBox> pVirtualBox; + mMachine->COMGETTER(Parent)(pVirtualBox.asOutParam()); + ComPtr<IHost> pHost; + pVirtualBox->COMGETTER(Host)(pHost.asOutParam()); + ComPtr<IHostNetworkInterface> pHostInterface; + if (!SUCCEEDED(pHost->FindHostNetworkInterfaceByName(hostif.raw(), + pHostInterface.asOutParam()))) + { + throw setError(VBOX_E_HOST_ERROR, + tr("VM cannot start because the host interface '%ls' does not exist"), + hostif.raw()); + } + break; + } + default: + break; + } + } +#endif // 0 - /* setup task object and thread to carry out the operation - * asynchronously */ + /* Read console data stored in the saved state file (if not yet done) */ + rc = loadDataFromSavedState(); + if (FAILED(rc)) + throw rc; - std::auto_ptr<VMPowerUpTask> task(new VMPowerUpTask(this, pPowerupProgress)); - ComAssertComRCRetRC(task->rc()); + /* Check all types of shared folders and compose a single list */ + SharedFolderDataMap sharedFolders; + { + /* first, insert global folders */ + for (SharedFolderDataMap::const_iterator it = mGlobalSharedFolders.begin(); + it != mGlobalSharedFolders.end(); ++ it) + sharedFolders[it->first] = it->second; + + /* second, insert machine folders */ + for (SharedFolderDataMap::const_iterator it = mMachineSharedFolders.begin(); + it != mMachineSharedFolders.end(); ++ it) + sharedFolders[it->first] = it->second; + + /* third, insert console folders */ + for (SharedFolderMap::const_iterator it = mSharedFolders.begin(); + it != mSharedFolders.end(); ++ it) + sharedFolders[it->first] = SharedFolderData(it->second->getHostPath(), + it->second->isWritable(), + it->second->isAutoMounted()); + } - task->mConfigConstructor = configConstructor; - task->mSharedFolders = sharedFolders; - task->mStartPaused = aPaused; - if (mMachineState == MachineState_Saved) - task->mSavedStateFile = savedStateFile; - task->mTeleporterEnabled = fTeleporterEnabled; - task->mEnmFaultToleranceState = enmFaultToleranceState; - - /* Reset differencing hard disks for which autoReset is true, - * but only if the machine has no snapshots OR the current snapshot - * is an OFFLINE snapshot; otherwise we would reset the current differencing - * image of an ONLINE snapshot which contains the disk state of the machine - * while it was previously running, but without the corresponding machine - * state, which is equivalent to powering off a running machine and not - * good idea - */ - ComPtr<ISnapshot> pCurrentSnapshot; - rc = mMachine->COMGETTER(CurrentSnapshot)(pCurrentSnapshot.asOutParam()); - if (FAILED(rc)) return rc; + Bstr savedStateFile; - BOOL fCurrentSnapshotIsOnline = false; - if (pCurrentSnapshot) - { - rc = pCurrentSnapshot->COMGETTER(Online)(&fCurrentSnapshotIsOnline); - if (FAILED(rc)) return rc; - } + /* + * Saved VMs will have to prove that their saved states seem kosher. + */ + if (mMachineState == MachineState_Saved) + { + rc = mMachine->COMGETTER(StateFilePath)(savedStateFile.asOutParam()); + if (FAILED(rc)) + throw rc; + ComAssertRet(!savedStateFile.isEmpty(), E_FAIL); + int vrc = SSMR3ValidateFile(Utf8Str(savedStateFile).c_str(), false /* fChecksumIt */); + if (RT_FAILURE(vrc)) + throw setError(VBOX_E_FILE_ERROR, + tr("VM cannot start because the saved state file '%ls' is invalid (%Rrc). Delete the saved state prior to starting the VM"), + savedStateFile.raw(), vrc); + } - if (!fCurrentSnapshotIsOnline) - { - LogFlowThisFunc(("Looking for immutable images to reset\n")); + LogFlowThisFunc(("Checking if canceled...\n")); + BOOL fCanceled; + rc = pPowerupProgress->COMGETTER(Canceled)(&fCanceled); + if (FAILED(rc)) + throw rc; + if (fCanceled) + { + LogFlowThisFunc(("Canceled in BeginPowerUp\n")); + throw setError(E_FAIL, tr("Powerup was canceled")); + } + LogFlowThisFunc(("Not canceled yet.\n")); + + /* setup task object and thread to carry out the operation + * asynchronously */ + + std::auto_ptr<VMPowerUpTask> task(new VMPowerUpTask(this, pPowerupProgress)); + ComAssertComRCRetRC(task->rc()); + + task->mConfigConstructor = configConstructor; + task->mSharedFolders = sharedFolders; + task->mStartPaused = aPaused; + if (mMachineState == MachineState_Saved) + task->mSavedStateFile = savedStateFile; + task->mTeleporterEnabled = fTeleporterEnabled; + task->mEnmFaultToleranceState = enmFaultToleranceState; + + /* Reset differencing hard disks for which autoReset is true, + * but only if the machine has no snapshots OR the current snapshot + * is an OFFLINE snapshot; otherwise we would reset the current + * differencing image of an ONLINE snapshot which contains the disk + * state of the machine while it was previously running, but without + * the corresponding machine state, which is equivalent to powering + * off a running machine and not good idea + */ + ComPtr<ISnapshot> pCurrentSnapshot; + rc = mMachine->COMGETTER(CurrentSnapshot)(pCurrentSnapshot.asOutParam()); + if (FAILED(rc)) + throw rc; - com::SafeIfaceArray<IMediumAttachment> atts; - rc = mMachine->COMGETTER(MediumAttachments)(ComSafeArrayAsOutParam(atts)); - if (FAILED(rc)) return rc; + BOOL fCurrentSnapshotIsOnline = false; + if (pCurrentSnapshot) + { + rc = pCurrentSnapshot->COMGETTER(Online)(&fCurrentSnapshotIsOnline); + if (FAILED(rc)) + throw rc; + } - for (size_t i = 0; - i < atts.size(); - ++i) + if (!fCurrentSnapshotIsOnline) { - DeviceType_T devType; - rc = atts[i]->COMGETTER(Type)(&devType); - /** @todo later applies to floppies as well */ - if (devType == DeviceType_HardDisk) - { - ComPtr<IMedium> pMedium; - rc = atts[i]->COMGETTER(Medium)(pMedium.asOutParam()); - if (FAILED(rc)) return rc; + LogFlowThisFunc(("Looking for immutable images to reset\n")); - /* needs autoreset? */ - BOOL autoReset = FALSE; - rc = pMedium->COMGETTER(AutoReset)(&autoReset); - if (FAILED(rc)) return rc; + com::SafeIfaceArray<IMediumAttachment> atts; + rc = mMachine->COMGETTER(MediumAttachments)(ComSafeArrayAsOutParam(atts)); + if (FAILED(rc)) + throw rc; - if (autoReset) + for (size_t i = 0; + i < atts.size(); + ++i) + { + DeviceType_T devType; + rc = atts[i]->COMGETTER(Type)(&devType); + /** @todo later applies to floppies as well */ + if (devType == DeviceType_HardDisk) { - ComPtr<IProgress> pResetProgress; - rc = pMedium->Reset(pResetProgress.asOutParam()); - if (FAILED(rc)) return rc; + ComPtr<IMedium> pMedium; + rc = atts[i]->COMGETTER(Medium)(pMedium.asOutParam()); + if (FAILED(rc)) + throw rc; + + /* needs autoreset? */ + BOOL autoReset = FALSE; + rc = pMedium->COMGETTER(AutoReset)(&autoReset); + if (FAILED(rc)) + throw rc; + + if (autoReset) + { + ComPtr<IProgress> pResetProgress; + rc = pMedium->Reset(pResetProgress.asOutParam()); + if (FAILED(rc)) + throw rc; - /* save for later use on the powerup thread */ - task->hardDiskProgresses.push_back(pResetProgress); + /* save for later use on the powerup thread */ + task->hardDiskProgresses.push_back(pResetProgress); + } } } } - } - else - LogFlowThisFunc(("Machine has a current snapshot which is online, skipping immutable images reset\n")); + else + LogFlowThisFunc(("Machine has a current snapshot which is online, skipping immutable images reset\n")); - rc = consoleInitReleaseLog(mMachine); - if (FAILED(rc)) return rc; + rc = consoleInitReleaseLog(mMachine); + if (FAILED(rc)) + throw rc; #ifdef RT_OS_SOLARIS - /* setup host core dumper for the VM */ - Bstr value; - HRESULT hrc = mMachine->GetExtraData(Bstr("VBoxInternal2/CoreDumpEnabled").raw(), value.asOutParam()); - if (SUCCEEDED(hrc) && value == "1") - { - Bstr coreDumpDir, coreDumpReplaceSys, coreDumpLive; - mMachine->GetExtraData(Bstr("VBoxInternal2/CoreDumpDir").raw(), coreDumpDir.asOutParam()); - mMachine->GetExtraData(Bstr("VBoxInternal2/CoreDumpReplaceSystemDump").raw(), coreDumpReplaceSys.asOutParam()); - mMachine->GetExtraData(Bstr("VBoxInternal2/CoreDumpLive").raw(), coreDumpLive.asOutParam()); - - uint32_t fCoreFlags = 0; - if ( coreDumpReplaceSys.isEmpty() == false - && Utf8Str(coreDumpReplaceSys).toUInt32() == 1) + /* setup host core dumper for the VM */ + Bstr value; + HRESULT hrc = mMachine->GetExtraData(Bstr("VBoxInternal2/CoreDumpEnabled").raw(), value.asOutParam()); + if (SUCCEEDED(hrc) && value == "1") { - fCoreFlags |= RTCOREDUMPER_FLAGS_REPLACE_SYSTEM_DUMP; - } + Bstr coreDumpDir, coreDumpReplaceSys, coreDumpLive; + mMachine->GetExtraData(Bstr("VBoxInternal2/CoreDumpDir").raw(), coreDumpDir.asOutParam()); + mMachine->GetExtraData(Bstr("VBoxInternal2/CoreDumpReplaceSystemDump").raw(), coreDumpReplaceSys.asOutParam()); + mMachine->GetExtraData(Bstr("VBoxInternal2/CoreDumpLive").raw(), coreDumpLive.asOutParam()); + + uint32_t fCoreFlags = 0; + if ( coreDumpReplaceSys.isEmpty() == false + && Utf8Str(coreDumpReplaceSys).toUInt32() == 1) + { + fCoreFlags |= RTCOREDUMPER_FLAGS_REPLACE_SYSTEM_DUMP; + } - if ( coreDumpLive.isEmpty() == false - && Utf8Str(coreDumpLive).toUInt32() == 1) - { - fCoreFlags |= RTCOREDUMPER_FLAGS_LIVE_CORE; - } + if ( coreDumpLive.isEmpty() == false + && Utf8Str(coreDumpLive).toUInt32() == 1) + { + fCoreFlags |= RTCOREDUMPER_FLAGS_LIVE_CORE; + } - Utf8Str strDumpDir(coreDumpDir); - const char *pszDumpDir = strDumpDir.c_str(); - if ( pszDumpDir - && *pszDumpDir == '\0') - pszDumpDir = NULL; + Utf8Str strDumpDir(coreDumpDir); + const char *pszDumpDir = strDumpDir.c_str(); + if ( pszDumpDir + && *pszDumpDir == '\0') + pszDumpDir = NULL; - int vrc; - if ( pszDumpDir - && !RTDirExists(pszDumpDir)) - { - /* - * Try create the directory. - */ - vrc = RTDirCreateFullPath(pszDumpDir, 0777); + int vrc; + if ( pszDumpDir + && !RTDirExists(pszDumpDir)) + { + /* + * Try create the directory. + */ + vrc = RTDirCreateFullPath(pszDumpDir, 0777); + if (RT_FAILURE(vrc)) + throw setError(E_FAIL, "Failed to setup CoreDumper. Couldn't create dump directory '%s' (%Rrc)\n", pszDumpDir, vrc); + } + + vrc = RTCoreDumperSetup(pszDumpDir, fCoreFlags); if (RT_FAILURE(vrc)) - return setError(E_FAIL, "Failed to setup CoreDumper. Couldn't create dump directory '%s' (%Rrc)\n", pszDumpDir, vrc); + throw setError(E_FAIL, "Failed to setup CoreDumper (%Rrc)", vrc); + else + LogRel(("CoreDumper setup successful. pszDumpDir=%s fFlags=%#x\n", pszDumpDir ? pszDumpDir : ".", fCoreFlags)); } - - vrc = RTCoreDumperSetup(pszDumpDir, fCoreFlags); - if (RT_FAILURE(vrc)) - return setError(E_FAIL, "Failed to setup CoreDumper (%Rrc)", vrc); - else - LogRel(("CoreDumper setup successful. pszDumpDir=%s fFlags=%#x\n", pszDumpDir ? pszDumpDir : ".", fCoreFlags)); - } #endif - /* pass the progress object to the caller if requested */ - if (aProgress) - { - if (task->hardDiskProgresses.size() == 0) + /* pass the progress object to the caller if requested */ + if (aProgress) { - /* there are no other operations to track, return the powerup - * progress only */ - pPowerupProgress.queryInterfaceTo(aProgress); + if (task->hardDiskProgresses.size() == 0) + { + /* there are no other operations to track, return the powerup + * progress only */ + pPowerupProgress.queryInterfaceTo(aProgress); + } + else + { + /* create a combined progress object */ + ComObjPtr<CombinedProgress> pProgress; + pProgress.createObject(); + VMPowerUpTask::ProgressList progresses(task->hardDiskProgresses); + progresses.push_back(ComPtr<IProgress> (pPowerupProgress)); + rc = pProgress->init(static_cast<IConsole *>(this), + progressDesc.raw(), progresses.begin(), + progresses.end()); + AssertComRCReturnRC(rc); + pProgress.queryInterfaceTo(aProgress); + } } + + int vrc = RTThreadCreate(NULL, Console::powerUpThread, + (void *)task.get(), 0, + RTTHREADTYPE_MAIN_WORKER, 0, "VMPowerUp"); + if (RT_FAILURE(vrc)) + throw setError(E_FAIL, "Could not create VMPowerUp thread (%Rrc)", vrc); + + /* task is now owned by powerUpThread(), so release it */ + task.release(); + + /* finally, set the state: no right to fail in this method afterwards + * since we've already started the thread and it is now responsible for + * any error reporting and appropriate state change! */ + if (mMachineState == MachineState_Saved) + setMachineState(MachineState_Restoring); + else if (fTeleporterEnabled) + setMachineState(MachineState_TeleportingIn); + else if (enmFaultToleranceState == FaultToleranceState_Standby) + setMachineState(MachineState_FaultTolerantSyncing); else - { - /* create a combined progress object */ - ComObjPtr<CombinedProgress> pProgress; - pProgress.createObject(); - VMPowerUpTask::ProgressList progresses(task->hardDiskProgresses); - progresses.push_back(ComPtr<IProgress> (pPowerupProgress)); - rc = pProgress->init(static_cast<IConsole *>(this), - progressDesc.raw(), progresses.begin(), - progresses.end()); - AssertComRCReturnRC(rc); - pProgress.queryInterfaceTo(aProgress); - } + setMachineState(MachineState_Starting); } + catch (HRESULT aRC) { rc = aRC; } - int vrc = RTThreadCreate(NULL, Console::powerUpThread, (void *) task.get(), - 0, RTTHREADTYPE_MAIN_WORKER, 0, "VMPowerUp"); - if (RT_FAILURE(vrc)) - return setError(E_FAIL, "Could not create VMPowerUp thread (%Rrc)", vrc); + if (FAILED(rc) && fBeganPoweringUp) + { - /* task is now owned by powerUpThread(), so release it */ - task.release(); + /* The progress object will fetch the current error info */ + if (!pPowerupProgress.isNull()) + pPowerupProgress->notifyComplete(rc); - /* finally, set the state: no right to fail in this method afterwards - * since we've already started the thread and it is now responsible for - * any error reporting and appropriate state change! */ + /* Save the error info across the IPC below. Can't be done before the + * progress notification above, as saving the error info deletes it + * from the current context, and thus the progress object wouldn't be + * updated correctly. */ + ErrorInfoKeeper eik; - if (mMachineState == MachineState_Saved) - setMachineState(MachineState_Restoring); - else if (fTeleporterEnabled) - setMachineState(MachineState_TeleportingIn); - else if (enmFaultToleranceState == FaultToleranceState_Standby) - setMachineState(MachineState_FaultTolerantSyncing); - else - setMachineState(MachineState_Starting); + /* signal end of operation */ + mControl->EndPowerUp(rc); + } - LogFlowThisFunc(("mMachineState=%d\n", mMachineState)); + LogFlowThisFunc(("mMachineState=%d, rc=%Rhrc\n", mMachineState, rc)); LogFlowThisFuncLeave(); - return S_OK; + return rc; } /** @@ -5697,7 +5783,7 @@ HRESULT Console::powerUp(IProgress **aProgress, bool aPaused) * instantiated an AutoVMCaller object; first call releaseVMCaller() or * release(). Otherwise it will deadlock. */ -HRESULT Console::powerDown(Progress *aProgress /*= NULL*/) +HRESULT Console::powerDown(IProgress *aProgress /*= NULL*/) { LogFlowThisFuncEnter(); @@ -5840,13 +5926,6 @@ HRESULT Console::powerDown(Progress *aProgress /*= NULL*/) #endif alock.enter(); } - else - { - /** @todo r=bird: Doesn't make sense. Please remove after 3.1 has been branched - * off. */ - /* reset the flag for future re-use */ - mVMPoweredOff = false; - } /* advance percent count */ if (aProgress) @@ -5962,10 +6041,6 @@ HRESULT Console::powerDown(Progress *aProgress /*= NULL*/) if (SUCCEEDED(rc)) mCallbackData.clear(); - /* complete the progress */ - if (aProgress) - aProgress->notifyComplete(rc); - LogFlowThisFuncLeave(); return rc; } @@ -6017,7 +6092,7 @@ HRESULT Console::setMachineState(MachineState_T aMachineState, */ LogFlowThisFunc(("Doing mControl->UpdateState()...\n")); rc = mControl->UpdateState(aMachineState); - LogFlowThisFunc(("mControl->UpdateState()=%08X\n", rc)); + LogFlowThisFunc(("mControl->UpdateState()=%Rhrc\n", rc)); } } @@ -6406,16 +6481,25 @@ DECLCALLBACK(void) Console::vmstateChangeCallback(PVM aVM, Assert(that->mVMPoweredOff == false); that->mVMPoweredOff = true; - /* we are stopping now */ - that->setMachineState(MachineState_Stopping); + /* + * request a progress object from the server + * (this will set the machine state to Stopping on the server + * to block others from accessing this machine) + */ + ComPtr<IProgress> pProgress; + HRESULT rc = that->mControl->BeginPoweringDown(pProgress.asOutParam()); + AssertComRC(rc); + + /* sync the state with the server */ + that->setMachineStateLocally(MachineState_Stopping); /* Setup task object and thread to carry out the operation * asynchronously (if we call powerDown() right here but there * is one or more mpVM callers (added with addVMCaller()) we'll * deadlock). */ - std::auto_ptr<VMProgressTask> task(new VMProgressTask(that, NULL /* aProgress */, - true /* aUsesVMPtr */)); + std::auto_ptr<VMPowerDownTask> task(new VMPowerDownTask(that, + pProgress)); /* If creating a task failed, this can currently mean one of * two: either Console::uninit() has been called just a ms @@ -6651,7 +6735,6 @@ DECLCALLBACK(void) Console::vmstateChangeCallback(PVM aVM, } #ifdef VBOX_WITH_USB - /** * Sends a request to VMM to attach the given host device. * After this method succeeds, the attached device will appear in the @@ -6884,10 +6967,9 @@ Console::usbDetachCallback(Console *that, USBDeviceList::iterator *aIt, PCRTUUID LogFlowFuncLeave(); return vrc; } - #endif /* VBOX_WITH_USB */ -#if ((defined(RT_OS_LINUX) && !defined(VBOX_WITH_NETFLT)) || defined(RT_OS_FREEBSD)) +#if ((defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)) && !defined(VBOX_WITH_NETFLT)) /** * Helper function to handle host interface device creation and attachment. * @@ -7122,7 +7204,6 @@ HRESULT Console::detachFromTapInterface(INetworkAdapter *networkAdapter) LogFlowThisFunc(("returning %d\n", rc)); return rc; } - #endif /* (RT_OS_LINUX || RT_OS_FREEBSD) && !VBOX_WITH_NETFLT */ /** @@ -7156,11 +7237,11 @@ HRESULT Console::powerDownHostInterfaces() pNetworkAdapter->COMGETTER(AttachmentType)(&attachment); if (attachment == NetworkAttachmentType_Bridged) { -#if defined(RT_OS_LINUX) && !defined(VBOX_WITH_NETFLT) +#if ((defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)) && !defined(VBOX_WITH_NETFLT)) HRESULT rc2 = detachFromTapInterface(pNetworkAdapter); if (FAILED(rc2) && SUCCEEDED(rc)) rc = rc2; -#endif +#endif /* (RT_OS_LINUX || RT_OS_FREEBSD) && !VBOX_WITH_NETFLT */ } } @@ -7512,7 +7593,7 @@ DECLCALLBACK(int) Console::powerUpThread(RTTHREAD Thread, void *pvUser) HRESULT hrc = CoInitializeEx(NULL, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE | COINIT_SPEED_OVER_MEMORY); - LogFlowFunc(("CoInitializeEx()=%08X\n", hrc)); + LogFlowFunc(("CoInitializeEx()=%Rhrc\n", hrc)); } #endif @@ -8430,11 +8511,13 @@ DECLCALLBACK(int) Console::powerDownThread(RTTHREAD Thread, void *pvUser) { LogFlowFuncEnter(); - std::auto_ptr<VMProgressTask> task(static_cast<VMProgressTask *>(pvUser)); + std::auto_ptr<VMPowerDownTask> task(static_cast<VMPowerDownTask *>(pvUser)); AssertReturn(task.get(), VERR_INVALID_PARAMETER); AssertReturn(task->isOk(), VERR_GENERAL_FAILURE); + Assert(task->mProgress.isNull()); + const ComObjPtr<Console> &that = task->mConsole; /* Note: no need to use addCaller() to protect Console because VMTask does @@ -8446,7 +8529,10 @@ DECLCALLBACK(int) Console::powerDownThread(RTTHREAD Thread, void *pvUser) /* release VM caller to avoid the powerDown() deadlock */ task->releaseVMCaller(); - that->powerDown(task->mProgress); + that->powerDown(task->mServerProgress); + + /* complete the operation */ + that->mControl->EndPoweringDown(S_OK, Bstr().raw()); LogFlowFuncLeave(); return VINF_SUCCESS; diff --git a/src/VBox/Main/ConsoleImpl2.cpp b/src/VBox/Main/src-client/ConsoleImpl2.cpp index 347fccb9e..cfa0bd4c1 100644 --- a/src/VBox/Main/ConsoleImpl2.cpp +++ b/src/VBox/Main/src-client/ConsoleImpl2.cpp @@ -1,4 +1,4 @@ -/* $Id: ConsoleImpl2.cpp 35282 2010-12-21 20:19:53Z vboxsync $ */ +/* $Id: ConsoleImpl2.cpp 35560 2011-01-14 13:37:32Z vboxsync $ */ /** @file * VBox Console COM Class implementation * @@ -54,10 +54,10 @@ #endif #include <iprt/stream.h> -#include <VBox/vmapi.h> +#include <VBox/vmm/vmapi.h> #include <VBox/err.h> #include <VBox/param.h> -#include <VBox/pdmapi.h> /* For PDMR3DriverAttach/PDMR3DriverDetach */ +#include <VBox/vmm/pdmapi.h> /* For PDMR3DriverAttach/PDMR3DriverDetach */ #include <VBox/version.h> #include <VBox/HostServices/VBoxClipboardSvc.h> #ifdef VBOX_WITH_CROGL @@ -67,7 +67,7 @@ # include <VBox/HostServices/GuestPropertySvc.h> # include <VBox/com/defs.h> # include <VBox/com/array.h> -# include <hgcm/HGCM.h> /** @todo it should be possible to register a service +# include "HGCM.h" /** @todo it should be possible to register a service * extension using a VMMDev callback. */ # include <vector> #endif /* VBOX_WITH_GUEST_PROPS */ @@ -2710,10 +2710,13 @@ int Console::configMediumAttachment(PCFGMNODE pCtlInst, PPDMIMOUNT pIMount = PDMIBASE_QUERY_INTERFACE(pBase, PDMIMOUNT); AssertReturn(pIMount, VERR_INVALID_POINTER); - /* Unmount the media. */ - rc = pIMount->pfnUnmount(pIMount, fForceUnmount); + /* Unmount the media (but do not eject the medium!) */ + rc = pIMount->pfnUnmount(pIMount, fForceUnmount, false /*=fEject*/); if (rc == VERR_PDM_MEDIA_NOT_MOUNTED) rc = VINF_SUCCESS; + /* for example if the medium is locked */ + else if (RT_FAILURE(rc)) + return rc; } } diff --git a/src/VBox/Main/ConsoleImplTeleporter.cpp b/src/VBox/Main/src-client/ConsoleImplTeleporter.cpp index 4f05b92d4..0efb15ce2 100644 --- a/src/VBox/Main/ConsoleImplTeleporter.cpp +++ b/src/VBox/Main/src-client/ConsoleImplTeleporter.cpp @@ -1,4 +1,4 @@ -/* $Id: ConsoleImplTeleporter.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: ConsoleImplTeleporter.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VBox Console COM Class implementation, The Teleporter Part. */ @@ -33,8 +33,8 @@ #include <iprt/tcp.h> #include <iprt/timer.h> -#include <VBox/vmapi.h> -#include <VBox/ssm.h> +#include <VBox/vmm/vmapi.h> +#include <VBox/vmm/ssm.h> #include <VBox/err.h> #include <VBox/version.h> #include <VBox/com/string.h> diff --git a/src/VBox/Main/ConsoleVRDPServer.cpp b/src/VBox/Main/src-client/ConsoleVRDPServer.cpp index 70790703d..695cc47e0 100644 --- a/src/VBox/Main/ConsoleVRDPServer.cpp +++ b/src/VBox/Main/src-client/ConsoleVRDPServer.cpp @@ -1,4 +1,4 @@ -/* $Id: ConsoleVRDPServer.cpp 35191 2010-12-16 15:25:20Z vboxsync $ */ +/* $Id: ConsoleVRDPServer.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VBox Console VRDP Helper class */ diff --git a/src/VBox/Main/DisplayImpl.cpp b/src/VBox/Main/src-client/DisplayImpl.cpp index 3a3f18f09..07e1ea356 100644 --- a/src/VBox/Main/DisplayImpl.cpp +++ b/src/VBox/Main/src-client/DisplayImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: DisplayImpl.cpp 35283 2010-12-21 20:31:26Z vboxsync $ */ +/* $Id: DisplayImpl.cpp 35612 2011-01-18 14:34:31Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ @@ -32,9 +32,9 @@ #include <iprt/asm.h> #include <iprt/cpp/utils.h> -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #ifdef DEBUG /* for VM_ASSERT_EMT(). */ -# include <VBox/vm.h> +# include <VBox/vmm/vm.h> #endif #ifdef VBOX_WITH_VIDEOHWACCEL @@ -115,11 +115,9 @@ HRESULT Display::FinalConstruct() mLastWidth = 0; mLastHeight = 0; -#ifdef VBOX_WITH_OLD_VBVA_LOCK int rc = RTCritSectInit(&mVBVALock); AssertRC(rc); mfu32PendingVideoAccelDisable = false; -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ #ifdef VBOX_WITH_HGSMI mu32UpdateVBVAFlags = 0; @@ -132,13 +130,11 @@ void Display::FinalRelease() { uninit(); -#ifdef VBOX_WITH_OLD_VBVA_LOCK if (RTCritSectIsInitialized (&mVBVALock)) { RTCritSectDelete (&mVBVALock); memset (&mVBVALock, 0, sizeof (mVBVALock)); } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ } // public initializer/uninitializer for internal purposes only @@ -231,11 +227,7 @@ Display::displaySSMSaveScreenshot(PSSMHANDLE pSSM, void *pvUser) uint32_t cy = 0; /* SSM code is executed on EMT(0), therefore no need to use VMR3ReqCallWait. */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK int rc = Display::displayTakeScreenshotEMT(that, VBOX_VIDEO_PRIMARY_SCREEN, &pu8Data, &cbData, &cx, &cy); -#else - int rc = that->mpDrv->pUpPort->pfnTakeScreenshot (that->mpDrv->pUpPort, &pu8Data, &cbData, &cx, &cy); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ /* * It is possible that success is returned but everything is 0 or NULL. @@ -357,6 +349,9 @@ Display::displaySSMSave(PSSMHANDLE pSSM, void *pvUser) SSMR3PutU32(pSSM, that->maFramebuffers[i].u32InformationSize); SSMR3PutU32(pSSM, that->maFramebuffers[i].w); SSMR3PutU32(pSSM, that->maFramebuffers[i].h); + SSMR3PutS32(pSSM, that->maFramebuffers[i].xOrigin); + SSMR3PutS32(pSSM, that->maFramebuffers[i].yOrigin); + SSMR3PutU32(pSSM, that->maFramebuffers[i].flags); } } @@ -366,7 +361,8 @@ Display::displaySSMLoad(PSSMHANDLE pSSM, void *pvUser, uint32_t uVersion, uint32 Display *that = static_cast<Display*>(pvUser); if (!( uVersion == sSSMDisplayVer - || uVersion == sSSMDisplayVer2)) + || uVersion == sSSMDisplayVer2 + || uVersion == sSSMDisplayVer3)) return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; Assert(uPass == SSM_PASS_FINAL); NOREF(uPass); @@ -380,7 +376,8 @@ Display::displaySSMLoad(PSSMHANDLE pSSM, void *pvUser, uint32_t uVersion, uint32 SSMR3GetU32(pSSM, &that->maFramebuffers[i].u32Offset); SSMR3GetU32(pSSM, &that->maFramebuffers[i].u32MaxFramebufferSize); SSMR3GetU32(pSSM, &that->maFramebuffers[i].u32InformationSize); - if (uVersion == sSSMDisplayVer2) + if ( uVersion == sSSMDisplayVer2 + || uVersion == sSSMDisplayVer3) { uint32_t w; uint32_t h; @@ -389,6 +386,18 @@ Display::displaySSMLoad(PSSMHANDLE pSSM, void *pvUser, uint32_t uVersion, uint32 that->maFramebuffers[i].w = w; that->maFramebuffers[i].h = h; } + if (uVersion == sSSMDisplayVer3) + { + int32_t xOrigin; + int32_t yOrigin; + uint32_t flags; + SSMR3GetS32(pSSM, &xOrigin); + SSMR3GetS32(pSSM, &yOrigin); + SSMR3GetU32(pSSM, &flags); + that->maFramebuffers[i].xOrigin = xOrigin; + that->maFramebuffers[i].yOrigin = yOrigin; + that->maFramebuffers[i].flags = (uint16_t)flags; + } } return VINF_SUCCESS; @@ -436,6 +445,8 @@ HRESULT Display::init (Console *aParent) maFramebuffers[ul].w = 0; maFramebuffers[ul].h = 0; + maFramebuffers[ul].flags = 0; + maFramebuffers[ul].u16BitsPerPixel = 0; maFramebuffers[ul].pu8FramebufferVRAM = NULL; maFramebuffers[ul].u32LineSize = 0; @@ -511,16 +522,19 @@ void Display::uninit() */ int Display::registerSSM(PVM pVM) { - /* Newest version adds width and height of the framebuffer */ - int rc = SSMR3RegisterExternal(pVM, "DisplayData", 0, sSSMDisplayVer2, - mcMonitors * sizeof(uint32_t) * 5 + sizeof(uint32_t), + /* Version 2 adds width and height of the framebuffer; version 3 adds + * the framebuffer offset in the virtual desktop and the framebuffer flags. + */ + int rc = SSMR3RegisterExternal(pVM, "DisplayData", 0, sSSMDisplayVer3, + mcMonitors * sizeof(uint32_t) * 8 + sizeof(uint32_t), NULL, NULL, NULL, NULL, displaySSMSave, NULL, NULL, displaySSMLoad, NULL, this); AssertRCReturn(rc, rc); /* - * Register loaders for old saved states where iInstance was 3 * sizeof(uint32_t *). + * Register loaders for old saved states where iInstance was + * 3 * sizeof(uint32_t *) due to a code mistake. */ rc = SSMR3RegisterExternal(pVM, "DisplayData", 12 /*uInstance*/, sSSMDisplayVer, 0 /*cbGuess*/, NULL, NULL, NULL, @@ -759,7 +773,11 @@ void Display::handleResizeCompletedEMT (void) pFBInfo->fDefaultFormat = (usesGuestVRAM == FALSE); - mpDrv->pUpPort->pfnSetRenderVRAM (mpDrv->pUpPort, pFBInfo->fDefaultFormat); + if (pFBInfo->fDisabled) + mpDrv->pUpPort->pfnSetRenderVRAM (mpDrv->pUpPort, false); + else + mpDrv->pUpPort->pfnSetRenderVRAM (mpDrv->pUpPort, + pFBInfo->fDefaultFormat); } else if (!pFBInfo->pFramebuffer.isNull()) { @@ -891,12 +909,10 @@ void Display::handleDisplayUpdateLegacy (int x, int y, int w, int h) void Display::handleDisplayUpdate (unsigned uScreenId, int x, int y, int w, int h) { -#ifdef VBOX_WITH_OLD_VBVA_LOCK /* * Always runs under either VBVA lock or, for HGSMI, DevVGA lock. * Safe to use VBVA vars and take the framebuffer lock. */ -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ #ifdef DEBUG_sunlover LogFlowFunc (("[%d] %d,%d %dx%d (%d,%d)\n", @@ -906,7 +922,8 @@ void Display::handleDisplayUpdate (unsigned uScreenId, int x, int y, int w, int IFramebuffer *pFramebuffer = maFramebuffers[uScreenId].pFramebuffer; // if there is no framebuffer, this call is not interesting - if (pFramebuffer == NULL) + if ( pFramebuffer == NULL + || maFramebuffers[uScreenId].fDisabled) return; pFramebuffer->Lock(); @@ -951,16 +968,16 @@ void Display::getFramebufferDimensions(int32_t *px1, int32_t *py1, if (!mpDrv) return; - /* If VBVA is not in use then maFramebuffers will be zeroed out and this + /* If VBVA is not in use then this flag will not be set and this * will still work as it should. */ - if (!(maFramebuffers[0].flags & VBVA_SCREEN_F_DISABLED)) + if (!(maFramebuffers[0].fDisabled)) { x2 = mpDrv->IConnector.cx + (int32_t)maFramebuffers[0].xOrigin; y2 = mpDrv->IConnector.cy + (int32_t)maFramebuffers[0].yOrigin; } for (unsigned i = 1; i < mcMonitors; ++i) { - if (!(maFramebuffers[i].flags & VBVA_SCREEN_F_DISABLED)) + if (!(maFramebuffers[i].fDisabled)) { x1 = RT_MIN(x1, maFramebuffers[i].xOrigin); y1 = RT_MIN(y1, maFramebuffers[i].yOrigin); @@ -976,7 +993,6 @@ void Display::getFramebufferDimensions(int32_t *px1, int32_t *py1, *py2 = y2; } -#ifdef MMSEAMLESS static bool displayIntersectRect(RTRECT *prectResult, const RTRECT *prect1, const RTRECT *prect2) @@ -1105,7 +1121,6 @@ int Display::handleQueryVisibleRegion(uint32_t *pcRect, PRTRECT pRect) // @todo Currently not used by the guest and is not implemented in framebuffers. Remove? return VERR_NOT_SUPPORTED; } -#endif typedef struct _VBVADIRTYREGION { @@ -1300,7 +1315,6 @@ bool Display::VideoAccelAllowed (void) return true; } -#ifdef VBOX_WITH_OLD_VBVA_LOCK int Display::vbvaLock(void) { return RTCritSectEnter(&mVBVALock); @@ -1310,12 +1324,10 @@ void Display::vbvaUnlock(void) { RTCritSectLeave(&mVBVALock); } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ /** * @thread EMT */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK int Display::VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory) { int rc; @@ -1324,13 +1336,8 @@ int Display::VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory) vbvaUnlock(); return rc; } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK int Display::videoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory) -#else -int Display::VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory) -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ { int rc = VINF_SUCCESS; @@ -1379,11 +1386,7 @@ int Display::VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory) if (mfVideoAccelEnabled) { /* Process any pending orders and empty the VBVA ring buffer. */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK videoAccelFlush (); -#else - VideoAccelFlush (); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ } if (!fEnable && mpVbvaMemory) @@ -1424,9 +1427,7 @@ int Display::VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory) mpVbvaMemory->indexRecordFirst = 0; mpVbvaMemory->indexRecordFree = 0; -#ifdef VBOX_WITH_OLD_VBVA_LOCK mfu32PendingVideoAccelDisable = false; -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ LogRel(("VBVA: Enabled.\n")); } @@ -1446,9 +1447,7 @@ void Display::VideoAccelVRDP (bool fEnable) { LogFlowFunc(("fEnable = %d\n", fEnable)); -#ifdef VBOX_WITH_OLD_VBVA_LOCK vbvaLock(); -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ int c = fEnable? ASMAtomicIncS32 (&mcVideoAccelVRDPRefs): @@ -1500,9 +1499,7 @@ void Display::VideoAccelVRDP (bool fEnable) */ Assert (mfVideoAccelVRDP == true); } -#ifdef VBOX_WITH_OLD_VBVA_LOCK vbvaUnlock(); -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ } static bool vbvaVerifyRingBuffer (VBVAMEMORY *pVbvaMemory) @@ -1776,21 +1773,15 @@ void Display::vbvaReleaseCmd (VBVACMDHDR *pHdr, int32_t cbCmd) * * @thread EMT */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK void Display::VideoAccelFlush (void) { vbvaLock(); videoAccelFlush(); vbvaUnlock(); } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK /* Under VBVA lock. DevVGA is not taken. */ void Display::videoAccelFlush (void) -#else -void Display::VideoAccelFlush (void) -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ { #ifdef DEBUG_sunlover_2 LogFlowFunc (("mfVideoAccelEnabled = %d\n", mfVideoAccelEnabled)); @@ -1818,15 +1809,6 @@ void Display::VideoAccelFlush (void) /* Process the ring buffer */ unsigned uScreenId; -#ifndef VBOX_WITH_OLD_VBVA_LOCK - for (uScreenId = 0; uScreenId < mcMonitors; uScreenId++) - { - if (!maFramebuffers[uScreenId].pFramebuffer.isNull()) - { - maFramebuffers[uScreenId].pFramebuffer->Lock (); - } - } -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ /* Initialize dirty rectangles accumulator. */ VBVADIRTYREGION rgn; @@ -1844,11 +1826,7 @@ void Display::VideoAccelFlush (void) mpVbvaMemory->off32Data, mpVbvaMemory->off32Free)); /* Disable VBVA on those processing errors. */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK videoAccelEnable (false, NULL); -#else - VideoAccelEnable (false, NULL); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ break; } @@ -1911,13 +1889,6 @@ void Display::VideoAccelFlush (void) for (uScreenId = 0; uScreenId < mcMonitors; uScreenId++) { -#ifndef VBOX_WITH_OLD_VBVA_LOCK - if (!maFramebuffers[uScreenId].pFramebuffer.isNull()) - { - maFramebuffers[uScreenId].pFramebuffer->Unlock (); - } -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ - if (maFramebuffers[uScreenId].u32ResizeStatus == ResizeStatus_Void) { /* Draw the framebuffer. */ @@ -1926,7 +1897,6 @@ void Display::VideoAccelFlush (void) } } -#ifdef VBOX_WITH_OLD_VBVA_LOCK int Display::videoAccelRefreshProcess(void) { int rc = VWRN_INVALID_STATE; /* Default is to do a display update in VGA device. */ @@ -1978,7 +1948,6 @@ int Display::videoAccelRefreshProcess(void) return rc; } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ // IDisplay methods @@ -2195,7 +2164,6 @@ STDMETHODIMP Display::SetSeamlessMode (BOOL enabled) return S_OK; } -#ifdef VBOX_WITH_OLD_VBVA_LOCK int Display::displayTakeScreenshotEMT(Display *pDisplay, ULONG aScreenId, uint8_t **ppu8Data, size_t *pcbData, uint32_t *pu32Width, uint32_t *pu32Height) { int rc; @@ -2277,13 +2245,8 @@ int Display::displayTakeScreenshotEMT(Display *pDisplay, ULONG aScreenId, uint8_ pDisplay->vbvaUnlock(); return rc; } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK static int displayTakeScreenshot(PVM pVM, Display *pDisplay, struct DRVMAINDISPLAY *pDrv, ULONG aScreenId, BYTE *address, ULONG width, ULONG height) -#else -static int displayTakeScreenshot(PVM pVM, struct DRVMAINDISPLAY *pDrv, BYTE *address, ULONG width, ULONG height) -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ { uint8_t *pu8Data = NULL; size_t cbData = 0; @@ -2291,7 +2254,6 @@ static int displayTakeScreenshot(PVM pVM, struct DRVMAINDISPLAY *pDrv, BYTE *add uint32_t cy = 0; int vrc = VINF_SUCCESS; -#ifdef VBOX_WITH_OLD_VBVA_LOCK int cRetries = 5; while (cRetries-- > 0) @@ -2305,11 +2267,6 @@ static int displayTakeScreenshot(PVM pVM, struct DRVMAINDISPLAY *pDrv, BYTE *add RTThreadSleep(10); } -#else - /* @todo pfnTakeScreenshot is probably callable from any thread, because it uses the VGA device lock. */ - vrc = VMR3ReqCallWait(pVM, VMCPUID_ANY, (PFNRT)pDrv->pUpPort->pfnTakeScreenshot, 5, - pDrv->pUpPort, &pu8Data, &cbData, &cx, &cy); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ if (RT_SUCCESS(vrc) && pu8Data) { @@ -2382,11 +2339,7 @@ STDMETHODIMP Display::TakeScreenShot (ULONG aScreenId, BYTE *address, ULONG widt */ alock.leave(); -#ifdef VBOX_WITH_OLD_VBVA_LOCK int vrc = displayTakeScreenshot(pVM, this, mpDrv, aScreenId, address, width, height); -#else - int vrc = displayTakeScreenshot(pVM, mpDrv, address, width, height); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ if (vrc == VERR_NOT_IMPLEMENTED) rc = setError(E_NOTIMPL, @@ -2441,11 +2394,7 @@ STDMETHODIMP Display::TakeScreenShotToArray (ULONG aScreenId, ULONG width, ULONG if (!pu8Data) return E_OUTOFMEMORY; -#ifdef VBOX_WITH_OLD_VBVA_LOCK int vrc = displayTakeScreenshot(pVM, this, mpDrv, aScreenId, pu8Data, width, height); -#else - int vrc = displayTakeScreenshot(pVM, mpDrv, pu8Data, width, height); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ if (RT_SUCCESS(vrc)) { @@ -2518,11 +2467,7 @@ STDMETHODIMP Display::TakeScreenShotPNGToArray (ULONG aScreenId, ULONG width, UL if (!pu8Data) return E_OUTOFMEMORY; -#ifdef VBOX_WITH_OLD_VBVA_LOCK int vrc = displayTakeScreenshot(pVM, this, mpDrv, aScreenId, pu8Data, width, height); -#else - int vrc = displayTakeScreenshot(pVM, mpDrv, pu8Data, width, height); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ if (RT_SUCCESS(vrc)) { @@ -2554,7 +2499,6 @@ STDMETHODIMP Display::TakeScreenShotPNGToArray (ULONG aScreenId, ULONG width, UL } -#ifdef VBOX_WITH_OLD_VBVA_LOCK int Display::drawToScreenEMT(Display *pDisplay, ULONG aScreenId, BYTE *address, ULONG x, ULONG y, ULONG width, ULONG height) { int rc; @@ -2601,7 +2545,8 @@ int Display::drawToScreenEMT(Display *pDisplay, ULONG aScreenId, BYTE *address, /* Update the changed screen area. When framebuffer uses VRAM directly, just notify * it to update. And for default format, render the guest VRAM to framebuffer. */ - if (pFBInfo->fDefaultFormat) + if ( pFBInfo->fDefaultFormat + && !(pFBInfo->fDisabled)) { address = NULL; HRESULT hrc = pFBInfo->pFramebuffer->COMGETTER(Address) (&address); @@ -2648,7 +2593,6 @@ int Display::drawToScreenEMT(Display *pDisplay, ULONG aScreenId, BYTE *address, pDisplay->vbvaUnlock(); return rc; } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ STDMETHODIMP Display::DrawToScreen (ULONG aScreenId, BYTE *address, ULONG x, ULONG y, ULONG width, ULONG height) @@ -2677,17 +2621,15 @@ STDMETHODIMP Display::DrawToScreen (ULONG aScreenId, BYTE *address, ULONG x, ULO Console::SafeVMPtr pVM(mParent); if (FAILED(pVM.rc())) return pVM.rc(); + /* Leave lock because the call scheduled on EMT may also try to take it. */ + alock.leave(); + /* * Again we're lazy and make the graphics device do all the * dirty conversion work. */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK int rcVBox = VMR3ReqCallWait(pVM, VMCPUID_ANY, (PFNRT)Display::drawToScreenEMT, 7, this, aScreenId, address, x, y, width, height); -#else - int rcVBox = VMR3ReqCallWait(pVM, VMCPUID_ANY, (PFNRT)mpDrv->pUpPort->pfnDisplayBlt, 6, - mpDrv->pUpPort, address, x, y, width, height); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ /* * If the function returns not supported, we'll have to do all the @@ -2714,7 +2656,6 @@ STDMETHODIMP Display::DrawToScreen (ULONG aScreenId, BYTE *address, ULONG x, ULO return rc; } -#ifdef VBOX_WITH_OLD_VBVA_LOCK void Display::InvalidateAndUpdateEMT(Display *pDisplay) { pDisplay->vbvaLock(); @@ -2729,7 +2670,8 @@ void Display::InvalidateAndUpdateEMT(Display *pDisplay) } else { - if (!pFBInfo->pFramebuffer.isNull()) + if ( !pFBInfo->pFramebuffer.isNull() + && !(pFBInfo->fDisabled)) { /* Render complete VRAM screen to the framebuffer. * When framebuffer uses VRAM directly, just notify it to update. @@ -2779,7 +2721,6 @@ void Display::InvalidateAndUpdateEMT(Display *pDisplay) } pDisplay->vbvaUnlock(); } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ /** * Does a full invalidation of the VM display and instructs the VM @@ -2809,13 +2750,8 @@ STDMETHODIMP Display::InvalidateAndUpdate() alock.leave (); /* pdm.h says that this has to be called from the EMT thread */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK int rcVBox = VMR3ReqCallVoidWait(pVM, VMCPUID_ANY, (PFNRT)Display::InvalidateAndUpdateEMT, 1, this); -#else - int rcVBox = VMR3ReqCallVoidWait(pVM, VMCPUID_ANY, - (PFNRT)mpDrv->pUpPort->pfnUpdateDisplayAll, 1, mpDrv->pUpPort); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ alock.enter (); if (RT_FAILURE(rcVBox)) @@ -3112,15 +3048,11 @@ DECLCALLBACK(void) Display::displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterf { /* Repaint the display because VM continued to run during the framebuffer resize. */ if (!pFBInfo->pFramebuffer.isNull()) -#ifdef VBOX_WITH_OLD_VBVA_LOCK { pDisplay->vbvaLock(); -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ pDrv->pUpPort->pfnUpdateDisplayAll(pDrv->pUpPort); -#ifdef VBOX_WITH_OLD_VBVA_LOCK pDisplay->vbvaUnlock(); } -#endif /* VBOX_WITH_OLD_VBVA_LOCK */ } } else if (u32ResizeStatus == ResizeStatus_InProgress) @@ -3134,7 +3066,6 @@ DECLCALLBACK(void) Display::displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterf if (!fNoUpdate) { -#ifdef VBOX_WITH_OLD_VBVA_LOCK int rc = pDisplay->videoAccelRefreshProcess(); if (rc != VINF_TRY_AGAIN) /* Means 'do nothing' here. */ @@ -3169,67 +3100,6 @@ DECLCALLBACK(void) Display::displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterf } } } -#else - if (pDisplay->mfPendingVideoAccelEnable) - { - /* Acceleration was enabled while machine was not yet running - * due to restoring from saved state. Update entire display and - * actually enable acceleration. - */ - Assert(pDisplay->mpPendingVbvaMemory); - - /* Acceleration can not be yet enabled.*/ - Assert(pDisplay->mpVbvaMemory == NULL); - Assert(!pDisplay->mfVideoAccelEnabled); - - if (pDisplay->mfMachineRunning) - { - pDisplay->VideoAccelEnable (pDisplay->mfPendingVideoAccelEnable, - pDisplay->mpPendingVbvaMemory); - - /* Reset the pending state. */ - pDisplay->mfPendingVideoAccelEnable = false; - pDisplay->mpPendingVbvaMemory = NULL; - } - } - else - { - Assert(pDisplay->mpPendingVbvaMemory == NULL); - - if (pDisplay->mfVideoAccelEnabled) - { - Assert(pDisplay->mpVbvaMemory); - pDisplay->VideoAccelFlush (); - } - else - { - DISPLAYFBINFO *pFBInfo = &pDisplay->maFramebuffers[VBOX_VIDEO_PRIMARY_SCREEN]; - if (!pFBInfo->pFramebuffer.isNull()) - { - Assert(pDrv->IConnector.pu8Data); - Assert(pFBInfo->u32ResizeStatus == ResizeStatus_Void); - pDrv->pUpPort->pfnUpdateDisplay(pDrv->pUpPort); - } - } - - /* Inform the VRDP server that the current display update sequence is - * completed. At this moment the framebuffer memory contains a definite - * image, that is synchronized with the orders already sent to VRDP client. - * The server can now process redraw requests from clients or initial - * fullscreen updates for new clients. - */ - for (uScreenId = 0; uScreenId < pDisplay->mcMonitors; uScreenId++) - { - DISPLAYFBINFO *pFBInfo = &pDisplay->maFramebuffers[uScreenId]; - - if (!pFBInfo->pFramebuffer.isNull() && pFBInfo->u32ResizeStatus == ResizeStatus_Void) - { - Assert (pDisplay->mParent && pDisplay->mParent->consoleVRDPServer()); - pDisplay->mParent->consoleVRDPServer()->SendUpdate (uScreenId, NULL, 0); - } - } - } -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ } #ifdef DEBUG_sunlover @@ -3269,12 +3139,8 @@ DECLCALLBACK(void) Display::displayLFBModeChangeCallback(PPDMIDISPLAYCONNECTOR p NOREF(fEnabled); /* Disable VBVA mode in any case. The guest driver reenables VBVA mode if necessary. */ -#ifdef VBOX_WITH_OLD_VBVA_LOCK - /* This is called under DevVGA lock. Postpone disabling VBVA, do it in the refresh timer. */ + /* The LFBModeChange function is called under DevVGA lock. Postpone disabling VBVA, do it in the refresh timer. */ ASMAtomicWriteU32(&pDrv->pDisplay->mfu32PendingVideoAccelDisable, true); -#else - pDrv->pDisplay->VideoAccelEnable (false, NULL); -#endif /* !VBOX_WITH_OLD_VBVA_LOCK */ } /** @@ -3731,11 +3597,14 @@ DECLCALLBACK(void) Display::displayVBVAUpdateProcess(PPDMIDISPLAYCONNECTOR pInte if (pFBInfo->fDefaultFormat) { /* Make sure that framebuffer contains the same image as the guest VRAM. */ - if (uScreenId == VBOX_VIDEO_PRIMARY_SCREEN && !pFBInfo->pFramebuffer.isNull()) + if ( uScreenId == VBOX_VIDEO_PRIMARY_SCREEN + && !pFBInfo->pFramebuffer.isNull() + && !pFBInfo->fDisabled) { pDrv->pUpPort->pfnUpdateDisplayRect (pDrv->pUpPort, pCmd->x, pCmd->y, pCmd->w, pCmd->h); } - else if (!pFBInfo->pFramebuffer.isNull()) + else if ( !pFBInfo->pFramebuffer.isNull() + && !(pFBInfo->fDisabled)) { /* Render VRAM content to the framebuffer. */ BYTE *address = NULL; @@ -3858,7 +3727,8 @@ DECLCALLBACK(int) Display::displayVBVAResize(PPDMIDISPLAYCONNECTOR pInterface, c /* Temporary: ask framebuffer to resize using a default format. The framebuffer will be black. */ pThis->handleDisplayResize(pScreen->u32ViewIndex, 0, (uint8_t *)NULL, - 0, pFBInfo->w, pFBInfo->h, pScreen->u16Flags); + pScreen->u32LineSize, pScreen->u32Width, + pScreen->u32Height, pScreen->u16Flags); fireGuestMonitorChangedEvent(pThis->mParent->getEventSource(), GuestMonitorChangedEventType_Disabled, diff --git a/src/VBox/Main/GuestCtrlImpl.cpp b/src/VBox/Main/src-client/GuestCtrlImpl.cpp index 30ccee664..5c5e656ca 100644 --- a/src/VBox/Main/GuestCtrlImpl.cpp +++ b/src/VBox/Main/src-client/GuestCtrlImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: GuestCtrlImpl.cpp 35243 2010-12-20 13:37:12Z vboxsync $ */ +/* $Id: GuestCtrlImpl.cpp 35540 2011-01-13 15:36:00Z vboxsync $ */ /** @file * VirtualBox COM class implementation: Guest */ @@ -36,7 +36,7 @@ #include <iprt/isofs.h> #include <iprt/list.h> #include <iprt/path.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pgm.h> #include <memory> @@ -295,7 +295,7 @@ HRESULT Guest::taskCopyFile(TaskGuest *aTask) size_t cbToRead = cbSize; size_t cbTransfered = 0; size_t cbRead; - SafeArray<BYTE> aInputData(_1M); + SafeArray<BYTE> aInputData(_64K); while ( SUCCEEDED(execProgress->COMGETTER(Completed(&fCompleted))) && !fCompleted) { @@ -304,7 +304,7 @@ HRESULT Guest::taskCopyFile(TaskGuest *aTask) else { vrc = RTFileRead(fileSource, (uint8_t*)aInputData.raw(), - RT_MIN(cbToRead, _1M), &cbRead); + RT_MIN(cbToRead, _64K), &cbRead); /* * Some other error occured? There might be a chance that RTFileRead * could not resolve/map the native error code to an IPRT code, so just @@ -325,7 +325,7 @@ HRESULT Guest::taskCopyFile(TaskGuest *aTask) ULONG uFlags = ProcessInputFlag_None; /* Did we reach the end of the content we want to transfer (last chunk)? */ - if ( (cbRead < _1M) + if ( (cbRead < _64K) /* ... or does the user want to cancel? */ || ( SUCCEEDED(aTask->progress->COMGETTER(Canceled(&fCanceled))) && fCanceled) @@ -357,6 +357,10 @@ HRESULT Guest::taskCopyFile(TaskGuest *aTask) if (cbToRead == 0) break; + /* Did the user cancel the operation above? */ + if (fCanceled) + break; + /* Progress canceled by Main API? */ if ( SUCCEEDED(execProgress->COMGETTER(Canceled(&fCanceled))) && fCanceled) @@ -369,7 +373,67 @@ HRESULT Guest::taskCopyFile(TaskGuest *aTask) } if (SUCCEEDED(rc)) - aTask->progress->notifyComplete(S_OK); + { + /* + * If we got here this means the started process either was completed, + * canceled or we simply got all stuff transferred. + */ + ULONG uRetStatus, uRetExitCode; + rc = pGuest->waitForProcessStatusChange(uPID, &uRetStatus, &uRetExitCode, 10 * 1000 /* 10s timeout. */); + if (FAILED(rc)) + { + rc = TaskGuest::setProgressErrorInfo(rc, aTask->progress, pGuest); + } + else + { + if ( uRetExitCode != 0 + || uRetStatus != PROC_STS_TEN) + { + rc = TaskGuest::setProgressErrorInfo(VBOX_E_IPRT_ERROR, aTask->progress, + Guest::tr("Guest reported error %u while copying file \"%s\" to \"%s\""), + uRetExitCode, aTask->strSource.c_str(), aTask->strDest.c_str()); + } + } + } + + if (SUCCEEDED(rc)) + { + if (fCanceled) + { + /* + * In order to make the progress object to behave nicely, we also have to + * notify the object with a complete event when it's canceled. + */ + aTask->progress->notifyComplete(VBOX_E_IPRT_ERROR, + COM_IIDOF(IGuest), + Guest::getStaticComponentName(), + Guest::tr("Copying file \"%s\" canceled"), aTask->strSource.c_str()); + } + else + { + /* + * Even if we succeeded until here make sure to check whether we really transfered + * everything. + */ + if (!cbTransfered) + { + /* If nothing was transfered this means "vbox_cat" wasn't able to write + * to the destination -> access denied. */ + rc = TaskGuest::setProgressErrorInfo(VBOX_E_IPRT_ERROR, aTask->progress, + Guest::tr("Access denied when copying file \"%s\" to \"%s\""), + aTask->strSource.c_str(), aTask->strDest.c_str()); + } + else if (cbTransfered < cbSize) + { + /* If we did not copy all let the user know. */ + rc = TaskGuest::setProgressErrorInfo(VBOX_E_IPRT_ERROR, aTask->progress, + Guest::tr("Copying file \"%s\" failed (%u/%u bytes transfered)"), + aTask->strSource.c_str(), cbTransfered, cbSize); + } + else /* Yay, all went fine! */ + aTask->progress->notifyComplete(S_OK); + } + } } } RTFileClose(fileSource); @@ -1079,10 +1143,22 @@ int Guest::notifyCtrlExecStatus(uint32_t u32Function, * in order to not block the caller. */ case VBOXGUESTCTRLCALLBACKTYPE_EXEC_OUTPUT: { - PCALLBACKDATAEXECOUT pItData = (CALLBACKDATAEXECOUT*)it2->second.pvData; + PCALLBACKDATAEXECOUT pItData = (PCALLBACKDATAEXECOUT)it2->second.pvData; AssertPtr(pItData); if (pItData->u32PID == pCBData->u32PID) - destroyCtrlCallbackContext(it2); + notifyCtrlCallbackContext(it2, errMsg.c_str()); + break; + } + + /* When waiting for injecting process input while the process is destroyed, + * make sure we also destroy the actual waiting operation (internal progress object) + * in order to not block the caller. */ + case VBOXGUESTCTRLCALLBACKTYPE_EXEC_INPUT_STATUS: + { + PCALLBACKDATAEXECINSTATUS pItData = (PCALLBACKDATAEXECINSTATUS)it2->second.pvData; + AssertPtr(pItData); + if (pItData->u32PID == pCBData->u32PID) + notifyCtrlCallbackContext(it2, errMsg.c_str()); break; } @@ -1092,11 +1168,9 @@ int Guest::notifyCtrlExecStatus(uint32_t u32Function, } } - HRESULT hr2 = it->second.pProgress->notifyComplete(VBOX_E_IPRT_ERROR, - COM_IIDOF(IGuest), - Guest::getStaticComponentName(), - "%s", errMsg.c_str()); - AssertComRC(hr2); + /* Let the caller know what went wrong ... */ + notifyCtrlCallbackContext(it, errMsg.c_str()); + LogFlowFunc(("Process (CID=%u, status=%u) reported error: %s\n", pData->hdr.u32ContextID, pData->u32Status, errMsg.c_str())); } @@ -1188,25 +1262,12 @@ int Guest::notifyCtrlExecInStatus(uint32_t u32Function, /* Save bytes processed. */ pCBData->cbProcessed = pData->cbProcessed; - /* Was progress canceled before? */ - BOOL fCanceled; - ComAssert(!it->second.pProgress.isNull()); - if (SUCCEEDED(it->second.pProgress->COMGETTER(Canceled)(&fCanceled)) && fCanceled) - { - it->second.pProgress->notifyComplete(VBOX_E_IPRT_ERROR, - COM_IIDOF(IGuest), - Guest::getStaticComponentName(), - Guest::tr("The input operation was canceled")); - } - else + /* Only trigger completion once. */ + BOOL fCompleted; + if ( SUCCEEDED(it->second.pProgress->COMGETTER(Completed)(&fCompleted)) + && !fCompleted) { - BOOL fCompleted; - if ( SUCCEEDED(it->second.pProgress->COMGETTER(Completed)(&fCompleted)) - && !fCompleted) - { - /* If we previously got completed notification, don't trigger again. */ - it->second.pProgress->notifyComplete(S_OK); - } + it->second.pProgress->notifyComplete(S_OK); } } else @@ -1224,7 +1285,7 @@ int Guest::notifyCtrlClientDisconnected(uint32_t u32Funct if (it != mCallbackMap.end()) { LogFlowFunc(("Client with CID=%u disconnected\n", it->first)); - destroyCtrlCallbackContext(it); + notifyCtrlCallbackContext(it, Guest::tr("Client disconnected")); } return rc; } @@ -1253,11 +1314,22 @@ void Guest::destroyCtrlCallbackContext(Guest::CallbackMapIter it) it->second.cbData = 0; } + /* Remove callback context (not used anymore). */ + mCallbackMap.erase(it); +} + +/* No locking here; */ +void Guest::notifyCtrlCallbackContext(Guest::CallbackMapIter it, const char *pszText) +{ + AssertPtr(pszText); + LogFlowFunc(("Handling callback with CID=%u ...\n", it->first)); + /* Notify outstanding waits for progress ... */ if ( it->second.pProgress && !it->second.pProgress.isNull()) { - LogFlowFunc(("Handling progress for CID=%u ...\n", it->first)); + LogFlowFunc(("Notifying progress for CID=%u (Reason: %s) ...\n", + it->first, pszText)); /* * Assume we didn't complete to make sure we clean up even if the @@ -1267,13 +1339,6 @@ void Guest::destroyCtrlCallbackContext(Guest::CallbackMapIter it) it->second.pProgress->COMGETTER(Completed)(&fCompleted); if (!fCompleted) { - LogFlowFunc(("Progress of CID=%u *not* completed, cancelling ...\n", it->first)); - - /* Only cancel if not canceled before! */ - BOOL fCanceled; - if (SUCCEEDED(it->second.pProgress->COMGETTER(Canceled)(&fCanceled)) && !fCanceled) - it->second.pProgress->Cancel(); - /* * To get waitForCompletion completed (unblocked) we have to notify it if necessary (only * cancel won't work!). This could happen if the client thread (e.g. VBoxService, thread of a spawned process) @@ -1284,7 +1349,7 @@ void Guest::destroyCtrlCallbackContext(Guest::CallbackMapIter it) it->second.pProgress->notifyComplete(VBOX_E_IPRT_ERROR, COM_IIDOF(IGuest), Guest::getStaticComponentName(), - Guest::tr("The operation was canceled because client is shutting down")); + pszText); } /* * Do *not* NULL pProgress here, because waiting function like executeProcess() @@ -1352,6 +1417,39 @@ uint32_t Guest::addCtrlCallbackContext(eVBoxGuestCtrlCallbackType enmType, void #endif return uNewContext; } + +HRESULT Guest::waitForProcessStatusChange(ULONG uPID, ULONG *puRetStatus, ULONG *puRetExitCode, ULONG uTimeoutMS) +{ + AssertPtr(puRetStatus); + AssertPtr(puRetExitCode); + + if (uTimeoutMS == 0) + uTimeoutMS = UINT32_MAX; + + uint64_t u64StartMS = RTTimeMilliTS(); + + HRESULT hRC; + ULONG uRetFlagsIgnored; + do + { + /* + * Do some busy waiting within the specified time period (if any). + */ + if ( uTimeoutMS != UINT32_MAX + && RTTimeMilliTS() - u64StartMS > uTimeoutMS) + { + hRC = setError(VBOX_E_IPRT_ERROR, + tr("The process (PID %u) did not change its status within time (%ums)"), + uPID, uTimeoutMS); + break; + } + hRC = GetProcessStatus(uPID, puRetExitCode, &uRetFlagsIgnored, puRetStatus); + if (FAILED(hRC)) + break; + RTThreadSleep(100); + } while(*puRetStatus == PROC_STS_STARTED && SUCCEEDED(hRC)); + return hRC; +} #endif /* VBOX_WITH_GUEST_CONTROL */ STDMETHODIMP Guest::ExecuteProcess(IN_BSTR aCommand, ULONG aFlags, @@ -1450,7 +1548,7 @@ HRESULT Guest::executeProcessInternal(IN_BSTR aCommand, ULONG aFlags, /* Prepare arguments. */ char **papszArgv = NULL; uint32_t uNumArgs = 0; - if (aArguments > 0) + if (aArguments) { com::SafeArray<IN_BSTR> args(ComSafeArrayInArg(aArguments)); uNumArgs = args.size(); @@ -1478,7 +1576,7 @@ HRESULT Guest::executeProcessInternal(IN_BSTR aCommand, ULONG aFlags, void *pvEnv = NULL; uint32_t uNumEnv = 0; uint32_t cbEnv = 0; - if (aEnvironment > 0) + if (aEnvironment) { com::SafeArray<IN_BSTR> env(ComSafeArrayInArg(aEnvironment)); @@ -1735,53 +1833,59 @@ STDMETHODIMP Guest::SetProcessInput(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, /* Init. */ *aBytesWritten = 0; - /* Search for existing PID. */ - GuestProcessMapIterConst itProc = getProcessByPID(aPID); - if (itProc != mGuestProcessMap.end()) { - /* PID exists; check if process is still running. */ - if (itProc->second.mStatus != PROC_STS_STARTED) + /* Take read lock to prevent races. */ + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + + /* Search for existing PID. */ + GuestProcessMapIterConst itProc = getProcessByPID(aPID); + if (itProc != mGuestProcessMap.end()) { - rc = setError(VBOX_E_IPRT_ERROR, - tr("Process (PID %u) does not run anymore! Status: %ld, Flags: %u, Exit Code: %u"), - aPID, itProc->second.mStatus, itProc->second.mFlags, itProc->second.mExitCode); + /* PID exists; check if process is still running. */ + if (itProc->second.mStatus != PROC_STS_STARTED) + rc = setError(VBOX_E_IPRT_ERROR, + Guest::tr("Cannot inject input to not running process (PID %u)"), aPID); } + else + rc = setError(VBOX_E_IPRT_ERROR, + Guest::tr("Cannot inject input to non-existent process (PID %u)"), aPID); } - else - rc = setError(VBOX_E_IPRT_ERROR, - tr("Process (PID %u) not found!"), aPID); if (SUCCEEDED(rc)) { /* * Create progress object. - * This progress object, compared to the one in executeProgress() above - * is only local and is used to determine whether the operation finished - * or got canceled. + * This progress object, compared to the one in executeProgress() above, + * is only single-stage local and is used to determine whether the operation + * finished or got canceled. */ - ComObjPtr <Progress> progress; - rc = progress.createObject(); + ComObjPtr <Progress> pProgress; + rc = pProgress.createObject(); if (SUCCEEDED(rc)) { - rc = progress->init(static_cast<IGuest*>(this), - Bstr(tr("Setting input for process")).raw(), - TRUE /* Cancelable */); + rc = pProgress->init(static_cast<IGuest*>(this), + Bstr(tr("Setting input for process")).raw(), + TRUE /* Cancelable */); } - if (FAILED(rc)) return rc; + if (FAILED(rc)) throw rc; + ComAssert(!pProgress.isNull()); /* Adjust timeout. */ if (aTimeoutMS == 0) aTimeoutMS = UINT32_MAX; PCALLBACKDATAEXECINSTATUS pData = (PCALLBACKDATAEXECINSTATUS)RTMemAlloc(sizeof(CALLBACKDATAEXECINSTATUS)); + if (NULL == pData) throw rc; AssertReturn(pData, VBOX_E_IPRT_ERROR); RT_ZERO(*pData); + /* Save PID + output flags for later use. */ pData->u32PID = aPID; pData->u32Flags = aFlags; + /* Add job to callback contexts. */ uint32_t uContextID = addCtrlCallbackContext(VBOXGUESTCTRLCALLBACKTYPE_EXEC_INPUT_STATUS, - pData, sizeof(CALLBACKDATAEXECINSTATUS), progress); + pData, sizeof(CALLBACKDATAEXECINSTATUS), pProgress); Assert(uContextID > 0); com::SafeArray<BYTE> sfaData(ComSafeArrayInArg(aData)); @@ -1837,62 +1941,45 @@ STDMETHODIMP Guest::SetProcessInput(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, rc = it->second.pProgress->WaitForCompletion(aTimeoutMS); if (FAILED(rc)) throw rc; - /* Was the operation canceled by one of the parties? */ - rc = it->second.pProgress->COMGETTER(Canceled)(&fCanceled); - if (FAILED(rc)) throw rc; - - if (!fCanceled) + /* Was the call completed within time? */ + LONG uResult; + if ( SUCCEEDED(it->second.pProgress->COMGETTER(ResultCode)(&uResult)) + && uResult == S_OK) { - BOOL fCompleted; - if ( SUCCEEDED(it->second.pProgress->COMGETTER(Completed)(&fCompleted)) - && fCompleted) - { - PCALLBACKDATAEXECINSTATUS pStatusData = (PCALLBACKDATAEXECINSTATUS)it->second.pvData; - Assert(it->second.cbData == sizeof(CALLBACKDATAEXECINSTATUS)); - AssertPtr(pStatusData); + PCALLBACKDATAEXECINSTATUS pStatusData = (PCALLBACKDATAEXECINSTATUS)it->second.pvData; + AssertPtr(pStatusData); + Assert(it->second.cbData == sizeof(CALLBACKDATAEXECINSTATUS)); - *aBytesWritten = pStatusData->cbProcessed; - } + *aBytesWritten = pStatusData->cbProcessed; } - else /* Operation was canceled. */ - vrc = VERR_CANCELLED; - - if (RT_FAILURE(vrc)) + else if ( SUCCEEDED(it->second.pProgress->COMGETTER(Canceled)(&fCanceled)) + && fCanceled) { - if (vrc == VERR_CANCELLED) - { - rc = setError(VBOX_E_IPRT_ERROR, - tr("The input operation was canceled")); - } - else - { - rc = setError(E_UNEXPECTED, - tr("The service call failed with error %Rrc"), vrc); - } + rc = setError(VBOX_E_IPRT_ERROR, + tr("The input operation was canceled by the guest")); } + else + rc = setError(VBOX_E_IPRT_ERROR, + tr("The input operation was not acknowledged from guest within time (%ums)"), aTimeoutMS); { AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); - /* - * Destroy locally used progress object. - */ + /* Destroy locally used progress object. */ destroyCtrlCallbackContext(it); } - - /* Remove callback context (not used anymore). */ - mCallbackMap.erase(it); } else /* PID lookup failed. */ rc = setError(VBOX_E_IPRT_ERROR, - tr("Process (PID %u) not found!"), aPID); + tr("Process (PID %u) not found"), aPID); } else /* HGCM operation failed. */ rc = setError(E_UNEXPECTED, - tr("The HGCM call failed with error %Rrc"), vrc); + tr("The HGCM call failed (%Rrc)"), vrc); /* Cleanup. */ - progress->uninit(); - progress.setNull(); + if (!pProgress.isNull()) + pProgress->uninit(); + pProgress.setNull(); } } catch (std::bad_alloc &) @@ -1937,7 +2024,7 @@ STDMETHODIMP Guest::GetProcessOutput(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, { rc = progress->init(static_cast<IGuest*>(this), Bstr(tr("Getting output of process")).raw(), - TRUE); + TRUE /* Cancelable */); } if (FAILED(rc)) return rc; @@ -2035,7 +2122,11 @@ STDMETHODIMP Guest::GetProcessOutput(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, outputData.resize(pData->cbData); /* Shrink to fit actual buffer size. */ } else - vrc = VERR_NO_DATA; /* This is not an error we want to report to COM. */ + { + /* No data within specified timeout available. Use a special + * error so that we can gently handle that case a bit below. */ + vrc = VERR_NO_DATA; + } } else /* If callback not called within time ... well, that's a timeout! */ vrc = VERR_TIMEOUT; @@ -2049,7 +2140,8 @@ STDMETHODIMP Guest::GetProcessOutput(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, { if (vrc == VERR_NO_DATA) { - /* This is not an error we want to report to COM. */ + /* If there was no output data then this is no error we want + * to report to COM. The caller just gets back a size of 0 (zero). */ rc = S_OK; } else if (vrc == VERR_TIMEOUT) @@ -2071,14 +2163,9 @@ STDMETHODIMP Guest::GetProcessOutput(ULONG aPID, ULONG aFlags, ULONG aTimeoutMS, { AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); - /* - * Destroy locally used progress object. - */ + /* Destroy locally used progress object. */ destroyCtrlCallbackContext(it); } - - /* Remove callback context (not used anymore). */ - mCallbackMap.erase(it); } else /* PID lookup failed. */ rc = setError(VBOX_E_IPRT_ERROR, diff --git a/src/VBox/Main/GuestImpl.cpp b/src/VBox/Main/src-client/GuestImpl.cpp index b609195e2..49193daf1 100644 --- a/src/VBox/Main/GuestImpl.cpp +++ b/src/VBox/Main/src-client/GuestImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: GuestImpl.cpp 35170 2010-12-16 10:40:53Z vboxsync $ */ +/* $Id: GuestImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox COM class implementation: Guest */ @@ -31,7 +31,7 @@ # include <VBox/com/ErrorInfo.h> #endif #include <iprt/cpp/utils.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pgm.h> // defines ///////////////////////////////////////////////////////////////////////////// diff --git a/src/VBox/Main/hgcm/HGCM.cpp b/src/VBox/Main/src-client/HGCM.cpp index d98d8a824..c5be8f1b0 100644 --- a/src/VBox/Main/hgcm/HGCM.cpp +++ b/src/VBox/Main/src-client/HGCM.cpp @@ -18,11 +18,13 @@ #define LOG_GROUP_MAIN_OVERRIDE LOG_GROUP_HGCM #include "Logging.h" -#include "hgcm/HGCM.h" -#include "hgcm/HGCMThread.h" +#include "HGCM.h" +#include "HGCMThread.h" #include <VBox/err.h> #include <VBox/hgcmsvc.h> +#include <VBox/vmm/ssm.h> +#include <VBox/sup.h> #include <iprt/alloc.h> #include <iprt/alloca.h> diff --git a/src/VBox/Main/hgcm/HGCMObjects.cpp b/src/VBox/Main/src-client/HGCMObjects.cpp index c3cb3b2ae..c4e01791e 100644 --- a/src/VBox/Main/hgcm/HGCMObjects.cpp +++ b/src/VBox/Main/src-client/HGCMObjects.cpp @@ -1,11 +1,10 @@ +/* $Id: HGCMObjects.cpp 35374 2010-12-30 14:42:15Z vboxsync $ */ /** @file - * - * HGCM (Host-Guest Communication Manager): * HGCMObjects - Host-Guest Communication Manager objects */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2010 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -19,10 +18,9 @@ #define LOG_GROUP_MAIN_OVERRIDE LOG_GROUP_HGCM #include "Logging.h" -#include "hgcm/HGCMObjects.h" - -#include <string.h> +#include "HGCMObjects.h" +#include <iprt/string.h> #include <VBox/err.h> diff --git a/src/VBox/Main/hgcm/HGCMThread.cpp b/src/VBox/Main/src-client/HGCMThread.cpp index 004e11f81..6a25e5c07 100644 --- a/src/VBox/Main/hgcm/HGCMThread.cpp +++ b/src/VBox/Main/src-client/HGCMThread.cpp @@ -1,6 +1,5 @@ +/* $Id: HGCMThread.cpp 35374 2010-12-30 14:42:15Z vboxsync $ */ /** @file - * - * HGCM (Host-Guest Communication Manager): * HGCMThread - Host-Guest Communication Manager Threads */ @@ -19,7 +18,7 @@ #define LOG_GROUP_MAIN_OVERRIDE LOG_GROUP_HGCM #include "Logging.h" -#include "hgcm/HGCMThread.h" +#include "HGCMThread.h" #include <VBox/err.h> #include <iprt/semaphore.h> diff --git a/src/VBox/Main/KeyboardImpl.cpp b/src/VBox/Main/src-client/KeyboardImpl.cpp index 00c21715f..4e9beb6cf 100644 --- a/src/VBox/Main/KeyboardImpl.cpp +++ b/src/VBox/Main/src-client/KeyboardImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: KeyboardImpl.cpp 34396 2010-11-26 14:36:14Z vboxsync $ */ +/* $Id: KeyboardImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ @@ -22,7 +22,7 @@ #include "Logging.h" #include <VBox/com/array.h> -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <iprt/asm.h> #include <iprt/cpp/utils.h> diff --git a/src/VBox/Main/MachineDebuggerImpl.cpp b/src/VBox/Main/src-client/MachineDebuggerImpl.cpp index 48e7fc7a2..fd16d1f11 100644 --- a/src/VBox/Main/MachineDebuggerImpl.cpp +++ b/src/VBox/Main/src-client/MachineDebuggerImpl.cpp @@ -1,12 +1,10 @@ -/* $Id: MachineDebuggerImpl.cpp 35250 2010-12-20 16:10:30Z vboxsync $ */ - +/* $Id: MachineDebuggerImpl.cpp 35586 2011-01-17 14:20:59Z vboxsync $ */ /** @file - * - * VirtualBox COM class implementation + * VBox IMachineDebugger COM class implementation. */ /* - * Copyright (C) 2006-2008 Oracle Corporation + * Copyright (C) 2006-2010 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -25,13 +23,13 @@ #include "AutoCaller.h" #include "Logging.h" -#include <VBox/em.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/vm.h> -#include <VBox/tm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/hwaccm.h> #include <VBox/err.h> -#include <VBox/hwaccm.h> #include <iprt/cpp/utils.h> // defines @@ -545,12 +543,76 @@ STDMETHODIMP MachineDebugger::COMGETTER(HWVirtExVPIDEnabled) (BOOL *aEnabled) STDMETHODIMP MachineDebugger::COMGETTER(OSName)(BSTR *a_pbstrName) { - ReturnComNotImplemented(); + LogFlowThisFunc(("\n")); + CheckComArgNotNull(a_pbstrName); + AutoCaller autoCaller(this); + HRESULT hrc = autoCaller.rc(); + if (SUCCEEDED(hrc)) + { + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + Console::SafeVMPtr ptrVM(mParent); + hrc = ptrVM.rc(); + if (SUCCEEDED(hrc)) + { + /* + * Do the job and try convert the name. + */ + char szName[64]; + int vrc = DBGFR3OSQueryNameAndVersion(ptrVM.raw(), szName, sizeof(szName), NULL, 0); + if (RT_SUCCESS(vrc)) + { + try + { + Bstr bstrName(szName); + bstrName.detachTo(a_pbstrName); + } + catch (std::bad_alloc) + { + hrc = E_OUTOFMEMORY; + } + } + else + hrc = setError(VBOX_E_VM_ERROR, tr("DBGFR3OSQueryNameAndVersion failed with %Rrc"), vrc); + } + } + return hrc; } STDMETHODIMP MachineDebugger::COMGETTER(OSVersion)(BSTR *a_pbstrVersion) { - ReturnComNotImplemented(); + LogFlowThisFunc(("\n")); + CheckComArgNotNull(a_pbstrVersion); + AutoCaller autoCaller(this); + HRESULT hrc = autoCaller.rc(); + if (SUCCEEDED(hrc)) + { + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + Console::SafeVMPtr ptrVM(mParent); + hrc = ptrVM.rc(); + if (SUCCEEDED(hrc)) + { + /* + * Do the job and try convert the name. + */ + char szVersion[256]; + int vrc = DBGFR3OSQueryNameAndVersion(ptrVM.raw(), NULL, 0, szVersion, sizeof(szVersion)); + if (RT_SUCCESS(vrc)) + { + try + { + Bstr bstrVersion(szVersion); + bstrVersion.detachTo(a_pbstrVersion); + } + catch (std::bad_alloc) + { + hrc = E_OUTOFMEMORY; + } + } + else + hrc = setError(VBOX_E_VM_ERROR, tr("DBGFR3OSQueryNameAndVersion failed with %Rrc"), vrc); + } + } + return hrc; } /** @@ -707,9 +769,177 @@ STDMETHODIMP MachineDebugger::DumpHostProcessCore(IN_BSTR a_bstrFilename, IN_BST ReturnComNotImplemented(); } +/** + * Debug info string buffer formatter. + */ +typedef struct MACHINEDEBUGGERINOFHLP +{ + /** The core info helper structure. */ + DBGFINFOHLP Core; + /** Pointer to the buffer. */ + char *pszBuf; + /** The size of the buffer. */ + size_t cbBuf; + /** The offset into the buffer */ + size_t offBuf; + /** Indicates an out-of-memory condition. */ + bool fOutOfMemory; +} MACHINEDEBUGGERINOFHLP; +/** Pointer to a Debug info string buffer formatter. */ +typedef MACHINEDEBUGGERINOFHLP *PMACHINEDEBUGGERINOFHLP; + + +/** + * @callback_method_impl{FNRTSTROUTPUT} + */ +static DECLCALLBACK(size_t) MachineDebuggerInfoOutput(void *pvArg, const char *pachChars, size_t cbChars) +{ + PMACHINEDEBUGGERINOFHLP pHlp = (PMACHINEDEBUGGERINOFHLP)pvArg; + + /* + * Grow the buffer if required. + */ + size_t const cbRequired = cbChars + pHlp->offBuf + 1; + if (cbRequired > pHlp->cbBuf) + { + if (RT_UNLIKELY(pHlp->fOutOfMemory)) + return 0; + + size_t cbBufNew = pHlp->cbBuf * 2; + if (cbRequired > cbBufNew) + cbBufNew = RT_ALIGN_Z(cbRequired, 256); + void *pvBufNew = RTMemRealloc(pHlp->pszBuf, cbBufNew); + if (RT_UNLIKELY(!pvBufNew)) + { + pHlp->fOutOfMemory = true; + RTMemFree(pHlp->pszBuf); + pHlp->pszBuf = NULL; + pHlp->cbBuf = 0; + pHlp->offBuf = 0; + return 0; + } + + pHlp->pszBuf = (char *)pvBufNew; + pHlp->cbBuf = cbBufNew; + } + + /* + * Copy the bytes into the buffer and terminate it. + */ + memcpy(&pHlp->pszBuf[pHlp->offBuf], pachChars, cbChars); + pHlp->offBuf += cbChars; + pHlp->pszBuf[pHlp->offBuf] = '\0'; + Assert(pHlp->offBuf < pHlp->cbBuf); + return cbChars; +} + +/** + * @interface_method_impl{DBGFINFOHLP, pfnPrintfV} + */ +static DECLCALLBACK(void) MachineDebuggerInfoPrintfV(PCDBGFINFOHLP pHlp, const char *pszFormat, va_list va) +{ + RTStrFormatV(MachineDebuggerInfoOutput, (void *)pHlp, NULL, NULL, pszFormat, va); +} + +/** + * @interface_method_impl{DBGFINFOHLP, pfnPrintf} + */ +static DECLCALLBACK(void) MachineDebuggerInfoPrintf(PCDBGFINFOHLP pHlp, const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + MachineDebuggerInfoPrintfV(pHlp, pszFormat, va); + va_end(va); +} + +/** + * Initializes the debug info string buffer formatter + * + * @param pHlp The help structure to init. + */ +static void MachineDebuggerInfoInit(PMACHINEDEBUGGERINOFHLP pHlp) +{ + pHlp->Core.pfnPrintf = MachineDebuggerInfoPrintf; + pHlp->Core.pfnPrintfV = MachineDebuggerInfoPrintfV; + pHlp->pszBuf = NULL; + pHlp->cbBuf = 0; + pHlp->offBuf = 0; + pHlp->fOutOfMemory = false; +} + +/** + * Deletes the debug info string buffer formatter. + * @param pHlp The helper structure to delete. + */ +static void MachineDebuggerInfoDelete(PMACHINEDEBUGGERINOFHLP pHlp) +{ + RTMemFree(pHlp->pszBuf); + pHlp->pszBuf = NULL; +} + STDMETHODIMP MachineDebugger::Info(IN_BSTR a_bstrName, IN_BSTR a_bstrArgs, BSTR *a_pbstrInfo) { - ReturnComNotImplemented(); + LogFlowThisFunc(("\n")); + + /* + * Validate and convert input. + */ + CheckComArgStrNotEmptyOrNull(a_bstrName); + Utf8Str strName, strArgs; + try + { + strName = a_bstrName; + strArgs = a_bstrArgs; + } + catch (std::bad_alloc) + { + return E_OUTOFMEMORY; + } + + /* + * Do the autocaller and lock bits. + */ + AutoCaller autoCaller(this); + HRESULT hrc = autoCaller.rc(); + if (SUCCEEDED(hrc)) + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + Console::SafeVMPtr ptrVM(mParent); + hrc = ptrVM.rc(); + if (SUCCEEDED(hrc)) + { + /* + * Create a helper and call DBGFR3Info. + */ + MACHINEDEBUGGERINOFHLP Hlp; + MachineDebuggerInfoInit(&Hlp); + int vrc = DBGFR3Info(ptrVM.raw(), strName.c_str(), strArgs.c_str(), &Hlp.Core); + if (RT_SUCCESS(vrc)) + { + if (!Hlp.fOutOfMemory) + { + /* + * Convert the info string, watching out for allocation errors. + */ + try + { + Bstr bstrInfo(Hlp.pszBuf); + bstrInfo.detachTo(a_pbstrInfo); + } + catch (std::bad_alloc) + { + hrc = E_OUTOFMEMORY; + } + } + else + hrc = E_OUTOFMEMORY; + } + else + hrc = setError(VBOX_E_VM_ERROR, tr("DBGFR3Info failed with %Rrc"), vrc); + MachineDebuggerInfoDelete(&Hlp); + } + } + return hrc; } STDMETHODIMP MachineDebugger::InjectNMI() @@ -772,17 +1002,197 @@ STDMETHODIMP MachineDebugger::WriteVirtualMemory(ULONG a_idCpu, LONG64 a_Address STDMETHODIMP MachineDebugger::DetectOS(BSTR *a_pbstrName) { - ReturnComNotImplemented(); + LogFlowThisFunc(("\n")); + CheckComArgNotNull(a_pbstrName); + + /* + * Do the autocaller and lock bits. + */ + AutoCaller autoCaller(this); + HRESULT hrc = autoCaller.rc(); + if (SUCCEEDED(hrc)) + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + Console::SafeVMPtr ptrVM(mParent); + hrc = ptrVM.rc(); + if (SUCCEEDED(hrc)) + { + /* + * Do the job and try convert the name. + */ +/** @todo automatically load the DBGC plugins or this is a waste of time. */ + char szName[64]; + int vrc = DBGFR3OSDetect(ptrVM.raw(), szName, sizeof(szName)); + if (RT_SUCCESS(vrc) && vrc != VINF_DBGF_OS_NOT_DETCTED) + { + try + { + Bstr bstrName(szName); + bstrName.detachTo(a_pbstrName); + } + catch (std::bad_alloc) + { + hrc = E_OUTOFMEMORY; + } + } + else + hrc = setError(VBOX_E_VM_ERROR, tr("DBGFR3OSDetect failed with %Rrc"), vrc); + } + } + return hrc; +} + +/** + * Formats a register value. + * + * This is used by both register getter methods. + * + * @returns + * @param a_pbstr The output Bstr variable. + * @param a_pValue The value to format. + * @param a_enmType The type of the value. + */ +DECLINLINE(HRESULT) formatRegisterValue(Bstr *a_pbstr, PCDBGFREGVAL a_pValue, DBGFREGVALTYPE a_enmType) +{ + char szHex[160]; + ssize_t cch = DBGFR3RegFormatValue(szHex, sizeof(szHex), a_pValue, a_enmType, true /*fSpecial*/); + if (RT_UNLIKELY(cch <= 0)) + return E_UNEXPECTED; + *a_pbstr = szHex; + return S_OK; } STDMETHODIMP MachineDebugger::GetRegister(ULONG a_idCpu, IN_BSTR a_bstrName, BSTR *a_pbstrValue) { - ReturnComNotImplemented(); + /* + * Validate and convert input. + */ + CheckComArgStrNotEmptyOrNull(a_bstrName); + CheckComArgNotNull(a_pbstrValue); + Utf8Str strName; + try + { + strName = a_bstrName; + } + catch (std::bad_alloc) + { + return E_OUTOFMEMORY; + } + + /* + * The prologue. + */ + LogFlowThisFunc(("\n")); + AutoCaller autoCaller(this); + HRESULT hrc = autoCaller.rc(); + if (SUCCEEDED(hrc)) + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + Console::SafeVMPtr ptrVM(mParent); + hrc = ptrVM.rc(); + if (SUCCEEDED(hrc)) + { + /* + * Real work. + */ + DBGFREGVAL Value; + DBGFREGVALTYPE enmType; + int vrc = DBGFR3RegNmQuery(ptrVM.raw(), a_idCpu, strName.c_str(), &Value, &enmType); + if (RT_SUCCESS(vrc)) + { + try + { + Bstr bstrValue; + hrc = formatRegisterValue(&bstrValue, &Value, enmType); + if (SUCCEEDED(hrc)) + bstrValue.detachTo(a_pbstrValue); + } + catch (std::bad_alloc) + { + hrc = E_OUTOFMEMORY; + } + } + else if (vrc == VERR_DBGF_REGISTER_NOT_FOUND) + hrc = setError(E_FAIL, tr("Register '%s' was not found"), strName.c_str()); + else if (vrc == VERR_INVALID_CPU_ID) + hrc = setError(E_FAIL, tr("Invalid CPU ID: %u"), a_idCpu); + else + hrc = setError(VBOX_E_VM_ERROR, + tr("DBGFR3RegNmQuery failed with rc=%Rrc querying register '%s' with default cpu set to %u"), + vrc, strName.c_str(), a_idCpu); + } + } + + return hrc; } STDMETHODIMP MachineDebugger::GetRegisters(ULONG a_idCpu, ComSafeArrayOut(BSTR, a_bstrNames), ComSafeArrayOut(BSTR, a_bstrValues)) { - ReturnComNotImplemented(); + /* + * The prologue. + */ + LogFlowThisFunc(("\n")); + AutoCaller autoCaller(this); + HRESULT hrc = autoCaller.rc(); + if (SUCCEEDED(hrc)) + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + Console::SafeVMPtr ptrVM(mParent); + hrc = ptrVM.rc(); + if (SUCCEEDED(hrc)) + { + /* + * Real work. + */ + size_t cRegs; + int vrc = DBGFR3RegNmQueryAllCount(ptrVM.raw(), &cRegs); + if (RT_SUCCESS(vrc)) + { + PDBGFREGENTRYNM paRegs = (PDBGFREGENTRYNM)RTMemAllocZ(sizeof(paRegs[0]) * cRegs); + if (paRegs) + { + vrc = DBGFR3RegNmQueryAll(ptrVM.raw(), paRegs, cRegs); + if (RT_SUCCESS(vrc)) + { + try + { + com::SafeArray<BSTR> abstrNames(cRegs); + com::SafeArray<BSTR> abstrValues(cRegs); + + for (uint32_t iReg = 0; iReg < cRegs; iReg++) + { + char szHex[128]; + Bstr bstrValue; + + hrc = formatRegisterValue(&bstrValue, &paRegs[iReg].Val, paRegs[iReg].enmType); + AssertComRC(hrc); + bstrValue.detachTo(&abstrValues[iReg]); + + Bstr bstrName(paRegs[iReg].pszName); + bstrName.detachTo(&abstrNames[iReg]); + } + + abstrNames.detachTo(ComSafeArrayOutArg(a_bstrNames)); + abstrValues.detachTo(ComSafeArrayOutArg(a_bstrValues)); + } + catch (std::bad_alloc) + { + hrc = E_OUTOFMEMORY; + } + } + else + hrc = setError(E_FAIL, tr("DBGFR3RegNmQueryAll failed with %Rrc"), vrc); + + RTMemFree(paRegs); + } + else + hrc = E_OUTOFMEMORY; + } + else + hrc = setError(E_FAIL, tr("DBGFR3RegNmQueryAllCount failed with %Rrc"), vrc); + } + } + return hrc; } STDMETHODIMP MachineDebugger::SetRegister(ULONG a_idCpu, IN_BSTR a_bstrName, IN_BSTR a_bstrValue) diff --git a/src/VBox/Main/hgcm/Makefile.kup b/src/VBox/Main/src-client/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/Main/hgcm/Makefile.kup +++ b/src/VBox/Main/src-client/Makefile.kup diff --git a/src/VBox/Main/MouseImpl.cpp b/src/VBox/Main/src-client/MouseImpl.cpp index 374abd080..41e4a359d 100644 --- a/src/VBox/Main/MouseImpl.cpp +++ b/src/VBox/Main/src-client/MouseImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: MouseImpl.cpp 35212 2010-12-16 23:15:43Z vboxsync $ */ +/* $Id: MouseImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ @@ -24,7 +24,7 @@ #include "AutoCaller.h" #include "Logging.h" -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <VBox/VMMDev.h> #include <iprt/asm.h> diff --git a/src/VBox/Main/RemoteUSBBackend.cpp b/src/VBox/Main/src-client/RemoteUSBBackend.cpp index ed0bf7f56..ed0bf7f56 100644 --- a/src/VBox/Main/RemoteUSBBackend.cpp +++ b/src/VBox/Main/src-client/RemoteUSBBackend.cpp diff --git a/src/VBox/Main/RemoteUSBDeviceImpl.cpp b/src/VBox/Main/src-client/RemoteUSBDeviceImpl.cpp index ee6496707..c703534ba 100644 --- a/src/VBox/Main/RemoteUSBDeviceImpl.cpp +++ b/src/VBox/Main/src-client/RemoteUSBDeviceImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: RemoteUSBDeviceImpl.cpp 33004 2010-10-08 10:23:59Z vboxsync $ */ +/* $Id: RemoteUSBDeviceImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/SessionImpl.cpp b/src/VBox/Main/src-client/SessionImpl.cpp index e419d4c87..37eee698a 100644 --- a/src/VBox/Main/SessionImpl.cpp +++ b/src/VBox/Main/src-client/SessionImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: SessionImpl.cpp 34587 2010-12-01 20:30:02Z vboxsync $ */ +/* $Id: SessionImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VBox Client Session COM Class implementation in VBoxC. */ diff --git a/src/VBox/Main/USBDeviceImpl.cpp b/src/VBox/Main/src-client/USBDeviceImpl.cpp index 32f63d03c..a2a83dd23 100644 --- a/src/VBox/Main/USBDeviceImpl.cpp +++ b/src/VBox/Main/src-client/USBDeviceImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: USBDeviceImpl.cpp 30681 2010-07-06 17:20:20Z vboxsync $ */ +/* $Id: USBDeviceImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ diff --git a/src/VBox/Main/VBoxDriversRegister.cpp b/src/VBox/Main/src-client/VBoxDriversRegister.cpp index 209ceb538..0edc3be88 100644 --- a/src/VBox/Main/VBoxDriversRegister.cpp +++ b/src/VBox/Main/src-client/VBoxDriversRegister.cpp @@ -28,7 +28,7 @@ #include "Logging.h" -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <VBox/version.h> /** diff --git a/src/VBox/Main/VMMDevInterface.cpp b/src/VBox/Main/src-client/VMMDevInterface.cpp index 8e3d2c975..82a0ef1d7 100644 --- a/src/VBox/Main/VMMDevInterface.cpp +++ b/src/VBox/Main/src-client/VMMDevInterface.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMDevInterface.cpp 33758 2010-11-04 10:30:19Z vboxsync $ */ +/* $Id: VMMDevInterface.cpp 35374 2010-12-30 14:42:15Z vboxsync $ */ /** @file * VirtualBox Driver Interface to VMM device. */ @@ -23,14 +23,14 @@ #include "Logging.h" -#include <VBox/pdmdrv.h> +#include <VBox/vmm/pdmdrv.h> #include <VBox/VMMDev.h> #include <VBox/shflsvc.h> #include <iprt/asm.h> #ifdef VBOX_WITH_HGCM -#include "hgcm/HGCM.h" -#include "hgcm/HGCMObjects.h" +# include "HGCM.h" +# include "HGCMObjects.h" # if defined(RT_OS_DARWIN) && defined(VBOX_WITH_CROGL) # include <VBox/HostServices/VBoxCrOpenGLSvc.h> # endif @@ -465,37 +465,9 @@ DECLCALLBACK(int) vmmdevSetVisibleRegion(PPDMIVMMDEVCONNECTOR pInterface, uint32 if (!cRect) return VERR_INVALID_PARAMETER; -#ifdef MMSEAMLESS + /* Forward to Display, which calls corresponding framebuffers. */ pConsole->getDisplay()->handleSetVisibleRegion(cRect, pRect); -#else - IFramebuffer *framebuffer = pConsole->getDisplay()->getFramebuffer(); - if (framebuffer) - { - framebuffer->SetVisibleRegion((BYTE *)pRect, cRect); -#if defined(RT_OS_DARWIN) && defined(VBOX_WITH_HGCM) && defined(VBOX_WITH_CROGL) - { - BOOL is3denabled; - - pConsole->machine()->COMGETTER(Accelerate3DEnabled)(&is3denabled); - - if (is3denabled) - { - VBOXHGCMSVCPARM parms[2]; - - parms[0].type = VBOX_HGCM_SVC_PARM_PTR; - parms[0].u.pointer.addr = pRect; - parms[0].u.pointer.size = 0; /* We don't actually care. */ - parms[1].type = VBOX_HGCM_SVC_PARM_32BIT; - parms[1].u.uint32 = cRect; - - if (pDrv->pVMMDev) - return pDrv->pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_SET_VISIBLE_REGION, 2, &parms[0]); - } - } -#endif - } -#endif return VINF_SUCCESS; } @@ -505,19 +477,8 @@ DECLCALLBACK(int) vmmdevQueryVisibleRegion(PPDMIVMMDEVCONNECTOR pInterface, uint PDRVMAINVMMDEV pDrv = PDMIVMMDEVCONNECTOR_2_MAINVMMDEV(pInterface); Console *pConsole = pDrv->pVMMDev->getParent(); -#ifdef MMSEAMLESS /* Forward to Display, which calls corresponding framebuffers. */ pConsole->getDisplay()->handleQueryVisibleRegion(pcRect, pRect); -#else - IFramebuffer *framebuffer = pConsole->getDisplay()->getFramebuffer(); - if (framebuffer) - { - ULONG cRect = 0; - framebuffer->GetVisibleRegion((BYTE *)pRect, cRect, &cRect); - - *pcRect = cRect; - } -#endif return VINF_SUCCESS; } diff --git a/src/VBox/Main/VirtualBoxClientImpl.cpp b/src/VBox/Main/src-client/VirtualBoxClientImpl.cpp index 2e5541735..db441c197 100644 --- a/src/VBox/Main/VirtualBoxClientImpl.cpp +++ b/src/VBox/Main/src-client/VirtualBoxClientImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: VirtualBoxClientImpl.cpp 35172 2010-12-16 11:54:36Z vboxsync $ */ +/* $Id: VirtualBoxClientImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ diff --git a/src/VBox/Main/linux/Makefile.kup b/src/VBox/Main/src-client/win/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/Main/linux/Makefile.kup +++ b/src/VBox/Main/src-client/win/Makefile.kup diff --git a/src/VBox/Main/win/VBoxC.def b/src/VBox/Main/src-client/win/VBoxC.def index 360d0f8e3..360d0f8e3 100644 --- a/src/VBox/Main/win/VBoxC.def +++ b/src/VBox/Main/src-client/win/VBoxC.def diff --git a/src/VBox/Main/win/VBoxC.rc b/src/VBox/Main/src-client/win/VBoxC.rc index 08e48c48a..3a6602cc5 100644 --- a/src/VBox/Main/win/VBoxC.rc +++ b/src/VBox/Main/src-client/win/VBoxC.rc @@ -1,4 +1,4 @@ -/* $Id: VBoxC.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: VBoxC.rc 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VBoxC - Resource file containing version info and icon. */ @@ -18,7 +18,7 @@ #include <windows.h> #include <VBox/version.h> -#include "resource.h" +#include "win/resource.h" VS_VERSION_INFO VERSIONINFO FILEVERSION VBOX_VERSION_MAJOR_NR,VBOX_VERSION_MINOR_NR,VBOX_VERSION_BUILD_NR,0 diff --git a/src/VBox/Main/win/dllmain.cpp b/src/VBox/Main/src-client/win/dllmain.cpp index 7d0e8c85f..7d0e8c85f 100644 --- a/src/VBox/Main/win/dllmain.cpp +++ b/src/VBox/Main/src-client/win/dllmain.cpp diff --git a/src/VBox/Main/win/Makefile.kup b/src/VBox/Main/src-client/xpcom/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/Main/win/Makefile.kup +++ b/src/VBox/Main/src-client/xpcom/Makefile.kup diff --git a/src/VBox/Main/xpcom/module.cpp b/src/VBox/Main/src-client/xpcom/module.cpp index 3d6e59466..3d6e59466 100644 --- a/src/VBox/Main/xpcom/module.cpp +++ b/src/VBox/Main/src-client/xpcom/module.cpp diff --git a/src/VBox/Main/xpcom/Makefile.kup b/src/VBox/Main/src-helper-apps/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/Main/xpcom/Makefile.kup +++ b/src/VBox/Main/src-helper-apps/Makefile.kup diff --git a/src/VBox/Main/VBoxExtPackHelperApp.cpp b/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.cpp index 482b8c892..a17684bc9 100644 --- a/src/VBox/Main/VBoxExtPackHelperApp.cpp +++ b/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxExtPackHelperApp.cpp 35279 2010-12-21 16:44:39Z vboxsync $ */ +/* $Id: VBoxExtPackHelperApp.cpp 35542 2011-01-13 15:42:16Z vboxsync $ */ /** @file * VirtualBox Main - Extension Pack Helper Application, usually set-uid-to-root. */ @@ -19,7 +19,7 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include "include/ExtPackUtil.h" +#include "../include/ExtPackUtil.h" #include <iprt/buildconfig.h> #include <iprt/dir.h> @@ -1204,7 +1204,6 @@ static RTEXITCODE RelaunchElevatedNative(const char *pszExecPath, const char **p Info.hMonitor = NULL; Info.hProcess = INVALID_HANDLE_VALUE; -#if 0 /* This deadlocks with the GUI because the GUI thread is stuck in the API call :/ */ /* Apply display hacks. */ if (pszDisplayInfoHack) { @@ -1228,7 +1227,6 @@ static RTEXITCODE RelaunchElevatedNative(const char *pszExecPath, const char **p } if (Info.hMonitor != NULL) Info.fMask |= SEE_MASK_HMONITOR; - #endif if (ShellExecuteExW(&Info)) { @@ -1856,7 +1854,35 @@ extern "C" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPST { g_hInstance = hInstance; NOREF(hPrevInstance); NOREF(nShowCmd); NOREF(lpCmdLine); - return main(__argc, __argv); + + int rc = RTR3Init(); + if (RT_FAILURE(rc)) + return RTMsgInitFailure(rc); + + LPWSTR pwszCmdLine = GetCommandLineW(); + if (!pwszCmdLine) + return RTMsgErrorExit(RTEXITCODE_FAILURE, "GetCommandLineW failed"); + + char *pszCmdLine; + rc = RTUtf16ToUtf8(pwszCmdLine, &pszCmdLine); /* leaked */ + if (RT_FAILURE(rc)) + return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to convert the command line: %Rrc", rc); + + int cArgs; + char **papszArgs; + rc = RTGetOptArgvFromString(&papszArgs, &cArgs, pszCmdLine, NULL); + if (RT_SUCCESS(rc)) + { + + rc = main(cArgs, papszArgs); + + RTGetOptArgvFree(papszArgs); + } + else + rc = RTMsgErrorExit(RTEXITCODE_FAILURE, "RTGetOptArgvFromString failed: %Rrc", rc); + RTStrFree(pszCmdLine); + + return rc; } #endif diff --git a/src/VBox/Main/ApplianceImpl.cpp b/src/VBox/Main/src-server/ApplianceImpl.cpp index e658b0a3c..b934f41ea 100644 --- a/src/VBox/Main/ApplianceImpl.cpp +++ b/src/VBox/Main/src-server/ApplianceImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: ApplianceImpl.cpp 35284 2010-12-21 20:49:53Z vboxsync $ */ +/* $Id: ApplianceImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * * IAppliance and IVirtualSystem COM class implementations. diff --git a/src/VBox/Main/ApplianceImplExport.cpp b/src/VBox/Main/src-server/ApplianceImplExport.cpp index 25147f115..66606a5d7 100644 --- a/src/VBox/Main/ApplianceImplExport.cpp +++ b/src/VBox/Main/src-server/ApplianceImplExport.cpp @@ -1,4 +1,4 @@ -/* $Id: ApplianceImplExport.cpp 35284 2010-12-21 20:49:53Z vboxsync $ */ +/* $Id: ApplianceImplExport.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * * IAppliance and IVirtualSystem COM class implementations. diff --git a/src/VBox/Main/ApplianceImplIO.cpp b/src/VBox/Main/src-server/ApplianceImplIO.cpp index 34eb07c99..5e7a7de11 100644 --- a/src/VBox/Main/ApplianceImplIO.cpp +++ b/src/VBox/Main/src-server/ApplianceImplIO.cpp @@ -1,4 +1,4 @@ -/* $Id: ApplianceImplIO.cpp 34101 2010-11-16 10:56:43Z vboxsync $ */ +/* $Id: ApplianceImplIO.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * * IO helper for IAppliance COM class implementations. diff --git a/src/VBox/Main/ApplianceImplImport.cpp b/src/VBox/Main/src-server/ApplianceImplImport.cpp index eb7fee4f4..36f0ad888 100644 --- a/src/VBox/Main/ApplianceImplImport.cpp +++ b/src/VBox/Main/src-server/ApplianceImplImport.cpp @@ -1,4 +1,4 @@ -/* $Id: ApplianceImplImport.cpp 35284 2010-12-21 20:49:53Z vboxsync $ */ +/* $Id: ApplianceImplImport.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * * IAppliance and IVirtualSystem COM class implementations. diff --git a/src/VBox/Main/AudioAdapterImpl.cpp b/src/VBox/Main/src-server/AudioAdapterImpl.cpp index 02f5b69ed..02f5b69ed 100644 --- a/src/VBox/Main/AudioAdapterImpl.cpp +++ b/src/VBox/Main/src-server/AudioAdapterImpl.cpp diff --git a/src/VBox/Main/BIOSSettingsImpl.cpp b/src/VBox/Main/src-server/BIOSSettingsImpl.cpp index 1484cad89..1484cad89 100644 --- a/src/VBox/Main/BIOSSettingsImpl.cpp +++ b/src/VBox/Main/src-server/BIOSSettingsImpl.cpp diff --git a/src/VBox/Main/BandwidthControlImpl.cpp b/src/VBox/Main/src-server/BandwidthControlImpl.cpp index 18d42ad29..18d42ad29 100644 --- a/src/VBox/Main/BandwidthControlImpl.cpp +++ b/src/VBox/Main/src-server/BandwidthControlImpl.cpp diff --git a/src/VBox/Main/BandwidthGroupImpl.cpp b/src/VBox/Main/src-server/BandwidthGroupImpl.cpp index 88725d7fb..88725d7fb 100644 --- a/src/VBox/Main/BandwidthGroupImpl.cpp +++ b/src/VBox/Main/src-server/BandwidthGroupImpl.cpp diff --git a/src/VBox/Main/DHCPServerImpl.cpp b/src/VBox/Main/src-server/DHCPServerImpl.cpp index 717ad8861..290705757 100644 --- a/src/VBox/Main/DHCPServerImpl.cpp +++ b/src/VBox/Main/src-server/DHCPServerImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: DHCPServerImpl.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DHCPServerImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/DHCPServerRunner.cpp b/src/VBox/Main/src-server/DHCPServerRunner.cpp index 3ab20a339..e1c5e8172 100644 --- a/src/VBox/Main/DHCPServerRunner.cpp +++ b/src/VBox/Main/src-server/DHCPServerRunner.cpp @@ -1,4 +1,4 @@ -/* $Id: DHCPServerRunner.cpp 33806 2010-11-05 17:20:15Z vboxsync $ */ +/* $Id: DHCPServerRunner.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox Main - interface for VBox DHCP server */ diff --git a/src/VBox/Main/GuestOSTypeImpl.cpp b/src/VBox/Main/src-server/GuestOSTypeImpl.cpp index 50f18fabd..50f18fabd 100644 --- a/src/VBox/Main/GuestOSTypeImpl.cpp +++ b/src/VBox/Main/src-server/GuestOSTypeImpl.cpp diff --git a/src/VBox/Main/HostImpl.cpp b/src/VBox/Main/src-server/HostImpl.cpp index 8c385595b..8885bf00a 100644 --- a/src/VBox/Main/HostImpl.cpp +++ b/src/VBox/Main/src-server/HostImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: HostImpl.cpp 33777 2010-11-04 15:20:35Z vboxsync $ */ +/* $Id: HostImpl.cpp 35429 2011-01-07 14:42:24Z vboxsync $ */ /** @file * VirtualBox COM class implementation: Host */ @@ -147,7 +147,7 @@ extern bool is3DAccelerationSupported(); #include <VBox/usb.h> #include <VBox/x86.h> -#include <VBox/hwacc_svm.h> +#include <VBox/vmm/hwacc_svm.h> #include <VBox/err.h> #include <VBox/settings.h> #include <VBox/sup.h> @@ -1683,10 +1683,10 @@ HRESULT Host::getDrives(DeviceType_T mediumType, * @param pMedium Medium object, if found… * @return VBOX_E_OBJECT_NOT_FOUND if not found, or S_OK if found, or errors from getDrives(). */ -HRESULT Host::findHostDrive(DeviceType_T mediumType, - const Guid &uuid, - bool fRefresh, - ComObjPtr<Medium> &pMedium) +HRESULT Host::findHostDriveById(DeviceType_T mediumType, + const Guid &uuid, + bool fRefresh, + ComObjPtr<Medium> &pMedium) { MediaList *pllMedia; @@ -1711,6 +1711,44 @@ HRESULT Host::findHostDrive(DeviceType_T mediumType, } /** + * Goes through the list of host drives that would be returned by getDrives() + * and looks for a host drive with the given name. If found, it sets pMedium + * to that drive; otherwise returns VBOX_E_OBJECT_NOT_FOUND. + * + * @param mediumType Must be DeviceType_DVD or DeviceType_Floppy. + * @param strLocationFull Name (path) of host drive to look for. + * @param fRefresh Whether to refresh the host drives list (see getDrives()) + * @param pMedium Medium object, if found… + * @return VBOX_E_OBJECT_NOT_FOUND if not found, or S_OK if found, or errors from getDrives(). + */ +HRESULT Host::findHostDriveByName(DeviceType_T mediumType, + const Utf8Str &strLocationFull, + bool fRefresh, + ComObjPtr<Medium> &pMedium) +{ + MediaList *pllMedia; + + AutoWriteLock wlock(m->drivesLock COMMA_LOCKVAL_SRC_POS); + HRESULT rc = getDrives(mediumType, fRefresh, pllMedia); + if (SUCCEEDED(rc)) + { + for (MediaList::iterator it = pllMedia->begin(); + it != pllMedia->end(); + ++it) + { + Medium *pThis = *it; + if (pThis->getLocationFull() == strLocationFull) + { + pMedium = pThis; + return S_OK; + } + } + } + + return VBOX_E_OBJECT_NOT_FOUND; +} + +/** * Called from getDrives() to build the DVD drives list. * @param pll * @return diff --git a/src/VBox/Main/HostNetworkInterfaceImpl.cpp b/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp index b0cce3872..bd56b5edf 100644 --- a/src/VBox/Main/HostNetworkInterfaceImpl.cpp +++ b/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: HostNetworkInterfaceImpl.cpp 32718 2010-09-23 12:57:52Z vboxsync $ */ +/* $Id: HostNetworkInterfaceImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/HostPower.cpp b/src/VBox/Main/src-server/HostPower.cpp index 981af22ed..981af22ed 100644 --- a/src/VBox/Main/HostPower.cpp +++ b/src/VBox/Main/src-server/HostPower.cpp diff --git a/src/VBox/Main/HostUSBDeviceImpl.cpp b/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp index 7a06f2372..6fd98ced8 100644 --- a/src/VBox/Main/HostUSBDeviceImpl.cpp +++ b/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: HostUSBDeviceImpl.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: HostUSBDeviceImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox IHostUSBDevice COM interface implementation. */ diff --git a/src/VBox/Main/MachineImpl.cpp b/src/VBox/Main/src-server/MachineImpl.cpp index b71c04d49..6cb37774f 100644 --- a/src/VBox/Main/MachineImpl.cpp +++ b/src/VBox/Main/src-server/MachineImpl.cpp @@ -1,10 +1,10 @@ -/* $Id: MachineImpl.cpp 35175 2010-12-16 12:36:00Z vboxsync $ */ +/* $Id: MachineImpl.cpp 35610 2011-01-18 14:24:36Z vboxsync $ */ /** @file * Implementation of IMachine in VBoxSVC. */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -72,7 +72,7 @@ #include <VBox/err.h> #include <VBox/param.h> #include <VBox/settings.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #ifdef VBOX_WITH_GUEST_PROPS # include <VBox/HostServices/GuestPropertySvc.h> @@ -7528,9 +7528,17 @@ HRESULT Machine::loadStorageDevices(StorageController *aStorageController, { case DeviceType_Floppy: case DeviceType_DVD: - rc = mParent->findRemoveableMedium(dev.deviceType, dev.uuid, false /* fRefresh */, medium); - if (FAILED(rc)) - return rc; + if (dev.strHostDriveSrc.isNotEmpty()) + rc = mParent->host()->findHostDriveByName(dev.deviceType, dev.strHostDriveSrc, false /* fRefresh */, medium); + else + rc = mParent->findRemoveableMedium(dev.deviceType, + dev.uuid, + false /* fRefresh */, + false /* aSetError */, + medium); + if (rc == VBOX_E_OBJECT_NOT_FOUND) + // This is not an error. The host drive or UUID might have vanished, so just go ahead without this removeable medium attachment + rc = S_OK; break; case DeviceType_HardDisk: @@ -10475,7 +10483,6 @@ STDMETHODIMP SessionMachine::BeginPowerUp(IProgress *aProgress) return S_OK; } - /** * @note Locks this object for writing. */ @@ -10511,6 +10518,94 @@ STDMETHODIMP SessionMachine::EndPowerUp(LONG iResult) } /** + * @note Locks this object for writing. + */ +STDMETHODIMP SessionMachine::BeginPoweringDown(IProgress **aProgress) +{ + LogFlowThisFuncEnter(); + + CheckComArgOutPointerValid(aProgress); + + AutoCaller autoCaller(this); + AssertComRCReturn(autoCaller.rc(), autoCaller.rc()); + + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + + AssertReturn(mConsoleTaskData.mLastState == MachineState_Null, + E_FAIL); + + /* create a progress object to track operation completion */ + ComObjPtr<Progress> pProgress; + pProgress.createObject(); + pProgress->init(getVirtualBox(), + static_cast<IMachine *>(this) /* aInitiator */, + Bstr(tr("Stopping the virtual machine")).raw(), + FALSE /* aCancelable */); + + /* fill in the console task data */ + mConsoleTaskData.mLastState = mData->mMachineState; + mConsoleTaskData.mProgress = pProgress; + + /* set the state to Stopping (this is expected by Console::PowerDown()) */ + setMachineState(MachineState_Stopping); + + pProgress.queryInterfaceTo(aProgress); + + return S_OK; +} + +/** + * @note Locks this object for writing. + */ +STDMETHODIMP SessionMachine::EndPoweringDown(LONG iResult, IN_BSTR aErrMsg) +{ + LogFlowThisFuncEnter(); + + AutoCaller autoCaller(this); + AssertComRCReturn(autoCaller.rc(), autoCaller.rc()); + + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + + AssertReturn( ( (SUCCEEDED(iResult) && mData->mMachineState == MachineState_PoweredOff) + || (FAILED(iResult) && mData->mMachineState == MachineState_Stopping)) + && mConsoleTaskData.mLastState != MachineState_Null, + E_FAIL); + + /* + * On failure, set the state to the state we had when BeginPoweringDown() + * was called (this is expected by Console::PowerDown() and the associated + * task). On success the VM process already changed the state to + * MachineState_PoweredOff, so no need to do anything. + */ + if (FAILED(iResult)) + setMachineState(mConsoleTaskData.mLastState); + + /* notify the progress object about operation completion */ + Assert(mConsoleTaskData.mProgress); + if (SUCCEEDED(iResult)) + mConsoleTaskData.mProgress->notifyComplete(S_OK); + else + { + Utf8Str strErrMsg(aErrMsg); + if (strErrMsg.length()) + mConsoleTaskData.mProgress->notifyComplete(iResult, + COM_IIDOF(ISession), + getComponentName(), + strErrMsg.c_str()); + else + mConsoleTaskData.mProgress->notifyComplete(iResult); + } + + /* clear out the temporary saved state data */ + mConsoleTaskData.mLastState = MachineState_Null; + mConsoleTaskData.mProgress.setNull(); + + LogFlowThisFuncLeave(); + return S_OK; +} + + +/** * Goes through the USB filters of the given machine to see if the given * device matches any filter or not. * @@ -10775,7 +10870,7 @@ STDMETHODIMP SessionMachine::BeginSavingState(IProgress **aProgress, BSTR *aStat mData->mUuid.raw()); } - /* fill in the snapshot data */ + /* fill in the console task data */ mConsoleTaskData.mLastState = mData->mMachineState; mConsoleTaskData.mStateFilePath = stateFilePath; mConsoleTaskData.mProgress = pProgress; @@ -11537,9 +11632,9 @@ HRESULT SessionMachine::endSavingState(HRESULT aRc, const Utf8Str &aErrMsg) { if (aErrMsg.length()) mConsoleTaskData.mProgress->notifyComplete(aRc, - COM_IIDOF(ISession), - getComponentName(), - aErrMsg.c_str()); + COM_IIDOF(ISession), + getComponentName(), + aErrMsg.c_str()); else mConsoleTaskData.mProgress->notifyComplete(aRc); } diff --git a/src/VBox/VMM/PATM/Makefile.kup b/src/VBox/Main/src-server/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/VMM/PATM/Makefile.kup +++ b/src/VBox/Main/src-server/Makefile.kup diff --git a/src/VBox/Main/Matching.cpp b/src/VBox/Main/src-server/Matching.cpp index 0ccceef7b..0ccceef7b 100644 --- a/src/VBox/Main/Matching.cpp +++ b/src/VBox/Main/src-server/Matching.cpp diff --git a/src/VBox/Main/MediumAttachmentImpl.cpp b/src/VBox/Main/src-server/MediumAttachmentImpl.cpp index 0ecad3284..0ecad3284 100644 --- a/src/VBox/Main/MediumAttachmentImpl.cpp +++ b/src/VBox/Main/src-server/MediumAttachmentImpl.cpp diff --git a/src/VBox/Main/MediumFormatImpl.cpp b/src/VBox/Main/src-server/MediumFormatImpl.cpp index e27bedbf9..4591d7526 100644 --- a/src/VBox/Main/MediumFormatImpl.cpp +++ b/src/VBox/Main/src-server/MediumFormatImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: MediumFormatImpl.cpp 33567 2010-10-28 15:37:21Z vboxsync $ */ +/* $Id: MediumFormatImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * * VirtualBox COM class implementation diff --git a/src/VBox/Main/MediumImpl.cpp b/src/VBox/Main/src-server/MediumImpl.cpp index f5229a22f..7484ebefd 100644 --- a/src/VBox/Main/MediumImpl.cpp +++ b/src/VBox/Main/src-server/MediumImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: MediumImpl.cpp 35261 2010-12-20 17:44:59Z vboxsync $ */ +/* $Id: MediumImpl.cpp 35553 2011-01-14 00:02:56Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ @@ -6189,7 +6189,7 @@ HRESULT Medium::taskCreateDiffHandler(Medium::CreateDiffTask &task) Utf8Str targetFormat(pTarget->m->strFormat); Utf8Str targetLocation(pTarget->m->strLocationFull); - uint64_t capabilities = m->formatObj->getCapabilities(); + uint64_t capabilities = pTarget->m->formatObj->getCapabilities(); ComAssertThrow(capabilities & VD_CAP_CREATE_DYNAMIC, E_FAIL); Assert(pTarget->m->state == MediumState_Creating); diff --git a/src/VBox/Main/MediumLock.cpp b/src/VBox/Main/src-server/MediumLock.cpp index b8b601ca5..b8b601ca5 100644 --- a/src/VBox/Main/MediumLock.cpp +++ b/src/VBox/Main/src-server/MediumLock.cpp diff --git a/src/VBox/Main/NATEngineImpl.cpp b/src/VBox/Main/src-server/NATEngineImpl.cpp index b291a65f7..5e18c7270 100644 --- a/src/VBox/Main/NATEngineImpl.cpp +++ b/src/VBox/Main/src-server/NATEngineImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: NATEngineImpl.cpp 34992 2010-12-13 11:36:38Z vboxsync $ */ +/* $Id: NATEngineImpl.cpp 35577 2011-01-16 16:16:19Z vboxsync $ */ /** @file * Implementation of INATEngine in VBoxSVC. */ @@ -288,11 +288,12 @@ NATEngine::AddRedirect(IN_BSTR aName, NATProtocol_T aProto, IN_BSTR aBindIp, USH r = it->second; if (it->first == name) return setError(E_INVALIDARG, - tr("A NAT rule of this name does already exist")); + tr("A NAT rule of this name already exists")); if ( r.strHostIP == Utf8Str(aBindIp) - && r.u16HostPort == aHostPort) + && r.u16HostPort == aHostPort + && r.proto == aProto) return setError(E_INVALIDARG, - tr("A NAT rule for this host port and this host IP does already exist")); + tr("A NAT rule for this host port and this host IP already exists")); } r.strName = name.c_str(); diff --git a/src/VBox/Main/NetworkAdapterImpl.cpp b/src/VBox/Main/src-server/NetworkAdapterImpl.cpp index 0c20145ae..b827a0325 100644 --- a/src/VBox/Main/NetworkAdapterImpl.cpp +++ b/src/VBox/Main/src-server/NetworkAdapterImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: NetworkAdapterImpl.cpp 33825 2010-11-08 10:16:25Z vboxsync $ */ +/* $Id: NetworkAdapterImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * Implementation of INetworkAdaptor in VBoxSVC. */ diff --git a/src/VBox/Main/ParallelPortImpl.cpp b/src/VBox/Main/src-server/ParallelPortImpl.cpp index 56f742f29..85c82cb34 100644 --- a/src/VBox/Main/ParallelPortImpl.cpp +++ b/src/VBox/Main/src-server/ParallelPortImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: ParallelPortImpl.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: ParallelPortImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox COM class implementation */ diff --git a/src/VBox/Main/Performance.cpp b/src/VBox/Main/src-server/Performance.cpp index 0df754c38..a84415815 100644 --- a/src/VBox/Main/Performance.cpp +++ b/src/VBox/Main/src-server/Performance.cpp @@ -1,4 +1,4 @@ -/* $Id: Performance.cpp 33590 2010-10-29 08:55:09Z vboxsync $ */ +/* $Id: Performance.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/PerformanceImpl.cpp b/src/VBox/Main/src-server/PerformanceImpl.cpp index 223610f96..b37d7b009 100644 --- a/src/VBox/Main/PerformanceImpl.cpp +++ b/src/VBox/Main/src-server/PerformanceImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: PerformanceImpl.cpp 30764 2010-07-09 14:12:12Z vboxsync $ */ +/* $Id: PerformanceImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/ProgressProxyImpl.cpp b/src/VBox/Main/src-server/ProgressProxyImpl.cpp index 625c12697..03159577d 100644 --- a/src/VBox/Main/ProgressProxyImpl.cpp +++ b/src/VBox/Main/src-server/ProgressProxyImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: ProgressProxyImpl.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: ProgressProxyImpl.cpp 35518 2011-01-13 10:56:26Z vboxsync $ */ /** @file * IProgress implementation for Machine::openRemoteSession in VBoxSVC. */ @@ -354,7 +354,7 @@ void ProgressProxy::copyProgressInfo(IProgress *pOtherProgress, bool fEarly) /* Get the error information. */ ComPtr<IVirtualBoxErrorInfo> ptrErrorInfo; hrc = pOtherProgress->COMGETTER(ErrorInfo)(ptrErrorInfo.asOutParam()); - if (SUCCEEDED(hrc)) + if (SUCCEEDED(hrc) && !ptrErrorInfo.isNull()) { Bstr bstrIID; hrc = ptrErrorInfo->COMGETTER(InterfaceID)(bstrIID.asOutParam()); AssertComRC(hrc); diff --git a/src/VBox/Main/SerialPortImpl.cpp b/src/VBox/Main/src-server/SerialPortImpl.cpp index f1d43ce92..f1d43ce92 100644 --- a/src/VBox/Main/SerialPortImpl.cpp +++ b/src/VBox/Main/src-server/SerialPortImpl.cpp diff --git a/src/VBox/Main/SnapshotImpl.cpp b/src/VBox/Main/src-server/SnapshotImpl.cpp index 0b0f8d1ff..74a1fe5d0 100644 --- a/src/VBox/Main/SnapshotImpl.cpp +++ b/src/VBox/Main/src-server/SnapshotImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: SnapshotImpl.cpp 35175 2010-12-16 12:36:00Z vboxsync $ */ +/* $Id: SnapshotImpl.cpp 35602 2011-01-18 11:27:20Z vboxsync $ */ /** @file * @@ -345,6 +345,7 @@ STDMETHODIMP Snapshot::COMGETTER(Name)(BSTR *aName) */ STDMETHODIMP Snapshot::COMSETTER(Name)(IN_BSTR aName) { + HRESULT rc = S_OK; CheckComArgStrNotEmptyOrNull(aName); AutoCaller autoCaller(this); @@ -357,18 +358,11 @@ STDMETHODIMP Snapshot::COMSETTER(Name)(IN_BSTR aName) if (m->strName != strName) { m->strName = strName; - alock.leave(); /* Important! (child->parent locks are forbidden) */ - - // flag the machine as dirty or change won't get saved - AutoWriteLock mlock(m->pMachine COMMA_LOCKVAL_SRC_POS); - m->pMachine->setModified(Machine::IsModified_Snapshots); - mlock.leave(); - - return m->pMachine->onSnapshotChange(this); + rc = m->pMachine->onSnapshotChange(this); } - return S_OK; + return rc; } STDMETHODIMP Snapshot::COMGETTER(Description)(BSTR *aDescription) @@ -386,6 +380,7 @@ STDMETHODIMP Snapshot::COMGETTER(Description)(BSTR *aDescription) STDMETHODIMP Snapshot::COMSETTER(Description)(IN_BSTR aDescription) { + HRESULT rc = S_OK; AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); @@ -396,18 +391,11 @@ STDMETHODIMP Snapshot::COMSETTER(Description)(IN_BSTR aDescription) if (m->strDescription != strDescription) { m->strDescription = strDescription; - alock.leave(); /* Important! (child->parent locks are forbidden) */ - - // flag the machine as dirty or change won't get saved - AutoWriteLock mlock(m->pMachine COMMA_LOCKVAL_SRC_POS); - m->pMachine->setModified(Machine::IsModified_Snapshots); - mlock.leave(); - - return m->pMachine->onSnapshotChange(this); + rc = m->pMachine->onSnapshotChange(this); } - return S_OK; + return rc; } STDMETHODIMP Snapshot::COMGETTER(TimeStamp)(LONG64 *aTimeStamp) @@ -1192,18 +1180,32 @@ RWLockHandle *SnapshotMachine::lockHandle() const * Called by the snapshot object associated with this SnapshotMachine when * snapshot data such as name or description is changed. * - * @note Locks this object for writing. + * @warning Caller must hold no locks when calling this. */ HRESULT SnapshotMachine::onSnapshotChange(Snapshot *aSnapshot) { - AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); - - // mPeer->saveAllSnapshots(); @todo + AutoMultiWriteLock2 mlock(this, aSnapshot COMMA_LOCKVAL_SRC_POS); + Guid uuidMachine(mData->mUuid), + uuidSnapshot(aSnapshot->getId()); + bool fNeedsGlobalSaveSettings = false; + + // flag the machine as dirty or change won't get saved + mPeer->setModified(Machine::IsModified_Snapshots); + HRESULT rc = mPeer->saveSettings(&fNeedsGlobalSaveSettings, + SaveS_Force); // we know we need saving, no need to check + mlock.leave(); + + if (SUCCEEDED(rc) && fNeedsGlobalSaveSettings) + { + // save the global settings + AutoWriteLock vboxlock(mParent COMMA_LOCKVAL_SRC_POS); + rc = mParent->saveSettings(); + } /* inform callbacks */ - mParent->onSnapshotChange(mData->mUuid, aSnapshot->getId()); + mParent->onSnapshotChange(uuidMachine, uuidSnapshot); - return S_OK; + return rc; } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/VBox/Main/StorageControllerImpl.cpp b/src/VBox/Main/src-server/StorageControllerImpl.cpp index fb130b631..ecb00feed 100644 --- a/src/VBox/Main/StorageControllerImpl.cpp +++ b/src/VBox/Main/src-server/StorageControllerImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: StorageControllerImpl.cpp 34010 2010-11-11 20:17:47Z vboxsync $ */ +/* $Id: StorageControllerImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/SystemPropertiesImpl.cpp b/src/VBox/Main/src-server/SystemPropertiesImpl.cpp index a77ad29bf..7bf5a7caa 100644 --- a/src/VBox/Main/SystemPropertiesImpl.cpp +++ b/src/VBox/Main/src-server/SystemPropertiesImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: SystemPropertiesImpl.cpp 34563 2010-12-01 11:39:52Z vboxsync $ */ +/* $Id: SystemPropertiesImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/USBControllerImpl.cpp b/src/VBox/Main/src-server/USBControllerImpl.cpp index 3d2497a24..617cb4f60 100644 --- a/src/VBox/Main/USBControllerImpl.cpp +++ b/src/VBox/Main/src-server/USBControllerImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: USBControllerImpl.cpp 33708 2010-11-02 18:46:46Z vboxsync $ */ +/* $Id: USBControllerImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * Implementation of IUSBController. */ diff --git a/src/VBox/Main/USBDeviceFilterImpl.cpp b/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp index 1e18509e1..889621466 100644 --- a/src/VBox/Main/USBDeviceFilterImpl.cpp +++ b/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: USBDeviceFilterImpl.cpp 32718 2010-09-23 12:57:52Z vboxsync $ */ +/* $Id: USBDeviceFilterImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * Implementation of VirtualBox COM components: USBDeviceFilter and HostUSBDeviceFilter */ diff --git a/src/VBox/Main/USBProxyService.cpp b/src/VBox/Main/src-server/USBProxyService.cpp index 76c62640f..fb6e1bb02 100644 --- a/src/VBox/Main/USBProxyService.cpp +++ b/src/VBox/Main/src-server/USBProxyService.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyService.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: USBProxyService.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox USB Proxy Service (base) class. */ diff --git a/src/VBox/Main/VFSExplorerImpl.cpp b/src/VBox/Main/src-server/VFSExplorerImpl.cpp index cacfecd4d..b15cb4c4d 100644 --- a/src/VBox/Main/VFSExplorerImpl.cpp +++ b/src/VBox/Main/src-server/VFSExplorerImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: VFSExplorerImpl.cpp 35284 2010-12-21 20:49:53Z vboxsync $ */ +/* $Id: VFSExplorerImpl.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * * IVFSExplorer COM class implementations. diff --git a/src/VBox/Main/VRDEServerImpl.cpp b/src/VBox/Main/src-server/VRDEServerImpl.cpp index f9645e788..f9645e788 100644 --- a/src/VBox/Main/VRDEServerImpl.cpp +++ b/src/VBox/Main/src-server/VRDEServerImpl.cpp diff --git a/src/VBox/Main/VirtualBoxImpl.cpp b/src/VBox/Main/src-server/VirtualBoxImpl.cpp index dd2f3c666..bc8c1759f 100644 --- a/src/VBox/Main/VirtualBoxImpl.cpp +++ b/src/VBox/Main/src-server/VirtualBoxImpl.cpp @@ -1,4 +1,4 @@ -/* $Id: VirtualBoxImpl.cpp 35139 2010-12-15 15:13:43Z vboxsync $ */ +/* $Id: VirtualBoxImpl.cpp 35608 2011-01-18 14:19:31Z vboxsync $ */ /** @file * Implementation of IVirtualBox in VBoxSVC. @@ -1114,7 +1114,7 @@ VirtualBox::CheckFirmwarePresent(FirmwareType_T aFirmwareType, AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); - const char * url = NULL; + const char *url; NOREF(aVersion); @@ -1122,7 +1122,9 @@ VirtualBox::CheckFirmwarePresent(FirmwareType_T aFirmwareType, FirmwareType_T type; const char* fileName; const char* url; - } firmwareDesc[] = { + } + firmwareDesc[] = + { { /* compiled-in firmware */ FirmwareType_BIOS, NULL, NULL @@ -2832,6 +2834,7 @@ HRESULT VirtualBox::findDVDOrFloppyImage(DeviceType_T mediumType, HRESULT VirtualBox::findRemoveableMedium(DeviceType_T mediumType, const Guid &uuid, bool fRefresh, + bool aSetError, ComObjPtr<Medium> &pMedium) { if (uuid.isEmpty()) @@ -2842,13 +2845,13 @@ HRESULT VirtualBox::findRemoveableMedium(DeviceType_T mediumType, } // first search for host drive with that UUID - HRESULT rc = m->pHost->findHostDrive(mediumType, - uuid, - fRefresh, - pMedium); + HRESULT rc = m->pHost->findHostDriveById(mediumType, + uuid, + fRefresh, + pMedium); if (rc == VBOX_E_OBJECT_NOT_FOUND) // then search for an image with that UUID - rc = findDVDOrFloppyImage(mediumType, &uuid, Utf8Str::Empty, true /* aSetError */, &pMedium); + rc = findDVDOrFloppyImage(mediumType, &uuid, Utf8Str::Empty, aSetError, &pMedium); return rc; } diff --git a/src/VBox/Main/darwin/HostPowerDarwin.cpp b/src/VBox/Main/src-server/darwin/HostPowerDarwin.cpp index a83297e40..a83297e40 100644 --- a/src/VBox/Main/darwin/HostPowerDarwin.cpp +++ b/src/VBox/Main/src-server/darwin/HostPowerDarwin.cpp diff --git a/src/VBox/VMM/PATM/VMMAll/Makefile.kup b/src/VBox/Main/src-server/darwin/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/VMM/PATM/VMMAll/Makefile.kup +++ b/src/VBox/Main/src-server/darwin/Makefile.kup diff --git a/src/VBox/Main/darwin/NetIf-darwin.cpp b/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp index c435f1a0c..c435f1a0c 100644 --- a/src/VBox/Main/darwin/NetIf-darwin.cpp +++ b/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp diff --git a/src/VBox/Main/darwin/OpenGLTestDarwin.cpp b/src/VBox/Main/src-server/darwin/OpenGLTestDarwin.cpp index de80f4d34..de80f4d34 100644 --- a/src/VBox/Main/darwin/OpenGLTestDarwin.cpp +++ b/src/VBox/Main/src-server/darwin/OpenGLTestDarwin.cpp diff --git a/src/VBox/Main/darwin/PerformanceDarwin.cpp b/src/VBox/Main/src-server/darwin/PerformanceDarwin.cpp index eda4e5c06..eda4e5c06 100644 --- a/src/VBox/Main/darwin/PerformanceDarwin.cpp +++ b/src/VBox/Main/src-server/darwin/PerformanceDarwin.cpp diff --git a/src/VBox/Main/darwin/USBProxyServiceDarwin.cpp b/src/VBox/Main/src-server/darwin/USBProxyServiceDarwin.cpp index daf605685..daf605685 100644 --- a/src/VBox/Main/darwin/USBProxyServiceDarwin.cpp +++ b/src/VBox/Main/src-server/darwin/USBProxyServiceDarwin.cpp diff --git a/src/VBox/Main/darwin/iokit.cpp b/src/VBox/Main/src-server/darwin/iokit.cpp index 084e01b77..084e01b77 100644 --- a/src/VBox/Main/darwin/iokit.cpp +++ b/src/VBox/Main/src-server/darwin/iokit.cpp diff --git a/src/VBox/Main/darwin/iokit.h b/src/VBox/Main/src-server/darwin/iokit.h index caa40a5bf..caa40a5bf 100644 --- a/src/VBox/Main/darwin/iokit.h +++ b/src/VBox/Main/src-server/darwin/iokit.h diff --git a/src/VBox/Main/freebsd/HostHardwareFreeBSD.cpp b/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp index af7f07b9c..af7f07b9c 100644 --- a/src/VBox/Main/freebsd/HostHardwareFreeBSD.cpp +++ b/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp diff --git a/src/VBox/VMM/PATM/VMMGC/Makefile.kup b/src/VBox/Main/src-server/freebsd/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/VMM/PATM/VMMGC/Makefile.kup +++ b/src/VBox/Main/src-server/freebsd/Makefile.kup diff --git a/src/VBox/Main/freebsd/NetIf-freebsd.cpp b/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp index 74ec33f5c..74ec33f5c 100644 --- a/src/VBox/Main/freebsd/NetIf-freebsd.cpp +++ b/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp diff --git a/src/VBox/Main/freebsd/PerformanceFreeBSD.cpp b/src/VBox/Main/src-server/freebsd/PerformanceFreeBSD.cpp index 3e38af6fc..3e38af6fc 100644 --- a/src/VBox/Main/freebsd/PerformanceFreeBSD.cpp +++ b/src/VBox/Main/src-server/freebsd/PerformanceFreeBSD.cpp diff --git a/src/VBox/Main/freebsd/USBProxyServiceFreeBSD.cpp b/src/VBox/Main/src-server/freebsd/USBProxyServiceFreeBSD.cpp index ae60d4835..ae60d4835 100644 --- a/src/VBox/Main/freebsd/USBProxyServiceFreeBSD.cpp +++ b/src/VBox/Main/src-server/freebsd/USBProxyServiceFreeBSD.cpp diff --git a/src/VBox/VMM/VMMGC/Makefile.kup b/src/VBox/Main/src-server/generic/Makefile.kup index e69de29bb..e69de29bb 100644 --- a/src/VBox/VMM/VMMGC/Makefile.kup +++ b/src/VBox/Main/src-server/generic/Makefile.kup diff --git a/src/VBox/Main/generic/NetIf-generic.cpp b/src/VBox/Main/src-server/generic/NetIf-generic.cpp index f3bee48f7..f3bee48f7 100644 --- a/src/VBox/Main/generic/NetIf-generic.cpp +++ b/src/VBox/Main/src-server/generic/NetIf-generic.cpp diff --git a/src/VBox/Main/generic/OpenGLTest.cpp b/src/VBox/Main/src-server/generic/OpenGLTest.cpp index efc68d1f4..efc68d1f4 100644 --- a/src/VBox/Main/generic/OpenGLTest.cpp +++ b/src/VBox/Main/src-server/generic/OpenGLTest.cpp diff --git a/src/VBox/Main/generic/OpenGLTestApp.cpp b/src/VBox/Main/src-server/generic/OpenGLTestApp.cpp index a69b03eb2..a69b03eb2 100644 --- a/src/VBox/Main/generic/OpenGLTestApp.cpp +++ b/src/VBox/Main/src-server/generic/OpenGLTestApp.cpp diff --git a/src/VBox/Main/linux/HostHardwareLinux.cpp b/src/VBox/Main/src-server/linux/HostHardwareLinux.cpp index bb5dd5b8c..bb5dd5b8c 100644 --- a/src/VBox/Main/linux/HostHardwareLinux.cpp +++ b/src/VBox/Main/src-server/linux/HostHardwareLinux.cpp diff --git a/src/VBox/Main/src-server/linux/Makefile.kup b/src/VBox/Main/src-server/linux/Makefile.kup new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/VBox/Main/src-server/linux/Makefile.kup diff --git a/src/VBox/Main/linux/NetIf-linux.cpp b/src/VBox/Main/src-server/linux/NetIf-linux.cpp index f3befb2c2..f3befb2c2 100644 --- a/src/VBox/Main/linux/NetIf-linux.cpp +++ b/src/VBox/Main/src-server/linux/NetIf-linux.cpp diff --git a/src/VBox/Main/linux/PerformanceLinux.cpp b/src/VBox/Main/src-server/linux/PerformanceLinux.cpp index af5c0c267..af5c0c267 100644 --- a/src/VBox/Main/linux/PerformanceLinux.cpp +++ b/src/VBox/Main/src-server/linux/PerformanceLinux.cpp diff --git a/src/VBox/Main/linux/USBGetDevices.cpp b/src/VBox/Main/src-server/linux/USBGetDevices.cpp index d1505e558..b90fca2b9 100644 --- a/src/VBox/Main/linux/USBGetDevices.cpp +++ b/src/VBox/Main/src-server/linux/USBGetDevices.cpp @@ -1,4 +1,4 @@ -/* $Id: USBGetDevices.cpp 34716 2010-12-03 23:33:04Z vboxsync $ */ +/* $Id: USBGetDevices.cpp 35599 2011-01-18 09:52:52Z vboxsync $ */ /** @file * VirtualBox Linux host USB device enumeration. */ @@ -976,7 +976,9 @@ static int readFilePathsFromDir(const char *pcszPath, DIR *pDir, if (snprintf(szPath, sizeof(szPath), "%s/%s", pcszPath, entry.d_name) < 0) return RTErrConvertFromErrno(errno); - pszPath = RTStrDup(realpath(szPath, szRealPath)); + if (!realpath(szPath, szRealPath)) + return RTErrConvertFromErrno(errno); + pszPath = RTStrDup(szRealPath); if (!pszPath) return VERR_NO_MEMORY; if (RT_FAILURE(rc = VEC_PUSH_BACK_PTR(pvecpchDevs, char *, pszPath))) diff --git a/src/VBox/Main/linux/USBProxyServiceLinux.cpp b/src/VBox/Main/src-server/linux/USBProxyServiceLinux.cpp index c26b3d1cb..fdcdb1687 100644 --- a/src/VBox/Main/linux/USBProxyServiceLinux.cpp +++ b/src/VBox/Main/src-server/linux/USBProxyServiceLinux.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyServiceLinux.cpp 34341 2010-11-24 20:14:36Z vboxsync $ */ +/* $Id: USBProxyServiceLinux.cpp 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * VirtualBox USB Proxy Service, Linux Specialization. */ @@ -210,7 +210,7 @@ int USBProxyServiceLinux::initSysfs(void) Assert(!mUsingUsbfsDevices); #ifdef VBOX_USB_WITH_SYSFS - try + try { mpWaiter = new VBoxMainHotplugWaiter(mDevicesRoot.c_str()); } diff --git a/src/VBox/Main/linux/vbox-libhal.cpp b/src/VBox/Main/src-server/linux/vbox-libhal.cpp index 2e7c2716e..2e7c2716e 100644 --- a/src/VBox/Main/linux/vbox-libhal.cpp +++ b/src/VBox/Main/src-server/linux/vbox-libhal.cpp diff --git a/src/VBox/Main/src-server/os2/Makefile.kup b/src/VBox/Main/src-server/os2/Makefile.kup new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/VBox/Main/src-server/os2/Makefile.kup diff --git a/src/VBox/Main/os2/NetIf-os2.cpp b/src/VBox/Main/src-server/os2/NetIf-os2.cpp index 70162e42b..70162e42b 100644 --- a/src/VBox/Main/os2/NetIf-os2.cpp +++ b/src/VBox/Main/src-server/os2/NetIf-os2.cpp diff --git a/src/VBox/Main/os2/PerformanceOs2.cpp b/src/VBox/Main/src-server/os2/PerformanceOs2.cpp index a741ef02c..a741ef02c 100644 --- a/src/VBox/Main/os2/PerformanceOs2.cpp +++ b/src/VBox/Main/src-server/os2/PerformanceOs2.cpp diff --git a/src/VBox/Main/os2/USBProxyServiceOs2.cpp b/src/VBox/Main/src-server/os2/USBProxyServiceOs2.cpp index 22ba59ba0..22ba59ba0 100644 --- a/src/VBox/Main/os2/USBProxyServiceOs2.cpp +++ b/src/VBox/Main/src-server/os2/USBProxyServiceOs2.cpp diff --git a/src/VBox/Main/solaris/DynLoadLibSolaris.cpp b/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.cpp index aea962e58..aea962e58 100644 --- a/src/VBox/Main/solaris/DynLoadLibSolaris.cpp +++ b/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.cpp diff --git a/src/VBox/Main/solaris/DynLoadLibSolaris.h b/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.h index 64b91f14c..64b91f14c 100644 --- a/src/VBox/Main/solaris/DynLoadLibSolaris.h +++ b/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.h diff --git a/src/VBox/Main/src-server/solaris/Makefile.kup b/src/VBox/Main/src-server/solaris/Makefile.kup new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/VBox/Main/src-server/solaris/Makefile.kup diff --git a/src/VBox/Main/solaris/NetIf-solaris.cpp b/src/VBox/Main/src-server/solaris/NetIf-solaris.cpp index 6ad6f2d0d..6ad6f2d0d 100644 --- a/src/VBox/Main/solaris/NetIf-solaris.cpp +++ b/src/VBox/Main/src-server/solaris/NetIf-solaris.cpp diff --git a/src/VBox/Main/solaris/PerformanceSolaris.cpp b/src/VBox/Main/src-server/solaris/PerformanceSolaris.cpp index 70b657680..70b657680 100644 --- a/src/VBox/Main/solaris/PerformanceSolaris.cpp +++ b/src/VBox/Main/src-server/solaris/PerformanceSolaris.cpp diff --git a/src/VBox/Main/solaris/USBProxyServiceSolaris.cpp b/src/VBox/Main/src-server/solaris/USBProxyServiceSolaris.cpp index 2b6b61881..2b6b61881 100644 --- a/src/VBox/Main/solaris/USBProxyServiceSolaris.cpp +++ b/src/VBox/Main/src-server/solaris/USBProxyServiceSolaris.cpp diff --git a/src/VBox/Main/win/HostPowerWin.cpp b/src/VBox/Main/src-server/win/HostPowerWin.cpp index ae806fd75..ae806fd75 100644 --- a/src/VBox/Main/win/HostPowerWin.cpp +++ b/src/VBox/Main/src-server/win/HostPowerWin.cpp diff --git a/src/VBox/Main/src-server/win/Makefile.kup b/src/VBox/Main/src-server/win/Makefile.kup new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/VBox/Main/src-server/win/Makefile.kup diff --git a/src/VBox/Main/win/NetIf-win.cpp b/src/VBox/Main/src-server/win/NetIf-win.cpp index 7b1ce239d..0225818ad 100644 --- a/src/VBox/Main/win/NetIf-win.cpp +++ b/src/VBox/Main/src-server/win/NetIf-win.cpp @@ -1,4 +1,4 @@ -/* $Id: NetIf-win.cpp 34546 2010-12-01 09:04:23Z vboxsync $ */ +/* $Id: NetIf-win.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * Main - NetIfList, Windows implementation. */ @@ -61,7 +61,36 @@ #define VBOX_APP_NAME L"VirtualBox" -static int collectNetIfInfo(Bstr &strName, Guid &guid, PNETIFINFO pInfo) +static int getDefaultInterfaceIndex() +{ + PMIB_IPFORWARDTABLE pIpTable; + DWORD dwSize = sizeof(MIB_IPFORWARDTABLE) * 20; + DWORD dwRC = NO_ERROR; + int iIndex = -1; + + pIpTable = (MIB_IPFORWARDTABLE *)RTMemAlloc(dwSize); + if (GetIpForwardTable(pIpTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) + { + RTMemFree(pIpTable); + pIpTable = (MIB_IPFORWARDTABLE *)RTMemAlloc(dwSize); + if (!pIpTable) + return -1; + } + dwRC = GetIpForwardTable(pIpTable, &dwSize, 0); + if (dwRC == NO_ERROR) + { + for (unsigned int i = 0; i < pIpTable->dwNumEntries; i++) + if (pIpTable->table[i].dwForwardDest == 0) + { + iIndex = pIpTable->table[i].dwForwardIfIndex; + break; + } + } + RTMemFree(pIpTable); + return iIndex; +} + +static int collectNetIfInfo(Bstr &strName, Guid &guid, PNETIFINFO pInfo, int iDefault) { DWORD dwRc; int rc = VINF_SUCCESS; @@ -162,6 +191,7 @@ static int collectNetIfInfo(Bstr &strName, Guid &guid, PNETIFINFO pInfo) memcpy(pInfo->MACAddress.au8, pAdapter->PhysicalAddress, sizeof(pInfo->MACAddress)); pInfo->enmMediumType = NETIF_T_ETHERNET; pInfo->enmStatus = pAdapter->OperStatus == IfOperStatusUp ? NETIF_S_UP : NETIF_S_DOWN; + pInfo->bIsDefault = (pAdapter->IfIndex == iDefault); RTStrFree(pszUuid); break; } @@ -905,7 +935,8 @@ static BOOL IsUACEnabled() /* end */ static int vboxNetWinAddComponent(std::list<ComObjPtr<HostNetworkInterface> > * pPist, - INetCfgComponent * pncc, HostNetworkInterfaceType enmType) + INetCfgComponent * pncc, HostNetworkInterfaceType enmType, + int iDefaultInterface) { LPWSTR lpszName; GUID IfGuid; @@ -925,7 +956,7 @@ static int vboxNetWinAddComponent(std::list<ComObjPtr<HostNetworkInterface> > * NETIFINFO Info; memset(&Info, 0, sizeof(Info)); Info.Uuid = *(Guid(IfGuid).raw()); - rc = collectNetIfInfo(name, Guid(IfGuid), &Info); + rc = collectNetIfInfo(name, Guid(IfGuid), &Info, iDefaultInterface); if (RT_FAILURE(rc)) { Log(("vboxNetWinAddComponent: collectNetIfInfo() -> %Rrc\n", rc)); @@ -936,7 +967,10 @@ static int vboxNetWinAddComponent(std::list<ComObjPtr<HostNetworkInterface> > * /* remove the curly bracket at the end */ if (SUCCEEDED(iface->init(name, enmType, &Info))) { - pPist->push_back(iface); + if (Info.bIsDefault) + pPist->push_front(iface); + else + pPist->push_back(iface); rc = VINF_SUCCESS; } else @@ -991,7 +1025,7 @@ static int netIfListHostAdapters(std::list<ComObjPtr<HostNetworkInterface> > &li { if (!_wcsnicmp(pId, L"sun_VBoxNetAdp", sizeof(L"sun_VBoxNetAdp")/2)) { - vboxNetWinAddComponent(&list, pMpNcc, HostNetworkInterfaceType_HostOnly); + vboxNetWinAddComponent(&list, pMpNcc, HostNetworkInterfaceType_HostOnly, -1); } CoTaskMemFree(pId); } @@ -1036,7 +1070,7 @@ int NetIfGetConfig(HostNetworkInterface * pIf, NETIFINFO *pInfo) Guid guid(IfGuid); pInfo->Uuid = *(guid.raw()); - return collectNetIfInfo(name, guid, pInfo); + return collectNetIfInfo(name, guid, pInfo, getDefaultInterfaceIndex()); } } return VERR_GENERAL_FAILURE; @@ -1403,6 +1437,7 @@ int NetIfList(std::list<ComObjPtr<HostNetworkInterface> > &list) INetCfgBindingPath *pBp; IEnumNetCfgBindingInterface *pEnumBi; INetCfgBindingInterface *pBi; + int iDefault = getDefaultInterfaceIndex(); /* we are using the INetCfg API for getting the list of miniports */ hr = VBoxNetCfgWinQueryINetCfg(FALSE, @@ -1458,7 +1493,7 @@ int NetIfList(std::list<ComObjPtr<HostNetworkInterface> > &list) { if (uComponentStatus == 0) { - vboxNetWinAddComponent(&list, pMpNcc, HostNetworkInterfaceType_Bridged); + vboxNetWinAddComponent(&list, pMpNcc, HostNetworkInterfaceType_Bridged, iDefault); } } VBoxNetCfgWinReleaseRef( pMpNcc ); diff --git a/src/VBox/Main/win/PerformanceWin.cpp b/src/VBox/Main/src-server/win/PerformanceWin.cpp index 2fedc9962..96ee57d57 100644 --- a/src/VBox/Main/win/PerformanceWin.cpp +++ b/src/VBox/Main/src-server/win/PerformanceWin.cpp @@ -1,4 +1,4 @@ -/* $Id: PerformanceWin.cpp 33590 2010-10-29 08:55:09Z vboxsync $ */ +/* $Id: PerformanceWin.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * diff --git a/src/VBox/Main/win/USBProxyServiceWindows.cpp b/src/VBox/Main/src-server/win/USBProxyServiceWindows.cpp index 3986363de..f5ca1bca4 100644 --- a/src/VBox/Main/win/USBProxyServiceWindows.cpp +++ b/src/VBox/Main/src-server/win/USBProxyServiceWindows.cpp @@ -1,4 +1,4 @@ -/* $Id: USBProxyServiceWindows.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: USBProxyServiceWindows.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VirtualBox USB Proxy Service, Windows Specialization. */ diff --git a/src/VBox/Main/win/VBoxComEvents.cpp b/src/VBox/Main/src-server/win/VBoxComEvents.cpp index cca2f398b..cca2f398b 100644 --- a/src/VBox/Main/win/VBoxComEvents.cpp +++ b/src/VBox/Main/src-server/win/VBoxComEvents.cpp diff --git a/src/VBox/Main/win/VBoxComEvents.h b/src/VBox/Main/src-server/win/VBoxComEvents.h index ec1a1ba5e..ec1a1ba5e 100644 --- a/src/VBox/Main/win/VBoxComEvents.h +++ b/src/VBox/Main/src-server/win/VBoxComEvents.h diff --git a/src/VBox/Main/win/VBoxSVC.rc b/src/VBox/Main/src-server/win/VBoxSVC.rc index 0f0783038..aec838f34 100644 --- a/src/VBox/Main/win/VBoxSVC.rc +++ b/src/VBox/Main/src-server/win/VBoxSVC.rc @@ -1,4 +1,4 @@ -/* $Id: VBoxSVC.rc 32394 2010-09-10 12:13:11Z vboxsync $ */ +/* $Id: VBoxSVC.rc 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * VBoxSVC - Resource file containing version info and icon. */ @@ -18,7 +18,7 @@ #include <windows.h> #include <VBox/version.h> -#include "resource.h" +#include "win/resource.h" VS_VERSION_INFO VERSIONINFO FILEVERSION VBOX_VERSION_MAJOR_NR,VBOX_VERSION_MINOR_NR,VBOX_VERSION_BUILD_NR,0 diff --git a/src/VBox/Main/win/svchlp.cpp b/src/VBox/Main/src-server/win/svchlp.cpp index 2f749f53a..2f749f53a 100644 --- a/src/VBox/Main/win/svchlp.cpp +++ b/src/VBox/Main/src-server/win/svchlp.cpp diff --git a/src/VBox/Main/win/svchlp.h b/src/VBox/Main/src-server/win/svchlp.h index 0e8b8b800..0e8b8b800 100644 --- a/src/VBox/Main/win/svchlp.h +++ b/src/VBox/Main/src-server/win/svchlp.h diff --git a/src/VBox/Main/win/svcmain.cpp b/src/VBox/Main/src-server/win/svcmain.cpp index 3b23a8b4c..3b23a8b4c 100644 --- a/src/VBox/Main/win/svcmain.cpp +++ b/src/VBox/Main/src-server/win/svcmain.cpp diff --git a/src/VBox/Main/src-server/xpcom/Makefile.kup b/src/VBox/Main/src-server/xpcom/Makefile.kup new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/VBox/Main/src-server/xpcom/Makefile.kup diff --git a/src/VBox/Main/xpcom/server.cpp b/src/VBox/Main/src-server/xpcom/server.cpp index 199a5a6d3..db12c5d42 100644 --- a/src/VBox/Main/xpcom/server.cpp +++ b/src/VBox/Main/src-server/xpcom/server.cpp @@ -1,4 +1,4 @@ -/* $Id: server.cpp 34714 2010-12-03 22:19:31Z vboxsync $ */ +/* $Id: server.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * XPCOM server process (VBoxSVC) start point. */ @@ -30,7 +30,7 @@ #include "prio.h" #include "prproces.h" -#include "xpcom/server.h" +#include "server.h" #include "Logging.h" diff --git a/src/VBox/Main/xpcom/server.h b/src/VBox/Main/src-server/xpcom/server.h index f14977af9..f14977af9 100644 --- a/src/VBox/Main/xpcom/server.h +++ b/src/VBox/Main/src-server/xpcom/server.h diff --git a/src/VBox/Main/xpcom/server_module.cpp b/src/VBox/Main/src-server/xpcom/server_module.cpp index ea69fc5e2..f2cf4c5b8 100644 --- a/src/VBox/Main/xpcom/server_module.cpp +++ b/src/VBox/Main/src-server/xpcom/server_module.cpp @@ -43,7 +43,7 @@ // generated file #include <VirtualBox_XPCOM.h> -#include "xpcom/server.h" +#include "server.h" #include "Logging.h" #include <VBox/err.h> diff --git a/src/VBox/Main/testcase/Makefile.kmk b/src/VBox/Main/testcase/Makefile.kmk index 7a8218d4a..79a2c6045 100644 --- a/src/VBox/Main/testcase/Makefile.kmk +++ b/src/VBox/Main/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 32324 2010-09-08 15:43:32Z vboxsync $ +# $Id: Makefile.kmk 35368 2010-12-30 13:38:23Z vboxsync $ ## @file # Sub-Makefile for the VBox API testcases. # @@ -135,7 +135,7 @@ tstVBoxAPIWin_DEPS = \ tstCollector_TEMPLATE = VBOXMAINCLIENTEXE tstCollector_SOURCES = \ tstCollector.cpp \ - ../Performance.cpp + ../src-server/Performance.cpp tstCollector_INCS = ../include tstCollector_DEFS += VBOX_COLLECTOR_TEST_CASE tstCollector_LDFLAGS.darwin += -lproc @@ -150,8 +150,8 @@ tstCollector_LDFLAGS.win += psapi.lib powrprof.lib tstHostHardwareLinux_TEMPLATE = VBOXR3TSTNPEXE tstHostHardwareLinux_SOURCES = \ tstHostHardwareLinux.cpp \ - ../linux/HostHardwareLinux.cpp \ - ../linux/USBGetDevices.cpp + ../src-server/linux/HostHardwareLinux.cpp \ + ../src-server/linux/USBGetDevices.cpp tstHostHardwareLinux_INCS = . ../include tstHostHardwareLinux_DEFS = \ VBOX_TEST_USB_LINUX \ diff --git a/src/VBox/Main/testcase/tstCollector.cpp b/src/VBox/Main/testcase/tstCollector.cpp index c60711f74..ab31b42b9 100644 --- a/src/VBox/Main/testcase/tstCollector.cpp +++ b/src/VBox/Main/testcase/tstCollector.cpp @@ -1,4 +1,4 @@ -/* $Id: tstCollector.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: tstCollector.cpp 35368 2010-12-30 13:38:23Z vboxsync $ */ /** @file * @@ -18,25 +18,25 @@ */ #ifdef RT_OS_DARWIN -#include "../darwin/PerformanceDarwin.cpp" +# include "../src-server/darwin/PerformanceDarwin.cpp" #endif #ifdef RT_OS_FREEBSD -#include "../freebsd/PerformanceFreeBSD.cpp" +# include "../src-server/freebsd/PerformanceFreeBSD.cpp" #endif #ifdef RT_OS_LINUX -#include "../linux/PerformanceLinux.cpp" +# include "../src-server/linux/PerformanceLinux.cpp" #endif #ifdef RT_OS_OS2 -#include "../os2/PerformanceOS2.cpp" +# include "../src-server/os2/PerformanceOS2.cpp" #endif #ifdef RT_OS_SOLARIS -#include "../solaris/PerformanceSolaris.cpp" +# include "../src-server/solaris/PerformanceSolaris.cpp" #endif #ifdef RT_OS_WINDOWS -#define _WIN32_DCOM -#include <objidl.h> -#include <objbase.h> -#include "../win/PerformanceWin.cpp" +# define _WIN32_DCOM +# include <objidl.h> +# include <objbase.h> +# include "../src-server/win/PerformanceWin.cpp" #endif #include <iprt/initterm.h> diff --git a/src/VBox/Main/webservice/Makefile.kmk b/src/VBox/Main/webservice/Makefile.kmk index efcc84596..270823f80 100644 --- a/src/VBox/Main/webservice/Makefile.kmk +++ b/src/VBox/Main/webservice/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34618 2010-12-02 15:14:40Z vboxsync $ +# $Id: Makefile.kmk 35559 2011-01-14 13:33:47Z vboxsync $ ## @file # Sub-Makefile for the VBox web service. # @@ -290,6 +290,10 @@ endif $(VBOXWEB_OUT_DIR)/methodmaps.cpp \ $(VBOXWEB_OUT_DIR)/soapServer.cpp + vboxweb.cpp_DEFS = \ + VBOX_BUILD_TARGET=\"$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)\" \ + $(if $(VBOX_BLEEDING_EDGE),VBOX_BLEEDING_EDGE=\"$(VBOX_BLEEDING_EDGE)\",) + vboxwebsrv_ORDERDEPS = $(VBOXWEB_OUT_DIR)/gsoap_copy_all_ts endif # !VBOX_ONLY_SDK @@ -643,9 +647,9 @@ $(VBOXWEB_OUT_DIR)/soapC-1.cpp \ + $(VBOXWEB_OUT_DIR)/soapC-18.cpp \ + $(VBOXWEB_OUT_DIR)/soapC-19.cpp \ + $(VBOXWEB_OUT_DIR)/soapC-20.cpp \ -: $(VBOXWEB_OUT_DIR)/soapC.cpp $$(TARGET_split-soapC) | $$(dir $$@) +: $(VBOXWEB_OUT_DIR)/soapC.cpp $$(split-soapC_1_TARGET) | $$(dir $$@) $(RM) -f $(wildcard $(VBOXWEB_OUT_DIR)/soapC-?.cpp $(VBOXWEB_OUT_DIR)/soapC-??.cpp) - $(TARGET_split-soapC) $(VBOXWEB_OUT_DIR)/soapC.cpp $(VBOXWEB_OUT_DIR) 20 + $(split-soapC_1_TARGET) $(VBOXWEB_OUT_DIR)/soapC.cpp $(VBOXWEB_OUT_DIR) 20 endif # !VBOX_WITHOUT_SPLIT_SOAPC endif # VBOX_GSOAP_INSTALLED diff --git a/src/VBox/Main/webservice/vboxweb.cpp b/src/VBox/Main/webservice/vboxweb.cpp index cfba724d4..1d001cc83 100644 --- a/src/VBox/Main/webservice/vboxweb.cpp +++ b/src/VBox/Main/webservice/vboxweb.cpp @@ -5,7 +5,7 @@ * (plus static gSOAP server code) to implement the actual webservice * server, to which clients can connect. * - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -21,11 +21,16 @@ // vbox headers #include <VBox/com/com.h> +#include <VBox/com/array.h> #include <VBox/com/ErrorInfo.h> #include <VBox/com/errorprint.h> #include <VBox/com/EventQueue.h> +#include <VBox/com/listeners.h> #include <VBox/VBoxAuth.h> #include <VBox/version.h> +#include <VBox/log.h> + +#include <package-generated.h> #include <iprt/buildconfig.h> #include <iprt/ctype.h> @@ -39,6 +44,8 @@ #include <iprt/string.h> #include <iprt/thread.h> #include <iprt/time.h> +#include <iprt/path.h> +#include <iprt/system.h> // workaround for compile problems on gcc 4.1 #ifdef __GNUC__ @@ -85,7 +92,7 @@ int fntWatchdog(RTTHREAD ThreadSelf, void *pvUser); * ****************************************************************************/ -ComPtr<IVirtualBox> g_pVirtualBox = NULL; +static ComPtr<IVirtualBoxClient> g_pVirtualBoxClient = NULL; // generated strings in methodmaps.cpp extern const char *g_pcszISession, @@ -97,13 +104,14 @@ extern const char *g_pcszISession, int g_iWatchdogTimeoutSecs = DEFAULT_TIMEOUT_SECS; int g_iWatchdogCheckInterval = 5; -const char *g_pcszBindToHost = NULL; // host; NULL = current machine +const char *g_pcszBindToHost = NULL; // host; NULL = localhost unsigned int g_uBindToPort = 18083; // port unsigned int g_uBacklog = 100; // backlog = max queue size for requests unsigned int g_cMaxWorkerThreads = 100; // max. no. of worker threads unsigned int g_cMaxKeepAlive = 100; // maximum number of soap requests in one connection bool g_fVerbose = false; // be verbose +bool g_fStdOutLogging = true; // log to stdout PRTSTREAM g_pStrmLog = NULL; #if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined (RT_OS_SOLARIS) || defined(RT_OS_FREEBSD) @@ -125,6 +133,11 @@ SoapQ *g_pSoapQ = NULL; // this mutex protects the auth lib and authentication util::WriteLockHandle *g_pAuthLibLockHandle; +// this mutex protects the global VirtualBox reference below +static util::RWLockHandle *g_pVirtualBoxLockHandle; + +static ComPtr<IVirtualBox> g_pVirtualBox = NULL; + // this mutex protects all of the below util::WriteLockHandle *g_pSessionsLockHandle; @@ -253,7 +266,7 @@ public: SoapQ &q, const struct soap *soap) : m_u(u), - m_strThread(com::Utf8StrFmt("SoapQWrk%02d", m_u)), + m_strThread(com::Utf8StrFmt("SQW%02d", m_u)), m_pQ(&q) { // make a copy of the soap struct for the new thread @@ -471,6 +484,79 @@ void SoapThread::process() } } +/**************************************************************************** + * + * VirtualBoxClient event listener + * + ****************************************************************************/ + +class VirtualBoxClientEventListener +{ +public: + VirtualBoxClientEventListener() + { + } + + virtual ~VirtualBoxClientEventListener() + { + } + + STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent) + { + switch (aType) + { + case VBoxEventType_OnVBoxSVCAvailabilityChanged: + { + ComPtr<IVBoxSVCAvailabilityChangedEvent> pVSACEv = aEvent; + Assert(pVSACEv); + BOOL fAvailable = FALSE; + pVSACEv->COMGETTER(Available)(&fAvailable); + if (!fAvailable) + { + WebLog("VBoxSVC became unavailable\n"); + { + util::AutoWriteLock vlock(g_pVirtualBoxLockHandle COMMA_LOCKVAL_SRC_POS); + g_pVirtualBox = NULL; + } + { + // we're messing with sessions, so lock them + util::AutoWriteLock lock(g_pSessionsLockHandle COMMA_LOCKVAL_SRC_POS); + WEBDEBUG(("SVC unavailable: deleting %d sessions\n", g_mapSessions.size())); + + SessionsMap::iterator it = g_mapSessions.begin(), + itEnd = g_mapSessions.end(); + while (it != itEnd) + { + WebServiceSession *pSession = it->second; + WEBDEBUG(("SVC unavailable: Session %llX stale, deleting\n", pSession->getID())); + delete pSession; + it = g_mapSessions.begin(); + } + } + } + else + { + WebLog("VBoxSVC became available\n"); + util::AutoWriteLock vlock(g_pVirtualBoxLockHandle COMMA_LOCKVAL_SRC_POS); + HRESULT hrc = g_pVirtualBoxClient->COMGETTER(VirtualBox)(g_pVirtualBox.asOutParam()); + AssertComRC(hrc); + } + break; + } + default: + AssertFailed(); + } + + return S_OK; + } + +private: +}; + +typedef ListenerImpl<VirtualBoxClientEventListener> VirtualBoxClientEventListenerImpl; + +VBOX_LISTENER_DECLARE(VirtualBoxClientEventListenerImpl) + /** * Implementation for WEBLOG macro defined in vboxweb.h; this prints a message * to the console and optionally to the file that may have been given to the @@ -485,41 +571,48 @@ void WebLog(const char *pszFormat, ...) RTStrAPrintfV(&psz, pszFormat, args); va_end(args); - const char *pcszPrefix = "[ ]"; - util::AutoReadLock thrLock(g_pThreadsLockHandle COMMA_LOCKVAL_SRC_POS); - ThreadsMap::iterator it = g_mapThreads.find(RTThreadSelf()); - if (it != g_mapThreads.end()) - pcszPrefix = it->second.c_str(); - thrLock.release(); - - // make a timestamp - RTTIMESPEC ts; - RTTimeLocalNow(&ts); - RTTIME t; - RTTimeExplode(&t, &ts); - - com::Utf8StrFmt strPrefix("%04d-%02d-%02d %02d:%02d:%02d %s", - t.i32Year, t.u8Month, t.u8MonthDay, - t.u8Hour, t.u8Minute, t.u8Second, - pcszPrefix); - - // synchronize the actual output - util::AutoWriteLock logLock(g_pWebLogLockHandle COMMA_LOCKVAL_SRC_POS); - // terminal - RTPrintf("%s %s", strPrefix.c_str(), psz); - - // log file - if (g_pStrmLog) + if (g_fStdOutLogging || g_pStrmLog) { - RTStrmPrintf(g_pStrmLog, "%s %s", strPrefix.c_str(), psz); - RTStrmFlush(g_pStrmLog); - } + const char *pcszPrefix = "[ ]"; + util::AutoReadLock thrLock(g_pThreadsLockHandle COMMA_LOCKVAL_SRC_POS); + ThreadsMap::iterator it = g_mapThreads.find(RTThreadSelf()); + if (it != g_mapThreads.end()) + pcszPrefix = it->second.c_str(); + thrLock.release(); + + // make a timestamp + RTTIMESPEC ts; + RTTimeLocalNow(&ts); + RTTIME t; + RTTimeExplode(&t, &ts); + + com::Utf8StrFmt strPrefix("%04d-%02d-%02d %02d:%02d:%02d %s", + t.i32Year, t.u8Month, t.u8MonthDay, + t.u8Hour, t.u8Minute, t.u8Second, + pcszPrefix); + + // synchronize the actual output + util::AutoWriteLock logLock(g_pWebLogLockHandle COMMA_LOCKVAL_SRC_POS); + // terminal + if (g_fStdOutLogging) + RTPrintf("%s %s", strPrefix.c_str(), psz); + + // log file + if (g_pStrmLog) + { + RTStrmPrintf(g_pStrmLog, "%s %s", strPrefix.c_str(), psz); + RTStrmFlush(g_pStrmLog); + } #ifdef DEBUG - // logger instance - RTLogLoggerEx(LOG_INSTANCE, RTLOGGRPFLAGS_DJ, LOG_GROUP, "%s %s", pcszPrefix, psz); + // debug logger instance + RTLogLoggerEx(LOG_INSTANCE, RTLOGGRPFLAGS_DJ, LOG_GROUP, "%s %s", pcszPrefix, psz); #endif - logLock.release(); + + logLock.release(); + } + + LogRel(("%s", psz)); RTStrFree(psz); } @@ -560,9 +653,9 @@ void doQueuesLoop() int m, s; // master and slave sockets m = soap_bind(&soap, - g_pcszBindToHost, // host: current machine - g_uBindToPort, // port - g_uBacklog); // backlog = max queue size for requests + g_pcszBindToHost ? g_pcszBindToHost : "localhost", // safe default host + g_uBindToPort, // port + g_uBacklog); // backlog = max queue size for requests if (m < 0) WebLogSoapError(&soap); else @@ -623,7 +716,7 @@ int fntQPumper(RTTHREAD ThreadSelf, void *pvUser) * @param argv[] * @return */ -int main(int argc, char* argv[]) +int main(int argc, char *argv[]) { // initialize runtime int rc = RTR3Init(); @@ -647,7 +740,14 @@ int main(int argc, char* argv[]) switch (c) { case 'H': - g_pcszBindToHost = ValueUnion.psz; + if (!ValueUnion.psz || !*ValueUnion.psz) + { + /* Normalize NULL/empty string to NULL, which will be + * interpreted as "localhost" below. */ + g_pcszBindToHost = NULL; + } + else + g_pcszBindToHost = ValueUnion.psz; break; case 'p': @@ -711,9 +811,84 @@ int main(int argc, char* argv[]) #if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined (RT_OS_SOLARIS) || defined(RT_OS_FREEBSD) if (g_fDaemonize) { + /* prepare release logging */ + char szLogFile[RTPATH_MAX]; + + rc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile)); + if (RT_FAILURE(rc)) + return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not get base directory for logging: %Rrc", rc); + rc = RTPathAppend(szLogFile, sizeof(szLogFile), "vboxwebsrv.log"); + if (RT_FAILURE(rc)) + return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not construct logging path: %Rrc", rc); + rc = RTProcDaemonizeUsingFork(false /* fNoChDir */, false /* fNoClose */, pszPidFile); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to daemonize, rc=%Rrc. exiting.", rc); + + /* From now on it's a waste of CPU cycles to send logging to stdout. */ + g_fStdOutLogging = false; + + /* create release logger */ + PRTLOGGER loggerRelease; + static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES; + RTUINT fFlags = RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG; +#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2) + fFlags |= RTLOGFLAGS_USECRLF; +#endif + char szError[RTPATH_MAX + 128] = ""; + int vrc = RTLogCreateEx(&loggerRelease, fFlags, "all", + "VBOXWEBSRV_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, + RTLOGDEST_FILE, szError, sizeof(szError), szLogFile); + if (RT_SUCCESS(vrc)) + { + /* some introductory information */ + RTTIMESPEC timeSpec; + char szTmp[256]; + RTTimeSpecToString(RTTimeNow(&timeSpec), szTmp, sizeof(szTmp)); + RTLogRelLogger(loggerRelease, 0, ~0U, + "VirtualBox web service %s r%u %s (%s %s) release log\n" +#ifdef VBOX_BLEEDING_EDGE + "EXPERIMENTAL build " VBOX_BLEEDING_EDGE "\n" +#endif + "Log opened %s\n", + VBOX_VERSION_STRING, RTBldCfgRevision(), VBOX_BUILD_TARGET, + __DATE__, __TIME__, szTmp); + + vrc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, sizeof(szTmp)); + if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW) + RTLogRelLogger(loggerRelease, 0, ~0U, "OS Product: %s\n", szTmp); + vrc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szTmp, sizeof(szTmp)); + if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW) + RTLogRelLogger(loggerRelease, 0, ~0U, "OS Release: %s\n", szTmp); + vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp)); + if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW) + RTLogRelLogger(loggerRelease, 0, ~0U, "OS Version: %s\n", szTmp); + if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW) + RTLogRelLogger(loggerRelease, 0, ~0U, "OS Service Pack: %s\n", szTmp); + + /* the package type is interesting for Linux distributions */ + char szExecName[RTPATH_MAX]; + char *pszExecName = RTProcGetExecutablePath(szExecName, sizeof(szExecName)); + RTLogRelLogger(loggerRelease, 0, ~0U, + "Executable: %s\n" + "Process ID: %u\n" + "Package type: %s" +#ifdef VBOX_OSE + " (OSE)" +#endif + "\n", + pszExecName ? pszExecName : "unknown", + RTProcSelf(), + VBOX_PACKAGE_STRING); + + /* register this logger as the release logger */ + RTLogRelSetDefaultInstance(loggerRelease); + + /* Explicitly flush the log in case of VBOXWEBSRV_RELEASE_LOG=buffered. */ + RTLogFlush(loggerRelease); + } + else + return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, vrc); } #endif @@ -722,20 +897,10 @@ int main(int argc, char* argv[]) if (FAILED(hrc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to initialize COM! hrc=%Rhrc\n", hrc); - ComPtr<ISession> session; - - hrc = g_pVirtualBox.createLocalObject(CLSID_VirtualBox); - if (FAILED(hrc)) - RTMsgError("failed to create the VirtualBox object!"); - else - { - hrc = session.createInprocObject(CLSID_Session); - if (FAILED(hrc)) - RTMsgError("failed to create a session object!"); - } - + hrc = g_pVirtualBoxClient.createInprocObject(CLSID_VirtualBoxClient); if (FAILED(hrc)) { + RTMsgError("failed to create the VirtualBoxClient object!"); com::ErrorInfo info; if (!info.isFullAvailable() && !info.isBasicAvailable()) { @@ -747,8 +912,27 @@ int main(int argc, char* argv[]) return RTEXITCODE_FAILURE; } + hrc = g_pVirtualBoxClient->COMGETTER(VirtualBox)(g_pVirtualBox.asOutParam()); + if (FAILED(hrc)) + { + RTMsgError("Failed to get VirtualBox object (rc=%Rhrc)!", hrc); + return RTEXITCODE_FAILURE; + } + + /* VirtualBoxClient events registration. */ + IEventListener *vboxClientListener = NULL; + { + ComPtr<IEventSource> pES; + CHECK_ERROR(g_pVirtualBoxClient, COMGETTER(EventSource)(pES.asOutParam())); + vboxClientListener = new VirtualBoxClientEventListenerImpl(); + com::SafeArray<VBoxEventType_T> eventTypes; + eventTypes.push_back(VBoxEventType_OnVBoxSVCAvailabilityChanged); + CHECK_ERROR(pES, RegisterListener(vboxClientListener, ComSafeArrayAsInParam(eventTypes), true)); + } + // create the global mutexes g_pAuthLibLockHandle = new util::WriteLockHandle(util::LOCKCLASS_WEBSERVICE); + g_pVirtualBoxLockHandle = new util::RWLockHandle(util::LOCKCLASS_WEBSERVICE); g_pSessionsLockHandle = new util::WriteLockHandle(util::LOCKCLASS_WEBSERVICE); g_pThreadsLockHandle = new util::RWLockHandle(util::LOCKCLASS_OBJECTSTATE); g_pWebLogLockHandle = new util::WriteLockHandle(util::LOCKCLASS_WEBSERVICE); @@ -760,7 +944,7 @@ int main(int argc, char* argv[]) 0, // cbStack (default) RTTHREADTYPE_MAIN_WORKER, 0, // flags - "SoapQPumper"); + "SQPmp"); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "Cannot start SOAP queue pumper thread: %Rrc", rc); @@ -789,6 +973,16 @@ int main(int argc, char* argv[]) RTMsgError("processEventQueue -> %Rrc", rc); } + /* VirtualBoxClient events unregistration. */ + if (vboxClientListener) + { + ComPtr<IEventSource> pES; + CHECK_ERROR(g_pVirtualBoxClient, COMGETTER(EventSource)(pES.asOutParam())); + if (!pES.isNull()) + CHECK_ERROR(pES, UnregisterListener(vboxClientListener)); + vboxClientListener->Release(); + } + com::Shutdown(); return 0; @@ -1123,9 +1317,18 @@ WebServiceSession::~WebServiceSession() */ int WebServiceSession::authenticate(const char *pcszUsername, - const char *pcszPassword) + const char *pcszPassword, + IVirtualBox **ppVirtualBox) { int rc = VERR_WEB_NOT_AUTHENTICATED; + ComPtr<IVirtualBox> pVirtualBox; + { + util::AutoReadLock vlock(g_pVirtualBoxLockHandle COMMA_LOCKVAL_SRC_POS); + pVirtualBox = g_pVirtualBox; + } + pVirtualBox.queryInterfaceTo(ppVirtualBox); + if (pVirtualBox.isNull()) + return rc; util::AutoReadLock lock(g_pAuthLibLockHandle COMMA_LOCKVAL_SRC_POS); @@ -1138,7 +1341,7 @@ int WebServiceSession::authenticate(const char *pcszUsername, { // retrieve authentication library from system properties ComPtr<ISystemProperties> systemProperties; - g_pVirtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam()); + pVirtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam()); com::Bstr authLibrary; systemProperties->COMGETTER(WebServiceAuthLibrary)(authLibrary.asOutParam()); @@ -1218,7 +1421,8 @@ int WebServiceSession::authenticate(const char *pcszUsername, // now create the ISession object that this webservice session can use // (and of which IWebsessionManager::getSessionObject returns a managed object reference) ComPtr<ISession> session; - if (FAILED(rc = session.createInprocObject(CLSID_Session))) + rc = g_pVirtualBoxClient->COMGETTER(Session)(session.asOutParam()); + if (FAILED(rc)) { WEBDEBUG(("ERROR: cannot create session object!")); break; @@ -1537,7 +1741,7 @@ int __vbox__IManagedObjectRef_USCOREgetInterfaceName( _vbox__IManagedObjectRef_USCOREgetInterfaceName *req, _vbox__IManagedObjectRef_USCOREgetInterfaceNameResponse *resp) { - HRESULT rc = SOAP_OK; + HRESULT rc = S_OK; WEBDEBUG(("-- entering %s\n", __FUNCTION__)); do @@ -1572,7 +1776,7 @@ int __vbox__IManagedObjectRef_USCORErelease( _vbox__IManagedObjectRef_USCORErelease *req, _vbox__IManagedObjectRef_USCOREreleaseResponse *resp) { - HRESULT rc = SOAP_OK; + HRESULT rc = S_OK; WEBDEBUG(("-- entering %s\n", __FUNCTION__)); do @@ -1639,11 +1843,11 @@ int __vbox__IManagedObjectRef_USCORErelease( * @return */ int __vbox__IWebsessionManager_USCORElogon( - struct soap*, + struct soap *soap, _vbox__IWebsessionManager_USCORElogon *req, _vbox__IWebsessionManager_USCORElogonResponse *resp) { - HRESULT rc = SOAP_OK; + HRESULT rc = S_OK; WEBDEBUG(("-- entering %s\n", __FUNCTION__)); do @@ -1654,24 +1858,33 @@ int __vbox__IWebsessionManager_USCORElogon( // create new session; the constructor stores the new session // in the global map automatically WebServiceSession *pSession = new WebServiceSession(); + ComPtr<IVirtualBox> pVirtualBox; // authenticate the user if (!(pSession->authenticate(req->username.c_str(), - req->password.c_str()))) + req->password.c_str(), + pVirtualBox.asOutParam()))) { // in the new session, create a managed object reference (MOR) for the // global VirtualBox object; this encodes the session ID in the MOR so // that it will be implicitly be included in all future requests of this // webservice client - ComPtr<IUnknown> p2 = g_pVirtualBox; + ComPtr<IUnknown> p2 = pVirtualBox; + if (pVirtualBox.isNull() || p2.isNull()) + { + rc = E_FAIL; + break; + } ManagedObjectRef *pRef = new ManagedObjectRef(*pSession, p2, // IUnknown *pobjUnknown - g_pVirtualBox, // void *pobjInterface + pVirtualBox, // void *pobjInterface COM_IIDOF(IVirtualBox), g_pcszIVirtualBox); resp->returnval = pRef->getWSDLID(); WEBDEBUG(("VirtualBox object ref is %s\n", resp->returnval.c_str())); } + else + rc = E_FAIL; } while (0); WEBDEBUG(("-- leaving %s, rc: 0x%lX\n", __FUNCTION__, rc)); @@ -1689,7 +1902,7 @@ int __vbox__IWebsessionManager_USCOREgetSessionObject( _vbox__IWebsessionManager_USCOREgetSessionObject *req, _vbox__IWebsessionManager_USCOREgetSessionObjectResponse *resp) { - HRESULT rc = SOAP_OK; + HRESULT rc = S_OK; WEBDEBUG(("-- entering %s\n", __FUNCTION__)); do @@ -1722,7 +1935,7 @@ int __vbox__IWebsessionManager_USCORElogoff( _vbox__IWebsessionManager_USCORElogoff *req, _vbox__IWebsessionManager_USCORElogoffResponse *resp) { - HRESULT rc = SOAP_OK; + HRESULT rc = S_OK; WEBDEBUG(("-- entering %s\n", __FUNCTION__)); do diff --git a/src/VBox/Main/webservice/vboxweb.h b/src/VBox/Main/webservice/vboxweb.h index 02a72a9cc..c2824e4b3 100644 --- a/src/VBox/Main/webservice/vboxweb.h +++ b/src/VBox/Main/webservice/vboxweb.h @@ -2,7 +2,7 @@ * vboxweb.h: * header file for "real" web server code. * - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -54,7 +54,6 @@ typedef std::string vbox__uuid; * ****************************************************************************/ -extern ComPtr<IVirtualBox> g_pVirtualBox; extern bool g_fVerbose; extern PRTSTREAM g_pstrLog; @@ -133,7 +132,8 @@ class WebServiceSession ~WebServiceSession(); int authenticate(const char *pcszUsername, - const char *pcszPassword); + const char *pcszPassword, + IVirtualBox **ppVirtualBox); ManagedObjectRef* findRefFromPtr(const IUnknown *pObject); diff --git a/src/VBox/Main/xml/ovfreader.cpp b/src/VBox/Main/xml/ovfreader.cpp index 963249701..378df8fed 100644 --- a/src/VBox/Main/xml/ovfreader.cpp +++ b/src/VBox/Main/xml/ovfreader.cpp @@ -1,4 +1,4 @@ -/* $Id: ovfreader.cpp 34501 2010-11-30 12:30:30Z vboxsync $ */ +/* $Id: ovfreader.cpp 35566 2011-01-14 14:16:22Z vboxsync $ */ /** @file * * OVF reader declarations. Depends only on IPRT, including the iprt::MiniString @@ -422,6 +422,13 @@ void OVFReader::HandleVirtualSystemContent(const xml::ElementNode *pelmVirtualSy uint32_t ulType; pelmItemChild->copyValue(ulType); i.resourceType = (ResourceType_T)ulType; + i.fResourceRequired = true; + const char *pcszAttValue; + if (pelmItem->getAttributeValue("required", pcszAttValue)) + { + if (!strcmp(pcszAttValue, "false")) + i.fResourceRequired = false; + } } else if (!strcmp(pcszItemChildName, "OtherResourceType")) i.strOtherResourceType = pelmItemChild->getValue(); @@ -690,10 +697,16 @@ void OVFReader::HandleVirtualSystemContent(const xml::ElementNode *pelmVirtualSy break; default: - throw OVFLogicError(N_("Error reading \"%s\": Unknown resource type %d in hardware item, line %d"), - m_strPath.c_str(), - i.resourceType, - i.ulLineNumber); + { + /* If this unknown resource type isn't required, we simply skip it. */ + if (i.fResourceRequired) + { + throw OVFLogicError(N_("Error reading \"%s\": Unknown resource type %d in hardware item, line %d"), + m_strPath.c_str(), + i.resourceType, + i.ulLineNumber); + } + } } // end switch } @@ -737,11 +750,11 @@ void OVFReader::HandleVirtualSystemContent(const xml::ElementNode *pelmVirtualSy i.strAddressOnParent.toInt(vd.ulAddressOnParent); // ovf://disk/lamp // 123456789012345 - if (i.strHostResource.substr(0, 11) == "ovf://disk/") + if (i.strHostResource.startsWith("ovf://disk/")) vd.strDiskId = i.strHostResource.substr(11); - else if (i.strHostResource.substr(0, 10) == "ovf:/disk/") + else if (i.strHostResource.startsWith("ovf:/disk/")) vd.strDiskId = i.strHostResource.substr(10); - else if (i.strHostResource.substr(0, 6) == "/disk/") + else if (i.strHostResource.startsWith("/disk/")) vd.strDiskId = i.strHostResource.substr(6); if ( !(vd.strDiskId.length()) diff --git a/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp b/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp index d2a05532f..ab76ae1bf 100644 --- a/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp +++ b/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxNetDHCP.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VBoxNetDHCP.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBoxNetDHCP - DHCP Service for connecting to IntNet. */ @@ -39,7 +39,7 @@ #include <VBox/sup.h> #include <VBox/intnet.h> #include <VBox/intnetinline.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include <VBox/version.h> #include "../NetLib/VBoxNetLib.h" diff --git a/src/VBox/NetworkServices/NAT/Makefile.kmk b/src/VBox/NetworkServices/NAT/Makefile.kmk index a82322a45..41b2622a4 100644 --- a/src/VBox/NetworkServices/NAT/Makefile.kmk +++ b/src/VBox/NetworkServices/NAT/Makefile.kmk @@ -1,3 +1,19 @@ +# $Id: Makefile.kmk 35489 2011-01-11 15:08:12Z vboxsync $ +## @file +# + +# +# Copyright (C) 2006-2011 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + SUB_DEPTH = ../../../.. include $(KBUILD_PATH)/subheader.kmk diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp b/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp index 9b9a9578b..44ffb3c2b 100644 --- a/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp +++ b/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxNetIntIf.cpp 35163 2010-12-16 07:37:00Z vboxsync $ */ +/* $Id: VBoxNetIntIf.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBoxNetIntIf - IntNet Interface Client Routines. */ @@ -23,7 +23,7 @@ #include <VBox/intnet.h> #include <VBox/intnetinline.h> #include <VBox/sup.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp b/src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp index 5b044cf21..f660c394f 100644 --- a/src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp +++ b/src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxNetUDP.cpp 31272 2010-08-02 09:11:22Z vboxsync $ */ +/* $Id: VBoxNetUDP.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBoxNetUDP - IntNet UDP Client Routines. */ @@ -24,7 +24,7 @@ #include <iprt/string.h> #include <iprt/rand.h> #include <VBox/log.h> -#include <VBox/pdmnetinline.h> +#include <VBox/vmm/pdmnetinline.h> #include <VBox/intnetinline.h> diff --git a/src/VBox/RDP/client/Makefile.kmk b/src/VBox/RDP/client/Makefile.kmk index afde4253f..2e71ff02f 100644 --- a/src/VBox/RDP/client/Makefile.kmk +++ b/src/VBox/RDP/client/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 32472 2010-09-14 10:26:19Z vboxsync $ +# $Id: Makefile.kmk 35368 2010-12-30 13:38:23Z vboxsync $ ## @file # VBox - rdesktop with VRDP enhancements sub-makefile. # @@ -22,7 +22,7 @@ include $(KBUILD_PATH)/subheader.kmk VBOX_PATH_RDESKTOP_SRC := $(PATH_SUB_CURRENT) VBOX_PATH_DEVICES_USB := $(PATH_ROOT)/src/VBox/Devices/USB VBOX_PATH_USB_LIB := $(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB -VBOX_PATH_MAIN_LINUX := $(PATH_ROOT)/src/VBox/Main/linux +VBOX_PATH_MAIN_LINUX := $(PATH_ROOT)/src/VBox/Main/src-server/linux VBOX_PATH_MAIN_INCLUDE := $(PATH_ROOT)/src/VBox/Main/include VBOX_RDESKTOP_SRC_SUBDIR = rdesktop-1.6.0-vrdp diff --git a/src/VBox/RDP/client/files_rdesktop-vrdp b/src/VBox/RDP/client/files_rdesktop-vrdp index 948a17afe..d80d7f6bb 100644 --- a/src/VBox/RDP/client/files_rdesktop-vrdp +++ b/src/VBox/RDP/client/files_rdesktop-vrdp @@ -1,4 +1,4 @@ -# $Id: files_rdesktop-vrdp 32472 2010-09-14 10:26:19Z vboxsync $ +# $Id: files_rdesktop-vrdp 35368 2010-12-30 13:38:23Z vboxsync $ ## @file # VBox - rdesktop with VRDP enhancements archive file list. # @@ -15,6 +15,8 @@ # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. # +## @todo r=bird: Why is this in a separate file when only the Makefile.kmk is referring it? + rdesktop-nonbin_SOURCES = \ $(PATH_OUT)/product-generated.h=>include/product-generated.h \ $(PATH_OUT)/version-generated.h=>include/version-generated.h \ @@ -66,7 +68,7 @@ rdesktop-nonbin_SOURCES = \ $(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/USBLib.cpp=>vrdp/USBLib.cpp \ $(PATH_ROOT)/src/VBox/Main/include/USBGetDevices.h=>vrdp/USBGetDevices.h \ $(PATH_ROOT)/src/VBox/Main/include/vector.h=>vrdp/vector.h \ - $(PATH_ROOT)/src/VBox/Main/linux/USBGetDevices.cpp=>vrdp/USBGetDevices.cpp \ + $(PATH_ROOT)/src/VBox/Main/src-server/linux/USBGetDevices.cpp=>vrdp/USBGetDevices.cpp \ $(PATH_ROOT)/src/VBox/RDP/client/bitmap.c=>bitmap.c \ $(PATH_ROOT)/src/VBox/RDP/client/bootstrap=>bootstrap \ $(PATH_ROOT)/src/VBox/RDP/client/cache.c=>cache.c \ @@ -232,3 +234,4 @@ rdesktop-nonbin_SOURCES = \ $(PATH_ROOT)/src/VBox/Runtime/r3/posix/path-posix.cpp=>Runtime/r3/posix/path-posix.cpp \ $(PATH_ROOT)/src/VBox/Runtime/r3/posix/utf8-posix.cpp=>Runtime/r3/posix/utf8-posix.cpp \ $(PATH_ROOT)/src/VBox/Runtime/r3/stream.cpp=>Runtime/r3/stream.cpp + diff --git a/src/VBox/RDP/client/rdesktop.c b/src/VBox/RDP/client/rdesktop.c index 125266a97..d74c7700f 100644 --- a/src/VBox/RDP/client/rdesktop.c +++ b/src/VBox/RDP/client/rdesktop.c @@ -41,6 +41,7 @@ #ifdef VBOX # include <VBox/version.h> +# include <iprt/log.h> #endif #ifdef HAVE_LOCALE_H @@ -432,6 +433,14 @@ parse_server_and_port(char *server) } +#ifdef VBOX +/* This disables iprt logging */ +DECLEXPORT(PRTLOGGER) RTLogDefaultInit(void) +{ + return NULL; +} +#endif + /* Client program */ int main(int argc, char *argv[]) diff --git a/src/VBox/RDP/client/vrdp/rdpusb.c b/src/VBox/RDP/client/vrdp/rdpusb.c index 11c141f52..09bcded14 100644 --- a/src/VBox/RDP/client/vrdp/rdpusb.c +++ b/src/VBox/RDP/client/vrdp/rdpusb.c @@ -148,10 +148,9 @@ static inline void op_usbproxy_back_cancel_urb(PVUSBURB pUrb) /** Count the USB devices in a linked list of PUSBDEVICE structures. */ unsigned countUSBDevices(PUSBDEVICE pDevices) { - unsigned i; - PUSBDEVICE pDevice; - for (i = 0, pDevice = pDevices; pDevices->pNext; - ++i, pDevices = pDevices->pNext); + unsigned i = 0; + for (; pDevices; pDevices = pDevices->pNext) + ++i; return i; } @@ -225,17 +224,47 @@ static void fillWireListEntry(char *pBuf, PUSBDEVICE pDevice, static void *buildWireListFromDevices(PUSBDEVICE pDevices, int *pLen) { char *pBuf; - unsigned cbBuf, iCurrent; + unsigned cDevs, cbBuf, iCurrent; uint16_t iNext; PUSBDEVICE pCurrent; - cbBuf = countUSBDevices(pDevices) * DEV_ENTRY_SIZE + 2; + cDevs = countUSBDevices(pDevices); + cbBuf = cDevs * DEV_ENTRY_SIZE + 2; pBuf = (char *)xmalloc(cbBuf); memset(pBuf, 0, cbBuf); for (pCurrent = pDevices, iCurrent = 0; pCurrent; - pCurrent = pCurrent->pNext, iCurrent += iNext) + pCurrent = pCurrent->pNext, iCurrent += iNext, --cDevs) + { + unsigned i, cZeros; + + AssertReturnVoidStmt(iCurrent + DEV_ENTRY_SIZE + 2 <= cbBuf, + free(pBuf)); fillWireListEntry(pBuf + iCurrent, pCurrent, &iNext); + DevListEntry *pEntry = (DevListEntry *)(pBuf + iCurrent); + /* Sanity tests */ + for (i = iCurrent + sizeof(DevListEntry), cZeros = 0; + i < iCurrent + iNext; ++i) + if (pBuf[i] == 0) + ++cZeros; + AssertReturnVoidStmt(cZeros == RT_BOOL(pEntry->oManufacturer) + + RT_BOOL(pEntry->oProduct) + + RT_BOOL(pEntry->oSerialNumber), + free(pBuf)); + AssertReturnVoidStmt( pEntry->oManufacturer == 0 + || pBuf[pEntry->oManufacturer] != '\0', + free(pBuf)); + AssertReturnVoidStmt( pEntry->oProduct == 0 + || pBuf[pEntry->oProduct] != '\0', + free(pBuf)); + AssertReturnVoidStmt( pEntry->oSerialNumber == 0 + || pBuf[pEntry->oSerialNumber] != '\0', + free(pBuf)); + AssertReturnVoidStmt(cZeros == 0 || pBuf[iCurrent + iNext - 1] == '\0', + free(pBuf)); + } *pLen = iCurrent + iNext + 2; + Assert(cDevs == 0); + Assert(*pLen <= cbBuf); return pBuf; } diff --git a/src/VBox/Runtime/Makefile.kmk b/src/VBox/Runtime/Makefile.kmk index 01ec30b75..e26027b57 100644 --- a/src/VBox/Runtime/Makefile.kmk +++ b/src/VBox/Runtime/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 35182 2010-12-16 13:57:44Z vboxsync $ +# $Id: Makefile.kmk 35585 2011-01-17 14:20:13Z vboxsync $ ## @file # Sub-Makefile for the IPRT (IPRT). # @@ -32,7 +32,7 @@ ifdef VBOX_ONLY_ADDITIONS # Only build the additions, sort out the legacy names first. # LIBRARIES += RuntimeGuestR3 RuntimeGuestR3Shared RuntimeGuestR3Mini - LIBRARIES.win.amd64 += RuntimeGuestR3-x86 + LIBRARIES.win.amd64 += RuntimeGuestR3-x86 RuntimeGuestR3Shared-x86 ifdef VBOX_WITH_ADDITION_DRIVERS LIBRARIES += RuntimeGuestR0 #LIBRARIES.os2 += RuntimeGuestR0OS2Warp3 @@ -85,7 +85,7 @@ else # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS endif ifdef VBOX_WITH_ADDITIONS LIBRARIES += RuntimeGuestR3 RuntimeGuestR3Shared RuntimeGuestR3Mini - LIBRARIES.win.amd64 += RuntimeGuestR3-x86 + LIBRARIES.win.amd64 += RuntimeGuestR3-x86 RuntimeGuestR3Shared-x86 ifdef VBOX_WITH_ADDITION_DRIVERS LIBRARIES += RuntimeGuestR0 endif @@ -364,6 +364,7 @@ RuntimeR3_SOURCES = \ common/string/simplepattern.cpp \ common/string/straprintf.cpp \ common/string/strformat.cpp \ + common/string/strformatnum.cpp \ common/string/strformatrt.cpp \ common/string/strformattype.cpp \ common/string/stringalloc.cpp \ @@ -1011,6 +1012,13 @@ RuntimeGuestR3Shared_INST = $(INST_ADDITIONS_LIB) # +# RuntimeGuestR3Shared-x86 - Same as RuntimeGuestR3Shared, except that it's targeting x86. +# +RuntimeGuestR3Shared-x86_EXTENDS := RuntimeGuestR3Shared +RuntimeGuestR3Shared-x86_BLD_TRG_ARCH := x86 + + +# # RuntimeGuestR3Mini - Minimal Guest Additions Runtime which does not require # initialization and can be linked into an .so. Intended # for X11 drivers, GRADD and similar. @@ -1072,6 +1080,7 @@ RuntimeGuestR3Mini_SOURCES = \ common/string/RTStrStr.cpp \ common/string/straprintf.cpp \ common/string/strformat.cpp \ + common/string/strformatnum.cpp \ common/string/strformatrt.cpp \ common/string/strformattype.cpp \ common/string/stringalloc.cpp \ @@ -1152,7 +1161,7 @@ RuntimeLnxHostR3_INCS = \ # # VBoxRT - Shared Object / DLL version. # -VBoxRT_TEMPLATE = VBoxR3Dll +VBoxRT_TEMPLATE = VBoxR3DllNoPic VBoxRT_SDKS = VBOX_OPENSSL VBOX_LIBXML2 VBOX_BOOST ifdef VBOX_WITH_LIBCURL VBoxRT_SDKS += VBOX_LIBCURL @@ -1273,7 +1282,7 @@ VBoxRTDummy_LIBS = $(PATH_BIN)/VBoxRT.so VBoxRTDummy_CLEAN= $(PATH_BIN)/VBoxRT.so BLDDIRS += $(PATH_BIN) -$(PATH_BIN)/VBoxRT.so: $$(TARGET_VBoxRT) | $$(dir $$@) +$(PATH_BIN)/VBoxRT.so: $$(VBoxRT_1_TARGET) | $$(dir $$@) $(INSTALL) $< $@ chcon -t texrel_shlib_t $@ || true @@ -1548,6 +1557,7 @@ RuntimeR0Drv_SOURCES = \ common/string/RTStrNLen.cpp \ common/string/RTStrNLenEx.cpp \ common/string/strformat.cpp \ + common/string/strformatnum.cpp \ common/string/strformatrt.cpp \ common/string/strformattype.cpp \ common/string/strprintf.cpp \ @@ -1874,6 +1884,7 @@ ifdef VBOX_WITH_RAW_MODE common/misc/sanity-c.c \ common/misc/sanity-cpp.cpp \ common/string/strformat.cpp \ + common/string/strformatnum.cpp \ common/string/strformatrt.cpp \ common/string/strformattype.cpp \ common/string/strncmp.cpp \ diff --git a/src/VBox/Runtime/common/alloc/heapoffset.cpp b/src/VBox/Runtime/common/alloc/heapoffset.cpp index e2b5d19e0..fd5d0e96d 100644 --- a/src/VBox/Runtime/common/alloc/heapoffset.cpp +++ b/src/VBox/Runtime/common/alloc/heapoffset.cpp @@ -1,4 +1,4 @@ -/* $Id: heapoffset.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: heapoffset.cpp 35525 2011-01-13 14:00:37Z vboxsync $ */ /** @file * IPRT - An Offset Based Heap. */ @@ -34,10 +34,10 @@ #include <iprt/assert.h> #include <iprt/asm.h> -#include <iprt/string.h> #include <iprt/err.h> #include <iprt/log.h> #include <iprt/param.h> +#include <iprt/string.h> #include "internal/magics.h" diff --git a/src/VBox/Runtime/common/alloc/heapsimple.cpp b/src/VBox/Runtime/common/alloc/heapsimple.cpp index fe7c95f64..3377e6597 100644 --- a/src/VBox/Runtime/common/alloc/heapsimple.cpp +++ b/src/VBox/Runtime/common/alloc/heapsimple.cpp @@ -1,4 +1,4 @@ -/* $Id: heapsimple.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: heapsimple.cpp 35525 2011-01-13 14:00:37Z vboxsync $ */ /** @file * IPRT - A Simple Heap. */ @@ -34,9 +34,9 @@ #include <iprt/assert.h> #include <iprt/asm.h> -#include <iprt/string.h> #include <iprt/err.h> #include <iprt/log.h> +#include <iprt/string.h> #include <iprt/param.h> #include "internal/magics.h" diff --git a/src/VBox/Runtime/common/checksum/manifest-file.cpp b/src/VBox/Runtime/common/checksum/manifest-file.cpp index 77ac56d92..602c99d49 100644 --- a/src/VBox/Runtime/common/checksum/manifest-file.cpp +++ b/src/VBox/Runtime/common/checksum/manifest-file.cpp @@ -1,4 +1,4 @@ -/* $Id: manifest-file.cpp 34381 2010-11-25 15:49:11Z vboxsync $ */ +/* $Id: manifest-file.cpp 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * IPRT - Manifest, the bits with file dependencies */ @@ -82,4 +82,3 @@ RTDECL(int) RTManifestWriteStandardToFile(RTMANIFEST hManifest, const char *pszF return rc; } - diff --git a/src/VBox/Runtime/common/checksum/manifest3.cpp b/src/VBox/Runtime/common/checksum/manifest3.cpp index 975a6b919..cf06cd064 100644 --- a/src/VBox/Runtime/common/checksum/manifest3.cpp +++ b/src/VBox/Runtime/common/checksum/manifest3.cpp @@ -1,4 +1,4 @@ -/* $Id: manifest3.cpp 34537 2010-11-30 18:11:51Z vboxsync $ */ +/* $Id: manifest3.cpp 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * IPRT - Manifest, the bits with the most dependencies. */ @@ -548,5 +548,3 @@ RTDECL(int) RTManifestEntryAddIoStream(RTMANIFEST hManifest, RTVFSIOSTREAM hVfsI return rc; } - - diff --git a/src/VBox/Runtime/common/misc/sanity.h b/src/VBox/Runtime/common/misc/sanity.h index 4783c4ab1..97c7dc077 100644 --- a/src/VBox/Runtime/common/misc/sanity.h +++ b/src/VBox/Runtime/common/misc/sanity.h @@ -1,4 +1,4 @@ -/* $Id: sanity.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: sanity.h 35512 2011-01-12 17:50:12Z vboxsync $ */ /** @file * IPRT - Setup Sanity Checks, C and C++. */ @@ -208,4 +208,8 @@ AssertCompileSize(RTUINT16U, 2); AssertCompileSize(RTUINT32U, 4); AssertCompileSize(RTUINT64U, 8); AssertCompileSize(RTUINT128U, 16); +/*AssertCompileSize(RTFLOAT32U, 8);*/ +AssertCompileSize(RTFLOAT64U, 8); +AssertCompileSize(RTFLOAT80U, 10); +/*AssertCompileSize(RTFLOAT128U, 16);*/ diff --git a/src/VBox/Runtime/common/string/ministring.cpp b/src/VBox/Runtime/common/string/ministring.cpp index 38178bf21..16729c6d3 100644 --- a/src/VBox/Runtime/common/string/ministring.cpp +++ b/src/VBox/Runtime/common/string/ministring.cpp @@ -1,4 +1,4 @@ -/* $Id: ministring.cpp 35128 2010-12-15 12:38:41Z vboxsync $ */ +/* $Id: ministring.cpp 35567 2011-01-14 14:16:45Z vboxsync $ */ /** @file * IPRT - Mini C++ string class. * @@ -223,7 +223,7 @@ void MiniString::findReplace(char cFind, char cReplace) } } -MiniString MiniString::substr(size_t pos /*= 0*/, size_t n /*= npos*/) +MiniString MiniString::substrCP(size_t pos /*= 0*/, size_t n /*= npos*/) const { MiniString ret; @@ -255,13 +255,16 @@ MiniString MiniString::substr(size_t pos /*= 0*/, size_t n /*= npos*/) return ret; // return empty string on bad encoding size_t cbCopy = psz - pFirst; - ret.reserve(cbCopy + 1); // may throw bad_alloc + if (cbCopy) + { + ret.reserve(cbCopy + 1); // may throw bad_alloc #ifndef RT_EXCEPTIONS_ENABLED - AssertRelease(capacity() >= cbCopy + 1); + AssertRelease(capacity() >= cbCopy + 1); #endif - memcpy(ret.m_psz, pFirst, cbCopy); - ret.m_cch = cbCopy; - ret.m_psz[cbCopy] = '\0'; + memcpy(ret.m_psz, pFirst, cbCopy); + ret.m_cch = cbCopy; + ret.m_psz[cbCopy] = '\0'; + } } } } diff --git a/src/VBox/Runtime/common/string/strformatnum.cpp b/src/VBox/Runtime/common/string/strformatnum.cpp new file mode 100644 index 000000000..171cd1918 --- /dev/null +++ b/src/VBox/Runtime/common/string/strformatnum.cpp @@ -0,0 +1,252 @@ +/* $Id: strformatnum.cpp 35585 2011-01-17 14:20:13Z vboxsync $ */ +/** @file + * IPRT - String Formatter, Single Numbers. + */ + +/* + * Copyright (C) 2010 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#define LOG_GROUP RTLOGGROUP_STRING +#include <iprt/string.h> +#include "internal/iprt.h" + +#include <iprt/assert.h> +#include "internal/string.h" + + +RTDECL(ssize_t) RTStrFormatU8(char *pszBuf, size_t cbBuf, uint8_t u8Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags) +{ + fFlags &= ~RTSTR_F_BIT_MASK; + fFlags |= RTSTR_F_8BIT; + + ssize_t cchRet; + if (cbBuf >= 64) + cchRet = RTStrFormatNumber(pszBuf, u8Value, uiBase, cchWidth, cchPrecision, fFlags); + else + { + char szTmp[64]; + cchRet = RTStrFormatNumber(szTmp, u8Value, uiBase, cchWidth, cchPrecision, fFlags); + if ((size_t)cchRet <= cbBuf) + memcpy(pszBuf, szTmp, cchRet + 1); + else + { + if (cbBuf) + { + memcpy(pszBuf, szTmp, cbBuf - 1); + pszBuf[cbBuf - 1] = '\0'; + } + cchRet = VERR_BUFFER_OVERFLOW; + } + } + return cchRet; +} + + +RTDECL(ssize_t) RTStrFormatU16(char *pszBuf, size_t cbBuf, uint16_t u16Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags) +{ + fFlags &= ~RTSTR_F_BIT_MASK; + fFlags |= RTSTR_F_16BIT; + + ssize_t cchRet; + if (cbBuf >= 64) + cchRet = RTStrFormatNumber(pszBuf, u16Value, uiBase, cchWidth, cchPrecision, fFlags); + else + { + char szTmp[64]; + cchRet = RTStrFormatNumber(szTmp, u16Value, uiBase, cchWidth, cchPrecision, fFlags); + if ((size_t)cchRet <= cbBuf) + memcpy(pszBuf, szTmp, cchRet + 1); + else + { + if (cbBuf) + { + memcpy(pszBuf, szTmp, cbBuf - 1); + pszBuf[cbBuf - 1] = '\0'; + } + cchRet = VERR_BUFFER_OVERFLOW; + } + } + return cchRet; +} + + +RTDECL(ssize_t) RTStrFormatU32(char *pszBuf, size_t cbBuf, uint32_t u32Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags) +{ + fFlags &= ~RTSTR_F_BIT_MASK; + fFlags |= RTSTR_F_32BIT; + + ssize_t cchRet; + if (cbBuf >= 64) + cchRet = RTStrFormatNumber(pszBuf, u32Value, uiBase, cchWidth, cchPrecision, fFlags); + else + { + char szTmp[64]; + cchRet = RTStrFormatNumber(szTmp, u32Value, uiBase, cchWidth, cchPrecision, fFlags); + if ((size_t)cchRet <= cbBuf) + memcpy(pszBuf, szTmp, cchRet + 1); + else + { + if (cbBuf) + { + memcpy(pszBuf, szTmp, cbBuf - 1); + pszBuf[cbBuf - 1] = '\0'; + } + cchRet = VERR_BUFFER_OVERFLOW; + } + } + return cchRet; +} + + +RTDECL(ssize_t) RTStrFormatU64(char *pszBuf, size_t cbBuf, uint64_t u64Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags) +{ + fFlags &= ~RTSTR_F_BIT_MASK; + fFlags |= RTSTR_F_64BIT; + + ssize_t cchRet; + if (cbBuf >= 64) + cchRet = RTStrFormatNumber(pszBuf, u64Value, uiBase, cchWidth, cchPrecision, fFlags); + else + { + char szTmp[64]; + cchRet = RTStrFormatNumber(szTmp, u64Value, uiBase, cchWidth, cchPrecision, fFlags); + if ((size_t)cchRet <= cbBuf) + memcpy(pszBuf, szTmp, cchRet + 1); + else + { + if (cbBuf) + { + memcpy(pszBuf, szTmp, cbBuf - 1); + pszBuf[cbBuf - 1] = '\0'; + } + cchRet = VERR_BUFFER_OVERFLOW; + } + } + return cchRet; +} + + +RTDECL(ssize_t) RTStrFormatU128(char *pszBuf, size_t cbBuf, PCRTUINT128U pu128, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags) +{ + if (uiBase != 16) + fFlags |= RTSTR_F_SPECIAL; + fFlags &= ~RTSTR_F_BIT_MASK; + + char szTmp[64+32]; + size_t cchFirst = RTStrFormatNumber(szTmp, pu128->s.Hi, 16, 0, 0, fFlags | RTSTR_F_64BIT); + size_t cchSecond = RTStrFormatNumber(&szTmp[cchFirst], pu128->s.Lo, 16, 8, 0, + (fFlags | RTSTR_F_64BIT | RTSTR_F_ZEROPAD) & ~RTSTR_F_SPECIAL); + int rc = RTStrCopy(pszBuf, cbBuf, szTmp); + if (RT_FAILURE(rc)) + return rc; + return cchFirst + cchSecond; +} + + +RTDECL(ssize_t) RTStrFormatR80u2(char *pszBuf, size_t cbBuf, PCRTFLOAT80U2 pr80Value, signed int cchWidth, + signed int cchPrecision, uint32_t fFlags) +{ + char szTmp[160]; + + char *pszTmp = szTmp; + if (pr80Value->s.fSign) + *pszTmp++ = '-'; + else + *pszTmp++ = '+'; + + if (pr80Value->s.uExponent == 0) + { + if ( !pr80Value->sj64.u63Fraction + && pr80Value->sj64.fInteger) + *pszTmp++ = '0'; + /* else: Denormal, handled way below. */ + } + else if (pr80Value->sj64.uExponent == UINT16_C(0x7fff)) + { + /** @todo Figure out Pseudo inf/nan... */ + if (pr80Value->sj64.fInteger) + *pszTmp++ = 'P'; + if (pr80Value->sj64.u63Fraction == 0) + { + *pszTmp++ = 'I'; + *pszTmp++ = 'n'; + *pszTmp++ = 'f'; + } + else + { + *pszTmp++ = 'N'; + *pszTmp++ = 'a'; + *pszTmp++ = 'N'; + } + } + if (pszTmp != &szTmp[1]) + *pszTmp = '\0'; + else + { + *pszTmp++ = pr80Value->sj64.fInteger ? '1' : '0'; + *pszTmp++ = 'm'; + pszTmp += RTStrFormatNumber(pszTmp, pr80Value->sj64.u63Fraction, 16, 2+16, 0, + RTSTR_F_SPECIAL | RTSTR_F_ZEROPAD | RTSTR_F_64BIT); + + *pszTmp++ = 'e'; + pszTmp += RTStrFormatNumber(pszTmp, (int32_t)pr80Value->sj64.uExponent - 16383, 10, 0, 0, + RTSTR_F_ZEROPAD | RTSTR_F_32BIT | RTSTR_F_VALSIGNED); + } + + /* + * Copy out the result. + */ + ssize_t cchRet = pszTmp - &szTmp[0]; + if ((size_t)cchRet <= cbBuf) + memcpy(pszBuf, szTmp, cchRet + 1); + else + { + if (cbBuf) + { + memcpy(pszBuf, szTmp, cbBuf - 1); + pszBuf[cbBuf - 1] = '\0'; + } + cchRet = VERR_BUFFER_OVERFLOW; + } + return cchRet; +} + + +RTDECL(ssize_t) RTStrFormatR80(char *pszBuf, size_t cbBuf, PCRTFLOAT80U pr80Value, signed int cchWidth, + signed int cchPrecision, uint32_t fFlags) +{ + RTFLOAT80U2 r80ValueU2; + RT_ZERO(r80ValueU2); + r80ValueU2.s.fSign = pr80Value->s.fSign; + r80ValueU2.s.uExponent = pr80Value->s.uExponent; + r80ValueU2.s.u64Mantissa = pr80Value->s.u64Mantissa; + return RTStrFormatR80u2(pszBuf, cbBuf, &r80ValueU2, cchWidth, cchPrecision, fFlags); +} + diff --git a/src/VBox/Runtime/common/string/strspace.cpp b/src/VBox/Runtime/common/string/strspace.cpp index 304035f40..809c867f8 100644 --- a/src/VBox/Runtime/common/string/strspace.cpp +++ b/src/VBox/Runtime/common/string/strspace.cpp @@ -1,4 +1,4 @@ -/* $Id: strspace.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: strspace.cpp 35464 2011-01-10 16:30:27Z vboxsync $ */ /** @file * IPRT - Unique String Spaces. */ @@ -96,6 +96,19 @@ DECLINLINE(uint32_t) sdbm(const char *str, size_t *pcch) return hash; } +DECLINLINE(uint32_t) sdbmN(const char *str, size_t cchMax, size_t *pcch) +{ + uint8_t *pu8 = (uint8_t *)str; + uint32_t hash = 0; + int c; + + while ((c = *pu8++) && cchMax-- > 0) + hash = c + (hash << 6) + (hash << 16) - hash; + + *pcch = (uintptr_t)pu8 - (uintptr_t)str - 1; + return hash; +} + /** * Inserts a string into a unique string space. @@ -199,6 +212,34 @@ RTDECL(PRTSTRSPACECORE) RTStrSpaceGet(PRTSTRSPACE pStrSpace, const char *pszStri RT_EXPORT_SYMBOL(RTStrSpaceGet); +/** + * Gets a string from a unique string space. + * + * @returns Pointer to the string node. + * @returns NULL if the string was not found in the string space. + * @param pStrSpace The space to insert it into. + * @param pszString The string to get. + * @param cchMax The max string length to evaluate. Passing + * RTSTR_MAX is ok and makes it behave just like + * RTStrSpaceGet. + */ +RTDECL(PRTSTRSPACECORE) RTStrSpaceGetN(PRTSTRSPACE pStrSpace, const char *pszString, size_t cchMax) +{ + size_t cchString; + KAVLKEY Key = sdbmN(pszString, cchMax, &cchString); + PRTSTRSPACECORE pCur = KAVL_FN(Get)(pStrSpace, Key); + if (!pCur) + return NULL; + + /* Linear search. */ + for (; pCur; pCur = pCur->pList) + if ( pCur->cchString == cchString + && !memcmp(pCur->pszString, pszString, cchString)) + return pCur; + return NULL; +} +RT_EXPORT_SYMBOL(RTStrSpaceGetN); + /** * Enumerates the string space. diff --git a/src/VBox/Runtime/common/zip/tar.cpp b/src/VBox/Runtime/common/zip/tar.cpp index 574ab7eac..d59dcb963 100644 --- a/src/VBox/Runtime/common/zip/tar.cpp +++ b/src/VBox/Runtime/common/zip/tar.cpp @@ -1,4 +1,4 @@ -/* $Id: tar.cpp 35122 2010-12-15 11:28:30Z vboxsync $ */ +/* $Id: tar.cpp 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * IPRT - Tar archive I/O. */ @@ -228,10 +228,11 @@ DECLINLINE(void) rtTarSizeToRec(PRTTARRECORD pRecord, uint64_t cbSize) DECLINLINE(uint64_t) rtTarRecToSize(PRTTARRECORD pRecord) { int64_t cbSize = 0; - if (pRecord->h.size[0] & 0x80) + if (pRecord->h.size[0] & 0x80) { size_t cchField = sizeof(pRecord->h.size); unsigned char const *puchField = (unsigned char const *)pRecord->h.size; + /* * The first byte has the bit 7 set to indicate base-256, while bit 6 * is the signed bit. Bits 5:0 are the most significant value bits. @@ -240,6 +241,7 @@ DECLINLINE(uint64_t) rtTarRecToSize(PRTTARRECORD pRecord) cbSize = (cbSize << 6) | (*puchField & 0x3f); cchField--; puchField++; + /* * The remaining bytes are used in full. */ @@ -253,7 +255,8 @@ DECLINLINE(uint64_t) rtTarRecToSize(PRTTARRECORD pRecord) } cbSize = (cbSize << 8) | *puchField++; } - }else + } + else RTStrToInt64Full(pRecord->h.size, 8, &cbSize); if (cbSize < 0) diff --git a/src/VBox/Runtime/common/zip/tarcmd.cpp b/src/VBox/Runtime/common/zip/tarcmd.cpp index c2fb84e53..45a104731 100644 --- a/src/VBox/Runtime/common/zip/tarcmd.cpp +++ b/src/VBox/Runtime/common/zip/tarcmd.cpp @@ -1,4 +1,4 @@ -/* $Id: tarcmd.cpp 34179 2010-11-18 15:49:17Z vboxsync $ */ +/* $Id: tarcmd.cpp 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * IPRT - TAR Command. */ @@ -667,4 +667,3 @@ RTDECL(RTEXITCODE) RTZipTarCmd(unsigned cArgs, char **papszArgs) } } - diff --git a/src/VBox/Runtime/include/internal/lockvalidator.h b/src/VBox/Runtime/include/internal/lockvalidator.h index 2cc9b5cca..0cc7796f2 100644 --- a/src/VBox/Runtime/include/internal/lockvalidator.h +++ b/src/VBox/Runtime/include/internal/lockvalidator.h @@ -1,4 +1,4 @@ -/* $Id: lockvalidator.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: lockvalidator.h 35499 2011-01-12 08:33:45Z vboxsync $ */ /** @file * IPRT - Internal RTLockValidator header. */ @@ -29,7 +29,6 @@ #include <iprt/types.h> #include <iprt/lockvalidator.h> -#include "internal/lockvalidator.h" RT_C_DECLS_BEGIN diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c index 2679aa53f..2f40746c8 100644 --- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c +++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c @@ -1,4 +1,4 @@ -/* $Revision: 35165 $ */ +/* $Revision: 35603 $ */ /** @file * IPRT - Ring-0 Memory Objects, Linux. */ @@ -198,9 +198,9 @@ static int rtR0MemObjLinuxAllocPages(PRTR0MEMOBJLNX *ppMemLnx, RTR0MEMOBJTYPE en if (cPages > 255) { -# ifdef __GFP_NORETRY - /* Not available in Linux 2.4.0 */ - fFlagsLnx |= __GFP_NORETRY; +# ifdef __GFP_REPEAT + /* Try hard to allocate the memory, but the allocation attempt might fail. */ + fFlagsLnx |= __GFP_REPEAT; # endif # ifdef __GFP_NOMEMALLOC /* Introduced with Linux 2.6.12: Don't use emergency reserves */ diff --git a/src/VBox/Runtime/r3/posix/process-creation-posix.cpp b/src/VBox/Runtime/r3/posix/process-creation-posix.cpp index 908d869fb..9a57cbcf2 100644 --- a/src/VBox/Runtime/r3/posix/process-creation-posix.cpp +++ b/src/VBox/Runtime/r3/posix/process-creation-posix.cpp @@ -1,4 +1,4 @@ -/* $Id: process-creation-posix.cpp 34708 2010-12-03 17:30:45Z vboxsync $ */ +/* $Id: process-creation-posix.cpp 35558 2011-01-14 13:30:33Z vboxsync $ */ /** @file * IPRT - Process Creation, POSIX. */ @@ -355,15 +355,20 @@ RTR3DECL(int) RTProcCreateEx(const char *pszExec, const char * const *papszArg if (fFlags & RTPROC_FLAGS_DETACHED) { # ifdef RT_OS_SOLARIS - int templateFd = rtSolarisContractPreFork(); - if (templateFd == -1) - return VERR_OPEN_FAILED; + int templateFd = -1; + if (!(fFlags & RTPROC_FLAGS_SAME_CONTRACT)) + { + templateFd = rtSolarisContractPreFork(); + if (templateFd == -1) + return VERR_OPEN_FAILED; + } # endif /* RT_OS_SOLARIS */ pid = fork(); if (!pid) { # ifdef RT_OS_SOLARIS - rtSolarisContractPostForkChild(templateFd); + if (!(fFlags & RTPROC_FLAGS_SAME_CONTRACT)) + rtSolarisContractPostForkChild(templateFd); # endif /* RT_OS_SOLARIS */ setsid(); /* see comment above */ @@ -373,7 +378,8 @@ RTR3DECL(int) RTProcCreateEx(const char *pszExec, const char * const *papszArg else { #ifdef RT_OS_SOLARIS - rtSolarisContractPostForkParent(templateFd, pid); + if (!(fFlags & RTPROC_FLAGS_SAME_CONTRACT)) + rtSolarisContractPostForkParent(templateFd, pid); #endif /* RT_OS_SOLARIS */ if (pid > 0) { @@ -656,6 +662,9 @@ RTR3DECL(int) RTProcDaemonizeUsingFork(bool fNoChDir, bool fNoClose, const cha /* Create new session, fix up the standard file descriptors and the * current working directory. */ + /** @todo r=klaus the webservice uses this function and assumes that the + * contract id of the daemon is the same as that of the original process. + * Whenever this code is changed this must still remain possible. */ pid_t newpgid = setsid(); int SavedErrno = errno; if (rcSigAct != -1) diff --git a/src/VBox/Runtime/r3/win/fileaio-win.cpp b/src/VBox/Runtime/r3/win/fileaio-win.cpp index 15a1eae74..062ceb049 100644 --- a/src/VBox/Runtime/r3/win/fileaio-win.cpp +++ b/src/VBox/Runtime/r3/win/fileaio-win.cpp @@ -1,4 +1,4 @@ -/* $Id: fileaio-win.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: fileaio-win.cpp 35408 2011-01-05 15:43:05Z vboxsync $ */ /** @file * IPRT - File async I/O, native implementation for the Windows host platform. */ @@ -455,7 +455,12 @@ RTDECL(int) RTFileAioCtxWait(RTFILEAIOCTX hAioCtx, size_t cMinReqs, RTMSINTERVAL if (fSucceeded) pReqInt->Rc = VINF_SUCCESS; else - pReqInt->Rc = RTErrConvertFromWin32(GetLastError()); + { + DWORD errCode = GetLastError(); + pReqInt->Rc = RTErrConvertFromWin32(errCode); + if (pReqInt->Rc == VERR_UNRESOLVED_ERROR) + LogRel(("AIO/win: Request %#p returned rc=%Rrc (native %u\n)", pReqInt, pReqInt->Rc, errCode)); + } pahReqs[cRequestsCompleted++] = (RTFILEAIOREQ)pReqInt; diff --git a/src/VBox/Runtime/testcase/Makefile.kmk b/src/VBox/Runtime/testcase/Makefile.kmk index 6e2917e30..4913e399c 100644 --- a/src/VBox/Runtime/testcase/Makefile.kmk +++ b/src/VBox/Runtime/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34626 2010-12-02 16:44:03Z vboxsync $ +# $Id: Makefile.kmk 35337 2010-12-27 13:31:04Z vboxsync $ ## @file # Sub-Makefile for the IPRT testcases. # @@ -284,14 +284,14 @@ ifdef VBOX_WITH_RAW_MODE $(PATH_LIB)/RuntimeRC$(VBOX_SUFF_LIB) ifeq ($(VBOX_LDR_FMT32),pe) tstLdrObj_LIBS += \ - $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) + $(PATH_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) endif # PE ifeq ($(VBOX_LDR_FMT32),elf) tstLdrObj_LDFLAGS = -e Entrypoint endif ifeq ($(VBOX_LDR_FMT32),lx) tstLdrObj_LIBS += \ - $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) + $(PATH_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) endif endif # VBOX_WITH_RAW_MODE diff --git a/src/VBox/Runtime/testcase/tstIprtMiniString.cpp b/src/VBox/Runtime/testcase/tstIprtMiniString.cpp index 06f6b993e..68e167921 100644 --- a/src/VBox/Runtime/testcase/tstIprtMiniString.cpp +++ b/src/VBox/Runtime/testcase/tstIprtMiniString.cpp @@ -1,4 +1,4 @@ -/* $Id: tstIprtMiniString.cpp 33862 2010-11-08 17:07:49Z vboxsync $ */ +/* $Id: tstIprtMiniString.cpp 35568 2011-01-14 14:24:53Z vboxsync $ */ /** @file * IPRT Testcase - iprt::MiniString. */ @@ -210,6 +210,50 @@ static void test1(RTTEST hTest) iprt::MiniString SubStr15(SubStrBase, 2, 5); CHECK_EQUAL(SubStr15, "cdef"); + /* substr() and substrCP() functions */ + iprt::MiniString strTest(""); + CHECK_EQUAL(strTest.substr(0), ""); + CHECK_EQUAL(strTest.substrCP(0), ""); + CHECK_EQUAL(strTest.substr(1), ""); + CHECK_EQUAL(strTest.substrCP(1), ""); + + /* now let's have some non-ASCII to chew on */ + strTest = "abcdefßäbcdef"; + // 13 codepoints, but 15 bytes (excluding null terminator); + // "ß" and "ä" consume two bytes each + CHECK_EQUAL(strTest.substr(0), strTest.c_str()); + CHECK_EQUAL(strTest.substrCP(0), strTest.c_str()); + + CHECK_EQUAL(strTest.substr(2), "cdefßäbcdef"); + CHECK_EQUAL(strTest.substrCP(2), "cdefßäbcdef"); + + CHECK_EQUAL(strTest.substr(2, 2), "cd"); + CHECK_EQUAL(strTest.substrCP(2, 2), "cd"); + + CHECK_EQUAL(strTest.substr(6), "ßäbcdef"); + CHECK_EQUAL(strTest.substrCP(6), "ßäbcdef"); + + CHECK_EQUAL(strTest.substr(6, 2), "ß"); // UTF-8 "ß" consumes two bytes + CHECK_EQUAL(strTest.substrCP(6, 1), "ß"); + + CHECK_EQUAL(strTest.substr(8), "äbcdef"); // UTF-8 "ß" consumes two bytes + CHECK_EQUAL(strTest.substrCP(7), "äbcdef"); + + CHECK_EQUAL(strTest.substr(8, 3), "äb"); // UTF-8 "ä" consumes two bytes + CHECK_EQUAL(strTest.substrCP(7, 2), "äb"); + + CHECK_EQUAL(strTest.substr(14, 1), "f"); + CHECK_EQUAL(strTest.substrCP(12, 1), "f"); + + CHECK_EQUAL(strTest.substr(15, 1), ""); + CHECK_EQUAL(strTest.substrCP(13, 1), ""); + + CHECK_EQUAL(strTest.substr(16, 1), ""); + CHECK_EQUAL(strTest.substrCP(15, 1), ""); + + /* and check cooperation with find() */ + size_t pos = strTest.find("ß"); + CHECK_EQUAL(strTest.substr(pos), "ßäbcdef"); /* special constructor and assignment arguments */ iprt::MiniString StrCtor1(""); diff --git a/src/VBox/Runtime/testcase/tstLdrObj.cpp b/src/VBox/Runtime/testcase/tstLdrObj.cpp index 9dd6a5528..747c3ee57 100644 --- a/src/VBox/Runtime/testcase/tstLdrObj.cpp +++ b/src/VBox/Runtime/testcase/tstLdrObj.cpp @@ -1,4 +1,4 @@ -/* $Id: tstLdrObj.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: tstLdrObj.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * IPRT - RTLdr test object. * @@ -38,7 +38,7 @@ # error "not IN_RC!" #endif #include <VBox/dis.h> -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <iprt/string.h> diff --git a/src/VBox/Runtime/testcase/tstRTThreadPoke.cpp b/src/VBox/Runtime/testcase/tstRTThreadPoke.cpp index a52f35d30..2e2938e4d 100644 --- a/src/VBox/Runtime/testcase/tstRTThreadPoke.cpp +++ b/src/VBox/Runtime/testcase/tstRTThreadPoke.cpp @@ -1,4 +1,4 @@ -/* $Id: tstRTThreadPoke.cpp 34174 2010-11-18 14:52:35Z vboxsync $ */ +/* $Id: tstRTThreadPoke.cpp 35351 2010-12-27 17:04:17Z vboxsync $ */ /** @file * IPRT Testcase - RTThreadPoke. */ @@ -77,4 +77,3 @@ int main() #endif } - diff --git a/src/VBox/Runtime/win/errmsgwin.cpp b/src/VBox/Runtime/win/errmsgwin.cpp index 8c3353458..fed8a0a82 100644 --- a/src/VBox/Runtime/win/errmsgwin.cpp +++ b/src/VBox/Runtime/win/errmsgwin.cpp @@ -1,10 +1,10 @@ -/* $Id: errmsgwin.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: errmsgwin.cpp 35445 2011-01-10 11:05:23Z vboxsync $ */ /** @file * IPRT - Status code messages. */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -80,6 +80,19 @@ RTDECL(PCRTWINERRMSG) RTErrWinGet(long rc) if (g_aStatusMsgs[i].iCode == rc) return &g_aStatusMsgs[i]; + /* The g_aStatusMsgs table contains a wild mix of error codes with and + * without included facility and severity. So the chance is high that there + * was no exact match. Try to find a non-exact match, and include the + * actual value in case we pick the wrong entry. Better than always using + * the "Unknown Status" case. */ + for (i = 0; i < RT_ELEMENTS(g_aStatusMsgs); i++) + if (g_aStatusMsgs[i].iCode == HRESULT_CODE(rc)) + { + int32_t iMsg = (ASMAtomicIncU32(&g_iUnknownMsgs) - 1) % RT_ELEMENTS(g_aUnknownMsgs); + RTStrPrintf(&g_aszUnknownStr[iMsg][0], sizeof(g_aszUnknownStr[iMsg]), "%s 0x%X", g_aStatusMsgs[i].pszDefine, rc); + return &g_aUnknownMsgs[iMsg]; + } + /* * Need to use the temporary stuff. */ diff --git a/src/VBox/Storage/Parallels.cpp b/src/VBox/Storage/Parallels.cpp index e415166b8..4524132dd 100644 --- a/src/VBox/Storage/Parallels.cpp +++ b/src/VBox/Storage/Parallels.cpp @@ -1,4 +1,4 @@ -/* $Id: Parallels.cpp 34147 2010-11-17 20:46:42Z vboxsync $ */ +/* $Id: Parallels.cpp 35486 2011-01-11 13:44:31Z vboxsync $ */ /** @file * * Parallels hdd disk image, core code. @@ -967,7 +967,7 @@ static int parallelsSetOpenFlags(void *pBackendData, unsigned uOpenFlags) } /* Implement this operation via reopening the image. */ - parallelsFreeImage(pImage, true); + parallelsFreeImage(pImage, false); rc = parallelsOpenImage(pImage, uOpenFlags); out: diff --git a/src/VBox/Storage/RAW.cpp b/src/VBox/Storage/RAW.cpp index b7fdd05e9..1d38e82da 100644 --- a/src/VBox/Storage/RAW.cpp +++ b/src/VBox/Storage/RAW.cpp @@ -1,4 +1,4 @@ -/* $Id: RAW.cpp 35045 2010-12-13 21:14:06Z vboxsync $ */ +/* $Id: RAW.cpp 35480 2011-01-11 12:16:06Z vboxsync $ */ /** @file * RawHDDCore - Raw Disk image, Core Code. */ @@ -555,6 +555,8 @@ static int rawCheckIfValid(const char *pszFilename, PVDINTERFACE pVDIfsDisk, else rc = VERR_VD_RAW_INVALID_HEADER; } + else + rc = VERR_VD_RAW_INVALID_HEADER; } else rc = VERR_VD_RAW_INVALID_HEADER; diff --git a/src/VBox/Storage/VD.cpp b/src/VBox/Storage/VD.cpp index 523368068..f29ddfead 100644 --- a/src/VBox/Storage/VD.cpp +++ b/src/VBox/Storage/VD.cpp @@ -1,4 +1,4 @@ -/* $Id: VD.cpp 35188 2010-12-16 15:13:07Z vboxsync $ */ +/* $Id: VD.cpp 35321 2010-12-24 16:05:54Z vboxsync $ */ /** @file * VBoxHDD - VBox HDD Container implementation. */ @@ -273,7 +273,10 @@ typedef struct VDIOCTX /** Number of bytes to transfer */ volatile size_t cbTransfer; /** Current image in the chain. */ - PVDIMAGE pImage; + PVDIMAGE pImageCur; + /** Start image to read from. pImageCur is reset to this + * value after it reached the first image in the chain. */ + PVDIMAGE pImageStart; /** S/G buffer */ RTSGBUF SgBuf; /** Flag whether the I/O context is blocked because it is in the growing list. */ @@ -902,6 +905,7 @@ static int vdReadHelper(PVBOXHDD pDisk, PVDIMAGE pImage, PVDIMAGE pImageParentOv DECLINLINE(PVDIOCTX) vdIoCtxAlloc(PVBOXHDD pDisk, VDIOCTXTXDIR enmTxDir, uint64_t uOffset, size_t cbTransfer, + PVDIMAGE pImageStart, PCRTSGBUF pcSgBuf, void *pvAllocation, PFNVDIOCTXTRANSFER pfnIoCtxTransfer) { @@ -915,6 +919,8 @@ DECLINLINE(PVDIOCTX) vdIoCtxAlloc(PVBOXHDD pDisk, VDIOCTXTXDIR enmTxDir, pIoCtx->cbTransferLeft = cbTransfer; pIoCtx->uOffset = uOffset; pIoCtx->cbTransfer = cbTransfer; + pIoCtx->pImageStart = pImageStart; + pIoCtx->pImageCur = pImageStart; pIoCtx->cDataTransfersPending = 0; pIoCtx->cMetaTransfersPending = 0; pIoCtx->fComplete = false; @@ -936,13 +942,13 @@ DECLINLINE(PVDIOCTX) vdIoCtxAlloc(PVBOXHDD pDisk, VDIOCTXTXDIR enmTxDir, DECLINLINE(PVDIOCTX) vdIoCtxRootAlloc(PVBOXHDD pDisk, VDIOCTXTXDIR enmTxDir, uint64_t uOffset, size_t cbTransfer, - PCRTSGBUF pcSgBuf, + PVDIMAGE pImageStart, PCRTSGBUF pcSgBuf, PFNVDASYNCTRANSFERCOMPLETE pfnComplete, void *pvUser1, void *pvUser2, void *pvAllocation, PFNVDIOCTXTRANSFER pfnIoCtxTransfer) { - PVDIOCTX pIoCtx = vdIoCtxAlloc(pDisk, enmTxDir, uOffset, cbTransfer, + PVDIOCTX pIoCtx = vdIoCtxAlloc(pDisk, enmTxDir, uOffset, cbTransfer, pImageStart, pcSgBuf, pvAllocation, pfnIoCtxTransfer); if (RT_LIKELY(pIoCtx)) @@ -959,12 +965,12 @@ DECLINLINE(PVDIOCTX) vdIoCtxRootAlloc(PVBOXHDD pDisk, VDIOCTXTXDIR enmTxDir, DECLINLINE(PVDIOCTX) vdIoCtxChildAlloc(PVBOXHDD pDisk, VDIOCTXTXDIR enmTxDir, uint64_t uOffset, size_t cbTransfer, - PCRTSGBUF pcSgBuf, + PVDIMAGE pImageStart, PCRTSGBUF pcSgBuf, PVDIOCTX pIoCtxParent, size_t cbTransferParent, size_t cbWriteParent, void *pvAllocation, PFNVDIOCTXTRANSFER pfnIoCtxTransfer) { - PVDIOCTX pIoCtx = vdIoCtxAlloc(pDisk, enmTxDir, uOffset, cbTransfer, + PVDIOCTX pIoCtx = vdIoCtxAlloc(pDisk, enmTxDir, uOffset, cbTransfer, pImageStart, pcSgBuf, pvAllocation, pfnIoCtxTransfer); AssertPtr(pIoCtxParent); @@ -1271,7 +1277,7 @@ static int vdReadHelperAsync(PVDIOCTX pIoCtx) /* Loop until all reads started or we have a backend which needs to read metadata. */ do { - pCurrImage = pIoCtx->pImage; + pCurrImage = pIoCtx->pImageCur; /* Search for image with allocated block. Do not attempt to read more * than the previous reads marked as valid. Otherwise this would return @@ -1328,7 +1334,7 @@ static int vdReadHelperAsync(PVDIOCTX pIoCtx) /* Save the current state. */ pIoCtx->uOffset = uOffset; pIoCtx->cbTransfer = cbToRead; - pIoCtx->pImage = pCurrImage; + pIoCtx->pImageCur = pCurrImage ? pCurrImage : pIoCtx->pImageStart; } return rc; @@ -1726,10 +1732,38 @@ static int vdWriteHelperStandardAsync(PVDIOCTX pIoCtx) return VERR_NOT_IMPLEMENTED; } +static int vdWriteHelperOptimizedCommitAsync(PVDIOCTX pIoCtx) +{ + int rc = VINF_SUCCESS; + PVDIMAGE pImage = pIoCtx->pImageCur; + size_t cbPreRead = pIoCtx->Type.Child.cbPreRead; + size_t cbPostRead = pIoCtx->Type.Child.cbPostRead; + size_t cbThisWrite = pIoCtx->Type.Child.cbTransferParent; + + LogFlowFunc(("pIoCtx=%#p\n", pIoCtx)); + rc = pImage->Backend->pfnAsyncWrite(pImage->pBackendData, + pIoCtx->uOffset - cbPreRead, + cbPreRead + cbThisWrite + cbPostRead, + pIoCtx, NULL, &cbPreRead, &cbPostRead, 0); + Assert(rc != VERR_VD_BLOCK_FREE); + Assert(rc == VERR_VD_NOT_ENOUGH_METADATA || cbPreRead == 0); + Assert(rc == VERR_VD_NOT_ENOUGH_METADATA || cbPostRead == 0); + if (rc == VERR_VD_ASYNC_IO_IN_PROGRESS) + rc = VINF_SUCCESS; + else if (rc == VERR_VD_IOCTX_HALT) + { + pIoCtx->fBlocked = true; + rc = VINF_SUCCESS; + } + + LogFlowFunc(("returns rc=%Rrc\n", rc)); + return rc; +} + static int vdWriteHelperOptimizedCmpAndWriteAsync(PVDIOCTX pIoCtx) { int rc = VINF_SUCCESS; - PVDIMAGE pImage = pIoCtx->pImage; + PVDIMAGE pImage = pIoCtx->pImageCur; size_t cbThisWrite = 0; size_t cbPreRead = pIoCtx->Type.Child.cbPreRead; size_t cbPostRead = pIoCtx->Type.Child.cbPostRead; @@ -1799,20 +1833,7 @@ static int vdWriteHelperOptimizedCmpAndWriteAsync(PVDIOCTX pIoCtx) /* Write the full block to the virtual disk. */ RTSgBufReset(&pIoCtx->SgBuf); - rc = pImage->Backend->pfnAsyncWrite(pImage->pBackendData, - pIoCtx->uOffset - cbPreRead, - cbPreRead + cbThisWrite + cbPostRead, - pIoCtx, NULL, &cbPreRead, &cbPostRead, 0); - Assert(rc != VERR_VD_BLOCK_FREE); - Assert(cbPreRead == 0); - Assert(cbPostRead == 0); - if (rc == VERR_VD_ASYNC_IO_IN_PROGRESS) - rc = VINF_SUCCESS; - else if (rc == VERR_VD_IOCTX_HALT) - { - pIoCtx->fBlocked = true; - rc = VINF_SUCCESS; - } + pIoCtx->pfnIoCtxTransferNext = vdWriteHelperOptimizedCommitAsync; return rc; } @@ -1900,7 +1921,7 @@ static int vdWriteHelperAsync(PVDIOCTX pIoCtx) int rc; size_t cbWrite = pIoCtx->cbTransfer; uint64_t uOffset = pIoCtx->uOffset; - PVDIMAGE pImage = pIoCtx->pImage; + PVDIMAGE pImage = pIoCtx->pImageCur; PVBOXHDD pDisk = pIoCtx->pDisk; unsigned fWrite; size_t cbThisWrite; @@ -1941,7 +1962,7 @@ static int vdWriteHelperAsync(PVDIOCTX pIoCtx) RTSgBufInit(pTmp, pSeg, 1); PVDIOCTX pIoCtxWrite = vdIoCtxChildAlloc(pDisk, VDIOCTXTXDIR_WRITE, - uOffset, pSeg->cbSeg, + uOffset, pSeg->cbSeg, pImage, pTmp, pIoCtx, cbThisWrite, cbWrite, @@ -1959,7 +1980,6 @@ static int vdWriteHelperAsync(PVDIOCTX pIoCtx) LogFlowFunc(("Disk is growing because of pIoCtx=%#p pIoCtxWrite=%#p\n", pIoCtx, pIoCtxWrite)); - pIoCtxWrite->pImage = pImage; pIoCtxWrite->Type.Child.cbPreRead = cbPreRead; pIoCtxWrite->Type.Child.cbPostRead = cbPostRead; @@ -2038,7 +2058,7 @@ static int vdFlushHelperAsync(PVDIOCTX pIoCtx) { int rc = VINF_SUCCESS; PVBOXHDD pDisk = pIoCtx->pDisk; - PVDIMAGE pImage = pIoCtx->pImage; + PVDIMAGE pImage = pIoCtx->pImageCur; rc = vdIoCtxLockDisk(pDisk, pIoCtx); if (RT_SUCCESS(rc)) @@ -8002,9 +8022,10 @@ VBOXDDU_DECL(int) VDAsyncRead(PVBOXHDD pDisk, uint64_t uOffset, size_t cbRead, ("uOffset=%llu cbRead=%zu pDisk->cbSize=%llu\n", uOffset, cbRead, pDisk->cbSize), rc = VERR_INVALID_PARAMETER); + AssertPtrBreakStmt(pDisk->pLast, rc = VERR_VD_NOT_OPENED); pIoCtx = vdIoCtxRootAlloc(pDisk, VDIOCTXTXDIR_READ, uOffset, - cbRead, pcSgBuf, + cbRead, pDisk->pLast, pcSgBuf, pfnComplete, pvUser1, pvUser2, NULL, vdReadHelperAsync); if (!pIoCtx) @@ -8013,9 +8034,6 @@ VBOXDDU_DECL(int) VDAsyncRead(PVBOXHDD pDisk, uint64_t uOffset, size_t cbRead, break; } - pIoCtx->pImage = pDisk->pLast; - AssertPtrBreakStmt(pIoCtx->pImage, rc = VERR_VD_NOT_OPENED); - rc = vdIoCtxProcess(pIoCtx); if (rc == VINF_VD_ASYNC_IO_FINISHED) { @@ -8075,9 +8093,10 @@ VBOXDDU_DECL(int) VDAsyncWrite(PVBOXHDD pDisk, uint64_t uOffset, size_t cbWrite, ("uOffset=%llu cbWrite=%zu pDisk->cbSize=%llu\n", uOffset, cbWrite, pDisk->cbSize), rc = VERR_INVALID_PARAMETER); + AssertPtrBreakStmt(pDisk->pLast, rc = VERR_VD_NOT_OPENED); pIoCtx = vdIoCtxRootAlloc(pDisk, VDIOCTXTXDIR_WRITE, uOffset, - cbWrite, pcSgBuf, + cbWrite, pDisk->pLast, pcSgBuf, pfnComplete, pvUser1, pvUser2, NULL, vdWriteHelperAsync); if (!pIoCtx) @@ -8086,10 +8105,6 @@ VBOXDDU_DECL(int) VDAsyncWrite(PVBOXHDD pDisk, uint64_t uOffset, size_t cbWrite, break; } - PVDIMAGE pImage = pDisk->pLast; - AssertPtrBreakStmt(pImage, rc = VERR_VD_NOT_OPENED); - pIoCtx->pImage = pImage; - rc = vdIoCtxProcess(pIoCtx); if (rc == VINF_VD_ASYNC_IO_FINISHED) { @@ -8134,8 +8149,10 @@ VBOXDDU_DECL(int) VDAsyncFlush(PVBOXHDD pDisk, PFNVDASYNCTRANSFERCOMPLETE pfnCom AssertRC(rc2); fLockWrite = true; + AssertPtrBreakStmt(pDisk->pLast, rc = VERR_VD_NOT_OPENED); + pIoCtx = vdIoCtxRootAlloc(pDisk, VDIOCTXTXDIR_FLUSH, 0, - 0, NULL, + 0, pDisk->pLast, NULL, pfnComplete, pvUser1, pvUser2, NULL, vdFlushHelperAsync); if (!pIoCtx) @@ -8144,10 +8161,6 @@ VBOXDDU_DECL(int) VDAsyncFlush(PVBOXHDD pDisk, PFNVDASYNCTRANSFERCOMPLETE pfnCom break; } - PVDIMAGE pImage = pDisk->pLast; - AssertPtrBreakStmt(pImage, rc = VERR_VD_NOT_OPENED); - pIoCtx->pImage = pImage; - rc = vdIoCtxProcess(pIoCtx); if (rc == VINF_VD_ASYNC_IO_FINISHED) { diff --git a/src/VBox/Storage/VDICore.h b/src/VBox/Storage/VDICore.h index 605212c63..0240db2ea 100644 --- a/src/VBox/Storage/VDICore.h +++ b/src/VBox/Storage/VDICore.h @@ -1,4 +1,4 @@ -/* $Id: VDICore.h 33567 2010-10-28 15:37:21Z vboxsync $ */ +/* $Id: VDICore.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Virtual Disk Image (VDI), Core Code Header (internal). */ @@ -15,7 +15,7 @@ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ -#ifndef __VDICore_h__ +#ifndef ___VDICore_h___ /******************************************************************************* @@ -23,9 +23,8 @@ *******************************************************************************/ #include <VBox/vd.h> #ifndef VBOX_VDICORE_VD -#include <VBox/pdm.h> -#endif /* !VBOX_VDICORE_VD */ -#include <VBox/mm.h> +# include <VBox/vmm/pdm.h> +#endif #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/Storage/testcase/Makefile.kmk b/src/VBox/Storage/testcase/Makefile.kmk index db8e1ab82..77075d95a 100644 --- a/src/VBox/Storage/testcase/Makefile.kmk +++ b/src/VBox/Storage/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33746 2010-11-03 18:32:49Z vboxsync $ +# $Id: Makefile.kmk 35596 2011-01-17 22:00:13Z vboxsync $ ## @file # Sub-Makefile for the storage device & driver testcases. # @@ -15,7 +15,7 @@ # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. # -SUB_DEPTH = ../../../../.. +SUB_DEPTH = ../../../.. include $(KBUILD_PATH)/subheader.kmk # @@ -33,12 +33,13 @@ endif # Basic testcases for the VD code. # ifdef VBOX_WITH_TESTCASES - PROGRAMS += tstVD tstVD-2 tstVDCopy tstVDSnap tstVDShareable vbox-img + PROGRAMS += tstVD tstVD-2 tstVDCopy tstVDSnap tstVDShareable vbox-img tstVDIo tstVD_TEMPLATE = VBOXR3TSTEXE tstVD-2_TEMPLATE = VBOXR3TSTEXE tstVDCopy_TEMPLATE = VBOXR3TSTEXE tstVDSnap_TEMPLATE = VBOXR3TSTEXE tstVDShareable_TEMPLATE = VBOXR3TSTEXE + tstVDIo_TEMPLATE = VBOXR3TSTEXE vbox-img_TEMPLATE = VBOXR3STATIC tstVD_LIBS = $(LIB_DDU) $(LIB_RUNTIME) tstVD-2_LIBS = $(LIB_DDU) $(LIB_RUNTIME) @@ -46,6 +47,7 @@ ifdef VBOX_WITH_TESTCASES tstVDSnap_LIBS = $(LIB_DDU) $(LIB_RUNTIME) tstVDShareable_LIBS = $(LIB_DDU) $(LIB_RUNTIME) tstVDSetUuid_LIBS = $(LIB_DDU) $(LIB_RUNTIME) + tstVDIo_LIBS = $(LIB_DDU) $(LIB_RUNTIME) vbox-img_LIBS = \ $(VBOX_LIB_RUNTIME_STATIC) if1of ($(KBUILD_TARGET),os2 win) @@ -82,6 +84,11 @@ ifdef VBOX_WITH_TESTCASES $(VBOX_PATH_STORAGE_SRC)/RAW.cpp \ $(VBOX_PATH_STORAGE_SRC)/VCICache.cpp vbox-img_DEFS += IN_VBOXDDU IN_VBOXDDU_STATIC VBOX_HDD_NO_DYNAMIC_BACKENDS IN_RT_R3 + + tstVDIo_SOURCES = tstVDIo.cpp \ + VDIoBackendMem.cpp \ + VDMemDisk.cpp \ + VDIoRnd.cpp endif include $(KBUILD_PATH)/subfooter.kmk diff --git a/src/VBox/Storage/testcase/VDIoBackendMem.cpp b/src/VBox/Storage/testcase/VDIoBackendMem.cpp new file mode 100644 index 000000000..2ebf3906d --- /dev/null +++ b/src/VBox/Storage/testcase/VDIoBackendMem.cpp @@ -0,0 +1,233 @@ +/** $Id: VDIoBackendMem.cpp 35596 2011-01-17 22:00:13Z vboxsync $ */ +/** @file + * + * VBox HDD container test utility, async I/O memory backend + */ + +/* + * Copyright (C) 2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ +#define LOGGROUP LOGGROUP_DEFAULT /** @todo: Log group */ +#include <iprt/err.h> +#include <iprt/log.h> +#include <iprt/assert.h> +#include <iprt/asm.h> +#include <iprt/mem.h> +#include <iprt/thread.h> +#include <iprt/circbuf.h> +#include <iprt/semaphore.h> + +#include "VDMemDisk.h" +#include "VDIoBackendMem.h" + +#define VDMEMIOBACKEND_REQS 1024 + +/** + * Memory I/O request. + */ +typedef struct VDIOBACKENDREQ +{ + /** I/O request direction. */ + VDIOTXDIR enmTxDir; + /** Memory disk handle. */ + PVDMEMDISK pMemDisk; + /** Start offset. */ + uint64_t off; + /** Size of the transfer. */ + size_t cbTransfer; + /** Number of segments in the array. */ + unsigned cSegs; + /** Completion handler to call. */ + PFNVDIOCOMPLETE pfnComplete; + /** Opaque user data. */ + void *pvUser; + /** Segment array - variable in size */ + RTSGSEG aSegs[1]; +} VDIOBACKENDREQ, *PVDIOBACKENDREQ; + +/** + * I/O memory backend + */ +typedef struct VDIOBACKENDMEM +{ + /** Thread handle for the backend. */ + RTTHREAD hThreadIo; + /** Circular buffer used for submitting requests. */ + PRTCIRCBUF pRequestRing; + /** Size of the buffer in request items. */ + unsigned cReqsRing; + /** Event semaphore the thread waits on for more work. */ + RTSEMEVENT EventSem; + /** Flag whether the the server should be still running. */ + volatile bool fRunning; +} VDIOBACKENDMEM; + +static int vdIoBackendMemThread(RTTHREAD hThread, void *pvUser); + +/** + * Pokes the I/O thread that something interesting happened. + * + * @returns IPRT status code. + * + * @param pIoBackend The backend to poke. + */ +static int vdIoBackendMemThreadPoke(PVDIOBACKENDMEM pIoBackend) +{ + return RTSemEventSignal(pIoBackend->EventSem); +} + +int VDIoBackendMemCreate(PPVDIOBACKENDMEM ppIoBackend) +{ + int rc = VINF_SUCCESS; + PVDIOBACKENDMEM pIoBackend = NULL; + + pIoBackend = (PVDIOBACKENDMEM)RTMemAllocZ(sizeof(VDIOBACKENDMEM)); + if (pIoBackend) + { + rc = RTCircBufCreate(&pIoBackend->pRequestRing, VDMEMIOBACKEND_REQS * sizeof(VDIOBACKENDREQ)); + if (RT_SUCCESS(rc)) + { + pIoBackend->cReqsRing = VDMEMIOBACKEND_REQS * sizeof(VDIOBACKENDREQ); + pIoBackend->fRunning = true; + + rc = RTSemEventCreate(&pIoBackend->EventSem); + if (RT_SUCCESS(rc)) + { + rc = RTThreadCreate(&pIoBackend->hThreadIo, vdIoBackendMemThread, pIoBackend, 0, RTTHREADTYPE_IO, + RTTHREADFLAGS_WAITABLE, "MemIo"); + if (RT_SUCCESS(rc)) + { + *ppIoBackend = pIoBackend; + + LogFlowFunc(("returns success\n")); + return VINF_SUCCESS; + } + RTSemEventDestroy(pIoBackend->EventSem); + } + + RTCircBufDestroy(pIoBackend->pRequestRing); + } + + RTMemFree(pIoBackend); + } + else + rc = VERR_NO_MEMORY; + + return rc; +} + +int VDIoBackendMemDestroy(PVDIOBACKENDMEM pIoBackend) +{ + ASMAtomicXchgBool(&pIoBackend->fRunning, false); + vdIoBackendMemThreadPoke(pIoBackend); + + RTThreadWait(pIoBackend->hThreadIo, RT_INDEFINITE_WAIT, NULL); + RTSemEventDestroy(pIoBackend->EventSem); + RTCircBufDestroy(pIoBackend->pRequestRing); + RTMemFree(pIoBackend); + + return VINF_SUCCESS; +} + +int VDIoBackendMemTransfer(PVDIOBACKENDMEM pIoBackend, PVDMEMDISK pMemDisk, + VDIOTXDIR enmTxDir, uint64_t off, size_t cbTransfer, PCRTSGSEG paSegs, + unsigned cSegs, PFNVDIOCOMPLETE pfnComplete, void *pvUser) +{ + PVDIOBACKENDREQ pReq = NULL; + size_t cbData; + + RTCircBufAcquireWriteBlock(pIoBackend->pRequestRing, RT_OFFSETOF(VDIOBACKENDREQ, aSegs[cSegs]), (void **)&pReq, &cbData); + if (!pReq) + return VERR_NO_MEMORY; + + Assert(cbData == sizeof(VDIOBACKENDREQ)); + pReq->enmTxDir = enmTxDir; + pReq->cbTransfer = cbTransfer; + pReq->off = off; + pReq->pMemDisk = pMemDisk; + pReq->cSegs = cSegs; + pReq->pfnComplete = pfnComplete; + pReq->pvUser = pvUser; + for (unsigned i = 0; i < cSegs; i++) + { + pReq->aSegs[i].pvSeg = paSegs[i].pvSeg; + pReq->aSegs[i].cbSeg = paSegs[i].cbSeg; + } + RTCircBufReleaseWriteBlock(pIoBackend->pRequestRing, sizeof(VDIOBACKENDREQ)); + vdIoBackendMemThreadPoke(pIoBackend); + + return VINF_SUCCESS; +} + +/** + * I/O thread for the memory backend. + * + * @returns IPRT status code. + * + * @param hThread The thread handle. + * @param pvUser Opaque user data. + */ +static int vdIoBackendMemThread(RTTHREAD hThread, void *pvUser) +{ + PVDIOBACKENDMEM pIoBackend = (PVDIOBACKENDMEM)pvUser; + + while (pIoBackend->fRunning) + { + int rc = RTSemEventWait(pIoBackend->EventSem, RT_INDEFINITE_WAIT); + if (RT_FAILURE(rc) || !pIoBackend->fRunning) + break; + + PVDIOBACKENDREQ pReq; + size_t cbData; + + RTCircBufAcquireReadBlock(pIoBackend->pRequestRing, sizeof(VDIOBACKENDREQ), (void **)&pReq, &cbData); + Assert(!pReq || cbData == sizeof(VDIOBACKENDREQ)); + + while (pReq) + { + int rcReq = VINF_SUCCESS; + + switch (pReq->enmTxDir) + { + case VDIOTXDIR_READ: + { + RTSGBUF SgBuf; + RTSgBufInit(&SgBuf, pReq->aSegs, pReq->cSegs); + rcReq = VDMemDiskRead(pReq->pMemDisk, pReq->off, pReq->cbTransfer, &SgBuf); + break; + } + case VDIOTXDIR_WRITE: + { + RTSGBUF SgBuf; + RTSgBufInit(&SgBuf, pReq->aSegs, pReq->cSegs); + rcReq = VDMemDiskWrite(pReq->pMemDisk, pReq->off, pReq->cbTransfer, &SgBuf); + break; + } + case VDIOTXDIR_FLUSH: + break; + default: + AssertMsgFailed(("Invalid TX direction!\n")); + } + + /* Notify completion. */ + pReq->pfnComplete(pReq->pvUser, rcReq); + + RTCircBufReleaseReadBlock(pIoBackend->pRequestRing, cbData); + + /* Do we have another request? */ + RTCircBufAcquireReadBlock(pIoBackend->pRequestRing, sizeof(VDIOBACKENDREQ), (void **)&pReq, &cbData); + Assert(!pReq || cbData == sizeof(VDIOBACKENDREQ)); + } + } + + return VINF_SUCCESS; +} + diff --git a/src/VBox/Storage/testcase/VDIoBackendMem.h b/src/VBox/Storage/testcase/VDIoBackendMem.h new file mode 100644 index 000000000..fc65972c3 --- /dev/null +++ b/src/VBox/Storage/testcase/VDIoBackendMem.h @@ -0,0 +1,92 @@ +/** $Id: VDIoBackendMem.h 35471 2011-01-10 21:10:19Z vboxsync $ */ +/** @file + * + * VBox HDD container test utility, async I/O memory backend + */ + +/* + * Copyright (C) 2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ +#ifndef __VDIoBackendMem_h__ +#define __VDIoBackendMem_h__ + +#include <iprt/sg.h> + +/** + * I/O transfer direction. + */ +typedef enum VDIOTXDIR +{ + /** Read. */ + VDIOTXDIR_READ = 0, + /** Write. */ + VDIOTXDIR_WRITE, + /** Flush. */ + VDIOTXDIR_FLUSH, + /** Invalid. */ + VDIOTXDIR_INVALID +} VDIOTXDIR; + +/** Memory backend handle. */ +typedef struct VDIOBACKENDMEM *PVDIOBACKENDMEM; +/** Pointer to a memory backend handle. */ +typedef PVDIOBACKENDMEM *PPVDIOBACKENDMEM; + +/** + * Completion handler. + * + * @returns nothing. + * @param pvUser Opaque user data. + * @param rcReq Completion code for the request. + */ +typedef DECLCALLBACK(int) FNVDIOCOMPLETE(void *pvUser, int rcReq); +/** Pointer to a completion handler. */ +typedef FNVDIOCOMPLETE *PFNVDIOCOMPLETE; + +/** + * Creates a new memory I/O backend. + * + * @returns IPRT status code. + * + * @param ppIoBackend Where to store the handle on success. + */ +int VDIoBackendMemCreate(PPVDIOBACKENDMEM ppIoBackend); + +/** + * Destroys a memory I/O backend. + * + * @returns IPRT status code. + * + * @param pIoBackend The backend to destroy. + */ +int VDIoBackendMemDestroy(PVDIOBACKENDMEM pIoBackend); + +/** + * Enqueues a new I/O request. + * + * @returns IPRT status code. + * + * @param pIoBackend The backend which should handle the + * transfer. + * @param pMemDisk The memory disk the request is for. + * @param enmTxDir The transfer direction. + * @param off Start offset of the transfer. + * @param cbTransfer Size of the transfer. + * @param pSgBuf S/G buffer to use. + * @param pfnComplete Completion handler to call. + * @param pvUser Opaque user data. + */ +int VDIoBackendMemTransfer(PVDIOBACKENDMEM pIoBackend, PVDMEMDISK pMemDisk, + VDIOTXDIR enmTxDir, uint64_t off, size_t cbTransfer, PCRTSGSEG paSegs, + unsigned cSegs, + PFNVDIOCOMPLETE pfnComplete, void *pvUser); + +#endif /* __VDIoBackendMem_h__ */ diff --git a/src/VBox/Storage/testcase/VDIoRnd.cpp b/src/VBox/Storage/testcase/VDIoRnd.cpp new file mode 100644 index 000000000..e3a50358f --- /dev/null +++ b/src/VBox/Storage/testcase/VDIoRnd.cpp @@ -0,0 +1,106 @@ +/** @file + * + * VBox HDD container test utility - I/O data generator. + */ + +/* + * Copyright (C) 2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ +#define LOGGROUP LOGGROUP_DEFAULT +#include <iprt/log.h> +#include <iprt/err.h> +#include <iprt/mem.h> +#include <iprt/rand.h> + +#include "VDIoRnd.h" + +/** + * I/O random data generator instance data. + */ +typedef struct VDIORND +{ + /** Pointer to the buffer holding the random data. */ + uint8_t *pbPattern; + /** Size of the buffer. */ + size_t cbPattern; + /** RNG */ + RTRAND hRand; +} VDIORND; + +int VDIoRndCreate(PPVDIORND ppIoRnd, size_t cbPattern, uint64_t uSeed) +{ + PVDIORND pIoRnd = NULL; + int rc = VINF_SUCCESS; + + AssertPtrReturn(ppIoRnd, VERR_INVALID_POINTER); + + pIoRnd = (PVDIORND)RTMemAllocZ(sizeof(VDIORND)); + if (pIoRnd) + pIoRnd->pbPattern = (uint8_t *)RTMemPageAllocZ(cbPattern); + + if ( pIoRnd + && pIoRnd->pbPattern) + { + pIoRnd->cbPattern = cbPattern; + + rc = RTRandAdvCreateParkMiller(&pIoRnd->hRand); + if (RT_SUCCESS(rc)) + { + RTRandAdvSeed(pIoRnd->hRand, uSeed); + RTRandAdvBytes(pIoRnd->hRand, pIoRnd->pbPattern, cbPattern); + } + else + { + RTMemPageFree(pIoRnd->pbPattern, cbPattern); + RTMemFree(pIoRnd); + } + } + else + { + if (pIoRnd) + RTMemFree(pIoRnd); + rc = VERR_NO_MEMORY; + } + + if (RT_SUCCESS(rc)) + *ppIoRnd = pIoRnd; + + return rc; +} + +void VDIoRndDestroy(PVDIORND pIoRnd) +{ + AssertPtrReturnVoid(pIoRnd); + + RTRandAdvDestroy(pIoRnd->hRand); + RTMemPageFree(pIoRnd->pbPattern, pIoRnd->cbPattern); + RTMemFree(pIoRnd); +} + +int VDIoRndGetBuffer(PVDIORND pIoRnd, void **ppv, size_t cb) +{ + AssertPtrReturn(pIoRnd, VERR_INVALID_POINTER); + AssertPtrReturn(ppv, VERR_INVALID_POINTER); + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + + if (cb > pIoRnd->cbPattern - 512) + return VERR_INVALID_PARAMETER; + + *ppv = pIoRnd->pbPattern + RT_ALIGN_64(RTRandAdvU64Ex(pIoRnd->hRand, 0, pIoRnd->cbPattern - cb - 512), 512); + return VINF_SUCCESS; +} + + +uint32_t VDIoRndGetU32Ex(PVDIORND pIoRnd, uint32_t uMin, uint32_t uMax) +{ + return RTRandAdvU32Ex(pIoRnd->hRand, uMin, uMax); +} + diff --git a/src/VBox/Storage/testcase/VDIoRnd.h b/src/VBox/Storage/testcase/VDIoRnd.h new file mode 100644 index 000000000..79d44733e --- /dev/null +++ b/src/VBox/Storage/testcase/VDIoRnd.h @@ -0,0 +1,55 @@ +/** @file + * + * VBox HDD container test utility - I/O data generator. + */ + +/* + * Copyright (C) 2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ +#ifndef _VDIoRnd_h__ +#define _VDIoRnd_h__ + +/** Pointer to the I/O random number generator. */ +typedef struct VDIORND *PVDIORND; +/** Pointer to a I/O random number generator pointer. */ +typedef PVDIORND *PPVDIORND; + +/** + * Creates a I/O RNG. + * + * @returns VBox status code. + * + * @param ppIoRnd Where to store the handle on success. + * @param cbPattern Size of the test pattern to create. + * @param uSeed Seed for the RNG. + */ +int VDIoRndCreate(PPVDIORND ppIoRnd, size_t cbPattern, uint64_t uSeed); + +/** + * Destroys the I/O RNG. + * + * @param pIoRnd I/O RNG handle. + */ +void VDIoRndDestroy(PVDIORND pIoRnd); + +/** + * Returns a pointer filled with random data of the given size. + * + * @returns VBox status code. + * + * @param pIoRnd I/O RNG handle. + * @param ppv Where to store the pointer on success. + * @param cb Size of the buffer. + */ +int VDIoRndGetBuffer(PVDIORND pIoRnd, void **ppv, size_t cb); + +uint32_t VDIoRndGetU32Ex(PVDIORND pIoRnd, uint32_t uMin, uint32_t uMax); +#endif /* _VDIoRnd_h__ */ diff --git a/src/VBox/Storage/testcase/VDMemDisk.cpp b/src/VBox/Storage/testcase/VDMemDisk.cpp new file mode 100644 index 000000000..84fb6a21f --- /dev/null +++ b/src/VBox/Storage/testcase/VDMemDisk.cpp @@ -0,0 +1,339 @@ +/** $Id: VDMemDisk.cpp 35596 2011-01-17 22:00:13Z vboxsync $ */ +/** @file + * + * VBox HDD container test utility, memory disk/file. + */ + +/* + * Copyright (C) 2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ +#define LOGGROUP LOGGROUP_DEFAULT /** @todo: Log group */ +#include <iprt/err.h> +#include <iprt/log.h> +#include <iprt/assert.h> +#include <iprt/avl.h> +#include <iprt/mem.h> +#include <iprt/file.h> + +#include "VDMemDisk.h" + +/** + * Memory disk/file. + */ +typedef struct VDMEMDISK +{ + /** Current size of the disk. */ + uint64_t cbDisk; + /** Flag whether the disk can grow. */ + bool fGrowable; + /** Pointer to the AVL tree holding the segments. */ + PAVLRU64TREE pTreeSegments; +} VDMEMDISK; + +/** + * A disk segment. + */ +typedef struct VDMEMDISKSEG +{ + /** AVL tree core. */ + AVLRU64NODECORE Core; + /** Pointer to the data. */ + void *pvSeg; +} VDMEMDISKSEG, *PVDMEMDISKSEG; + + +int VDMemDiskCreate(PPVDMEMDISK ppMemDisk, uint64_t cbSize) +{ + AssertPtrReturn(ppMemDisk, VERR_INVALID_POINTER); + + int rc = VINF_SUCCESS; + PVDMEMDISK pMemDisk = (PVDMEMDISK)RTMemAllocZ(sizeof(VDMEMDISK)); + if (pMemDisk) + { + pMemDisk->fGrowable = cbSize ? false : true; + pMemDisk->cbDisk = cbSize; + pMemDisk->pTreeSegments = (PAVLRU64TREE)RTMemAllocZ(sizeof(AVLRU64TREE)); + if (pMemDisk->pTreeSegments) + *ppMemDisk = pMemDisk; + else + { + RTMemFree(pMemDisk); + rc = VERR_NO_MEMORY; + } + } + else + rc = VERR_NO_MEMORY; + + LogFlowFunc(("returns rc=%Rrc\n", rc)); + return rc; +} + +static int vdMemDiskDestroy(PAVLRU64NODECORE pNode, void *pvUser) +{ + PVDMEMDISKSEG pSeg = (PVDMEMDISKSEG)pNode; + RTMemFree(pSeg->pvSeg); + RTMemFree(pSeg); + return VINF_SUCCESS; +} + +void VDMemDiskDestroy(PVDMEMDISK pMemDisk) +{ + AssertPtrReturnVoid(pMemDisk); + + RTAvlrU64Destroy(pMemDisk->pTreeSegments, vdMemDiskDestroy, NULL); + RTMemFree(pMemDisk); +} + +int VDMemDiskWrite(PVDMEMDISK pMemDisk, uint64_t off, size_t cbWrite, PRTSGBUF pSgBuf) +{ + int rc = VINF_SUCCESS; + + LogFlowFunc(("pMemDisk=%#p off=%llu cbWrite=%zu pSgBuf=%#p\n", + pMemDisk, off, cbWrite, pSgBuf)); + + AssertPtrReturn(pMemDisk, VERR_INVALID_POINTER); + AssertPtrReturn(pSgBuf, VERR_INVALID_POINTER); + + /* Check for a write beyond the end of a disk. */ + if ( !pMemDisk->fGrowable + && (off + cbWrite) > pMemDisk->cbDisk) + return VERR_INVALID_PARAMETER; + + /* Update the segments */ + size_t cbLeft = cbWrite; + uint64_t offCurr = off; + + while ( cbLeft + && RT_SUCCESS(rc)) + { + PVDMEMDISKSEG pSeg = (PVDMEMDISKSEG)RTAvlrU64RangeGet(pMemDisk->pTreeSegments, offCurr); + size_t cbRange = 0; + unsigned offSeg = 0; + + if (!pSeg) + { + /* Get next segment */ + pSeg = (PVDMEMDISKSEG)RTAvlrU64GetBestFit(pMemDisk->pTreeSegments, offCurr, true); + if ( !pSeg + || offCurr + cbLeft <= pSeg->Core.Key) + cbRange = cbLeft; + else + cbRange = pSeg->Core.Key - offCurr; + + /* Create new segment */ + pSeg = (PVDMEMDISKSEG)RTMemAllocZ(sizeof(VDMEMDISKSEG)); + if (pSeg) + { + pSeg->Core.Key = offCurr; + pSeg->Core.KeyLast = offCurr + cbRange - 1; + pSeg->pvSeg = RTMemAllocZ(cbRange); + + if (!pSeg->pvSeg) + { + RTMemFree(pSeg); + rc = VERR_NO_MEMORY; + } + else + { + bool fInserted = RTAvlrU64Insert(pMemDisk->pTreeSegments, &pSeg->Core); + AssertMsg(fInserted, ("Bug!\n")); + } + } + else + rc = VERR_NO_MEMORY; + } + else + { + offSeg = offCurr - pSeg->Core.Key; + cbRange = RT_MIN(cbLeft, (size_t)(pSeg->Core.KeyLast + 1 - offCurr)); + } + + if (RT_SUCCESS(rc)) + { + AssertPtr(pSeg); + size_t cbCopied = RTSgBufCopyToBuf(pSgBuf, (uint8_t *)pSeg->pvSeg + offSeg, cbRange); + Assert(cbCopied == cbRange); + } + + offCurr += cbRange; + cbLeft -= cbRange; + } + + /* Update size of the disk. */ + if ( RT_SUCCESS(rc) + && pMemDisk->fGrowable + && (off + cbWrite) > pMemDisk->cbDisk) + { + pMemDisk->cbDisk = off + cbWrite; + } + + return rc; +} + + +int VDMemDiskRead(PVDMEMDISK pMemDisk, uint64_t off, size_t cbRead, PRTSGBUF pSgBuf) +{ + LogFlowFunc(("pMemDisk=%#p off=%llu cbRead=%zu pSgBuf=%#p\n", + pMemDisk, off, cbRead, pSgBuf)); + + AssertPtrReturn(pMemDisk, VERR_INVALID_POINTER); + AssertPtrReturn(pSgBuf, VERR_INVALID_POINTER); + + /* Check for a read beyond the end of a disk. */ + if ((off + cbRead) > pMemDisk->cbDisk) + return VERR_INVALID_PARAMETER; + + /* Compare read data */ + size_t cbLeft = cbRead; + uint64_t offCurr = off; + + while (cbLeft) + { + PVDMEMDISKSEG pSeg = (PVDMEMDISKSEG)RTAvlrU64RangeGet(pMemDisk->pTreeSegments, offCurr); + size_t cbRange = 0; + unsigned offSeg = 0; + + if (!pSeg) + { + /* Get next segment */ + pSeg = (PVDMEMDISKSEG)RTAvlrU64GetBestFit(pMemDisk->pTreeSegments, offCurr, true); + if ( !pSeg + || offCurr + cbLeft <= pSeg->Core.Key) + { + /* No data in the tree for this read. Fill with 0. */ + cbRange = cbLeft; + } + else + cbRange = pSeg->Core.Key - offCurr; + + RTSgBufSet(pSgBuf, 0, cbRange); + } + else + { + offSeg = offCurr - pSeg->Core.Key; + cbRange = RT_MIN(cbLeft, (size_t)(pSeg->Core.KeyLast + 1 - offCurr)); + + RTSgBufCopyFromBuf(pSgBuf, (uint8_t *)pSeg->pvSeg + offSeg, cbRange); + } + + offCurr += cbRange; + cbLeft -= cbRange; + } + + return VINF_SUCCESS; +} + +int VDMemDiskSetSize(PVDMEMDISK pMemDisk, uint64_t cbSize) +{ + AssertPtrReturn(pMemDisk, VERR_INVALID_POINTER); + + if (!pMemDisk->fGrowable) + return VERR_NOT_SUPPORTED; + + if (pMemDisk->cbDisk <= cbSize) + { + /* Increase. */ + pMemDisk->cbDisk = cbSize; + } + else + { + /* We have to delete all parts beyond the new end. */ + PVDMEMDISKSEG pSeg = (PVDMEMDISKSEG)RTAvlrU64Get(pMemDisk->pTreeSegments, cbSize); + if (pSeg) + { + if (pSeg->Core.Key < cbSize) + { + /* Cut off the part which is not in the file anymore. */ + pSeg->pvSeg = RTMemRealloc(pSeg->pvSeg, pSeg->Core.KeyLast - cbSize + 1); + } + else + { + /* Free the whole block. */ + RTMemFree(pSeg->pvSeg); + RTMemFree(pSeg); + } + } + + /* Kill all blocks coming after. */ + do + { + pSeg = (PVDMEMDISKSEG)RTAvlrU64GetBestFit(pMemDisk->pTreeSegments, cbSize, true); + if (pSeg) + { + RTAvlrU64Remove(pMemDisk->pTreeSegments, pSeg->Core.Key); + RTMemFree(pSeg->pvSeg); + pSeg->pvSeg = NULL; + RTMemFree(pSeg); + } + else + break; + } while (true); + + pMemDisk->cbDisk = cbSize; + } + + return VINF_SUCCESS; +} + +int VDMemDiskGetSize(PVDMEMDISK pMemDisk, uint64_t *pcbSize) +{ + AssertPtrReturn(pMemDisk, VERR_INVALID_POINTER); + AssertPtrReturn(pcbSize, VERR_INVALID_POINTER); + + *pcbSize = pMemDisk->cbDisk; + return VINF_SUCCESS; +} + +/** + * Writes a segment to the given file. + * + * @returns IPRT status code. + * + * @param pNode The disk segment to write to the file. + * @param pvParam Opaque user data containing the pointer to + * the file handle. + */ +static int vdMemDiskSegmentWriteToFile(PAVLRU64NODECORE pNode, void *pvParam) +{ + PVDMEMDISKSEG pSeg = (PVDMEMDISKSEG)pNode; + RTFILE hFile = *(PRTFILE)pvParam; + + return RTFileWriteAt(hFile, pSeg->Core.Key, pSeg->pvSeg, pSeg->Core.KeyLast - pSeg->Core.Key + 1, NULL); +} + +int VDMemDiskWriteToFile(PVDMEMDISK pMemDisk, const char *pcszFilename) +{ + int rc = VINF_SUCCESS; + RTFILE hFile = NIL_RTFILE; + + LogFlowFunc(("pMemDisk=%#p pcszFilename=%s\n", pMemDisk, pcszFilename)); + AssertPtrReturn(pMemDisk, VERR_INVALID_POINTER); + AssertPtrReturn(pcszFilename, VERR_INVALID_POINTER); + + rc = RTFileOpen(&hFile, pcszFilename, RTFILE_O_DENY_NONE | RTFILE_O_CREATE | RTFILE_O_WRITE); + if (RT_SUCCESS(rc)) + { + rc = RTAvlrU64DoWithAll(pMemDisk->pTreeSegments, true, vdMemDiskSegmentWriteToFile, &hFile); + + RTFileClose(hFile); + if (RT_FAILURE(rc)) + RTFileDelete(pcszFilename); + } + + LogFlowFunc(("returns rc=%Rrc\n", rc)); + return rc; +} + +int VDMemDiskReadFromFile(PVDMEMDISK pMemDisk, const char *pcszFilename) +{ + return VERR_NOT_IMPLEMENTED; +} + diff --git a/src/VBox/Storage/testcase/VDMemDisk.h b/src/VBox/Storage/testcase/VDMemDisk.h new file mode 100644 index 000000000..01a144f89 --- /dev/null +++ b/src/VBox/Storage/testcase/VDMemDisk.h @@ -0,0 +1,117 @@ +/** @file + * + * VBox HDD container test utility, memory disk/file. + */ + +/* + * Copyright (C) 2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ +#ifndef __VDMemDisk_h__ +#define __VDMemDisk_h__ + +#include <iprt/sg.h> + +/** Handle to the a memory disk. */ +typedef struct VDMEMDISK *PVDMEMDISK; +/** Pointer to a memory disk handle. */ +typedef PVDMEMDISK *PPVDMEMDISK; + +/** + * Creates a new memory disk with the given size. + * + * @returns VBOX status code. + * + * @param ppMemDisk Where to store the memory disk handle. + * @param cbSize Size of the disk if it is fixed. + * If 0 the disk grows when it is written to + * and the size can be changed with + * VDMemDiskSetSize(). + */ +int VDMemDiskCreate(PPVDMEMDISK ppMemDisk, uint64_t cbSize); + +/** + * Destroys a memory disk. + * + * @returns nothing. + * + * @param pMemDisk The memory disk to destroy. + */ +void VDMemDiskDestroy(PVDMEMDISK pMemDisk); + +/** + * Writes the specified amount of data from the S/G buffer at + * the given offset. + * + * @returns VBox status code. + * + * @param pMemDisk The memory disk handle. + * @param off Where to start writing to. + * @param cbWrite How many bytes to write. + * @param pSgBuf The S/G buffer to write from. + */ +int VDMemDiskWrite(PVDMEMDISK pMemDisk, uint64_t off, size_t cbWrite, PRTSGBUF pSgBuf); + +/** + * Reads the specified amount of data into the S/G buffer + * starting from the given offset. + * + * @returns VBox status code. + * + * @param pMemDisk The memory disk handle. + * @param off Where to start reading from. + * @param cbRead The amount of bytes to read. + * @param pSgBuf The S/G buffer to read into. + */ +int VDMemDiskRead(PVDMEMDISK pMemDisk, uint64_t off, size_t cbRead, PRTSGBUF pSgBuf); + +/** + * Sets the size of the memory disk. + * + * @returns VBox status code. + * + * @param pMemDisk The memory disk handle. + * @param cbSize The new size to set. + */ +int VDMemDiskSetSize(PVDMEMDISK pMemDisk, uint64_t cbSize); + +/** + * Gets the current size of the memory disk. + * + * @returns VBox status code. + * + * @param pMemDisk The memory disk handle. + * @param pcbSize Where to store the size of the memory + * disk. + */ +int VDMemDiskGetSize(PVDMEMDISK pMemDisk, uint64_t *pcbSize); + +/** + * Dumps the memory disk to a file. + * + * @returns VBox status code. + * + * @param pMemDisk The memory disk handle. + * @param pcszFilename Where to dump the content. + */ +int VDMemDiskWriteToFile(PVDMEMDISK pMemDisk, const char *pcszFilename); + +/** + * Reads the content of a file into the given memory disk. + * All data stored in the memory disk will be overwritten. + * + * @returns VBox status code. + * + * @param pMemDisk The memory disk handle. + * @param pcszFilename The file to load from. + */ +int VDMemDiskReadFromFile(PVDMEMDISK pMemDisk, const char *pcszFilename); + +#endif /* __VDMemDisk_h__ */ diff --git a/src/VBox/Storage/testcase/tstVDIo.cpp b/src/VBox/Storage/testcase/tstVDIo.cpp new file mode 100644 index 000000000..236711091 --- /dev/null +++ b/src/VBox/Storage/testcase/tstVDIo.cpp @@ -0,0 +1,1754 @@ +/** @file + * + * VBox HDD container test utility - I/O replay. + */ + +/* + * Copyright (C) 2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ +#define LOGGROUP LOGGROUP_DEFAULT +#include <VBox/vd.h> +#include <VBox/err.h> +#include <VBox/log.h> +#include <iprt/asm.h> +#include <iprt/string.h> +#include <iprt/stream.h> +#include <iprt/mem.h> +#include <iprt/initterm.h> +#include <iprt/getopt.h> +#include <iprt/list.h> +#include <iprt/ctype.h> +#include <iprt/semaphore.h> +#include <iprt/thread.h> + +#include "VDMemDisk.h" +#include "VDIoBackendMem.h" +#include "VDIoRnd.h" + +/** + * A virtual file backed by memory. + */ +typedef struct VDFILE +{ + /** Pointer to the next file. */ + RTLISTNODE Node; + /** Name of the file. */ + char *pszName; + /** Memory file baking the file. */ + PVDMEMDISK pMemDisk; + /** Completion callback of the VD layer. */ + PFNVDCOMPLETED pfnComplete; +} VDFILE, *PVDFILE; + +/** + * Global VD test state. + */ +typedef struct VDTESTGLOB +{ + /** HDD handle to operate on. */ + PVBOXHDD pVD; + /** Head of the active file list. */ + RTLISTNODE ListFiles; + /** Memory I/O backend. */ + PVDIOBACKENDMEM pIoBackend; + /** Error interface. */ + VDINTERFACE VDIError; + /** Error interface callbacks. */ + VDINTERFACEERROR VDIErrorCallbacks; + /** Pointer to the per disk interface list. */ + PVDINTERFACE pInterfacesDisk; + /** I/O interface. */ + VDINTERFACE VDIIo; + /** I/O interface callbacks. */ + VDINTERFACEIO VDIIoCallbacks; + /** Pointer to the per image interface list. */ + PVDINTERFACE pInterfacesImages; + /** Physical CHS Geometry. */ + VDGEOMETRY PhysGeom; + /** Logical CHS geometry. */ + VDGEOMETRY LogicalGeom; + /** I/O RNG handle. */ + PVDIORND pIoRnd; +} VDTESTGLOB, *PVDTESTGLOB; + +/** + * Transfer direction. + */ +typedef enum VDIOREQTXDIR +{ + VDIOREQTXDIR_READ = 0, + VDIOREQTXDIR_WRITE, + VDIOREQTXDIR_FLUSH +} VDIOREQTXDIR; + +/** + * I/O request. + */ +typedef struct VDIOREQ +{ + /** Transfer type. */ + VDIOREQTXDIR enmTxDir; + /** slot index. */ + unsigned idx; + /** Start offset. */ + uint64_t off; + /** Size to transfer. */ + size_t cbReq; + /** S/G Buffer */ + RTSGBUF SgBuf; + /** Data segment */ + RTSGSEG DataSeg; + /** Flag whether the request is outstanding or not. */ + volatile bool fOutstanding; +} VDIOREQ, *PVDIOREQ; + +/** + * I/O test data. + */ +typedef struct VDIOTEST +{ + /** Start offset. */ + uint64_t offStart; + /** End offset. */ + uint64_t offEnd; + /** Flag whether random or sequential access is wanted */ + bool fRandomAccess; + /** Block size. */ + size_t cbBlkIo; + /** Number of bytes to transfer. */ + size_t cbIo; + unsigned uWriteChance; + PVDIORND pIoRnd; + uint64_t offNext; +} VDIOTEST, *PVDIOTEST; + +/** + * Argument types. + */ +typedef enum VDSCRIPTARGTYPE +{ + /** Argument is a string. */ + VDSCRIPTARGTYPE_STRING = 0, + /** Argument is a 64bit unsigned number. */ + VDSCRIPTARGTYPE_UNSIGNED_NUMBER, + /** Argument is a 64bit signed number. */ + VDSCRIPTARGTYPE_SIGNED_NUMBER, + /** Arugment is a unsigned 64bit range */ + VDSCRIPTARGTYPE_UNSIGNED_RANGE, + /** Arugment is a boolean. */ + VDSCRIPTARGTYPE_BOOL +} VDSCRIPTARGTYPE; + +/** + * Script argument. + */ +typedef struct VDSCRIPTARG +{ + /** Argument identifier. */ + char chId; + /** Type of the argument. */ + VDSCRIPTARGTYPE enmType; + /** Type depndent data. */ + union + { + /** String. */ + const char *pcszString; + /** Bool. */ + bool fFlag; + /** unsigned number. */ + uint64_t u64; + /** Signed number. */ + int64_t i64; + /** Unsigned range. */ + struct + { + uint64_t Start; + uint64_t End; + } Range; + } u; +} VDSCRIPTARG, *PVDSCRIPTARG; + +/** Script action handler. */ +typedef DECLCALLBACK(int) FNVDSCRIPTACTION(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +/** Pointer to a script action handler. */ +typedef FNVDSCRIPTACTION *PFNVDSCRIPTACTION; + +/** + * Script argument descriptor. + */ +typedef struct VDSCRIPTARGDESC +{ + /** Name of the arugment. */ + const char *pcszName; + /** Identifier for the argument. */ + char chId; + /** Type of the argument. */ + VDSCRIPTARGTYPE enmType; + /** Flags */ + uint32_t fFlags; +} VDSCRIPTARGDESC, *PVDSCRIPTARGDESC; +/** Pointer to a const script argument descriptor. */ +typedef const VDSCRIPTARGDESC *PCVDSCRIPTARGDESC; + +/** Flag whether the argument is mandatory. */ +#define VDSCRIPTARGDESC_FLAG_MANDATORY RT_BIT(0) +/** Flag whether the number can have a size suffix (K|M|G) */ +#define VDSCRIPTARGDESC_FLAG_SIZE_SUFFIX RT_BIT(1) + +/** + * Script action. + */ +typedef struct VDSCRIPTACTION +{ + /** Action name. */ + const char *pcszAction; + /** Pointer to the arguments. */ + const PCVDSCRIPTARGDESC paArgDesc; + /** Number of arugments in the array. */ + unsigned cArgDescs; + /** Pointer to the action handler. */ + PFNVDSCRIPTACTION pfnHandler; +} VDSCRIPTACTION, *PVDSCRIPTACTION; + +typedef const VDSCRIPTACTION *PCVDSCRIPTACTION; + +static DECLCALLBACK(int) vdScriptHandlerCreate(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +static DECLCALLBACK(int) vdScriptHandlerOpen(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +static DECLCALLBACK(int) vdScriptHandlerIo(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +static DECLCALLBACK(int) vdScriptHandlerFlush(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +static DECLCALLBACK(int) vdScriptHandlerMerge(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +static DECLCALLBACK(int) vdScriptHandlerClose(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +static DECLCALLBACK(int) vdScriptHandlerIoRngCreate(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +static DECLCALLBACK(int) vdScriptHandlerIoRngDestroy(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); +static DECLCALLBACK(int) vdScriptHandlerSleep(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs); + +/* create action */ +const VDSCRIPTARGDESC g_aArgCreate[] = +{ + /* pcszName chId enmType fFlags */ + {"mode", 'm', VDSCRIPTARGTYPE_STRING, VDSCRIPTARGDESC_FLAG_MANDATORY}, + {"name", 'n', VDSCRIPTARGTYPE_STRING, VDSCRIPTARGDESC_FLAG_MANDATORY}, + {"backend", 'b', VDSCRIPTARGTYPE_STRING, VDSCRIPTARGDESC_FLAG_MANDATORY}, + {"size", 's', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, VDSCRIPTARGDESC_FLAG_MANDATORY | VDSCRIPTARGDESC_FLAG_SIZE_SUFFIX}, +}; + +/* open action */ +const VDSCRIPTARGDESC g_aArgOpen[] = +{ + /* pcszName chId enmType fFlags */ + {"name", 'n', VDSCRIPTARGTYPE_STRING, VDSCRIPTARGDESC_FLAG_MANDATORY}, + {"backend", 'b', VDSCRIPTARGTYPE_STRING, VDSCRIPTARGDESC_FLAG_MANDATORY} +}; + +/* write action */ +const VDSCRIPTARGDESC g_aArgIo[] = +{ + /* pcszName chId enmType fFlags */ + {"async", 'a', VDSCRIPTARGTYPE_BOOL, 0}, + {"max-reqs", 'l', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, 0}, + {"mode", 'm', VDSCRIPTARGTYPE_STRING, VDSCRIPTARGDESC_FLAG_MANDATORY}, + {"size", 's', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, VDSCRIPTARGDESC_FLAG_SIZE_SUFFIX}, + {"blocksize", 'b', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, VDSCRIPTARGDESC_FLAG_MANDATORY | VDSCRIPTARGDESC_FLAG_SIZE_SUFFIX}, + {"off", 'o', VDSCRIPTARGTYPE_UNSIGNED_RANGE, VDSCRIPTARGDESC_FLAG_SIZE_SUFFIX}, + {"reads", 'r', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, VDSCRIPTARGDESC_FLAG_MANDATORY}, + {"writes", 'w', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, VDSCRIPTARGDESC_FLAG_MANDATORY} +}; + +/* flush action */ +const VDSCRIPTARGDESC g_aArgFlush[] = +{ + /* pcszName chId enmType fFlags */ + {"async", 'a', VDSCRIPTARGTYPE_BOOL, 0} +}; + +/* merge action */ +const VDSCRIPTARGDESC g_aArgMerge[] = +{ + /* pcszName chId enmType fFlags */ + {"forward", 'f', VDSCRIPTARGTYPE_BOOL, VDSCRIPTARGDESC_FLAG_MANDATORY} +}; + +/* close action */ +const VDSCRIPTARGDESC g_aArgClose[] = +{ + /* pcszName chId enmType fFlags */ + {"mode", 'm', VDSCRIPTARGTYPE_STRING, VDSCRIPTARGDESC_FLAG_MANDATORY}, + {"delete", 'd', VDSCRIPTARGTYPE_BOOL, VDSCRIPTARGDESC_FLAG_MANDATORY} +}; + +/* I/O RNG create action */ +const VDSCRIPTARGDESC g_aArgIoRngCreate[] = +{ + /* pcszName chId enmType fFlags */ + {"size", 'd', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, VDSCRIPTARGDESC_FLAG_MANDATORY | VDSCRIPTARGDESC_FLAG_SIZE_SUFFIX}, + {"seed", 's', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, VDSCRIPTARGDESC_FLAG_MANDATORY} +}; + +/* Sleep */ +const VDSCRIPTARGDESC g_aArgSleep[] = +{ + /* pcszName chId enmType fFlags */ + {"time", 't', VDSCRIPTARGTYPE_UNSIGNED_NUMBER, VDSCRIPTARGDESC_FLAG_MANDATORY}, +}; + +const VDSCRIPTACTION g_aScriptActions[] = +{ + /* pcszAction paArgDesc cArgDescs pfnHandler */ + {"create", g_aArgCreate, RT_ELEMENTS(g_aArgCreate), vdScriptHandlerCreate}, + {"open", g_aArgOpen, RT_ELEMENTS(g_aArgOpen), vdScriptHandlerOpen}, + {"io", g_aArgIo, RT_ELEMENTS(g_aArgIo), vdScriptHandlerIo}, + {"flush", g_aArgFlush, RT_ELEMENTS(g_aArgFlush), vdScriptHandlerFlush}, + {"close", g_aArgClose, RT_ELEMENTS(g_aArgClose), vdScriptHandlerClose}, + {"merge", g_aArgMerge, RT_ELEMENTS(g_aArgMerge), vdScriptHandlerMerge}, + {"iorngcreate", g_aArgIoRngCreate, RT_ELEMENTS(g_aArgIoRngCreate), vdScriptHandlerIoRngCreate}, + {"iorngdestroy", NULL, 0, vdScriptHandlerIoRngDestroy}, + {"sleep", g_aArgSleep, RT_ELEMENTS(g_aArgSleep), vdScriptHandlerSleep}, +}; + +const unsigned g_cScriptActions = RT_ELEMENTS(g_aScriptActions); + +static void tstVDError(void *pvUser, int rc, RT_SRC_POS_DECL, + const char *pszFormat, va_list va) +{ + RTPrintf("tstVD: Error %Rrc at %s:%u (%s): ", rc, RT_SRC_POS_ARGS); + RTPrintfV(pszFormat, va); + RTPrintf("\n"); +} + +static int tstVDMessage(void *pvUser, const char *pszFormat, va_list va) +{ + RTPrintf("tstVD: "); + RTPrintfV(pszFormat, va); + return VINF_SUCCESS; +} + +static int tstVDIoTestInit(PVDIOTEST pIoTest, PVDTESTGLOB pGlob, bool fRandomAcc, size_t cbIo, + size_t cbBlkSize, uint64_t offStart, uint64_t offEnd, + unsigned uWriteChance, unsigned uReadChance); +static bool tstVDIoTestRunning(PVDIOTEST pIoTest); +static bool tstVDIoTestReqOutstanding(PVDIOREQ pIoReq); +static int tstVDIoTestReqInit(PVDIOTEST pIoTest, PVDIOREQ pIoReq); +static void tstVDIoTestReqComplete(void *pvUser1, void *pvUser2, int rcReq); + +static DECLCALLBACK(int) vdScriptHandlerCreate(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + int rc = VINF_SUCCESS; + uint64_t cbSize = 0; + const char *pcszBackend = NULL; + const char *pcszImage = NULL; + bool fBase = false; + + for (unsigned i = 0; i < cScriptArgs; i++) + { + switch (paScriptArgs[i].chId) + { + case 'm': + { + if (!RTStrICmp(paScriptArgs[i].u.pcszString, "base")) + fBase = true; + else if (!RTStrICmp(paScriptArgs[i].u.pcszString, "diff")) + fBase = false; + else + { + RTPrintf("Invalid image mode '%s' given\n", paScriptArgs[i].u.pcszString); + rc = VERR_INVALID_PARAMETER; + } + break; + } + case 'n': + { + pcszImage = paScriptArgs[i].u.pcszString; + break; + } + case 'b': + { + pcszBackend = paScriptArgs[i].u.pcszString; + break; + } + case 's': + { + cbSize = paScriptArgs[i].u.u64; + break; + } + default: + AssertMsgFailed(("Invalid argument given!\n")); + } + + if (RT_FAILURE(rc)) + break; + } + + if (RT_SUCCESS(rc)) + { + if (fBase) + rc = VDCreateBase(pGlob->pVD, pcszBackend, pcszImage, cbSize, 0, NULL, + &pGlob->PhysGeom, &pGlob->LogicalGeom, + NULL, VD_OPEN_FLAGS_ASYNC_IO, pGlob->pInterfacesImages, NULL); + else + rc = VDCreateDiff(pGlob->pVD, pcszBackend, pcszImage, 0, NULL, NULL, NULL, VD_OPEN_FLAGS_ASYNC_IO, + pGlob->pInterfacesImages, NULL); + } + + return rc; +} + +static DECLCALLBACK(int) vdScriptHandlerOpen(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + int rc = VINF_SUCCESS; + const char *pcszBackend = NULL; + const char *pcszImage = NULL; + + for (unsigned i = 0; i < cScriptArgs; i++) + { + switch (paScriptArgs[i].chId) + { + case 'n': + { + pcszImage = paScriptArgs[i].u.pcszString; + break; + } + case 'b': + { + pcszBackend = paScriptArgs[i].u.pcszString; + break; + } + default: + AssertMsgFailed(("Invalid argument given!\n")); + } + + if (RT_FAILURE(rc)) + break; + } + + if (RT_SUCCESS(rc)) + { + rc = VDOpen(pGlob->pVD, pcszBackend, pcszImage, VD_OPEN_FLAGS_ASYNC_IO, pGlob->pInterfacesImages); + } + + return rc; +} + +static DECLCALLBACK(int) vdScriptHandlerIo(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + int rc = VINF_SUCCESS; + bool fAsync = false; + bool fRandomAcc = false; + uint64_t cbIo = 0; + uint64_t cbBlkSize = 0; + bool fDataProviderRnd = false; + bool fPrintStats = false; + uint64_t offStart = 0; + uint64_t offEnd = 0; + unsigned cMaxReqs = 0; + uint8_t uWriteChance = 0; + uint8_t uReadChance = 0; + + offEnd = VDGetSize(pGlob->pVD, VD_LAST_IMAGE); + if (offEnd == 0) + return VERR_INVALID_STATE; + cbIo = offEnd; + + for (unsigned i = 0; i < cScriptArgs; i++) + { + switch (paScriptArgs[i].chId) + { + case 'a': + { + fAsync = paScriptArgs[i].u.fFlag; + break; + } + case 'l': + { + cMaxReqs = paScriptArgs[i].u.u64; + break; + } + case 'm': + { + if (!RTStrICmp(paScriptArgs[i].u.pcszString, "seq")) + fRandomAcc = false; + else if (!RTStrICmp(paScriptArgs[i].u.pcszString, "rnd")) + fRandomAcc = true; + else + { + RTPrintf("Invalid access mode '%s'\n", paScriptArgs[i].u.pcszString); + rc = VERR_INVALID_PARAMETER; + } + break; + } + case 's': + { + cbIo = paScriptArgs[i].u.u64; + break; + } + case 'b': + { + cbBlkSize = paScriptArgs[i].u.u64; + break; + } + case 'o': + { + offStart = paScriptArgs[i].u.Range.Start; + offEnd = paScriptArgs[i].u.Range.End; + break; + } + case 'r': + { + uReadChance = (uint8_t)paScriptArgs[i].u.u64; + break; + } + case 'w': + { + uWriteChance = (uint8_t)paScriptArgs[i].u.u64; + break; + } + default: + AssertMsgFailed(("Invalid argument given!\n")); + } + + if (RT_FAILURE(rc)) + break; + } + + if (RT_SUCCESS(rc)) + { + VDIOTEST IoTest; + + rc = tstVDIoTestInit(&IoTest, pGlob, fRandomAcc, cbIo, cbBlkSize, offStart, offEnd, uWriteChance, uReadChance); + if (RT_SUCCESS(rc)) + { + PVDIOREQ paIoReq = NULL; + unsigned cMaxTasksOutstanding = fAsync ? cMaxReqs : 1; + RTSEMEVENT EventSem; + + rc = RTSemEventCreate(&EventSem); + paIoReq = (PVDIOREQ)RTMemAllocZ(cMaxTasksOutstanding * sizeof(VDIOREQ)); + if (paIoReq && RT_SUCCESS(rc)) + { + for (unsigned i = 0; i < cMaxTasksOutstanding; i++) + paIoReq[i].idx = i; + + while (tstVDIoTestRunning(&IoTest)) + { + bool fTasksOutstanding = false; + unsigned idx = 0; + + /* Submit all idling requests. */ + while ( idx < cMaxTasksOutstanding + && tstVDIoTestRunning(&IoTest)) + { + if (!tstVDIoTestReqOutstanding(&paIoReq[idx])) + { + rc = tstVDIoTestReqInit(&IoTest, &paIoReq[idx]); + AssertRC(rc); + + if (RT_SUCCESS(rc)) + { + if (!fAsync) + { + switch (paIoReq[idx].enmTxDir) + { + case VDIOREQTXDIR_READ: + { + rc = VDRead(pGlob->pVD, paIoReq[idx].off, paIoReq[idx].DataSeg.pvSeg, paIoReq[idx].cbReq); + RTMemFree(paIoReq[idx].DataSeg.pvSeg); + break; + } + case VDIOREQTXDIR_WRITE: + { + rc = VDWrite(pGlob->pVD, paIoReq[idx].off, paIoReq[idx].DataSeg.pvSeg, paIoReq[idx].cbReq); + break; + } + case VDIOREQTXDIR_FLUSH: + { + rc = VDFlush(pGlob->pVD); + break; + } + } + if (RT_SUCCESS(rc)) + idx++; + } + else + { + switch (paIoReq[idx].enmTxDir) + { + case VDIOREQTXDIR_READ: + { + rc = VDAsyncRead(pGlob->pVD, paIoReq[idx].off, paIoReq[idx].cbReq, &paIoReq[idx].SgBuf, + tstVDIoTestReqComplete, &paIoReq[idx], EventSem); + if (rc == VINF_VD_ASYNC_IO_FINISHED) + RTMemFree(paIoReq[idx].DataSeg.pvSeg); + break; + } + case VDIOREQTXDIR_WRITE: + { + rc = VDAsyncWrite(pGlob->pVD, paIoReq[idx].off, paIoReq[idx].cbReq, &paIoReq[idx].SgBuf, + tstVDIoTestReqComplete, &paIoReq[idx], EventSem); + break; + } + case VDIOREQTXDIR_FLUSH: + { + rc = VDAsyncFlush(pGlob->pVD, tstVDIoTestReqComplete, &paIoReq[idx], EventSem); + break; + } + } + + if (rc == VERR_VD_ASYNC_IO_IN_PROGRESS) + { + idx++; + fTasksOutstanding = true; + rc = VINF_SUCCESS; + } + else if (rc == VINF_VD_ASYNC_IO_FINISHED) + { + ASMAtomicXchgBool(&paIoReq[idx].fOutstanding, false); + rc = VINF_SUCCESS; + } + } + + if (RT_FAILURE(rc)) + RTPrintf("Error submitting task %u rc=%Rrc\n", paIoReq[idx].idx, rc); + } + } + } + + /* Wait for a request to complete. */ + if ( fAsync + && fTasksOutstanding) + { + rc = RTSemEventWait(EventSem, RT_INDEFINITE_WAIT); + AssertRC(rc); + } + } + + /* Cleanup, wait for all tasks to complete. */ + while (fAsync) + { + unsigned idx = 0; + bool fAllIdle = true; + + while (idx < cMaxTasksOutstanding) + { + if (tstVDIoTestReqOutstanding(&paIoReq[idx])) + { + fAllIdle = false; + break; + } + idx++; + } + + if (!fAllIdle) + { + rc = RTSemEventWait(EventSem, 100); + Assert(RT_SUCCESS(rc) || rc == VERR_TIMEOUT); + } + else + break; + } + + RTSemEventDestroy(EventSem); + RTMemFree(paIoReq); + } + else + rc = VERR_NO_MEMORY; + } + } + + return rc; +} + +static DECLCALLBACK(int) vdScriptHandlerFlush(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + int rc = VINF_SUCCESS; + bool fAsync = false; + + if (cScriptArgs == 1 && paScriptArgs[0].chId == 'a') + fAsync = paScriptArgs[0].u.fFlag; + + if (fAsync) + { + /** @todo */ + rc = VERR_NOT_IMPLEMENTED; + } + else + rc = VDFlush(pGlob->pVD); + + return rc; +} + +static DECLCALLBACK(int) vdScriptHandlerMerge(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + return VERR_NOT_IMPLEMENTED; +} + +static DECLCALLBACK(int) vdScriptHandlerClose(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + int rc = VINF_SUCCESS; + bool fAll = false; + bool fDelete = false; + + for (unsigned i = 0; i < cScriptArgs; i++) + { + switch (paScriptArgs[i].chId) + { + case 'm': + { + if (!RTStrICmp(paScriptArgs[i].u.pcszString, "all")) + fAll = true; + else if (!RTStrICmp(paScriptArgs[i].u.pcszString, "single")) + fAll = false; + else + { + RTPrintf("Invalid mode '%s' given\n", paScriptArgs[i].u.pcszString); + rc = VERR_INVALID_PARAMETER; + } + break; + } + case 'd': + { + fDelete = paScriptArgs[i].u.fFlag; + break; + } + default: + AssertMsgFailed(("Invalid argument given!\n")); + } + + if (RT_FAILURE(rc)) + break; + } + + if ( RT_SUCCESS(rc) + && fAll + && fDelete) + { + RTPrintf("mode=all doesn't work with delete=yes\n"); + rc = VERR_INVALID_PARAMETER; + } + + if (RT_SUCCESS(rc)) + { + if (fAll) + rc = VDCloseAll(pGlob->pVD); + else + rc = VDClose(pGlob->pVD, fDelete); + } + return rc; +} + + +static DECLCALLBACK(int) vdScriptHandlerIoRngCreate(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + int rc = VINF_SUCCESS; + size_t cbPattern = 0; + uint64_t uSeed = 0; + + for (unsigned i = 0; i < cScriptArgs; i++) + { + switch (paScriptArgs[i].chId) + { + case 'd': + { + cbPattern = paScriptArgs[i].u.u64; + break; + } + case 's': + { + uSeed = paScriptArgs[i].u.u64; + break; + } + default: + AssertMsgFailed(("Invalid argument given!\n")); + } + } + + if (pGlob->pIoRnd) + { + RTPrintf("I/O RNG already exists\n"); + rc = VERR_INVALID_STATE; + } + else + rc = VDIoRndCreate(&pGlob->pIoRnd, cbPattern, uSeed); + + return rc; +} + +static DECLCALLBACK(int) vdScriptHandlerIoRngDestroy(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + if (pGlob->pIoRnd) + { + VDIoRndDestroy(pGlob->pIoRnd); + pGlob->pIoRnd = NULL; + } + else + RTPrintf("WARNING: No I/O RNG active, faulty script. Continuing\n"); + + return VINF_SUCCESS; +} + +static DECLCALLBACK(int) vdScriptHandlerSleep(PVDTESTGLOB pGlob, PVDSCRIPTARG paScriptArgs, unsigned cScriptArgs) +{ + int rc = VINF_SUCCESS; + uint64_t cMillies = 0; + + for (unsigned i = 0; i < cScriptArgs; i++) + { + switch (paScriptArgs[i].chId) + { + case 't': + { + cMillies = paScriptArgs[i].u.u64; + break; + } + default: + AssertMsgFailed(("Invalid argument given!\n")); + } + } + + rc = RTThreadSleep(cMillies); + return rc; +} + +static DECLCALLBACK(int) tstVDIoFileOpen(void *pvUser, const char *pszLocation, + uint32_t fOpen, + PFNVDCOMPLETED pfnCompleted, + void **ppStorage) +{ + int rc = VINF_SUCCESS; + PVDTESTGLOB pGlob = (PVDTESTGLOB)pvUser; + bool fFound = false; + + /* Check if the file exists. */ + PVDFILE pIt = NULL; + RTListForEach(&pGlob->ListFiles, pIt, VDFILE, Node) + { + if (!RTStrCmp(pIt->pszName, pszLocation)) + { + fFound = true; + break; + } + } + + if (fFound && pIt->pfnComplete) + rc = VERR_FILE_LOCK_FAILED; + else if ((fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_CREATE) + { + /* If the file exists delete the memory disk. */ + if (fFound) + rc = VDMemDiskSetSize(pIt->pMemDisk, 0); + else + { + /* Create completey new. */ + pIt = (PVDFILE)RTMemAllocZ(sizeof(VDFILE)); + if (pIt) + { + pIt->pfnComplete = pfnCompleted; + pIt->pszName = RTStrDup(pszLocation); + + if (pIt->pszName) + { + rc = VDMemDiskCreate(&pIt->pMemDisk, 0); + } + else + rc = VERR_NO_MEMORY; + + if (RT_FAILURE(rc)) + { + if (pIt->pszName) + RTStrFree(pIt->pszName); + RTMemFree(pIt); + } + } + else + rc = VERR_NO_MEMORY; + + RTListAppend(&pGlob->ListFiles, &pIt->Node); + } + } + else if ((fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_OPEN) + { + if (!fFound) + rc = VERR_FILE_NOT_FOUND; + else + pIt->pfnComplete = pfnCompleted; + } + else + rc = VERR_INVALID_PARAMETER; + + if (RT_SUCCESS(rc)) + { + AssertPtr(pIt); + *ppStorage = pIt; + } + + return rc; +} + +static DECLCALLBACK(int) tstVDIoFileClose(void *pvUser, void *pStorage) +{ + PVDFILE pFile = (PVDFILE)pStorage; + + /* Mark as not busy. */ + pFile->pfnComplete = NULL; + return VINF_SUCCESS; +} + +static DECLCALLBACK(int) tstVDIoFileDelete(void *pvUser, const char *pcszFilename) +{ + int rc = VINF_SUCCESS; + PVDTESTGLOB pGlob = (PVDTESTGLOB)pvUser; + bool fFound = false; + + /* Check if the file exists. */ + PVDFILE pIt = NULL; + RTListForEach(&pGlob->ListFiles, pIt, VDFILE, Node) + { + if (!RTStrCmp(pIt->pszName, pcszFilename)) + { + fFound = true; + break; + } + } + + if (fFound) + { + RTListNodeRemove(&pIt->Node); + VDMemDiskDestroy(pIt->pMemDisk); + RTStrFree(pIt->pszName); + RTMemFree(pIt); + } + else + rc = VERR_FILE_NOT_FOUND; + + return rc; +} + +static DECLCALLBACK(int) tstVDIoFileMove(void *pvUser, const char *pcszSrc, const char *pcszDst, unsigned fMove) +{ + int rc = VINF_SUCCESS; + PVDTESTGLOB pGlob = (PVDTESTGLOB)pvUser; + bool fFound = false; + + /* Check if the file exists. */ + PVDFILE pIt = NULL; + RTListForEach(&pGlob->ListFiles, pIt, VDFILE, Node) + { + if (!RTStrCmp(pIt->pszName, pcszSrc)) + { + fFound = true; + break; + } + } + + if (fFound) + { + char *pszNew = RTStrDup(pcszDst); + if (pszNew) + { + RTStrFree(pIt->pszName); + pIt->pszName = pszNew; + } + else + rc = VERR_NO_MEMORY; + } + else + rc = VERR_FILE_NOT_FOUND; + + return rc; +} + +static DECLCALLBACK(int) tstVDIoFileGetFreeSpace(void *pvUser, const char *pcszFilename, int64_t *pcbFreeSpace) +{ + AssertPtrReturn(pcbFreeSpace, VERR_INVALID_POINTER); + + *pcbFreeSpace = ~0ULL; /** @todo: Implement */ + return VINF_SUCCESS; +} + +static DECLCALLBACK(int) tstVDIoFileGetModificationTime(void *pvUser, const char *pcszFilename, PRTTIMESPEC pModificationTime) +{ + AssertPtrReturn(pModificationTime, VERR_INVALID_POINTER); + + /** @todo: Implement */ + return VINF_SUCCESS; +} + +static DECLCALLBACK(int) tstVDIoFileGetSize(void *pvUser, void *pStorage, uint64_t *pcbSize) +{ + PVDFILE pFile = (PVDFILE)pStorage; + + return VDMemDiskGetSize(pFile->pMemDisk, pcbSize); +} + +static DECLCALLBACK(int) tstVDIoFileSetSize(void *pvUser, void *pStorage, uint64_t cbSize) +{ + PVDFILE pFile = (PVDFILE)pStorage; + + return VDMemDiskSetSize(pFile->pMemDisk, cbSize); +} + +static DECLCALLBACK(int) tstVDIoFileWriteSync(void *pvUser, void *pStorage, uint64_t uOffset, + const void *pvBuffer, size_t cbBuffer, size_t *pcbWritten) +{ + int rc = VINF_SUCCESS; + PVDFILE pFile = (PVDFILE)pStorage; + + RTSGBUF SgBuf; + RTSGSEG Seg; + + Seg.pvSeg = (void *)pvBuffer; + Seg.cbSeg = cbBuffer; + RTSgBufInit(&SgBuf, &Seg, 1); + rc = VDMemDiskWrite(pFile->pMemDisk, uOffset, cbBuffer, &SgBuf); + if (RT_SUCCESS(rc) && pcbWritten) + *pcbWritten = cbBuffer; + + return rc; +} + +static DECLCALLBACK(int) tstVDIoFileReadSync(void *pvUser, void *pStorage, uint64_t uOffset, + void *pvBuffer, size_t cbBuffer, size_t *pcbRead) +{ + int rc = VINF_SUCCESS; + PVDFILE pFile = (PVDFILE)pStorage; + + RTSGBUF SgBuf; + RTSGSEG Seg; + + Seg.pvSeg = pvBuffer; + Seg.cbSeg = cbBuffer; + RTSgBufInit(&SgBuf, &Seg, 1); + rc = VDMemDiskRead(pFile->pMemDisk, uOffset, cbBuffer, &SgBuf); + if (RT_SUCCESS(rc) && pcbRead) + *pcbRead = cbBuffer; + + return rc; +} + +static DECLCALLBACK(int) tstVDIoFileFlushSync(void *pvUser, void *pStorage) +{ + /* nothing to do. */ + return VINF_SUCCESS; +} + +static DECLCALLBACK(int) tstVDIoFileReadAsync(void *pvUser, void *pStorage, uint64_t uOffset, + PCRTSGSEG paSegments, size_t cSegments, + size_t cbRead, void *pvCompletion, + void **ppTask) +{ + int rc = VINF_SUCCESS; + PVDTESTGLOB pGlob = (PVDTESTGLOB)pvUser; + PVDFILE pFile = (PVDFILE)pStorage; + + rc = VDIoBackendMemTransfer(pGlob->pIoBackend, pFile->pMemDisk, VDIOTXDIR_READ, uOffset, + cbRead, paSegments, cSegments, pFile->pfnComplete, pvCompletion); + if (RT_SUCCESS(rc)) + rc = VERR_VD_ASYNC_IO_IN_PROGRESS; + + return rc; +} + +static DECLCALLBACK(int) tstVDIoFileWriteAsync(void *pvUser, void *pStorage, uint64_t uOffset, + PCRTSGSEG paSegments, size_t cSegments, + size_t cbWrite, void *pvCompletion, + void **ppTask) +{ + int rc = VINF_SUCCESS; + PVDTESTGLOB pGlob = (PVDTESTGLOB)pvUser; + PVDFILE pFile = (PVDFILE)pStorage; + + rc = VDIoBackendMemTransfer(pGlob->pIoBackend, pFile->pMemDisk, VDIOTXDIR_WRITE, uOffset, + cbWrite, paSegments, cSegments, pFile->pfnComplete, pvCompletion); + if (RT_SUCCESS(rc)) + rc = VERR_VD_ASYNC_IO_IN_PROGRESS; + + return rc; +} + +static DECLCALLBACK(int) tstVDIoFileFlushAsync(void *pvUser, void *pStorage, void *pvCompletion, + void **ppTask) +{ + int rc = VINF_SUCCESS; + PVDTESTGLOB pGlob = (PVDTESTGLOB)pvUser; + PVDFILE pFile = (PVDFILE)pStorage; + + rc = VDIoBackendMemTransfer(pGlob->pIoBackend, pFile->pMemDisk, VDIOTXDIR_FLUSH, 0, + 0, NULL, 0, pFile->pfnComplete, pvCompletion); + if (RT_SUCCESS(rc)) + rc = VERR_VD_ASYNC_IO_IN_PROGRESS; + + return rc; +} + +static int tstVDIoTestInit(PVDIOTEST pIoTest, PVDTESTGLOB pGlob, bool fRandomAcc, size_t cbIo, + size_t cbBlkSize, uint64_t offStart, uint64_t offEnd, + unsigned uWriteChance, unsigned uReadChance) +{ + pIoTest->fRandomAccess = fRandomAcc; + pIoTest->cbIo = cbIo; + pIoTest->cbBlkIo = cbBlkSize; + pIoTest->offStart = offStart; + pIoTest->offEnd = offEnd; + pIoTest->uWriteChance = uWriteChance; + pIoTest->pIoRnd = pGlob->pIoRnd; + pIoTest->offNext = pIoTest->offEnd < pIoTest->offStart ? pIoTest->offEnd - cbBlkSize : 0; + return VINF_SUCCESS; +} + +static bool tstVDIoTestRunning(PVDIOTEST pIoTest) +{ + return pIoTest->cbIo > 0; +} + +static bool tstVDIoTestReqOutstanding(PVDIOREQ pIoReq) +{ + return pIoReq->fOutstanding; +} + +/** + * Returns true with the given chance in percent. + * + * @returns true or false + * @param iPercentage The percentage of the chance to return true. + */ +static bool tstVDIoTestIsTrue(PVDIOTEST pIoTest, int iPercentage) +{ + int uRnd = VDIoRndGetU32Ex(pIoTest->pIoRnd, 0, 100); + + return (uRnd <= iPercentage); /* This should be enough for our purpose */ +} + +static int tstVDIoTestReqInit(PVDIOTEST pIoTest, PVDIOREQ pIoReq) +{ + int rc = VINF_SUCCESS; + + if (pIoTest->cbIo) + { + /* Read or Write? */ + pIoReq->enmTxDir = tstVDIoTestIsTrue(pIoTest, pIoTest->uWriteChance) ? VDIOREQTXDIR_WRITE : VDIOREQTXDIR_READ; + pIoReq->cbReq = RT_MIN(pIoTest->cbBlkIo, pIoTest->cbIo); + pIoTest->cbIo -= pIoReq->cbReq; + pIoReq->DataSeg.cbSeg = pIoReq->cbReq; + pIoReq->off = pIoTest->offNext; + + if (pIoReq->enmTxDir == VDIOREQTXDIR_WRITE) + { + rc = VDIoRndGetBuffer(pIoTest->pIoRnd, &pIoReq->DataSeg.pvSeg, pIoReq->cbReq); + AssertRC(rc); + } + else + { + /* Read */ + pIoReq->DataSeg.pvSeg = RTMemAlloc(pIoReq->cbReq); + if (!pIoReq->DataSeg.pvSeg) + rc = VERR_NO_MEMORY; + } + + if (RT_SUCCESS(rc)) + { + RTSgBufInit(&pIoReq->SgBuf, &pIoReq->DataSeg, 1); + + if (pIoTest->fRandomAccess) + { + /** @todo */ + } + else + { + pIoTest->offNext = pIoTest->offEnd < pIoTest->offStart + ? RT_MAX(pIoTest->offEnd, pIoTest->offNext - pIoTest->cbBlkIo) + : RT_MIN(pIoTest->offEnd, pIoTest->offNext + pIoTest->cbBlkIo); + } + pIoReq->fOutstanding = true; + } + } + else + rc = VERR_ACCESS_DENIED; + + return rc; +} + +static void tstVDIoTestReqComplete(void *pvUser1, void *pvUser2, int rcReq) +{ + PVDIOREQ pIoReq = (PVDIOREQ)pvUser1; + RTSEMEVENT hEventSem = (RTSEMEVENT)pvUser2; + + ASMAtomicXchgBool(&pIoReq->fOutstanding, false); + RTSemEventSignal(hEventSem); + return; +} + +/** + * Skips the characters until the given character is reached. + * + * @returns Start of the string with the given character + * or NULL if the string ended before. + * + * @param psz The string to skip. + * @param ch The character. + */ +static char *tstVDIoScriptSkipUntil(char *psz, char ch) +{ + while ( *psz != '\0' + && *psz != ch) + psz++; + + return psz; +} + +/** + * Skips the spaces of the current string. + * + * @returns Start of the string with a non space character + * or NULL if the string ended before. + * + * @param psz The string to skip. + */ +static char *tstVDIoScriptSkipSpace(char *psz) +{ + while ( *psz != '\0' + && RT_C_IS_SPACE(*psz)) + psz++; + + return psz; +} + +/** + * Skips all characters until a space is reached of the current + * string. + * + * @returns Start of the string with a space character + * or NULL if the string ended before. + * + * @param psz The string to skip. + */ +static char *tstVDIoScriptSkipNonSpace(char *psz) +{ + while ( *psz != '\0' + && !RT_C_IS_SPACE(*psz)) + psz++; + + return psz; +} + +/** + * Parses one argument name, value pair. + * + * @returns IPRT status code. + * + * @param pVDScriptAction Script action. + * @param pcszName Argument name. + * @param pcszValue Argument value. + * @param pScriptArg Where to fill in the parsed + * argument. + * @param pfMandatory Where to store whether the argument + * is mandatory. + */ +static int tstVDIoScriptArgumentParse(PCVDSCRIPTACTION pVDScriptAction, const char *pcszName, + const char *pcszValue, PVDSCRIPTARG pScriptArg, bool *pfMandatory) +{ + int rc = VERR_NOT_FOUND; + + for (unsigned i = 0; i < pVDScriptAction->cArgDescs; i++) + { + if (!RTStrCmp(pVDScriptAction->paArgDesc[i].pcszName, pcszName)) + { + rc = VINF_SUCCESS; + + switch (pVDScriptAction->paArgDesc[i].enmType) + { + case VDSCRIPTARGTYPE_BOOL: + { + pScriptArg->enmType = VDSCRIPTARGTYPE_BOOL; + if (!RTStrICmp(pcszValue, "yes") || !RTStrICmp(pcszValue, "on")) + pScriptArg->u.fFlag = true; + else if (!RTStrICmp(pcszValue, "no") || !RTStrICmp(pcszValue, "off")) + pScriptArg->u.fFlag = false; + else + { + RTPrintf("Boolean argument malformed '%s'\n", pcszValue); + rc = VERR_INVALID_PARAMETER; + } + break; + } + case VDSCRIPTARGTYPE_SIGNED_NUMBER: + { + pScriptArg->enmType = VDSCRIPTARGTYPE_SIGNED_NUMBER; + AssertMsgFailed(("todo\n")); + break; + } + case VDSCRIPTARGTYPE_STRING: + { + pScriptArg->enmType = VDSCRIPTARGTYPE_STRING; + pScriptArg->u.pcszString = pcszValue; + break; + } + case VDSCRIPTARGTYPE_UNSIGNED_NUMBER: + { + char *pszSuffix = NULL; + + pScriptArg->enmType = VDSCRIPTARGTYPE_UNSIGNED_NUMBER; + rc = RTStrToUInt64Ex(pcszValue, &pszSuffix, 10, &pScriptArg->u.u64); + if (rc == VWRN_TRAILING_CHARS) + { + switch (*pszSuffix) + { + case 'k': + case 'K': + { + pScriptArg->u.u64 *= _1K; + break; + } + case 'm': + case 'M': + { + pScriptArg->u.u64 *= _1M; + break; + } + case 'g': + case 'G': + { + pScriptArg->u.u64 *= _1G; + break; + } + default: + { + RTPrintf("Invalid size suffix '%s'\n", pszSuffix); + rc = VERR_INVALID_PARAMETER; + } + } + if (rc != VERR_INVALID_PARAMETER) + rc = VINF_SUCCESS; + } + + break; + } + case VDSCRIPTARGTYPE_UNSIGNED_RANGE: + { + char *pszSuffix = NULL; + + pScriptArg->enmType = VDSCRIPTARGTYPE_UNSIGNED_RANGE; + rc = RTStrToUInt64Ex(pcszValue, &pszSuffix, 10, &pScriptArg->u.Range.Start); + if (rc == VWRN_TRAILING_CHARS) + { + if (*pszSuffix != '-') + { + switch (*pszSuffix) + { + case 'k': + case 'K': + { + pScriptArg->u.u64 *= _1K; + break; + } + case 'm': + case 'M': + { + pScriptArg->u.u64 *= _1M; + break; + } + case 'g': + case 'G': + { + pScriptArg->u.u64 *= _1G; + break; + } + default: + { + RTPrintf("Invalid size suffix '%s'\n", pszSuffix); + rc = VERR_INVALID_PARAMETER; + } + } + } + + if (*pszSuffix == '-') + { + pszSuffix++; + rc = RTStrToUInt64Ex(pszSuffix, &pszSuffix, 10, &pScriptArg->u.Range.End); + if (rc == VWRN_TRAILING_CHARS) + { + switch (*pszSuffix) + { + case 'k': + case 'K': + { + pScriptArg->u.Range.End *= _1K; + break; + } + case 'm': + case 'M': + { + pScriptArg->u.Range.End *= _1M; + break; + } + case 'g': + case 'G': + { + pScriptArg->u.Range.End *= _1G; + break; + } + default: + { + RTPrintf("Invalid size suffix '%s'\n", pszSuffix); + rc = VERR_INVALID_PARAMETER; + } + } + } + } + else + rc = VERR_INVALID_PARAMETER; + } + else + rc = VERR_INVALID_PARAMETER; + + if (rc == VERR_INVALID_PARAMETER) + RTPrintf("Invalid range format\n"); + break; + } + default: + AssertMsgFailed(("Invalid script argument type\n")); + } + + if (RT_SUCCESS(rc)) + { + pScriptArg->chId = pVDScriptAction->paArgDesc[i].chId; + *pfMandatory = !!(pVDScriptAction->paArgDesc[i].fFlags & VDSCRIPTARGDESC_FLAG_MANDATORY); + } + break; + } + } + + if (rc == VERR_NOT_FOUND) + RTPrintf("Argument '%s' not found\n", pcszName); + + return rc; +} + +/** + * Parses the arguments of a action in the script. + * + * @returns IPRT status code. + * + * @param psz Argument string. + * @param pVDScriptAction The script action to parses + * arguments for. + * @param paScriptArgs Where to store the arguments. + * @param pcScriptArgs Where to store the actual number of + * arguments parsed. + */ +static int tstVDIoScriptArgumentListParse(char *psz, PCVDSCRIPTACTION pVDScriptAction, PVDSCRIPTARG paScriptArgs, unsigned *pcScriptArgs) +{ + int rc = VINF_SUCCESS; + unsigned cMandatoryArgsReq = 0; + unsigned cScriptArgs = 0; + + /* Count the number of mandatory arguments first. */ + for (unsigned i = 0; i < pVDScriptAction->cArgDescs; i++) + if (pVDScriptAction->paArgDesc[i].fFlags & VDSCRIPTARGDESC_FLAG_MANDATORY) + cMandatoryArgsReq++; + + /* One argument is given in the form name=value. */ + *pcScriptArgs = 0; + + while ( psz + && *psz != '\0') + { + const char *pcszName = psz; + + psz = tstVDIoScriptSkipUntil(psz, '='); + if (psz != '\0') + { + *psz = '\0'; /* Overwrite */ + psz++; + const char *pcszValue = psz; + + psz = tstVDIoScriptSkipNonSpace(psz); + if (psz != '\0') + { + *psz = '\0'; /* Overwrite */ + psz++; + psz = tstVDIoScriptSkipSpace(psz); + + /* We have the name and value pair now. */ + bool fMandatory; + rc = tstVDIoScriptArgumentParse(pVDScriptAction, pcszName, pcszValue, &paScriptArgs[cScriptArgs], &fMandatory); + if (RT_SUCCESS(rc)) + { + if (fMandatory) + cMandatoryArgsReq--; + cScriptArgs++; + } + } + else + { + RTPrintf("Value missing for argument '%s'\n", pcszName); + rc = VERR_INVALID_STATE; + break; + } + } + else + { + RTPrintf("Argument in invalid form\n"); + rc = VERR_INVALID_STATE; + break; + } + } + + if ( RT_SUCCESS(rc) + && cMandatoryArgsReq) + { + /* No arguments anymore but there are still mandatory arguments left. */ + RTPrintf("There are %u arguments missing for script action '%s\n", pVDScriptAction->pcszAction); + rc = VERR_INVALID_STATE; + } + + if (RT_SUCCESS(rc)) + *pcScriptArgs = cScriptArgs; + + return rc; +} + +/** + * Executes the script pointed to by the given stream. + * + * @returns IPRT status code. + * + * @param pStrm The stream handle of the script. + * @param pGlob Global test data. + */ +static int tstVDIoScriptExecute(PRTSTREAM pStrm, PVDTESTGLOB pGlob) +{ + int rc = VINF_SUCCESS; + char abBuffer[0x1000]; /* Current assumption that a line is never longer than 4096 bytes. */ + PVDSCRIPTARG paScriptArgs = NULL; + unsigned cScriptArgsMax = 0; + + do + { + memset(abBuffer, 0, sizeof(abBuffer)); + rc = RTStrmGetLine(pStrm, abBuffer, sizeof(abBuffer)); + if (RT_SUCCESS(rc)) + { + const char *pcszAction = NULL; + char *psz = abBuffer; + + /* Skip space */ + psz = tstVDIoScriptSkipSpace(psz); + if (psz != '\0') + { + PCVDSCRIPTACTION pVDScriptAction = NULL; + + /* Get the action name. */ + pcszAction = psz; + + psz = tstVDIoScriptSkipNonSpace(psz); + if (psz != '\0') + { + Assert(RT_C_IS_SPACE(*psz)); + *psz++ = '\0'; + } + + /* Find the action. */ + for (unsigned i = 0; i < g_cScriptActions; i++) + { + if (!RTStrCmp(pcszAction, g_aScriptActions[i].pcszAction)) + { + pVDScriptAction = &g_aScriptActions[i]; + break; + } + } + + if (pVDScriptAction) + { + /* Parse arguments. */ + if (cScriptArgsMax < pVDScriptAction->cArgDescs) + { + /* Increase arguments array. */ + if (paScriptArgs) + RTMemFree(paScriptArgs); + + cScriptArgsMax = pVDScriptAction->cArgDescs; + paScriptArgs = (PVDSCRIPTARG)RTMemAllocZ(cScriptArgsMax * sizeof(VDSCRIPTARG)); + } + + if (paScriptArgs) + { + unsigned cScriptArgs; + + rc = tstVDIoScriptArgumentListParse(psz, pVDScriptAction, paScriptArgs, &cScriptArgs); + if (RT_SUCCESS(rc)) + { + /* Execute the handler. */ + rc = pVDScriptAction->pfnHandler(pGlob, paScriptArgs, cScriptArgs); + } + } + else + { + RTPrintf("Out of memory while allocating argument array for script action %s\n", pcszAction); + rc = VERR_NO_MEMORY; + } + } + else + { + RTPrintf("Script action %s is not known\n", pcszAction); + rc = VERR_NOT_FOUND; + } + } + else + { + RTPrintf("Missing action name\n"); + rc = VERR_INVALID_STATE; + } + } + } while(RT_SUCCESS(rc)); + + if (rc == VERR_EOF) + { + RTPrintf("Successfully executed I/O script\n"); + rc = VINF_SUCCESS; + } + return rc; +} + +/** + * Executes the given I/O script. + * + * @returns nothing. + * + * @param pcszFilename The script to execute. + */ +static void tstVDIoScriptRun(const char *pcszFilename) +{ + int rc = VINF_SUCCESS; + PRTSTREAM pScriptStrm; /**< Stream of the script file. */ + VDTESTGLOB GlobTest; /**< Global test data. */ + + memset(&GlobTest, 0, sizeof(VDTESTGLOB)); + RTListInit(&GlobTest.ListFiles); + + rc = RTStrmOpen(pcszFilename, "r", &pScriptStrm); + if (RT_SUCCESS(rc)) + { + /* Init global test data. */ + GlobTest.VDIErrorCallbacks.cbSize = sizeof(VDINTERFACEERROR); + GlobTest.VDIErrorCallbacks.enmInterface = VDINTERFACETYPE_ERROR; + GlobTest.VDIErrorCallbacks.pfnError = tstVDError; + GlobTest.VDIErrorCallbacks.pfnMessage = tstVDMessage; + + rc = VDInterfaceAdd(&GlobTest.VDIError, "tstVDIo_VDIError", VDINTERFACETYPE_ERROR, + &GlobTest.VDIErrorCallbacks, NULL, &GlobTest.pInterfacesDisk); + AssertRC(rc); + + GlobTest.VDIIoCallbacks.cbSize = sizeof(VDINTERFACEIO); + GlobTest.VDIIoCallbacks.enmInterface = VDINTERFACETYPE_IO; + GlobTest.VDIIoCallbacks.pfnOpen = tstVDIoFileOpen; + GlobTest.VDIIoCallbacks.pfnClose = tstVDIoFileClose; + GlobTest.VDIIoCallbacks.pfnDelete = tstVDIoFileDelete; + GlobTest.VDIIoCallbacks.pfnMove = tstVDIoFileMove; + GlobTest.VDIIoCallbacks.pfnGetFreeSpace = tstVDIoFileGetFreeSpace; + GlobTest.VDIIoCallbacks.pfnGetModificationTime = tstVDIoFileGetModificationTime; + GlobTest.VDIIoCallbacks.pfnGetSize = tstVDIoFileGetSize; + GlobTest.VDIIoCallbacks.pfnSetSize = tstVDIoFileSetSize; + GlobTest.VDIIoCallbacks.pfnWriteSync = tstVDIoFileWriteSync; + GlobTest.VDIIoCallbacks.pfnReadSync = tstVDIoFileReadSync; + GlobTest.VDIIoCallbacks.pfnFlushSync = tstVDIoFileFlushSync; + GlobTest.VDIIoCallbacks.pfnReadAsync = tstVDIoFileReadAsync; + GlobTest.VDIIoCallbacks.pfnWriteAsync = tstVDIoFileWriteAsync; + GlobTest.VDIIoCallbacks.pfnFlushAsync = tstVDIoFileFlushAsync; + + rc = VDInterfaceAdd(&GlobTest.VDIIo, "tstVDIo_VDIIo", VDINTERFACETYPE_IO, + &GlobTest.VDIIoCallbacks, &GlobTest, &GlobTest.pInterfacesImages); + AssertRC(rc); + + /* Init I/O backend. */ + rc = VDIoBackendMemCreate(&GlobTest.pIoBackend); + if (RT_SUCCESS(rc)) + { + rc = VDCreate(GlobTest.pInterfacesDisk, VDTYPE_HDD, &GlobTest.pVD); + if (RT_SUCCESS(rc)) + { + /* Execute the script. */ + rc = tstVDIoScriptExecute(pScriptStrm, &GlobTest); + if (RT_FAILURE(rc)) + { + RTPrintf("Executing the script stream failed rc=%Rrc\n", rc); + } + } + else + RTPrintf("Failed to create disk container rc=%Rrc\n", rc); + VDIoBackendMemDestroy(GlobTest.pIoBackend); + } + else + RTPrintf("Creating the I/O backend failed rc=%Rrc\n"); + + RTStrmClose(pScriptStrm); + } + else + RTPrintf("Opening script failed rc=%Rrc\n", rc); +} + +/** + * Shows help message. + */ +static void printUsage(void) +{ + RTPrintf("Usage:\n" + "--script <filename> Script to execute\n" + "--replay <filename> Log to replay (not implemented yet)\n"); +} + +static const RTGETOPTDEF g_aOptions[] = +{ + { "--script", 's', RTGETOPT_REQ_STRING }, + { "--replay", 'r', RTGETOPT_REQ_STRING }, +}; + +int main(int argc, char *argv[]) +{ + RTR3Init(); + int rc; + RTGETOPTUNION ValueUnion; + RTGETOPTSTATE GetState; + char c; + + if (argc != 3) + { + printUsage(); + return RTEXITCODE_FAILURE; + } + + rc = VDInit(); + if (RT_FAILURE(rc)) + return RTEXITCODE_FAILURE; + + RTGetOptInit(&GetState, argc, argv, g_aOptions, + RT_ELEMENTS(g_aOptions), 1, RTGETOPTINIT_FLAGS_NO_STD_OPTS); + + while ( RT_SUCCESS(rc) + && (c = RTGetOpt(&GetState, &ValueUnion))) + { + switch (c) + { + case 's': + tstVDIoScriptRun(ValueUnion.psz); + break; + case 'r': + RTPrintf("Replaying I/O logs is not implemented yet\n"); + break; + default: + printUsage(); + } + } + + rc = VDShutdown(); + if (RT_FAILURE(rc)) + RTPrintf("tstVDIo: unloading backends failed! rc=%Rrc\n", rc); + + return RTEXITCODE_SUCCESS; +} + diff --git a/src/VBox/VMM/DBGFReg.cpp b/src/VBox/VMM/DBGFReg.cpp deleted file mode 100644 index 9121d3e77..000000000 --- a/src/VBox/VMM/DBGFReg.cpp +++ /dev/null @@ -1,393 +0,0 @@ -/* $Id: DBGFReg.cpp 31491 2010-08-09 16:13:37Z vboxsync $ */ -/** @file - * DBGF - Debugger Facility, Register Methods. - */ - -/* - * Copyright (C) 2010 Oracle Corporation - * - * This file is part of VirtualBox Open Source Edition (OSE), as - * available from http://www.virtualbox.org. This file is free software; - * you can redistribute it and/or modify it under the terms of the GNU - * General Public License (GPL) as published by the Free Software - * Foundation, in version 2 as it comes in the "COPYING" file of the - * VirtualBox OSE distribution. VirtualBox OSE is distributed in the - * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. - */ - - -/******************************************************************************* -* Header Files * -*******************************************************************************/ -#define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include "DBGFInternal.h" -#include <VBox/vm.h> -#include <VBox/param.h> -#include <VBox/err.h> -#include <VBox/log.h> - - -/******************************************************************************* -* Defined Constants And Macros * -*******************************************************************************/ -/** @name Register and value sizes used by dbgfR3RegQueryWorker and - * dbgfR3RegSetWorker. - * @{ */ -#define R_SZ_8 RT_BIT(0) -#define R_SZ_16 RT_BIT(1) -#define R_SZ_32 RT_BIT(2) -#define R_SZ_64 RT_BIT(3) -#define R_SZ_64_16 RT_BIT(4) -#define R_SZ_8_TO_64 (R_SZ_8 | R_SZ_16 | R_SZ_32 | R_SZ_64) -#define R_SZ_16_TO_64 (R_SZ_16 | R_SZ_32 | R_SZ_64) -#define R_SZ_32_OR_64 (R_SZ_32 | R_SZ_64) -/** @} */ - - -/** - * Wrapper around CPUMQueryGuestMsr. - * - * @retval VINF_SUCCESS - * @retval VERR_DBGF_INVALID_REGISTER - * - * @param pVCpu The current CPU. - * @param pu64 Where to store the register value. - * @param pfRegSizes Where to store the register sizes. - * @param idMsr The MSR to get. - */ -static uint64_t dbgfR3RegGetMsr(PVMCPU pVCpu, uint64_t *pu64, uint32_t *pfRegSizes, uint32_t idMsr) -{ - *pfRegSizes = R_SZ_64; - int rc = CPUMQueryGuestMsr(pVCpu, idMsr, pu64); - if (RT_FAILURE(rc)) - { - AssertMsg(rc == VERR_CPUM_RAISE_GP_0, ("%Rrc\n", rc)); - *pu64 = 0; - } - return VINF_SUCCESS; -} - -/** - * Worker for DBGFR3RegQueryU8, DBGFR3RegQueryU16, DBGFR3RegQueryU32 and - * DBGFR3RegQueryU64. - * - * @param pVM The VM handle. - * @param idCpu The target CPU ID. - * @param enmReg The register that's being queried. - * @param pu64 Where to store the register value. - * @param pfRegSizes Where to store the register sizes. - */ -static DECLCALLBACK(int) dbgfR3RegQueryWorker(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t *pu64, uint32_t *pfRegSizes) -{ - PVMCPU pVCpu = &pVM->aCpus[idCpu]; - PCCPUMCTX pCtx = CPUMQueryGuestCtxPtr(pVCpu); - switch (enmReg) - { - case DBGFREG_RAX: *pu64 = pCtx->rax; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_RCX: *pu64 = pCtx->rcx; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_RDX: *pu64 = pCtx->rdx; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_RBX: *pu64 = pCtx->rbx; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_RSP: *pu64 = pCtx->rsp; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_RBP: *pu64 = pCtx->rbp; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_RSI: *pu64 = pCtx->rsi; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_RDI: *pu64 = pCtx->rdi; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_R8: *pu64 = pCtx->r8; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_R9: *pu64 = pCtx->r9; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_R10: *pu64 = pCtx->r10; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_R11: *pu64 = pCtx->r11; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_R12: *pu64 = pCtx->r12; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_R13: *pu64 = pCtx->r13; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_R14: *pu64 = pCtx->r14; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - case DBGFREG_R15: *pu64 = pCtx->r15; *pfRegSizes = R_SZ_8_TO_64; return VINF_SUCCESS; - - case DBGFREG_AH: *pu64 = RT_BYTE2(pCtx->ax); *pfRegSizes = R_SZ_8; return VINF_SUCCESS; - case DBGFREG_CH: *pu64 = RT_BYTE2(pCtx->cx); *pfRegSizes = R_SZ_8; return VINF_SUCCESS; - case DBGFREG_DH: *pu64 = RT_BYTE2(pCtx->dx); *pfRegSizes = R_SZ_8; return VINF_SUCCESS; - case DBGFREG_BH: *pu64 = RT_BYTE2(pCtx->bx); *pfRegSizes = R_SZ_8; return VINF_SUCCESS; - - case DBGFREG_CS: *pu64 = pCtx->cs; *pfRegSizes = R_SZ_16; return VINF_SUCCESS; - case DBGFREG_DS: *pu64 = pCtx->ds; *pfRegSizes = R_SZ_16; return VINF_SUCCESS; - case DBGFREG_ES: *pu64 = pCtx->es; *pfRegSizes = R_SZ_16; return VINF_SUCCESS; - case DBGFREG_FS: *pu64 = pCtx->fs; *pfRegSizes = R_SZ_16; return VINF_SUCCESS; - case DBGFREG_GS: *pu64 = pCtx->gs; *pfRegSizes = R_SZ_16; return VINF_SUCCESS; - case DBGFREG_SS: *pu64 = pCtx->ss; *pfRegSizes = R_SZ_16; return VINF_SUCCESS; - - case DBGFREG_CS_ATTR: *pu64 = pCtx->csHid.Attr.u; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_DS_ATTR: *pu64 = pCtx->dsHid.Attr.u; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_ES_ATTR: *pu64 = pCtx->esHid.Attr.u; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_FS_ATTR: *pu64 = pCtx->fsHid.Attr.u; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_GS_ATTR: *pu64 = pCtx->gsHid.Attr.u; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_SS_ATTR: *pu64 = pCtx->ssHid.Attr.u; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - - case DBGFREG_CS_BASE: *pu64 = pCtx->csHid.u64Base; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_DS_BASE: *pu64 = pCtx->dsHid.u64Base; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_ES_BASE: *pu64 = pCtx->esHid.u64Base; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_FS_BASE: *pu64 = pCtx->fsHid.u64Base; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_GS_BASE: *pu64 = pCtx->gsHid.u64Base; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_SS_BASE: *pu64 = pCtx->ssHid.u64Base; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - - case DBGFREG_CS_LIMIT: *pu64 = pCtx->csHid.u32Limit; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_DS_LIMIT: *pu64 = pCtx->dsHid.u32Limit; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_ES_LIMIT: *pu64 = pCtx->esHid.u32Limit; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_FS_LIMIT: *pu64 = pCtx->fsHid.u32Limit; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_GS_LIMIT: *pu64 = pCtx->gsHid.u32Limit; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_SS_LIMIT: *pu64 = pCtx->ssHid.u32Limit; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - - case DBGFREG_RIP: *pu64 = pCtx->rip; *pfRegSizes = R_SZ_16_TO_64; return VINF_SUCCESS; - case DBGFREG_FLAGS: *pu64 = pCtx->rflags.u; *pfRegSizes = R_SZ_16_TO_64; return VINF_SUCCESS; - - case DBGFREG_ST0: return VERR_NOT_IMPLEMENTED; - case DBGFREG_ST1: return VERR_NOT_IMPLEMENTED; - case DBGFREG_ST2: return VERR_NOT_IMPLEMENTED; - case DBGFREG_ST3: return VERR_NOT_IMPLEMENTED; - case DBGFREG_ST4: return VERR_NOT_IMPLEMENTED; - case DBGFREG_ST5: return VERR_NOT_IMPLEMENTED; - case DBGFREG_ST6: return VERR_NOT_IMPLEMENTED; - case DBGFREG_ST7: return VERR_NOT_IMPLEMENTED; - - case DBGFREG_MM0: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MM1: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MM2: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MM3: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MM4: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MM5: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MM6: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MM7: return VERR_NOT_IMPLEMENTED; - - case DBGFREG_FCW: return VERR_NOT_IMPLEMENTED; - case DBGFREG_FSW: return VERR_NOT_IMPLEMENTED; - case DBGFREG_FTW: return VERR_NOT_IMPLEMENTED; - case DBGFREG_FOP: return VERR_NOT_IMPLEMENTED; - case DBGFREG_FPUIP: return VERR_NOT_IMPLEMENTED; - case DBGFREG_FPUCS: return VERR_NOT_IMPLEMENTED; - case DBGFREG_FPUDP: return VERR_NOT_IMPLEMENTED; - case DBGFREG_FPUDS: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MXCSR: return VERR_NOT_IMPLEMENTED; - case DBGFREG_MXCSR_MASK: return VERR_NOT_IMPLEMENTED; - - case DBGFREG_XMM0: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM1: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM2: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM3: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM4: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM5: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM6: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM7: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM8: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM9: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM10: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM11: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM12: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM13: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM14: return VERR_NOT_IMPLEMENTED; - case DBGFREG_XMM15: return VERR_NOT_IMPLEMENTED; - - case DBGFREG_GDTR: *pu64 = pCtx->gdtr.pGdt; *pfRegSizes = R_SZ_64_16; return VINF_SUCCESS; - case DBGFREG_GDTR_BASE: *pu64 = pCtx->gdtr.pGdt; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_GDTR_LIMIT: *pu64 = pCtx->gdtr.cbGdt; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_IDTR: *pu64 = pCtx->idtr.pIdt; *pfRegSizes = R_SZ_64_16; return VINF_SUCCESS; - case DBGFREG_IDTR_BASE: *pu64 = pCtx->idtr.pIdt; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_IDTR_LIMIT: *pu64 = pCtx->idtr.cbIdt; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_LDTR: *pu64 = pCtx->ldtr; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_LDTR_ATTR: *pu64 = pCtx->ldtrHid.Attr.u; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_LDTR_BASE: *pu64 = pCtx->ldtrHid.u64Base; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_LDTR_LIMIT: *pu64 = pCtx->ldtrHid.u32Limit; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_TR: *pu64 = pCtx->tr; *pfRegSizes = R_SZ_16; return VINF_SUCCESS; - case DBGFREG_TR_ATTR: *pu64 = pCtx->trHid.Attr.u; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - case DBGFREG_TR_BASE: *pu64 = pCtx->trHid.u64Base; *pfRegSizes = R_SZ_64; return VINF_SUCCESS; - case DBGFREG_TR_LIMIT: *pu64 = pCtx->trHid.u32Limit; *pfRegSizes = R_SZ_32; return VINF_SUCCESS; - - case DBGFREG_CR0: *pu64 = CPUMGetGuestCR0(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_CR2: *pu64 = CPUMGetGuestCR2(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_CR3: *pu64 = CPUMGetGuestCR3(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_CR4: *pu64 = CPUMGetGuestCR4(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_CR8: *pu64 = CPUMGetGuestCR8(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - - case DBGFREG_DR0: *pu64 = CPUMGetGuestDR0(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_DR1: *pu64 = CPUMGetGuestDR1(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_DR2: *pu64 = CPUMGetGuestDR2(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_DR3: *pu64 = CPUMGetGuestDR3(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_DR6: *pu64 = CPUMGetGuestDR6(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - case DBGFREG_DR7: *pu64 = CPUMGetGuestDR7(pVCpu); *pfRegSizes = R_SZ_32_OR_64; return VINF_SUCCESS; - - case DBGFREG_MSR_IA32_APICBASE: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_IA32_APICBASE); - case DBGFREG_MSR_IA32_CR_PAT: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_IA32_CR_PAT); - case DBGFREG_MSR_IA32_PERF_STATUS: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_IA32_PERF_STATUS); - case DBGFREG_MSR_IA32_SYSENTER_CS: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_IA32_SYSENTER_CS); - case DBGFREG_MSR_IA32_SYSENTER_EIP: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_IA32_SYSENTER_EIP); - case DBGFREG_MSR_IA32_SYSENTER_ESP: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_IA32_SYSENTER_ESP); - case DBGFREG_MSR_IA32_TSC: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_IA32_TSC); - case DBGFREG_MSR_K6_EFER: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K6_EFER); - case DBGFREG_MSR_K6_STAR: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K6_STAR); - case DBGFREG_MSR_K8_CSTAR: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K8_CSTAR); - case DBGFREG_MSR_K8_FS_BASE: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K8_FS_BASE); - case DBGFREG_MSR_K8_GS_BASE: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K8_GS_BASE); - case DBGFREG_MSR_K8_KERNEL_GS_BASE: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K8_KERNEL_GS_BASE); - case DBGFREG_MSR_K8_LSTAR: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K8_LSTAR); - case DBGFREG_MSR_K8_SF_MASK: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K8_SF_MASK); - case DBGFREG_MSR_K8_TSC_AUX: return dbgfR3RegGetMsr(pVCpu, pu64, pfRegSizes, MSR_K8_TSC_AUX); - - case DBGFREG_END: - case DBGFREG_32BIT_HACK: - /* no default! We want GCC warnings. */ - break; - } - - AssertMsgFailed(("%d (%#x)\n", enmReg, enmReg)); - return VERR_DBGF_INVALID_REGISTER; -} - - -/** - * Queries a 8-bit register value. - * - * @retval VINF_SUCCESS - * @retval VERR_INVALID_VM_HANDLE - * @retval VERR_INVALID_CPU_ID - * @retval VERR_DBGF_INVALID_REGISTER - * @retval VINF_DBGF_TRUNCATED_REGISTER - * - * @param pVM The VM handle. - * @param idCpu The target CPU ID. - * @param enmReg The register that's being queried. - * @param pu8 Where to store the register value. - */ -VMMR3DECL(int) DBGFR3RegQueryU8(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint8_t *pu8) -{ - VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); - AssertReturn(idCpu < pVM->cCpus, VERR_INVALID_CPU_ID); - - uint64_t u64Value; - uint32_t fRegSizes; - int rc = VMR3ReqCallWait(pVM, idCpu, (PFNRT)dbgfR3RegQueryWorker, 5, pVM, idCpu, enmReg, &u64Value, &fRegSizes); - if (RT_SUCCESS(rc)) - { - *pu8 = (uint8_t)u64Value; - if (R_SZ_8 & fRegSizes) - rc = VINF_SUCCESS; - else - rc = VINF_DBGF_TRUNCATED_REGISTER; - } - else - *pu8 = 0; - return rc; -} - - -/** - * Queries a 16-bit register value. - * - * @retval VINF_SUCCESS - * @retval VERR_INVALID_VM_HANDLE - * @retval VERR_INVALID_CPU_ID - * @retval VERR_DBGF_INVALID_REGISTER - * @retval VINF_DBGF_TRUNCATED_REGISTER - * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER - * - * @param pVM The VM handle. - * @param idCpu The target CPU ID. - * @param enmReg The register that's being queried. - * @param pu16 Where to store the register value. - */ -VMMR3DECL(int) DBGFR3RegQueryU16(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint16_t *pu16) -{ - VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); - AssertReturn(idCpu < pVM->cCpus, VERR_INVALID_CPU_ID); - - uint64_t u64Value; - uint32_t fRegSizes; - int rc = VMR3ReqCallWait(pVM, idCpu, (PFNRT)dbgfR3RegQueryWorker, 5, pVM, idCpu, enmReg, &u64Value, &fRegSizes); - if (RT_SUCCESS(rc)) - { - *pu16 = (uint16_t)u64Value; - if (R_SZ_16 & fRegSizes) - rc = VINF_SUCCESS; - else if (~(R_SZ_8 | R_SZ_16) & fRegSizes) - rc = VINF_DBGF_TRUNCATED_REGISTER; - else - rc = VINF_DBGF_ZERO_EXTENDED_REGISTER; - } - else - *pu16 = 0; - return rc; -} - - -/** - * Queries a 32-bit register value. - * - * @retval VINF_SUCCESS - * @retval VERR_INVALID_VM_HANDLE - * @retval VERR_INVALID_CPU_ID - * @retval VERR_DBGF_INVALID_REGISTER - * @retval VINF_DBGF_TRUNCATED_REGISTER - * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER - * - * @param pVM The VM handle. - * @param idCpu The target CPU ID. - * @param enmReg The register that's being queried. - * @param pu32 Where to store the register value. - */ -VMMR3DECL(int) DBGFR3RegQueryU32(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint32_t *pu32) -{ - VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); - AssertReturn(idCpu < pVM->cCpus, VERR_INVALID_CPU_ID); - - uint64_t u64Value; - uint32_t fRegSizes; - int rc = VMR3ReqCallWait(pVM, idCpu, (PFNRT)dbgfR3RegQueryWorker, 5, pVM, idCpu, enmReg, &u64Value, &fRegSizes); - if (RT_SUCCESS(rc)) - { - *pu32 = (uint32_t)u64Value; - if (R_SZ_32 & fRegSizes) - rc = VINF_SUCCESS; - else if (~(R_SZ_8 | R_SZ_16 | R_SZ_32) & fRegSizes) - rc = VINF_DBGF_TRUNCATED_REGISTER; - else - rc = VINF_DBGF_ZERO_EXTENDED_REGISTER; - } - else - *pu32 = 0; - return rc; -} - - -/** - * Queries a 64-bit register value. - * - * @retval VINF_SUCCESS - * @retval VERR_INVALID_VM_HANDLE - * @retval VERR_INVALID_CPU_ID - * @retval VERR_DBGF_INVALID_REGISTER - * @retval VINF_DBGF_TRUNCATED_REGISTER - * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER - * - * @param pVM The VM handle. - * @param idCpu The target CPU ID. - * @param enmReg The register that's being queried. - * @param pu64 Where to store the register value. - */ -VMMR3DECL(int) DBGFR3RegQueryU64(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t *pu64) -{ - VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); - AssertReturn(idCpu < pVM->cCpus, VERR_INVALID_CPU_ID); - - uint64_t u64Value; - uint32_t fRegSizes; - int rc = VMR3ReqCallWait(pVM, idCpu, (PFNRT)dbgfR3RegQueryWorker, 5, pVM, idCpu, enmReg, &u64Value, &fRegSizes); - if (RT_SUCCESS(rc)) - { - *pu64 = u64Value; - if (R_SZ_64 & fRegSizes) - rc = VINF_SUCCESS; - else if (~(R_SZ_8 | R_SZ_16 | R_SZ_32 | R_SZ_64) & fRegSizes) - rc = VINF_DBGF_TRUNCATED_REGISTER; - else - rc = VINF_DBGF_ZERO_EXTENDED_REGISTER; - } - else - *pu64 = 0; - return rc; -} - diff --git a/src/VBox/VMM/VMMCodingGuidelines.cpp b/src/VBox/VMM/Docs-CodingGuidelines.cpp index 1f840e88b..9a5d4f2c5 100644 --- a/src/VBox/VMM/VMMCodingGuidelines.cpp +++ b/src/VBox/VMM/Docs-CodingGuidelines.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMCodingGuidelines.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: Docs-CodingGuidelines.cpp 35350 2010-12-27 16:57:10Z vboxsync $ */ /** @file * VMM - Coding Guidelines. */ diff --git a/src/VBox/VMM/VMMDocsRawMode.cpp b/src/VBox/VMM/Docs-RawMode.cpp index b9cd8db15..54ca7fdb3 100644 --- a/src/VBox/VMM/VMMDocsRawMode.cpp +++ b/src/VBox/VMM/Docs-RawMode.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMDocsRawMode.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: Docs-RawMode.cpp 35350 2010-12-27 16:57:10Z vboxsync $ */ /** @file * This file contains the documentation of the raw-mode execution. */ diff --git a/src/VBox/VMM/Makefile.kmk b/src/VBox/VMM/Makefile.kmk index 9a55aeaf2..012088185 100644 --- a/src/VBox/VMM/Makefile.kmk +++ b/src/VBox/VMM/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34668 2010-12-02 23:33:28Z vboxsync $ +# $Id: Makefile.kmk 35572 2011-01-14 14:51:16Z vboxsync $ ## @file # Top-level makefile for the VMM. # @@ -51,7 +51,7 @@ ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS LIBRARIES += VMMR3 endif -VMMR3_TEMPLATE = VBoxR3Dll +VMMR3_TEMPLATE = VBoxR3DllNoPic VMMR3_DEFS = IN_VMM_R3 IN_DIS IN_GMM_R3 IN_DBG $(VMM_COMMON_DEFS) VBOX_SVN_REV=$(VBOX_SVN_REV) ## @todo eliminate IN_GMM_R3 @@ -70,67 +70,76 @@ VMMR3_DEFS.darwin.x86 = \ VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R3 VMMR3_INCS = \ - . \ + include \ PATM +VMMR3_ASINCS = . VMMR3_SOURCES = \ - CFGM.cpp \ - CPUM.cpp \ - DBGF.cpp \ - DBGFAddr.cpp \ - DBGFAddrSpace.cpp \ - DBGFBp.cpp \ - DBGFCoreWrite.cpp \ - DBGFCpu.cpp \ - DBGFDisas.cpp \ - DBGFInfo.cpp \ - DBGFLog.cpp \ - DBGFMem.cpp \ - DBGFOS.cpp \ - DBGFReg.cpp \ - DBGFStack.cpp \ - DBGFSym.cpp \ - EM.cpp \ - EMRaw.cpp \ - EMHwaccm.cpp \ - FTM.cpp \ - IOM.cpp \ - GMM.cpp \ - MM.cpp \ - MMHeap.cpp \ - MMHyper.cpp \ - MMPagePool.cpp \ - MMUkHeap.cpp \ - PDM.cpp \ - PDMDevice.cpp \ - PDMDevHlp.cpp \ - PDMDevMiscHlp.cpp \ - PDMDriver.cpp \ - PDMLdr.cpp \ - PDMCritSect.cpp \ - PDMQueue.cpp \ - PDMThread.cpp \ - PGM.cpp \ - PGMDbg.cpp \ - PGMHandler.cpp \ - PGMMap.cpp \ - PGMPhys.cpp \ - PGMPool.cpp \ - PGMSavedState.cpp \ - PGMSharedPage.cpp \ - SELM.cpp \ - SSM.cpp \ - STAM.cpp \ - TM.cpp \ - TRPM.cpp \ - VM.cpp \ - VMEmt.cpp \ - VMReq.cpp \ - VMM.cpp \ - VMMGuruMeditation.cpp \ - VMMSwitcher.cpp \ - VMMTests.cpp \ - HWACCM.cpp \ + VMMR3/CFGM.cpp \ + VMMR3/CPUM.cpp \ + VMMR3/CPUMDbg.cpp \ + VMMR3/DBGF.cpp \ + VMMR3/DBGFAddr.cpp \ + VMMR3/DBGFAddrSpace.cpp \ + VMMR3/DBGFBp.cpp \ + VMMR3/DBGFCoreWrite.cpp \ + VMMR3/DBGFCpu.cpp \ + VMMR3/DBGFDisas.cpp \ + VMMR3/DBGFInfo.cpp \ + VMMR3/DBGFLog.cpp \ + VMMR3/DBGFMem.cpp \ + VMMR3/DBGFOS.cpp \ + VMMR3/DBGFReg.cpp \ + VMMR3/DBGFStack.cpp \ + VMMR3/DBGFSym.cpp \ + VMMR3/EM.cpp \ + VMMR3/EMRaw.cpp \ + VMMR3/EMHwaccm.cpp \ + VMMR3/FTM.cpp \ + VMMR3/IOM.cpp \ + VMMR3/GMM.cpp \ + VMMR3/MM.cpp \ + VMMR3/MMHeap.cpp \ + VMMR3/MMHyper.cpp \ + VMMR3/MMPagePool.cpp \ + VMMR3/MMUkHeap.cpp \ + VMMR3/PDM.cpp \ + VMMR3/PDMBlkCache.cpp \ + VMMR3/PDMDevice.cpp \ + VMMR3/PDMDevHlp.cpp \ + VMMR3/PDMDevMiscHlp.cpp \ + VMMR3/PDMDriver.cpp \ + VMMR3/PDMLdr.cpp \ + VMMR3/PDMCritSect.cpp \ + VMMR3/PDMQueue.cpp \ + VMMR3/PDMThread.cpp \ + VMMR3/PGM.cpp \ + VMMR3/PGMDbg.cpp \ + VMMR3/PGMHandler.cpp \ + VMMR3/PGMMap.cpp \ + VMMR3/PGMPhys.cpp \ + VMMR3/PGMPool.cpp \ + VMMR3/PGMSavedState.cpp \ + VMMR3/PGMSharedPage.cpp \ + VMMR3/SELM.cpp \ + VMMR3/SSM.cpp \ + VMMR3/STAM.cpp \ + VMMR3/TM.cpp \ + VMMR3/TRPM.cpp \ + VMMR3/VM.cpp \ + VMMR3/VMEmt.cpp \ + VMMR3/VMReq.cpp \ + VMMR3/VMM.cpp \ + VMMR3/VMMGuruMeditation.cpp \ + VMMR3/VMMSwitcher.cpp \ + VMMR3/VMMTests.cpp \ + VMMR3/HWACCM.cpp \ + VMMR3/CSAM.cpp \ + VMMR3/PATM.cpp \ + VMMR3/PATMPatch.cpp \ + VMMR3/PATMGuest.cpp \ + VMMR3/PATMA.asm \ + VMMR3/PATMSSM.cpp \ VMMAll/CPUMAllRegs.cpp \ VMMAll/CPUMStack.cpp \ VMMAll/DBGFAll.cpp \ @@ -161,29 +170,21 @@ VMMR3_SOURCES = \ VMMAll/VMAll.cpp \ VMMAll/VMMAll.cpp \ VMMAll/VMMAllA.asm \ - PATM/CSAM.cpp \ - PATM/VMMAll/CSAMAll.cpp \ - PATM/PATM.cpp \ - PATM/PATMPatch.cpp \ - PATM/PATMGuest.cpp \ - PATM/PATMA.asm \ - PATM/PATMSSM.cpp \ - PATM/VMMAll/PATMAll.cpp \ - PDMBlkCache.cpp + VMMAll/CSAMAll.cpp \ + VMMAll/PATMAll.cpp ifdef VBOX_WITH_VUSB - VMMR3_SOURCES += PDMUsb.cpp + VMMR3_SOURCES += VMMR3/PDMUsb.cpp endif ifdef VBOX_WITH_PDM_ASYNC_COMPLETION VMMR3_SOURCES += \ - PDMAsyncCompletion.cpp \ - PDMAsyncCompletionFile.cpp \ - PDMAsyncCompletionFileFailsafe.cpp \ - PDMAsyncCompletionFileNormal.cpp \ - PDMAsyncCompletionFileCache.cpp + VMMR3/PDMAsyncCompletion.cpp \ + VMMR3/PDMAsyncCompletionFile.cpp \ + VMMR3/PDMAsyncCompletionFileFailsafe.cpp \ + VMMR3/PDMAsyncCompletionFileNormal.cpp endif if defined(VBOX_WITH_WARNINGS_AS_ERRORS) && "$(KBUILD_TARGET)" == "win" -PDMAsyncCompletionFileCache.cpp_CXXFLAGS = -WX- -PDMBlkCache.cpp_CXXFLAGS = -WX- +## @todo Alexander, please fix these warnings. +VMMR3/PDMBlkCache.cpp_CXXFLAGS = -WX- endif ifdef VBOX_WITH_RAW_MODE @@ -203,7 +204,7 @@ endif # SSM wish to know the build type, host os and arch. -SSM.cpp_DEFS += \ +VMMR3/SSM.cpp_DEFS += \ KBUILD_TYPE=\"$(KBUILD_TYPE)\" \ KBUILD_TARGET=\"$(KBUILD_TARGET)\" \ KBUILD_TARGET_ARCH=\"$(KBUILD_TARGET_ARCH)\" @@ -214,10 +215,10 @@ SSM.cpp_DEFS += \ ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS DLLS += VBoxVMM endif -VBoxVMM_TEMPLATE = VBoxR3Dll +VBoxVMM_TEMPLATE = VBoxR3DllNoPic VBoxVMM_DEFS = $(VMMR3_DEFS) VBoxVMM_DEFS.$(KBUILD_TARGET) = $(VMMR3_DEFS.$(KBUILD_TARGET)) -VBoxVMM_SOURCES = VBoxVMMDeps.cpp +VBoxVMM_SOURCES = VMMR3/VBoxVMMDeps.cpp VBoxVMM_SONAME.linux = VBoxVMM.so VBoxVMM_LIBS = \ @@ -246,29 +247,29 @@ VBoxVMM_LDFLAGS.solaris = -mimpure-text if defined(VBOX_WITH_RAW_MODE) && $(intersects $(VBOX_LDR_FMT32), pe lx) # - # VMMGCBuiltin.lib + # VMMRCBuiltin.lib # - LIBRARIES += VMMGCBuiltin - VMMGCBuiltin_TEMPLATE = VBoxRc + LIBRARIES += VMMRCBuiltin + VMMRCBuiltin_TEMPLATE = VBoxRc ifeq ($(VBOX_LDR_FMT32),pe) - VMMGCBuiltin_SOURCES = VMMGC/VMMGCBuiltin.def + VMMRCBuiltin_SOURCES = VMMRC/VMMRCBuiltin.def endif ifeq ($(VBOX_LDR_FMT32),lx) - VMMGCBuiltin_SOURCES = $(PATH_VMMGCBuiltin)/VMMGCBuiltin.def - $$(PATH_VMMGCBuiltin)/VMMGCBuiltin.def: $(PATH_SUB_CURRENT)/VMMGC/VMMGCBuiltin.def | $$(dir $$@) + VMMRCBuiltin_SOURCES = $(VMMRCBuiltin_0_OUTDIR)/VMMRCBuiltin.def + $$(VMMRCBuiltin_0_OUTDIR)/VMMRCBuiltin.def: $(PATH_SUB_CURRENT)/VMMRC/VMMRCBuiltin.def | $$(dir $$@) $(SED) -e '/not-os2/d' -e 's/^[ \t][ \t]*\([a-zA-Z]\)/ _\1/' -e 's/[ \t]DATA[ \t]*/ /' --output $@ $< endif # - # VMMGCImp.lib + # VMMRCImp.lib # - LIBRARIES += VMMGCImp - VMMGCImp_TEMPLATE = VBoxRc - VMMGCImp_SOURCES = $(PATH_VMMGCImp)/VMMGC.def - VMMGCImp_CLEAN = $(PATH_VMMGCImp)/VMMGC.def + LIBRARIES += VMMRCImp + VMMRCImp_TEMPLATE = VBoxRc + VMMRCImp_SOURCES = $(VMMRCImp_0_OUTDIR)/VMMRC.def + VMMRCImp_CLEAN = $(VMMRCImp_0_OUTDIR)/VMMRC.def - $$(PATH_VMMGCImp)/VMMGC.def: $(PATH_SUB_CURRENT)/VMMGC/VMMGC.def | $$(dir $$@) + $$(VMMRCImp_0_OUTDIR)/VMMRC.def: $(PATH_SUB_CURRENT)/VMMRC/VMMRC.def | $$(dir $$@) ifeq ($(VBOX_LDR_FMT32),lx) $(SED) \ -e '/not-os2/d' \ @@ -294,10 +295,10 @@ if1of ($(VBOX_LDR_FMT), pe lx) # LIBRARIES += VMMR0Imp VMMR0Imp_TEMPLATE = VBoxR0 - VMMR0Imp_SOURCES = $(PATH_VMMR0Imp)/VMMR0.def - VMMR0Imp_CLEAN = $(PATH_VMMR0Imp)/VMMR0.def + VMMR0Imp_SOURCES = $(VMMR0Imp_0_OUTDIR)/VMMR0.def + VMMR0Imp_CLEAN = $(VMMR0Imp_0_OUTDIR)/VMMR0.def - $$(PATH_VMMR0Imp)/VMMR0.def: $(PATH_SUB_CURRENT)/VMMR0/VMMR0.def | $$(dir $$@) + $$(VMMR0Imp_0_OUTDIR)/VMMR0.def: $(PATH_SUB_CURRENT)/VMMR0/VMMR0.def | $$(dir $$@) ifeq ($(VBOX_LDR_FMT),lx) $(SED) \ -e '/not-os2/d' \ @@ -325,51 +326,54 @@ $(call VBOX_GENERATE_IMPORT_TARGET_FN,VMMR3Imp,VBoxVMM,VMMR3/VMMR3.def) if defined(VBOX_WITH_RAW_MODE) && !defined(VBOX_ONLY_EXTPACKS) # - # VMMGC.gc + # VMMRC.gc # - SYSMODS += VMMGC - VMMGC_TEMPLATE = VBoxRc - VMMGC_SYSSUFF = .gc + SYSMODS += VMMRC + VMMRC_TEMPLATE = VBoxRc + VMMRC_NAME = VMMGC + VMMRC_SYSSUFF = .gc - VMMGC_DEFS = IN_VMM_RC IN_RT_RC IN_DIS DIS_CORE_ONLY VBOX_WITH_RAW_MODE $(VMM_COMMON_DEFS) + VMMRC_DEFS = IN_VMM_RC IN_RT_RC IN_DIS DIS_CORE_ONLY VBOX_WITH_RAW_MODE $(VMM_COMMON_DEFS) ifeq ($(KBUILD_TARGET_ARCH),x86) - VMMGC_DEFS.darwin = VMM_R0_SWITCH_STACK - VMMGC_DEFS.darwin = \ + VMMRC_DEFS.darwin = VMM_R0_SWITCH_STACK + VMMRC_DEFS.darwin = \ VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_RC \ VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_RC endif - VMMGC_INCS := \ - . \ - VMMGC \ + VMMRC_INCS := \ + include \ + VMMRC \ PATM - VMMGC_LIBS = \ + VMMRC_LIBS = \ $(PATH_LIB)/DisasmRC$(VBOX_SUFF_LIB) \ $(PATH_LIB)/RuntimeRC$(VBOX_SUFF_LIB) ifneq ($(filter pe lx,$(VBOX_LDR_FMT32)),) - VMMGC_LIBS += \ - $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) + VMMRC_LIBS += \ + $(PATH_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) endif - VMMGC_SOURCES = \ - VMMGC/VMMGC0.asm \ - VMMGC/VMMGCDeps.cpp \ - VMMGC/CPUMGC.cpp \ - VMMGC/CPUMGCA.asm \ - VMMGC/EMGCA.asm \ - VMMGC/IOMGC.cpp \ - VMMGC/MMRamGC.cpp \ - VMMGC/MMRamGCA.asm \ - VMMGC/PDMGCDevice.cpp \ - VMMGC/PGMGC.cpp \ - VMMGC/SELMGC.cpp \ - VMMGC/TRPMGC.cpp \ - VMMGC/TRPMGCHandlers.cpp \ - VMMGC/TRPMGCHandlersA.asm \ - VMMGC/VMMGC.cpp \ - VMMGC/VMMGCA.asm \ - VMMGC/HWACCMGCA.asm \ + VMMRC_SOURCES = \ + VMMRC/VMMRC0.asm \ + VMMRC/VMMRCDeps.cpp \ + VMMRC/CPUMRC.cpp \ + VMMRC/CPUMRCA.asm \ + VMMRC/EMRCA.asm \ + VMMRC/IOMRC.cpp \ + VMMRC/MMRamRC.cpp \ + VMMRC/MMRamRCA.asm \ + VMMRC/PDMRCDevice.cpp \ + VMMRC/PGMRC.cpp \ + VMMRC/SELMRC.cpp \ + VMMRC/TRPMRC.cpp \ + VMMRC/TRPMRCHandlers.cpp \ + VMMRC/TRPMRCHandlersA.asm \ + VMMRC/VMMRC.cpp \ + VMMRC/VMMRCA.asm \ + VMMRC/HWACCMRCA.asm \ + VMMRC/CSAMRC.cpp \ + VMMRC/PATMRC.cpp \ VMMRZ/DBGFRZ.cpp \ VMMRZ/PGMRZDynMap.cpp \ VMMRZ/VMMRZ.cpp \ @@ -401,22 +405,20 @@ if defined(VBOX_WITH_RAW_MODE) && !defined(VBOX_ONLY_EXTPACKS) VMMAll/VMAll.cpp \ VMMAll/VMMAll.cpp \ VMMAll/VMMAllA.asm \ - PATM/VMMGC/CSAMGC.cpp \ - PATM/VMMAll/CSAMAll.cpp \ - PATM/VMMGC/PATMGC.cpp \ - PATM/VMMAll/PATMAll.cpp + VMMAll/CSAMAll.cpp \ + VMMAll/PATMAll.cpp ifeq ($(VBOX_LDR_FMT32),pe) - VMMGC_SOURCES += VMMGC/VMMGC.def + VMMRC_SOURCES += VMMRC/VMMRC.def endif ifeq ($(VBOX_LDR_FMT32),lx) - VMMGC_SOURCES += $(PATH_VMMGCImp)/VMMGC.def + VMMRC_SOURCES += $(VMMRCImp_0_OUTDIR)/VMMRC.def endif # the very last one. - VMMGC_SOURCES += VMMGC/VMMGC99.asm + VMMRC_SOURCES += VMMRC/VMMRC99.asm - VMMGC/VMMGCDeps.cpp_CXXFLAGS.win = -Oi- -TC ## @todo rename VMMGCDeps.cpp to .c + VMMRC/VMMRCDeps.cpp_CXXFLAGS.win = -Oi- -TC ## @todo rename VMMRCDeps.cpp to .c endif # VBOX_WITH_RAW_MODE && !VBOX_ONLY_EXTPACKS @@ -444,7 +446,7 @@ ifndef VBOX_ONLY_EXTPACKS VMMR0_LDFLAGS = -e VMMR0EntryEx endif VMMR0_INCS = \ - . \ + include \ PATM VMMR0_SOURCES = \ @@ -500,7 +502,7 @@ ifndef VBOX_ONLY_EXTPACKS VMMR0_SOURCES += VMMR0/VMMR0.def endif ifeq ($(VBOX_LDR_FMT),lx) - VMMR0_SOURCES += $(PATH_VMMR0Imp)/VMMR0.def + VMMR0_SOURCES += $(VMMR0Imp_0_OUTDIR)/VMMR0.def endif VMMR0_SOURCES.amd64 = \ VMMR0/VMMR0JmpA-amd64.asm @@ -527,7 +529,8 @@ ifndef VBOX_ONLY_EXTPACKS LIBRARIES += SSMStandalone SSMStandalone_TEMPLATE = VBOXR3EXE SSMStandalone_DEFS = IN_VMM_R3 IN_VMM_STATIC SSM_STANDALONE - SSMStandalone_SOURCES = SSM.cpp + SSMStandalone_INCS = include + SSMStandalone_SOURCES = VMMR3/SSM.cpp endif # !VBOX_ONLY_EXTPACKS @@ -539,7 +542,7 @@ VMMAll/VMMAll.cpp_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) # # Disable annoying warnings about array subscript above array bounds in aPages[] # -PGMPool.cpp_CXXFLAGS = $(if-expr $(KBUILD_TARGET) == "win",,$(VBOX_GCC_Wno-array_bounds)) +VMMR3/PGMPool.cpp_CXXFLAGS = $(if-expr $(KBUILD_TARGET) == "win",,$(VBOX_GCC_Wno-array_bounds)) VMMAll/PGMAllPool.cpp_CXXFLAGS = $(if-expr $(KBUILD_TARGET) == "win",,$(VBOX_GCC_Wno-array_bounds)) include $(KBUILD_PATH)/subfooter.kmk @@ -553,8 +556,8 @@ PGMBth.obj PGMGst.obj PGMShw.obj: PGM.o PGMAllBth.o PGMAllGst.o PGMAllShw.o \ PGMAllBth.obj PGMAllGst.obj PGMAllShw.obj: PGMAll.o -PGMGCBth.o PGMGCGst.o PGMGCShw.o \ -PGMGCBth.obj PGMGCGst.obj PGMGCShw.obj: PGMGC.o +PGMRCBth.o PGMRCGst.o PGMRCShw.o \ +PGMRCBth.obj PGMRCGst.obj PGMRCShw.obj: PGMRC.o PGMPhysRWTmpl.o PGMPhysRWTmpl.obj: PGMPhys.o diff --git a/src/VBox/VMM/PDMAsyncCompletionFileCache.cpp b/src/VBox/VMM/PDMAsyncCompletionFileCache.cpp deleted file mode 100644 index 37be80cef..000000000 --- a/src/VBox/VMM/PDMAsyncCompletionFileCache.cpp +++ /dev/null @@ -1,2197 +0,0 @@ -/* $Id: PDMAsyncCompletionFileCache.cpp 34406 2010-11-26 16:45:34Z vboxsync $ */ -/** @file - * PDM Async I/O - Transport data asynchronous in R3 using EMT. - * File data cache. - */ - -/* - * Copyright (C) 2006-2008 Oracle Corporation - * - * This file is part of VirtualBox Open Source Edition (OSE), as - * available from http://www.virtualbox.org. This file is free software; - * you can redistribute it and/or modify it under the terms of the GNU - * General Public License (GPL) as published by the Free Software - * Foundation, in version 2 as it comes in the "COPYING" file of the - * VirtualBox OSE distribution. VirtualBox OSE is distributed in the - * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. - */ - -/** @page pg_pdm_async_completion_cache PDM Async Completion Cache - The file I/O cache - * This component implements an I/O cache for file endpoints based on the 2Q cache algorithm. - */ - -/******************************************************************************* -* Header Files * -*******************************************************************************/ -#define LOG_GROUP LOG_GROUP_PDM_ASYNC_COMPLETION -#include <iprt/asm.h> -#include <iprt/mem.h> -#include <iprt/path.h> -#include <VBox/log.h> -#include <VBox/stam.h> - -#include "PDMAsyncCompletionFileInternal.h" - -/** - * A I/O memory context. - */ -typedef struct PDMIOMEMCTX -{ - /** Pointer to the scatter/gather list. */ - PCRTSGSEG paDataSeg; - /** Number of segments. */ - size_t cSegments; - /** Current segment we are in. */ - unsigned iSegIdx; - /** Pointer to the current buffer. */ - uint8_t *pbBuf; - /** Number of bytes left in the current buffer. */ - size_t cbBufLeft; -} PDMIOMEMCTX, *PPDMIOMEMCTX; - -#ifdef VBOX_STRICT -# define PDMACFILECACHE_IS_CRITSECT_OWNER(Cache) \ - do \ - { \ - AssertMsg(RTCritSectIsOwner(&Cache->CritSect), \ - ("Thread does not own critical section\n"));\ - } while(0) - -# define PDMACFILECACHE_EP_IS_SEMRW_WRITE_OWNER(pEpCache) \ - do \ - { \ - AssertMsg(RTSemRWIsWriteOwner(pEpCache->SemRWEntries), \ - ("Thread is not exclusive owner of the per endpoint RW semaphore\n")); \ - } while(0) - -# define PDMACFILECACHE_EP_IS_SEMRW_READ_OWNER(pEpCache) \ - do \ - { \ - AssertMsg(RTSemRWIsReadOwner(pEpCache->SemRWEntries), \ - ("Thread is not read owner of the per endpoint RW semaphore\n")); \ - } while(0) - -#else -# define PDMACFILECACHE_IS_CRITSECT_OWNER(Cache) do { } while(0) -# define PDMACFILECACHE_EP_IS_SEMRW_WRITE_OWNER(pEpCache) do { } while(0) -# define PDMACFILECACHE_EP_IS_SEMRW_READ_OWNER(pEpCache) do { } while(0) -#endif - -/******************************************************************************* -* Internal Functions * -*******************************************************************************/ -static void pdmacFileCacheTaskCompleted(PPDMACTASKFILE pTask, void *pvUser, int rc); - -/** - * Decrement the reference counter of the given cache entry. - * - * @returns nothing. - * @param pEntry The entry to release. - */ -DECLINLINE(void) pdmacFileEpCacheEntryRelease(PPDMACFILECACHEENTRY pEntry) -{ - AssertMsg(pEntry->cRefs > 0, ("Trying to release a not referenced entry\n")); - ASMAtomicDecU32(&pEntry->cRefs); -} - -/** - * Increment the reference counter of the given cache entry. - * - * @returns nothing. - * @param pEntry The entry to reference. - */ -DECLINLINE(void) pdmacFileEpCacheEntryRef(PPDMACFILECACHEENTRY pEntry) -{ - ASMAtomicIncU32(&pEntry->cRefs); -} - -/** - * Initialize a I/O memory context. - * - * @returns nothing - * @param pIoMemCtx Pointer to a unitialized I/O memory context. - * @param paDataSeg Pointer to the S/G list. - * @param cSegments Number of segments in the S/G list. - */ -DECLINLINE(void) pdmIoMemCtxInit(PPDMIOMEMCTX pIoMemCtx, PCRTSGSEG paDataSeg, size_t cSegments) -{ - AssertMsg((cSegments > 0) && paDataSeg, ("Trying to initialize a I/O memory context without a S/G list\n")); - - pIoMemCtx->paDataSeg = paDataSeg; - pIoMemCtx->cSegments = cSegments; - pIoMemCtx->iSegIdx = 0; - pIoMemCtx->pbBuf = (uint8_t *)paDataSeg[0].pvSeg; - pIoMemCtx->cbBufLeft = paDataSeg[0].cbSeg; -} - -/** - * Return a buffer from the I/O memory context. - * - * @returns Pointer to the buffer - * @param pIoMemCtx Pointer to the I/O memory context. - * @param pcbData Pointer to the amount of byte requested. - * If the current buffer doesn't have enough bytes left - * the amount is returned in the variable. - */ -DECLINLINE(uint8_t *) pdmIoMemCtxGetBuffer(PPDMIOMEMCTX pIoMemCtx, size_t *pcbData) -{ - size_t cbData = RT_MIN(*pcbData, pIoMemCtx->cbBufLeft); - uint8_t *pbBuf = pIoMemCtx->pbBuf; - - pIoMemCtx->cbBufLeft -= cbData; - - /* Advance to the next segment if required. */ - if (!pIoMemCtx->cbBufLeft) - { - pIoMemCtx->iSegIdx++; - - if (RT_UNLIKELY(pIoMemCtx->iSegIdx == pIoMemCtx->cSegments)) - { - pIoMemCtx->cbBufLeft = 0; - pIoMemCtx->pbBuf = NULL; - } - else - { - pIoMemCtx->pbBuf = (uint8_t *)pIoMemCtx->paDataSeg[pIoMemCtx->iSegIdx].pvSeg; - pIoMemCtx->cbBufLeft = pIoMemCtx->paDataSeg[pIoMemCtx->iSegIdx].cbSeg; - } - - *pcbData = cbData; - } - else - pIoMemCtx->pbBuf += cbData; - - return pbBuf; -} - -#ifdef DEBUG -static void pdmacFileCacheValidate(PPDMACFILECACHEGLOBAL pCache) -{ - /* Amount of cached data should never exceed the maximum amount. */ - AssertMsg(pCache->cbCached <= pCache->cbMax, - ("Current amount of cached data exceeds maximum\n")); - - /* The amount of cached data in the LRU and FRU list should match cbCached */ - AssertMsg(pCache->LruRecentlyUsedIn.cbCached + pCache->LruFrequentlyUsed.cbCached == pCache->cbCached, - ("Amount of cached data doesn't match\n")); - - AssertMsg(pCache->LruRecentlyUsedOut.cbCached <= pCache->cbRecentlyUsedOutMax, - ("Paged out list exceeds maximum\n")); -} -#endif - -DECLINLINE(void) pdmacFileCacheLockEnter(PPDMACFILECACHEGLOBAL pCache) -{ - RTCritSectEnter(&pCache->CritSect); -#ifdef DEBUG - pdmacFileCacheValidate(pCache); -#endif -} - -DECLINLINE(void) pdmacFileCacheLockLeave(PPDMACFILECACHEGLOBAL pCache) -{ -#ifdef DEBUG - pdmacFileCacheValidate(pCache); -#endif - RTCritSectLeave(&pCache->CritSect); -} - -DECLINLINE(void) pdmacFileCacheSub(PPDMACFILECACHEGLOBAL pCache, uint32_t cbAmount) -{ - PDMACFILECACHE_IS_CRITSECT_OWNER(pCache); - pCache->cbCached -= cbAmount; -} - -DECLINLINE(void) pdmacFileCacheAdd(PPDMACFILECACHEGLOBAL pCache, uint32_t cbAmount) -{ - PDMACFILECACHE_IS_CRITSECT_OWNER(pCache); - pCache->cbCached += cbAmount; -} - -DECLINLINE(void) pdmacFileCacheListAdd(PPDMACFILELRULIST pList, uint32_t cbAmount) -{ - pList->cbCached += cbAmount; -} - -DECLINLINE(void) pdmacFileCacheListSub(PPDMACFILELRULIST pList, uint32_t cbAmount) -{ - pList->cbCached -= cbAmount; -} - -#ifdef PDMACFILECACHE_WITH_LRULIST_CHECKS -/** - * Checks consistency of a LRU list. - * - * @returns nothing - * @param pList The LRU list to check. - * @param pNotInList Element which is not allowed to occur in the list. - */ -static void pdmacFileCacheCheckList(PPDMACFILELRULIST pList, PPDMACFILECACHEENTRY pNotInList) -{ - PPDMACFILECACHEENTRY pCurr = pList->pHead; - - /* Check that there are no double entries and no cycles in the list. */ - while (pCurr) - { - PPDMACFILECACHEENTRY pNext = pCurr->pNext; - - while (pNext) - { - AssertMsg(pCurr != pNext, - ("Entry %#p is at least two times in list %#p or there is a cycle in the list\n", - pCurr, pList)); - pNext = pNext->pNext; - } - - AssertMsg(pCurr != pNotInList, ("Not allowed entry %#p is in list\n", pCurr)); - - if (!pCurr->pNext) - AssertMsg(pCurr == pList->pTail, ("End of list reached but last element is not list tail\n")); - - pCurr = pCurr->pNext; - } -} -#endif - -/** - * Unlinks a cache entry from the LRU list it is assigned to. - * - * @returns nothing. - * @param pEntry The entry to unlink. - */ -static void pdmacFileCacheEntryRemoveFromList(PPDMACFILECACHEENTRY pEntry) -{ - PPDMACFILELRULIST pList = pEntry->pList; - PPDMACFILECACHEENTRY pPrev, pNext; - - LogFlowFunc((": Deleting entry %#p from list %#p\n", pEntry, pList)); - - AssertPtr(pList); - -#ifdef PDMACFILECACHE_WITH_LRULIST_CHECKS - pdmacFileCacheCheckList(pList, NULL); -#endif - - pPrev = pEntry->pPrev; - pNext = pEntry->pNext; - - AssertMsg(pEntry != pPrev, ("Entry links to itself as previous element\n")); - AssertMsg(pEntry != pNext, ("Entry links to itself as next element\n")); - - if (pPrev) - pPrev->pNext = pNext; - else - { - pList->pHead = pNext; - - if (pNext) - pNext->pPrev = NULL; - } - - if (pNext) - pNext->pPrev = pPrev; - else - { - pList->pTail = pPrev; - - if (pPrev) - pPrev->pNext = NULL; - } - - pEntry->pList = NULL; - pEntry->pPrev = NULL; - pEntry->pNext = NULL; - pdmacFileCacheListSub(pList, pEntry->cbData); -#ifdef PDMACFILECACHE_WITH_LRULIST_CHECKS - pdmacFileCacheCheckList(pList, pEntry); -#endif -} - -/** - * Adds a cache entry to the given LRU list unlinking it from the currently - * assigned list if needed. - * - * @returns nothing. - * @param pList List to the add entry to. - * @param pEntry Entry to add. - */ -static void pdmacFileCacheEntryAddToList(PPDMACFILELRULIST pList, PPDMACFILECACHEENTRY pEntry) -{ - LogFlowFunc((": Adding entry %#p to list %#p\n", pEntry, pList)); -#ifdef PDMACFILECACHE_WITH_LRULIST_CHECKS - pdmacFileCacheCheckList(pList, NULL); -#endif - - /* Remove from old list if needed */ - if (pEntry->pList) - pdmacFileCacheEntryRemoveFromList(pEntry); - - pEntry->pNext = pList->pHead; - if (pList->pHead) - pList->pHead->pPrev = pEntry; - else - { - Assert(!pList->pTail); - pList->pTail = pEntry; - } - - pEntry->pPrev = NULL; - pList->pHead = pEntry; - pdmacFileCacheListAdd(pList, pEntry->cbData); - pEntry->pList = pList; -#ifdef PDMACFILECACHE_WITH_LRULIST_CHECKS - pdmacFileCacheCheckList(pList, NULL); -#endif -} - -/** - * Destroys a LRU list freeing all entries. - * - * @returns nothing - * @param pList Pointer to the LRU list to destroy. - * - * @note The caller must own the critical section of the cache. - */ -static void pdmacFileCacheDestroyList(PPDMACFILELRULIST pList) -{ - while (pList->pHead) - { - PPDMACFILECACHEENTRY pEntry = pList->pHead; - - pList->pHead = pEntry->pNext; - - AssertMsg(!(pEntry->fFlags & (PDMACFILECACHE_ENTRY_IO_IN_PROGRESS | PDMACFILECACHE_ENTRY_IS_DIRTY)), - ("Entry is dirty and/or still in progress fFlags=%#x\n", pEntry->fFlags)); - - RTMemPageFree(pEntry->pbData, pEntry->cbData); - RTMemFree(pEntry); - } -} - -/** - * Tries to remove the given amount of bytes from a given list in the cache - * moving the entries to one of the given ghosts lists - * - * @returns Amount of data which could be freed. - * @param pCache Pointer to the global cache data. - * @param cbData The amount of the data to free. - * @param pListSrc The source list to evict data from. - * @param pGhostListSrc The ghost list removed entries should be moved to - * NULL if the entry should be freed. - * @param fReuseBuffer Flag whether a buffer should be reused if it has the same size - * @param ppbBuf Where to store the address of the buffer if an entry with the - * same size was found and fReuseBuffer is true. - * - * @note This function may return fewer bytes than requested because entries - * may be marked as non evictable if they are used for I/O at the - * moment. - */ -static size_t pdmacFileCacheEvictPagesFrom(PPDMACFILECACHEGLOBAL pCache, size_t cbData, - PPDMACFILELRULIST pListSrc, PPDMACFILELRULIST pGhostListDst, - bool fReuseBuffer, uint8_t **ppbBuffer) -{ - size_t cbEvicted = 0; - - PDMACFILECACHE_IS_CRITSECT_OWNER(pCache); - - AssertMsg(cbData > 0, ("Evicting 0 bytes not possible\n")); - AssertMsg( !pGhostListDst - || (pGhostListDst == &pCache->LruRecentlyUsedOut), - ("Destination list must be NULL or the recently used but paged out list\n")); - - if (fReuseBuffer) - { - AssertPtr(ppbBuffer); - *ppbBuffer = NULL; - } - - /* Start deleting from the tail. */ - PPDMACFILECACHEENTRY pEntry = pListSrc->pTail; - - while ((cbEvicted < cbData) && pEntry) - { - PPDMACFILECACHEENTRY pCurr = pEntry; - - pEntry = pEntry->pPrev; - - /* We can't evict pages which are currently in progress or dirty but not in progress */ - if ( !(pCurr->fFlags & PDMACFILECACHE_NOT_EVICTABLE) - && (ASMAtomicReadU32(&pCurr->cRefs) == 0)) - { - /* Ok eviction candidate. Grab the endpoint semaphore and check again - * because somebody else might have raced us. */ - PPDMACFILEENDPOINTCACHE pEndpointCache = &pCurr->pEndpoint->DataCache; - RTSemRWRequestWrite(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - - if (!(pCurr->fFlags & PDMACFILECACHE_NOT_EVICTABLE) - && (ASMAtomicReadU32(&pCurr->cRefs) == 0)) - { - LogFlow(("Evicting entry %#p (%u bytes)\n", pCurr, pCurr->cbData)); - - if (fReuseBuffer && (pCurr->cbData == cbData)) - { - STAM_COUNTER_INC(&pCache->StatBuffersReused); - *ppbBuffer = pCurr->pbData; - } - else if (pCurr->pbData) - RTMemPageFree(pCurr->pbData, pCurr->cbData); - - pCurr->pbData = NULL; - cbEvicted += pCurr->cbData; - - pdmacFileCacheEntryRemoveFromList(pCurr); - pdmacFileCacheSub(pCache, pCurr->cbData); - - if (pGhostListDst) - { - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - - PPDMACFILECACHEENTRY pGhostEntFree = pGhostListDst->pTail; - - /* We have to remove the last entries from the paged out list. */ - while ( ((pGhostListDst->cbCached + pCurr->cbData) > pCache->cbRecentlyUsedOutMax) - && pGhostEntFree) - { - PPDMACFILECACHEENTRY pFree = pGhostEntFree; - PPDMACFILEENDPOINTCACHE pEndpointCacheFree = &pFree->pEndpoint->DataCache; - - pGhostEntFree = pGhostEntFree->pPrev; - - RTSemRWRequestWrite(pEndpointCacheFree->SemRWEntries, RT_INDEFINITE_WAIT); - - if (ASMAtomicReadU32(&pFree->cRefs) == 0) - { - pdmacFileCacheEntryRemoveFromList(pFree); - - STAM_PROFILE_ADV_START(&pCache->StatTreeRemove, Cache); - RTAvlrFileOffsetRemove(pEndpointCacheFree->pTree, pFree->Core.Key); - STAM_PROFILE_ADV_STOP(&pCache->StatTreeRemove, Cache); - - RTMemFree(pFree); - } - - RTSemRWReleaseWrite(pEndpointCacheFree->SemRWEntries); - } - - if (pGhostListDst->cbCached + pCurr->cbData > pCache->cbRecentlyUsedOutMax) - { - /* Couldn't remove enough entries. Delete */ - STAM_PROFILE_ADV_START(&pCache->StatTreeRemove, Cache); - RTAvlrFileOffsetRemove(pCurr->pEndpoint->DataCache.pTree, pCurr->Core.Key); - STAM_PROFILE_ADV_STOP(&pCache->StatTreeRemove, Cache); - - RTMemFree(pCurr); - } - else - pdmacFileCacheEntryAddToList(pGhostListDst, pCurr); - } - else - { - /* Delete the entry from the AVL tree it is assigned to. */ - STAM_PROFILE_ADV_START(&pCache->StatTreeRemove, Cache); - RTAvlrFileOffsetRemove(pCurr->pEndpoint->DataCache.pTree, pCurr->Core.Key); - STAM_PROFILE_ADV_STOP(&pCache->StatTreeRemove, Cache); - - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - RTMemFree(pCurr); - } - } - - } - else - LogFlow(("Entry %#p (%u bytes) is still in progress and can't be evicted\n", pCurr, pCurr->cbData)); - } - - return cbEvicted; -} - -static bool pdmacFileCacheReclaim(PPDMACFILECACHEGLOBAL pCache, size_t cbData, bool fReuseBuffer, uint8_t **ppbBuffer) -{ - size_t cbRemoved = 0; - - if ((pCache->cbCached + cbData) < pCache->cbMax) - return true; - else if ((pCache->LruRecentlyUsedIn.cbCached + cbData) > pCache->cbRecentlyUsedInMax) - { - /* Try to evict as many bytes as possible from A1in */ - cbRemoved = pdmacFileCacheEvictPagesFrom(pCache, cbData, &pCache->LruRecentlyUsedIn, - &pCache->LruRecentlyUsedOut, fReuseBuffer, ppbBuffer); - - /* - * If it was not possible to remove enough entries - * try the frequently accessed cache. - */ - if (cbRemoved < cbData) - { - Assert(!fReuseBuffer || !*ppbBuffer); /* It is not possible that we got a buffer with the correct size but we didn't freed enough data. */ - - /* - * If we removed something we can't pass the reuse buffer flag anymore because - * we don't need to evict that much data - */ - if (!cbRemoved) - cbRemoved += pdmacFileCacheEvictPagesFrom(pCache, cbData, &pCache->LruFrequentlyUsed, - NULL, fReuseBuffer, ppbBuffer); - else - cbRemoved += pdmacFileCacheEvictPagesFrom(pCache, cbData - cbRemoved, &pCache->LruFrequentlyUsed, - NULL, false, NULL); - } - } - else - { - /* We have to remove entries from frequently access list. */ - cbRemoved = pdmacFileCacheEvictPagesFrom(pCache, cbData, &pCache->LruFrequentlyUsed, - NULL, fReuseBuffer, ppbBuffer); - } - - LogFlowFunc((": removed %u bytes, requested %u\n", cbRemoved, cbData)); - return (cbRemoved >= cbData); -} - -/** - * Initiates a read I/O task for the given entry. - * - * @returns nothing. - * @param pEntry The entry to fetch the data to. - */ -static void pdmacFileCacheReadFromEndpoint(PPDMACFILECACHEENTRY pEntry) -{ - LogFlowFunc((": Reading data into cache entry %#p\n", pEntry)); - - /* Make sure no one evicts the entry while it is accessed. */ - pEntry->fFlags |= PDMACFILECACHE_ENTRY_IO_IN_PROGRESS; - - PPDMACTASKFILE pIoTask = pdmacFileTaskAlloc(pEntry->pEndpoint); - AssertPtr(pIoTask); - - AssertMsg(pEntry->pbData, ("Entry is in ghost state\n")); - - pIoTask->pEndpoint = pEntry->pEndpoint; - pIoTask->enmTransferType = PDMACTASKFILETRANSFER_READ; - pIoTask->Off = pEntry->Core.Key; - pIoTask->DataSeg.cbSeg = pEntry->cbData; - pIoTask->DataSeg.pvSeg = pEntry->pbData; - pIoTask->pvUser = pEntry; - pIoTask->pfnCompleted = pdmacFileCacheTaskCompleted; - - /* Send it off to the I/O manager. */ - pdmacFileEpAddTask(pEntry->pEndpoint, pIoTask); -} - -/** - * Initiates a write I/O task for the given entry. - * - * @returns nothing. - * @param pEntry The entry to read the data from. - */ -static void pdmacFileCacheWriteToEndpoint(PPDMACFILECACHEENTRY pEntry) -{ - LogFlowFunc((": Writing data from cache entry %#p\n", pEntry)); - - /* Make sure no one evicts the entry while it is accessed. */ - pEntry->fFlags |= PDMACFILECACHE_ENTRY_IO_IN_PROGRESS; - - PPDMACTASKFILE pIoTask = pdmacFileTaskAlloc(pEntry->pEndpoint); - AssertPtr(pIoTask); - - AssertMsg(pEntry->pbData, ("Entry is in ghost state\n")); - - pIoTask->pEndpoint = pEntry->pEndpoint; - pIoTask->enmTransferType = PDMACTASKFILETRANSFER_WRITE; - pIoTask->Off = pEntry->Core.Key; - pIoTask->DataSeg.cbSeg = pEntry->cbData; - pIoTask->DataSeg.pvSeg = pEntry->pbData; - pIoTask->pvUser = pEntry; - pIoTask->pfnCompleted = pdmacFileCacheTaskCompleted; - - /* Send it off to the I/O manager. */ - pdmacFileEpAddTask(pEntry->pEndpoint, pIoTask); -} - -/** - * Commit a single dirty entry to the endpoint - * - * @returns nothing - * @param pEntry The entry to commit. - */ -static void pdmacFileCacheEntryCommit(PPDMACFILEENDPOINTCACHE pEndpointCache, PPDMACFILECACHEENTRY pEntry) -{ - NOREF(pEndpointCache); - AssertMsg( (pEntry->fFlags & PDMACFILECACHE_ENTRY_IS_DIRTY) - && !(pEntry->fFlags & PDMACFILECACHE_ENTRY_IO_IN_PROGRESS), - ("Invalid flags set for entry %#p\n", pEntry)); - - pdmacFileCacheWriteToEndpoint(pEntry); -} - -/** - * Commit all dirty entries for a single endpoint. - * - * @returns nothing. - * @param pEndpointCache The endpoint cache to commit. - */ -static void pdmacFileCacheEndpointCommit(PPDMACFILEENDPOINTCACHE pEndpointCache) -{ - uint32_t cbCommitted = 0; - RTSemRWRequestWrite(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - - /* The list is moved to a new header to reduce locking overhead. */ - RTLISTNODE ListDirtyNotCommitted; - RTSPINLOCKTMP Tmp; - - RTListInit(&ListDirtyNotCommitted); - RTSpinlockAcquire(pEndpointCache->LockList, &Tmp); - RTListMove(&ListDirtyNotCommitted, &pEndpointCache->ListDirtyNotCommitted); - RTSpinlockRelease(pEndpointCache->LockList, &Tmp); - - if (!RTListIsEmpty(&ListDirtyNotCommitted)) - { - PPDMACFILECACHEENTRY pEntry = RTListGetFirst(&ListDirtyNotCommitted, - PDMACFILECACHEENTRY, - NodeNotCommitted); - - while (!RTListNodeIsLast(&ListDirtyNotCommitted, &pEntry->NodeNotCommitted)) - { - PPDMACFILECACHEENTRY pNext = RTListNodeGetNext(&pEntry->NodeNotCommitted, PDMACFILECACHEENTRY, - NodeNotCommitted); - pdmacFileCacheEntryCommit(pEndpointCache, pEntry); - cbCommitted += pEntry->cbData; - RTListNodeRemove(&pEntry->NodeNotCommitted); - pEntry = pNext; - } - - /* Commit the last endpoint */ - Assert(RTListNodeIsLast(&ListDirtyNotCommitted, &pEntry->NodeNotCommitted)); - pdmacFileCacheEntryCommit(pEndpointCache, pEntry); - RTListNodeRemove(&pEntry->NodeNotCommitted); - AssertMsg(RTListIsEmpty(&ListDirtyNotCommitted), - ("Committed all entries but list is not empty\n")); - } - - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - AssertMsg(pEndpointCache->pCache->cbDirty >= cbCommitted, - ("Number of committed bytes exceeds number of dirty bytes\n")); - ASMAtomicSubU32(&pEndpointCache->pCache->cbDirty, cbCommitted); -} - -/** - * Commit all dirty entries in the cache. - * - * @returns nothing. - * @param pCache The global cache instance. - */ -static void pdmacFileCacheCommitDirtyEntries(PPDMACFILECACHEGLOBAL pCache) -{ - bool fCommitInProgress = ASMAtomicXchgBool(&pCache->fCommitInProgress, true); - - if (!fCommitInProgress) - { - pdmacFileCacheLockEnter(pCache); - Assert(!RTListIsEmpty(&pCache->ListEndpoints)); - - PPDMACFILEENDPOINTCACHE pEndpointCache = RTListGetFirst(&pCache->ListEndpoints, - PDMACFILEENDPOINTCACHE, - NodeCacheEndpoint); - AssertPtr(pEndpointCache); - - while (!RTListNodeIsLast(&pCache->ListEndpoints, &pEndpointCache->NodeCacheEndpoint)) - { - pdmacFileCacheEndpointCommit(pEndpointCache); - - pEndpointCache = RTListNodeGetNext(&pEndpointCache->NodeCacheEndpoint, PDMACFILEENDPOINTCACHE, - NodeCacheEndpoint); - } - - /* Commit the last endpoint */ - Assert(RTListNodeIsLast(&pCache->ListEndpoints, &pEndpointCache->NodeCacheEndpoint)); - pdmacFileCacheEndpointCommit(pEndpointCache); - - pdmacFileCacheLockLeave(pCache); - ASMAtomicWriteBool(&pCache->fCommitInProgress, false); - } -} - -/** - * Adds the given entry as a dirty to the cache. - * - * @returns Flag whether the amount of dirty bytes in the cache exceeds the threshold - * @param pEndpointCache The endpoint cache the entry belongs to. - * @param pEntry The entry to add. - */ -static bool pdmacFileCacheAddDirtyEntry(PPDMACFILEENDPOINTCACHE pEndpointCache, PPDMACFILECACHEENTRY pEntry) -{ - bool fDirtyBytesExceeded = false; - PPDMACFILECACHEGLOBAL pCache = pEndpointCache->pCache; - - /* If the commit timer is disabled we commit right away. */ - if (pCache->u32CommitTimeoutMs == 0) - { - pEntry->fFlags |= PDMACFILECACHE_ENTRY_IS_DIRTY; - pdmacFileCacheEntryCommit(pEndpointCache, pEntry); - } - else if (!(pEntry->fFlags & PDMACFILECACHE_ENTRY_IS_DIRTY)) - { - pEntry->fFlags |= PDMACFILECACHE_ENTRY_IS_DIRTY; - - RTSPINLOCKTMP Tmp; - RTSpinlockAcquire(pEndpointCache->LockList, &Tmp); - RTListAppend(&pEndpointCache->ListDirtyNotCommitted, &pEntry->NodeNotCommitted); - RTSpinlockRelease(pEndpointCache->LockList, &Tmp); - - uint32_t cbDirty = ASMAtomicAddU32(&pCache->cbDirty, pEntry->cbData); - - fDirtyBytesExceeded = (cbDirty >= pCache->cbCommitDirtyThreshold); - } - - return fDirtyBytesExceeded; -} - - -/** - * Completes a task segment freeing all resources and completes the task handle - * if everything was transferred. - * - * @returns Next task segment handle. - * @param pTaskSeg Task segment to complete. - * @param rc Status code to set. - */ -static PPDMACFILETASKSEG pdmacFileCacheTaskComplete(PPDMACFILETASKSEG pTaskSeg, int rc) -{ - PPDMACFILETASKSEG pNext = pTaskSeg->pNext; - PPDMASYNCCOMPLETIONTASKFILE pTaskFile = pTaskSeg->pTask; - - if (RT_FAILURE(rc)) - ASMAtomicCmpXchgS32(&pTaskFile->rc, rc, VINF_SUCCESS); - - uint32_t uOld = ASMAtomicSubS32(&pTaskFile->cbTransferLeft, pTaskSeg->cbTransfer); - AssertMsg(uOld >= pTaskSeg->cbTransfer, ("New value would overflow\n")); - if (!(uOld - pTaskSeg->cbTransfer) - && !ASMAtomicXchgBool(&pTaskFile->fCompleted, true)) - pdmR3AsyncCompletionCompleteTask(&pTaskFile->Core, pTaskFile->rc, true); - - RTMemFree(pTaskSeg); - - return pNext; -} - -/** - * Completion callback for I/O tasks. - * - * @returns nothing. - * @param pTask The completed task. - * @param pvUser Opaque user data. - * @param rc Status code of the completed request. - */ -static void pdmacFileCacheTaskCompleted(PPDMACTASKFILE pTask, void *pvUser, int rc) -{ - PPDMACFILECACHEENTRY pEntry = (PPDMACFILECACHEENTRY)pvUser; - PPDMACFILECACHEGLOBAL pCache = pEntry->pCache; - PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint = pEntry->pEndpoint; - PPDMACFILEENDPOINTCACHE pEndpointCache = &pEndpoint->DataCache; - - /* Reference the entry now as we are clearing the I/O in progress flag - * which protects the entry till now. */ - pdmacFileEpCacheEntryRef(pEntry); - - RTSemRWRequestWrite(pEndpoint->DataCache.SemRWEntries, RT_INDEFINITE_WAIT); - pEntry->fFlags &= ~PDMACFILECACHE_ENTRY_IO_IN_PROGRESS; - - /* Process waiting segment list. The data in entry might have changed in-between. */ - bool fDirty = false; - PPDMACFILETASKSEG pComplete = pEntry->pWaitingHead; - PPDMACFILETASKSEG pCurr = pComplete; - - AssertMsg((pCurr && pEntry->pWaitingTail) || (!pCurr && !pEntry->pWaitingTail), - ("The list tail was not updated correctly\n")); - pEntry->pWaitingTail = NULL; - pEntry->pWaitingHead = NULL; - - if (pTask->enmTransferType == PDMACTASKFILETRANSFER_WRITE) - { - /* - * An error here is difficult to handle as the original request completed already. - * The error is logged for now and the VM is paused. - * If the user continues the entry is written again in the hope - * the user fixed the problem and the next write succeeds. - */ - /** @todo r=aeichner: This solution doesn't work - * The user will get the message but the VM will hang afterwards - * VMR3Suspend() returns when the VM is suspended but suspending - * the VM will reopen the images readonly in DrvVD. They are closed first - * which will close the endpoints. This will block EMT while the - * I/O manager processes the close request but the IO manager is stuck - * in the VMR3Suspend call and can't process the request. - * Another problem is that closing the VM means flushing the cache - * but the entry failed and will probably fail again. - * No idea so far how to solve this problem... but the user gets informed - * at least. - */ - if (RT_FAILURE(rc)) - { - LogRel(("I/O cache: Error while writing entry at offset %RTfoff (%u bytes) to file \"%s\"\n", - pEntry->Core.Key, pEntry->cbData, pEndpoint->Core.pszUri)); - - rc = VMSetRuntimeError(pEndpoint->Core.pEpClass->pVM, 0, "CACHE_IOERR", - N_("The I/O cache encountered an error while updating data in file \"%s\" (rc=%Rrc). Make sure there is enough free space on the disk and that the disk is working properly. Operation can be resumed afterwards."), pEndpoint->Core.pszUri, rc); - AssertRC(rc); - rc = VMR3Suspend(pEndpoint->Core.pEpClass->pVM); - } - else - { - pEntry->fFlags &= ~PDMACFILECACHE_ENTRY_IS_DIRTY; - - while (pCurr) - { - AssertMsg(pCurr->fWrite, ("Completed write entries should never have read tasks attached\n")); - - memcpy(pEntry->pbData + pCurr->uBufOffset, pCurr->pvBuf, pCurr->cbTransfer); - fDirty = true; - - pCurr = pCurr->pNext; - } - } - } - else - { - AssertMsg(pTask->enmTransferType == PDMACTASKFILETRANSFER_READ, ("Invalid transfer type\n")); - AssertMsg(!(pEntry->fFlags & PDMACFILECACHE_ENTRY_IS_DIRTY), - ("Invalid flags set\n")); - - while (pCurr) - { - if (pCurr->fWrite) - { - memcpy(pEntry->pbData + pCurr->uBufOffset, pCurr->pvBuf, pCurr->cbTransfer); - fDirty = true; - } - else - memcpy(pCurr->pvBuf, pEntry->pbData + pCurr->uBufOffset, pCurr->cbTransfer); - - pCurr = pCurr->pNext; - } - } - - bool fCommit = false; - if (fDirty) - fCommit = pdmacFileCacheAddDirtyEntry(pEndpointCache, pEntry); - - RTSemRWReleaseWrite(pEndpoint->DataCache.SemRWEntries); - - /* Dereference so that it isn't protected anymore except we issued anyother write for it. */ - pdmacFileEpCacheEntryRelease(pEntry); - - if (fCommit) - pdmacFileCacheCommitDirtyEntries(pCache); - - /* Complete waiters now. */ - while (pComplete) - pComplete = pdmacFileCacheTaskComplete(pComplete, rc); -} - -/** - * Commit timer callback. - */ -static void pdmacFileCacheCommitTimerCallback(PVM pVM, PTMTIMER pTimer, void *pvUser) -{ - PPDMASYNCCOMPLETIONEPCLASSFILE pClassFile = (PPDMASYNCCOMPLETIONEPCLASSFILE)pvUser; - PPDMACFILECACHEGLOBAL pCache = &pClassFile->Cache; - - LogFlowFunc(("Commit interval expired, commiting dirty entries\n")); - - if (ASMAtomicReadU32(&pCache->cbDirty) > 0) - pdmacFileCacheCommitDirtyEntries(pCache); - - TMTimerSetMillies(pTimer, pCache->u32CommitTimeoutMs); - LogFlowFunc(("Entries committed, going to sleep\n")); -} - -/** - * Initializes the I/O cache. - * - * returns VBox status code. - * @param pClassFile The global class data for file endpoints. - * @param pCfgNode CFGM node to query configuration data from. - */ -int pdmacFileCacheInit(PPDMASYNCCOMPLETIONEPCLASSFILE pClassFile, PCFGMNODE pCfgNode) -{ - int rc = VINF_SUCCESS; - PPDMACFILECACHEGLOBAL pCache = &pClassFile->Cache; - - rc = CFGMR3QueryU32Def(pCfgNode, "CacheSize", &pCache->cbMax, 5 * _1M); - AssertLogRelRCReturn(rc, rc); - - RTListInit(&pCache->ListEndpoints); - pCache->cRefs = 0; - pCache->cbCached = 0; - pCache->fCommitInProgress = 0; - LogFlowFunc((": Maximum number of bytes cached %u\n", pCache->cbMax)); - - /* Initialize members */ - pCache->LruRecentlyUsedIn.pHead = NULL; - pCache->LruRecentlyUsedIn.pTail = NULL; - pCache->LruRecentlyUsedIn.cbCached = 0; - - pCache->LruRecentlyUsedOut.pHead = NULL; - pCache->LruRecentlyUsedOut.pTail = NULL; - pCache->LruRecentlyUsedOut.cbCached = 0; - - pCache->LruFrequentlyUsed.pHead = NULL; - pCache->LruFrequentlyUsed.pTail = NULL; - pCache->LruFrequentlyUsed.cbCached = 0; - - pCache->cbRecentlyUsedInMax = (pCache->cbMax / 100) * 25; /* 25% of the buffer size */ - pCache->cbRecentlyUsedOutMax = (pCache->cbMax / 100) * 50; /* 50% of the buffer size */ - LogFlowFunc((": cbRecentlyUsedInMax=%u cbRecentlyUsedOutMax=%u\n", pCache->cbRecentlyUsedInMax, pCache->cbRecentlyUsedOutMax)); - - /** @todo r=aeichner: Experiment to find optimal default values */ - rc = CFGMR3QueryU32Def(pCfgNode, "CacheCommitIntervalMs", &pCache->u32CommitTimeoutMs, 10000 /* 10sec */); - AssertLogRelRCReturn(rc, rc); - rc = CFGMR3QueryU32(pCfgNode, "CacheCommitThreshold", &pCache->cbCommitDirtyThreshold); - if ( rc == VERR_CFGM_VALUE_NOT_FOUND - || rc == VERR_CFGM_NO_PARENT) - { - /* Start committing after 50% of the cache are dirty */ - pCache->cbCommitDirtyThreshold = pCache->cbMax / 2; - } - else - return rc; - - STAMR3Register(pClassFile->Core.pVM, &pCache->cbMax, - STAMTYPE_U32, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/cbMax", - STAMUNIT_BYTES, - "Maximum cache size"); - STAMR3Register(pClassFile->Core.pVM, &pCache->cbCached, - STAMTYPE_U32, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/cbCached", - STAMUNIT_BYTES, - "Currently used cache"); - STAMR3Register(pClassFile->Core.pVM, &pCache->LruRecentlyUsedIn.cbCached, - STAMTYPE_U32, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/cbCachedMruIn", - STAMUNIT_BYTES, - "Number of bytes cached in MRU list"); - STAMR3Register(pClassFile->Core.pVM, &pCache->LruRecentlyUsedOut.cbCached, - STAMTYPE_U32, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/cbCachedMruOut", - STAMUNIT_BYTES, - "Number of bytes cached in FRU list"); - STAMR3Register(pClassFile->Core.pVM, &pCache->LruFrequentlyUsed.cbCached, - STAMTYPE_U32, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/cbCachedFru", - STAMUNIT_BYTES, - "Number of bytes cached in FRU ghost list"); - -#ifdef VBOX_WITH_STATISTICS - STAMR3Register(pClassFile->Core.pVM, &pCache->cHits, - STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CacheHits", - STAMUNIT_COUNT, "Number of hits in the cache"); - STAMR3Register(pClassFile->Core.pVM, &pCache->cPartialHits, - STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CachePartialHits", - STAMUNIT_COUNT, "Number of partial hits in the cache"); - STAMR3Register(pClassFile->Core.pVM, &pCache->cMisses, - STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CacheMisses", - STAMUNIT_COUNT, "Number of misses when accessing the cache"); - STAMR3Register(pClassFile->Core.pVM, &pCache->StatRead, - STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CacheRead", - STAMUNIT_BYTES, "Number of bytes read from the cache"); - STAMR3Register(pClassFile->Core.pVM, &pCache->StatWritten, - STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CacheWritten", - STAMUNIT_BYTES, "Number of bytes written to the cache"); - STAMR3Register(pClassFile->Core.pVM, &pCache->StatTreeGet, - STAMTYPE_PROFILE_ADV, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CacheTreeGet", - STAMUNIT_TICKS_PER_CALL, "Time taken to access an entry in the tree"); - STAMR3Register(pClassFile->Core.pVM, &pCache->StatTreeInsert, - STAMTYPE_PROFILE_ADV, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CacheTreeInsert", - STAMUNIT_TICKS_PER_CALL, "Time taken to insert an entry in the tree"); - STAMR3Register(pClassFile->Core.pVM, &pCache->StatTreeRemove, - STAMTYPE_PROFILE_ADV, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CacheTreeRemove", - STAMUNIT_TICKS_PER_CALL, "Time taken to remove an entry an the tree"); - STAMR3Register(pClassFile->Core.pVM, &pCache->StatBuffersReused, - STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, - "/PDM/AsyncCompletion/File/CacheBuffersReused", - STAMUNIT_COUNT, "Number of times a buffer could be reused"); -#endif - - /* Initialize the critical section */ - rc = RTCritSectInit(&pCache->CritSect); - - if (RT_SUCCESS(rc)) - { - /* Create the commit timer */ - if (pCache->u32CommitTimeoutMs > 0) - rc = TMR3TimerCreateInternal(pClassFile->Core.pVM, TMCLOCK_REAL, - pdmacFileCacheCommitTimerCallback, - pClassFile, - "Cache-Commit", - &pClassFile->Cache.pTimerCommit); - - if (RT_SUCCESS(rc)) - { - LogRel(("AIOMgr: Cache successfully initialised. Cache size is %u bytes\n", pCache->cbMax)); - LogRel(("AIOMgr: Cache commit interval is %u ms\n", pCache->u32CommitTimeoutMs)); - LogRel(("AIOMgr: Cache commit threshold is %u bytes\n", pCache->cbCommitDirtyThreshold)); - return VINF_SUCCESS; - } - - RTCritSectDelete(&pCache->CritSect); - } - - return rc; -} - -/** - * Destroysthe cache freeing all data. - * - * returns nothing. - * @param pClassFile The global class data for file endpoints. - */ -void pdmacFileCacheDestroy(PPDMASYNCCOMPLETIONEPCLASSFILE pClassFile) -{ - PPDMACFILECACHEGLOBAL pCache = &pClassFile->Cache; - - /* Make sure no one else uses the cache now */ - pdmacFileCacheLockEnter(pCache); - - /* Cleanup deleting all cache entries waiting for in progress entries to finish. */ - pdmacFileCacheDestroyList(&pCache->LruRecentlyUsedIn); - pdmacFileCacheDestroyList(&pCache->LruRecentlyUsedOut); - pdmacFileCacheDestroyList(&pCache->LruFrequentlyUsed); - - pdmacFileCacheLockLeave(pCache); - - RTCritSectDelete(&pCache->CritSect); -} - -/** - * Initializes per endpoint cache data - * like the AVL tree used to access cached entries. - * - * @returns VBox status code. - * @param pEndpoint The endpoint to init the cache for, - * @param pClassFile The global class data for file endpoints. - */ -int pdmacFileEpCacheInit(PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint, PPDMASYNCCOMPLETIONEPCLASSFILE pClassFile) -{ - PPDMACFILEENDPOINTCACHE pEndpointCache = &pEndpoint->DataCache; - - pEndpointCache->pCache = &pClassFile->Cache; - RTListInit(&pEndpointCache->ListDirtyNotCommitted); - int rc = RTSpinlockCreate(&pEndpointCache->LockList); - - if (RT_SUCCESS(rc)) - { - rc = RTSemRWCreate(&pEndpointCache->SemRWEntries); - if (RT_SUCCESS(rc)) - { - pEndpointCache->pTree = (PAVLRFOFFTREE)RTMemAllocZ(sizeof(AVLRFOFFTREE)); - if (pEndpointCache->pTree) - { - pClassFile->Cache.cRefs++; - RTListAppend(&pClassFile->Cache.ListEndpoints, &pEndpointCache->NodeCacheEndpoint); - - /* Arm the timer if this is the first endpoint. */ - if ( pClassFile->Cache.cRefs == 1 - && pClassFile->Cache.u32CommitTimeoutMs > 0) - rc = TMTimerSetMillies(pClassFile->Cache.pTimerCommit, pClassFile->Cache.u32CommitTimeoutMs); - } - else - rc = VERR_NO_MEMORY; - - if (RT_FAILURE(rc)) - RTSemRWDestroy(pEndpointCache->SemRWEntries); - } - - if (RT_FAILURE(rc)) - RTSpinlockDestroy(pEndpointCache->LockList); - } - -#ifdef VBOX_WITH_STATISTICS - if (RT_SUCCESS(rc)) - { - STAMR3RegisterF(pClassFile->Core.pVM, &pEndpointCache->StatWriteDeferred, - STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, - STAMUNIT_COUNT, "Number of deferred writes", - "/PDM/AsyncCompletion/File/%s/Cache/DeferredWrites", RTPathFilename(pEndpoint->Core.pszUri)); - } -#endif - - LogFlowFunc(("Leave rc=%Rrc\n", rc)); - return rc; -} - -/** - * Callback for the AVL destroy routine. Frees a cache entry for this endpoint. - * - * @returns IPRT status code. - * @param pNode The node to destroy. - * @param pvUser Opaque user data. - */ -static int pdmacFileEpCacheEntryDestroy(PAVLRFOFFNODECORE pNode, void *pvUser) -{ - PPDMACFILECACHEENTRY pEntry = (PPDMACFILECACHEENTRY)pNode; - PPDMACFILECACHEGLOBAL pCache = (PPDMACFILECACHEGLOBAL)pvUser; - PPDMACFILEENDPOINTCACHE pEndpointCache = &pEntry->pEndpoint->DataCache; - - while (ASMAtomicReadU32(&pEntry->fFlags) & (PDMACFILECACHE_ENTRY_IO_IN_PROGRESS | PDMACFILECACHE_ENTRY_IS_DIRTY)) - { - /* Leave the locks to let the I/O thread make progress but reference the entry to prevent eviction. */ - pdmacFileEpCacheEntryRef(pEntry); - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - pdmacFileCacheLockLeave(pCache); - - RTThreadSleep(250); - - /* Re-enter all locks */ - pdmacFileCacheLockEnter(pCache); - RTSemRWRequestWrite(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - pdmacFileEpCacheEntryRelease(pEntry); - } - - AssertMsg(!(pEntry->fFlags & (PDMACFILECACHE_ENTRY_IO_IN_PROGRESS | PDMACFILECACHE_ENTRY_IS_DIRTY)), - ("Entry is dirty and/or still in progress fFlags=%#x\n", pEntry->fFlags)); - - bool fUpdateCache = pEntry->pList == &pCache->LruFrequentlyUsed - || pEntry->pList == &pCache->LruRecentlyUsedIn; - - pdmacFileCacheEntryRemoveFromList(pEntry); - - if (fUpdateCache) - pdmacFileCacheSub(pCache, pEntry->cbData); - - RTMemPageFree(pEntry->pbData, pEntry->cbData); - RTMemFree(pEntry); - - return VINF_SUCCESS; -} - -/** - * Destroys all cache resources used by the given endpoint. - * - * @returns nothing. - * @param pEndpoint The endpoint to the destroy. - */ -void pdmacFileEpCacheDestroy(PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint) -{ - PPDMACFILEENDPOINTCACHE pEndpointCache = &pEndpoint->DataCache; - PPDMACFILECACHEGLOBAL pCache = pEndpointCache->pCache; - - /* Make sure nobody is accessing the cache while we delete the tree. */ - pdmacFileCacheLockEnter(pCache); - RTSemRWRequestWrite(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - RTAvlrFileOffsetDestroy(pEndpointCache->pTree, pdmacFileEpCacheEntryDestroy, pCache); - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - - RTSpinlockDestroy(pEndpointCache->LockList); - - pCache->cRefs--; - RTListNodeRemove(&pEndpointCache->NodeCacheEndpoint); - - if ( !pCache->cRefs - && pCache->u32CommitTimeoutMs > 0) - TMTimerStop(pCache->pTimerCommit); - - pdmacFileCacheLockLeave(pCache); - - RTSemRWDestroy(pEndpointCache->SemRWEntries); - -#ifdef VBOX_WITH_STATISTICS - PPDMASYNCCOMPLETIONEPCLASSFILE pEpClassFile = (PPDMASYNCCOMPLETIONEPCLASSFILE)pEndpoint->Core.pEpClass; - - STAMR3Deregister(pEpClassFile->Core.pVM, &pEndpointCache->StatWriteDeferred); -#endif -} - -static PPDMACFILECACHEENTRY pdmacFileEpCacheGetCacheEntryByOffset(PPDMACFILEENDPOINTCACHE pEndpointCache, RTFOFF off) -{ - PPDMACFILECACHEGLOBAL pCache = pEndpointCache->pCache; - PPDMACFILECACHEENTRY pEntry = NULL; - - STAM_PROFILE_ADV_START(&pCache->StatTreeGet, Cache); - - RTSemRWRequestRead(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - pEntry = (PPDMACFILECACHEENTRY)RTAvlrFileOffsetRangeGet(pEndpointCache->pTree, off); - if (pEntry) - pdmacFileEpCacheEntryRef(pEntry); - RTSemRWReleaseRead(pEndpointCache->SemRWEntries); - - STAM_PROFILE_ADV_STOP(&pCache->StatTreeGet, Cache); - - return pEntry; -} - -/** - * Return the best fit cache entries for the given offset. - * - * @returns nothing. - * @param pEndpointCache The endpoint cache. - * @param off The offset. - * @param pEntryAbove Where to store the pointer to the best fit entry above the - * the given offset. NULL if not required. - * @param pEntryBelow Where to store the pointer to the best fit entry below the - * the given offset. NULL if not required. - */ -static void pdmacFileEpCacheGetCacheBestFitEntryByOffset(PPDMACFILEENDPOINTCACHE pEndpointCache, RTFOFF off, - PPDMACFILECACHEENTRY *ppEntryAbove, - PPDMACFILECACHEENTRY *ppEntryBelow) -{ - PPDMACFILECACHEGLOBAL pCache = pEndpointCache->pCache; - - STAM_PROFILE_ADV_START(&pCache->StatTreeGet, Cache); - - RTSemRWRequestRead(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - if (ppEntryAbove) - { - *ppEntryAbove = (PPDMACFILECACHEENTRY)RTAvlrFileOffsetGetBestFit(pEndpointCache->pTree, off, true /*fAbove*/); - if (*ppEntryAbove) - pdmacFileEpCacheEntryRef(*ppEntryAbove); - } - - if (ppEntryBelow) - { - *ppEntryBelow = (PPDMACFILECACHEENTRY)RTAvlrFileOffsetGetBestFit(pEndpointCache->pTree, off, false /*fAbove*/); - if (*ppEntryBelow) - pdmacFileEpCacheEntryRef(*ppEntryBelow); - } - RTSemRWReleaseRead(pEndpointCache->SemRWEntries); - - STAM_PROFILE_ADV_STOP(&pCache->StatTreeGet, Cache); -} - -static void pdmacFileEpCacheInsertEntry(PPDMACFILEENDPOINTCACHE pEndpointCache, PPDMACFILECACHEENTRY pEntry) -{ - PPDMACFILECACHEGLOBAL pCache = pEndpointCache->pCache; - - STAM_PROFILE_ADV_START(&pCache->StatTreeInsert, Cache); - RTSemRWRequestWrite(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - bool fInserted = RTAvlrFileOffsetInsert(pEndpointCache->pTree, &pEntry->Core); - AssertMsg(fInserted, ("Node was not inserted into tree\n")); - STAM_PROFILE_ADV_STOP(&pCache->StatTreeInsert, Cache); - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); -} - -/** - * Allocates and initializes a new entry for the cache. - * The entry has a reference count of 1. - * - * @returns Pointer to the new cache entry or NULL if out of memory. - * @param pCache The cache the entry belongs to. - * @param pEndoint The endpoint the entry holds data for. - * @param off Start offset. - * @param cbData Size of the cache entry. - * @param pbBuffer Pointer to the buffer to use. - * NULL if a new buffer should be allocated. - * The buffer needs to have the same size of the entry. - */ -static PPDMACFILECACHEENTRY pdmacFileCacheEntryAlloc(PPDMACFILECACHEGLOBAL pCache, - PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint, - RTFOFF off, size_t cbData, uint8_t *pbBuffer) -{ - PPDMACFILECACHEENTRY pEntryNew = (PPDMACFILECACHEENTRY)RTMemAllocZ(sizeof(PDMACFILECACHEENTRY)); - - if (RT_UNLIKELY(!pEntryNew)) - return NULL; - - pEntryNew->Core.Key = off; - pEntryNew->Core.KeyLast = off + cbData - 1; - pEntryNew->pEndpoint = pEndpoint; - pEntryNew->pCache = pCache; - pEntryNew->fFlags = 0; - pEntryNew->cRefs = 1; /* We are using it now. */ - pEntryNew->pList = NULL; - pEntryNew->cbData = cbData; - pEntryNew->pWaitingHead = NULL; - pEntryNew->pWaitingTail = NULL; - if (pbBuffer) - pEntryNew->pbData = pbBuffer; - else - pEntryNew->pbData = (uint8_t *)RTMemPageAlloc(cbData); - - if (RT_UNLIKELY(!pEntryNew->pbData)) - { - RTMemFree(pEntryNew); - return NULL; - } - - return pEntryNew; -} - -/** - * Adds a segment to the waiting list for a cache entry - * which is currently in progress. - * - * @returns nothing. - * @param pEntry The cache entry to add the segment to. - * @param pSeg The segment to add. - */ -DECLINLINE(void) pdmacFileEpCacheEntryAddWaitingSegment(PPDMACFILECACHEENTRY pEntry, PPDMACFILETASKSEG pSeg) -{ - pSeg->pNext = NULL; - - if (pEntry->pWaitingHead) - { - AssertPtr(pEntry->pWaitingTail); - - pEntry->pWaitingTail->pNext = pSeg; - pEntry->pWaitingTail = pSeg; - } - else - { - Assert(!pEntry->pWaitingTail); - - pEntry->pWaitingHead = pSeg; - pEntry->pWaitingTail = pSeg; - } -} - -/** - * Checks that a set of flags is set/clear acquiring the R/W semaphore - * in exclusive mode. - * - * @returns true if the flag in fSet is set and the one in fClear is clear. - * false otherwise. - * The R/W semaphore is only held if true is returned. - * - * @param pEndpointCache The endpoint cache instance data. - * @param pEntry The entry to check the flags for. - * @param fSet The flag which is tested to be set. - * @param fClear The flag which is tested to be clear. - */ -DECLINLINE(bool) pdmacFileEpCacheEntryFlagIsSetClearAcquireLock(PPDMACFILEENDPOINTCACHE pEndpointCache, - PPDMACFILECACHEENTRY pEntry, - uint32_t fSet, uint32_t fClear) -{ - uint32_t fFlags = ASMAtomicReadU32(&pEntry->fFlags); - bool fPassed = ((fFlags & fSet) && !(fFlags & fClear)); - - if (fPassed) - { - /* Acquire the lock and check again because the completion callback might have raced us. */ - RTSemRWRequestWrite(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - - fFlags = ASMAtomicReadU32(&pEntry->fFlags); - fPassed = ((fFlags & fSet) && !(fFlags & fClear)); - - /* Drop the lock if we didn't passed the test. */ - if (!fPassed) - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - } - - return fPassed; -} - -/** - * Copies data to a buffer described by a I/O memory context. - * - * @returns nothing. - * @param pIoMemCtx The I/O memory context to copy the data into. - * @param pbData Pointer to the data data to copy. - * @param cbData Amount of data to copy. - */ -static void pdmacFileEpCacheCopyToIoMemCtx(PPDMIOMEMCTX pIoMemCtx, - uint8_t *pbData, - size_t cbData) -{ - while (cbData) - { - size_t cbCopy = cbData; - uint8_t *pbBuf = pdmIoMemCtxGetBuffer(pIoMemCtx, &cbCopy); - - AssertPtr(pbBuf); - - memcpy(pbBuf, pbData, cbCopy); - - cbData -= cbCopy; - pbData += cbCopy; - } -} - -/** - * Copies data from a buffer described by a I/O memory context. - * - * @returns nothing. - * @param pIoMemCtx The I/O memory context to copy the data from. - * @param pbData Pointer to the destination buffer. - * @param cbData Amount of data to copy. - */ -static void pdmacFileEpCacheCopyFromIoMemCtx(PPDMIOMEMCTX pIoMemCtx, - uint8_t *pbData, - size_t cbData) -{ - while (cbData) - { - size_t cbCopy = cbData; - uint8_t *pbBuf = pdmIoMemCtxGetBuffer(pIoMemCtx, &cbCopy); - - AssertPtr(pbBuf); - - memcpy(pbData, pbBuf, cbCopy); - - cbData -= cbCopy; - pbData += cbCopy; - } -} - -/** - * Add a buffer described by the I/O memory context - * to the entry waiting for completion. - * - * @returns nothing. - * @param pEntry The entry to add the buffer to. - * @param pTask Task associated with the buffer. - * @param pIoMemCtx The memory context to use. - * @param OffDiff Offset from the start of the buffer - * in the entry. - * @param cbData Amount of data to wait for onthis entry. - * @param fWrite Flag whether the task waits because it wants to write - * to the cache entry. - */ -static void pdmacFileEpCacheEntryWaitersAdd(PPDMACFILECACHEENTRY pEntry, - PPDMASYNCCOMPLETIONTASKFILE pTask, - PPDMIOMEMCTX pIoMemCtx, - RTFOFF OffDiff, - size_t cbData, - bool fWrite) -{ - while (cbData) - { - PPDMACFILETASKSEG pSeg = (PPDMACFILETASKSEG)RTMemAllocZ(sizeof(PDMACFILETASKSEG)); - size_t cbSeg = cbData; - uint8_t *pbBuf = pdmIoMemCtxGetBuffer(pIoMemCtx, &cbSeg); - - pSeg->pTask = pTask; - pSeg->uBufOffset = OffDiff; - pSeg->cbTransfer = cbSeg; - pSeg->pvBuf = pbBuf; - pSeg->fWrite = fWrite; - - pdmacFileEpCacheEntryAddWaitingSegment(pEntry, pSeg); - - cbData -= cbSeg; - OffDiff += cbSeg; - } -} - -/** - * Passthrough a part of a request directly to the I/O manager - * handling the endpoint. - * - * @returns nothing. - * @param pEndpoint The endpoint. - * @param pTask The task. - * @param pIoMemCtx The I/O memory context to use. - * @param offStart Offset to start transfer from. - * @param cbData Amount of data to transfer. - * @param enmTransferType The transfer type (read/write) - */ -static void pdmacFileEpCacheRequestPassthrough(PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint, - PPDMASYNCCOMPLETIONTASKFILE pTask, - PPDMIOMEMCTX pIoMemCtx, - RTFOFF offStart, size_t cbData, - PDMACTASKFILETRANSFER enmTransferType) -{ - while (cbData) - { - size_t cbSeg = cbData; - uint8_t *pbBuf = pdmIoMemCtxGetBuffer(pIoMemCtx, &cbSeg); - PPDMACTASKFILE pIoTask = pdmacFileTaskAlloc(pEndpoint); - AssertPtr(pIoTask); - - pIoTask->pEndpoint = pEndpoint; - pIoTask->enmTransferType = enmTransferType; - pIoTask->Off = offStart; - pIoTask->DataSeg.cbSeg = cbSeg; - pIoTask->DataSeg.pvSeg = pbBuf; - pIoTask->pvUser = pTask; - pIoTask->pfnCompleted = pdmacFileEpTaskCompleted; - - offStart += cbSeg; - cbData -= cbSeg; - - /* Send it off to the I/O manager. */ - pdmacFileEpAddTask(pEndpoint, pIoTask); - } -} - -/** - * Calculate aligned offset and size for a new cache entry - * which do not intersect with an already existing entry and the - * file end. - * - * @returns The number of bytes the entry can hold of the requested amount - * of byte. - * @param pEndpoint The endpoint. - * @param pEndpointCache The endpoint cache. - * @param off The start offset. - * @param cb The number of bytes the entry needs to hold at least. - * @param uAlignment Alignment of the boundary sizes. - * @param poffAligned Where to store the aligned offset. - * @param pcbAligned Where to store the aligned size of the entry. - */ -static size_t pdmacFileEpCacheEntryBoundariesCalc(PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint, - PPDMACFILEENDPOINTCACHE pEndpointCache, - RTFOFF off, size_t cb, - unsigned uAlignment, - RTFOFF *poffAligned, size_t *pcbAligned) -{ - size_t cbAligned; - size_t cbInEntry = 0; - RTFOFF offAligned; - PPDMACFILECACHEENTRY pEntryAbove = NULL; - PPDMACFILECACHEENTRY pEntryBelow = NULL; - - /* Get the best fit entries around the offset */ - pdmacFileEpCacheGetCacheBestFitEntryByOffset(pEndpointCache, off, - &pEntryAbove, &pEntryBelow); - - /* Log the info */ - LogFlow(("%sest fit entry below off=%RTfoff (BestFit=%RTfoff BestFitEnd=%RTfoff BestFitSize=%u)\n", - pEntryBelow ? "B" : "No b", - off, - pEntryBelow ? pEntryBelow->Core.Key : 0, - pEntryBelow ? pEntryBelow->Core.KeyLast : 0, - pEntryBelow ? pEntryBelow->cbData : 0)); - - LogFlow(("%sest fit entry above off=%RTfoff (BestFit=%RTfoff BestFitEnd=%RTfoff BestFitSize=%u)\n", - pEntryAbove ? "B" : "No b", - off, - pEntryAbove ? pEntryAbove->Core.Key : 0, - pEntryAbove ? pEntryAbove->Core.KeyLast : 0, - pEntryAbove ? pEntryAbove->cbData : 0)); - - /* Align the offset first. */ - offAligned = off & ~(RTFOFF)(512-1); - if ( pEntryBelow - && offAligned <= pEntryBelow->Core.KeyLast) - offAligned = pEntryBelow->Core.KeyLast; - - if ( pEntryAbove - && off + (RTFOFF)cb > pEntryAbove->Core.Key) - { - cbInEntry = pEntryAbove->Core.Key - off; - cbAligned = pEntryAbove->Core.Key - offAligned; - } - else - { - /* - * Align the size to a 4KB boundary. - * Memory size is aligned to a page boundary - * and memory is wasted if the size is rather small. - * (For example reads with a size of 512 bytes). - */ - cbInEntry = cb; - cbAligned = RT_ALIGN_Z(cb + (off - offAligned), uAlignment); - - /* - * Clip to file size if the original request doesn't - * exceed the file (not an appending write) - */ - uint64_t cbReq = off + (RTFOFF)cb; - if (cbReq >= pEndpoint->cbFile) - cbAligned = cbReq - offAligned; - else - cbAligned = RT_MIN(pEndpoint->cbFile - offAligned, cbAligned); - if (pEntryAbove) - { - Assert(pEntryAbove->Core.Key >= off); - cbAligned = RT_MIN(cbAligned, (uint64_t)pEntryAbove->Core.Key - offAligned); - } - } - - /* A few sanity checks */ - AssertMsg(!pEntryBelow || pEntryBelow->Core.KeyLast < offAligned, - ("Aligned start offset intersects with another cache entry\n")); - AssertMsg(!pEntryAbove || (offAligned + (RTFOFF)cbAligned) <= pEntryAbove->Core.Key, - ("Aligned size intersects with another cache entry\n")); - Assert(cbInEntry <= cbAligned); - AssertMsg( ( offAligned + (RTFOFF)cbAligned <= (RTFOFF)pEndpoint->cbFile - && off + (RTFOFF)cb <= (RTFOFF)pEndpoint->cbFile) - || (offAligned + (RTFOFF)cbAligned <= off + (RTFOFF)cb), - ("Unwanted file size increase\n")); - - if (pEntryBelow) - pdmacFileEpCacheEntryRelease(pEntryBelow); - if (pEntryAbove) - pdmacFileEpCacheEntryRelease(pEntryAbove); - - LogFlow(("offAligned=%RTfoff cbAligned=%u\n", offAligned, cbAligned)); - - *poffAligned = offAligned; - *pcbAligned = cbAligned; - - return cbInEntry; -} - -/** - * Create a new cache entry evicting data from the cache if required. - * - * @returns Pointer to the new cache entry or NULL - * if not enough bytes could be evicted from the cache. - * @param pEndpoint The endpoint. - * @param pEndpointCache The endpoint cache. - * @param off The offset. - * @param cb Number of bytes the cache entry should have. - * @param uAlignment Alignment the size of the entry should have. - * @param pcbData Where to store the number of bytes the new - * entry can hold. May be lower than actually requested - * due to another entry intersecting the access range. - */ -static PPDMACFILECACHEENTRY pdmacFileEpCacheEntryCreate(PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint, - PPDMACFILEENDPOINTCACHE pEndpointCache, - RTFOFF off, size_t cb, - unsigned uAlignment, - size_t *pcbData) -{ - RTFOFF offStart = 0; - size_t cbEntry = 0; - PPDMACFILECACHEENTRY pEntryNew = NULL; - PPDMACFILECACHEGLOBAL pCache = pEndpointCache->pCache; - uint8_t *pbBuffer = NULL; - - *pcbData = pdmacFileEpCacheEntryBoundariesCalc(pEndpoint, - pEndpointCache, - off, cb, - uAlignment, - &offStart, &cbEntry); - - pdmacFileCacheLockEnter(pCache); - bool fEnough = pdmacFileCacheReclaim(pCache, cbEntry, true, &pbBuffer); - - if (fEnough) - { - LogFlow(("Evicted enough bytes (%u requested). Creating new cache entry\n", cbEntry)); - - pEntryNew = pdmacFileCacheEntryAlloc(pCache, pEndpoint, - offStart, cbEntry, - pbBuffer); - if (RT_LIKELY(pEntryNew)) - { - pdmacFileCacheEntryAddToList(&pCache->LruRecentlyUsedIn, pEntryNew); - pdmacFileCacheAdd(pCache, cbEntry); - pdmacFileCacheLockLeave(pCache); - - pdmacFileEpCacheInsertEntry(pEndpointCache, pEntryNew); - - AssertMsg( (off >= pEntryNew->Core.Key) - && (off + (RTFOFF)*pcbData <= pEntryNew->Core.KeyLast + 1), - ("Overflow in calculation off=%RTfoff OffsetAligned=%RTfoff\n", - off, pEntryNew->Core.Key)); - } - else - pdmacFileCacheLockLeave(pCache); - } - else - pdmacFileCacheLockLeave(pCache); - - return pEntryNew; -} - -/** - * Reads the specified data from the endpoint using the cache if possible. - * - * @returns VBox status code. - * @param pEndpoint The endpoint to read from. - * @param pTask The task structure used as identifier for this request. - * @param off The offset to start reading from. - * @param paSegments Pointer to the array holding the destination buffers. - * @param cSegments Number of segments in the array. - * @param cbRead Number of bytes to read. - */ -int pdmacFileEpCacheRead(PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint, PPDMASYNCCOMPLETIONTASKFILE pTask, - RTFOFF off, PCRTSGSEG paSegments, size_t cSegments, - size_t cbRead) -{ - int rc = VINF_SUCCESS; - PPDMACFILEENDPOINTCACHE pEndpointCache = &pEndpoint->DataCache; - PPDMACFILECACHEGLOBAL pCache = pEndpointCache->pCache; - PPDMACFILECACHEENTRY pEntry; - - LogFlowFunc((": pEndpoint=%#p{%s} pTask=%#p off=%RTfoff paSegments=%#p cSegments=%u cbRead=%u\n", - pEndpoint, pEndpoint->Core.pszUri, pTask, off, paSegments, cSegments, cbRead)); - - /* Set to completed to make sure that the task is valid while we access it. */ - ASMAtomicWriteBool(&pTask->fCompleted, true); - - /* Init the I/O memory context */ - PDMIOMEMCTX IoMemCtx; - pdmIoMemCtxInit(&IoMemCtx, paSegments, cSegments); - - while (cbRead) - { - size_t cbToRead; - - pEntry = pdmacFileEpCacheGetCacheEntryByOffset(pEndpointCache, off); - - /* - * If there is no entry we try to create a new one eviciting unused pages - * if the cache is full. If this is not possible we will pass the request through - * and skip the caching (all entries may be still in progress so they can't - * be evicted) - * If we have an entry it can be in one of the LRU lists where the entry - * contains data (recently used or frequently used LRU) so we can just read - * the data we need and put the entry at the head of the frequently used LRU list. - * In case the entry is in one of the ghost lists it doesn't contain any data. - * We have to fetch it again evicting pages from either T1 or T2 to make room. - */ - if (pEntry) - { - RTFOFF OffDiff = off - pEntry->Core.Key; - - AssertMsg(off >= pEntry->Core.Key, - ("Overflow in calculation off=%RTfoff OffsetAligned=%RTfoff\n", - off, pEntry->Core.Key)); - - AssertPtr(pEntry->pList); - - cbToRead = RT_MIN(pEntry->cbData - OffDiff, cbRead); - - AssertMsg(off + (RTFOFF)cbToRead <= pEntry->Core.Key + pEntry->Core.KeyLast + 1, - ("Buffer of cache entry exceeded off=%RTfoff cbToRead=%d\n", - off, cbToRead)); - - cbRead -= cbToRead; - - if (!cbRead) - STAM_COUNTER_INC(&pCache->cHits); - else - STAM_COUNTER_INC(&pCache->cPartialHits); - - STAM_COUNTER_ADD(&pCache->StatRead, cbToRead); - - /* Ghost lists contain no data. */ - if ( (pEntry->pList == &pCache->LruRecentlyUsedIn) - || (pEntry->pList == &pCache->LruFrequentlyUsed)) - { - if (pdmacFileEpCacheEntryFlagIsSetClearAcquireLock(pEndpointCache, pEntry, - PDMACFILECACHE_ENTRY_IO_IN_PROGRESS, - PDMACFILECACHE_ENTRY_IS_DIRTY)) - { - /* Entry didn't completed yet. Append to the list */ - pdmacFileEpCacheEntryWaitersAdd(pEntry, pTask, - &IoMemCtx, - OffDiff, cbToRead, - false /* fWrite */); - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - } - else - { - /* Read as much as we can from the entry. */ - pdmacFileEpCacheCopyToIoMemCtx(&IoMemCtx, pEntry->pbData + OffDiff, cbToRead); - ASMAtomicSubS32(&pTask->cbTransferLeft, cbToRead); - } - - /* Move this entry to the top position */ - if (pEntry->pList == &pCache->LruFrequentlyUsed) - { - pdmacFileCacheLockEnter(pCache); - pdmacFileCacheEntryAddToList(&pCache->LruFrequentlyUsed, pEntry); - pdmacFileCacheLockLeave(pCache); - } - /* Release the entry */ - pdmacFileEpCacheEntryRelease(pEntry); - } - else - { - uint8_t *pbBuffer = NULL; - - LogFlow(("Fetching data for ghost entry %#p from file\n", pEntry)); - - pdmacFileCacheLockEnter(pCache); - pdmacFileCacheEntryRemoveFromList(pEntry); /* Remove it before we remove data, otherwise it may get freed when evicting data. */ - bool fEnough = pdmacFileCacheReclaim(pCache, pEntry->cbData, true, &pbBuffer); - - /* Move the entry to Am and fetch it to the cache. */ - if (fEnough) - { - pdmacFileCacheEntryAddToList(&pCache->LruFrequentlyUsed, pEntry); - pdmacFileCacheAdd(pCache, pEntry->cbData); - pdmacFileCacheLockLeave(pCache); - - if (pbBuffer) - pEntry->pbData = pbBuffer; - else - pEntry->pbData = (uint8_t *)RTMemPageAlloc(pEntry->cbData); - AssertPtr(pEntry->pbData); - - pdmacFileEpCacheEntryWaitersAdd(pEntry, pTask, - &IoMemCtx, - OffDiff, cbToRead, - false /* fWrite */); - pdmacFileCacheReadFromEndpoint(pEntry); - /* Release the entry */ - pdmacFileEpCacheEntryRelease(pEntry); - } - else - { - RTSemRWRequestWrite(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - STAM_PROFILE_ADV_START(&pCache->StatTreeRemove, Cache); - RTAvlrFileOffsetRemove(pEndpointCache->pTree, pEntry->Core.Key); - STAM_PROFILE_ADV_STOP(&pCache->StatTreeRemove, Cache); - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - - pdmacFileCacheLockLeave(pCache); - - RTMemFree(pEntry); - - pdmacFileEpCacheRequestPassthrough(pEndpoint, pTask, - &IoMemCtx, off, cbToRead, - PDMACTASKFILETRANSFER_READ); - } - } - } - else - { -#ifdef VBOX_WITH_IO_READ_CACHE - /* No entry found for this offset. Create a new entry and fetch the data to the cache. */ - PPDMACFILECACHEENTRY pEntryNew = pdmacFileEpCacheEntryCreate(pEndpoint, - pEndpointCache, - off, cbRead, - PAGE_SIZE, - &cbToRead); - - cbRead -= cbToRead; - - if (pEntryNew) - { - if (!cbRead) - STAM_COUNTER_INC(&pCache->cMisses); - else - STAM_COUNTER_INC(&pCache->cPartialHits); - - pdmacFileEpCacheEntryWaitersAdd(pEntryNew, pTask, - &IoMemCtx, - off - pEntryNew->Core.Key, - cbToRead, - false /* fWrite */); - pdmacFileCacheReadFromEndpoint(pEntryNew); - pdmacFileEpCacheEntryRelease(pEntryNew); /* it is protected by the I/O in progress flag now. */ - } - else - { - /* - * There is not enough free space in the cache. - * Pass the request directly to the I/O manager. - */ - LogFlow(("Couldn't evict %u bytes from the cache. Remaining request will be passed through\n", cbToRead)); - - pdmacFileEpCacheRequestPassthrough(pEndpoint, pTask, - &IoMemCtx, off, cbToRead, - PDMACTASKFILETRANSFER_READ); - } -#else - /* Clip read size if necessary. */ - PPDMACFILECACHEENTRY pEntryAbove; - pdmacFileEpCacheGetCacheBestFitEntryByOffset(pEndpointCache, off, - &pEntryAbove, NULL); - - if (pEntryAbove) - { - if (off + (RTFOFF)cbRead > pEntryAbove->Core.Key) - cbToRead = pEntryAbove->Core.Key - off; - else - cbToRead = cbRead; - - pdmacFileEpCacheEntryRelease(pEntryAbove); - } - else - cbToRead = cbRead; - - cbRead -= cbToRead; - pdmacFileEpCacheRequestPassthrough(pEndpoint, pTask, - &IoMemCtx, off, cbToRead, - PDMACTASKFILETRANSFER_READ); -#endif - } - off += cbToRead; - } - - ASMAtomicWriteBool(&pTask->fCompleted, false); - - if (ASMAtomicReadS32(&pTask->cbTransferLeft) == 0 - && !ASMAtomicXchgBool(&pTask->fCompleted, true)) - pdmR3AsyncCompletionCompleteTask(&pTask->Core, VINF_SUCCESS, false); - else - rc = VINF_AIO_TASK_PENDING; - - LogFlowFunc((": Leave rc=%Rrc\n", rc)); - - return rc; -} - -/** - * Writes the given data to the endpoint using the cache if possible. - * - * @returns VBox status code. - * @param pEndpoint The endpoint to write to. - * @param pTask The task structure used as identifier for this request. - * @param off The offset to start writing to - * @param paSegments Pointer to the array holding the source buffers. - * @param cSegments Number of segments in the array. - * @param cbWrite Number of bytes to write. - */ -int pdmacFileEpCacheWrite(PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint, PPDMASYNCCOMPLETIONTASKFILE pTask, - RTFOFF off, PCRTSGSEG paSegments, size_t cSegments, - size_t cbWrite) -{ - int rc = VINF_SUCCESS; - PPDMACFILEENDPOINTCACHE pEndpointCache = &pEndpoint->DataCache; - PPDMACFILECACHEGLOBAL pCache = pEndpointCache->pCache; - PPDMACFILECACHEENTRY pEntry; - - LogFlowFunc((": pEndpoint=%#p{%s} pTask=%#p off=%RTfoff paSegments=%#p cSegments=%u cbWrite=%u\n", - pEndpoint, pEndpoint->Core.pszUri, pTask, off, paSegments, cSegments, cbWrite)); - - /* Set to completed to make sure that the task is valid while we access it. */ - ASMAtomicWriteBool(&pTask->fCompleted, true); - - /* Init the I/O memory context */ - PDMIOMEMCTX IoMemCtx; - pdmIoMemCtxInit(&IoMemCtx, paSegments, cSegments); - - while (cbWrite) - { - size_t cbToWrite; - - pEntry = pdmacFileEpCacheGetCacheEntryByOffset(pEndpointCache, off); - - if (pEntry) - { - /* Write the data into the entry and mark it as dirty */ - AssertPtr(pEntry->pList); - - RTFOFF OffDiff = off - pEntry->Core.Key; - - AssertMsg(off >= pEntry->Core.Key, - ("Overflow in calculation off=%RTfoff OffsetAligned=%RTfoff\n", - off, pEntry->Core.Key)); - - cbToWrite = RT_MIN(pEntry->cbData - OffDiff, cbWrite); - cbWrite -= cbToWrite; - - if (!cbWrite) - STAM_COUNTER_INC(&pCache->cHits); - else - STAM_COUNTER_INC(&pCache->cPartialHits); - - STAM_COUNTER_ADD(&pCache->StatWritten, cbToWrite); - - /* Ghost lists contain no data. */ - if ( (pEntry->pList == &pCache->LruRecentlyUsedIn) - || (pEntry->pList == &pCache->LruFrequentlyUsed)) - { - /* Check if the entry is dirty. */ - if(pdmacFileEpCacheEntryFlagIsSetClearAcquireLock(pEndpointCache, pEntry, - PDMACFILECACHE_ENTRY_IS_DIRTY, - 0)) - { - /* If it is dirty but not in progress just update the data. */ - if (!(pEntry->fFlags & PDMACFILECACHE_ENTRY_IO_IN_PROGRESS)) - { - pdmacFileEpCacheCopyFromIoMemCtx(&IoMemCtx, - pEntry->pbData + OffDiff, - cbToWrite); - ASMAtomicSubS32(&pTask->cbTransferLeft, cbToWrite); - } - else - { - /* The data isn't written to the file yet */ - pdmacFileEpCacheEntryWaitersAdd(pEntry, pTask, - &IoMemCtx, - OffDiff, cbToWrite, - true /* fWrite */); - STAM_COUNTER_INC(&pEndpointCache->StatWriteDeferred); - } - - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - } - else /* Dirty bit not set */ - { - /* - * Check if a read is in progress for this entry. - * We have to defer processing in that case. - */ - if(pdmacFileEpCacheEntryFlagIsSetClearAcquireLock(pEndpointCache, pEntry, - PDMACFILECACHE_ENTRY_IO_IN_PROGRESS, - 0)) - { - pdmacFileEpCacheEntryWaitersAdd(pEntry, pTask, - &IoMemCtx, - OffDiff, cbToWrite, - true /* fWrite */); - STAM_COUNTER_INC(&pEndpointCache->StatWriteDeferred); - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - } - else /* I/O in progress flag not set */ - { - /* Write as much as we can into the entry and update the file. */ - pdmacFileEpCacheCopyFromIoMemCtx(&IoMemCtx, - pEntry->pbData + OffDiff, - cbToWrite); - ASMAtomicSubS32(&pTask->cbTransferLeft, cbToWrite); - - bool fCommit = pdmacFileCacheAddDirtyEntry(pEndpointCache, pEntry); - if (fCommit) - pdmacFileCacheCommitDirtyEntries(pCache); - } - } /* Dirty bit not set */ - - /* Move this entry to the top position */ - if (pEntry->pList == &pCache->LruFrequentlyUsed) - { - pdmacFileCacheLockEnter(pCache); - pdmacFileCacheEntryAddToList(&pCache->LruFrequentlyUsed, pEntry); - pdmacFileCacheLockLeave(pCache); - } - - pdmacFileEpCacheEntryRelease(pEntry); - } - else /* Entry is on the ghost list */ - { - uint8_t *pbBuffer = NULL; - - pdmacFileCacheLockEnter(pCache); - pdmacFileCacheEntryRemoveFromList(pEntry); /* Remove it before we remove data, otherwise it may get freed when evicting data. */ - bool fEnough = pdmacFileCacheReclaim(pCache, pEntry->cbData, true, &pbBuffer); - - if (fEnough) - { - /* Move the entry to Am and fetch it to the cache. */ - pdmacFileCacheEntryAddToList(&pCache->LruFrequentlyUsed, pEntry); - pdmacFileCacheAdd(pCache, pEntry->cbData); - pdmacFileCacheLockLeave(pCache); - - if (pbBuffer) - pEntry->pbData = pbBuffer; - else - pEntry->pbData = (uint8_t *)RTMemPageAlloc(pEntry->cbData); - AssertPtr(pEntry->pbData); - - pdmacFileEpCacheEntryWaitersAdd(pEntry, pTask, - &IoMemCtx, - OffDiff, cbToWrite, - true /* fWrite */); - STAM_COUNTER_INC(&pEndpointCache->StatWriteDeferred); - pdmacFileCacheReadFromEndpoint(pEntry); - - /* Release the reference. If it is still needed the I/O in progress flag should protect it now. */ - pdmacFileEpCacheEntryRelease(pEntry); - } - else - { - RTSemRWRequestWrite(pEndpointCache->SemRWEntries, RT_INDEFINITE_WAIT); - STAM_PROFILE_ADV_START(&pCache->StatTreeRemove, Cache); - RTAvlrFileOffsetRemove(pEndpointCache->pTree, pEntry->Core.Key); - STAM_PROFILE_ADV_STOP(&pCache->StatTreeRemove, Cache); - RTSemRWReleaseWrite(pEndpointCache->SemRWEntries); - - pdmacFileCacheLockLeave(pCache); - - RTMemFree(pEntry); - pdmacFileEpCacheRequestPassthrough(pEndpoint, pTask, - &IoMemCtx, off, cbToWrite, - PDMACTASKFILETRANSFER_WRITE); - } - } - } - else /* No entry found */ - { - /* - * No entry found. Try to create a new cache entry to store the data in and if that fails - * write directly to the file. - */ - PPDMACFILECACHEENTRY pEntryNew = pdmacFileEpCacheEntryCreate(pEndpoint, - pEndpointCache, - off, cbWrite, - 512, - &cbToWrite); - - cbWrite -= cbToWrite; - - if (pEntryNew) - { - RTFOFF offDiff = off - pEntryNew->Core.Key; - - STAM_COUNTER_INC(&pCache->cHits); - - /* - * Check if it is possible to just write the data without waiting - * for it to get fetched first. - */ - if (!offDiff && pEntryNew->cbData == cbToWrite) - { - pdmacFileEpCacheCopyFromIoMemCtx(&IoMemCtx, - pEntryNew->pbData, - cbToWrite); - ASMAtomicSubS32(&pTask->cbTransferLeft, cbToWrite); - - bool fCommit = pdmacFileCacheAddDirtyEntry(pEndpointCache, pEntryNew); - if (fCommit) - pdmacFileCacheCommitDirtyEntries(pCache); - STAM_COUNTER_ADD(&pCache->StatWritten, cbToWrite); - } - else - { - /* Defer the write and fetch the data from the endpoint. */ - pdmacFileEpCacheEntryWaitersAdd(pEntryNew, pTask, - &IoMemCtx, - offDiff, cbToWrite, - true /* fWrite */); - STAM_COUNTER_INC(&pEndpointCache->StatWriteDeferred); - pdmacFileCacheReadFromEndpoint(pEntryNew); - } - - pdmacFileEpCacheEntryRelease(pEntryNew); - } - else - { - /* - * There is not enough free space in the cache. - * Pass the request directly to the I/O manager. - */ - LogFlow(("Couldn't evict %u bytes from the cache. Remaining request will be passed through\n", cbToWrite)); - - STAM_COUNTER_INC(&pCache->cMisses); - - pdmacFileEpCacheRequestPassthrough(pEndpoint, pTask, - &IoMemCtx, off, cbToWrite, - PDMACTASKFILETRANSFER_WRITE); - } - } - - off += cbToWrite; - } - - ASMAtomicWriteBool(&pTask->fCompleted, false); - - if (ASMAtomicReadS32(&pTask->cbTransferLeft) == 0 - && !ASMAtomicXchgBool(&pTask->fCompleted, true)) - pdmR3AsyncCompletionCompleteTask(&pTask->Core, VINF_SUCCESS, false); - else - rc = VINF_AIO_TASK_PENDING; - - LogFlowFunc((": Leave rc=%Rrc\n", rc)); - - return rc; -} - -int pdmacFileEpCacheFlush(PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint) -{ - int rc = VINF_SUCCESS; - - LogFlowFunc((": pEndpoint=%#p{%s}\n", pEndpoint, pEndpoint->Core.pszUri)); - - /* Commit dirty entries in the cache. */ - pdmacFileCacheEndpointCommit(&pEndpoint->DataCache); - - LogFlowFunc((": Leave rc=%Rrc\n", rc)); - return rc; -} - diff --git a/src/VBox/VMM/VMMAll/CPUMAllA.asm b/src/VBox/VMM/VMMAll/CPUMAllA.asm index 4436d8ced..2cbd9c2f5 100644 --- a/src/VBox/VMM/VMMAll/CPUMAllA.asm +++ b/src/VBox/VMM/VMMAll/CPUMAllA.asm @@ -1,4 +1,4 @@ -; $Id: CPUMAllA.asm 30164 2010-06-11 14:16:09Z vboxsync $ +; $Id: CPUMAllA.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; CPUM - Guest Context Assembly Routines. ; @@ -19,12 +19,12 @@ ;* Header Files * ;******************************************************************************* %include "VBox/asmdefs.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/vm.mac" %include "VBox/err.mac" -%include "VBox/stam.mac" +%include "VBox/vmm/stam.mac" %include "CPUMInternal.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" +%include "VBox/vmm/cpum.mac" %ifdef IN_RING3 %error "The jump table doesn't link on leopard." diff --git a/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp b/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp index 37c7acfae..19c0e35ee 100644 --- a/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp +++ b/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp @@ -1,4 +1,4 @@ -/* $Id: CPUMAllRegs.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: CPUMAllRegs.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * CPUM - CPU Monitor(/Manager) - Getters and Setters. */ @@ -20,19 +20,19 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_CPUM -#include <VBox/cpum.h> -#include <VBox/patm.h> -#include <VBox/dbgf.h> -#include <VBox/pdm.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> #include "CPUMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/dis.h> #include <VBox/log.h> -#include <VBox/hwaccm.h> -#include <VBox/tm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/tm.h> #include <iprt/assert.h> #include <iprt/asm.h> #include <iprt/asm-amd64-x86.h> diff --git a/src/VBox/VMM/VMMAll/CPUMStack.cpp b/src/VBox/VMM/VMMAll/CPUMStack.cpp index a4f33379e..12112a228 100644 --- a/src/VBox/VMM/VMMAll/CPUMStack.cpp +++ b/src/VBox/VMM/VMMAll/CPUMStack.cpp @@ -1,4 +1,4 @@ -/* $Id: CPUMStack.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: CPUMStack.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * CPUM - CPU Monitor(/Manager) - Stack manipulation. */ @@ -19,10 +19,10 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/cpum.h> +#include <VBox/vmm/cpum.h> #include "CPUMInternal.h" -#include <VBox/vm.h> -#include <VBox/mm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/mm.h> /** Disable stack frame pointer generation here. */ #if defined(_MSC_VER) && !defined(DEBUG) diff --git a/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp b/src/VBox/VMM/VMMAll/CSAMAll.cpp index 94793ab67..73a10ee1a 100644 --- a/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp +++ b/src/VBox/VMM/VMMAll/CSAMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: CSAMAll.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: CSAMAll.cpp 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * CSAM - Guest OS Code Scanning and Analysis Manager - Any Context */ @@ -20,19 +20,20 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_CSAM -#include <VBox/cpum.h> -#include <VBox/stam.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/mm.h> #include <VBox/sup.h> -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> #include <VBox/param.h> #include <iprt/avl.h> #include "CSAMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/dbg.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMAll/DBGFAll.cpp b/src/VBox/VMM/VMMAll/DBGFAll.cpp index af36068cb..f5742250b 100644 --- a/src/VBox/VMM/VMMAll/DBGFAll.cpp +++ b/src/VBox/VMM/VMMAll/DBGFAll.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFAll.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DBGFAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, All Context Code. */ @@ -20,9 +20,9 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMAll/EMAll.cpp b/src/VBox/VMM/VMMAll/EMAll.cpp index 194539cd7..9a7447e0a 100644 --- a/src/VBox/VMM/VMMAll/EMAll.cpp +++ b/src/VBox/VMM/VMMAll/EMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: EMAll.cpp 31636 2010-08-13 12:03:15Z vboxsync $ */ +/* $Id: EMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * EM - Execution Monitor(/Manager) - All contexts */ @@ -19,26 +19,26 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_EM -#include <VBox/em.h> -#include <VBox/mm.h> -#include <VBox/selm.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/pgm.h> -#include <VBox/iom.h> -#include <VBox/stam.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/stam.h> #include "EMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/hwaccm.h> -#include <VBox/tm.h> -#include <VBox/pdmapi.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/pdmapi.h> #include <VBox/param.h> #include <VBox/err.h> #include <VBox/dis.h> #include <VBox/disopcode.h> #include <VBox/log.h> -#include <include/internal/pgm.h> +#include "internal/pgm.h" #include <iprt/assert.h> #include <iprt/asm.h> #include <iprt/string.h> diff --git a/src/VBox/VMM/VMMAll/FTMAll.cpp b/src/VBox/VMM/VMMAll/FTMAll.cpp index c9b407e70..e90326239 100644 --- a/src/VBox/VMM/VMMAll/FTMAll.cpp +++ b/src/VBox/VMM/VMMAll/FTMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: FTMAll.cpp 32140 2010-08-31 12:47:07Z vboxsync $ */ +/* $Id: FTMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * FTM - Fault Tolerance Manager - All contexts */ @@ -21,8 +21,8 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_FTM #include "FTMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <VBox/param.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMAll/HWACCMAll.cpp b/src/VBox/VMM/VMMAll/HWACCMAll.cpp index d7f26820d..4ba8e5124 100644 --- a/src/VBox/VMM/VMMAll/HWACCMAll.cpp +++ b/src/VBox/VMM/VMMAll/HWACCMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: HWACCMAll.cpp 30327 2010-06-21 12:43:53Z vboxsync $ */ +/* $Id: HWACCMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * HWACCM - All contexts. */ @@ -20,13 +20,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_HWACCM -#include <VBox/hwaccm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/pgm.h> #include "HWACCMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/x86.h> -#include <VBox/hwacc_vmx.h> -#include <VBox/hwacc_svm.h> +#include <VBox/vmm/hwacc_vmx.h> +#include <VBox/vmm/hwacc_svm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/param.h> diff --git a/src/VBox/VMM/VMMAll/IOMAll.cpp b/src/VBox/VMM/VMMAll/IOMAll.cpp index 131631c7f..8a4eff773 100644 --- a/src/VBox/VMM/VMMAll/IOMAll.cpp +++ b/src/VBox/VMM/VMMAll/IOMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: IOMAll.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: IOMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * IOM - Input / Output Monitor - Any Context. */ @@ -19,17 +19,17 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_IOM -#include <VBox/iom.h> -#include <VBox/mm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/mm.h> #include <VBox/param.h> #include "IOMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/selm.h> -#include <VBox/trpm.h> -#include <VBox/pdmdev.h> -#include <VBox/pgm.h> -#include <VBox/cpum.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/pdmdev.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp b/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp index 1d4e44128..5457a8e62 100644 --- a/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp +++ b/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp @@ -1,4 +1,4 @@ -/* $Id: IOMAllMMIO.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: IOMAllMMIO.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * IOM - Input / Output Monitor - Any Context, MMIO & String I/O. */ @@ -20,22 +20,22 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_IOM -#include <VBox/iom.h> -#include <VBox/cpum.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/pgm.h> -#include <VBox/trpm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/trpm.h> #include "IOMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/hwaccm.h> #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/param.h> #include <VBox/err.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMAll/MMAll.cpp b/src/VBox/VMM/VMMAll/MMAll.cpp index 5b26dc845..4620cdbb2 100644 --- a/src/VBox/VMM/VMMAll/MMAll.cpp +++ b/src/VBox/VMM/VMMAll/MMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: MMAll.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: MMAll.cpp 35410 2011-01-05 17:21:11Z vboxsync $ */ /** @file * MM - Memory Manager - Any Context. */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM_HYPER -#include <VBox/mm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vmm.h> #include "MMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/log.h> #include <iprt/assert.h> #include <iprt/string.h> @@ -575,6 +575,7 @@ const char *mmGetTagName(MMTAG enmTag) TAG2STR(DBGF_LINE_DUP); TAG2STR(DBGF_MODULE); TAG2STR(DBGF_OS); + TAG2STR(DBGF_REG); TAG2STR(DBGF_STACK); TAG2STR(DBGF_SYMBOL); TAG2STR(DBGF_SYMBOL_DUP); diff --git a/src/VBox/VMM/VMMAll/MMAllHyper.cpp b/src/VBox/VMM/VMMAll/MMAllHyper.cpp index f9a5016ee..52010a2e9 100644 --- a/src/VBox/VMM/VMMAll/MMAllHyper.cpp +++ b/src/VBox/VMM/VMMAll/MMAllHyper.cpp @@ -1,4 +1,4 @@ -/* $Id: MMAllHyper.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: MMAllHyper.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM - Memory Manager - Hypervisor Memory Area, All Contexts. */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM_HYPER_HEAP -#include <VBox/mm.h> -#include <VBox/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> #include "MMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/VMMAll/MMAllPagePool.cpp b/src/VBox/VMM/VMMAll/MMAllPagePool.cpp index 31e735571..4357f7d28 100644 --- a/src/VBox/VMM/VMMAll/MMAllPagePool.cpp +++ b/src/VBox/VMM/VMMAll/MMAllPagePool.cpp @@ -1,4 +1,4 @@ -/* $Id: MMAllPagePool.cpp 32036 2010-08-27 10:14:39Z vboxsync $ */ +/* $Id: MMAllPagePool.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM - Memory Manager - Page Pool. * @@ -21,11 +21,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM_POOL -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/stam.h> #include "MMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/param.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp b/src/VBox/VMM/VMMAll/PATMAll.cpp index 44a9c6c8b..1e975f11e 100644 --- a/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp +++ b/src/VBox/VMM/VMMAll/PATMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: PATMAll.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PATMAll.cpp 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * PATM - The Patch Manager, all contexts. */ @@ -19,17 +19,17 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PATM -#include <VBox/patm.h> -#include <VBox/cpum.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/cpum.h> #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <VBox/em.h> +#include <VBox/vmm/em.h> #include <VBox/err.h> -#include <VBox/selm.h> -#include <VBox/mm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/mm.h> #include "PATMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include "PATMA.h" #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMAll/PDMAll.cpp b/src/VBox/VMM/VMMAll/PDMAll.cpp index a3bc320fd..9bab858d8 100644 --- a/src/VBox/VMM/VMMAll/PDMAll.cpp +++ b/src/VBox/VMM/VMMAll/PDMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMAll.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PDMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Critical Sections */ @@ -21,9 +21,9 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/vm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp b/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp index 3138040a6..6d6020228 100644 --- a/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp +++ b/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMAllCritSect.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PDMAllCritSect.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Critical Sections, All Contexts. */ @@ -20,13 +20,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM//_CRITSECT -#include "../PDMInternal.h" -#include <VBox/pdmcritsect.h> -#include <VBox/mm.h> -#include <VBox/vmm.h> -#include <VBox/vm.h> +#include "PDMInternal.h" +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/hwaccm.h> #include <VBox/log.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/VMMAll/PDMAllQueue.cpp b/src/VBox/VMM/VMMAll/PDMAllQueue.cpp index 1055c7459..824f54ce3 100644 --- a/src/VBox/VMM/VMMAll/PDMAllQueue.cpp +++ b/src/VBox/VMM/VMMAll/PDMAllQueue.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMAllQueue.cpp 30111 2010-06-09 12:14:59Z vboxsync $ */ +/* $Id: PDMAllQueue.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Queue - Transport data and tasks to EMT and R3. */ @@ -21,12 +21,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_QUEUE #include "PDMInternal.h" -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #ifndef IN_RC -# include <VBox/rem.h> -# include <VBox/mm.h> +# include <VBox/vmm/rem.h> +# include <VBox/vmm/mm.h> #endif -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/VMMAll/PGMAll.cpp b/src/VBox/VMM/VMMAll/PGMAll.cpp index 13c6d5b72..7cdec41e3 100644 --- a/src/VBox/VMM/VMMAll/PGMAll.cpp +++ b/src/VBox/VMM/VMMAll/PGMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMAll.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor - All context code. */ @@ -19,23 +19,23 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/pgm.h> -#include <VBox/cpum.h> -#include <VBox/selm.h> -#include <VBox/iom.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/iom.h> #include <VBox/sup.h> -#include <VBox/mm.h> -#include <VBox/stam.h> -#include <VBox/csam.h> -#include <VBox/patm.h> -#include <VBox/trpm.h> -#include <VBox/rem.h> -#include <VBox/em.h> -#include <VBox/hwaccm.h> -#include <VBox/hwacc_vmx.h> -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/hwacc_vmx.h> +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <iprt/assert.h> #include <iprt/asm-amd64-x86.h> #include <iprt/string.h> diff --git a/src/VBox/VMM/VMMAll/PGMAllBth.h b/src/VBox/VMM/VMMAll/PGMAllBth.h index 4677efa82..25b456de7 100644 --- a/src/VBox/VMM/VMMAll/PGMAllBth.h +++ b/src/VBox/VMM/VMMAll/PGMAllBth.h @@ -1,4 +1,4 @@ -/* $Id: PGMAllBth.h 33795 2010-11-05 15:59:18Z vboxsync $ */ +/* $Id: PGMAllBth.h 35537 2011-01-13 15:14:20Z vboxsync $ */ /** @file * VBox - Page Manager, Shadow+Guest Paging Template - All context code. * @@ -3778,13 +3778,13 @@ PGM_BTH_DECL(unsigned, AssertCR3)(PVMCPU pVCpu, uint64_t cr3, uint64_t cr4, RTGC PPGMPOOLPAGE pShwPde = NULL; PX86PDPE pPdpeDst; RTGCPHYS GCPhysPdeSrc; -# if PGM_GST_TYPE == PGM_TYPE_PAE X86PDPE PdpeSrc; + PdpeSrc.u = 0; /* initialized to shut up gcc 4.5 */ +# if PGM_GST_TYPE == PGM_TYPE_PAE PGSTPD pPDSrc = pgmGstGetPaePDPtr(pVCpu, GCPtr, &iPDSrc, &PdpeSrc); PX86PDPT pPdptDst = pgmShwGetPaePDPTPtr(pVCpu); # else PX86PML4E pPml4eSrcIgn; - X86PDPE PdpeSrc; PX86PDPT pPdptDst; PX86PDPAE pPDDst; PGSTPD pPDSrc = pgmGstGetLongModePDPtr(pVCpu, GCPtr, &pPml4eSrcIgn, &PdpeSrc, &iPDSrc); diff --git a/src/VBox/VMM/VMMAll/PGMAllHandler.cpp b/src/VBox/VMM/VMMAll/PGMAllHandler.cpp index 320c7f363..8787d4e9f 100644 --- a/src/VBox/VMM/VMMAll/PGMAllHandler.cpp +++ b/src/VBox/VMM/VMMAll/PGMAllHandler.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMAllHandler.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMAllHandler.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager / Monitor, Access Handlers. */ @@ -20,18 +20,18 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/iom.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/stam.h> -#include <VBox/rem.h> -#include <VBox/dbgf.h> -#include <VBox/rem.h> -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/rem.h> +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <VBox/log.h> #include <iprt/assert.h> @@ -39,7 +39,7 @@ #include <iprt/string.h> #include <VBox/param.h> #include <VBox/err.h> -#include <VBox/selm.h> +#include <VBox/vmm/selm.h> /******************************************************************************* diff --git a/src/VBox/VMM/VMMAll/PGMAllMap.cpp b/src/VBox/VMM/VMMAll/PGMAllMap.cpp index 26d9aa34d..4e53f9b01 100644 --- a/src/VBox/VMM/VMMAll/PGMAllMap.cpp +++ b/src/VBox/VMM/VMMAll/PGMAllMap.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMAllMap.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMAllMap.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor - All context code. */ @@ -19,10 +19,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/pgm.h> -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include <VBox/vmm/pgm.h> +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <VBox/err.h> #include <iprt/asm-amd64-x86.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMAll/PGMAllPhys.cpp b/src/VBox/VMM/VMMAll/PGMAllPhys.cpp index 68ea3ff86..8b481c761 100644 --- a/src/VBox/VMM/VMMAll/PGMAllPhys.cpp +++ b/src/VBox/VMM/VMMAll/PGMAllPhys.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMAllPhys.cpp 33771 2010-11-04 14:56:18Z vboxsync $ */ +/* $Id: PGMAllPhys.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor, Physical Memory Addressing. */ @@ -19,15 +19,15 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM_PHYS -#include <VBox/pgm.h> -#include <VBox/trpm.h> -#include <VBox/vmm.h> -#include <VBox/iom.h> -#include <VBox/em.h> -#include <VBox/rem.h> -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/rem.h> +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <VBox/param.h> #include <VBox/err.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMAll/PGMAllPool.cpp b/src/VBox/VMM/VMMAll/PGMAllPool.cpp index 4fff50bc2..7a2b176d9 100644 --- a/src/VBox/VMM/VMMAll/PGMAllPool.cpp +++ b/src/VBox/VMM/VMMAll/PGMAllPool.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMAllPool.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMAllPool.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM Shadow Page Pool. */ @@ -20,18 +20,18 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM_POOL -#include <VBox/pgm.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/cpum.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/cpum.h> #ifdef IN_RC -# include <VBox/patm.h> +# include <VBox/vmm/patm.h> #endif -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <VBox/disopcode.h> -#include <VBox/hwacc_vmx.h> +#include <VBox/vmm/hwacc_vmx.h> #include <VBox/log.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/VMMAll/REMAll.cpp b/src/VBox/VMM/VMMAll/REMAll.cpp index d2b29688e..c985a2d26 100644 --- a/src/VBox/VMM/VMMAll/REMAll.cpp +++ b/src/VBox/VMM/VMMAll/REMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: REMAll.cpp 29250 2010-05-09 17:53:58Z vboxsync $ */ +/* $Id: REMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * REM - Recompiled Execution Monitor, all Contexts part. */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_REM -#include <VBox/rem.h> -#include <VBox/em.h> -#include <VBox/vmm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/vmm.h> #include "REMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMAll/SELMAll.cpp b/src/VBox/VMM/VMMAll/SELMAll.cpp index 1526d5a4b..239454584 100644 --- a/src/VBox/VMM/VMMAll/SELMAll.cpp +++ b/src/VBox/VMM/VMMAll/SELMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: SELMAll.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: SELMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * SELM All contexts. */ @@ -20,18 +20,18 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_SELM -#include <VBox/selm.h> -#include <VBox/stam.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> #include "SELMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/x86.h> #include <VBox/err.h> #include <VBox/param.h> #include <iprt/assert.h> #include <VBox/log.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> diff --git a/src/VBox/VMM/VMMAll/TMAll.cpp b/src/VBox/VMM/VMMAll/TMAll.cpp index 812e729ac..b48e1b902 100644 --- a/src/VBox/VMM/VMMAll/TMAll.cpp +++ b/src/VBox/VMM/VMMAll/TMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: TMAll.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: TMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TM - Timeout Manager, all contexts. */ @@ -20,13 +20,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TM -#include <VBox/tm.h> -#include <VBox/mm.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/mm.h> #ifdef IN_RING3 -# include <VBox/rem.h> +# include <VBox/vmm/rem.h> #endif #include "TMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/VMMAll/TMAllCpu.cpp b/src/VBox/VMM/VMMAll/TMAllCpu.cpp index 6cdb7ceb6..69c3fa64c 100644 --- a/src/VBox/VMM/VMMAll/TMAllCpu.cpp +++ b/src/VBox/VMM/VMMAll/TMAllCpu.cpp @@ -1,4 +1,4 @@ -/* $Id: TMAllCpu.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: TMAllCpu.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TM - Timeout Manager, CPU Time, All Contexts. */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TM -#include <VBox/tm.h> +#include <VBox/vmm/tm.h> #include <iprt/asm-amd64-x86.h> /* for SUPGetCpuHzFromGIP */ -#include "../TMInternal.h" -#include <VBox/vm.h> +#include "TMInternal.h" +#include <VBox/vmm/vm.h> #include <VBox/sup.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/VMMAll/TMAllReal.cpp b/src/VBox/VMM/VMMAll/TMAllReal.cpp index 4eafa64eb..bb3412982 100644 --- a/src/VBox/VMM/VMMAll/TMAllReal.cpp +++ b/src/VBox/VMM/VMMAll/TMAllReal.cpp @@ -1,4 +1,4 @@ -/* $Id: TMAllReal.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: TMAllReal.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TM - Timeout Manager, Real Time, All Contexts. */ @@ -20,9 +20,9 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TM -#include <VBox/tm.h> +#include <VBox/vmm/tm.h> #include "TMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <iprt/time.h> diff --git a/src/VBox/VMM/VMMAll/TMAllVirtual.cpp b/src/VBox/VMM/VMMAll/TMAllVirtual.cpp index 32ffceca6..64a305a9e 100644 --- a/src/VBox/VMM/VMMAll/TMAllVirtual.cpp +++ b/src/VBox/VMM/VMMAll/TMAllVirtual.cpp @@ -1,4 +1,4 @@ -/* $Id: TMAllVirtual.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: TMAllVirtual.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TM - Timeout Manager, Virtual Time, All Contexts. */ @@ -20,14 +20,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TM -#include <VBox/tm.h> +#include <VBox/vmm/tm.h> #ifdef IN_RING3 -# include <VBox/rem.h> +# include <VBox/vmm/rem.h> # include <iprt/thread.h> #endif #include "TMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <VBox/log.h> #include <VBox/sup.h> diff --git a/src/VBox/VMM/VMMAll/TRPMAll.cpp b/src/VBox/VMM/VMMAll/TRPMAll.cpp index 577faea3d..d1f464d3e 100644 --- a/src/VBox/VMM/VMMAll/TRPMAll.cpp +++ b/src/VBox/VMM/VMMAll/TRPMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: TRPMAll.cpp 31402 2010-08-05 12:28:18Z vboxsync $ */ +/* $Id: TRPMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TRPM - Trap Monitor - Any Context. */ @@ -20,23 +20,23 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TRPM -#include <VBox/trpm.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> -#include <VBox/patm.h> -#include <VBox/selm.h> -#include <VBox/stam.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/stam.h> #include "TRPMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/x86.h> -#include <VBox/em.h> +#include <VBox/vmm/em.h> #include <VBox/log.h> #include <iprt/assert.h> #include <iprt/asm.h> #include <iprt/asm-amd64-x86.h> #include <iprt/param.h> -#include <include/internal/pgm.h> +#include "internal/pgm.h" diff --git a/src/VBox/VMM/VMMAll/VMAll.cpp b/src/VBox/VMM/VMMAll/VMAll.cpp index 748223e52..272b819af 100644 --- a/src/VBox/VMM/VMMAll/VMAll.cpp +++ b/src/VBox/VMM/VMMAll/VMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: VMAll.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VM - Virtual Machine All Contexts. */ @@ -21,9 +21,9 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VM #include "VMInternal.h" -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMAll/VMMAll.cpp b/src/VBox/VMM/VMMAll/VMMAll.cpp index 57f381024..65e839cc1 100644 --- a/src/VBox/VMM/VMMAll/VMMAll.cpp +++ b/src/VBox/VMM/VMMAll/VMMAll.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMAll.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMMAll.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM All Contexts. */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VMM -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include "VMMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/param.h> #include <iprt/thread.h> #include <iprt/mp.h> diff --git a/src/VBox/VMM/VMMR0/CPUMR0.cpp b/src/VBox/VMM/VMMR0/CPUMR0.cpp index 004e00c50..f36cf6bfd 100644 --- a/src/VBox/VMM/VMMR0/CPUMR0.cpp +++ b/src/VBox/VMM/VMMR0/CPUMR0.cpp @@ -1,4 +1,4 @@ -/* $Id: CPUMR0.cpp 33938 2010-11-10 15:50:41Z vboxsync $ */ +/* $Id: CPUMR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * CPUM - Host Context Ring 0. */ @@ -20,13 +20,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_CPUM -#include <VBox/cpum.h> +#include <VBox/vmm/cpum.h> #include "CPUMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/x86.h> #include <VBox/err.h> #include <VBox/log.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/hwaccm.h> #include <iprt/assert.h> #include <iprt/asm-amd64-x86.h> #ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI diff --git a/src/VBox/VMM/VMMR0/CPUMR0A.asm b/src/VBox/VMM/VMMR0/CPUMR0A.asm index d6e5be385..7054f6863 100644 --- a/src/VBox/VMM/VMMR0/CPUMR0A.asm +++ b/src/VBox/VMM/VMMR0/CPUMR0A.asm @@ -1,4 +1,4 @@ -; $Id: CPUMR0A.asm 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: CPUMR0A.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; CPUM - Guest Context Assembly Routines. ; @@ -19,12 +19,12 @@ ;* Header Files * ;******************************************************************************* %include "VBox/asmdefs.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/vm.mac" %include "VBox/err.mac" -%include "VBox/stam.mac" +%include "VBox/vmm/stam.mac" %include "CPUMInternal.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" +%include "VBox/vmm/cpum.mac" %ifdef IN_RING3 %error "The jump table doesn't link on leopard." diff --git a/src/VBox/VMM/VMMR0/CPUMR0UnusedA.asm b/src/VBox/VMM/VMMR0/CPUMR0UnusedA.asm index fe39bf901..79342a822 100644 --- a/src/VBox/VMM/VMMR0/CPUMR0UnusedA.asm +++ b/src/VBox/VMM/VMMR0/CPUMR0UnusedA.asm @@ -1,4 +1,4 @@ -; $Id: CPUMR0UnusedA.asm 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: CPUMR0UnusedA.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; CPUM - Guest Context Assembly Routines. ; @@ -19,12 +19,12 @@ ;* Header Files * ;******************************************************************************* %include "VBox/asmdefs.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/vm.mac" %include "VBox/err.mac" -%include "VBox/stam.mac" +%include "VBox/vmm/stam.mac" %include "CPUMInternal.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" +%include "VBox/vmm/cpum.mac" %ifdef IN_RING3 %error "The jump table doesn't link on leopard." diff --git a/src/VBox/VMM/VMMR0/GMMR0.cpp b/src/VBox/VMM/VMMR0/GMMR0.cpp index 8ff9c09e2..fb3b3c1a3 100644 --- a/src/VBox/VMM/VMMR0/GMMR0.cpp +++ b/src/VBox/VMM/VMMR0/GMMR0.cpp @@ -1,4 +1,4 @@ -/* $Id: GMMR0.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: GMMR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * GMM - Global Memory Manager. */ @@ -150,11 +150,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_GMM -#include <VBox/vm.h> -#include <VBox/gmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/gmm.h> #include "GMMR0Internal.h" -#include <VBox/gvm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/gvm.h> +#include <VBox/vmm/pgm.h> #include <VBox/log.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/VMMR0/GMMR0Internal.h b/src/VBox/VMM/VMMR0/GMMR0Internal.h index 8f9451079..dbbd0af32 100644 --- a/src/VBox/VMM/VMMR0/GMMR0Internal.h +++ b/src/VBox/VMM/VMMR0/GMMR0Internal.h @@ -1,4 +1,4 @@ -/* $Id: GMMR0Internal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: GMMR0Internal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * GMM - The Global Memory Manager, Internal Header. */ @@ -18,7 +18,7 @@ #ifndef ___GMMR0Internal_h #define ___GMMR0Internal_h -#include <VBox/gmm.h> +#include <VBox/vmm/gmm.h> #include <iprt/avl.h> /** diff --git a/src/VBox/VMM/VMMR0/GVMMR0.cpp b/src/VBox/VMM/VMMR0/GVMMR0.cpp index 4dbc7e3bf..ce7973d93 100644 --- a/src/VBox/VMM/VMMR0/GVMMR0.cpp +++ b/src/VBox/VMM/VMMR0/GVMMR0.cpp @@ -1,4 +1,4 @@ -/* $Id: GVMMR0.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: GVMMR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * GVMM - Global VM Manager. */ @@ -50,12 +50,12 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_GVMM -#include <VBox/gvmm.h> -#include <VBox/gmm.h> +#include <VBox/vmm/gvmm.h> +#include <VBox/vmm/gmm.h> #include "GVMMR0Internal.h" -#include <VBox/gvm.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/gvm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/param.h> #include <VBox/err.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/VMMR0/HWACCMR0.cpp b/src/VBox/VMM/VMMR0/HWACCMR0.cpp index a38d725e7..f17c1b2b6 100644 --- a/src/VBox/VMM/VMMR0/HWACCMR0.cpp +++ b/src/VBox/VMM/VMMR0/HWACCMR0.cpp @@ -1,4 +1,4 @@ -/* $Id: HWACCMR0.cpp 34184 2010-11-18 21:19:11Z vboxsync $ */ +/* $Id: HWACCMR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * HWACCM - Host Context Ring 0. */ @@ -20,13 +20,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_HWACCM -#include <VBox/hwaccm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/pgm.h> #include "HWACCMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/x86.h> -#include <VBox/hwacc_vmx.h> -#include <VBox/hwacc_svm.h> +#include <VBox/vmm/hwacc_vmx.h> +#include <VBox/vmm/hwacc_svm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMR0/HWACCMR0A.asm b/src/VBox/VMM/VMMR0/HWACCMR0A.asm index 219ee9229..9c1f55ab6 100644 --- a/src/VBox/VMM/VMMR0/HWACCMR0A.asm +++ b/src/VBox/VMM/VMMR0/HWACCMR0A.asm @@ -1,4 +1,4 @@ -; $Id: HWACCMR0A.asm 33540 2010-10-28 09:27:05Z vboxsync $ +; $Id: HWACCMR0A.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; VMXM - R0 vmx helpers ; @@ -20,10 +20,10 @@ ;******************************************************************************* %include "VBox/asmdefs.mac" %include "VBox/err.mac" -%include "VBox/hwacc_vmx.mac" -%include "VBox/cpum.mac" +%include "VBox/vmm/hwacc_vmx.mac" +%include "VBox/vmm/cpum.mac" %include "VBox/x86.mac" -%include "../HWACCMInternal.mac" +%include "HWACCMInternal.mac" %ifdef RT_OS_OS2 ;; @todo fix OMF support in yasm and kick nasm out completely. %macro vmwrite 2, diff --git a/src/VBox/VMM/VMMR0/HWSVMR0.cpp b/src/VBox/VMM/VMMR0/HWSVMR0.cpp index afb7b8633..503a0eec5 100644 --- a/src/VBox/VMM/VMMR0/HWSVMR0.cpp +++ b/src/VBox/VMM/VMMR0/HWSVMR0.cpp @@ -1,4 +1,4 @@ -/* $Id: HWSVMR0.cpp 32847 2010-09-30 14:18:37Z vboxsync $ */ +/* $Id: HWSVMR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * HWACCM SVM - Host Context Ring 0. */ @@ -19,17 +19,17 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_HWACCM -#include <VBox/hwaccm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/iom.h> -#include <VBox/dbgf.h> -#include <VBox/tm.h> -#include <VBox/pdmapi.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/pdmapi.h> #include "HWACCMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/x86.h> -#include <VBox/hwacc_svm.h> +#include <VBox/vmm/hwacc_svm.h> #include <VBox/err.h> #include <VBox/log.h> #include <VBox/dis.h> diff --git a/src/VBox/VMM/VMMR0/HWSVMR0.h b/src/VBox/VMM/VMMR0/HWSVMR0.h index f662d37f6..d61a3228a 100644 --- a/src/VBox/VMM/VMMR0/HWSVMR0.h +++ b/src/VBox/VMM/VMMR0/HWSVMR0.h @@ -1,4 +1,4 @@ -/* $Id: HWSVMR0.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: HWSVMR0.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * HWACCM AMD-V - Internal header file. */ @@ -20,12 +20,12 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/em.h> -#include <VBox/stam.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/stam.h> #include <VBox/dis.h> -#include <VBox/hwaccm.h> -#include <VBox/pgm.h> -#include <VBox/hwacc_svm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/hwacc_svm.h> RT_C_DECLS_BEGIN diff --git a/src/VBox/VMM/VMMR0/HWVMXR0.cpp b/src/VBox/VMM/VMMR0/HWVMXR0.cpp index 673b0315b..58c2a0c1c 100644 --- a/src/VBox/VMM/VMMR0/HWVMXR0.cpp +++ b/src/VBox/VMM/VMMR0/HWVMXR0.cpp @@ -1,4 +1,4 @@ -/* $Id: HWVMXR0.cpp 35023 2010-12-13 15:25:51Z vboxsync $ */ +/* $Id: HWVMXR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * HWACCM VMX - Host Context Ring 0. */ @@ -21,17 +21,17 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_HWACCM #include <iprt/asm-amd64-x86.h> -#include <VBox/hwaccm.h> -#include <VBox/pgm.h> -#include <VBox/dbgf.h> -#include <VBox/selm.h> -#include <VBox/iom.h> -#include <VBox/rem.h> -#include <VBox/tm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/tm.h> #include "HWACCMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/x86.h> -#include <VBox/pdmapi.h> +#include <VBox/vmm/pdmapi.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMR0/HWVMXR0.h b/src/VBox/VMM/VMMR0/HWVMXR0.h index f3993ef2c..129e0dcd8 100644 --- a/src/VBox/VMM/VMMR0/HWVMXR0.h +++ b/src/VBox/VMM/VMMR0/HWVMXR0.h @@ -1,4 +1,4 @@ -/* $Id: HWVMXR0.h 34998 2010-12-13 12:53:16Z vboxsync $ */ +/* $Id: HWVMXR0.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * HWACCM VT-x - Internal header file. */ @@ -20,12 +20,12 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/em.h> -#include <VBox/stam.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/stam.h> #include <VBox/dis.h> -#include <VBox/hwaccm.h> -#include <VBox/pgm.h> -#include <VBox/hwacc_vmx.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/hwacc_vmx.h> RT_C_DECLS_BEGIN diff --git a/src/VBox/VMM/VMMR0/PDMR0Device.cpp b/src/VBox/VMM/VMMR0/PDMR0Device.cpp index 8fd337d0c..e704c40cc 100644 --- a/src/VBox/VMM/VMMR0/PDMR0Device.cpp +++ b/src/VBox/VMM/VMMR0/PDMR0Device.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMR0Device.cpp 33799 2010-11-05 16:14:07Z vboxsync $ */ +/* $Id: PDMR0Device.cpp 35358 2010-12-28 07:58:40Z vboxsync $ */ /** @file * PDM - Pluggable Device and Driver Manager, R0 Device parts. */ @@ -21,17 +21,17 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_DEVICE #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/patm.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/hwaccm.h> #include <VBox/log.h> #include <VBox/err.h> -#include <VBox/gvmm.h> +#include <VBox/vmm/gvmm.h> #include <iprt/asm.h> #include <iprt/assert.h> #include <iprt/string.h> diff --git a/src/VBox/VMM/VMMR0/PDMR0Driver.cpp b/src/VBox/VMM/VMMR0/PDMR0Driver.cpp index 388dad723..8d0e704a7 100644 --- a/src/VBox/VMM/VMMR0/PDMR0Driver.cpp +++ b/src/VBox/VMM/VMMR0/PDMR0Driver.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMR0Driver.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: PDMR0Driver.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Pluggable Device and Driver Manager, R0 Driver parts. */ @@ -20,8 +20,8 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_DRIVER #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/vm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/vm.h> #include <VBox/log.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/VMMR0/PGMR0.cpp b/src/VBox/VMM/VMMR0/PGMR0.cpp index 28c1289f0..31f088080 100644 --- a/src/VBox/VMM/VMMR0/PGMR0.cpp +++ b/src/VBox/VMM/VMMR0/PGMR0.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMR0.cpp 32431 2010-09-11 18:02:17Z vboxsync $ */ +/* $Id: PGMR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor, Ring-0. */ @@ -19,11 +19,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/pgm.h> -#include <VBox/gmm.h> -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/gmm.h> +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <VBox/log.h> #include <VBox/err.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp b/src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp index 77c0f34f8..e80cd63e2 100644 --- a/src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp +++ b/src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMR0SharedPage.cpp 31441 2010-08-06 14:13:01Z vboxsync $ */ +/* $Id: PGMR0SharedPage.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor, Page Sharing, Ring-0. */ @@ -19,11 +19,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM_SHARED -#include <VBox/pgm.h> -#include <VBox/gmm.h> -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/gmm.h> +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <VBox/log.h> #include <VBox/err.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMR0/TRPMR0.cpp b/src/VBox/VMM/VMMR0/TRPMR0.cpp index 78bf84a46..c3b5e7a74 100644 --- a/src/VBox/VMM/VMMR0/TRPMR0.cpp +++ b/src/VBox/VMM/VMMR0/TRPMR0.cpp @@ -1,4 +1,4 @@ -/* $Id: TRPMR0.cpp 34020 2010-11-12 09:12:09Z vboxsync $ */ +/* $Id: TRPMR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TRPM - The Trap Monitor - HC Ring 0 */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TRPM -#include <VBox/trpm.h> +#include <VBox/vmm/trpm.h> #include "TRPMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMR0/VMMR0.cpp b/src/VBox/VMM/VMMR0/VMMR0.cpp index b57dd0b05..84394bc9a 100644 --- a/src/VBox/VMM/VMMR0/VMMR0.cpp +++ b/src/VBox/VMM/VMMR0/VMMR0.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMR0.cpp 35298 2010-12-22 12:35:46Z vboxsync $ */ +/* $Id: VMMR0.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - Host Context Ring 0. */ @@ -19,21 +19,21 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VMM -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include <VBox/sup.h> -#include <VBox/trpm.h> -#include <VBox/cpum.h> -#include <VBox/pdmapi.h> -#include <VBox/pgm.h> -#include <VBox/stam.h> -#include <VBox/tm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/tm.h> #include "VMMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> -#include <VBox/gvmm.h> -#include <VBox/gmm.h> +#include <VBox/vmm/gvmm.h> +#include <VBox/vmm/gmm.h> #include <VBox/intnet.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/hwaccm.h> #include <VBox/param.h> #include <VBox/err.h> #include <VBox/version.h> diff --git a/src/VBox/VMM/VMMR0/VMMR0JmpA-amd64.asm b/src/VBox/VMM/VMMR0/VMMR0JmpA-amd64.asm index 377fec3ff..2426b2ffa 100644 --- a/src/VBox/VMM/VMMR0/VMMR0JmpA-amd64.asm +++ b/src/VBox/VMM/VMMR0/VMMR0JmpA-amd64.asm @@ -1,4 +1,4 @@ -; $Id: VMMR0JmpA-amd64.asm 33540 2010-10-28 09:27:05Z vboxsync $ +; $Id: VMMR0JmpA-amd64.asm 35333 2010-12-27 12:10:56Z vboxsync $ ;; @file ; VMM - R0 SetJmp / LongJmp routines for AMD64. ; @@ -19,7 +19,7 @@ ;* Header Files * ;******************************************************************************* %include "VBox/asmdefs.mac" -%include "../VMMInternal.mac" +%include "VMMInternal.mac" %include "iprt/err.mac" %include "VBox/param.mac" diff --git a/src/VBox/VMM/VMMR0/VMMR0JmpA-x86.asm b/src/VBox/VMM/VMMR0/VMMR0JmpA-x86.asm index e818a8ae6..1e263d8ba 100644 --- a/src/VBox/VMM/VMMR0/VMMR0JmpA-x86.asm +++ b/src/VBox/VMM/VMMR0/VMMR0JmpA-x86.asm @@ -1,4 +1,4 @@ -; $Id: VMMR0JmpA-x86.asm 33540 2010-10-28 09:27:05Z vboxsync $ +; $Id: VMMR0JmpA-x86.asm 35334 2010-12-27 12:27:46Z vboxsync $ ;; @file ; VMM - R0 SetJmp / LongJmp routines for X86. ; @@ -19,7 +19,7 @@ ;* Header Files * ;******************************************************************************* %include "VBox/asmdefs.mac" -%include "../VMMInternal.mac" +%include "VMMInternal.mac" %include "iprt/err.mac" %include "VBox/param.mac" diff --git a/src/VBox/VMM/CFGM.cpp b/src/VBox/VMM/VMMR3/CFGM.cpp index c56f8f5f3..a3e987e13 100644 --- a/src/VBox/VMM/CFGM.cpp +++ b/src/VBox/VMM/VMMR3/CFGM.cpp @@ -1,4 +1,4 @@ -/* $Id: CFGM.cpp 34240 2010-11-22 14:24:49Z vboxsync $ */ +/* $Id: CFGM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * CFGM - Configuration Manager. */ @@ -55,11 +55,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_CFGM -#include <VBox/cfgm.h> -#include <VBox/dbgf.h> -#include <VBox/mm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/mm.h> #include "CFGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/CPUM.cpp b/src/VBox/VMM/VMMR3/CPUM.cpp index 3b5e49685..6f241f29e 100644 --- a/src/VBox/VMM/CPUM.cpp +++ b/src/VBox/VMM/VMMR3/CPUM.cpp @@ -1,4 +1,4 @@ -/* $Id: CPUM.cpp 34328 2010-11-24 14:33:57Z vboxsync $ */ +/* $Id: CPUM.cpp 35490 2011-01-11 15:17:10Z vboxsync $ */ /** @file * CPUM - CPU Monitor / Manager. */ @@ -35,17 +35,17 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_CPUM -#include <VBox/cpum.h> -#include <VBox/cpumdis.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> -#include <VBox/selm.h> -#include <VBox/dbgf.h> -#include <VBox/patm.h> -#include <VBox/hwaccm.h> -#include <VBox/ssm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/cpumdis.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/ssm.h> #include "CPUMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/param.h> #include <VBox/dis.h> @@ -56,7 +56,8 @@ #include <iprt/string.h> #include <iprt/mp.h> #include <iprt/cpuset.h> -#include <include/internal/pgm.h> +#include "internal/pgm.h" + /******************************************************************************* * Defined Constants And Macros * @@ -218,7 +219,7 @@ VMMR3DECL(int) CPUMR3Init(PVM pVM) return rc; /* - * Register info handlers. + * Register info handlers and registers with the debugger facility. */ DBGFR3InfoRegisterInternal(pVM, "cpum", "Displays the all the cpu states.", &cpumR3InfoAll); DBGFR3InfoRegisterInternal(pVM, "cpumguest", "Displays the guest cpu state.", &cpumR3InfoGuest); @@ -227,6 +228,10 @@ VMMR3DECL(int) CPUMR3Init(PVM pVM) DBGFR3InfoRegisterInternal(pVM, "cpuid", "Displays the guest cpuid leaves.", &cpumR3CpuIdInfo); DBGFR3InfoRegisterInternal(pVM, "cpumguestinstr", "Displays the current guest instruction.", &cpumR3InfoGuestInstr); + rc = cpumR3DbgInit(pVM); + if (RT_FAILURE(rc)) + return rc; + /* * Initialize the Guest CPUID state. */ diff --git a/src/VBox/VMM/VMMR3/CPUMDbg.cpp b/src/VBox/VMM/VMMR3/CPUMDbg.cpp new file mode 100644 index 000000000..4bd540b32 --- /dev/null +++ b/src/VBox/VMM/VMMR3/CPUMDbg.cpp @@ -0,0 +1,1301 @@ +/* $Id: CPUMDbg.cpp 35601 2011-01-18 10:43:11Z vboxsync $ */ +/** @file + * CPUM - CPU Monitor / Manager, Debugger & Debugging APIs. + */ + +/* + * Copyright (C) 2010-2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#define LOG_GROUP LOG_GROUP_DBGF +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pdmapi.h> +#include "CPUMInternal.h" +#include <VBox/vmm/vm.h> +#include <VBox/param.h> +#include <VBox/err.h> +#include <VBox/log.h> +#include <iprt/thread.h> +#include <iprt/uint128.h> + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGet_Generic(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U8: pValue->u8 = *(uint8_t const *)pv; return VINF_SUCCESS; + case DBGFREGVALTYPE_U16: pValue->u16 = *(uint16_t const *)pv; return VINF_SUCCESS; + case DBGFREGVALTYPE_U32: pValue->u32 = *(uint32_t const *)pv; return VINF_SUCCESS; + case DBGFREGVALTYPE_U64: pValue->u64 = *(uint64_t const *)pv; return VINF_SUCCESS; + case DBGFREGVALTYPE_U128: pValue->u128 = *(PCRTUINT128U )pv; return VINF_SUCCESS; + default: + AssertMsgFailedReturn(("%d %s\n", pDesc->enmType, pDesc->pszName), VERR_INTERNAL_ERROR_3); + } +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegSet_Generic(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + void *pv = (uint8_t *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U8: + *(uint8_t *)pv &= ~pfMask->u8; + *(uint8_t *)pv |= pValue->u8 & pfMask->u8; + return VINF_SUCCESS; + + case DBGFREGVALTYPE_U16: + *(uint16_t *)pv &= ~pfMask->u16; + *(uint16_t *)pv |= pValue->u16 & pfMask->u16; + return VINF_SUCCESS; + + case DBGFREGVALTYPE_U32: + *(uint32_t *)pv &= ~pfMask->u32; + *(uint32_t *)pv |= pValue->u32 & pfMask->u32; + return VINF_SUCCESS; + + case DBGFREGVALTYPE_U64: + *(uint64_t *)pv &= ~pfMask->u64; + *(uint64_t *)pv |= pValue->u64 & pfMask->u64; + return VINF_SUCCESS; + + case DBGFREGVALTYPE_U128: + { + RTUINT128U Val; + RTUInt128AssignAnd((PRTUINT128U)pv, RTUInt128AssignBitwiseNot(RTUInt128Assign(&Val, &pfMask->u128))); + RTUInt128AssignOr((PRTUINT128U)pv, RTUInt128AssignAnd(RTUInt128Assign(&Val, &pValue->u128), &pfMask->u128)); + return VINF_SUCCESS; + } + + default: + AssertMsgFailedReturn(("%d %s\n", pDesc->enmType, pDesc->pszName), VERR_INTERNAL_ERROR_3); + } +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegSet_seg(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + /** @todo perform a selector load, updating hidden selectors and stuff. */ + return VERR_NOT_IMPLEMENTED; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGet_gdtr(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + VBOXGDTR const *pGdtr = (VBOXGDTR const *)((uint8_t const *)&pVCpu->cpum + pDesc->offRegister); + + VMCPU_ASSERT_EMT(pVCpu); + Assert(pDesc->enmType == DBGFREGVALTYPE_DTR); + + pValue->dtr.u32Limit = pGdtr->cbGdt; + pValue->dtr.u64Base = pGdtr->pGdt; + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegSet_gdtr(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + return VERR_NOT_IMPLEMENTED; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGet_idtr(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + VBOXIDTR const *pIdtr = (VBOXIDTR const *)((uint8_t const *)&pVCpu->cpum + pDesc->offRegister); + + VMCPU_ASSERT_EMT(pVCpu); + Assert(pDesc->enmType == DBGFREGVALTYPE_DTR); + + pValue->dtr.u32Limit = pIdtr->cbIdt; + pValue->dtr.u64Base = pIdtr->pIdt; + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegSet_idtr(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + return VERR_NOT_IMPLEMENTED; +} + + +/** + * Is the FPU state in FXSAVE format or not. + * + * @returns true if it is, false if it's in FNSAVE. + * @param pVCpu The virtual CPU handle. + */ +DECLINLINE(bool) cpumR3RegIsFxSaveFormat(PVMCPU pVCpu) +{ +#ifdef RT_ARCH_AMD64 + return true; +#else + return pVCpu->pVMR3->cpum.s.CPUFeatures.edx.u1FXSR; +#endif +} + + +/** + * Determins the tag register value for a CPU register when the FPU state + * format is FXSAVE. + * + * @returns The tag register value. + * @param pVCpu The virtual CPU handle. + * @param iReg The register number (0..7). + */ +DECLINLINE(uint16_t) cpumR3RegCalcFpuTagFromFxSave(PCX86FXSTATE pFpu, unsigned iReg) +{ + /* + * See table 11-1 in the AMD docs. + */ + if (!(pFpu->FTW & RT_BIT_32(iReg))) + return 3; /* b11 - empty */ + + uint16_t const uExp = pFpu->aRegs[iReg].au16[4]; + if (uExp == 0) + { + if (pFpu->aRegs[iReg].au64[0] == 0) /* J & M == 0 */ + return 1; /* b01 - zero */ + return 2; /* b10 - special */ + } + + if (uExp == UINT16_C(0xffff)) + return 2; /* b10 - special */ + + if (!(pFpu->aRegs[iReg].au64[0] >> 63)) /* J == 0 */ + return 2; /* b10 - special */ + + return 0; /* b00 - valid (normal) */ +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGet_ftw(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + PCX86FXSTATE pFpu = (PCX86FXSTATE)((uint8_t const *)&pVCpu->cpum + pDesc->offRegister); + + VMCPU_ASSERT_EMT(pVCpu); + Assert(pDesc->enmType == DBGFREGVALTYPE_U16); + + if (cpumR3RegIsFxSaveFormat(pVCpu)) + pValue->u16 = cpumR3RegCalcFpuTagFromFxSave(pFpu, 0) + | (cpumR3RegCalcFpuTagFromFxSave(pFpu, 1) << 2) + | (cpumR3RegCalcFpuTagFromFxSave(pFpu, 2) << 4) + | (cpumR3RegCalcFpuTagFromFxSave(pFpu, 3) << 6) + | (cpumR3RegCalcFpuTagFromFxSave(pFpu, 4) << 8) + | (cpumR3RegCalcFpuTagFromFxSave(pFpu, 5) << 10) + | (cpumR3RegCalcFpuTagFromFxSave(pFpu, 6) << 12) + | (cpumR3RegCalcFpuTagFromFxSave(pFpu, 7) << 14); + else + { + PCX86FPUSTATE pOldFpu = (PCX86FPUSTATE)pFpu; + pValue->u16 = pOldFpu->FTW; + } + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegSet_ftw(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + return VERR_DBGF_READ_ONLY_REGISTER; +} + + + +/* + * + * Guest register access functions. + * + */ + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGstGet_crX(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + + uint64_t u64Value; + int rc = CPUMGetGuestCRx(pVCpu, pDesc->offRegister, &u64Value); + AssertRCReturn(rc, rc); + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: pValue->u64 = u64Value; break; + case DBGFREGVALTYPE_U32: pValue->u32 = (uint32_t)u64Value; break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGstSet_crX(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + int rc; + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + + /* + * Calculate the new value. + */ + uint64_t u64Value; + uint64_t fMask; + uint64_t fMaskMax; + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: + u64Value = pValue->u64; + fMask = pfMask->u64; + fMaskMax = UINT64_MAX; + break; + case DBGFREGVALTYPE_U32: + u64Value = pValue->u32; + fMask = pfMask->u32; + fMaskMax = UINT32_MAX; + break; + default: AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + if (fMask != fMaskMax) + { + uint64_t u64FullValue; + rc = CPUMGetGuestCRx(pVCpu, pDesc->offRegister, &u64FullValue); + if (RT_FAILURE(rc)) + return rc; + u64Value = (u64FullValue & ~fMask) + | (u64Value & fMask); + } + + /* + * Perform the assignment. + */ + switch (pDesc->offRegister) + { + case 0: rc = CPUMSetGuestCR0(pVCpu, u64Value); break; + case 2: rc = CPUMSetGuestCR2(pVCpu, u64Value); break; + case 3: rc = CPUMSetGuestCR3(pVCpu, u64Value); break; + case 4: rc = CPUMSetGuestCR4(pVCpu, u64Value); break; + case 8: rc = PDMApicSetTPR(pVCpu, (uint8_t)(u64Value << 4)); break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_2); + } + return rc; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGstGet_drX(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + + uint64_t u64Value; + int rc = CPUMGetGuestDRx(pVCpu, pDesc->offRegister, &u64Value); + AssertRCReturn(rc, rc); + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: pValue->u64 = u64Value; break; + case DBGFREGVALTYPE_U32: pValue->u32 = (uint32_t)u64Value; break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGstSet_drX(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + int rc; + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + + /* + * Calculate the new value. + */ + uint64_t u64Value; + uint64_t fMask; + uint64_t fMaskMax; + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: + u64Value = pValue->u64; + fMask = pfMask->u64; + fMaskMax = UINT64_MAX; + break; + case DBGFREGVALTYPE_U32: + u64Value = pValue->u32; + fMask = pfMask->u32; + fMaskMax = UINT32_MAX; + break; + default: AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + if (fMask != fMaskMax) + { + uint64_t u64FullValue; + rc = CPUMGetGuestDRx(pVCpu, pDesc->offRegister, &u64FullValue); + if (RT_FAILURE(rc)) + return rc; + u64Value = (u64FullValue & ~fMask) + | (u64Value & fMask); + } + + /* + * Perform the assignment. + */ + return CPUMSetGuestDRx(pVCpu, pDesc->offRegister, u64Value); +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGstGet_msr(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + uint64_t u64Value; + int rc = CPUMQueryGuestMsr(pVCpu, pDesc->offRegister, &u64Value); + if (RT_SUCCESS(rc)) + { + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: pValue->u64 = u64Value; break; + case DBGFREGVALTYPE_U32: pValue->u32 = (uint32_t)u64Value; break; + case DBGFREGVALTYPE_U16: pValue->u16 = (uint16_t)u64Value; break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + } + /** @todo what to do about errors? */ + return rc; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGstSet_msr(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + int rc; + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + + /* + * Calculate the new value. + */ + uint64_t u64Value; + uint64_t fMask; + uint64_t fMaskMax; + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: + u64Value = pValue->u64; + fMask = pfMask->u64; + fMaskMax = UINT64_MAX; + break; + case DBGFREGVALTYPE_U32: + u64Value = pValue->u32; + fMask = pfMask->u32; + fMaskMax = UINT32_MAX; + break; + case DBGFREGVALTYPE_U16: + u64Value = pValue->u16; + fMask = pfMask->u16; + fMaskMax = UINT16_MAX; + break; + default: AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + if (fMask != fMaskMax) + { + uint64_t u64FullValue; + rc = CPUMQueryGuestMsr(pVCpu, pDesc->offRegister, &u64FullValue); + if (RT_FAILURE(rc)) + return rc; + u64Value = (u64FullValue & ~fMask) + | (u64Value & fMask); + } + + /* + * Perform the assignment. + */ + return CPUMSetGuestMsr(pVCpu, pDesc->offRegister, u64Value); +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGstGet_stN(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum.s.Guest + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + Assert(pDesc->enmType == DBGFREGVALTYPE_R80); + + if (cpumR3RegIsFxSaveFormat(pVCpu)) + { + unsigned iReg = (pVCpu->cpum.s.Guest.fpu.FSW >> 11) & 7; + iReg += pDesc->offRegister; + iReg &= 7; + pValue->r80 = pVCpu->cpum.s.Guest.fpu.aRegs[iReg].r80; + } + else + { + PCX86FPUSTATE pOldFpu = (PCX86FPUSTATE)&pVCpu->cpum.s.Guest.fpu; + + unsigned iReg = (pOldFpu->FSW >> 11) & 7; + iReg += pDesc->offRegister; + iReg &= 7; + + pValue->r80 = pOldFpu->regs[iReg].r80; + } + + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegGstSet_stN(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + return VERR_NOT_IMPLEMENTED; +} + + + +/* + * + * Hypervisor register access functions. + * + */ + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegHyperGet_crX(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + VMCPU_ASSERT_EMT(pVCpu); + + uint64_t u64Value; + switch (pDesc->offRegister) + { + case 0: u64Value = UINT64_MAX; break; + case 2: u64Value = UINT64_MAX; break; + case 3: u64Value = CPUMGetHyperCR3(pVCpu); break; + case 4: u64Value = UINT64_MAX; break; + case 8: u64Value = UINT64_MAX; break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_3); + } + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: pValue->u64 = u64Value; break; + case DBGFREGVALTYPE_U32: pValue->u32 = (uint32_t)u64Value; break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegHyperSet_crX(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + /* Not settable, prevents killing your host. */ + return VERR_ACCESS_DENIED; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegHyperGet_drX(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + void const *pv = (uint8_t const *)&pVCpu->cpum + pDesc->offRegister; + + VMCPU_ASSERT_EMT(pVCpu); + + uint64_t u64Value; + switch (pDesc->offRegister) + { + case 0: u64Value = CPUMGetHyperDR0(pVCpu); break; + case 1: u64Value = CPUMGetHyperDR1(pVCpu); break; + case 2: u64Value = CPUMGetHyperDR2(pVCpu); break; + case 3: u64Value = CPUMGetHyperDR3(pVCpu); break; + case 6: u64Value = CPUMGetHyperDR6(pVCpu); break; + case 7: u64Value = CPUMGetHyperDR7(pVCpu); break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_3); + } + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: pValue->u64 = u64Value; break; + case DBGFREGVALTYPE_U32: pValue->u32 = (uint32_t)u64Value; break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegHyperSet_drX(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + /* Not settable, prevents killing your host. */ + return VERR_ACCESS_DENIED; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegHyperGet_msr(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + /* Not availble at present, return all FFs to keep things quiet */ + uint64_t u64Value = UINT64_MAX; + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U64: pValue->u64 = u64Value; break; + case DBGFREGVALTYPE_U32: pValue->u32 = (uint32_t)u64Value; break; + case DBGFREGVALTYPE_U16: pValue->u16 = (uint16_t)u64Value; break; + default: + AssertFailedReturn(VERR_INTERNAL_ERROR_4); + } + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegHyperSet_msr(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + /* Not settable, return failure. */ + NOREF(pvUser); NOREF(pDesc); NOREF(pValue); NOREF(pfMask); + return VERR_ACCESS_DENIED; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegHyperGet_stN(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue) +{ + PVMCPU pVCpu = (PVMCPU)pvUser; + + VMCPU_ASSERT_EMT(pVCpu); + Assert(pDesc->enmType == DBGFREGVALTYPE_R80); + + if (cpumR3RegIsFxSaveFormat(pVCpu)) + { + unsigned iReg = (pVCpu->cpum.s.Guest.fpu.FSW >> 11) & 7; + iReg += pDesc->offRegister; + iReg &= 7; + pValue->r80 = pVCpu->cpum.s.Guest.fpu.aRegs[iReg].r80; + } + else + { + PCX86FPUSTATE pOldFpu = (PCX86FPUSTATE)&pVCpu->cpum.s.Guest.fpu; + + unsigned iReg = (pOldFpu->FSW >> 11) & 7; + iReg += pDesc->offRegister; + iReg &= 7; + + pValue->r80 = pOldFpu->regs[iReg].r80; + } + + return VINF_SUCCESS; +} + + +/** + * @interface_method_impl{DBGFREGDESC, pfnGet} + */ +static DECLCALLBACK(int) cpumR3RegHyperSet_stN(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask) +{ + /* There isn't a FPU context for the hypervisor yet, so no point in trying to set stuff. */ + return VERR_ACCESS_DENIED; +} + + + +/* + * Set up aliases. + */ +#define CPUMREGALIAS_STD(Name, psz32, psz16, psz8) \ + static DBGFREGALIAS const g_aCpumRegAliases_##Name[] = \ + { \ + { psz32, DBGFREGVALTYPE_U32 }, \ + { psz16, DBGFREGVALTYPE_U16 }, \ + { psz8, DBGFREGVALTYPE_U8 }, \ + { NULL, DBGFREGVALTYPE_INVALID } \ + } +CPUMREGALIAS_STD(rax, "eax", "ax", "al"); +CPUMREGALIAS_STD(rcx, "ecx", "cx", "cl"); +CPUMREGALIAS_STD(rdx, "edx", "dx", "dl"); +CPUMREGALIAS_STD(rbx, "ebx", "bx", "bl"); +CPUMREGALIAS_STD(rsp, "esp", "sp", NULL); +CPUMREGALIAS_STD(rbp, "ebp", "bp", NULL); +CPUMREGALIAS_STD(rsi, "esi", "si", "sil"); +CPUMREGALIAS_STD(rdi, "edi", "di", "dil"); +CPUMREGALIAS_STD(r8, "r8d", "r8w", "r8b"); +CPUMREGALIAS_STD(r9, "r9d", "r9w", "r9b"); +CPUMREGALIAS_STD(r10, "r10d", "r10w", "r10b"); +CPUMREGALIAS_STD(r11, "r11d", "r11w", "r11b"); +CPUMREGALIAS_STD(r12, "r12d", "r12w", "r12b"); +CPUMREGALIAS_STD(r13, "r13d", "r13w", "r13b"); +CPUMREGALIAS_STD(r14, "r14d", "r14w", "r14b"); +CPUMREGALIAS_STD(r15, "r15d", "r15w", "r15b"); +CPUMREGALIAS_STD(rip, "eip", "ip", NULL); +CPUMREGALIAS_STD(rflags, "eflags", "flags", NULL); +#undef CPUMREGALIAS_STD + +static DBGFREGALIAS const g_aCpumRegAliases_fpuip[] = +{ + { "fpuip16", DBGFREGVALTYPE_U16 }, + { NULL, DBGFREGVALTYPE_INVALID } +}; + +static DBGFREGALIAS const g_aCpumRegAliases_fpudp[] = +{ + { "fpudp16", DBGFREGVALTYPE_U16 }, + { NULL, DBGFREGVALTYPE_INVALID } +}; + +static DBGFREGALIAS const g_aCpumRegAliases_cr0[] = +{ + { "msw", DBGFREGVALTYPE_U16 }, + { NULL, DBGFREGVALTYPE_INVALID } +}; + +/* + * Sub fields. + */ +/** Sub-fields for the (hidden) segment attribute register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_seg[] = +{ + DBGFREGSUBFIELD_RW("type", 0, 4, 0), + DBGFREGSUBFIELD_RW("s", 4, 1, 0), + DBGFREGSUBFIELD_RW("dpl", 5, 2, 0), + DBGFREGSUBFIELD_RW("p", 7, 1, 0), + DBGFREGSUBFIELD_RW("avl", 12, 1, 0), + DBGFREGSUBFIELD_RW("l", 13, 1, 0), + DBGFREGSUBFIELD_RW("d", 14, 1, 0), + DBGFREGSUBFIELD_RW("g", 15, 1, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the flags register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_rflags[] = +{ + DBGFREGSUBFIELD_RW("cf", 0, 1, 0), + DBGFREGSUBFIELD_RW("pf", 2, 1, 0), + DBGFREGSUBFIELD_RW("af", 4, 1, 0), + DBGFREGSUBFIELD_RW("zf", 6, 1, 0), + DBGFREGSUBFIELD_RW("sf", 7, 1, 0), + DBGFREGSUBFIELD_RW("tf", 8, 1, 0), + DBGFREGSUBFIELD_RW("if", 9, 1, 0), + DBGFREGSUBFIELD_RW("df", 10, 1, 0), + DBGFREGSUBFIELD_RW("of", 11, 1, 0), + DBGFREGSUBFIELD_RW("iopl", 12, 2, 0), + DBGFREGSUBFIELD_RW("nt", 14, 1, 0), + DBGFREGSUBFIELD_RW("rf", 16, 1, 0), + DBGFREGSUBFIELD_RW("vm", 17, 1, 0), + DBGFREGSUBFIELD_RW("ac", 18, 1, 0), + DBGFREGSUBFIELD_RW("vif", 19, 1, 0), + DBGFREGSUBFIELD_RW("vip", 20, 1, 0), + DBGFREGSUBFIELD_RW("id", 21, 1, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the FPU control word register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_fcw[] = +{ + DBGFREGSUBFIELD_RW("im", 1, 1, 0), + DBGFREGSUBFIELD_RW("dm", 2, 1, 0), + DBGFREGSUBFIELD_RW("zm", 3, 1, 0), + DBGFREGSUBFIELD_RW("om", 4, 1, 0), + DBGFREGSUBFIELD_RW("um", 5, 1, 0), + DBGFREGSUBFIELD_RW("pm", 6, 1, 0), + DBGFREGSUBFIELD_RW("pc", 8, 2, 0), + DBGFREGSUBFIELD_RW("rc", 10, 2, 0), + DBGFREGSUBFIELD_RW("x", 12, 1, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the FPU status word register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_fsw[] = +{ + DBGFREGSUBFIELD_RW("ie", 0, 1, 0), + DBGFREGSUBFIELD_RW("de", 1, 1, 0), + DBGFREGSUBFIELD_RW("ze", 2, 1, 0), + DBGFREGSUBFIELD_RW("oe", 3, 1, 0), + DBGFREGSUBFIELD_RW("ue", 4, 1, 0), + DBGFREGSUBFIELD_RW("pe", 5, 1, 0), + DBGFREGSUBFIELD_RW("se", 6, 1, 0), + DBGFREGSUBFIELD_RW("es", 7, 1, 0), + DBGFREGSUBFIELD_RW("c0", 8, 1, 0), + DBGFREGSUBFIELD_RW("c1", 9, 1, 0), + DBGFREGSUBFIELD_RW("c2", 10, 1, 0), + DBGFREGSUBFIELD_RW("top", 11, 3, 0), + DBGFREGSUBFIELD_RW("c3", 14, 1, 0), + DBGFREGSUBFIELD_RW("b", 15, 1, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the FPU tag word register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_ftw[] = +{ + DBGFREGSUBFIELD_RW("tag0", 0, 2, 0), + DBGFREGSUBFIELD_RW("tag1", 2, 2, 0), + DBGFREGSUBFIELD_RW("tag2", 4, 2, 0), + DBGFREGSUBFIELD_RW("tag3", 6, 2, 0), + DBGFREGSUBFIELD_RW("tag4", 8, 2, 0), + DBGFREGSUBFIELD_RW("tag5", 10, 2, 0), + DBGFREGSUBFIELD_RW("tag6", 12, 2, 0), + DBGFREGSUBFIELD_RW("tag7", 14, 2, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the Multimedia Extensions Control and Status Register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_mxcsr[] = +{ + DBGFREGSUBFIELD_RW("ie", 0, 1, 0), + DBGFREGSUBFIELD_RW("de", 1, 1, 0), + DBGFREGSUBFIELD_RW("ze", 2, 1, 0), + DBGFREGSUBFIELD_RW("oe", 3, 1, 0), + DBGFREGSUBFIELD_RW("ue", 4, 1, 0), + DBGFREGSUBFIELD_RW("pe", 5, 1, 0), + DBGFREGSUBFIELD_RW("daz", 6, 1, 0), + DBGFREGSUBFIELD_RW("im", 7, 1, 0), + DBGFREGSUBFIELD_RW("dm", 8, 1, 0), + DBGFREGSUBFIELD_RW("zm", 9, 1, 0), + DBGFREGSUBFIELD_RW("om", 10, 1, 0), + DBGFREGSUBFIELD_RW("um", 11, 1, 0), + DBGFREGSUBFIELD_RW("pm", 12, 1, 0), + DBGFREGSUBFIELD_RW("rc", 13, 2, 0), + DBGFREGSUBFIELD_RW("fz", 14, 1, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the FPU tag word register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_stN[] = +{ + DBGFREGSUBFIELD_RW("man", 0, 64, 0), + DBGFREGSUBFIELD_RW("exp", 64, 15, 0), + DBGFREGSUBFIELD_RW("sig", 79, 1, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the MMX registers. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_mmN[] = +{ + DBGFREGSUBFIELD_RW("dw0", 0, 32, 0), + DBGFREGSUBFIELD_RW("dw1", 32, 32, 0), + DBGFREGSUBFIELD_RW("w0", 0, 16, 0), + DBGFREGSUBFIELD_RW("w1", 16, 16, 0), + DBGFREGSUBFIELD_RW("w2", 32, 16, 0), + DBGFREGSUBFIELD_RW("w3", 48, 16, 0), + DBGFREGSUBFIELD_RW("b0", 0, 8, 0), + DBGFREGSUBFIELD_RW("b1", 8, 8, 0), + DBGFREGSUBFIELD_RW("b2", 16, 8, 0), + DBGFREGSUBFIELD_RW("b3", 24, 8, 0), + DBGFREGSUBFIELD_RW("b4", 32, 8, 0), + DBGFREGSUBFIELD_RW("b5", 40, 8, 0), + DBGFREGSUBFIELD_RW("b6", 48, 8, 0), + DBGFREGSUBFIELD_RW("b7", 56, 8, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the XMM registers. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_xmmN[] = +{ + DBGFREGSUBFIELD_RW("r0", 0, 32, 0), + DBGFREGSUBFIELD_RW("r0.man", 0+ 0, 23, 0), + DBGFREGSUBFIELD_RW("r0.exp", 0+23, 8, 0), + DBGFREGSUBFIELD_RW("r0.sig", 0+31, 1, 0), + DBGFREGSUBFIELD_RW("r1", 32, 32, 0), + DBGFREGSUBFIELD_RW("r1.man", 32+ 0, 23, 0), + DBGFREGSUBFIELD_RW("r1.exp", 32+23, 8, 0), + DBGFREGSUBFIELD_RW("r1.sig", 32+31, 1, 0), + DBGFREGSUBFIELD_RW("r2", 64, 32, 0), + DBGFREGSUBFIELD_RW("r2.man", 64+ 0, 23, 0), + DBGFREGSUBFIELD_RW("r2.exp", 64+23, 8, 0), + DBGFREGSUBFIELD_RW("r2.sig", 64+31, 1, 0), + DBGFREGSUBFIELD_RW("r3", 96, 32, 0), + DBGFREGSUBFIELD_RW("r3.man", 96+ 0, 23, 0), + DBGFREGSUBFIELD_RW("r3.exp", 96+23, 8, 0), + DBGFREGSUBFIELD_RW("r3.sig", 96+31, 1, 0), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the CR0 register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_cr0[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the CR3 register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_cr3[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the CR4 register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_cr4[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the DR6 register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_dr6[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the DR7 register. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_dr7[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the CR_PAT MSR. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_apic_base[] = +{ + DBGFREGSUBFIELD_RW("bsp", 8, 1, 0), + DBGFREGSUBFIELD_RW("ge", 9, 1, 0), + DBGFREGSUBFIELD_RW("base", 12, 20, 12), + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the CR_PAT MSR. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_cr_pat[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the PERF_STATUS MSR. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_perf_status[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the EFER MSR. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_efer[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the STAR MSR. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_star[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the CSTAR MSR. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_cstar[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the LSTAR MSR. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_lstar[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + +/** Sub-fields for the SF_MASK MSR. */ +static DBGFREGSUBFIELD const g_aCpumRegFields_sf_mask[] = +{ + /** @todo */ + DBGFREGSUBFIELD_TERMINATOR() +}; + + +/** @name Macros for producing register descriptor table entries. + * @{ */ +#define CPU_REG_EX_AS(a_szName, a_RegSuff, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields) \ + { a_szName, DBGFREG_##a_RegSuff, DBGFREGVALTYPE_##a_TypeSuff, 0 /*fFlags*/, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields } + +#define CPU_REG_REG(UName, LName) \ + CPU_REG_RW_AS(#LName, UName, U64, LName, cpumR3RegGet_Generic, cpumR3RegSet_Generic, g_aCpumRegAliases_##LName, NULL) + +#define CPU_REG_SEG(UName, LName) \ + CPU_REG_RW_AS(#LName, UName, U16, LName, cpumR3RegGet_Generic, cpumR3RegSet_seg, NULL, NULL ), \ + CPU_REG_RW_AS(#LName "_attr", UName##_ATTR, U32, LName##Hid.Attr.u, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_seg), \ + CPU_REG_RW_AS(#LName "_base", UName##_BASE, U64, LName##Hid.u64Base, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), \ + CPU_REG_RW_AS(#LName "_lim", UName##_LIMIT, U32, LName##Hid.u32Limit, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ) + +#define CPU_REG_MM(n) \ + CPU_REG_RW_AS("mm" #n, MM##n, U64, fpu.aRegs[n].mmx, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_mmN) + +#define CPU_REG_XMM(n) \ + CPU_REG_RW_AS("xmm" #n, XMM##n, U128, fpu.aXMM[n].xmm, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_xmmN) +/** @} */ + + +/** + * The guest register descriptors. + */ +static DBGFREGDESC const g_aCpumRegGstDescs[] = +{ +#define CPU_REG_RW_AS(a_szName, a_RegSuff, a_TypeSuff, a_CpumCtxMemb, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields) \ + { a_szName, DBGFREG_##a_RegSuff, DBGFREGVALTYPE_##a_TypeSuff, 0 /*fFlags*/, RT_OFFSETOF(CPUMCPU, Guest.a_CpumCtxMemb), a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields } +#define CPU_REG_RO_AS(a_szName, a_RegSuff, a_TypeSuff, a_CpumCtxMemb, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields) \ + { a_szName, DBGFREG_##a_RegSuff, DBGFREGVALTYPE_##a_TypeSuff, DBGFREG_FLAGS_READ_ONLY, RT_OFFSETOF(CPUMCPU, Guest.a_CpumCtxMemb), a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields } +#define CPU_REG_MSR(a_szName, UName, a_TypeSuff, a_paSubFields) \ + CPU_REG_EX_AS(a_szName, MSR_##UName, a_TypeSuff, MSR_##UName, cpumR3RegGstGet_msr, cpumR3RegGstSet_msr, NULL, a_paSubFields) +#define CPU_REG_ST(n) \ + CPU_REG_EX_AS("st" #n, ST##n, R80, n, cpumR3RegGstGet_stN, cpumR3RegGstSet_stN, NULL, g_aCpumRegFields_stN) + + CPU_REG_REG(RAX, rax), + CPU_REG_REG(RCX, rcx), + CPU_REG_REG(RDX, rdx), + CPU_REG_REG(RBX, rbx), + CPU_REG_REG(RSP, rsp), + CPU_REG_REG(RBP, rbp), + CPU_REG_REG(RSI, rsi), + CPU_REG_REG(RDI, rdi), + CPU_REG_REG(R8, r8), + CPU_REG_REG(R9, r9), + CPU_REG_REG(R10, r10), + CPU_REG_REG(R11, r11), + CPU_REG_REG(R12, r12), + CPU_REG_REG(R13, r13), + CPU_REG_REG(R14, r14), + CPU_REG_REG(R15, r15), + CPU_REG_SEG(CS, cs), + CPU_REG_SEG(DS, ds), + CPU_REG_SEG(ES, es), + CPU_REG_SEG(FS, fs), + CPU_REG_SEG(GS, gs), + CPU_REG_SEG(SS, ss), + CPU_REG_REG(RIP, rip), + CPU_REG_RW_AS("rflags", RFLAGS, U64, rflags, cpumR3RegGet_Generic, cpumR3RegSet_Generic, g_aCpumRegAliases_rflags, g_aCpumRegFields_rflags ), + CPU_REG_RW_AS("fcw", FCW, U16, fpu.FCW, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_fcw ), + CPU_REG_RW_AS("fsw", FSW, U16, fpu.FSW, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_fsw ), + CPU_REG_RO_AS("ftw", FTW, U16, fpu, cpumR3RegGet_ftw, cpumR3RegSet_ftw, NULL, g_aCpumRegFields_ftw ), + CPU_REG_RW_AS("fop", FOP, U16, fpu.FOP, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("fpuip", FPUIP, U32, fpu.FPUIP, cpumR3RegGet_Generic, cpumR3RegSet_Generic, g_aCpumRegAliases_fpuip, NULL ), + CPU_REG_RW_AS("fpucs", FPUCS, U16, fpu.CS, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("fpudp", FPUDP, U32, fpu.FPUDP, cpumR3RegGet_Generic, cpumR3RegSet_Generic, g_aCpumRegAliases_fpudp, NULL ), + CPU_REG_RW_AS("fpuds", FPUDS, U16, fpu.DS, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("mxcsr", MXCSR, U32, fpu.MXCSR, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_mxcsr ), + CPU_REG_RW_AS("mxcsr_mask", MXCSR_MASK, U32, fpu.MXCSR_MASK, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_mxcsr ), + CPU_REG_ST(0), + CPU_REG_ST(1), + CPU_REG_ST(2), + CPU_REG_ST(3), + CPU_REG_ST(4), + CPU_REG_ST(5), + CPU_REG_ST(6), + CPU_REG_ST(7), + CPU_REG_MM(0), + CPU_REG_MM(1), + CPU_REG_MM(2), + CPU_REG_MM(3), + CPU_REG_MM(4), + CPU_REG_MM(5), + CPU_REG_MM(6), + CPU_REG_MM(7), + CPU_REG_XMM(0), + CPU_REG_XMM(1), + CPU_REG_XMM(2), + CPU_REG_XMM(3), + CPU_REG_XMM(4), + CPU_REG_XMM(5), + CPU_REG_XMM(6), + CPU_REG_XMM(7), + CPU_REG_XMM(8), + CPU_REG_XMM(9), + CPU_REG_XMM(10), + CPU_REG_XMM(11), + CPU_REG_XMM(12), + CPU_REG_XMM(13), + CPU_REG_XMM(14), + CPU_REG_XMM(15), + CPU_REG_RW_AS("gdtr_base", GDTR_BASE, U64, gdtr.pGdt, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("gdtr_limit", GDTR_LIMIT, U16, gdtr.cbGdt, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("idtr_base", IDTR_BASE, U64, idtr.pIdt, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("idtr_limit", IDTR_LIMIT, U16, idtr.cbIdt, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_SEG(LDTR, ldtr), + CPU_REG_SEG(TR, tr), + CPU_REG_EX_AS("cr0", CR0, U32, 0, cpumR3RegGstGet_crX, cpumR3RegGstSet_crX, g_aCpumRegAliases_cr0, g_aCpumRegFields_cr0 ), + CPU_REG_EX_AS("cr2", CR2, U64, 2, cpumR3RegGstGet_crX, cpumR3RegGstSet_crX, NULL, NULL ), + CPU_REG_EX_AS("cr3", CR3, U64, 3, cpumR3RegGstGet_crX, cpumR3RegGstSet_crX, NULL, g_aCpumRegFields_cr3 ), + CPU_REG_EX_AS("cr4", CR4, U32, 4, cpumR3RegGstGet_crX, cpumR3RegGstSet_crX, NULL, g_aCpumRegFields_cr4 ), + CPU_REG_EX_AS("cr8", CR8, U32, 8, cpumR3RegGstGet_crX, cpumR3RegGstSet_crX, NULL, NULL ), + CPU_REG_EX_AS("dr0", DR0, U64, 0, cpumR3RegGstGet_drX, cpumR3RegGstSet_drX, NULL, NULL ), + CPU_REG_EX_AS("dr1", DR1, U64, 1, cpumR3RegGstGet_drX, cpumR3RegGstSet_drX, NULL, NULL ), + CPU_REG_EX_AS("dr2", DR2, U64, 2, cpumR3RegGstGet_drX, cpumR3RegGstSet_drX, NULL, NULL ), + CPU_REG_EX_AS("dr3", DR3, U64, 3, cpumR3RegGstGet_drX, cpumR3RegGstSet_drX, NULL, NULL ), + CPU_REG_EX_AS("dr6", DR6, U32, 6, cpumR3RegGstGet_drX, cpumR3RegGstSet_drX, NULL, g_aCpumRegFields_dr6 ), + CPU_REG_EX_AS("dr7", DR7, U32, 7, cpumR3RegGstGet_drX, cpumR3RegGstSet_drX, NULL, g_aCpumRegFields_dr7 ), + CPU_REG_MSR("apic_base", IA32_APICBASE, U32, g_aCpumRegFields_apic_base ), + CPU_REG_MSR("pat", IA32_CR_PAT, U64, g_aCpumRegFields_cr_pat ), + CPU_REG_MSR("perf_status", IA32_PERF_STATUS, U64, g_aCpumRegFields_perf_status), + CPU_REG_MSR("sysenter_cs", IA32_SYSENTER_CS, U16, NULL ), + CPU_REG_MSR("sysenter_eip", IA32_SYSENTER_EIP, U32, NULL ), + CPU_REG_MSR("sysenter_esp", IA32_SYSENTER_ESP, U32, NULL ), + CPU_REG_MSR("tsc", IA32_TSC, U32, NULL ), + CPU_REG_MSR("efer", K6_EFER, U32, g_aCpumRegFields_efer ), + CPU_REG_MSR("star", K6_STAR, U64, g_aCpumRegFields_star ), + CPU_REG_MSR("cstar", K8_CSTAR, U64, g_aCpumRegFields_cstar ), + CPU_REG_MSR("msr_fs_base", K8_FS_BASE, U64, NULL ), + CPU_REG_MSR("msr_gs_base", K8_GS_BASE, U64, NULL ), + CPU_REG_MSR("krnl_gs_base", K8_KERNEL_GS_BASE, U64, NULL ), + CPU_REG_MSR("lstar", K8_LSTAR, U64, g_aCpumRegFields_lstar ), + CPU_REG_MSR("sf_mask", K8_SF_MASK, U64, NULL ), + CPU_REG_MSR("tsc_aux", K8_TSC_AUX, U64, NULL ), + CPU_REG_EX_AS("ah", AH, U8, RT_OFFSETOF(CPUMCPU, Guest.rax) + 1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_EX_AS("ch", CH, U8, RT_OFFSETOF(CPUMCPU, Guest.rcx) + 1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_EX_AS("dh", DH, U8, RT_OFFSETOF(CPUMCPU, Guest.rdx) + 1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_EX_AS("bh", BH, U8, RT_OFFSETOF(CPUMCPU, Guest.rbx) + 1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("gdtr", GDTR, DTR, gdtr, cpumR3RegGet_gdtr, cpumR3RegSet_gdtr, NULL, NULL ), + CPU_REG_RW_AS("idtr", IDTR, DTR, idtr, cpumR3RegGet_idtr, cpumR3RegSet_idtr, NULL, NULL ), + DBGFREGDESC_TERMINATOR() + +#undef CPU_REG_RW_AS +#undef CPU_REG_RO_AS +#undef CPU_REG_MSR +#undef CPU_REG_ST +}; + + +/** + * The hypervisor (raw-mode) register descriptors. + */ +static DBGFREGDESC const g_aCpumRegHyperDescs[] = +{ +#define CPU_REG_RW_AS(a_szName, a_RegSuff, a_TypeSuff, a_CpumCtxMemb, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields) \ + { a_szName, DBGFREG_##a_RegSuff, DBGFREGVALTYPE_##a_TypeSuff, 0 /*fFlags*/, RT_OFFSETOF(CPUMCPU, Hyper.a_CpumCtxMemb), a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields } +#define CPU_REG_RO_AS(a_szName, a_RegSuff, a_TypeSuff, a_CpumCtxMemb, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields) \ + { a_szName, DBGFREG_##a_RegSuff, DBGFREGVALTYPE_##a_TypeSuff, DBGFREG_FLAGS_READ_ONLY, RT_OFFSETOF(CPUMCPU, Hyper.a_CpumCtxMemb), a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields } +#define CPU_REG_MSR(a_szName, UName, a_TypeSuff, a_paSubFields) \ + CPU_REG_EX_AS(a_szName, MSR_##UName, a_TypeSuff, MSR_##UName, cpumR3RegHyperGet_msr, cpumR3RegHyperSet_msr, NULL, a_paSubFields) +#define CPU_REG_ST(n) \ + CPU_REG_EX_AS("st" #n, ST##n, R80, n, cpumR3RegHyperGet_stN, cpumR3RegHyperSet_stN, NULL, g_aCpumRegFields_stN) + + CPU_REG_REG(RAX, rax), + CPU_REG_REG(RCX, rcx), + CPU_REG_REG(RDX, rdx), + CPU_REG_REG(RBX, rbx), + CPU_REG_REG(RSP, rsp), + CPU_REG_REG(RBP, rbp), + CPU_REG_REG(RSI, rsi), + CPU_REG_REG(RDI, rdi), + CPU_REG_REG(R8, r8), + CPU_REG_REG(R9, r9), + CPU_REG_REG(R10, r10), + CPU_REG_REG(R11, r11), + CPU_REG_REG(R12, r12), + CPU_REG_REG(R13, r13), + CPU_REG_REG(R14, r14), + CPU_REG_REG(R15, r15), + CPU_REG_SEG(CS, cs), + CPU_REG_SEG(DS, ds), + CPU_REG_SEG(ES, es), + CPU_REG_SEG(FS, fs), + CPU_REG_SEG(GS, gs), + CPU_REG_SEG(SS, ss), + CPU_REG_REG(RIP, rip), + CPU_REG_RW_AS("rflags", RFLAGS, U64, rflags, cpumR3RegGet_Generic, cpumR3RegSet_Generic, g_aCpumRegAliases_rflags, g_aCpumRegFields_rflags ), + CPU_REG_RW_AS("fcw", FCW, U16, fpu.FCW, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_fcw ), + CPU_REG_RW_AS("fsw", FSW, U16, fpu.FSW, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_fsw ), + CPU_REG_RO_AS("ftw", FTW, U16, fpu, cpumR3RegGet_ftw, cpumR3RegSet_ftw, NULL, g_aCpumRegFields_ftw ), + CPU_REG_RW_AS("fop", FOP, U16, fpu.FOP, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("fpuip", FPUIP, U32, fpu.FPUIP, cpumR3RegGet_Generic, cpumR3RegSet_Generic, g_aCpumRegAliases_fpuip, NULL ), + CPU_REG_RW_AS("fpucs", FPUCS, U16, fpu.CS, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("fpudp", FPUDP, U32, fpu.FPUDP, cpumR3RegGet_Generic, cpumR3RegSet_Generic, g_aCpumRegAliases_fpudp, NULL ), + CPU_REG_RW_AS("fpuds", FPUDS, U16, fpu.DS, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("mxcsr", MXCSR, U32, fpu.MXCSR, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_mxcsr ), + CPU_REG_RW_AS("mxcsr_mask", MXCSR_MASK, U32, fpu.MXCSR_MASK, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, g_aCpumRegFields_mxcsr ), + CPU_REG_ST(0), + CPU_REG_ST(1), + CPU_REG_ST(2), + CPU_REG_ST(3), + CPU_REG_ST(4), + CPU_REG_ST(5), + CPU_REG_ST(6), + CPU_REG_ST(7), + CPU_REG_MM(0), + CPU_REG_MM(1), + CPU_REG_MM(2), + CPU_REG_MM(3), + CPU_REG_MM(4), + CPU_REG_MM(5), + CPU_REG_MM(6), + CPU_REG_MM(7), + CPU_REG_XMM(0), + CPU_REG_XMM(1), + CPU_REG_XMM(2), + CPU_REG_XMM(3), + CPU_REG_XMM(4), + CPU_REG_XMM(5), + CPU_REG_XMM(6), + CPU_REG_XMM(7), + CPU_REG_XMM(8), + CPU_REG_XMM(9), + CPU_REG_XMM(10), + CPU_REG_XMM(11), + CPU_REG_XMM(12), + CPU_REG_XMM(13), + CPU_REG_XMM(14), + CPU_REG_XMM(15), + CPU_REG_RW_AS("gdtr_base", GDTR_BASE, U64, gdtr.pGdt, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("gdtr_limit", GDTR_LIMIT, U16, gdtr.cbGdt, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("idtr_base", IDTR_BASE, U64, idtr.pIdt, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("idtr_limit", IDTR_LIMIT, U16, idtr.cbIdt, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_SEG(LDTR, ldtr), + CPU_REG_SEG(TR, tr), + CPU_REG_EX_AS("cr0", CR0, U32, 0, cpumR3RegHyperGet_crX, cpumR3RegHyperSet_crX, g_aCpumRegAliases_cr0, g_aCpumRegFields_cr0 ), + CPU_REG_EX_AS("cr2", CR2, U64, 2, cpumR3RegHyperGet_crX, cpumR3RegHyperSet_crX, NULL, NULL ), + CPU_REG_EX_AS("cr3", CR3, U64, 3, cpumR3RegHyperGet_crX, cpumR3RegHyperSet_crX, NULL, g_aCpumRegFields_cr3 ), + CPU_REG_EX_AS("cr4", CR4, U32, 4, cpumR3RegHyperGet_crX, cpumR3RegHyperSet_crX, NULL, g_aCpumRegFields_cr4 ), + CPU_REG_EX_AS("cr8", CR8, U32, 8, cpumR3RegHyperGet_crX, cpumR3RegHyperSet_crX, NULL, NULL ), + CPU_REG_EX_AS("dr0", DR0, U64, 0, cpumR3RegHyperGet_drX, cpumR3RegHyperSet_drX, NULL, NULL ), + CPU_REG_EX_AS("dr1", DR1, U64, 1, cpumR3RegHyperGet_drX, cpumR3RegHyperSet_drX, NULL, NULL ), + CPU_REG_EX_AS("dr2", DR2, U64, 2, cpumR3RegHyperGet_drX, cpumR3RegHyperSet_drX, NULL, NULL ), + CPU_REG_EX_AS("dr3", DR3, U64, 3, cpumR3RegHyperGet_drX, cpumR3RegHyperSet_drX, NULL, NULL ), + CPU_REG_EX_AS("dr6", DR6, U32, 6, cpumR3RegHyperGet_drX, cpumR3RegHyperSet_drX, NULL, g_aCpumRegFields_dr6 ), + CPU_REG_EX_AS("dr7", DR7, U32, 7, cpumR3RegHyperGet_drX, cpumR3RegHyperSet_drX, NULL, g_aCpumRegFields_dr7 ), + CPU_REG_MSR("apic_base", IA32_APICBASE, U32, g_aCpumRegFields_apic_base ), + CPU_REG_MSR("pat", IA32_CR_PAT, U64, g_aCpumRegFields_cr_pat ), + CPU_REG_MSR("perf_status", IA32_PERF_STATUS, U64, g_aCpumRegFields_perf_status), + CPU_REG_MSR("sysenter_cs", IA32_SYSENTER_CS, U16, NULL ), + CPU_REG_MSR("sysenter_eip", IA32_SYSENTER_EIP, U32, NULL ), + CPU_REG_MSR("sysenter_esp", IA32_SYSENTER_ESP, U32, NULL ), + CPU_REG_MSR("tsc", IA32_TSC, U32, NULL ), + CPU_REG_MSR("efer", K6_EFER, U32, g_aCpumRegFields_efer ), + CPU_REG_MSR("star", K6_STAR, U64, g_aCpumRegFields_star ), + CPU_REG_MSR("cstar", K8_CSTAR, U64, g_aCpumRegFields_cstar ), + CPU_REG_MSR("msr_fs_base", K8_FS_BASE, U64, NULL ), + CPU_REG_MSR("msr_gs_base", K8_GS_BASE, U64, NULL ), + CPU_REG_MSR("krnl_gs_base", K8_KERNEL_GS_BASE, U64, NULL ), + CPU_REG_MSR("lstar", K8_LSTAR, U64, g_aCpumRegFields_lstar ), + CPU_REG_MSR("sf_mask", K8_SF_MASK, U64, NULL ), + CPU_REG_MSR("tsc_aux", K8_TSC_AUX, U64, NULL ), + CPU_REG_EX_AS("ah", AH, U8, RT_OFFSETOF(CPUMCPU, Hyper.rax) + 1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_EX_AS("ch", CH, U8, RT_OFFSETOF(CPUMCPU, Hyper.rcx) + 1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_EX_AS("dh", DH, U8, RT_OFFSETOF(CPUMCPU, Hyper.rdx) + 1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_EX_AS("bh", BH, U8, RT_OFFSETOF(CPUMCPU, Hyper.rbx) + 1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("gdtr", GDTR, DTR, gdtr, cpumR3RegGet_gdtr, cpumR3RegSet_gdtr, NULL, NULL ), + CPU_REG_RW_AS("idtr", IDTR, DTR, idtr, cpumR3RegGet_idtr, cpumR3RegSet_idtr, NULL, NULL ), + DBGFREGDESC_TERMINATOR() +#undef CPU_REG_RW_AS +#undef CPU_REG_RO_AS +#undef CPU_REG_MSR +#undef CPU_REG_ST +}; + + +/** + * Initializes the debugger related sides of the CPUM component. + * + * Called by CPUMR3Init. + * + * @returns VBox status code. + * @param pVM The VM handle. + */ +int cpumR3DbgInit(PVM pVM) +{ + for (VMCPUID iCpu = 0; iCpu < pVM->cCpus; iCpu++) + { + int rc = DBGFR3RegRegisterCpu(pVM, &pVM->aCpus[iCpu], g_aCpumRegGstDescs, true /*fGuestRegs*/); + AssertLogRelRCReturn(rc, rc); + rc = DBGFR3RegRegisterCpu(pVM, &pVM->aCpus[iCpu], g_aCpumRegHyperDescs, false /*fGuestRegs*/); + AssertLogRelRCReturn(rc, rc); + } + + return VINF_SUCCESS; +} + diff --git a/src/VBox/VMM/PATM/CSAM.cpp b/src/VBox/VMM/VMMR3/CSAM.cpp index 072d5b9ab..76dde32ad 100644 --- a/src/VBox/VMM/PATM/CSAM.cpp +++ b/src/VBox/VMM/VMMR3/CSAM.cpp @@ -1,4 +1,4 @@ -/* $Id: CSAM.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: CSAM.cpp 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * CSAM - Guest OS Code Scanning and Analysis Manager */ @@ -19,35 +19,35 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_CSAM -#include <VBox/cpum.h> -#include <VBox/stam.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/cpumdis.h> -#include <VBox/pgm.h> -#include <VBox/iom.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/cpumdis.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/iom.h> #include <VBox/sup.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/rem.h> -#include <VBox/selm.h> -#include <VBox/trpm.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/param.h> #include <iprt/avl.h> #include <iprt/asm.h> #include <iprt/thread.h> #include "CSAMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/dbg.h> #include <VBox/err.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #include <VBox/log.h> #include <iprt/assert.h> #include <iprt/string.h> #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <include/internal/pgm.h> +#include "internal/pgm.h" /* Enabled by default */ diff --git a/src/VBox/VMM/DBGF.cpp b/src/VBox/VMM/VMMR3/DBGF.cpp index a1542332e..0a0fea809 100644 --- a/src/VBox/VMM/DBGF.cpp +++ b/src/VBox/VMM/VMMR3/DBGF.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGF.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGF.cpp 35466 2011-01-10 16:36:35Z vboxsync $ */ /** @file * DBGF - Debugger Facility. */ @@ -70,13 +70,13 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/selm.h> -#include <VBox/rem.h> -#include <VBox/em.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/hwaccm.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> @@ -135,6 +135,8 @@ VMMR3DECL(int) DBGFR3Init(PVM pVM) { int rc = dbgfR3InfoInit(pVM); if (RT_SUCCESS(rc)) + rc = dbgfR3RegInit(pVM); + if (RT_SUCCESS(rc)) rc = dbgfR3AsInit(pVM); if (RT_SUCCESS(rc)) rc = dbgfR3SymInit(pVM); @@ -207,6 +209,7 @@ VMMR3DECL(int) DBGFR3Term(PVM pVM) */ dbgfR3OSTerm(pVM); dbgfR3AsTerm(pVM); + dbgfR3RegTerm(pVM); dbgfR3InfoTerm(pVM); return VINF_SUCCESS; } diff --git a/src/VBox/VMM/DBGFAddr.cpp b/src/VBox/VMM/VMMR3/DBGFAddr.cpp index 9c67eca57..f957e5eea 100644 --- a/src/VBox/VMM/DBGFAddr.cpp +++ b/src/VBox/VMM/VMMR3/DBGFAddr.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFAddr.cpp 30493 2010-06-29 11:59:47Z vboxsync $ */ +/* $Id: DBGFAddr.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Mixed Address Methods. */ @@ -20,16 +20,16 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/mm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/mm.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/param.h> #include <VBox/err.h> #include <VBox/log.h> -#include <include/internal/pgm.h> +#include "internal/pgm.h" diff --git a/src/VBox/VMM/DBGFAddrSpace.cpp b/src/VBox/VMM/VMMR3/DBGFAddrSpace.cpp index 498c69dce..a5f569c36 100644 --- a/src/VBox/VMM/DBGFAddrSpace.cpp +++ b/src/VBox/VMM/VMMR3/DBGFAddrSpace.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFAddrSpace.cpp 30257 2010-06-16 16:17:08Z vboxsync $ */ +/* $Id: DBGFAddrSpace.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Address Space Management. */ @@ -37,11 +37,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/pdmapi.h> -#include <VBox/mm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/mm.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/DBGFBp.cpp b/src/VBox/VMM/VMMR3/DBGFBp.cpp index 36c0cfb1f..496985fb5 100644 --- a/src/VBox/VMM/DBGFBp.cpp +++ b/src/VBox/VMM/VMMR3/DBGFBp.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFBp.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGFBp.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Breakpoint Management. */ @@ -20,12 +20,12 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/selm.h> -#include <VBox/rem.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/rem.h> #include "DBGFInternal.h" -#include <VBox/vm.h> -#include <VBox/mm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/mm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/DBGFCoreWrite.cpp b/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp index dc852c095..d850599a2 100644 --- a/src/VBox/VMM/DBGFCoreWrite.cpp +++ b/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFCoreWrite.cpp 34902 2010-12-09 16:16:51Z vboxsync $ */ +/* $Id: DBGFCoreWrite.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Guest Core Dump. */ @@ -53,18 +53,18 @@ #include "DBGFInternal.h" -#include <VBox/cpum.h> +#include <VBox/vmm/cpum.h> #include "CPUMInternal.h" -#include <VBox/dbgf.h> -#include <VBox/dbgfcorefmt.h> -#include <VBox/vm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/dbgfcorefmt.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/pgm.h> #include <VBox/err.h> #include <VBox/log.h> -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> #include <VBox/version.h> -#include "../Runtime/include/internal/ldrELF64.h" +#include "../../Runtime/include/internal/ldrELF64.h" /******************************************************************************* diff --git a/src/VBox/VMM/DBGFCpu.cpp b/src/VBox/VMM/VMMR3/DBGFCpu.cpp index 4ce6c4e94..14a235e1f 100644 --- a/src/VBox/VMM/DBGFCpu.cpp +++ b/src/VBox/VMM/VMMR3/DBGFCpu.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFCpu.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DBGFCpu.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, CPU State Accessors. */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/cpum.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/cpum.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/DBGFDisas.cpp b/src/VBox/VMM/VMMR3/DBGFDisas.cpp index 9f8a761b0..c722c320c 100644 --- a/src/VBox/VMM/DBGFDisas.cpp +++ b/src/VBox/VMM/VMMR3/DBGFDisas.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFDisas.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGFDisas.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Disassembler. */ @@ -19,17 +19,17 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/selm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/cpum.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> #include "DBGFInternal.h" #include <VBox/dis.h> #include <VBox/err.h> #include <VBox/param.h> -#include <VBox/vm.h> -#include <include/internal/pgm.h> +#include <VBox/vmm/vm.h> +#include "internal/pgm.h" #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/DBGFInfo.cpp b/src/VBox/VMM/VMMR3/DBGFInfo.cpp index 09f5d0574..aed5b7eec 100644 --- a/src/VBox/VMM/DBGFInfo.cpp +++ b/src/VBox/VMM/VMMR3/DBGFInfo.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFInfo.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGFInfo.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Info. */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF_INFO -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/DBGFLog.cpp b/src/VBox/VMM/VMMR3/DBGFLog.cpp index f855101d5..f8162dba1 100644 --- a/src/VBox/VMM/DBGFLog.cpp +++ b/src/VBox/VMM/VMMR3/DBGFLog.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFLog.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DBGFLog.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Log Manager. */ @@ -19,9 +19,9 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vmapi.h> -#include <VBox/vmm.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/vmapi.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/dbgf.h> #include <VBox/log.h> #include <VBox/err.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/DBGFMem.cpp b/src/VBox/VMM/VMMR3/DBGFMem.cpp index 89f5e3014..ea2eeb90b 100644 --- a/src/VBox/VMM/DBGFMem.cpp +++ b/src/VBox/VMM/VMMR3/DBGFMem.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFMem.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGFMem.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Memory Methods. */ @@ -20,15 +20,15 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/hwaccm.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> diff --git a/src/VBox/VMM/DBGFModule.cpp b/src/VBox/VMM/VMMR3/DBGFModule.cpp index 22ade3c9f..2b3675e2f 100644 --- a/src/VBox/VMM/DBGFModule.cpp +++ b/src/VBox/VMM/VMMR3/DBGFModule.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFModule.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGFModule.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Module & Segment Management. */ @@ -34,7 +34,7 @@ */ #if 0 -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> /** Special segment number that indicates that the offset is a relative diff --git a/src/VBox/VMM/DBGFOS.cpp b/src/VBox/VMM/VMMR3/DBGFOS.cpp index 9fdfbc9ea..4a5407d42 100644 --- a/src/VBox/VMM/DBGFOS.cpp +++ b/src/VBox/VMM/VMMR3/DBGFOS.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFOS.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGFOS.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Guest OS Diggers. */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/mm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/mm.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMR3/DBGFReg.cpp b/src/VBox/VMM/VMMR3/DBGFReg.cpp new file mode 100644 index 000000000..c3b6c1f49 --- /dev/null +++ b/src/VBox/VMM/VMMR3/DBGFReg.cpp @@ -0,0 +1,2308 @@ +/* $Id: DBGFReg.cpp 35609 2011-01-18 14:24:34Z vboxsync $ */ +/** @file + * DBGF - Debugger Facility, Register Methods. + */ + +/* + * Copyright (C) 2010-2011 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#define LOG_GROUP LOG_GROUP_DBGF +#include <VBox/vmm/dbgf.h> +#include "DBGFInternal.h" +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> +#include <VBox/param.h> +#include <VBox/err.h> +#include <VBox/log.h> +#include <iprt/ctype.h> +#include <iprt/string.h> +#include <iprt/uint128.h> + + +/******************************************************************************* +* Defined Constants And Macros * +*******************************************************************************/ +/** Locks the register database for writing. */ +#define DBGF_REG_DB_LOCK_WRITE(pVM) \ + do { \ + int rcSem = RTSemRWRequestWrite((pVM)->dbgf.s.hRegDbLock, RT_INDEFINITE_WAIT); \ + AssertRC(rcSem); \ + } while (0) + +/** Unlocks the register database after writing. */ +#define DBGF_REG_DB_UNLOCK_WRITE(pVM) \ + do { \ + int rcSem = RTSemRWReleaseWrite((pVM)->dbgf.s.hRegDbLock); \ + AssertRC(rcSem); \ + } while (0) + +/** Locks the register database for reading. */ +#define DBGF_REG_DB_LOCK_READ(pVM) \ + do { \ + int rcSem = RTSemRWRequestRead((pVM)->dbgf.s.hRegDbLock, RT_INDEFINITE_WAIT); \ + AssertRC(rcSem); \ + } while (0) + +/** Unlocks the register database after reading. */ +#define DBGF_REG_DB_UNLOCK_READ(pVM) \ + do { \ + int rcSem = RTSemRWReleaseRead((pVM)->dbgf.s.hRegDbLock); \ + AssertRC(rcSem); \ + } while (0) + + +/** The max length of a set, register or sub-field name. */ +#define DBGF_REG_MAX_NAME 40 + + +/******************************************************************************* +* Structures and Typedefs * +*******************************************************************************/ +/** + * Register set registration record type. + */ +typedef enum DBGFREGSETTYPE +{ + /** Invalid zero value. */ + DBGFREGSETTYPE_INVALID = 0, + /** CPU record. */ + DBGFREGSETTYPE_CPU, + /** Device record. */ + DBGFREGSETTYPE_DEVICE, + /** End of valid record types. */ + DBGFREGSETTYPE_END +} DBGFREGSETTYPE; + + +/** + * Register set registration record. + */ +typedef struct DBGFREGSET +{ + /** String space core. */ + RTSTRSPACECORE Core; + /** The registration record type. */ + DBGFREGSETTYPE enmType; + /** The user argument for the callbacks. */ + union + { + /** The CPU view. */ + PVMCPU pVCpu; + /** The device view. */ + PPDMDEVINS pDevIns; + /** The general view. */ + void *pv; + } uUserArg; + + /** The register descriptors. */ + PCDBGFREGDESC paDescs; + /** The number of register descriptors. */ + uint32_t cDescs; + + /** Array of lookup records. + * The first part of the array runs parallel to paDescs, the rest are + * covering for aliases and bitfield variations. It's done this way to + * simplify the query all operations. */ + struct DBGFREGLOOKUP *paLookupRecs; + /** The number of lookup records. */ + uint32_t cLookupRecs; + + /** The register name prefix. */ + char szPrefix[1]; +} DBGFREGSET; +/** Pointer to a register registration record. */ +typedef DBGFREGSET *PDBGFREGSET; +/** Pointer to a const register registration record. */ +typedef DBGFREGSET const *PCDBGFREGSET; + + +/** + * Register lookup record. + */ +typedef struct DBGFREGLOOKUP +{ + /** The string space core. */ + RTSTRSPACECORE Core; + /** Pointer to the set. */ + PCDBGFREGSET pSet; + /** Pointer to the register descriptor. */ + PCDBGFREGDESC pDesc; + /** If an alias this points to the alias descriptor, NULL if not. */ + PCDBGFREGALIAS pAlias; + /** If a sub-field this points to the sub-field descriptor, NULL if not. */ + PCDBGFREGSUBFIELD pSubField; +} DBGFREGLOOKUP; +/** Pointer to a register lookup record. */ +typedef DBGFREGLOOKUP *PDBGFREGLOOKUP; +/** Pointer to a const register lookup record. */ +typedef DBGFREGLOOKUP const *PCDBGFREGLOOKUP; + + +/** + * Argument packet from DBGFR3RegNmQueryAll to dbgfR3RegNmQueryAllWorker. + */ +typedef struct DBGFR3REGNMQUERYALLARGS +{ + /** The output register array. */ + PDBGFREGENTRYNM paRegs; + /** The number of entries in the output array. */ + size_t cRegs; + /** The current register number when enumerating the string space. */ + size_t iReg; +} DBGFR3REGNMQUERYALLARGS; +/** Pointer to a dbgfR3RegNmQueryAllWorker argument packet. */ +typedef DBGFR3REGNMQUERYALLARGS *PDBGFR3REGNMQUERYALLARGS; + + +/** + * Argument packet passed by DBGFR3RegNmPrintfV to dbgfR3RegNmPrintfCbOutput + * and dbgfR3RegNmPrintfCbFormat. + */ +typedef struct DBGFR3REGNMPRINTFARGS +{ + /** The VM handle. */ + PVM pVM; + /** The target CPU. */ + VMCPUID idCpu; + /** Set if we're looking at guest registers. */ + bool fGuestRegs; + /** The output buffer. */ + char *pszBuf; + /** The format string. */ + const char *pszFormat; + /** The va list with format arguments. */ + va_list va; + + /** The current buffer offset. */ + size_t offBuf; + /** The amount of buffer space left, not counting the terminator char. */ + size_t cchLeftBuf; + /** The status code of the whole operation. First error is return, + * subsequent ones are suppressed. */ + int rc; +} DBGFR3REGNMPRINTFARGS; +/** Pointer to a DBGFR3RegNmPrintfV argument packet. */ +typedef DBGFR3REGNMPRINTFARGS *PDBGFR3REGNMPRINTFARGS; + + + +/** + * Initializes the register database. + * + * @returns VBox status code. + * @param pVM The VM handle. + */ +int dbgfR3RegInit(PVM pVM) +{ + int rc = VINF_SUCCESS; + if (!pVM->dbgf.s.fRegDbInitialized) + { + rc = RTSemRWCreate(&pVM->dbgf.s.hRegDbLock); + pVM->dbgf.s.fRegDbInitialized = RT_SUCCESS(rc); + } + return rc; +} + + +/** + * Terminates the register database. + * + * @param pVM The VM handle. + */ +void dbgfR3RegTerm(PVM pVM) +{ + RTSemRWDestroy(pVM->dbgf.s.hRegDbLock); + pVM->dbgf.s.hRegDbLock = NIL_RTSEMRW; + pVM->dbgf.s.fRegDbInitialized = false; +} + + +/** + * Validates a register name. + * + * This is used for prefixes, aliases and field names. + * + * @returns true if valid, false if not. + * @param pszName The register name to validate. + * @param chDot Set to '.' if accepted, otherwise 0. + */ +static bool dbgfR3RegIsNameValid(const char *pszName, char chDot) +{ + const char *psz = pszName; + if (!RT_C_IS_ALPHA(*psz)) + return false; + char ch; + while ((ch = *++psz)) + if ( !RT_C_IS_LOWER(ch) + && !RT_C_IS_DIGIT(ch) + && ch != '_' + && ch != chDot) + return false; + if (psz - pszName > DBGF_REG_MAX_NAME) + return false; + return true; +} + + +/** + * Common worker for registering a register set. + * + * @returns VBox status code. + * @param pVM The VM handle. + * @param paRegisters The register descriptors. + * @param enmType The set type. + * @param pvUserArg The user argument for the callbacks. + * @param pszPrefix The name prefix. + * @param iInstance The instance number to be appended to @a + * pszPrefix when creating the set name. + */ +static int dbgfR3RegRegisterCommon(PVM pVM, PCDBGFREGDESC paRegisters, DBGFREGSETTYPE enmType, void *pvUserArg, + const char *pszPrefix, uint32_t iInstance) +{ + /* + * Validate input. + */ + /* The name components. */ + AssertMsgReturn(dbgfR3RegIsNameValid(pszPrefix, 0), ("%s\n", pszPrefix), VERR_INVALID_NAME); + const char *psz = RTStrEnd(pszPrefix, RTSTR_MAX); + bool const fNeedUnderscore = RT_C_IS_DIGIT(psz[-1]); + size_t const cchPrefix = psz - pszPrefix + fNeedUnderscore; + AssertMsgReturn(cchPrefix < RT_SIZEOFMEMB(DBGFREGSET, szPrefix) - 4 - 1, ("%s\n", pszPrefix), VERR_INVALID_NAME); + + AssertMsgReturn(iInstance <= 9999, ("%d\n", iInstance), VERR_INVALID_NAME); + + /* The descriptors. */ + uint32_t cLookupRecs = 0; + uint32_t iDesc; + for (iDesc = 0; paRegisters[iDesc].pszName != NULL; iDesc++) + { + AssertMsgReturn(dbgfR3RegIsNameValid(paRegisters[iDesc].pszName, 0), ("%s (#%u)\n", paRegisters[iDesc].pszName, iDesc), VERR_INVALID_NAME); + + if (enmType == DBGFREGSETTYPE_CPU) + AssertMsgReturn((unsigned)paRegisters[iDesc].enmReg == iDesc && iDesc < (unsigned)DBGFREG_END, + ("%d iDesc=%d\n", paRegisters[iDesc].enmReg, iDesc), + VERR_INVALID_PARAMETER); + else + AssertReturn(paRegisters[iDesc].enmReg == DBGFREG_END, VERR_INVALID_PARAMETER); + AssertReturn( paRegisters[iDesc].enmType > DBGFREGVALTYPE_INVALID + && paRegisters[iDesc].enmType < DBGFREGVALTYPE_END, VERR_INVALID_PARAMETER); + AssertMsgReturn(!(paRegisters[iDesc].fFlags & ~DBGFREG_FLAGS_READ_ONLY), + ("%#x (#%u)\n", paRegisters[iDesc].fFlags, iDesc), + VERR_INVALID_PARAMETER); + AssertPtrReturn(paRegisters[iDesc].pfnGet, VERR_INVALID_PARAMETER); + AssertPtrReturn(paRegisters[iDesc].pfnSet, VERR_INVALID_PARAMETER); + + uint32_t iAlias = 0; + PCDBGFREGALIAS paAliases = paRegisters[iDesc].paAliases; + if (paAliases) + { + AssertPtrReturn(paAliases, VERR_INVALID_PARAMETER); + for (; paAliases[iAlias].pszName; iAlias++) + { + AssertMsgReturn(dbgfR3RegIsNameValid(paAliases[iAlias].pszName, 0), ("%s (%s)\n", paAliases[iAlias].pszName, paRegisters[iDesc].pszName), VERR_INVALID_NAME); + AssertReturn( paAliases[iAlias].enmType > DBGFREGVALTYPE_INVALID + && paAliases[iAlias].enmType < DBGFREGVALTYPE_END, VERR_INVALID_PARAMETER); + } + } + + uint32_t iSubField = 0; + PCDBGFREGSUBFIELD paSubFields = paRegisters[iDesc].paSubFields; + if (paSubFields) + { + AssertPtrReturn(paSubFields, VERR_INVALID_PARAMETER); + for (; paSubFields[iSubField].pszName; iSubField++) + { + AssertMsgReturn(dbgfR3RegIsNameValid(paSubFields[iSubField].pszName, '.'), ("%s (%s)\n", paSubFields[iSubField].pszName, paRegisters[iDesc].pszName), VERR_INVALID_NAME); + AssertReturn(paSubFields[iSubField].iFirstBit + paSubFields[iSubField].cBits <= 128, VERR_INVALID_PARAMETER); + AssertReturn(paSubFields[iSubField].cBits + paSubFields[iSubField].cShift <= 128, VERR_INVALID_PARAMETER); + AssertPtrNullReturn(paSubFields[iSubField].pfnGet, VERR_INVALID_POINTER); + AssertPtrNullReturn(paSubFields[iSubField].pfnSet, VERR_INVALID_POINTER); + } + } + + cLookupRecs += (1 + iAlias) * (1 + iSubField); + } + + /* Check the instance number of the CPUs. */ + AssertReturn(enmType != DBGFREGSETTYPE_CPU || iInstance < pVM->cCpus, VERR_INVALID_CPU_ID); + + /* + * Allocate a new record and all associated lookup records. + */ + size_t cbRegSet = RT_OFFSETOF(DBGFREGSET, szPrefix[cchPrefix + 4 + 1]); + cbRegSet = RT_ALIGN_Z(cbRegSet, 32); + size_t const offLookupRecArray = cbRegSet; + cbRegSet += cLookupRecs * sizeof(DBGFREGLOOKUP); + + PDBGFREGSET pRegSet = (PDBGFREGSET)MMR3HeapAllocZ(pVM, MM_TAG_DBGF_REG, cbRegSet); + if (!pRegSet) + return VERR_NO_MEMORY; + + /* + * Initialize the new record. + */ + pRegSet->Core.pszString = pRegSet->szPrefix; + pRegSet->enmType = enmType; + pRegSet->uUserArg.pv = pvUserArg; + pRegSet->paDescs = paRegisters; + pRegSet->cDescs = iDesc; + pRegSet->cLookupRecs = cLookupRecs; + pRegSet->paLookupRecs = (PDBGFREGLOOKUP)((uintptr_t)pRegSet + offLookupRecArray); + if (fNeedUnderscore) + RTStrPrintf(pRegSet->szPrefix, cchPrefix + 4 + 1, "%s_%u", pszPrefix, iInstance); + else + RTStrPrintf(pRegSet->szPrefix, cchPrefix + 4 + 1, "%s%u", pszPrefix, iInstance); + + + /* + * Initialize the lookup records. See DBGFREGSET::paLookupRecs. + */ + char szName[DBGF_REG_MAX_NAME * 3 + 16]; + strcpy(szName, pRegSet->szPrefix); + char *pszReg = strchr(szName, '\0'); + *pszReg++ = '.'; + + /* Array parallel to the descriptors. */ + int rc = VINF_SUCCESS; + PDBGFREGLOOKUP pLookupRec = &pRegSet->paLookupRecs[0]; + for (iDesc = 0; paRegisters[iDesc].pszName != NULL && RT_SUCCESS(rc); iDesc++) + { + strcpy(pszReg, paRegisters[iDesc].pszName); + pLookupRec->Core.pszString = MMR3HeapStrDup(pVM, MM_TAG_DBGF_REG, szName); + if (!pLookupRec->Core.pszString) + rc = VERR_NO_STR_MEMORY; + pLookupRec->pSet = pRegSet; + pLookupRec->pDesc = &paRegisters[iDesc]; + pLookupRec->pAlias = NULL; + pLookupRec->pSubField = NULL; + pLookupRec++; + } + + /* Aliases and sub-fields. */ + for (iDesc = 0; paRegisters[iDesc].pszName != NULL && RT_SUCCESS(rc); iDesc++) + { + PCDBGFREGALIAS pCurAlias = NULL; /* first time we add sub-fields for the real name. */ + PCDBGFREGALIAS pNextAlias = paRegisters[iDesc].paAliases; + const char *pszRegName = paRegisters[iDesc].pszName; + while (RT_SUCCESS(rc)) + { + /* Add sub-field records. */ + PCDBGFREGSUBFIELD paSubFields = paRegisters[iDesc].paSubFields; + if (paSubFields) + { + size_t cchReg = strlen(pszRegName); + memcpy(pszReg, pszRegName, cchReg); + char *pszSub = &pszReg[cchReg]; + *pszSub++ = '.'; + for (uint32_t iSubField = 0; paSubFields[iSubField].pszName && RT_SUCCESS(rc); iSubField++) + { + strcpy(pszSub, paSubFields[iSubField].pszName); + pLookupRec->Core.pszString = MMR3HeapStrDup(pVM, MM_TAG_DBGF_REG, szName); + if (!pLookupRec->Core.pszString) + rc = VERR_NO_STR_MEMORY; + pLookupRec->pSet = pRegSet; + pLookupRec->pDesc = &paRegisters[iDesc]; + pLookupRec->pAlias = pCurAlias; + pLookupRec->pSubField = &paSubFields[iSubField]; + pLookupRec++; + } + } + + /* Advance to the next alias. */ + pCurAlias = pNextAlias++; + if (!pCurAlias) + break; + pszRegName = pCurAlias->pszName; + if (!pszRegName) + break; + + /* The alias record. */ + strcpy(pszReg, pszRegName); + pLookupRec->Core.pszString = MMR3HeapStrDup(pVM, MM_TAG_DBGF_REG, szName); + if (!pLookupRec->Core.pszString) + rc = VERR_NO_STR_MEMORY; + pLookupRec->pSet = pRegSet; + pLookupRec->pDesc = &paRegisters[iDesc]; + pLookupRec->pAlias = pCurAlias; + pLookupRec->pSubField = NULL; + pLookupRec++; + } + } + Assert(pLookupRec == &pRegSet->paLookupRecs[pRegSet->cLookupRecs]); + + if (RT_SUCCESS(rc)) + { + /* + * Insert the record into the register set string space and optionally into + * the CPU register set cache. + */ + DBGF_REG_DB_LOCK_WRITE(pVM); + + bool fInserted = RTStrSpaceInsert(&pVM->dbgf.s.RegSetSpace, &pRegSet->Core); + if (fInserted) + { + pVM->dbgf.s.cRegs += pRegSet->cDescs; + if (enmType == DBGFREGSETTYPE_CPU) + { + if (pRegSet->cDescs > DBGFREG_ALL_COUNT) + pVM->dbgf.s.cRegs -= pRegSet->cDescs - DBGFREG_ALL_COUNT; + if (!strcmp(pszPrefix, "cpu")) + pVM->aCpus[iInstance].dbgf.s.pGuestRegSet = pRegSet; + else + pVM->aCpus[iInstance].dbgf.s.pHyperRegSet = pRegSet; + } + + PDBGFREGLOOKUP paLookupRecs = pRegSet->paLookupRecs; + uint32_t iLookupRec = pRegSet->cLookupRecs; + while (iLookupRec-- > 0) + { + bool fInserted2 = RTStrSpaceInsert(&pVM->dbgf.s.RegSpace, &paLookupRecs[iLookupRec].Core); + AssertMsg(fInserted2, ("'%s'", paLookupRecs[iLookupRec].Core.pszString)); + } + + DBGF_REG_DB_UNLOCK_WRITE(pVM); + return VINF_SUCCESS; + } + + DBGF_REG_DB_UNLOCK_WRITE(pVM); + rc = VERR_DUPLICATE; + } + + /* + * Bail out. + */ + for (uint32_t i = 0; i < pRegSet->cLookupRecs; i++) + MMR3HeapFree((char *)pRegSet->paLookupRecs[i].Core.pszString); + MMR3HeapFree(pRegSet); + + return rc; +} + + +/** + * Registers a set of registers for a CPU. + * + * @returns VBox status code. + * @param pVM The VM handle. + * @param pVCpu The virtual CPU handle. + * @param paRegisters The register descriptors. + * @param fGuestRegs Set if it's the guest registers, clear if + * hypervisor registers. + */ +VMMR3_INT_DECL(int) DBGFR3RegRegisterCpu(PVM pVM, PVMCPU pVCpu, PCDBGFREGDESC paRegisters, bool fGuestRegs) +{ + if (!pVM->dbgf.s.fRegDbInitialized) + { + int rc = dbgfR3RegInit(pVM); + if (RT_FAILURE(rc)) + return rc; + } + + return dbgfR3RegRegisterCommon(pVM, paRegisters, DBGFREGSETTYPE_CPU, pVCpu, fGuestRegs ? "cpu" : "hypercpu", pVCpu->idCpu); +} + + +/** + * Registers a set of registers for a device. + * + * @returns VBox status code. + * @param enmReg The register identifier. + * @param enmType The register type. This is for sort out + * aliases. Pass DBGFREGVALTYPE_INVALID to get + * the standard name. + */ +VMMR3DECL(int) DBGFR3RegRegisterDevice(PVM pVM, PCDBGFREGDESC paRegisters, PPDMDEVINS pDevIns, const char *pszPrefix, uint32_t iInstance) +{ + VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); + AssertPtrReturn(paRegisters, VERR_INVALID_POINTER); + AssertPtrReturn(pDevIns, VERR_INVALID_POINTER); + AssertPtrReturn(pszPrefix, VERR_INVALID_POINTER); + + return dbgfR3RegRegisterCommon(pVM, paRegisters, DBGFREGSETTYPE_DEVICE, pDevIns, pszPrefix, iInstance); +} + + +/** + * Clears the register value variable. + * + * @param pValue The variable to clear. + */ +DECLINLINE(void) dbgfR3RegValClear(PDBGFREGVAL pValue) +{ + pValue->au64[0] = 0; + pValue->au64[1] = 0; +} + + +/** + * Sets a 80-bit floating point variable to a 64-bit unsigned interger value. + * + * @param pValue The value. + * @param u64 The integer value. + */ +DECLINLINE(void) dbgfR3RegValR80SetU64(PDBGFREGVAL pValue, uint64_t u64) +{ + /** @todo fixme */ + pValue->r80.s.fSign = 0; + pValue->r80.s.uExponent = 16383; + pValue->r80.s.u64Mantissa = u64; +} + + +/** + * Sets a 80-bit floating point variable to a 64-bit unsigned interger value. + * + * @param pValue The value. + * @param u128 The integer value. + */ +DECLINLINE(void) dbgfR3RegValR80SetU128(PDBGFREGVAL pValue, RTUINT128U u128) +{ + /** @todo fixme */ + pValue->r80.s.fSign = 0; + pValue->r80.s.uExponent = 16383; + pValue->r80.s.u64Mantissa = u128.s.Lo; +} + + +/** + * Get a 80-bit floating point variable as a 64-bit unsigned integer. + * + * @returns 64-bit unsigned integer. + * @param pValue The value. + */ +DECLINLINE(uint64_t) dbgfR3RegValR80GetU64(PCDBGFREGVAL pValue) +{ + /** @todo stupid, stupid MSC. */ + return pValue->r80.s.u64Mantissa; +} + + +/** + * Get a 80-bit floating point variable as a 128-bit unsigned integer. + * + * @returns 128-bit unsigned integer. + * @param pValue The value. + */ +DECLINLINE(RTUINT128U) dbgfR3RegValR80GetU128(PCDBGFREGVAL pValue) +{ + /** @todo stupid, stupid MSC. */ + RTUINT128U uRet; +#if 0 + uRet.s.Lo = (uint64_t)InVal.lrd; + uRet.s.Hi = (uint64_t)InVal.lrd / _4G / _4G; +#else + uRet.s.Lo = pValue->r80.s.u64Mantissa; + uRet.s.Hi = 0; +#endif + return uRet; +} + + +/** + * Performs a cast between register value types. + * + * @retval VINF_SUCCESS + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VERR_DBGF_UNSUPPORTED_CAST + * + * @param pValue The value to cast (input + output). + * @param enmFromType The input value. + * @param enmToType The desired output value. + */ +static int dbgfR3RegValCast(PDBGFREGVAL pValue, DBGFREGVALTYPE enmFromType, DBGFREGVALTYPE enmToType) +{ + DBGFREGVAL const InVal = *pValue; + dbgfR3RegValClear(pValue); + + /* Note! No default cases here as gcc warnings about missing enum values + are desired. */ + switch (enmFromType) + { + case DBGFREGVALTYPE_U8: + switch (enmToType) + { + case DBGFREGVALTYPE_U8: pValue->u8 = InVal.u8; return VINF_SUCCESS; + case DBGFREGVALTYPE_U16: pValue->u16 = InVal.u8; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_U32: pValue->u32 = InVal.u8; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_U64: pValue->u64 = InVal.u8; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_U128: pValue->u128.s.Lo = InVal.u8; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_R80: dbgfR3RegValR80SetU64(pValue, InVal.u8); return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_DTR: return VERR_DBGF_UNSUPPORTED_CAST; + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + } + break; + + case DBGFREGVALTYPE_U16: + switch (enmToType) + { + case DBGFREGVALTYPE_U8: pValue->u8 = InVal.u16; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U16: pValue->u16 = InVal.u16; return VINF_SUCCESS; + case DBGFREGVALTYPE_U32: pValue->u32 = InVal.u16; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_U64: pValue->u64 = InVal.u16; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_U128: pValue->u128.s.Lo = InVal.u16; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_R80: dbgfR3RegValR80SetU64(pValue, InVal.u16); return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_DTR: return VERR_DBGF_UNSUPPORTED_CAST; + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + } + break; + + case DBGFREGVALTYPE_U32: + switch (enmToType) + { + case DBGFREGVALTYPE_U8: pValue->u8 = InVal.u32; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U16: pValue->u16 = InVal.u32; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U32: pValue->u32 = InVal.u32; return VINF_SUCCESS; + case DBGFREGVALTYPE_U64: pValue->u64 = InVal.u32; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_U128: pValue->u128.s.Lo = InVal.u32; return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_R80: dbgfR3RegValR80SetU64(pValue, InVal.u32); return VINF_DBGF_ZERO_EXTENDED_REGISTER; + case DBGFREGVALTYPE_DTR: return VERR_DBGF_UNSUPPORTED_CAST; + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + } + break; + + case DBGFREGVALTYPE_U64: + switch (enmToType) + { + case DBGFREGVALTYPE_U8: pValue->u8 = InVal.u64; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U16: pValue->u16 = InVal.u64; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U32: pValue->u32 = InVal.u64; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U64: pValue->u64 = InVal.u64; return VINF_SUCCESS; + case DBGFREGVALTYPE_U128: pValue->u128.s.Lo = InVal.u64; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_R80: dbgfR3RegValR80SetU64(pValue, InVal.u64); return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_DTR: return VERR_DBGF_UNSUPPORTED_CAST; + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + } + break; + + case DBGFREGVALTYPE_U128: + switch (enmToType) + { + case DBGFREGVALTYPE_U8: pValue->u8 = InVal.u128.s.Lo; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U16: pValue->u16 = InVal.u128.s.Lo; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U32: pValue->u32 = InVal.u128.s.Lo; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U64: pValue->u64 = InVal.u128.s.Lo; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U128: pValue->u128 = InVal.u128; return VINF_SUCCESS; + case DBGFREGVALTYPE_R80: dbgfR3RegValR80SetU128(pValue, InVal.u128); return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_DTR: return VERR_DBGF_UNSUPPORTED_CAST; + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + } + break; + + case DBGFREGVALTYPE_R80: + switch (enmToType) + { + case DBGFREGVALTYPE_U8: pValue->u8 = (uint8_t )dbgfR3RegValR80GetU64(&InVal); return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U16: pValue->u16 = (uint16_t)dbgfR3RegValR80GetU64(&InVal); return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U32: pValue->u32 = (uint32_t)dbgfR3RegValR80GetU64(&InVal); return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U64: pValue->u64 = (uint64_t)dbgfR3RegValR80GetU64(&InVal); return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U128: pValue->u128 = dbgfR3RegValR80GetU128(&InVal); return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_R80: pValue->r80 = InVal.r80; return VINF_SUCCESS; + case DBGFREGVALTYPE_DTR: return VERR_DBGF_UNSUPPORTED_CAST; + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + } + break; + + case DBGFREGVALTYPE_DTR: + switch (enmToType) + { + case DBGFREGVALTYPE_U8: pValue->u8 = InVal.dtr.u64Base; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U16: pValue->u16 = InVal.dtr.u64Base; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U32: pValue->u32 = InVal.dtr.u64Base; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U64: pValue->u64 = InVal.dtr.u64Base; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_U128: pValue->u128.s.Lo = InVal.dtr.u64Base; return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_R80: dbgfR3RegValR80SetU64(pValue, InVal.dtr.u64Base); return VINF_DBGF_TRUNCATED_REGISTER; + case DBGFREGVALTYPE_DTR: pValue->dtr = InVal.dtr; return VINF_SUCCESS; + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + } + break; + + case DBGFREGVALTYPE_INVALID: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_32BIT_HACK: + break; + } + + AssertMsgFailed(("%d / %d\n", enmFromType, enmToType)); + return VERR_DBGF_UNSUPPORTED_CAST; +} + + +/** + * Worker for the CPU register queries. + * + * @returns VBox status code. + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idCpu The virtual CPU ID. + * @param enmReg The register to query. + * @param enmType The desired return type. + * @param fGuestRegs Query guest CPU registers if set (true), + * hypervisor CPU registers if clear (false). + * @param pValue Where to return the register value. + */ +static DECLCALLBACK(int) dbgfR3RegCpuQueryWorkerOnCpu(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, DBGFREGVALTYPE enmType, + bool fGuestRegs, PDBGFREGVAL pValue) +{ + int rc = VINF_SUCCESS; + DBGF_REG_DB_LOCK_READ(pVM); + + /* + * Look up the register set of the specified CPU. + */ + PDBGFREGSET pSet = fGuestRegs + ? pVM->aCpus[idCpu].dbgf.s.pGuestRegSet + : pVM->aCpus[idCpu].dbgf.s.pHyperRegSet; + if (RT_LIKELY(pSet)) + { + /* + * Look up the register and get the register value. + */ + if (RT_LIKELY(pSet->cDescs > (size_t)enmReg)) + { + PCDBGFREGDESC pDesc = &pSet->paDescs[enmReg]; + + pValue->au64[0] = pValue->au64[1] = 0; + rc = pDesc->pfnGet(pSet->uUserArg.pv, pDesc, pValue); + if (RT_SUCCESS(rc)) + { + /* + * Do the cast if the desired return type doesn't match what + * the getter returned. + */ + if (pDesc->enmType == enmType) + rc = VINF_SUCCESS; + else + rc = dbgfR3RegValCast(pValue, pDesc->enmType, enmType); + } + } + else + rc = VERR_DBGF_REGISTER_NOT_FOUND; + } + else + rc = VERR_INVALID_CPU_ID; + + DBGF_REG_DB_UNLOCK_READ(pVM); + return rc; +} + + +/** + * Internal worker for the CPU register query functions. + * + * @returns VBox status code. + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idCpu The virtual CPU ID. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param enmReg The register to query. + * @param enmType The desired return type. + * @param pValue Where to return the register value. + */ +static int dbgfR3RegCpuQueryWorker(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, DBGFREGVALTYPE enmType, PDBGFREGVAL pValue) +{ + VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); + AssertMsgReturn(enmReg >= DBGFREG_AL && enmReg <= DBGFREG_END, ("%d\n", enmReg), VERR_INVALID_PARAMETER); + + bool const fGuestRegs = !(idCpu & DBGFREG_HYPER_VMCPUID); + idCpu &= ~DBGFREG_HYPER_VMCPUID; + AssertReturn(idCpu < pVM->cCpus, VERR_INVALID_CPU_ID); + + return VMR3ReqCallWait(pVM, idCpu, (PFNRT)dbgfR3RegCpuQueryWorkerOnCpu, 6, + pVM, idCpu, enmReg, enmType, fGuestRegs, pValue); +} + + +/** + * Queries a 8-bit CPU register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * + * @param pVM The VM handle. + * @param idCpu The target CPU ID. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param enmReg The register that's being queried. + * @param pu8 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegCpuQueryU8(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint8_t *pu8) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegCpuQueryWorker(pVM, idCpu, enmReg, DBGFREGVALTYPE_U8, &Value); + if (RT_SUCCESS(rc)) + *pu8 = Value.u8; + else + *pu8 = 0; + return rc; +} + + +/** + * Queries a 16-bit CPU register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idCpu The target CPU ID. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param enmReg The register that's being queried. + * @param pu16 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegCpuQueryU16(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint16_t *pu16) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegCpuQueryWorker(pVM, idCpu, enmReg, DBGFREGVALTYPE_U16, &Value); + if (RT_SUCCESS(rc)) + *pu16 = Value.u16; + else + *pu16 = 0; + return rc; +} + + +/** + * Queries a 32-bit CPU register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idCpu The target CPU ID. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param enmReg The register that's being queried. + * @param pu32 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegCpuQueryU32(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint32_t *pu32) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegCpuQueryWorker(pVM, idCpu, enmReg, DBGFREGVALTYPE_U32, &Value); + if (RT_SUCCESS(rc)) + *pu32 = Value.u32; + else + *pu32 = 0; + return rc; +} + + +/** + * Queries a 64-bit CPU register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idCpu The target CPU ID. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param enmReg The register that's being queried. + * @param pu64 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegCpuQueryU64(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t *pu64) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegCpuQueryWorker(pVM, idCpu, enmReg, DBGFREGVALTYPE_U64, &Value); + if (RT_SUCCESS(rc)) + *pu64 = Value.u64; + else + *pu64 = 0; + return rc; +} + +#if 0 /* rewrite / remove */ + +/** + * Wrapper around CPUMQueryGuestMsr for dbgfR3RegCpuQueryBatchWorker. + * + * @retval VINF_SUCCESS + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * + * @param pVCpu The current CPU. + * @param pReg The where to store the register value and + * size. + * @param idMsr The MSR to get. + */ +static void dbgfR3RegGetMsrBatch(PVMCPU pVCpu, PDBGFREGENTRY pReg, uint32_t idMsr) +{ + pReg->enmType = DBGFREGVALTYPE_U64; + int rc = CPUMQueryGuestMsr(pVCpu, idMsr, &pReg->Val.u64); + if (RT_FAILURE(rc)) + { + AssertMsg(rc == VERR_CPUM_RAISE_GP_0, ("%Rrc\n", rc)); + pReg->Val.u64 = 0; + } +} + + +static DECLCALLBACK(int) dbgfR3RegCpuQueryBatchWorker(PVM pVM, VMCPUID idCpu, PDBGFREGENTRY paRegs, size_t cRegs) +{ +#if 0 + PVMCPU pVCpu = &pVM->aCpus[idCpu]; + PCCPUMCTX pCtx = CPUMQueryGuestCtxPtr(pVCpu); + + PDBGFREGENTRY pReg = paRegs - 1; + while (cRegs-- > 0) + { + pReg++; + pReg->Val.au64[0] = 0; + pReg->Val.au64[1] = 0; + + DBGFREG const enmReg = pReg->enmReg; + AssertMsgReturn(enmReg >= 0 && enmReg <= DBGFREG_END, ("%d (%#x)\n", enmReg, enmReg), VERR_DBGF_REGISTER_NOT_FOUND); + if (enmReg != DBGFREG_END) + { + PCDBGFREGDESC pDesc = &g_aDbgfRegDescs[enmReg]; + if (!pDesc->pfnGet) + { + PCRTUINT128U pu = (PCRTUINT128U)((uintptr_t)pCtx + pDesc->offCtx); + pReg->enmType = pDesc->enmType; + switch (pDesc->enmType) + { + case DBGFREGVALTYPE_U8: pReg->Val.u8 = pu->au8[0]; break; + case DBGFREGVALTYPE_U16: pReg->Val.u16 = pu->au16[0]; break; + case DBGFREGVALTYPE_U32: pReg->Val.u32 = pu->au32[0]; break; + case DBGFREGVALTYPE_U64: pReg->Val.u64 = pu->au64[0]; break; + case DBGFREGVALTYPE_U128: + pReg->Val.au64[0] = pu->au64[0]; + pReg->Val.au64[1] = pu->au64[1]; + break; + case DBGFREGVALTYPE_R80: + pReg->Val.au64[0] = pu->au64[0]; + pReg->Val.au16[5] = pu->au16[5]; + break; + default: + AssertMsgFailedReturn(("%s %d\n", pDesc->pszName, pDesc->enmType), VERR_INTERNAL_ERROR_3); + } + } + else + { + int rc = pDesc->pfnGet(pVCpu, pDesc, pCtx, &pReg->Val.u); + if (RT_FAILURE(rc)) + return rc; + } + } + } + return VINF_SUCCESS; +#else + return VERR_NOT_IMPLEMENTED; +#endif +} + + +/** + * Query a batch of registers. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * + * @param pVM The VM handle. + * @param idCpu The target CPU ID. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param paRegs Pointer to an array of @a cRegs elements. On + * input the enmReg members indicates which + * registers to query. On successful return the + * other members are set. DBGFREG_END can be used + * as a filler. + * @param cRegs The number of entries in @a paRegs. + */ +VMMR3DECL(int) DBGFR3RegCpuQueryBatch(PVM pVM, VMCPUID idCpu, PDBGFREGENTRY paRegs, size_t cRegs) +{ + VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); + AssertReturn(idCpu < pVM->cCpus, VERR_INVALID_CPU_ID); + if (!cRegs) + return VINF_SUCCESS; + AssertReturn(cRegs < _1M, VERR_OUT_OF_RANGE); + AssertPtrReturn(paRegs, VERR_INVALID_POINTER); + size_t iReg = cRegs; + while (iReg-- > 0) + { + DBGFREG enmReg = paRegs[iReg].enmReg; + AssertMsgReturn(enmReg < DBGFREG_END && enmReg >= DBGFREG_AL, ("%d (%#x)", enmReg, enmReg), VERR_DBGF_REGISTER_NOT_FOUND); + } + + return VMR3ReqCallWait(pVM, idCpu, (PFNRT)dbgfR3RegCpuQueryBatchWorker, 4, pVM, idCpu, paRegs, cRegs); +} + + +/** + * Query all registers for a Virtual CPU. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * + * @param pVM The VM handle. + * @param idCpu The target CPU ID. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param paRegs Pointer to an array of @a cRegs elements. + * These will be filled with the CPU register + * values. Overflowing entries will be set to + * DBGFREG_END. The returned registers can be + * accessed by using the DBGFREG values as index. + * @param cRegs The number of entries in @a paRegs. The + * recommended value is DBGFREG_ALL_COUNT. + */ +VMMR3DECL(int) DBGFR3RegCpuQueryAll(PVM pVM, VMCPUID idCpu, PDBGFREGENTRY paRegs, size_t cRegs) +{ + /* + * Validate input. + */ + VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); + AssertReturn(idCpu < pVM->cCpus, VERR_INVALID_CPU_ID); + if (!cRegs) + return VINF_SUCCESS; + AssertReturn(cRegs < _1M, VERR_OUT_OF_RANGE); + AssertPtrReturn(paRegs, VERR_INVALID_POINTER); + + /* + * Convert it into a batch query (lazy bird). + */ + unsigned iReg = 0; + while (iReg < cRegs && iReg < DBGFREG_ALL_COUNT) + { + paRegs[iReg].enmReg = (DBGFREG)iReg; + iReg++; + } + while (iReg < cRegs) + paRegs[iReg++].enmReg = DBGFREG_END; + + return VMR3ReqCallWait(pVM, idCpu, (PFNRT)dbgfR3RegCpuQueryBatchWorker, 4, pVM, idCpu, paRegs, cRegs); +} + +#endif /* rewrite or remove? */ + +/** + * Gets the name of a register. + * + * @returns Pointer to read-only register name (lower case). NULL if the + * parameters are invalid. + * + * @param pVM The VM handle. + * @param enmReg The register identifier. + * @param enmType The register type. This is for sort out + * aliases. Pass DBGFREGVALTYPE_INVALID to get + * the standard name. + */ +VMMR3DECL(const char *) DBGFR3RegCpuName(PVM pVM, DBGFREG enmReg, DBGFREGVALTYPE enmType) +{ + AssertReturn(enmReg >= DBGFREG_AL && enmReg < DBGFREG_END, NULL); + AssertReturn(enmType >= DBGFREGVALTYPE_INVALID && enmType < DBGFREGVALTYPE_END, NULL); + VM_ASSERT_VALID_EXT_RETURN(pVM, NULL); + + PCDBGFREGSET pSet = pVM->aCpus[0].dbgf.s.pGuestRegSet; + if (RT_UNLIKELY(!pSet)) + return NULL; + + PCDBGFREGDESC pDesc = &pSet->paDescs[enmReg]; + PCDBGFREGALIAS pAlias = pDesc->paAliases; + if ( pAlias + && pDesc->enmType != enmType + && enmType != DBGFREGVALTYPE_INVALID) + { + while (pAlias->pszName) + { + if (pAlias->enmType == enmType) + return pAlias->pszName; + pAlias++; + } + } + + return pDesc->pszName; +} + + +/** + * Fold the string to lower case and copy it into the destination buffer. + * + * @returns Number of folder characters, -1 on overflow. + * @param pszSrc The source string. + * @param cchSrc How much to fold and copy. + * @param pszDst The output buffer. + * @param cbDst The size of the output buffer. + */ +static ssize_t dbgfR3RegCopyToLower(const char *pszSrc, size_t cchSrc, char *pszDst, size_t cbDst) +{ + ssize_t cchFolded = 0; + char ch; + while (cchSrc-- > 0 && (ch = *pszSrc++)) + { + if (RT_UNLIKELY(cbDst <= 1)) + return -1; + cbDst--; + + char chLower = RT_C_TO_LOWER(ch); + cchFolded += chLower != ch; + *pszDst++ = chLower; + } + if (RT_UNLIKELY(!cbDst)) + return -1; + *pszDst = '\0'; + return cchFolded; +} + + +/** + * Resolves the register name. + * + * @returns Lookup record. + * @param pVM The VM handle. + * @param idDefCpu The default CPU ID set. + * @param pszReg The register name. + * @param fGuestRegs Default to guest CPU registers if set, the + * hypervisor CPU registers if clear. + */ +static PCDBGFREGLOOKUP dbgfR3RegResolve(PVM pVM, VMCPUID idDefCpu, const char *pszReg, bool fGuestRegs) +{ + DBGF_REG_DB_LOCK_READ(pVM); + + /* Try looking up the name without any case folding or cpu prefixing. */ + PCDBGFREGLOOKUP pLookupRec = (PCDBGFREGLOOKUP)RTStrSpaceGet(&pVM->dbgf.s.RegSpace, pszReg); + if (!pLookupRec) + { + char szName[DBGF_REG_MAX_NAME * 4 + 16]; + + /* Lower case it and try again. */ + ssize_t cchFolded = dbgfR3RegCopyToLower(pszReg, RTSTR_MAX, szName, sizeof(szName) - DBGF_REG_MAX_NAME); + if (cchFolded > 0) + pLookupRec = (PCDBGFREGLOOKUP)RTStrSpaceGet(&pVM->dbgf.s.RegSpace, szName); + if ( !pLookupRec + && cchFolded >= 0 + && idDefCpu != VMCPUID_ANY) + { + /* Prefix it with the specified CPU set. */ + size_t cchCpuSet = RTStrPrintf(szName, sizeof(szName), fGuestRegs ? "cpu%u." : "hypercpu%u.", idDefCpu); + dbgfR3RegCopyToLower(pszReg, RTSTR_MAX, &szName[cchCpuSet], sizeof(szName) - cchCpuSet); + pLookupRec = (PCDBGFREGLOOKUP)RTStrSpaceGet(&pVM->dbgf.s.RegSpace, szName); + } + } + + DBGF_REG_DB_UNLOCK_READ(pVM); + return pLookupRec; +} + + +/** + * On CPU worker for the register queries, used by dbgfR3RegNmQueryWorker and + * dbgfR3RegNmPrintfCbFormatNormal. + * + * @returns VBox status code. + * + * @param pVM The VM handle. + * @param pLookupRec The register lookup record. + * @param enmType The desired return type. + * @param pValue Where to return the register value. + * @param penmType Where to store the register value type. + * Optional. + */ +static DECLCALLBACK(int) dbgfR3RegNmQueryWorkerOnCpu(PVM pVM, PCDBGFREGLOOKUP pLookupRec, DBGFREGVALTYPE enmType, + PDBGFREGVAL pValue, PDBGFREGVALTYPE penmType) +{ + PCDBGFREGDESC pDesc = pLookupRec->pDesc; + PCDBGFREGSET pSet = pLookupRec->pSet; + PCDBGFREGSUBFIELD pSubField = pLookupRec->pSubField; + DBGFREGVALTYPE enmValueType = pDesc->enmType; + int rc; + + /* + * Get the register or sub-field value. + */ + dbgfR3RegValClear(pValue); + if (!pSubField) + { + rc = pDesc->pfnGet(pSet->uUserArg.pv, pDesc, pValue); + if ( pLookupRec->pAlias + && pLookupRec->pAlias->enmType != enmValueType + && RT_SUCCESS(rc)) + { + rc = dbgfR3RegValCast(pValue, enmValueType, pLookupRec->pAlias->enmType); + enmValueType = pLookupRec->pAlias->enmType; + } + } + else + { + if (pSubField->pfnGet) + { + rc = pSubField->pfnGet(pSet->uUserArg.pv, pSubField, &pValue->u128); + enmValueType = DBGFREGVALTYPE_U128; + } + else + { + rc = pDesc->pfnGet(pSet->uUserArg.pv, pDesc, pValue); + if ( pLookupRec->pAlias + && pLookupRec->pAlias->enmType != enmValueType + && RT_SUCCESS(rc)) + { + rc = dbgfR3RegValCast(pValue, enmValueType, pLookupRec->pAlias->enmType); + enmValueType = pLookupRec->pAlias->enmType; + } + if (RT_SUCCESS(rc)) + { + rc = dbgfR3RegValCast(pValue, enmValueType, DBGFREGVALTYPE_U128); + if (RT_SUCCESS(rc)) + { + RTUInt128AssignShiftLeft(&pValue->u128, -pSubField->iFirstBit); + RTUInt128AssignAndNFirstBits(&pValue->u128, pSubField->cBits); + if (pSubField->cShift) + RTUInt128AssignShiftLeft(&pValue->u128, pSubField->cShift); + } + } + } + if (RT_SUCCESS(rc)) + { + unsigned const cBits = pSubField->cBits + pSubField->cShift; + if (cBits <= 8) + enmValueType = DBGFREGVALTYPE_U8; + else if (cBits <= 16) + enmValueType = DBGFREGVALTYPE_U16; + else if (cBits <= 32) + enmValueType = DBGFREGVALTYPE_U32; + else if (cBits <= 64) + enmValueType = DBGFREGVALTYPE_U64; + else + enmValueType = DBGFREGVALTYPE_U128; + rc = dbgfR3RegValCast(pValue, DBGFREGVALTYPE_U128, enmValueType); + } + } + if (RT_SUCCESS(rc)) + { + /* + * Do the cast if the desired return type doesn't match what + * the getter returned. + */ + if ( enmValueType == enmType + || enmType == DBGFREGVALTYPE_END) + { + rc = VINF_SUCCESS; + if (penmType) + *penmType = enmValueType; + } + else + { + rc = dbgfR3RegValCast(pValue, enmValueType, enmType); + if (penmType) + *penmType = RT_SUCCESS(rc) ? enmType : enmValueType; + } + } + + return rc; +} + + +/** + * Worker for the register queries. + * + * @returns VBox status code. + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idDefCpu The virtual CPU ID for the default CPU register + * set. Can be OR'ed with DBGFREG_HYPER_VMCPUID. + * @param pszReg The register to query. + * @param enmType The desired return type. + * @param pValue Where to return the register value. + * @param penmType Where to store the register value type. + * Optional. + */ +static int dbgfR3RegNmQueryWorker(PVM pVM, VMCPUID idDefCpu, const char *pszReg, DBGFREGVALTYPE enmType, + PDBGFREGVAL pValue, PDBGFREGVALTYPE penmType) +{ + /* + * Validate input. + */ + VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); + AssertReturn((idDefCpu & ~DBGFREG_HYPER_VMCPUID) < pVM->cCpus || idDefCpu == VMCPUID_ANY, VERR_INVALID_CPU_ID); + AssertPtrReturn(pszReg, VERR_INVALID_POINTER); + + Assert(enmType > DBGFREGVALTYPE_INVALID && enmType <= DBGFREGVALTYPE_END); + AssertPtr(pValue); + + /* + * Resolve the register and call the getter on the relevant CPU. + */ + bool const fGuestRegs = !(idDefCpu & DBGFREG_HYPER_VMCPUID) && idDefCpu != VMCPUID_ANY; + PCDBGFREGLOOKUP pLookupRec = dbgfR3RegResolve(pVM, idDefCpu, pszReg, fGuestRegs); + if (pLookupRec) + { + if (pLookupRec->pSet->enmType == DBGFREGSETTYPE_CPU) + idDefCpu = pLookupRec->pSet->uUserArg.pVCpu->idCpu; + else if (idDefCpu != VMCPUID_ANY) + idDefCpu &= ~DBGFREG_HYPER_VMCPUID; + return VMR3ReqCallWait(pVM, idDefCpu, (PFNRT)dbgfR3RegNmQueryWorkerOnCpu, 5, pVM, pLookupRec, enmType, pValue, penmType); + } + return VERR_DBGF_REGISTER_NOT_FOUND; +} + + +/** + * Queries a descriptor table register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * + * @param pVM The VM handle. + * @param idDefCpu The default target CPU ID, VMCPUID_ANY if not + * applicable. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param pszReg The register that's being queried. Except for + * CPU registers, this must be on the form + * "set.reg[.sub]". + * @param pValue Where to store the register value. + * @param penmType Where to store the register value type. + */ +VMMR3DECL(int) DBGFR3RegNmQuery(PVM pVM, VMCPUID idDefCpu, const char *pszReg, PDBGFREGVAL pValue, PDBGFREGVALTYPE penmType) +{ + return dbgfR3RegNmQueryWorker(pVM, idDefCpu, pszReg, DBGFREGVALTYPE_END, pValue, penmType); +} + + +/** + * Queries a 8-bit register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * + * @param pVM The VM handle. + * @param idDefCpu The default target CPU ID, VMCPUID_ANY if not + * applicable. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param pszReg The register that's being queried. Except for + * CPU registers, this must be on the form + * "set.reg[.sub]". + * @param pu8 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegNmQueryU8(PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint8_t *pu8) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegNmQueryWorker(pVM, idDefCpu, pszReg, DBGFREGVALTYPE_U8, &Value, NULL); + if (RT_SUCCESS(rc)) + *pu8 = Value.u8; + else + *pu8 = 0; + return rc; +} + + +/** + * Queries a 16-bit register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idDefCpu The default target CPU ID, VMCPUID_ANY if not + * applicable. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param pszReg The register that's being queried. Except for + * CPU registers, this must be on the form + * "set.reg[.sub]". + * @param pu16 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegNmQueryU16(PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint16_t *pu16) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegNmQueryWorker(pVM, idDefCpu, pszReg, DBGFREGVALTYPE_U16, &Value, NULL); + if (RT_SUCCESS(rc)) + *pu16 = Value.u16; + else + *pu16 = 0; + return rc; +} + + +/** + * Queries a 32-bit register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idDefCpu The default target CPU ID, VMCPUID_ANY if not + * applicable. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param pszReg The register that's being queried. Except for + * CPU registers, this must be on the form + * "set.reg[.sub]". + * @param pu32 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegNmQueryU32(PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint32_t *pu32) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegNmQueryWorker(pVM, idDefCpu, pszReg, DBGFREGVALTYPE_U32, &Value, NULL); + if (RT_SUCCESS(rc)) + *pu32 = Value.u32; + else + *pu32 = 0; + return rc; +} + + +/** + * Queries a 64-bit register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idDefCpu The default target CPU ID, VMCPUID_ANY if not + * applicable. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param pszReg The register that's being queried. Except for + * CPU registers, this must be on the form + * "set.reg[.sub]". + * @param pu64 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegNmQueryU64(PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint64_t *pu64) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegNmQueryWorker(pVM, idDefCpu, pszReg, DBGFREGVALTYPE_U64, &Value, NULL); + if (RT_SUCCESS(rc)) + *pu64 = Value.u64; + else + *pu64 = 0; + return rc; +} + + +/** + * Queries a 128-bit register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idDefCpu The default target CPU ID, VMCPUID_ANY if not + * applicable. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param pszReg The register that's being queried. Except for + * CPU registers, this must be on the form + * "set.reg[.sub]". + * @param pu128 Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegNmQueryU128(PVM pVM, VMCPUID idDefCpu, const char *pszReg, PRTUINT128U pu128) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegNmQueryWorker(pVM, idDefCpu, pszReg, DBGFREGVALTYPE_U128, &Value, NULL); + if (RT_SUCCESS(rc)) + *pu128 = Value.u128; + else + pu128->s.Hi = pu128->s.Lo = 0; + return rc; +} + + +#if 0 +/** + * Queries a long double register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idDefCpu The default target CPU ID, VMCPUID_ANY if not + * applicable. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param pszReg The register that's being queried. Except for + * CPU registers, this must be on the form + * "set.reg[.sub]". + * @param plrd Where to store the register value. + */ +VMMR3DECL(int) DBGFR3RegNmQueryLrd(PVM pVM, VMCPUID idDefCpu, const char *pszReg, long double *plrd) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegNmQueryWorker(pVM, idDefCpu, pszReg, DBGFREGVALTYPE_R80, &Value, NULL); + if (RT_SUCCESS(rc)) + *plrd = Value.lrd; + else + *plrd = 0; + return rc; +} +#endif + + +/** + * Queries a descriptor table register value. + * + * @retval VINF_SUCCESS + * @retval VERR_INVALID_VM_HANDLE + * @retval VERR_INVALID_CPU_ID + * @retval VERR_DBGF_REGISTER_NOT_FOUND + * @retval VERR_DBGF_UNSUPPORTED_CAST + * @retval VINF_DBGF_TRUNCATED_REGISTER + * @retval VINF_DBGF_ZERO_EXTENDED_REGISTER + * + * @param pVM The VM handle. + * @param idDefCpu The default target CPU ID, VMCPUID_ANY if not + * applicable. Can be OR'ed with + * DBGFREG_HYPER_VMCPUID. + * @param pszReg The register that's being queried. Except for + * CPU registers, this must be on the form + * "set.reg[.sub]". + * @param pu64Base Where to store the register base value. + * @param pu32Limit Where to store the register limit value. + */ +VMMR3DECL(int) DBGFR3RegNmQueryXdtr(PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint64_t *pu64Base, uint32_t *pu32Limit) +{ + DBGFREGVAL Value; + int rc = dbgfR3RegNmQueryWorker(pVM, idDefCpu, pszReg, DBGFREGVALTYPE_DTR, &Value, NULL); + if (RT_SUCCESS(rc)) + { + *pu64Base = Value.dtr.u64Base; + *pu32Limit = Value.dtr.u32Limit; + } + else + { + *pu64Base = 0; + *pu32Limit = 0; + } + return rc; +} + + +/// @todo VMMR3DECL(int) DBGFR3RegNmQueryBatch(PVM pVM,VMCPUID idDefCpu, DBGFREGENTRYNM paRegs, size_t cRegs); + + +/** + * Gets the number of registers returned by DBGFR3RegNmQueryAll. + * + * @returns VBox status code. + * @param pVM The VM handle. + * @param pcRegs Where to return the register count. + */ +VMMR3DECL(int) DBGFR3RegNmQueryAllCount(PVM pVM, size_t *pcRegs) +{ + VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); + *pcRegs = pVM->dbgf.s.cRegs; + return VINF_SUCCESS; +} + + +/** + * Pad register entries. + * + * @param paRegs The output array. + * @param cRegs The size of the output array. + * @param iReg The first register to pad. + * @param cRegsToPad The number of registers to pad. + */ +static void dbgfR3RegNmQueryAllPadEntries(PDBGFREGENTRYNM paRegs, size_t cRegs, size_t iReg, size_t cRegsToPad) +{ + if (iReg < cRegs) + { + size_t iEndReg = iReg + cRegsToPad; + if (iEndReg > cRegs) + iEndReg = cRegs; + while (iReg < iEndReg) + { + paRegs[iReg].pszName = NULL; + paRegs[iReg].enmType = DBGFREGVALTYPE_END; + dbgfR3RegValClear(&paRegs[iReg].Val); + iReg++; + } + } +} + + +/** + * Query all registers in a set. + * + * @param pSet The set. + * @param cRegsToQuery The number of registers to query. + * @param paRegs The output array. + * @param cRegs The size of the output array. + */ +static void dbgfR3RegNmQueryAllInSet(PCDBGFREGSET pSet, size_t cRegsToQuery, PDBGFREGENTRYNM paRegs, size_t cRegs) +{ + int rc = VINF_SUCCESS; + + if (cRegsToQuery > pSet->cDescs) + cRegsToQuery = pSet->cDescs; + if (cRegsToQuery > cRegs) + cRegsToQuery = cRegs; + + for (size_t iReg = 0; iReg < cRegsToQuery; iReg++) + { + paRegs[iReg].enmType = pSet->paDescs[iReg].enmType; + paRegs[iReg].pszName = pSet->paLookupRecs[iReg].Core.pszString; + dbgfR3RegValClear(&paRegs[iReg].Val); + int rc2 = pSet->paDescs[iReg].pfnGet(pSet->uUserArg.pv, &pSet->paDescs[iReg], &paRegs[iReg].Val); + AssertRCSuccess(rc2); + if (RT_FAILURE(rc2)) + dbgfR3RegValClear(&paRegs[iReg].Val); + } +} + + +/** + * @callback_method_impl{FNRTSTRSPACECALLBACK, Worker used by + * dbgfR3RegNmQueryAllWorker} + */ +static DECLCALLBACK(int) dbgfR3RegNmQueryAllEnum(PRTSTRSPACECORE pStr, void *pvUser) +{ + PCDBGFREGSET pSet = (PCDBGFREGSET)pStr; + if (pSet->enmType != DBGFREGSETTYPE_CPU) + { + PDBGFR3REGNMQUERYALLARGS pArgs = (PDBGFR3REGNMQUERYALLARGS)pvUser; + if (pArgs->iReg < pArgs->cRegs) + dbgfR3RegNmQueryAllInSet(pSet, pSet->cDescs, &pArgs->paRegs[pArgs->iReg], pArgs->cRegs - pArgs->iReg); + pArgs->iReg += pSet->cDescs; + } + + return 0; +} + + +/** + * @callback_method_impl{FNVMMEMTRENDEZVOUS, Worker used by DBGFR3RegNmQueryAll} + */ +static DECLCALLBACK(VBOXSTRICTRC) dbgfR3RegNmQueryAllWorker(PVM pVM, PVMCPU pVCpu, void *pvUser) +{ + PDBGFR3REGNMQUERYALLARGS pArgs = (PDBGFR3REGNMQUERYALLARGS)pvUser; + PDBGFREGENTRYNM paRegs = pArgs->paRegs; + size_t const cRegs = pArgs->cRegs; + + DBGF_REG_DB_LOCK_READ(pVM); + + /* + * My guest CPU registers. + */ + size_t iCpuReg = pVCpu->idCpu * DBGFREG_ALL_COUNT; + if (pVCpu->dbgf.s.pGuestRegSet) + { + if (iCpuReg < cRegs) + dbgfR3RegNmQueryAllInSet(pVCpu->dbgf.s.pGuestRegSet, DBGFREG_ALL_COUNT, &paRegs[iCpuReg], cRegs - iCpuReg); + } + else + dbgfR3RegNmQueryAllPadEntries(paRegs, cRegs, iCpuReg, DBGFREG_ALL_COUNT); + + /* + * My hypervisor CPU registers. + */ + iCpuReg = pVM->cCpus * DBGFREG_ALL_COUNT + pVCpu->idCpu * DBGFREG_ALL_COUNT; + if (pVCpu->dbgf.s.pHyperRegSet) + { + if (iCpuReg < cRegs) + dbgfR3RegNmQueryAllInSet(pVCpu->dbgf.s.pHyperRegSet, DBGFREG_ALL_COUNT, &paRegs[iCpuReg], cRegs - iCpuReg); + } + else + dbgfR3RegNmQueryAllPadEntries(paRegs, cRegs, iCpuReg, DBGFREG_ALL_COUNT); + + /* + * The primary CPU does all the other registers. + */ + if (pVCpu->idCpu == 0) + { + pArgs->iReg = pVM->cCpus * DBGFREG_ALL_COUNT * 2; + RTStrSpaceEnumerate(&pVM->dbgf.s.RegSetSpace, dbgfR3RegNmQueryAllEnum, pArgs); + dbgfR3RegNmQueryAllPadEntries(paRegs, cRegs, pArgs->iReg, cRegs); + } + + DBGF_REG_DB_UNLOCK_READ(pVM); + return VINF_SUCCESS; /* Ignore errors. */ +} + + +/** + * Queries all register. + * + * @returns VBox status code. + * @param pVM The VM handle. + * @param paRegs The output register value array. The register + * name string is read only and shall not be freed + * or modified. + * @param cRegs The number of entries in @a paRegs. The + * correct size can be obtained by calling + * DBGFR3RegNmQueryAllCount. + */ +VMMR3DECL(int) DBGFR3RegNmQueryAll(PVM pVM, PDBGFREGENTRYNM paRegs, size_t cRegs) +{ + VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); + AssertPtrReturn(paRegs, VERR_INVALID_POINTER); + AssertReturn(cRegs > 0, VERR_OUT_OF_RANGE); + + DBGFR3REGNMQUERYALLARGS Args; + Args.paRegs = paRegs; + Args.cRegs = cRegs; + + return VMMR3EmtRendezvous(pVM, VMMEMTRENDEZVOUS_FLAGS_TYPE_ALL_AT_ONCE, dbgfR3RegNmQueryAllWorker, &Args); +} + + +/** + * Internal worker for DBGFR3RegFormatValue, cbTmp is sufficent. + * + * @copydoc DBGFR3RegFormatValue + */ +DECLINLINE(ssize_t) dbgfR3RegFormatValueInt(char *pszTmp, size_t cbTmp, PCDBGFREGVAL pValue, DBGFREGVALTYPE enmType, + unsigned uBase, signed int cchWidth, signed int cchPrecision, uint32_t fFlags) +{ + switch (enmType) + { + case DBGFREGVALTYPE_U8: + return RTStrFormatU8(pszTmp, cbTmp, pValue->u8, uBase, cchWidth, cchPrecision, fFlags); + case DBGFREGVALTYPE_U16: + return RTStrFormatU16(pszTmp, cbTmp, pValue->u16, uBase, cchWidth, cchPrecision, fFlags); + case DBGFREGVALTYPE_U32: + return RTStrFormatU32(pszTmp, cbTmp, pValue->u32, uBase, cchWidth, cchPrecision, fFlags); + case DBGFREGVALTYPE_U64: + return RTStrFormatU64(pszTmp, cbTmp, pValue->u64, uBase, cchWidth, cchPrecision, fFlags); + case DBGFREGVALTYPE_U128: + return RTStrFormatU128(pszTmp, cbTmp, &pValue->u128, uBase, cchWidth, cchPrecision, fFlags); + case DBGFREGVALTYPE_R80: + return RTStrFormatR80u2(pszTmp, cbTmp, &pValue->r80, cchWidth, cchPrecision, fFlags); + case DBGFREGVALTYPE_DTR: + { + ssize_t cch = RTStrFormatU64(pszTmp, cbTmp, pValue->dtr.u64Base, + 16, 2+16, 0, RTSTR_F_SPECIAL | RTSTR_F_ZEROPAD); + AssertReturn(cch > 0, VERR_INTERNAL_ERROR_4); + pszTmp[cch++] = ':'; + cch += RTStrFormatU64(&pszTmp[cch], cbTmp - cch, pValue->dtr.u32Limit, + 16, 4, 0, RTSTR_F_ZEROPAD | RTSTR_F_32BIT); + return cch; + } + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + /* no default, want gcc warnings */ + } + + RTStrPrintf(pszTmp, cbTmp, "!enmType=%d!", enmType); + return VERR_INTERNAL_ERROR_5; +} + + + +/** + * Format a register value, extended version. + * + * @returns The number of bytes returned, VERR_BUFFER_OVERFLOW on failure. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pValue The value to format. + * @param enmType The value type. + * @param uBase The base (ignored if not applicable). + * @param cchWidth The width if RTSTR_F_WIDTH is set, otherwise + * ignored. + * @param cchPrecision The width if RTSTR_F_PRECISION is set, otherwise + * ignored. + * @param fFlags String formatting flags, RTSTR_F_XXX. + */ +VMMDECL(ssize_t) DBGFR3RegFormatValueEx(char *pszBuf, size_t cbBuf, PCDBGFREGVAL pValue, DBGFREGVALTYPE enmType, + unsigned uBase, signed int cchWidth, signed int cchPrecision, uint32_t fFlags) +{ + /* + * Format to temporary buffer using worker shared with dbgfR3RegNmPrintfCbFormatNormal. + */ + char szTmp[160]; + ssize_t cchOutput = dbgfR3RegFormatValueInt(szTmp, sizeof(szTmp), pValue, enmType, uBase, cchWidth, cchPrecision, fFlags); + if (cchOutput > 0) + { + if ((size_t)cchOutput < cbBuf) + memcpy(pszBuf, szTmp, cchOutput + 1); + else + { + if (cbBuf) + { + memcpy(pszBuf, szTmp, cbBuf - 1); + pszBuf[cbBuf - 1] = '\0'; + } + cchOutput = VERR_BUFFER_OVERFLOW; + } + } + return cchOutput; +} + + +/** + * Format a register value as hexadecimal and with default width according to + * the type. + * + * @returns The number of bytes returned, VERR_BUFFER_OVERFLOW on failure. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pValue The value to format. + * @param enmType The value type. + * @param fSpecial Same as RTSTR_F_SPECIAL. + */ +VMMDECL(ssize_t) DBGFR3RegFormatValue(char *pszBuf, size_t cbBuf, PCDBGFREGVAL pValue, DBGFREGVALTYPE enmType, bool fSpecial) +{ + int cchWidth = 0; + switch (enmType) + { + case DBGFREGVALTYPE_U8: cchWidth = 2 + fSpecial*2; break; + case DBGFREGVALTYPE_U16: cchWidth = 4 + fSpecial*2; break; + case DBGFREGVALTYPE_U32: cchWidth = 8 + fSpecial*2; break; + case DBGFREGVALTYPE_U64: cchWidth = 16 + fSpecial*2; break; + case DBGFREGVALTYPE_U128: cchWidth = 32 + fSpecial*2; break; + case DBGFREGVALTYPE_R80: cchWidth = 0; break; + case DBGFREGVALTYPE_DTR: cchWidth = 16+1+4 + fSpecial*2; break; + + case DBGFREGVALTYPE_32BIT_HACK: + case DBGFREGVALTYPE_END: + case DBGFREGVALTYPE_INVALID: + break; + /* no default, want gcc warnings */ + } + uint32_t fFlags = RTSTR_F_ZEROPAD; + if (fSpecial) + fFlags |= RTSTR_F_SPECIAL; + if (cchWidth != 0) + fFlags |= RTSTR_F_WIDTH; + return DBGFR3RegFormatValueEx(pszBuf, cbBuf, pValue, enmType, 16, cchWidth, 0, fFlags); +} + + +/** + * Format a register using special hacks as well as sub-field specifications + * (the latter isn't implemented yet). + */ +static size_t +dbgfR3RegNmPrintfCbFormatField(PDBGFR3REGNMPRINTFARGS pThis, PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + PCDBGFREGLOOKUP pLookupRec, int cchWidth, int cchPrecision, unsigned fFlags) +{ + char szTmp[160]; + + /* + * Retrieve the register value. + */ + DBGFREGVAL Value; + DBGFREGVALTYPE enmType; + int rc = dbgfR3RegNmQueryWorkerOnCpu(pThis->pVM, pLookupRec, DBGFREGVALTYPE_END, &Value, &enmType); + if (RT_FAILURE(rc)) + { + PCRTSTATUSMSG pErr = RTErrGet(rc); + if (pErr) + return pfnOutput(pvArgOutput, pErr->pszDefine, strlen(pErr->pszDefine)); + return pfnOutput(pvArgOutput, szTmp, RTStrPrintf(szTmp, sizeof(szTmp), "rc=%d", rc)); + } + + char *psz = szTmp; + + /* + * Special case: Format eflags. + */ + if ( pLookupRec->pSet->enmType == DBGFREGSETTYPE_CPU + && pLookupRec->pDesc->enmReg == DBGFREG_RFLAGS + && pLookupRec->pSubField == NULL) + { + rc = dbgfR3RegValCast(&Value, enmType, DBGFREGVALTYPE_U32); + AssertRC(rc); + uint32_t const efl = Value.u32; + + /* the iopl */ + psz += RTStrPrintf(psz, sizeof(szTmp) / 2, "iopl=%u ", X86_EFL_GET_IOPL(efl)); + + /* add flags */ + static const struct + { + const char *pszSet; + const char *pszClear; + uint32_t fFlag; + } aFlags[] = + { + { "vip",NULL, X86_EFL_VIP }, + { "vif",NULL, X86_EFL_VIF }, + { "ac", NULL, X86_EFL_AC }, + { "vm", NULL, X86_EFL_VM }, + { "rf", NULL, X86_EFL_RF }, + { "nt", NULL, X86_EFL_NT }, + { "ov", "nv", X86_EFL_OF }, + { "dn", "up", X86_EFL_DF }, + { "ei", "di", X86_EFL_IF }, + { "tf", NULL, X86_EFL_TF }, + { "ng", "pl", X86_EFL_SF }, + { "zr", "nz", X86_EFL_ZF }, + { "ac", "na", X86_EFL_AF }, + { "po", "pe", X86_EFL_PF }, + { "cy", "nc", X86_EFL_CF }, + }; + for (unsigned i = 0; i < RT_ELEMENTS(aFlags); i++) + { + const char *pszAdd = aFlags[i].fFlag & efl ? aFlags[i].pszSet : aFlags[i].pszClear; + if (pszAdd) + { + *psz++ = *pszAdd++; + *psz++ = *pszAdd++; + if (*pszAdd) + *psz++ = *pszAdd++; + *psz++ = ' '; + } + } + + /* drop trailing space */ + psz--; + } + else + { + /* + * General case. + */ + AssertMsgFailed(("Not implemented: %s\n", pLookupRec->Core.pszString)); + return pfnOutput(pvArgOutput, pLookupRec->Core.pszString, pLookupRec->Core.cchString); + } + + /* Output the string. */ + return pfnOutput(pvArgOutput, szTmp, psz - &szTmp[0]); +} + + +/** + * Formats a register having parsed up to the register name. + */ +static size_t +dbgfR3RegNmPrintfCbFormatNormal(PDBGFR3REGNMPRINTFARGS pThis, PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + PCDBGFREGLOOKUP pLookupRec, unsigned uBase, int cchWidth, int cchPrecision, unsigned fFlags) +{ + char szTmp[160]; + + /* + * Get the register value. + */ + DBGFREGVAL Value; + DBGFREGVALTYPE enmType; + int rc = dbgfR3RegNmQueryWorkerOnCpu(pThis->pVM, pLookupRec, DBGFREGVALTYPE_END, &Value, &enmType); + if (RT_FAILURE(rc)) + { + PCRTSTATUSMSG pErr = RTErrGet(rc); + if (pErr) + return pfnOutput(pvArgOutput, pErr->pszDefine, strlen(pErr->pszDefine)); + return pfnOutput(pvArgOutput, szTmp, RTStrPrintf(szTmp, sizeof(szTmp), "rc=%d", rc)); + } + + /* + * Format the value. + */ + ssize_t cchOutput = dbgfR3RegFormatValueInt(szTmp, sizeof(szTmp), &Value, enmType, uBase, cchWidth, cchPrecision, fFlags); + if (RT_UNLIKELY(cchOutput <= 0)) + { + AssertFailed(); + return pfnOutput(pvArgOutput, "internal-error", sizeof("internal-error") - 1); + } + return pfnOutput(pvArgOutput, szTmp, cchOutput); +} + + +/** + * @callback_method_impl{FNSTRFORMAT} + */ +static DECLCALLBACK(size_t) +dbgfR3RegNmPrintfCbFormat(void *pvArg, PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + const char **ppszFormat, va_list *pArgs, int cchWidth, + int cchPrecision, unsigned fFlags, char chArgSize) +{ + /* + * Parse the format type and hand the job to the appropriate worker. + */ + PDBGFR3REGNMPRINTFARGS pThis = (PDBGFR3REGNMPRINTFARGS)pvArg; + const char *pszFormat = *ppszFormat; + if ( pszFormat[0] != 'V' + || pszFormat[1] != 'R') + { + AssertMsgFailed(("'%s'\n", pszFormat)); + return 0; + } + unsigned offCurly = 2; + if (pszFormat[offCurly] != '{') + { + AssertMsgReturn(pszFormat[offCurly], ("'%s'\n", pszFormat), 0); + offCurly++; + AssertMsgReturn(pszFormat[offCurly] == '{', ("'%s'\n", pszFormat), 0); + } + const char *pachReg = &pszFormat[offCurly + 1]; + + /* + * The end and length of the register. + */ + const char *pszEnd = strchr(pachReg, '}'); + AssertMsgReturn(pszEnd, ("Missing closing curly bracket: '%s'\n", pszFormat), 0); + size_t const cchReg = pszEnd - pachReg; + + /* + * Look up the register - same as dbgfR3RegResolve, except for locking and + * input string termination. + */ + /* Try looking up the name without any case folding or cpu prefixing. */ + PCDBGFREGLOOKUP pLookupRec = (PCDBGFREGLOOKUP)RTStrSpaceGetN(&pThis->pVM->dbgf.s.RegSpace, pachReg, cchReg); + if (!pLookupRec) + { + /* Lower case it and try again. */ + char szName[DBGF_REG_MAX_NAME * 4 + 16]; + ssize_t cchFolded = dbgfR3RegCopyToLower(pachReg, cchReg, szName, sizeof(szName) - DBGF_REG_MAX_NAME); + if (cchFolded > 0) + pLookupRec = (PCDBGFREGLOOKUP)RTStrSpaceGet(&pThis->pVM->dbgf.s.RegSpace, szName); + if ( !pLookupRec + && cchFolded >= 0 + && pThis->idCpu != VMCPUID_ANY) + { + /* Prefix it with the specified CPU set. */ + size_t cchCpuSet = RTStrPrintf(szName, sizeof(szName), pThis->fGuestRegs ? "cpu%u." : "hypercpu%u.", pThis->idCpu); + dbgfR3RegCopyToLower(pachReg, cchReg, &szName[cchCpuSet], sizeof(szName) - cchCpuSet); + pLookupRec = (PCDBGFREGLOOKUP)RTStrSpaceGet(&pThis->pVM->dbgf.s.RegSpace, szName); + } + } + AssertMsgReturn(pLookupRec, ("'%s'\n", pszFormat), 0); + AssertMsgReturn( pLookupRec->pSet->enmType != DBGFREGSETTYPE_CPU + || pLookupRec->pSet->uUserArg.pVCpu->idCpu == pThis->idCpu, + ("'%s' idCpu=%u, pSet/cpu=%u\n", pszFormat, pThis->idCpu, pLookupRec->pSet->uUserArg.pVCpu->idCpu), + 0); + + /* + * Commit the parsed format string. Up to this point it is nice to know + * what register lookup failed and such, so we've delayed comitting. + */ + *ppszFormat = pszEnd + 1; + + /* + * Call the responsible worker. + */ + switch (pszFormat[offCurly - 1]) + { + case 'R': /* %VR{} */ + case 'X': /* %VRX{} */ + return dbgfR3RegNmPrintfCbFormatNormal(pThis, pfnOutput, pvArgOutput, pLookupRec, + 16, cchWidth, cchPrecision, fFlags); + case 'U': + return dbgfR3RegNmPrintfCbFormatNormal(pThis, pfnOutput, pvArgOutput, pLookupRec, + 10, cchWidth, cchPrecision, fFlags); + case 'O': + return dbgfR3RegNmPrintfCbFormatNormal(pThis, pfnOutput, pvArgOutput, pLookupRec, + 8, cchWidth, cchPrecision, fFlags); + case 'B': + return dbgfR3RegNmPrintfCbFormatNormal(pThis, pfnOutput, pvArgOutput, pLookupRec, + 2, cchWidth, cchPrecision, fFlags); + case 'F': + return dbgfR3RegNmPrintfCbFormatField(pThis, pfnOutput, pvArgOutput, pLookupRec, cchWidth, cchPrecision, fFlags); + default: + AssertFailed(); + return 0; + } +} + + + +/** + * @callback_method_impl{FNRTSTROUTPUT} + */ +static DECLCALLBACK(size_t) +dbgfR3RegNmPrintfCbOutput(void *pvArg, const char *pachChars, size_t cbChars) +{ + PDBGFR3REGNMPRINTFARGS pArgs = (PDBGFR3REGNMPRINTFARGS)pvArg; + size_t cbToCopy = cbChars; + if (cbToCopy >= pArgs->cchLeftBuf) + { + if (RT_SUCCESS(pArgs->rc)) + pArgs->rc = VERR_BUFFER_OVERFLOW; + cbToCopy = pArgs->cchLeftBuf; + } + if (cbToCopy > 0) + { + memcpy(&pArgs->pszBuf[pArgs->offBuf], pachChars, cbChars); + pArgs->offBuf += cbChars; + pArgs->cchLeftBuf -= cbChars; + pArgs->pszBuf[pArgs->offBuf] = '\0'; + } + return cbToCopy; +} + + +/** + * On CPU worker for the register formatting, used by DBGFR3RegNmPrintfV. + * + * @returns VBox status code. + * + * @param pArgs The argument package and state. + */ +static DECLCALLBACK(int) dbgfR3RegNmPrintfWorkerOnCpu(PDBGFR3REGNMPRINTFARGS pArgs) +{ + DBGF_REG_DB_LOCK_READ(pArgs->pVM); + RTStrFormatV(dbgfR3RegNmPrintfCbOutput, pArgs, dbgfR3RegNmPrintfCbFormat, pArgs, pArgs->pszFormat, pArgs->va); + DBGF_REG_DB_UNLOCK_READ(pArgs->pVM); + return pArgs->rc; +} + + +/** + * Format a registers. + * + * This is restricted to registers from one CPU, that specified by @a idCpu. + * + * @returns VBox status code. + * @param pVM The VM handle. + * @param idCpu The CPU ID of any CPU registers that may be + * printed, pass VMCPUID_ANY if not applicable. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pszFormat The format string. Register names are given by + * %VR{name}, they take no arguments. + * @param va Other format arguments. + */ +VMMR3DECL(int) DBGFR3RegPrintfV(PVM pVM, VMCPUID idCpu, char *pszBuf, size_t cbBuf, const char *pszFormat, va_list va) +{ + AssertPtrReturn(pszBuf, VERR_INVALID_POINTER); + AssertReturn(cbBuf > 0, VERR_BUFFER_OVERFLOW); + *pszBuf = '\0'; + + VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); + AssertReturn((idCpu & ~DBGFREG_HYPER_VMCPUID) < pVM->cCpus || idCpu == VMCPUID_ANY, VERR_INVALID_CPU_ID); + AssertPtrReturn(pszFormat, VERR_INVALID_POINTER); + + /* + * Set up an argument package and execute the formatting on the + * specified CPU. + */ + DBGFR3REGNMPRINTFARGS Args; + Args.pVM = pVM; + Args.idCpu = idCpu != VMCPUID_ANY ? idCpu & ~DBGFREG_HYPER_VMCPUID : idCpu; + Args.fGuestRegs = idCpu != VMCPUID_ANY && !(idCpu & DBGFREG_HYPER_VMCPUID); + Args.pszBuf = pszBuf; + Args.pszFormat = pszFormat; + va_copy(Args.va, va); + Args.offBuf = 0; + Args.cchLeftBuf = cbBuf - 1; + Args.rc = VINF_SUCCESS; + int rc = VMR3ReqCallWait(pVM, Args.idCpu, (PFNRT)dbgfR3RegNmPrintfWorkerOnCpu, 1, &Args); + va_end(Args.va); + return rc; +} + + +/** + * Format a registers. + * + * This is restricted to registers from one CPU, that specified by @a idCpu. + * + * @returns VBox status code. + * @param pVM The VM handle. + * @param idCpu The CPU ID of any CPU registers that may be + * printed, pass VMCPUID_ANY if not applicable. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pszFormat The format string. Register names are given by + * %VR{name}, %VRU{name}, %VRO{name} and + * %VRB{name}, which are hexadecimal, (unsigned) + * decimal, octal and binary representation. None + * of these types takes any arguments. + * @param ... Other format arguments. + */ +VMMR3DECL(int) DBGFR3RegPrintf(PVM pVM, VMCPUID idCpu, char *pszBuf, size_t cbBuf, const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + int rc = DBGFR3RegPrintfV(pVM, idCpu, pszBuf, cbBuf, pszFormat, va); + va_end(va); + return rc; +} + diff --git a/src/VBox/VMM/DBGFStack.cpp b/src/VBox/VMM/VMMR3/DBGFStack.cpp index 74706c73e..6faf7cbeb 100644 --- a/src/VBox/VMM/DBGFStack.cpp +++ b/src/VBox/VMM/VMMR3/DBGFStack.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFStack.cpp 30081 2010-06-07 15:23:09Z vboxsync $ */ +/* $Id: DBGFStack.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Call Stack Analyser. */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/selm.h> -#include <VBox/mm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/mm.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/param.h> diff --git a/src/VBox/VMM/DBGFSym.cpp b/src/VBox/VMM/VMMR3/DBGFSym.cpp index 7ecd5adf9..7299058e4 100644 --- a/src/VBox/VMM/DBGFSym.cpp +++ b/src/VBox/VMM/VMMR3/DBGFSym.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFSym.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: DBGFSym.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, Symbol Management. */ @@ -27,11 +27,11 @@ # define HAVE_DBGHELP /* if doing guest stuff, this can be nice. */ #endif /** @todo Only use DBGHELP for reading modules since it doesn't do all we want (relocations), or is way to slow in some cases (add symbol)! */ -#include <VBox/dbgf.h> -#include <VBox/mm.h> -#include <VBox/pdmapi.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pdmapi.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/EM.cpp b/src/VBox/VMM/VMMR3/EM.cpp index 537e034ff..aeb695fa7 100644 --- a/src/VBox/VMM/EM.cpp +++ b/src/VBox/VMM/VMMR3/EM.cpp @@ -1,4 +1,4 @@ -/* $Id: EM.cpp 34326 2010-11-24 14:03:55Z vboxsync $ */ +/* $Id: EM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * EM - Execution Monitor / Manager. */ @@ -35,31 +35,31 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_EM -#include <VBox/em.h> -#include <VBox/vmm.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/selm.h> -#include <VBox/trpm.h> -#include <VBox/iom.h> -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/rem.h> -#include <VBox/tm.h> -#include <VBox/mm.h> -#include <VBox/ssm.h> -#include <VBox/pdmapi.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pdmqueue.h> -#include <VBox/hwaccm.h> -#include <VBox/patm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pdmqueue.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/patm.h> #include "EMInternal.h" -#include "include/internal/em.h" -#include <VBox/vm.h> -#include <VBox/cpumdis.h> +#include "internal/em.h" +#include <VBox/vmm/vm.h> +#include <VBox/vmm/cpumdis.h> #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <iprt/asm.h> #include <iprt/string.h> diff --git a/src/VBox/VMM/EMHwaccm.cpp b/src/VBox/VMM/VMMR3/EMHwaccm.cpp index ba9b96e00..a5122a2bc 100644 --- a/src/VBox/VMM/EMHwaccm.cpp +++ b/src/VBox/VMM/VMMR3/EMHwaccm.cpp @@ -1,4 +1,4 @@ -/* $Id: EMHwaccm.cpp 33676 2010-11-02 09:48:24Z vboxsync $ */ +/* $Id: EMHwaccm.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * EM - Execution Monitor / Manager - hardware virtualization */ @@ -35,29 +35,29 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_EM -#include <VBox/em.h> -#include <VBox/vmm.h> -#include <VBox/csam.h> -#include <VBox/selm.h> -#include <VBox/trpm.h> -#include <VBox/iom.h> -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/rem.h> -#include <VBox/tm.h> -#include <VBox/mm.h> -#include <VBox/ssm.h> -#include <VBox/pdmapi.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pdmqueue.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pdmqueue.h> +#include <VBox/vmm/hwaccm.h> #include "EMInternal.h" -#include "include/internal/em.h" -#include <VBox/vm.h> -#include <VBox/cpumdis.h> +#include "internal/em.h" +#include <VBox/vmm/vm.h> +#include <VBox/vmm/cpumdis.h> #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/EMRaw.cpp b/src/VBox/VMM/VMMR3/EMRaw.cpp index ee488db6b..06a37a4a2 100644 --- a/src/VBox/VMM/EMRaw.cpp +++ b/src/VBox/VMM/VMMR3/EMRaw.cpp @@ -1,4 +1,5 @@ -/* $Id: EMRaw.cpp 32956 2010-10-06 16:06:53Z vboxsync $ */ +/* $Id: EMRaw.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ + /** @file * EM - Execution Monitor / Manager - software virtualization */ @@ -35,30 +36,30 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_EM -#include <VBox/em.h> -#include <VBox/vmm.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/selm.h> -#include <VBox/trpm.h> -#include <VBox/iom.h> -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/rem.h> -#include <VBox/tm.h> -#include <VBox/mm.h> -#include <VBox/ssm.h> -#include <VBox/pdmapi.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pdmqueue.h> -#include <VBox/patm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pdmqueue.h> +#include <VBox/vmm/patm.h> #include "EMInternal.h" -#include "include/internal/em.h" -#include <VBox/vm.h> -#include <VBox/cpumdis.h> +#include "internal/em.h" +#include <VBox/vmm/vm.h> +#include <VBox/vmm/cpumdis.h> #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <VBox/log.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/FTM.cpp b/src/VBox/VMM/VMMR3/FTM.cpp index fb42bcb41..67c66e0ea 100644 --- a/src/VBox/VMM/FTM.cpp +++ b/src/VBox/VMM/VMMR3/FTM.cpp @@ -1,4 +1,4 @@ -/* $Id: FTM.cpp 32431 2010-09-11 18:02:17Z vboxsync $ */ +/* $Id: FTM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * FTM - Fault Tolerance Manager */ @@ -21,14 +21,14 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_FTM #include "FTMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <VBox/param.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #include <VBox/log.h> -#include <VBox/pgm.h> -#include <VBox/pdm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/pdm.h> #include <iprt/assert.h> #include <iprt/thread.h> @@ -39,9 +39,9 @@ #include <iprt/semaphore.h> #include <iprt/asm.h> -#include <include/internal/vm.h> -#include <include/internal/em.h> -#include <include/internal/pgm.h> +#include "internal/vm.h" +#include "internal/em.h" +#include "internal/pgm.h" /******************************************************************************* * Structures and Typedefs * diff --git a/src/VBox/VMM/GMM.cpp b/src/VBox/VMM/VMMR3/GMM.cpp index c8d6bc173..db6c073f5 100644 --- a/src/VBox/VMM/GMM.cpp +++ b/src/VBox/VMM/VMMR3/GMM.cpp @@ -1,4 +1,4 @@ -/* $Id: GMM.cpp 30726 2010-07-08 09:12:48Z vboxsync $ */ +/* $Id: GMM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * GMM - Global Memory Manager, ring-3 request wrappers. */ @@ -20,9 +20,9 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_GMM -#include <VBox/gmm.h> -#include <VBox/vmm.h> -#include <VBox/vm.h> +#include <VBox/vmm/gmm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/vm.h> #include <VBox/sup.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/HWACCM.cpp b/src/VBox/VMM/VMMR3/HWACCM.cpp index 04779ec3b..db60497bf 100644 --- a/src/VBox/VMM/HWACCM.cpp +++ b/src/VBox/VMM/VMMR3/HWACCM.cpp @@ -1,4 +1,4 @@ -/* $Id: HWACCM.cpp 34564 2010-12-01 11:49:37Z vboxsync $ */ +/* $Id: HWACCM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * HWACCM - Intel/AMD VM Hardware Support Manager */ @@ -19,23 +19,23 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_HWACCM -#include <VBox/cpum.h> -#include <VBox/stam.h> -#include <VBox/mm.h> -#include <VBox/pdmapi.h> -#include <VBox/pgm.h> -#include <VBox/ssm.h> -#include <VBox/trpm.h> -#include <VBox/dbgf.h> -#include <VBox/iom.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/selm.h> -#include <VBox/rem.h> -#include <VBox/hwacc_vmx.h> -#include <VBox/hwacc_svm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/hwacc_vmx.h> +#include <VBox/vmm/hwacc_svm.h> #include "HWACCMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/IOM.cpp b/src/VBox/VMM/VMMR3/IOM.cpp index d30722aa7..34220c0ab 100644 --- a/src/VBox/VMM/IOM.cpp +++ b/src/VBox/VMM/VMMR3/IOM.cpp @@ -1,4 +1,4 @@ -/* $Id: IOM.cpp 34241 2010-11-22 14:26:53Z vboxsync $ */ +/* $Id: IOM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * IOM - Input / Output Monitor. */ @@ -76,10 +76,10 @@ * * I/O ports aren't really exposed in any other way, unless you count the * instruction interpreter in EM, but that's just what we're doing in the - * raw-mode \#GP(0) case really. Now it's possible to call IOMIOPortRead and + * raw-mode \#GP(0) case really. Now, it's possible to call IOMIOPortRead and * IOMIOPortWrite directly to talk to a device, but this is really bad behavior - * and should only be done as temporary hacks (the PC BIOS device used to - * setup the CMOS this way back in the dark ages). + * and should only be done as temporary hacks (the PC BIOS device used to setup + * the CMOS this way back in the dark ages). * * MMIO has similar direct routes as the I/O ports and these shouldn't be used * for the same reasons and with the same restrictions. OTOH since MMIO is @@ -93,17 +93,17 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_IOM -#include <VBox/iom.h> -#include <VBox/cpum.h> -#include <VBox/pgm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/pgm.h> #include <VBox/sup.h> -#include <VBox/mm.h> -#include <VBox/stam.h> -#include <VBox/dbgf.h> -#include <VBox/pdmapi.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmdev.h> #include "IOMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/param.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/MM.cpp b/src/VBox/VMM/VMMR3/MM.cpp index 9b2ca5275..a05035116 100644 --- a/src/VBox/VMM/MM.cpp +++ b/src/VBox/VMM/VMMR3/MM.cpp @@ -1,4 +1,4 @@ -/* $Id: MM.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: MM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM - Memory Manager. */ @@ -144,14 +144,14 @@ Hypervisor Memory Area (HMA) Layout: Base 00000000a0000000, 0x00800000 bytes * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/cfgm.h> -#include <VBox/ssm.h> -#include <VBox/gmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/gmm.h> #include "MMInternal.h" -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/MMHeap.cpp b/src/VBox/VMM/VMMR3/MMHeap.cpp index cd6591e55..69e18acd1 100644 --- a/src/VBox/VMM/MMHeap.cpp +++ b/src/VBox/VMM/VMMR3/MMHeap.cpp @@ -1,4 +1,4 @@ -/* $Id: MMHeap.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: MMHeap.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM - Memory Manager - Heap. */ @@ -20,12 +20,12 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM_HEAP -#include <VBox/mm.h> -#include <VBox/stam.h> -#include <VBox/pgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pgm.h> #include "MMInternal.h" -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/param.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/MMHyper.cpp b/src/VBox/VMM/VMMR3/MMHyper.cpp index 82a36cb5b..e9eabc987 100644 --- a/src/VBox/VMM/MMHyper.cpp +++ b/src/VBox/VMM/VMMR3/MMHyper.cpp @@ -1,4 +1,4 @@ -/* $Id: MMHyper.cpp 33998 2010-11-11 14:52:22Z vboxsync $ */ +/* $Id: MMHyper.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM - Memory Manager - Hypervisor Memory Area. */ @@ -20,15 +20,15 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM_HYPER -#include <VBox/pgm.h> -#include <VBox/mm.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/dbgf.h> #include "MMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/param.h> #include <VBox/log.h> -#include <include/internal/pgm.h> +#include "internal/pgm.h" #include <iprt/alloc.h> #include <iprt/assert.h> #include <iprt/string.h> diff --git a/src/VBox/VMM/MMPagePool.cpp b/src/VBox/VMM/VMMR3/MMPagePool.cpp index 520f33706..0636ce985 100644 --- a/src/VBox/VMM/MMPagePool.cpp +++ b/src/VBox/VMM/VMMR3/MMPagePool.cpp @@ -1,4 +1,4 @@ -/* $Id: MMPagePool.cpp 32036 2010-08-27 10:14:39Z vboxsync $ */ +/* $Id: MMPagePool.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM - Memory Manager - Page Pool. */ @@ -19,15 +19,15 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM_POOL -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/stam.h> #include "MMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/param.h> #include <VBox/err.h> #include <VBox/log.h> -#include <include/internal/pgm.h> +#include "internal/pgm.h" #include <iprt/alloc.h> #include <iprt/assert.h> #define USE_INLINE_ASM_BIT_OPS diff --git a/src/VBox/VMM/MMUkHeap.cpp b/src/VBox/VMM/VMMR3/MMUkHeap.cpp index cc14402b5..6f49232ee 100644 --- a/src/VBox/VMM/MMUkHeap.cpp +++ b/src/VBox/VMM/VMMR3/MMUkHeap.cpp @@ -1,4 +1,4 @@ -/* $Id: MMUkHeap.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: MMUkHeap.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM - Memory Manager - Ring-3 Heap with kernel accessible mapping. */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM_HEAP -#include <VBox/mm.h> -#include <VBox/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> #include "MMInternal.h" -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/param.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMR3/Makefile.kup b/src/VBox/VMM/VMMR3/Makefile.kup new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/VBox/VMM/VMMR3/Makefile.kup diff --git a/src/VBox/VMM/PATM/PATM.cpp b/src/VBox/VMM/VMMR3/PATM.cpp index 77b02710f..59f1edf5d 100644 --- a/src/VBox/VMM/PATM/PATM.cpp +++ b/src/VBox/VMM/VMMR3/PATM.cpp @@ -1,4 +1,4 @@ -/* $Id: PATM.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: PATM.cpp 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * PATM - Dynamic Guest OS Patching Manager * @@ -21,23 +21,24 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PATM -#include <VBox/patm.h> -#include <VBox/stam.h> -#include <VBox/pgm.h> -#include <VBox/cpum.h> -#include <VBox/cpumdis.h> -#include <VBox/iom.h> -#include <VBox/mm.h> -#include <VBox/ssm.h> -#include <VBox/trpm.h> -#include <VBox/cfgm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/cpumdis.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/cfgm.h> #include <VBox/param.h> -#include <VBox/selm.h> +#include <VBox/vmm/selm.h> #include <iprt/avl.h> #include "PATMInternal.h" #include "PATMPatch.h" -#include <VBox/vm.h> -#include <VBox/csam.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/csam.h> #include <VBox/dbg.h> #include <VBox/err.h> #include <VBox/log.h> @@ -45,7 +46,7 @@ #include <iprt/asm.h> #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <include/internal/pgm.h> +#include "internal/pgm.h" #include <iprt/string.h> #include "PATMA.h" diff --git a/src/VBox/VMM/PATM/PATMA.asm b/src/VBox/VMM/VMMR3/PATMA.asm index 9b0dd8e90..ee459d0e7 100644 --- a/src/VBox/VMM/PATM/PATMA.asm +++ b/src/VBox/VMM/VMMR3/PATMA.asm @@ -1,4 +1,4 @@ -; $Id: PATMA.asm 33540 2010-10-28 09:27:05Z vboxsync $ +; $Id: PATMA.asm 35348 2010-12-27 16:35:23Z vboxsync $ ;; @file ; PATM Assembly Routines. ; @@ -31,7 +31,7 @@ %include "VBox/asmdefs.mac" %include "VBox/err.mac" %include "VBox/x86.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/vm.mac" %include "PATMA.mac" %ifdef DEBUG diff --git a/src/VBox/VMM/PATM/PATMA.mac b/src/VBox/VMM/VMMR3/PATMA.mac index 22a01589b..46c50a4d4 100644 --- a/src/VBox/VMM/PATM/PATMA.mac +++ b/src/VBox/VMM/VMMR3/PATMA.mac @@ -1,4 +1,4 @@ -; $Id: PATMA.mac 33540 2010-10-28 09:27:05Z vboxsync $ +; $Id: PATMA.mac 35348 2010-12-27 16:35:23Z vboxsync $ ;; @file ; PATM macros & definitions (identical to PATMA.h!!) ; diff --git a/src/VBox/VMM/PATM/PATMGuest.cpp b/src/VBox/VMM/VMMR3/PATMGuest.cpp index f3e9249eb..9231aa50d 100644 --- a/src/VBox/VMM/PATM/PATMGuest.cpp +++ b/src/VBox/VMM/VMMR3/PATMGuest.cpp @@ -1,4 +1,4 @@ -/* $Id: PATMGuest.cpp 30572 2010-07-02 11:52:02Z vboxsync $ */ +/* $Id: PATMGuest.cpp 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * PATMGuest - Guest OS Patching Manager (non-generic) */ @@ -19,14 +19,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PATM -#include <VBox/patm.h> -#include <VBox/pgm.h> -#include <VBox/iom.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/iom.h> #include <VBox/param.h> #include <iprt/avl.h> #include "PATMInternal.h" -#include <VBox/vm.h> -#include <VBox/csam.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/csam.h> #include <VBox/dbg.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/PATM/PATMPatch.cpp b/src/VBox/VMM/VMMR3/PATMPatch.cpp index 1dc19edc3..72e775431 100644 --- a/src/VBox/VMM/PATM/PATMPatch.cpp +++ b/src/VBox/VMM/VMMR3/PATMPatch.cpp @@ -1,4 +1,4 @@ -/* $Id: PATMPatch.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PATMPatch.cpp 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * PATMPatch - Dynamic Guest OS Instruction patches * @@ -21,17 +21,17 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PATM -#include <VBox/patm.h> -#include <VBox/stam.h> -#include <VBox/pgm.h> -#include <VBox/cpum.h> -#include <VBox/mm.h> -#include <VBox/trpm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/trpm.h> #include <VBox/param.h> #include <iprt/avl.h> #include "PATMInternal.h" -#include <VBox/vm.h> -#include <VBox/csam.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/csam.h> #include <VBox/dbg.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/PATM/PATMPatch.h b/src/VBox/VMM/VMMR3/PATMPatch.h index d26e83d96..e3a2f7638 100644 --- a/src/VBox/VMM/PATM/PATMPatch.h +++ b/src/VBox/VMM/VMMR3/PATMPatch.h @@ -1,4 +1,4 @@ -/* $Id: PATMPatch.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: PATMPatch.h 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * PATMPatch - Internal header file. */ diff --git a/src/VBox/VMM/PATM/PATMSSM.cpp b/src/VBox/VMM/VMMR3/PATMSSM.cpp index 1f83dc182..9d669fc5f 100644 --- a/src/VBox/VMM/PATM/PATMSSM.cpp +++ b/src/VBox/VMM/VMMR3/PATMSSM.cpp @@ -1,4 +1,4 @@ -/* $Id: PATMSSM.cpp 30575 2010-07-02 12:29:14Z vboxsync $ */ +/* $Id: PATMSSM.cpp 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * PATMSSM - Dynamic Guest OS Patching Manager; Save and load state * @@ -21,18 +21,18 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PATM -#include <VBox/patm.h> -#include <VBox/cpum.h> -#include <VBox/mm.h> -#include <VBox/ssm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/ssm.h> #include <VBox/param.h> #include <iprt/avl.h> #include "PATMInternal.h" #include "PATMPatch.h" #include "PATMA.h" -#include <VBox/vm.h> -#include <VBox/csam.h> -#include <include/internal/pgm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/csam.h> +#include "internal/pgm.h" #include <VBox/dbg.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/PDM.cpp b/src/VBox/VMM/VMMR3/PDM.cpp index 3155177f8..451197000 100644 --- a/src/VBox/VMM/PDM.cpp +++ b/src/VBox/VMM/VMMR3/PDM.cpp @@ -1,4 +1,4 @@ -/* $Id: PDM.cpp 34347 2010-11-24 22:34:21Z vboxsync $ */ +/* $Id: PDM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Pluggable Device Manager. */ @@ -251,13 +251,13 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/ssm.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> +#include <VBox/vmm/vmm.h> #include <VBox/param.h> #include <VBox/err.h> #include <VBox/sup.h> @@ -433,6 +433,8 @@ VMMR3DECL(void) PDMR3Relocate(PVM pVM, RTGCINTPTR offDelta) { pVM->pdm.s.IoApic.pDevInsRC += offDelta; pVM->pdm.s.IoApic.pfnSetIrqRC += offDelta; + if (pVM->pdm.s.IoApic.pfnSendMsiRC) + pVM->pdm.s.IoApic.pfnSendMsiRC += offDelta; } /* diff --git a/src/VBox/VMM/PDMAsyncCompletion.cpp b/src/VBox/VMM/VMMR3/PDMAsyncCompletion.cpp index fdbf0c118..a6002e6a8 100644 --- a/src/VBox/VMM/PDMAsyncCompletion.cpp +++ b/src/VBox/VMM/VMMR3/PDMAsyncCompletion.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMAsyncCompletion.cpp 35196 2010-12-16 16:19:33Z vboxsync $ */ +/* $Id: PDMAsyncCompletion.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Async I/O - Transport data asynchronous in R3 using EMT. */ @@ -21,11 +21,11 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_ASYNC_COMPLETION #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/rem.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/log.h> @@ -38,7 +38,7 @@ #include <iprt/path.h> #include <iprt/string.h> -#include <VBox/pdmasynccompletion.h> +#include <VBox/vmm/pdmasynccompletion.h> #include "PDMAsyncCompletionInternal.h" /** @@ -1190,7 +1190,7 @@ VMMR3DECL(int) PDMR3AsyncCompletionEpCreateForFile(PPPDMASYNCCOMPLETIONENDPOINT AssertReturn(VALID_PTR(pTemplate), VERR_INVALID_POINTER); /* Check that the flags are valid. */ - AssertReturn(((~(PDMACEP_FILE_FLAGS_READ_ONLY | PDMACEP_FILE_FLAGS_CACHING | PDMACEP_FILE_FLAGS_DONT_LOCK) & fFlags) == 0), + AssertReturn(((~(PDMACEP_FILE_FLAGS_READ_ONLY | PDMACEP_FILE_FLAGS_DONT_LOCK) & fFlags) == 0), VERR_INVALID_PARAMETER); PVM pVM = pTemplate->pVM; diff --git a/src/VBox/VMM/PDMAsyncCompletionFile.cpp b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFile.cpp index 639536198..1eba676fa 100644 --- a/src/VBox/VMM/PDMAsyncCompletionFile.cpp +++ b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFile.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMAsyncCompletionFile.cpp 35190 2010-12-16 15:24:55Z vboxsync $ */ +/* $Id: PDMAsyncCompletionFile.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Async I/O - Transport data asynchronous in R3 using EMT. */ @@ -21,13 +21,13 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_ASYNC_COMPLETION #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/vm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> #include <VBox/dbg.h> -#include <VBox/uvm.h> +#include <VBox/vmm/uvm.h> #include <iprt/asm.h> #include <iprt/assert.h> @@ -824,25 +824,6 @@ static int pdmacFileInitialize(PPDMASYNCCOMPLETIONEPCLASS pClassGlobals, PCFGMNO /* Init critical section. */ rc = RTCritSectInit(&pEpClassFile->CritSect); - if (RT_SUCCESS(rc)) - { - /* Check if the cache was disabled by the user. */ - rc = CFGMR3QueryBoolDef(pCfgNode, "CacheEnabled", &pEpClassFile->fCacheEnabled, true); - AssertLogRelRCReturn(rc, rc); - - if (pEpClassFile->fCacheEnabled) - { - /* Init cache structure */ - rc = pdmacFileCacheInit(pEpClassFile, pCfgNode); - if (RT_FAILURE(rc)) - { - pEpClassFile->fCacheEnabled = false; - LogRel(("AIOMgr: Failed to initialise the cache (rc=%Rrc), disabled caching\n")); - } - } - else - LogRel(("AIOMgr: Cache was globally disabled\n")); - } #ifdef VBOX_WITH_DEBUGGER /* Install the error injection handler. */ @@ -867,10 +848,6 @@ static void pdmacFileTerminate(PPDMASYNCCOMPLETIONEPCLASS pClassGlobals) while (pEpClassFile->pAioMgrHead) pdmacFileAioMgrDestroy(pEpClassFile, pEpClassFile->pAioMgrHead); - /* Destroy the cache. */ - if (pEpClassFile->fCacheEnabled) - pdmacFileCacheDestroy(pEpClassFile); - RTCritSectDelete(&pEpClassFile->CritSect); } @@ -883,7 +860,7 @@ static int pdmacFileEpInitialize(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, PDMACEPFILEMGRTYPE enmMgrType = pEpClassFile->enmMgrTypeOverride; PDMACFILEEPBACKEND enmEpBackend = pEpClassFile->enmEpBackendDefault; - AssertMsgReturn((fFlags & ~(PDMACEP_FILE_FLAGS_READ_ONLY | PDMACEP_FILE_FLAGS_CACHING | PDMACEP_FILE_FLAGS_DONT_LOCK)) == 0, + AssertMsgReturn((fFlags & ~(PDMACEP_FILE_FLAGS_READ_ONLY | PDMACEP_FILE_FLAGS_DONT_LOCK)) == 0, ("PDMAsyncCompletion: Invalid flag specified\n"), VERR_INVALID_PARAMETER); unsigned fFileFlags = RTFILE_O_OPEN; @@ -900,12 +877,7 @@ static int pdmacFileEpInitialize(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, * because this can lead to data corruption. */ if (fFlags & PDMACEP_FILE_FLAGS_DONT_LOCK) - { - if (fFlags & PDMACEP_FILE_FLAGS_CACHING) - return VERR_NOT_SUPPORTED; - else - fFileFlags |= RTFILE_O_DENY_NONE; - } + fFileFlags |= RTFILE_O_DENY_NONE; else fFileFlags |= RTFILE_O_DENY_WRITE; } @@ -1001,7 +973,6 @@ static int pdmacFileEpInitialize(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, { PPDMACEPFILEMGR pAioMgr = NULL; - pEpFile->cbEndpoint = pEpFile->cbFile; pEpFile->pTasksFreeTail = pEpFile->pTasksFreeHead; pEpFile->cTasksCached = 0; pEpFile->enmBackendType = enmEpBackend; @@ -1023,18 +994,6 @@ static int pdmacFileEpInitialize(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, } else { - if ( (fFlags & PDMACEP_FILE_FLAGS_CACHING) - && (pEpClassFile->fCacheEnabled)) - { - pEpFile->fCaching = true; - rc = pdmacFileEpCacheInit(pEpFile, pEpClassFile); - if (RT_FAILURE(rc)) - { - LogRel(("AIOMgr: Endpoint for \"%s\" was opened with caching but initializing cache failed. Disabled caching\n", pszUri)); - pEpFile->fCaching = false; - } - } - pAioMgr = pEpClassFile->pAioMgrHead; /* Check for an idling manager of the same type */ @@ -1107,25 +1066,10 @@ static int pdmacFileEpClose(PPDMASYNCCOMPLETIONENDPOINT pEndpoint) PPDMASYNCCOMPLETIONENDPOINTFILE pEpFile = (PPDMASYNCCOMPLETIONENDPOINTFILE)pEndpoint; PPDMASYNCCOMPLETIONEPCLASSFILE pEpClassFile = (PPDMASYNCCOMPLETIONEPCLASSFILE)pEndpoint->pEpClass; - /* Free the cached data. */ - if (pEpFile->fCaching) - { - rc = pdmacFileEpCacheFlush(pEpFile); - AssertRC(rc); - } - /* Make sure that all tasks finished for this endpoint. */ rc = pdmacFileAioMgrCloseEndpoint(pEpFile->pAioMgr, pEpFile); AssertRC(rc); - /* endpoint and real file size should better be equal now. */ - AssertMsg(pEpFile->cbFile == pEpFile->cbEndpoint, - ("Endpoint and real file size should match now!\n")); - - /* Destroy any per endpoint cache data */ - if (pEpFile->fCaching) - pdmacFileEpCacheDestroy(pEpFile); - /* * If the async I/O manager is in failsafe mode this is the only endpoint * he processes and thus can be destroyed now. @@ -1171,12 +1115,8 @@ static int pdmacFileEpRead(PPDMASYNCCOMPLETIONTASK pTask, pdmacFileEpTaskInit(pTask, cbRead); - if (pEpFile->fCaching) - rc = pdmacFileEpCacheRead(pEpFile, (PPDMASYNCCOMPLETIONTASKFILE)pTask, - off, paSegments, cSegments, cbRead); - else - rc = pdmacFileEpTaskInitiate(pTask, pEndpoint, off, paSegments, cSegments, cbRead, - PDMACTASKFILETRANSFER_READ); + rc = pdmacFileEpTaskInitiate(pTask, pEndpoint, off, paSegments, cSegments, cbRead, + PDMACTASKFILETRANSFER_READ); STAM_PROFILE_ADV_STOP(&pEpFile->StatRead, Read); @@ -1198,20 +1138,11 @@ static int pdmacFileEpWrite(PPDMASYNCCOMPLETIONTASK pTask, pdmacFileEpTaskInit(pTask, cbWrite); - if (pEpFile->fCaching) - rc = pdmacFileEpCacheWrite(pEpFile, (PPDMASYNCCOMPLETIONTASKFILE)pTask, - off, paSegments, cSegments, cbWrite); - else - rc = pdmacFileEpTaskInitiate(pTask, pEndpoint, off, paSegments, cSegments, cbWrite, - PDMACTASKFILETRANSFER_WRITE); + rc = pdmacFileEpTaskInitiate(pTask, pEndpoint, off, paSegments, cSegments, cbWrite, + PDMACTASKFILETRANSFER_WRITE); STAM_PROFILE_ADV_STOP(&pEpFile->StatWrite, Write); - /* Increase endpoint size. */ - if ( RT_SUCCESS(rc) - && ((uint64_t)off + cbWrite) > pEpFile->cbEndpoint) - ASMAtomicWriteU64(&pEpFile->cbEndpoint, (uint64_t)off + cbWrite); - return rc; } @@ -1226,12 +1157,6 @@ static int pdmacFileEpFlush(PPDMASYNCCOMPLETIONTASK pTask, pdmacFileEpTaskInit(pTask, 0); - if (pEpFile->fCaching) - { - int rc = pdmacFileEpCacheFlush(pEpFile); - AssertRC(rc); - } - PPDMACTASKFILE pIoTask = pdmacFileTaskAlloc(pEpFile); if (RT_UNLIKELY(!pIoTask)) return VERR_NO_MEMORY; @@ -1249,7 +1174,7 @@ static int pdmacFileEpGetSize(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint64_t *p { PPDMASYNCCOMPLETIONENDPOINTFILE pEpFile = (PPDMASYNCCOMPLETIONENDPOINTFILE)pEndpoint; - *pcbSize = ASMAtomicReadU64(&pEpFile->cbEndpoint); + *pcbSize = ASMAtomicReadU64(&pEpFile->cbFile); return VINF_SUCCESS; } @@ -1258,7 +1183,7 @@ static int pdmacFileEpSetSize(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint64_t cb { PPDMASYNCCOMPLETIONENDPOINTFILE pEpFile = (PPDMASYNCCOMPLETIONENDPOINTFILE)pEndpoint; - ASMAtomicWriteU64(&pEpFile->cbEndpoint, cbSize); + ASMAtomicWriteU64(&pEpFile->cbFile, cbSize); return RTFileSetSize(pEpFile->File, cbSize); } diff --git a/src/VBox/VMM/PDMAsyncCompletionFileFailsafe.cpp b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileFailsafe.cpp index 07a9211b8..52b3d7262 100644 --- a/src/VBox/VMM/PDMAsyncCompletionFileFailsafe.cpp +++ b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileFailsafe.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMAsyncCompletionFileFailsafe.cpp 30147 2010-06-10 12:11:24Z vboxsync $ */ +/* $Id: PDMAsyncCompletionFileFailsafe.cpp 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * PDM Async I/O - Transport data asynchronous in R3 using EMT. * Simple File I/O manager. diff --git a/src/VBox/VMM/PDMAsyncCompletionFileNormal.cpp b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp index a65223345..4e6467ecd 100644 --- a/src/VBox/VMM/PDMAsyncCompletionFileNormal.cpp +++ b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMAsyncCompletionFileNormal.cpp 35205 2010-12-16 18:35:02Z vboxsync $ */ +/* $Id: PDMAsyncCompletionFileNormal.cpp 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * PDM Async I/O - Transport data asynchronous in R3 using EMT. * Async File I/O manager. diff --git a/src/VBox/VMM/PDMBlkCache.cpp b/src/VBox/VMM/VMMR3/PDMBlkCache.cpp index 6abf889fd..7f07de40c 100644 --- a/src/VBox/VMM/PDMBlkCache.cpp +++ b/src/VBox/VMM/VMMR3/PDMBlkCache.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMBlkCache.cpp 35162 2010-12-15 19:39:54Z vboxsync $ */ +/* $Id: PDMBlkCache.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Block Cache. */ @@ -29,9 +29,9 @@ #include <iprt/path.h> #include <iprt/string.h> #include <VBox/log.h> -#include <VBox/stam.h> -#include <VBox/uvm.h> -#include <VBox/vm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/uvm.h> +#include <VBox/vmm/vm.h> #include "PDMBlkCacheInternal.h" diff --git a/src/VBox/VMM/PDMCritSect.cpp b/src/VBox/VMM/VMMR3/PDMCritSect.cpp index 5eb458e9f..e8c6b5360 100644 --- a/src/VBox/VMM/PDMCritSect.cpp +++ b/src/VBox/VMM/VMMR3/PDMCritSect.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMCritSect.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: PDMCritSect.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Critical Sections, Ring-3. */ @@ -21,10 +21,10 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM//_CRITSECT #include "PDMInternal.h" -#include <VBox/pdmcritsect.h> -#include <VBox/mm.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/PDMDevHlp.cpp b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp index 5bc26b742..ae87e2909 100644 --- a/src/VBox/VMM/PDMDevHlp.cpp +++ b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMDevHlp.cpp 34241 2010-11-22 14:26:53Z vboxsync $ */ +/* $Id: PDMDevHlp.cpp 35358 2010-12-28 07:58:40Z vboxsync $ */ /** @file * PDM - Pluggable Device and Driver Manager, Device Helpers. */ @@ -21,16 +21,16 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_DEVICE #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/iom.h> -#include <VBox/rem.h> -#include <VBox/dbgf.h> -#include <VBox/vmapi.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/vmapi.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> +#include <VBox/vmm/vmm.h> #include <VBox/version.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/PDMDevMiscHlp.cpp b/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp index 920e3e7c9..c9655b3d3 100644 --- a/src/VBox/VMM/PDMDevMiscHlp.cpp +++ b/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMDevMiscHlp.cpp 32935 2010-10-06 09:28:42Z vboxsync $ */ +/* $Id: PDMDevMiscHlp.cpp 35358 2010-12-28 07:58:40Z vboxsync $ */ /** @file * PDM - Pluggable Device and Driver Manager, Misc. Device Helpers. */ @@ -21,10 +21,10 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_DEVICE #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/rem.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/log.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/PDMDevice.cpp b/src/VBox/VMM/VMMR3/PDMDevice.cpp index 987a70eb3..2878171f3 100644 --- a/src/VBox/VMM/PDMDevice.cpp +++ b/src/VBox/VMM/VMMR3/PDMDevice.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMDevice.cpp 34241 2010-11-22 14:26:53Z vboxsync $ */ +/* $Id: PDMDevice.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Pluggable Device and Driver Manager, Device parts. */ @@ -21,15 +21,15 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_DEVICE #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/iom.h> -#include <VBox/cfgm.h> -#include <VBox/rem.h> -#include <VBox/dbgf.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/version.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/PDMDriver.cpp b/src/VBox/VMM/VMMR3/PDMDriver.cpp index 9376be716..4a33f84c5 100644 --- a/src/VBox/VMM/PDMDriver.cpp +++ b/src/VBox/VMM/VMMR3/PDMDriver.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMDriver.cpp 34241 2010-11-22 14:26:53Z vboxsync $ */ +/* $Id: PDMDriver.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Pluggable Device and Driver Manager, Driver parts. */ @@ -21,12 +21,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_DRIVER #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/cfgm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/vmm.h> #include <VBox/sup.h> -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/version.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/PDMLdr.cpp b/src/VBox/VMM/VMMR3/PDMLdr.cpp index 4258b310d..9042bc948 100644 --- a/src/VBox/VMM/PDMLdr.cpp +++ b/src/VBox/VMM/VMMR3/PDMLdr.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMLdr.cpp 35218 2010-12-17 12:45:16Z vboxsync $ */ +/* $Id: PDMLdr.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Pluggable Device Manager, module loader. */ @@ -22,15 +22,15 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_LDR #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/vmm.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/sup.h> #include <VBox/param.h> #include <VBox/err.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/hwaccm.h> #include <VBox/log.h> #include <iprt/assert.h> @@ -344,7 +344,7 @@ static DECLCALLBACK(int) pdmR3GetImportRC(RTLDRMOD hLdrMod, const char *pszModul /* * Builtin module. */ - if (!pszModule || !strcmp(pszModule, "VMMGCBuiltin.gc")) + if (!pszModule || !strcmp(pszModule, "VMMRCBuiltin.rc")) { int rc = VINF_SUCCESS; if (!strcmp(pszSymbol, "g_VM")) diff --git a/src/VBox/VMM/PDMQueue.cpp b/src/VBox/VMM/VMMR3/PDMQueue.cpp index b22613923..afb16ca3e 100644 --- a/src/VBox/VMM/PDMQueue.cpp +++ b/src/VBox/VMM/VMMR3/PDMQueue.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMQueue.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PDMQueue.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Queue - Transport data and tasks to EMT and R3. */ @@ -21,11 +21,11 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_QUEUE #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/rem.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/PDMThread.cpp b/src/VBox/VMM/VMMR3/PDMThread.cpp index 0a2587b10..8075faa70 100644 --- a/src/VBox/VMM/PDMThread.cpp +++ b/src/VBox/VMM/VMMR3/PDMThread.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMThread.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: PDMThread.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Thread - VM Thread Management. */ @@ -20,10 +20,10 @@ *******************************************************************************/ ///@todo #define LOG_GROUP LOG_GROUP_PDM_THREAD #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/mm.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/PDMUsb.cpp b/src/VBox/VMM/VMMR3/PDMUsb.cpp index 38632a019..f53111fcd 100644 --- a/src/VBox/VMM/PDMUsb.cpp +++ b/src/VBox/VMM/VMMR3/PDMUsb.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMUsb.cpp 34241 2010-11-22 14:26:53Z vboxsync $ */ +/* $Id: PDMUsb.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Pluggable Device and Driver Manager, USB part. */ @@ -21,13 +21,13 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_DRIVER #include "PDMInternal.h" -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include <VBox/vusb.h> -#include <VBox/mm.h> -#include <VBox/cfgm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/vmm.h> #include <VBox/sup.h> -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/version.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/PGM.cpp b/src/VBox/VMM/VMMR3/PGM.cpp index b466d638c..8007cb46c 100644 --- a/src/VBox/VMM/PGM.cpp +++ b/src/VBox/VMM/VMMR3/PGM.cpp @@ -1,4 +1,4 @@ -/* $Id: PGM.cpp 34326 2010-11-24 14:03:55Z vboxsync $ */ +/* $Id: PGM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor. (Mixing stuff here, not good?) */ @@ -573,20 +573,20 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/cpum.h> -#include <VBox/iom.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/iom.h> #include <VBox/sup.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/stam.h> -#include <VBox/rem.h> -#include <VBox/selm.h> -#include <VBox/ssm.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/hwaccm.h> #include "PGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include "PGMInline.h" #include <VBox/dbg.h> diff --git a/src/VBox/VMM/PGMBth.h b/src/VBox/VMM/VMMR3/PGMBth.h index dde6801b6..ac4cb0240 100644 --- a/src/VBox/VMM/PGMBth.h +++ b/src/VBox/VMM/VMMR3/PGMBth.h @@ -1,4 +1,4 @@ -/* $Id: PGMBth.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMBth.h 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * VBox - Page Manager / Monitor, Shadow+Guest Paging Template. */ diff --git a/src/VBox/VMM/PGMDbg.cpp b/src/VBox/VMM/VMMR3/PGMDbg.cpp index 5cccb2ae5..4e5ebc04a 100644 --- a/src/VBox/VMM/PGMDbg.cpp +++ b/src/VBox/VMM/VMMR3/PGMDbg.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMDbg.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMDbg.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor - Debugger & Debugging APIs. */ @@ -19,10 +19,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/pgm.h> -#include <VBox/stam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/stam.h> #include "PGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include "PGMInline.h" #include <iprt/assert.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/PGMGst.h b/src/VBox/VMM/VMMR3/PGMGst.h index 4a8a59fda..cc0773fd1 100644 --- a/src/VBox/VMM/PGMGst.h +++ b/src/VBox/VMM/VMMR3/PGMGst.h @@ -1,4 +1,4 @@ -/* $Id: PGMGst.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMGst.h 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * VBox - Page Manager / Monitor, Guest Paging Template. */ diff --git a/src/VBox/VMM/PGMHandler.cpp b/src/VBox/VMM/VMMR3/PGMHandler.cpp index 5e650a860..f9bac41ca 100644 --- a/src/VBox/VMM/PGMHandler.cpp +++ b/src/VBox/VMM/VMMR3/PGMHandler.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMHandler.cpp 34241 2010-11-22 14:26:53Z vboxsync $ */ +/* $Id: PGMHandler.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager / Monitor, Access Handlers. */ @@ -20,22 +20,22 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/cpum.h> -#include <VBox/iom.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/iom.h> #include <VBox/sup.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/stam.h> -#include <VBox/csam.h> -#include <VBox/rem.h> -#include <VBox/dbgf.h> -#include <VBox/rem.h> -#include <VBox/selm.h> -#include <VBox/ssm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/ssm.h> #include "PGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include "PGMInline.h" #include <VBox/dbg.h> @@ -47,7 +47,7 @@ #include <iprt/string.h> #include <VBox/param.h> #include <VBox/err.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/hwaccm.h> /******************************************************************************* diff --git a/src/VBox/VMM/PGMMap.cpp b/src/VBox/VMM/VMMR3/PGMMap.cpp index a409160af..5853027fc 100644 --- a/src/VBox/VMM/PGMMap.cpp +++ b/src/VBox/VMM/VMMR3/PGMMap.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMMap.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMMap.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager, Guest Context Mappings. */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/dbgf.h> -#include <VBox/pgm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> #include "PGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include "PGMInline.h" #include <VBox/log.h> diff --git a/src/VBox/VMM/PGMPhys.cpp b/src/VBox/VMM/VMMR3/PGMPhys.cpp index 8ea70a397..dd898d38a 100644 --- a/src/VBox/VMM/PGMPhys.cpp +++ b/src/VBox/VMM/VMMR3/PGMPhys.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMPhys.cpp 34467 2010-11-29 15:07:32Z vboxsync $ */ +/* $Id: PGMPhys.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor, Physical Memory Addressing. */ @@ -20,14 +20,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM_PHYS -#include <VBox/pgm.h> -#include <VBox/iom.h> -#include <VBox/mm.h> -#include <VBox/stam.h> -#include <VBox/rem.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/pdmdev.h> #include "PGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include "PGMInline.h" #include <VBox/sup.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/PGMPhysRWTmpl.h b/src/VBox/VMM/VMMR3/PGMPhysRWTmpl.h index 353cba14f..d4feb1ed6 100644 --- a/src/VBox/VMM/PGMPhysRWTmpl.h +++ b/src/VBox/VMM/VMMR3/PGMPhysRWTmpl.h @@ -1,4 +1,4 @@ -/* $Id: PGMPhysRWTmpl.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: PGMPhysRWTmpl.h 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor, Physical Memory Access Template. */ diff --git a/src/VBox/VMM/PGMPool.cpp b/src/VBox/VMM/VMMR3/PGMPool.cpp index ef196e9bc..4fed334ed 100644 --- a/src/VBox/VMM/PGMPool.cpp +++ b/src/VBox/VMM/VMMR3/PGMPool.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMPool.cpp 34741 2010-12-06 12:12:23Z vboxsync $ */ +/* $Id: PGMPool.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM Shadow Page Pool. */ @@ -96,10 +96,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM_POOL -#include <VBox/pgm.h> -#include <VBox/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> #include "PGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include "PGMInline.h" #include <VBox/log.h> diff --git a/src/VBox/VMM/PGMSavedState.cpp b/src/VBox/VMM/VMMR3/PGMSavedState.cpp index d3653ab9a..65940993c 100644 --- a/src/VBox/VMM/PGMSavedState.cpp +++ b/src/VBox/VMM/VMMR3/PGMSavedState.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMSavedState.cpp 34318 2010-11-24 12:57:17Z vboxsync $ */ +/* $Id: PGMSavedState.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor, The Saved State Part. */ @@ -20,18 +20,18 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/pgm.h> -#include <VBox/stam.h> -#include <VBox/ssm.h> -#include <VBox/pdmdrv.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/pdmdrv.h> +#include <VBox/vmm/pdmdev.h> #include "PGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include "PGMInline.h" #include <VBox/param.h> #include <VBox/err.h> -#include <VBox/ftm.h> +#include <VBox/vmm/ftm.h> #include <iprt/asm.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/PGMSharedPage.cpp b/src/VBox/VMM/VMMR3/PGMSharedPage.cpp index 666b7bd23..a1db5a75d 100644 --- a/src/VBox/VMM/PGMSharedPage.cpp +++ b/src/VBox/VMM/VMMR3/PGMSharedPage.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMSharedPage.cpp 31529 2010-08-10 12:13:57Z vboxsync $ */ +/* $Id: PGMSharedPage.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor, Shared page handling */ @@ -20,10 +20,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM_SHARED -#include <VBox/pgm.h> -#include <VBox/stam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/stam.h> #include "PGMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/sup.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/PGMShw.h b/src/VBox/VMM/VMMR3/PGMShw.h index 9f7875fe4..769ef0b26 100644 --- a/src/VBox/VMM/PGMShw.h +++ b/src/VBox/VMM/VMMR3/PGMShw.h @@ -1,4 +1,4 @@ -/* $Id: PGMShw.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMShw.h 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * VBox - Page Manager / Monitor, Shadow Paging Template. */ diff --git a/src/VBox/VMM/SELM.cpp b/src/VBox/VMM/VMMR3/SELM.cpp index ad134caca..68b0b9c63 100644 --- a/src/VBox/VMM/SELM.cpp +++ b/src/VBox/VMM/VMMR3/SELM.cpp @@ -1,4 +1,4 @@ -/* $Id: SELM.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: SELM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * SELM - The Selector Manager. */ @@ -59,16 +59,16 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_SELM -#include <VBox/selm.h> -#include <VBox/cpum.h> -#include <VBox/stam.h> -#include <VBox/mm.h> -#include <VBox/ssm.h> -#include <VBox/pgm.h> -#include <VBox/trpm.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/dbgf.h> #include "SELMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/SSM.cpp b/src/VBox/VMM/VMMR3/SSM.cpp index b958fb976..a28211899 100644 --- a/src/VBox/VMM/SSM.cpp +++ b/src/VBox/VMM/VMMR3/SSM.cpp @@ -1,4 +1,4 @@ -/* $Id: SSM.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: SSM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * SSM - Saved State Manager. */ @@ -144,11 +144,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_SSM -#include <VBox/ssm.h> -#include <VBox/dbgf.h> -#include <VBox/mm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/mm.h> #include "SSMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> #include <VBox/version.h> diff --git a/src/VBox/VMM/STAM.cpp b/src/VBox/VMM/VMMR3/STAM.cpp index a3f3daa90..d6193d2e5 100644 --- a/src/VBox/VMM/STAM.cpp +++ b/src/VBox/VMM/VMMR3/STAM.cpp @@ -1,4 +1,4 @@ -/* $Id: STAM.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: STAM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * STAM - The Statistics Manager. */ @@ -48,10 +48,10 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_STAM -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include "STAMInternal.h" -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/dbg.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/TM.cpp b/src/VBox/VMM/VMMR3/TM.cpp index 97b5deb44..f792bcdbb 100644 --- a/src/VBox/VMM/TM.cpp +++ b/src/VBox/VMM/VMMR3/TM.cpp @@ -1,4 +1,4 @@ -/* $Id: TM.cpp 35272 2010-12-21 12:13:09Z vboxsync $ */ +/* $Id: TM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TM - Time Manager. */ @@ -120,18 +120,18 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TM -#include <VBox/tm.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/ssm.h> -#include <VBox/dbgf.h> -#include <VBox/rem.h> -#include <VBox/pdmapi.h> -#include <VBox/iom.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/iom.h> #include "TMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> -#include <VBox/pdmdev.h> +#include <VBox/vmm/pdmdev.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/TRPM.cpp b/src/VBox/VMM/VMMR3/TRPM.cpp index 3e9393c6e..2c7db7706 100644 --- a/src/VBox/VMM/TRPM.cpp +++ b/src/VBox/VMM/VMMR3/TRPM.cpp @@ -1,4 +1,4 @@ -/* $Id: TRPM.cpp 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: TRPM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TRPM - The Trap Monitor. */ @@ -73,23 +73,23 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TRPM -#include <VBox/trpm.h> -#include <VBox/cpum.h> -#include <VBox/selm.h> -#include <VBox/ssm.h> -#include <VBox/pdmapi.h> -#include <VBox/pgm.h> -#include <include/internal/pgm.h> -#include <VBox/dbgf.h> -#include <VBox/mm.h> -#include <VBox/stam.h> -#include <VBox/csam.h> -#include <VBox/patm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pgm.h> +#include "internal/pgm.h" +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/patm.h> #include "TRPMInternal.h" -#include <VBox/vm.h> -#include <VBox/em.h> -#include <VBox/rem.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/hwaccm.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/VBoxVMMDeps.cpp b/src/VBox/VMM/VMMR3/VBoxVMMDeps.cpp index 370ae1336..54e6a9e83 100644 --- a/src/VBox/VMM/VBoxVMMDeps.cpp +++ b/src/VBox/VMM/VMMR3/VBoxVMMDeps.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxVMMDeps.cpp 32006 2010-08-26 16:14:33Z vboxsync $ */ +/* $Id: VBoxVMMDeps.cpp 35410 2011-01-05 17:21:11Z vboxsync $ */ /** @file * VBoxVMM link dependencies - drag all we want into the link! */ @@ -19,16 +19,16 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/pgm.h> -#include <VBox/pdmapi.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pdmqueue.h> -#include <VBox/vm.h> -#include <VBox/em.h> -#include <VBox/iom.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pdmqueue.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/dbgf.h> #include <VBox/dbg.h> -#include <VBox/ftm.h> +#include <VBox/vmm/ftm.h> VMMR3DECL(int) VMMDoTest(PVM pVM); @@ -44,7 +44,7 @@ PFNRT g_apfnDeps[] = (PFNRT)DBGFR3CpuGetMode, (PFNRT)DBGFR3CoreWrite, (PFNRT)DBGFR3MemScan, - (PFNRT)DBGFR3RegQueryU8, + (PFNRT)DBGFR3RegCpuQueryU8, (PFNRT)EMInterpretInstruction, (PFNRT)IOMIOPortRead, (PFNRT)PDMQueueInsert, diff --git a/src/VBox/VMM/VM.cpp b/src/VBox/VMM/VMMR3/VM.cpp index 2a47e5081..d9e1bc198 100644 --- a/src/VBox/VMM/VM.cpp +++ b/src/VBox/VMM/VMMR3/VM.cpp @@ -1,4 +1,4 @@ -/* $Id: VM.cpp 34683 2010-12-03 10:24:46Z vboxsync $ */ +/* $Id: VM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VM - Virtual Machine */ @@ -42,30 +42,30 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VM -#include <VBox/cfgm.h> -#include <VBox/vmm.h> -#include <VBox/gvmm.h> -#include <VBox/mm.h> -#include <VBox/cpum.h> -#include <VBox/selm.h> -#include <VBox/trpm.h> -#include <VBox/dbgf.h> -#include <VBox/pgm.h> -#include <VBox/pdmapi.h> -#include <VBox/pdmcritsect.h> -#include <VBox/em.h> -#include <VBox/rem.h> -#include <VBox/tm.h> -#include <VBox/stam.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/iom.h> -#include <VBox/ssm.h> -#include <VBox/ftm.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/gvmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/ftm.h> +#include <VBox/vmm/hwaccm.h> #include "VMInternal.h" -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/sup.h> #include <VBox/dbg.h> diff --git a/src/VBox/VMM/VMEmt.cpp b/src/VBox/VMM/VMMR3/VMEmt.cpp index fc0fa55dd..89bfb869c 100644 --- a/src/VBox/VMM/VMEmt.cpp +++ b/src/VBox/VMM/VMMR3/VMEmt.cpp @@ -1,4 +1,4 @@ -/* $Id: VMEmt.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMEmt.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VM - Virtual Machine, The Emulation Thread. */ @@ -20,15 +20,15 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VM -#include <VBox/tm.h> -#include <VBox/dbgf.h> -#include <VBox/em.h> -#include <VBox/pdmapi.h> -#include <VBox/rem.h> -#include <VBox/tm.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/tm.h> #include "VMInternal.h" -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMM.cpp b/src/VBox/VMM/VMMR3/VMM.cpp index 6d88acb56..14ef7ffcc 100644 --- a/src/VBox/VMM/VMM.cpp +++ b/src/VBox/VMM/VMMR3/VMM.cpp @@ -1,4 +1,4 @@ -/* $Id: VMM.cpp 34326 2010-11-24 14:03:55Z vboxsync $ */ +/* $Id: VMM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - The Virtual Machine Monitor Core. */ @@ -50,36 +50,36 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VMM -#include <VBox/vmm.h> -#include <VBox/vmapi.h> -#include <VBox/pgm.h> -#include <VBox/cfgm.h> -#include <VBox/pdmqueue.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pdmapi.h> -#include <VBox/cpum.h> -#include <VBox/mm.h> -#include <VBox/iom.h> -#include <VBox/trpm.h> -#include <VBox/selm.h> -#include <VBox/em.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/vmapi.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/pdmqueue.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/em.h> #include <VBox/sup.h> -#include <VBox/dbgf.h> -#include <VBox/csam.h> -#include <VBox/patm.h> -#include <VBox/rem.h> -#include <VBox/ssm.h> -#include <VBox/tm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/tm.h> #include "VMMInternal.h" -#include "VMMSwitcher/VMMSwitcher.h" -#include <VBox/vm.h> -#include <VBox/ftm.h> +#include "VMMSwitcher.h" +#include <VBox/vmm/vm.h> +#include <VBox/vmm/ftm.h> #include <VBox/err.h> #include <VBox/param.h> #include <VBox/version.h> #include <VBox/x86.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/hwaccm.h> #include <iprt/assert.h> #include <iprt/alloc.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/VMMGuruMeditation.cpp b/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp index 8485d4c29..c6f8e9e0c 100644 --- a/src/VBox/VMM/VMMGuruMeditation.cpp +++ b/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMGuruMeditation.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMMGuruMeditation.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - The Virtual Machine Monitor, Guru Meditation Code. */ @@ -19,21 +19,21 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VMM -#include <VBox/vmm.h> -#include <VBox/pdmapi.h> -#include <VBox/pdmcritsect.h> -#include <VBox/trpm.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/dbgf.h> #include "VMMInternal.h" -#include <VBox/vm.h> -#include <VBox/mm.h> -#include <VBox/iom.h> -#include <VBox/em.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/em.h> #include <VBox/err.h> #include <VBox/param.h> #include <VBox/version.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/hwaccm.h> #include <iprt/assert.h> #include <iprt/time.h> #include <iprt/stream.h> diff --git a/src/VBox/VMM/VMMSwitcher.cpp b/src/VBox/VMM/VMMR3/VMMSwitcher.cpp index f69e5b56b..0256a7187 100644 --- a/src/VBox/VMM/VMMSwitcher.cpp +++ b/src/VBox/VMM/VMMR3/VMMSwitcher.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMSwitcher.cpp 34322 2010-11-24 13:36:24Z vboxsync $ */ +/* $Id: VMMSwitcher.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - The Virtual Machine Monitor, World Switcher(s). */ @@ -19,14 +19,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VMM -#include <VBox/vmm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/mm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/mm.h> #include <VBox/sup.h> #include "VMMInternal.h" -#include "VMMSwitcher/VMMSwitcher.h" -#include <VBox/vm.h> +#include "VMMSwitcher.h" +#include <VBox/vmm/vm.h> #include <VBox/dis.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/VMMTests.cpp b/src/VBox/VMM/VMMR3/VMMTests.cpp index 734b04a13..0c7c49f27 100644 --- a/src/VBox/VMM/VMMTests.cpp +++ b/src/VBox/VMM/VMMR3/VMMTests.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMTests.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMMTests.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - The Virtual Machine Monitor Core, Tests. */ @@ -22,19 +22,19 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VMM #include <iprt/asm-amd64-x86.h> /* for SUPGetCpuHzFromGIP */ -#include <VBox/vmm.h> -#include <VBox/pdmapi.h> -#include <VBox/cpum.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/cpum.h> #include <VBox/dbg.h> -#include <VBox/mm.h> -#include <VBox/trpm.h> -#include <VBox/selm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/selm.h> #include "VMMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/param.h> #include <VBox/x86.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/hwaccm.h> #include <iprt/assert.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/VMReq.cpp b/src/VBox/VMM/VMMR3/VMReq.cpp index 7467c42ef..eca0bf4bf 100644 --- a/src/VBox/VMM/VMReq.cpp +++ b/src/VBox/VMM/VMMR3/VMReq.cpp @@ -1,4 +1,4 @@ -/* $Id: VMReq.cpp 34790 2010-12-07 15:00:28Z vboxsync $ */ +/* $Id: VMReq.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VM - Virtual Machine */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VM -#include <VBox/mm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vmm.h> #include "VMInternal.h" -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/VMMGC/CPUMGC.cpp b/src/VBox/VMM/VMMRC/CPUMRC.cpp index 223b47caf..09cef651f 100644 --- a/src/VBox/VMM/VMMGC/CPUMGC.cpp +++ b/src/VBox/VMM/VMMRC/CPUMRC.cpp @@ -1,4 +1,4 @@ -/* $Id: CPUMGC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: CPUMRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * CPUM - Guest Context Code. */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_CPUM -#include <VBox/cpum.h> -#include <VBox/vmm.h> -#include <VBox/trpm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/trpm.h> #include "CPUMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <iprt/assert.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMGC/CPUMGCA.asm b/src/VBox/VMM/VMMRC/CPUMRCA.asm index f5826e070..03ec24391 100644 --- a/src/VBox/VMM/VMMGC/CPUMGCA.asm +++ b/src/VBox/VMM/VMMRC/CPUMRCA.asm @@ -1,4 +1,4 @@ -; $Id: CPUMGCA.asm 30164 2010-06-11 14:16:09Z vboxsync $ +; $Id: CPUMRCA.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; CPUM - Guest Context Assembly Routines. ; @@ -17,13 +17,13 @@ ;******************************************************************************* ;* Header Files * ;******************************************************************************* -%include "VMMGC.mac" -%include "VBox/vm.mac" +%include "VMMRC.mac" +%include "VBox/vmm/vm.mac" %include "VBox/err.mac" -%include "VBox/stam.mac" +%include "VBox/vmm/stam.mac" %include "CPUMInternal.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" +%include "VBox/vmm/cpum.mac" ;******************************************************************************* diff --git a/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp b/src/VBox/VMM/VMMRC/CSAMRC.cpp index e7a9d8bd9..8099b6467 100644 --- a/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp +++ b/src/VBox/VMM/VMMRC/CSAMRC.cpp @@ -1,4 +1,4 @@ -/* $Id: CSAMGC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: CSAMRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * CSAM - Guest OS Code Scanning and Analysis Manager - Any Context */ @@ -20,19 +20,19 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_CSAM -#include <VBox/cpum.h> -#include <VBox/stam.h> -#include <VBox/patm.h> -#include <VBox/csam.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> #include <VBox/sup.h> -#include <VBox/mm.h> -#include <VBox/rem.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/rem.h> #include <VBox/param.h> #include <iprt/avl.h> #include "CSAMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/dbg.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMGC/EMGCA.asm b/src/VBox/VMM/VMMRC/EMRCA.asm index 5d36d7c4b..e024646ce 100644 --- a/src/VBox/VMM/VMMGC/EMGCA.asm +++ b/src/VBox/VMM/VMMRC/EMRCA.asm @@ -1,4 +1,4 @@ -; $Id: EMGCA.asm 32404 2010-09-10 13:17:42Z vboxsync $ +; $Id: EMRCA.asm 35335 2010-12-27 12:34:40Z vboxsync $ ;; @file ; EM Assembly Routines. ; diff --git a/src/VBox/VMM/VMMGC/HWACCMGCA.asm b/src/VBox/VMM/VMMRC/HWACCMRCA.asm index 29c3bc6f9..b4897976f 100644 --- a/src/VBox/VMM/VMMGC/HWACCMGCA.asm +++ b/src/VBox/VMM/VMMRC/HWACCMRCA.asm @@ -1,4 +1,4 @@ -; $Id: HWACCMGCA.asm 30092 2010-06-08 14:24:51Z vboxsync $ +; $Id: HWACCMRCA.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; VMXM - GC vmx helpers ; @@ -22,10 +22,10 @@ %define RT_ARCH_AMD64 %include "VBox/asmdefs.mac" %include "VBox/err.mac" -%include "VBox/hwacc_vmx.mac" -%include "VBox/cpum.mac" +%include "VBox/vmm/hwacc_vmx.mac" +%include "VBox/vmm/cpum.mac" %include "VBox/x86.mac" -%include "../HWACCMInternal.mac" +%include "HWACCMInternal.mac" %ifdef RT_OS_OS2 ;; @todo fix OMF support in yasm and kick nasm out completely. %macro vmwrite 2, @@ -109,19 +109,19 @@ BEGINPROC VMXGCStartVM64 jnc .vmxon_success mov rax, VERR_VMX_INVALID_VMXON_PTR jmp .vmstart64_vmxon_failed - + .vmxon_success: jnz .vmxon_success2 mov rax, VERR_VMX_GENERIC jmp .vmstart64_vmxon_failed - -.vmxon_success2: + +.vmxon_success2: ; Activate the VMCS pointer vmptrld [rbp + 16 + 8] jnc .vmptrld_success mov rax, VERR_VMX_INVALID_VMCS_PTR jmp .vmstart64_vmxoff_end - + .vmptrld_success: jnz .vmptrld_success2 mov rax, VERR_VMX_GENERIC @@ -158,8 +158,8 @@ BEGINPROC VMXGCStartVM64 mov rdx, rcx mov rcx, 0 jmp .cached_write - -ALIGN(16) + +ALIGN(16) .cached_write: mov eax, [rbx + VMCSCACHE.Write.aField + rcx*4] vmwrite rax, qword [rbx + VMCSCACHE.Write.aFieldVal + rcx*8] @@ -176,7 +176,7 @@ ALIGN(16) ; Save the pCache pointer push xBX %endif - + ; Save the host state that's relevant in the temporary 64 bits mode mov rdx, cr0 mov eax, VMX_VMCS_HOST_CR0 @@ -207,11 +207,11 @@ ALIGN(16) %ifdef VBOX_WITH_CRASHDUMP_MAGIC mov qword [rbx + VMCSCACHE.uPos], 4 %endif - + ; hopefully we can ignore TR (we restore it anyway on the way back to 32 bits mode) - + ;/* First we have to save some final CPU context registers. */ - lea rdx, [.vmlaunch64_done wrt rip] + lea rdx, [.vmlaunch64_done wrt rip] mov rax, VMX_VMCS_HOST_RIP ;/* return address (too difficult to continue after VMLAUNCH?) */ vmwrite rax, rdx ;/* Note: assumes success... */ @@ -325,7 +325,7 @@ ALIGNCODE(16) mov rax, cr8 mov [rdi + VMCSCACHE.TestOut.cr8], rax %endif - + mov ecx, [rdi + VMCSCACHE.Read.cValidEntries] cmp ecx, 0 ; can't happen je .no_cached_reads @@ -549,7 +549,7 @@ BEGINPROC HWACCMSaveGuestFPU64 fxsave [rsi + CPUMCTX.fpu] mov cr0, rcx ; and restore old CR0 again - + mov eax, VINF_SUCCESS ret ENDPROC HWACCMSaveGuestFPU64 diff --git a/src/VBox/VMM/VMMGC/IOMGC.cpp b/src/VBox/VMM/VMMRC/IOMRC.cpp index de2c2ca77..eb51a09fb 100644 --- a/src/VBox/VMM/VMMGC/IOMGC.cpp +++ b/src/VBox/VMM/VMMRC/IOMRC.cpp @@ -1,4 +1,4 @@ -/* $Id: IOMGC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: IOMRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * IOM - Input / Output Monitor - Guest Context. */ @@ -20,16 +20,16 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_IOM -#include <VBox/iom.h> -#include <VBox/cpum.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/pgm.h> -#include <VBox/trpm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/trpm.h> #include "IOMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/dis.h> #include <VBox/disopcode.h> diff --git a/src/VBox/VMM/VMMGC/MMRamGC.cpp b/src/VBox/VMM/VMMRC/MMRamRC.cpp index 6a3464708..8d4e33eef 100644 --- a/src/VBox/VMM/VMMGC/MMRamGC.cpp +++ b/src/VBox/VMM/VMMRC/MMRamRC.cpp @@ -1,4 +1,4 @@ -/* $Id: MMRamGC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: MMRamRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MMRamGC - Guest Context Ram access Routines, pair for MMRamGCA.asm. */ @@ -20,14 +20,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_MM -#include <VBox/mm.h> -#include <VBox/cpum.h> -#include <VBox/trpm.h> -#include <VBox/em.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/em.h> #include "MMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/pgm.h> #include <iprt/assert.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/VMMGC/MMRamGCA.asm b/src/VBox/VMM/VMMRC/MMRamRCA.asm index d22de636f..0d9b0dff0 100644 --- a/src/VBox/VMM/VMMGC/MMRamGCA.asm +++ b/src/VBox/VMM/VMMRC/MMRamRCA.asm @@ -1,4 +1,4 @@ -; $Id: MMRamGCA.asm 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: MMRamRCA.asm 35335 2010-12-27 12:34:40Z vboxsync $ ;; @file ; MMRamGCA - Guest Context Ram access Assembly Routines. ; diff --git a/src/VBox/VMM/VMMRC/Makefile.kup b/src/VBox/VMM/VMMRC/Makefile.kup new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/VBox/VMM/VMMRC/Makefile.kup diff --git a/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp b/src/VBox/VMM/VMMRC/PATMRC.cpp index 912091cba..076f30401 100644 --- a/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp +++ b/src/VBox/VMM/VMMRC/PATMRC.cpp @@ -1,4 +1,4 @@ -/* $Id: PATMGC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PATMRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PATM - Dynamic Guest OS Patching Manager - Guest Context */ @@ -20,24 +20,24 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PATM -#include <VBox/cpum.h> -#include <VBox/stam.h> -#include <VBox/patm.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> #include <VBox/sup.h> -#include <VBox/mm.h> +#include <VBox/vmm/mm.h> #include <VBox/param.h> #include <iprt/avl.h> #include "PATMInternal.h" #include "PATMA.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/dbg.h> #include <VBox/dis.h> #include <VBox/disopcode.h> -#include <VBox/em.h> +#include <VBox/vmm/em.h> #include <VBox/err.h> -#include <VBox/selm.h> +#include <VBox/vmm/selm.h> #include <VBox/log.h> #include <iprt/assert.h> #include <iprt/asm.h> diff --git a/src/VBox/VMM/VMMGC/PDMGCDevice.cpp b/src/VBox/VMM/VMMRC/PDMRCDevice.cpp index e0e80f16b..c1e7c3f52 100644 --- a/src/VBox/VMM/VMMGC/PDMGCDevice.cpp +++ b/src/VBox/VMM/VMMRC/PDMRCDevice.cpp @@ -1,4 +1,4 @@ -/* $Id: PDMGCDevice.cpp 33799 2010-11-05 16:14:07Z vboxsync $ */ +/* $Id: PDMRCDevice.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Pluggable Device and Driver Manager, RC Device parts. */ @@ -21,12 +21,12 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_DEVICE #include "PDMInternal.h" -#include <VBox/pdm.h> -#include <VBox/pgm.h> -#include <VBox/mm.h> -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/patm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/patm.h> #include <VBox/log.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/VMMGC/PGMGC.cpp b/src/VBox/VMM/VMMRC/PGMRC.cpp index 439cfa433..334558d8f 100644 --- a/src/VBox/VMM/VMMGC/PGMGC.cpp +++ b/src/VBox/VMM/VMMRC/PGMRC.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMGC.cpp 31402 2010-08-05 12:28:18Z vboxsync $ */ +/* $Id: PGMRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Monitor, Guest Context. */ @@ -20,17 +20,17 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM -#include <VBox/pgm.h> -#include <VBox/cpum.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/selm.h> -#include <VBox/iom.h> -#include <VBox/trpm.h> -#include <VBox/rem.h> -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/rem.h> +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <iprt/asm.h> #include <iprt/assert.h> @@ -54,14 +54,14 @@ */ #define PGM_SHW_TYPE PGM_TYPE_32BIT #define PGM_SHW_NAME(name) PGM_SHW_NAME_32BIT(name) -#include "PGMGCShw.h" +#include "PGMRCShw.h" /* Guest - real mode */ #define PGM_GST_TYPE PGM_TYPE_REAL #define PGM_GST_NAME(name) PGM_GST_NAME_REAL(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_32BIT_REAL(name) -#include "PGMGCGst.h" -#include "PGMGCBth.h" +#include "PGMRCGst.h" +#include "PGMRCBth.h" #undef PGM_BTH_NAME #undef PGM_GST_TYPE #undef PGM_GST_NAME @@ -70,8 +70,8 @@ #define PGM_GST_TYPE PGM_TYPE_PROT #define PGM_GST_NAME(name) PGM_GST_NAME_PROT(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_32BIT_PROT(name) -#include "PGMGCGst.h" -#include "PGMGCBth.h" +#include "PGMRCGst.h" +#include "PGMRCBth.h" #undef PGM_BTH_NAME #undef PGM_GST_TYPE #undef PGM_GST_NAME @@ -80,8 +80,8 @@ #define PGM_GST_TYPE PGM_TYPE_32BIT #define PGM_GST_NAME(name) PGM_GST_NAME_32BIT(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_32BIT_32BIT(name) -#include "PGMGCGst.h" -#include "PGMGCBth.h" +#include "PGMRCGst.h" +#include "PGMRCBth.h" #undef PGM_BTH_NAME #undef PGM_GST_TYPE #undef PGM_GST_NAME @@ -97,13 +97,13 @@ #define PGM_SHW_TYPE PGM_TYPE_PAE #define PGM_SHW_NAME(name) PGM_SHW_NAME_PAE(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_REAL(name) -#include "PGMGCShw.h" +#include "PGMRCShw.h" /* Guest - real mode */ #define PGM_GST_TYPE PGM_TYPE_REAL #define PGM_GST_NAME(name) PGM_GST_NAME_REAL(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_REAL(name) -#include "PGMGCBth.h" +#include "PGMRCBth.h" #undef PGM_BTH_NAME #undef PGM_GST_TYPE #undef PGM_GST_NAME @@ -112,7 +112,7 @@ #define PGM_GST_TYPE PGM_TYPE_PROT #define PGM_GST_NAME(name) PGM_GST_NAME_PROT(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_PROT(name) -#include "PGMGCBth.h" +#include "PGMRCBth.h" #undef PGM_BTH_NAME #undef PGM_GST_TYPE #undef PGM_GST_NAME @@ -121,7 +121,7 @@ #define PGM_GST_TYPE PGM_TYPE_32BIT #define PGM_GST_NAME(name) PGM_GST_NAME_32BIT(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_32BIT(name) -#include "PGMGCBth.h" +#include "PGMRCBth.h" #undef PGM_BTH_NAME #undef PGM_GST_TYPE #undef PGM_GST_NAME @@ -130,8 +130,8 @@ #define PGM_GST_TYPE PGM_TYPE_PAE #define PGM_GST_NAME(name) PGM_GST_NAME_PAE(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_PAE(name) -#include "PGMGCGst.h" -#include "PGMGCBth.h" +#include "PGMRCGst.h" +#include "PGMRCBth.h" #undef PGM_BTH_NAME #undef PGM_GST_TYPE #undef PGM_GST_NAME @@ -145,15 +145,15 @@ */ #define PGM_SHW_TYPE PGM_TYPE_AMD64 #define PGM_SHW_NAME(name) PGM_SHW_NAME_AMD64(name) -#include "PGMGCShw.h" +#include "PGMRCShw.h" #ifdef VBOX_WITH_64_BITS_GUESTS /* Guest - AMD64 mode */ #define PGM_GST_TYPE PGM_TYPE_AMD64 #define PGM_GST_NAME(name) PGM_GST_NAME_AMD64(name) #define PGM_BTH_NAME(name) PGM_BTH_NAME_AMD64_AMD64(name) -#include "PGMGCGst.h" -#include "PGMGCBth.h" +#include "PGMRCGst.h" +#include "PGMRCBth.h" #undef PGM_BTH_NAME #undef PGM_GST_TYPE #undef PGM_GST_NAME diff --git a/src/VBox/VMM/VMMGC/PGMGCBth.h b/src/VBox/VMM/VMMRC/PGMRCBth.h index 014b8c6ec..a4c94ddb5 100644 --- a/src/VBox/VMM/VMMGC/PGMGCBth.h +++ b/src/VBox/VMM/VMMRC/PGMRCBth.h @@ -1,4 +1,4 @@ -/* $Id: PGMGCBth.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: PGMRCBth.h 35335 2010-12-27 12:34:40Z vboxsync $ */ /** @file * VBox - Page Manager, Shadow+Guest Paging Template - Guest Context. */ diff --git a/src/VBox/VMM/VMMGC/PGMGCGst.h b/src/VBox/VMM/VMMRC/PGMRCGst.h index fd9d364b9..476a67c14 100644 --- a/src/VBox/VMM/VMMGC/PGMGCGst.h +++ b/src/VBox/VMM/VMMRC/PGMRCGst.h @@ -1,4 +1,4 @@ -/* $Id: PGMGCGst.h 32036 2010-08-27 10:14:39Z vboxsync $ */ +/* $Id: PGMRCGst.h 35335 2010-12-27 12:34:40Z vboxsync $ */ /** @file * VBox - Page Manager, Guest Paging Template - Guest Context. */ diff --git a/src/VBox/VMM/VMMGC/PGMGCShw.h b/src/VBox/VMM/VMMRC/PGMRCShw.h index 07f3afbd6..478754cf1 100644 --- a/src/VBox/VMM/VMMGC/PGMGCShw.h +++ b/src/VBox/VMM/VMMRC/PGMRCShw.h @@ -1,4 +1,4 @@ -/* $Id: PGMGCShw.h 32036 2010-08-27 10:14:39Z vboxsync $ */ +/* $Id: PGMRCShw.h 35335 2010-12-27 12:34:40Z vboxsync $ */ /** @file * VBox - Page Manager, Shadow Paging Template - Guest Context. */ diff --git a/src/VBox/VMM/VMMGC/SELMGC.cpp b/src/VBox/VMM/VMMRC/SELMRC.cpp index ebdfd0f51..670f1d410 100644 --- a/src/VBox/VMM/VMMGC/SELMGC.cpp +++ b/src/VBox/VMM/VMMRC/SELMRC.cpp @@ -1,4 +1,4 @@ -/* $Id: SELMGC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: SELMRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * SELM - The Selector Manager, Guest Context. */ @@ -19,14 +19,14 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_SELM -#include <VBox/selm.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/trpm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/trpm.h> #include "SELMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/pgm.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/VMMGC/TRPMGC.cpp b/src/VBox/VMM/VMMRC/TRPMRC.cpp index a52d8a770..9d4c5a988 100644 --- a/src/VBox/VMM/VMMGC/TRPMGC.cpp +++ b/src/VBox/VMM/VMMRC/TRPMRC.cpp @@ -1,4 +1,4 @@ -/* $Id: TRPMGC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: TRPMRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TRPM - The Trap Monitor, Guest Context */ @@ -20,19 +20,19 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TRPM -#include <VBox/trpm.h> -#include <VBox/cpum.h> -#include <VBox/vmm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/vmm.h> #include "TRPMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/x86.h> -#include <VBox/em.h> +#include <VBox/vmm/em.h> #include <iprt/assert.h> #include <iprt/asm.h> #include <VBox/log.h> -#include <VBox/selm.h> +#include <VBox/vmm/selm.h> diff --git a/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp b/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp index 65d3fc883..68a936bd3 100644 --- a/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp +++ b/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp @@ -1,4 +1,4 @@ -/* $Id: TRPMGCHandlers.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: TRPMRCHandlers.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TRPM - Guest Context Trap Handlers, CPP part */ @@ -20,19 +20,19 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_TRPM -#include <VBox/selm.h> -#include <VBox/iom.h> -#include <VBox/pgm.h> -#include <VBox/pdmapi.h> -#include <VBox/dbgf.h> -#include <VBox/em.h> -#include <VBox/csam.h> -#include <VBox/patm.h> -#include <VBox/mm.h> -#include <VBox/cpum.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/cpum.h> #include "TRPMInternal.h" -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/param.h> #include <VBox/err.h> @@ -40,7 +40,7 @@ #include <VBox/disopcode.h> #include <VBox/x86.h> #include <VBox/log.h> -#include <VBox/tm.h> +#include <VBox/vmm/tm.h> #include <iprt/asm.h> #include <iprt/asm-amd64-x86.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMGC/TRPMGCHandlersA.asm b/src/VBox/VMM/VMMRC/TRPMRCHandlersA.asm index 9ff818b75..b283fc48e 100644 --- a/src/VBox/VMM/VMMGC/TRPMGCHandlersA.asm +++ b/src/VBox/VMM/VMMRC/TRPMRCHandlersA.asm @@ -1,4 +1,4 @@ -; $Id: TRPMGCHandlersA.asm 33540 2010-10-28 09:27:05Z vboxsync $ +; $Id: TRPMRCHandlersA.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; TRPM - Guest Context Trap Handlers ; @@ -17,14 +17,14 @@ ;******************************************************************************* ;* Header Files * ;******************************************************************************* -%include "VMMGC.mac" +%include "VMMRC.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" -%include "VBox/stam.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/cpum.mac" +%include "VBox/vmm/stam.mac" +%include "VBox/vmm/vm.mac" %include "TRPMInternal.mac" %include "VBox/err.mac" -%include "VBox/trpm.mac" +%include "VBox/vmm/trpm.mac" ;******************************************************************************* diff --git a/src/VBox/VMM/VMMGC/VMMGC.cpp b/src/VBox/VMM/VMMRC/VMMRC.cpp index 4ff94af11..5965456e8 100644 --- a/src/VBox/VMM/VMMGC/VMMGC.cpp +++ b/src/VBox/VMM/VMMRC/VMMRC.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMGC.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMMRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - Raw-mode Context. */ @@ -21,11 +21,11 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_VMM #include <iprt/asm-amd64-x86.h> /* for SUPGetCpuHzFromGIP */ -#include <VBox/vmm.h> -#include <VBox/trpm.h> -#include <VBox/pgm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/pgm.h> #include "VMMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/sup.h> #include <VBox/err.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/VMMGC/VMMGC.def b/src/VBox/VMM/VMMRC/VMMRC.def index 6e875fabe..b37ef4464 100644 --- a/src/VBox/VMM/VMMGC/VMMGC.def +++ b/src/VBox/VMM/VMMRC/VMMRC.def @@ -1,4 +1,4 @@ -; $Id: VMMGC.def 34593 2010-12-02 11:07:55Z vboxsync $ +; $Id: VMMRC.def 35335 2010-12-27 12:34:40Z vboxsync $ ;; @file ; VMM Raw-mode Context DLL - Definition file. diff --git a/src/VBox/VMM/VMMGC/VMMGC.mac b/src/VBox/VMM/VMMRC/VMMRC.mac index 547cedcac..cdf1cd3e4 100644 --- a/src/VBox/VMM/VMMGC/VMMGC.mac +++ b/src/VBox/VMM/VMMRC/VMMRC.mac @@ -1,4 +1,4 @@ -; $Id: VMMGC.mac 33540 2010-10-28 09:27:05Z vboxsync $ +; $Id: VMMRC.mac 35335 2010-12-27 12:34:40Z vboxsync $ ;; @file ; VMMGC - Raw-mode Context Assembly Macros. ; diff --git a/src/VBox/VMM/VMMGC/VMMGC0.asm b/src/VBox/VMM/VMMRC/VMMRC0.asm index df2192df6..71108d15d 100644 --- a/src/VBox/VMM/VMMGC/VMMGC0.asm +++ b/src/VBox/VMM/VMMRC/VMMRC0.asm @@ -1,4 +1,4 @@ -; $Id: VMMGC0.asm 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: VMMRC0.asm 35335 2010-12-27 12:34:40Z vboxsync $ ;; @file ; VMMGC0 - The first object module in the link. ; @@ -15,7 +15,7 @@ ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. ; -%include "VMMGC.mac" +%include "VMMRC.mac" ;; diff --git a/src/VBox/VMM/VMMGC/VMMGC99.asm b/src/VBox/VMM/VMMRC/VMMRC99.asm index 13fdf26b6..3278fac5b 100644 --- a/src/VBox/VMM/VMMGC/VMMGC99.asm +++ b/src/VBox/VMM/VMMRC/VMMRC99.asm @@ -1,4 +1,4 @@ -; $Id: VMMGC99.asm 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: VMMRC99.asm 35335 2010-12-27 12:34:40Z vboxsync $ ;; @file ; VMMGC99 - The last object module in the link. ; @@ -14,7 +14,7 @@ ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. ; -%include "VMMGC.mac" +%include "VMMRC.mac" ;; diff --git a/src/VBox/VMM/VMMGC/VMMGCA.asm b/src/VBox/VMM/VMMRC/VMMRCA.asm index aed722a57..61ab9b8ed 100644 --- a/src/VBox/VMM/VMMGC/VMMGCA.asm +++ b/src/VBox/VMM/VMMRC/VMMRCA.asm @@ -1,4 +1,4 @@ -; $Id: VMMGCA.asm 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: VMMRCA.asm 35335 2010-12-27 12:34:40Z vboxsync $ ;; @file ; VMMGC - Raw-mode Context Virtual Machine Monitor assembly routines. ; diff --git a/src/VBox/VMM/VMMGC/VMMGCBuiltin.def b/src/VBox/VMM/VMMRC/VMMRCBuiltin.def index 077f67375..40f78fdd7 100644 --- a/src/VBox/VMM/VMMGC/VMMGCBuiltin.def +++ b/src/VBox/VMM/VMMRC/VMMRCBuiltin.def @@ -1,4 +1,4 @@ -; $Id: VMMGCBuiltin.def 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: VMMRCBuiltin.def 35345 2010-12-27 14:41:49Z vboxsync $ ;; @file ; VMM Raw-mode Context Builtin DLL - Definition file for generating import library. ; @@ -14,7 +14,7 @@ ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. ; -LIBRARY VMMGCBuiltin.gc +LIBRARY VMMRCBuiltin.rc EXPORTS ; data g_VM DATA @@ -26,3 +26,4 @@ EXPORTS g_pSUPGlobalInfoPage DATA ; code + diff --git a/src/VBox/VMM/VMMGC/VMMGCDeps.cpp b/src/VBox/VMM/VMMRC/VMMRCDeps.cpp index 0f8920743..1734641f2 100644 --- a/src/VBox/VMM/VMMGC/VMMGCDeps.cpp +++ b/src/VBox/VMM/VMMRC/VMMRCDeps.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMGCDeps.cpp 35298 2010-12-22 12:35:46Z vboxsync $ */ +/* $Id: VMMRCDeps.cpp 35335 2010-12-27 12:34:40Z vboxsync $ */ /** @file * VMMGC Runtime Dependencies. */ diff --git a/src/VBox/VMM/VMMRZ/DBGFRZ.cpp b/src/VBox/VMM/VMMRZ/DBGFRZ.cpp index 76048b60d..558cd823a 100644 --- a/src/VBox/VMM/VMMRZ/DBGFRZ.cpp +++ b/src/VBox/VMM/VMMRZ/DBGFRZ.cpp @@ -1,4 +1,4 @@ -/* $Id: DBGFRZ.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: DBGFRZ.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * DBGF - Debugger Facility, RZ part. */ @@ -20,11 +20,11 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_DBGF -#include <VBox/dbgf.h> -#include <VBox/selm.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/selm.h> #include <VBox/log.h> #include "DBGFInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp b/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp index dbc388c82..7bb0f4328 100644 --- a/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp +++ b/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp @@ -1,4 +1,4 @@ -/* $Id: PGMRZDynMap.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMRZDynMap.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Page Manager and Monitor, dynamic mapping cache. */ @@ -20,10 +20,10 @@ * Internal Functions * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PGM_DYNMAP -#include <VBox/pgm.h> -#include "../PGMInternal.h" -#include <VBox/vm.h> -#include "../PGMInline.h" +#include <VBox/vmm/pgm.h> +#include "PGMInternal.h" +#include <VBox/vmm/vm.h> +#include "PGMInline.h" #include <VBox/err.h> #include <VBox/param.h> #include <VBox/sup.h> diff --git a/src/VBox/VMM/VMMRZ/VMMRZ.cpp b/src/VBox/VMM/VMMRZ/VMMRZ.cpp index c2b925d5c..d4dcab4ca 100644 --- a/src/VBox/VMM/VMMRZ/VMMRZ.cpp +++ b/src/VBox/VMM/VMMRZ/VMMRZ.cpp @@ -1,4 +1,4 @@ -/* $Id: VMMRZ.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: VMMRZ.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - Virtual Machine Monitor, Raw-mode and ring-0 context code. */ @@ -19,9 +19,9 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include "VMMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac b/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac index 0aa95d5d0..f0de66358 100644 --- a/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac +++ b/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac @@ -1,4 +1,4 @@ -; $Id: AMD64andLegacy.mac 34986 2010-12-13 10:38:20Z vboxsync $ +; $Id: AMD64andLegacy.mac 35418 2011-01-06 21:15:28Z vboxsync $ ;; @file ; VMM - World Switchers, template for AMD64 to PAE and 32-bit. ; @@ -24,11 +24,11 @@ %include "VBox/asmdefs.mac" %include "VBox/apic.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" -%include "VBox/stam.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/cpum.mac" +%include "VBox/vmm/stam.mac" +%include "VBox/vmm/vm.mac" %include "CPUMInternal.mac" -%include "VMMSwitcher/VMMSwitcher.mac" +%include "VMMSwitcher.mac" ; @@ -267,7 +267,6 @@ BEGINPROC vmmR0HostToGuestAsm rdmsr mov [rbx + r8 + CPUMCPU.Host.efer], eax mov [rbx + r8 + CPUMCPU.Host.efer + 4], edx - mov ecx, MSR_K6_EFER mov rdx, rbx ; special registers. sldt [rdx + r8 + CPUMCPU.Host.ldtr] diff --git a/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac b/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac index 837ae8b5f..609f5c147 100644 --- a/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac +++ b/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac @@ -27,11 +27,11 @@ %include "VBox/asmdefs.mac" %include "VBox/apic.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" -%include "VBox/stam.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/cpum.mac" +%include "VBox/vmm/stam.mac" +%include "VBox/vmm/vm.mac" %include "CPUMInternal.mac" -%include "VMMSwitcher/VMMSwitcher.mac" +%include "VMMSwitcher.mac" ; diff --git a/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac b/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac index fcffeb658..0ff471e8e 100644 --- a/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac +++ b/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac @@ -1,4 +1,4 @@ -; $Id: PAEand32Bit.mac 34991 2010-12-13 11:20:04Z vboxsync $ +; $Id: PAEand32Bit.mac 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; VMM - World Switchers, template for PAE and 32-Bit. ; @@ -23,11 +23,11 @@ %include "VBox/asmdefs.mac" %include "VBox/apic.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" -%include "VBox/stam.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/cpum.mac" +%include "VBox/vmm/stam.mac" +%include "VBox/vmm/vm.mac" %include "CPUMInternal.mac" -%include "VMMSwitcher/VMMSwitcher.mac" +%include "VMMSwitcher.mac" %undef NEED_ID %ifdef NEED_PAE_ON_32BIT_HOST diff --git a/src/VBox/VMM/CFGMInternal.h b/src/VBox/VMM/include/CFGMInternal.h index f65ff7cb6..9249ffac9 100644 --- a/src/VBox/VMM/CFGMInternal.h +++ b/src/VBox/VMM/include/CFGMInternal.h @@ -1,4 +1,4 @@ -/* $Id: CFGMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: CFGMInternal.h 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * CFGM - Internal header file. */ diff --git a/src/VBox/VMM/CPUMInternal.h b/src/VBox/VMM/include/CPUMInternal.h index 395605917..8d13ec346 100644 --- a/src/VBox/VMM/CPUMInternal.h +++ b/src/VBox/VMM/include/CPUMInternal.h @@ -1,4 +1,4 @@ -/* $Id: CPUMInternal.h 33935 2010-11-10 15:37:02Z vboxsync $ */ +/* $Id: CPUMInternal.h 35490 2011-01-11 15:17:10Z vboxsync $ */ /** @file * CPUM - Internal header file. */ @@ -403,23 +403,27 @@ typedef CPUMCPU *PCPUMCPU; RT_C_DECLS_BEGIN -DECLASM(int) cpumHandleLazyFPUAsm(PCPUMCPU pCPUM); +#ifdef IN_RING3 +int cpumR3DbgInit(PVM pVM); +#endif + +DECLASM(int) cpumHandleLazyFPUAsm(PCPUMCPU pCPUM); #ifdef IN_RING0 -DECLASM(int) cpumR0SaveHostRestoreGuestFPUState(PCPUMCPU pCPUM); -DECLASM(int) cpumR0SaveGuestRestoreHostFPUState(PCPUMCPU pCPUM); -DECLASM(int) cpumR0SaveHostFPUState(PCPUMCPU pCPUM); -DECLASM(int) cpumR0RestoreHostFPUState(PCPUMCPU pCPUM); -DECLASM(void) cpumR0LoadFPU(PCPUMCTX pCtx); -DECLASM(void) cpumR0SaveFPU(PCPUMCTX pCtx); -DECLASM(void) cpumR0LoadXMM(PCPUMCTX pCtx); -DECLASM(void) cpumR0SaveXMM(PCPUMCTX pCtx); -DECLASM(void) cpumR0SetFCW(uint16_t u16FCW); -DECLASM(uint16_t) cpumR0GetFCW(void); -DECLASM(void) cpumR0SetMXCSR(uint32_t u32MXCSR); -DECLASM(uint32_t) cpumR0GetMXCSR(void); -DECLASM(void) cpumR0LoadDRx(uint64_t const *pa4Regs); -DECLASM(void) cpumR0SaveDRx(uint64_t *pa4Regs); +DECLASM(int) cpumR0SaveHostRestoreGuestFPUState(PCPUMCPU pCPUM); +DECLASM(int) cpumR0SaveGuestRestoreHostFPUState(PCPUMCPU pCPUM); +DECLASM(int) cpumR0SaveHostFPUState(PCPUMCPU pCPUM); +DECLASM(int) cpumR0RestoreHostFPUState(PCPUMCPU pCPUM); +DECLASM(void) cpumR0LoadFPU(PCPUMCTX pCtx); +DECLASM(void) cpumR0SaveFPU(PCPUMCTX pCtx); +DECLASM(void) cpumR0LoadXMM(PCPUMCTX pCtx); +DECLASM(void) cpumR0SaveXMM(PCPUMCTX pCtx); +DECLASM(void) cpumR0SetFCW(uint16_t u16FCW); +DECLASM(uint16_t) cpumR0GetFCW(void); +DECLASM(void) cpumR0SetMXCSR(uint32_t u32MXCSR); +DECLASM(uint32_t) cpumR0GetMXCSR(void); +DECLASM(void) cpumR0LoadDRx(uint64_t const *pa4Regs); +DECLASM(void) cpumR0SaveDRx(uint64_t *pa4Regs); #endif RT_C_DECLS_END diff --git a/src/VBox/VMM/CPUMInternal.mac b/src/VBox/VMM/include/CPUMInternal.mac index 8b6fd9a1a..cd927f747 100644 --- a/src/VBox/VMM/CPUMInternal.mac +++ b/src/VBox/VMM/include/CPUMInternal.mac @@ -1,4 +1,4 @@ -; $Id: CPUMInternal.mac 34272 2010-11-23 09:51:17Z vboxsync $ +; $Id: CPUMInternal.mac 35333 2010-12-27 12:10:56Z vboxsync $ ;; @file ; CPUM - Internal header file (asm). ; diff --git a/src/VBox/VMM/PATM/CSAMInternal.h b/src/VBox/VMM/include/CSAMInternal.h index 28ae82ab7..92d286023 100644 --- a/src/VBox/VMM/PATM/CSAMInternal.h +++ b/src/VBox/VMM/include/CSAMInternal.h @@ -1,4 +1,4 @@ -/* $Id: CSAMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: CSAMInternal.h 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * CSAM - Internal header file. */ @@ -20,7 +20,7 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/csam.h> +#include <VBox/vmm/csam.h> #include <VBox/dis.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/DBGFInternal.h b/src/VBox/VMM/include/DBGFInternal.h index f38d7f994..46d686257 100644 --- a/src/VBox/VMM/DBGFInternal.h +++ b/src/VBox/VMM/include/DBGFInternal.h @@ -1,4 +1,4 @@ -/* $Id: DBGFInternal.h 32340 2010-09-09 11:51:09Z vboxsync $ */ +/* $Id: DBGFInternal.h 35601 2011-01-18 10:43:11Z vboxsync $ */ /** @file * DBGF - Internal header file. */ @@ -24,7 +24,7 @@ #include <iprt/critsect.h> #include <iprt/string.h> #include <iprt/avl.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> @@ -193,31 +193,31 @@ typedef DBGFOS const *PCDBGFOS; typedef struct DBGF { /** Offset to the VM structure. */ - RTINT offVM; + int32_t offVM; /** Debugger Attached flag. * Set if a debugger is attached, elsewise it's clear. */ - bool volatile fAttached; + bool volatile fAttached; /** Stopped in the Hypervisor. * Set if we're stopped on a trace, breakpoint or assertion inside * the hypervisor and have to restrict the available operations. */ - bool volatile fStoppedInHyper; + bool volatile fStoppedInHyper; /** * Ping-Pong construct where the Ping side is the VMM and the Pong side * the Debugger. */ - RTPINGPONG PingPong; + RTPINGPONG PingPong; /** The Event to the debugger. * The VMM will ping the debugger when the event is ready. The event is * either a response to a command or to a break/watch point issued * previously. */ - DBGFEVENT DbgEvent; + DBGFEVENT DbgEvent; /** The Command to the VMM. * Operated in an atomic fashion since the VMM will poll on this. @@ -225,57 +225,71 @@ typedef struct DBGF * is set. The VMM will reset this member to the no-command state * when it have processed it. */ - DBGFCMD volatile enmVMMCmd; + DBGFCMD volatile enmVMMCmd; /** The Command data. * Not all commands take data. */ - DBGFCMDDATA VMMCmdData; + DBGFCMDDATA VMMCmdData; /** List of registered info handlers. */ - R3PTRTYPE(PDBGFINFO) pInfoFirst; + R3PTRTYPE(PDBGFINFO) pInfoFirst; /** Critical section protecting the above list. */ - RTCRITSECT InfoCritSect; + RTCRITSECT InfoCritSect; /** Range tree containing the loaded symbols of the a VM. * This tree will never have blind spots. */ - R3PTRTYPE(AVLRGCPTRTREE) SymbolTree; + R3PTRTYPE(AVLRGCPTRTREE) SymbolTree; /** Symbol name space. */ - R3PTRTYPE(PRTSTRSPACE) pSymbolSpace; + R3PTRTYPE(PRTSTRSPACE) pSymbolSpace; /** Indicates whether DBGFSym.cpp is initialized or not. * This part is initialized in a lazy manner for performance reasons. */ - bool fSymInited; + bool fSymInited; /** Alignment padding. */ - RTUINT uAlignment0; + RTUINT uAlignment0; /** The number of hardware breakpoints. */ - RTUINT cHwBreakpoints; + RTUINT cHwBreakpoints; /** The number of active breakpoints. */ - RTUINT cBreakpoints; + RTUINT cBreakpoints; /** Array of hardware breakpoints. (0..3) * This is shared among all the CPUs because life is much simpler that way. */ - DBGFBP aHwBreakpoints[4]; + DBGFBP aHwBreakpoints[4]; /** Array of int 3 and REM breakpoints. (4..) * @remark This is currently a fixed size array for reasons of simplicity. */ - DBGFBP aBreakpoints[32]; + DBGFBP aBreakpoints[32]; /** The address space database lock. */ - RTSEMRW hAsDbLock; + RTSEMRW hAsDbLock; /** The address space handle database. (Protected by hAsDbLock.) */ - R3PTRTYPE(AVLPVTREE) AsHandleTree; + R3PTRTYPE(AVLPVTREE) AsHandleTree; /** The address space process id database. (Protected by hAsDbLock.) */ - R3PTRTYPE(AVLU32TREE) AsPidTree; + R3PTRTYPE(AVLU32TREE) AsPidTree; /** The address space name database. (Protected by hAsDbLock.) */ - R3PTRTYPE(RTSTRSPACE) AsNameSpace; + R3PTRTYPE(RTSTRSPACE) AsNameSpace; /** Special address space aliases. (Protected by hAsDbLock.) */ - RTDBGAS volatile ahAsAliases[DBGF_AS_COUNT]; + RTDBGAS volatile ahAsAliases[DBGF_AS_COUNT]; /** For lazily populating the aliased address spaces. */ - bool volatile afAsAliasPopuplated[DBGF_AS_COUNT]; + bool volatile afAsAliasPopuplated[DBGF_AS_COUNT]; /** Alignment padding. */ - bool afAlignment[2]; + bool afAlignment1[2]; + + /** The register database lock. */ + RTSEMRW hRegDbLock; + /** String space for looking up registers. (Protected by hRegDbLock.) */ + R3PTRTYPE(RTSTRSPACE) RegSpace; + /** String space holding the register sets. (Protected by hRegDbLock.) */ + R3PTRTYPE(RTSTRSPACE) RegSetSpace; + /** The number of registers (aliases, sub-fields and the special CPU + * register aliases (eg AH) are not counted). */ + uint32_t cRegs; + /** For early initialization by . */ + bool volatile fRegDbInitialized; + /** Alignment padding. */ + bool afAlignment2[3]; /** The current Guest OS digger. */ - R3PTRTYPE(PDBGFOS) pCurOS; + R3PTRTYPE(PDBGFOS) pCurOS; /** The head of the Guest OS digger instances. */ - R3PTRTYPE(PDBGFOS) pOSHead; + R3PTRTYPE(PDBGFOS) pOSHead; } DBGF; /** Pointer to DBGF Data. */ typedef DBGF *PDBGF; @@ -304,7 +318,12 @@ typedef struct DBGFCPU bool fSingleSteppingRaw; /** Padding the structure to 16 bytes. */ - uint8_t abReserved[3]; + bool afReserved[7]; + + /** The guest register set for this CPU. Can be NULL. */ + R3PTRTYPE(struct DBGFREGSET *) pGuestRegSet; + /** The hypervisor register set for this CPU. Can be NULL. */ + R3PTRTYPE(struct DBGFREGSET *) pHyperRegSet; } DBGFCPU; /** Pointer to DBGFCPU data. */ typedef DBGFCPU *PDBGFCPU; @@ -316,6 +335,8 @@ void dbgfR3AsRelocate(PVM pVM, RTGCUINTPTR offDelta); int dbgfR3InfoInit(PVM pVM); int dbgfR3InfoTerm(PVM pVM); void dbgfR3OSTerm(PVM pVM); +int dbgfR3RegInit(PVM pVM); +void dbgfR3RegTerm(PVM pVM); int dbgfR3SymInit(PVM pVM); int dbgfR3SymTerm(PVM pVM); int dbgfR3BpInit(PVM pVM); diff --git a/src/VBox/VMM/EMHandleRCTmpl.h b/src/VBox/VMM/include/EMHandleRCTmpl.h index 0f213b3cd..2a1af78e7 100644 --- a/src/VBox/VMM/EMHandleRCTmpl.h +++ b/src/VBox/VMM/include/EMHandleRCTmpl.h @@ -1,4 +1,4 @@ -/* $Id: EMHandleRCTmpl.h 30520 2010-06-30 08:05:57Z vboxsync $ */ +/* $Id: EMHandleRCTmpl.h 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * EM - emR3[Raw|Hwaccm]HandleRC template. */ diff --git a/src/VBox/VMM/EMInternal.h b/src/VBox/VMM/include/EMInternal.h index 8789a011d..bcdb3a3af 100644 --- a/src/VBox/VMM/EMInternal.h +++ b/src/VBox/VMM/include/EMInternal.h @@ -1,4 +1,4 @@ -/* $Id: EMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: EMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * EM - Internal header file. */ @@ -20,11 +20,11 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/em.h> -#include <VBox/stam.h> -#include <VBox/patm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/patm.h> #include <VBox/dis.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/pdmcritsect.h> #include <iprt/avl.h> #include <setjmp.h> diff --git a/src/VBox/VMM/FTMInternal.h b/src/VBox/VMM/include/FTMInternal.h index f2b9bf830..a67daac0a 100644 --- a/src/VBox/VMM/FTMInternal.h +++ b/src/VBox/VMM/include/FTMInternal.h @@ -1,4 +1,4 @@ -/* $Id: FTMInternal.h 32431 2010-09-11 18:02:17Z vboxsync $ */ +/* $Id: FTMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * FTM - Internal header file. */ @@ -20,9 +20,9 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/ftm.h> -#include <VBox/stam.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/ftm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pdmcritsect.h> #include <iprt/avl.h> /** @defgroup grp_ftm_int Internals. diff --git a/src/VBox/VMM/HWACCMInternal.h b/src/VBox/VMM/include/HWACCMInternal.h index 92538584c..3bf344f7b 100644 --- a/src/VBox/VMM/HWACCMInternal.h +++ b/src/VBox/VMM/include/HWACCMInternal.h @@ -1,4 +1,4 @@ -/* $Id: HWACCMInternal.h 34184 2010-11-18 21:19:11Z vboxsync $ */ +/* $Id: HWACCMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * HWACCM - Internal header file. */ @@ -20,13 +20,13 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/em.h> -#include <VBox/stam.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/stam.h> #include <VBox/dis.h> -#include <VBox/hwaccm.h> -#include <VBox/hwacc_vmx.h> -#include <VBox/pgm.h> -#include <VBox/cpum.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/hwacc_vmx.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/cpum.h> #include <iprt/memobj.h> #include <iprt/cpuset.h> #include <iprt/mp.h> diff --git a/src/VBox/VMM/HWACCMInternal.mac b/src/VBox/VMM/include/HWACCMInternal.mac index f8bd68577..c817d64f7 100644 --- a/src/VBox/VMM/HWACCMInternal.mac +++ b/src/VBox/VMM/include/HWACCMInternal.mac @@ -1,4 +1,4 @@ -;$Id: HWACCMInternal.mac 32404 2010-09-10 13:17:42Z vboxsync $ +;$Id: HWACCMInternal.mac 35333 2010-12-27 12:10:56Z vboxsync $ ;; @file ; HWACCM - Internal header file. ; diff --git a/src/VBox/VMM/IOMInternal.h b/src/VBox/VMM/include/IOMInternal.h index 2dfafa38c..fc8f293e8 100644 --- a/src/VBox/VMM/IOMInternal.h +++ b/src/VBox/VMM/include/IOMInternal.h @@ -1,4 +1,4 @@ -/* $Id: IOMInternal.h 29436 2010-05-12 20:57:57Z vboxsync $ */ +/* $Id: IOMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * IOM - Internal header file. */ @@ -20,10 +20,10 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/iom.h> -#include <VBox/stam.h> -#include <VBox/pgm.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/pdmcritsect.h> #include <VBox/param.h> #include <iprt/assert.h> #include <iprt/avl.h> diff --git a/src/VBox/VMM/MMInternal.h b/src/VBox/VMM/include/MMInternal.h index 62ca83828..7dc6163cc 100644 --- a/src/VBox/VMM/MMInternal.h +++ b/src/VBox/VMM/include/MMInternal.h @@ -1,4 +1,4 @@ -/* $Id: MMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: MMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM - Internal header file. */ @@ -21,8 +21,8 @@ #include <VBox/cdefs.h> #include <VBox/types.h> #include <VBox/sup.h> -#include <VBox/stam.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pdmcritsect.h> #include <iprt/assert.h> #include <iprt/avl.h> #include <iprt/critsect.h> diff --git a/src/VBox/VMM/PATM/PATMA.h b/src/VBox/VMM/include/PATMA.h index adc655ad8..87dc60868 100644 --- a/src/VBox/VMM/PATM/PATMA.h +++ b/src/VBox/VMM/include/PATMA.h @@ -1,4 +1,4 @@ -/* $Id: PATMA.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PATMA.h 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * PATM macros & definitions (identical to PATMA.mac!!) */ diff --git a/src/VBox/VMM/PATM/PATMInternal.h b/src/VBox/VMM/include/PATMInternal.h index 9ffd1e44d..e43783e34 100644 --- a/src/VBox/VMM/PATM/PATMInternal.h +++ b/src/VBox/VMM/include/PATMInternal.h @@ -1,4 +1,4 @@ -/* $Id: PATMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PATMInternal.h 35348 2010-12-27 16:35:23Z vboxsync $ */ /** @file * PATM - Internal header file. */ @@ -20,10 +20,10 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/patm.h> -#include <VBox/stam.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/stam.h> #include <VBox/dis.h> -#include <VBox/pgm.h> +#include <VBox/vmm/pgm.h> #include <iprt/avl.h> #include <iprt/param.h> #include <VBox/log.h> diff --git a/src/VBox/VMM/PDMAsyncCompletionFileInternal.h b/src/VBox/VMM/include/PDMAsyncCompletionFileInternal.h index b14617876..ac81a5e94 100644 --- a/src/VBox/VMM/PDMAsyncCompletionFileInternal.h +++ b/src/VBox/VMM/include/PDMAsyncCompletionFileInternal.h @@ -1,4 +1,4 @@ -/* $Id: PDMAsyncCompletionFileInternal.h 35205 2010-12-16 18:35:02Z vboxsync $ */ +/* $Id: PDMAsyncCompletionFileInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Async I/O - Transport data asynchronous in R3 using EMT. */ @@ -18,9 +18,9 @@ #ifndef ___PDMAsyncCompletionFileInternal_h #define ___PDMAsyncCompletionFileInternal_h -#include <VBox/cfgm.h> -#include <VBox/stam.h> -#include <VBox/tm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/tm.h> #include <iprt/types.h> #include <iprt/file.h> #include <iprt/thread.h> @@ -228,167 +228,6 @@ typedef struct PDMACFILERANGELOCK } PDMACFILERANGELOCK, *PPDMACFILERANGELOCK; /** - * Data for one request segment waiting for cache entry. - */ -typedef struct PDMACFILETASKSEG -{ - /** Next task segment in the list. */ - struct PDMACFILETASKSEG *pNext; - /** Task this segment is for. */ - PPDMASYNCCOMPLETIONTASKFILE pTask; - /** Offset into the cache entry buffer to start reading from. */ - uint32_t uBufOffset; - /** Number of bytes to transfer. */ - size_t cbTransfer; - /** Pointer to the buffer. */ - void *pvBuf; - /** Flag whether this entry writes data to the cache. */ - bool fWrite; -} PDMACFILETASKSEG; - -/** - * A cache entry - */ -typedef struct PDMACFILECACHEENTRY -{ - /** The AVL entry data. */ - AVLRFOFFNODECORE Core; - /** Pointer to the previous element. Used in one of the LRU lists.*/ - struct PDMACFILECACHEENTRY *pPrev; - /** Pointer to the next element. Used in one of the LRU lists.*/ - struct PDMACFILECACHEENTRY *pNext; - /** Pointer to the list the entry is in. */ - PPDMACFILELRULIST pList; - /** Pointer to the global cache structure. */ - PPDMACFILECACHEGLOBAL pCache; - /** Endpoint the entry belongs to. */ - PPDMASYNCCOMPLETIONENDPOINTFILE pEndpoint; - /** Flags for this entry. Combinations of PDMACFILECACHE_* #defines */ - volatile uint32_t fFlags; - /** Reference counter. Prevents eviction of the entry if > 0. */ - volatile uint32_t cRefs; - /** Size of the entry. */ - size_t cbData; - /** Pointer to the memory containing the data. */ - uint8_t *pbData; - /** Head of list of tasks waiting for this one to finish. */ - PPDMACFILETASKSEG pWaitingHead; - /** Tail of list of tasks waiting for this one to finish. */ - PPDMACFILETASKSEG pWaitingTail; - /** Node for dirty but not yet committed entries list per endpoint. */ - RTLISTNODE NodeNotCommitted; -} PDMACFILECACHEENTRY, *PPDMACFILECACHEENTRY; -/** I/O is still in progress for this entry. This entry is not evictable. */ -#define PDMACFILECACHE_ENTRY_IO_IN_PROGRESS RT_BIT(0) -/** Entry is locked and thus not evictable. */ -#define PDMACFILECACHE_ENTRY_LOCKED RT_BIT(1) -/** Entry is dirty */ -#define PDMACFILECACHE_ENTRY_IS_DIRTY RT_BIT(2) -/** Entry is not evictable. */ -#define PDMACFILECACHE_NOT_EVICTABLE (PDMACFILECACHE_ENTRY_LOCKED | PDMACFILECACHE_ENTRY_IO_IN_PROGRESS | PDMACFILECACHE_ENTRY_IS_DIRTY) - -/** - * LRU list data - */ -typedef struct PDMACFILELRULIST -{ - /** Head of the list. */ - PPDMACFILECACHEENTRY pHead; - /** Tail of the list. */ - PPDMACFILECACHEENTRY pTail; - /** Number of bytes cached in the list. */ - uint32_t cbCached; -} PDMACFILELRULIST; - -/** - * Global cache data. - */ -typedef struct PDMACFILECACHEGLOBAL -{ - /** Maximum size of the cache in bytes. */ - uint32_t cbMax; - /** Current size of the cache in bytes. */ - uint32_t cbCached; - /** Critical section protecting the cache. */ - RTCRITSECT CritSect; - /** Maximum number of bytes cached. */ - uint32_t cbRecentlyUsedInMax; - /** Maximum number of bytes in the paged out list .*/ - uint32_t cbRecentlyUsedOutMax; - /** Recently used cache entries list */ - PDMACFILELRULIST LruRecentlyUsedIn; - /** Scorecard cache entry list. */ - PDMACFILELRULIST LruRecentlyUsedOut; - /** List of frequently used cache entries */ - PDMACFILELRULIST LruFrequentlyUsed; - /** Commit timeout in milli seconds */ - uint32_t u32CommitTimeoutMs; - /** Number of dirty bytes needed to start a commit of the data to the disk. */ - uint32_t cbCommitDirtyThreshold; - /** Current number of dirty bytes in the cache. */ - volatile uint32_t cbDirty; - /** Flag whether a commit is currently in progress. */ - volatile bool fCommitInProgress; - /** Commit interval timer */ - PTMTIMERR3 pTimerCommit; - /** Number of endpoints using the cache. */ - uint32_t cRefs; - /** List of all endpoints using this cache. */ - RTLISTNODE ListEndpoints; -#ifdef VBOX_WITH_STATISTICS - /** Alignment */ - uint32_t u32Alignment; - /** Hit counter. */ - STAMCOUNTER cHits; - /** Partial hit counter. */ - STAMCOUNTER cPartialHits; - /** Miss counter. */ - STAMCOUNTER cMisses; - /** Bytes read from cache. */ - STAMCOUNTER StatRead; - /** Bytes written to the cache. */ - STAMCOUNTER StatWritten; - /** Time spend to get an entry in the AVL tree. */ - STAMPROFILEADV StatTreeGet; - /** Time spend to insert an entry in the AVL tree. */ - STAMPROFILEADV StatTreeInsert; - /** Time spend to remove an entry in the AVL tree. */ - STAMPROFILEADV StatTreeRemove; - /** Number of times a buffer could be reused. */ - STAMCOUNTER StatBuffersReused; -#endif -} PDMACFILECACHEGLOBAL; -#ifdef VBOX_WITH_STATISTICS -AssertCompileMemberAlignment(PDMACFILECACHEGLOBAL, cHits, sizeof(uint64_t)); -#endif - -/** - * Per endpoint cache data. - */ -typedef struct PDMACFILEENDPOINTCACHE -{ - /** AVL tree managing cache entries. */ - PAVLRFOFFTREE pTree; - /** R/W semaphore protecting cached entries for this endpoint. */ - RTSEMRW SemRWEntries; - /** Pointer to the gobal cache data */ - PPDMACFILECACHEGLOBAL pCache; - /** Lock protecting the dirty entries list. */ - RTSPINLOCK LockList; - /** List of dirty but not committed entries for this endpoint. */ - RTLISTNODE ListDirtyNotCommitted; - /** Node of the cache endpoint list. */ - RTLISTNODE NodeCacheEndpoint; -#ifdef VBOX_WITH_STATISTICS - /** Number of times a write was deferred because the cache entry was still in progress */ - STAMCOUNTER StatWriteDeferred; -#endif -} PDMACFILEENDPOINTCACHE, *PPDMACFILEENDPOINTCACHE; -#ifdef VBOX_WITH_STATISTICS -AssertCompileMemberAlignment(PDMACFILEENDPOINTCACHE, StatWriteDeferred, sizeof(uint64_t)); -#endif - -/** * Backend type for the endpoint. */ typedef enum PDMACFILEEPBACKEND @@ -414,9 +253,6 @@ typedef struct PDMASYNCCOMPLETIONEPCLASSFILE PDMACEPFILEMGRTYPE enmMgrTypeOverride; /** Default backend type for the endpoint. */ PDMACFILEEPBACKEND enmEpBackendDefault; - /** Flag whether the file data cache is enabled. */ - bool fCacheEnabled; - /** Critical section protecting the list of async I/O managers. */ RTCRITSECT CritSect; /** Pointer to the head of the async I/O managers. */ R3PTRTYPE(PPDMACEPFILEMGR) pAioMgrHead; @@ -428,19 +264,11 @@ typedef struct PDMASYNCCOMPLETIONEPCLASSFILE uint32_t cReqsOutstandingMax; /** Bitmask for checking the alignment of a buffer. */ RTR3UINTPTR uBitmaskAlignment; -#ifdef VBOX_WITH_STATISTICS - uint32_t u32Alignment[2]; -#endif - /** Global cache data. */ - PDMACFILECACHEGLOBAL Cache; /** Flag whether the out of resources warning was printed already. */ bool fOutOfResourcesWarningPrinted; } PDMASYNCCOMPLETIONEPCLASSFILE; /** Pointer to the endpoint class data. */ typedef PDMASYNCCOMPLETIONEPCLASSFILE *PPDMASYNCCOMPLETIONEPCLASSFILE; -#ifdef VBOX_WITH_STATISTICS -AssertCompileMemberAlignment(PDMASYNCCOMPLETIONEPCLASSFILE, Cache, sizeof(uint64_t)); -#endif typedef enum PDMACEPFILEBLOCKINGEVENT { @@ -494,11 +322,6 @@ typedef struct PDMASYNCCOMPLETIONENDPOINTFILE unsigned fFlags; /** File handle. */ RTFILE File; - /** Size of the endpoint. - * Updated while data is appended even if it is - * only in the cache yet and not written to the file. - */ - volatile uint64_t cbEndpoint; /** * Real size of the file. Only updated if * data is appended. @@ -515,17 +338,11 @@ typedef struct PDMASYNCCOMPLETIONENDPOINTFILE R3PTRTYPE(volatile PPDMACTASKFILE) pTasksFreeTail; /** Number of elements in the cache. */ volatile uint32_t cTasksCached; - /** Alignment */ - uint32_t u32Alignment; - /** Cache of endpoint data. */ - PDMACFILEENDPOINTCACHE DataCache; /** Flag whether a flush request is currently active */ PPDMACTASKFILE pFlushReq; #ifdef VBOX_WITH_STATISTICS - /** Alignment */ - uint32_t u32Alignment1; /** Time spend in a read. */ STAMPROFILEADV StatRead; /** Time spend in a write. */ @@ -598,7 +415,6 @@ typedef struct PDMASYNCCOMPLETIONENDPOINTFILE typedef PDMASYNCCOMPLETIONENDPOINTFILE *PPDMASYNCCOMPLETIONENDPOINTFILE; #ifdef VBOX_WITH_STATISTICS AssertCompileMemberAlignment(PDMASYNCCOMPLETIONENDPOINTFILE, StatRead, sizeof(uint64_t)); -AssertCompileMemberAlignment(PDMASYNCCOMPLETIONENDPOINTFILE, DataCache, sizeof(uint64_t)); #endif /** Request completion function */ diff --git a/src/VBox/VMM/PDMAsyncCompletionInternal.h b/src/VBox/VMM/include/PDMAsyncCompletionInternal.h index 7c1bcfaa8..21e70d2f1 100644 --- a/src/VBox/VMM/PDMAsyncCompletionInternal.h +++ b/src/VBox/VMM/include/PDMAsyncCompletionInternal.h @@ -1,4 +1,4 @@ -/* $Id: PDMAsyncCompletionInternal.h 33840 2010-11-08 13:44:38Z vboxsync $ */ +/* $Id: PDMAsyncCompletionInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM - Pluggable Device Manager, Async I/O Completion internal header. */ @@ -22,9 +22,9 @@ #include <iprt/memcache.h> #include <iprt/sg.h> #include <VBox/types.h> -#include <VBox/cfgm.h> -#include <VBox/stam.h> -#include <VBox/pdmasynccompletion.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pdmasynccompletion.h> #include "PDMInternal.h" RT_C_DECLS_BEGIN diff --git a/src/VBox/VMM/PDMBlkCacheInternal.h b/src/VBox/VMM/include/PDMBlkCacheInternal.h index 1309f896b..dd62d5946 100644 --- a/src/VBox/VMM/PDMBlkCacheInternal.h +++ b/src/VBox/VMM/include/PDMBlkCacheInternal.h @@ -1,4 +1,4 @@ -/* $Id: PDMBlkCacheInternal.h 35162 2010-12-15 19:39:54Z vboxsync $ */ +/* $Id: PDMBlkCacheInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Block Cache. */ @@ -18,10 +18,10 @@ #ifndef ___PDMBlkCacheInternal_h #define ___PDMBlkCacheInternal_h -#include <VBox/cfgm.h> -#include <VBox/stam.h> -#include <VBox/tm.h> -#include <VBox/pdmblkcache.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/pdmblkcache.h> #include <iprt/types.h> #include <iprt/file.h> #include <iprt/thread.h> diff --git a/src/VBox/VMM/PDMInternal.h b/src/VBox/VMM/include/PDMInternal.h index db68e6c8f..5e0fffe4f 100644 --- a/src/VBox/VMM/PDMInternal.h +++ b/src/VBox/VMM/include/PDMInternal.h @@ -1,4 +1,4 @@ -/* $Id: PDMInternal.h 34347 2010-11-24 22:34:21Z vboxsync $ */ +/* $Id: PDMInternal.h 35358 2010-12-28 07:58:40Z vboxsync $ */ /** @file * PDM - Internal header file. */ @@ -20,12 +20,12 @@ #include <VBox/types.h> #include <VBox/param.h> -#include <VBox/cfgm.h> -#include <VBox/stam.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/stam.h> #include <VBox/vusb.h> -#include <VBox/pdmasynccompletion.h> -#include <VBox/pdmblkcache.h> -#include <VBox/pdmcommon.h> +#include <VBox/vmm/pdmasynccompletion.h> +#include <VBox/vmm/pdmblkcache.h> +#include <VBox/vmm/pdmcommon.h> #include <iprt/assert.h> #include <iprt/critsect.h> #ifdef IN_RING3 @@ -340,10 +340,10 @@ typedef struct PDMTHREADINT #define PDMCRITSECTINT_DECLARED #define PDMTHREADINT_DECLARED #ifdef ___VBox_pdm_h -# error "Invalid header PDM order. Include PDMInternal.h before VBox/pdm.h!" +# error "Invalid header PDM order. Include PDMInternal.h before VBox/vmm/pdm.h!" #endif RT_C_DECLS_END -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> RT_C_DECLS_BEGIN /** diff --git a/src/VBox/VMM/PGMGstDefs.h b/src/VBox/VMM/include/PGMGstDefs.h index a17834eca..b3fe4b318 100644 --- a/src/VBox/VMM/PGMGstDefs.h +++ b/src/VBox/VMM/include/PGMGstDefs.h @@ -1,4 +1,4 @@ -/* $Id: PGMGstDefs.h 32431 2010-09-11 18:02:17Z vboxsync $ */ +/* $Id: PGMGstDefs.h 35333 2010-12-27 12:10:56Z vboxsync $ */ /** @file * VBox - Page Manager, Guest Paging Template - All context code. */ diff --git a/src/VBox/VMM/PGMInline.h b/src/VBox/VMM/include/PGMInline.h index 135e13b5c..5e51a1c49 100644 --- a/src/VBox/VMM/PGMInline.h +++ b/src/VBox/VMM/include/PGMInline.h @@ -1,4 +1,4 @@ -/* $Id: PGMInline.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: PGMInline.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Inlined functions. */ @@ -21,17 +21,17 @@ #include <VBox/cdefs.h> #include <VBox/types.h> #include <VBox/err.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <VBox/param.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pdmapi.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pdmapi.h> #include <VBox/dis.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <VBox/log.h> -#include <VBox/gmm.h> -#include <VBox/hwaccm.h> +#include <VBox/vmm/gmm.h> +#include <VBox/vmm/hwaccm.h> #include <iprt/asm.h> #include <iprt/assert.h> #include <iprt/avl.h> diff --git a/src/VBox/VMM/PGMInternal.h b/src/VBox/VMM/include/PGMInternal.h index d125b9ab5..783bd1671 100644 --- a/src/VBox/VMM/PGMInternal.h +++ b/src/VBox/VMM/include/PGMInternal.h @@ -1,4 +1,4 @@ -/* $Id: PGMInternal.h 34163 2010-11-18 12:16:43Z vboxsync $ */ +/* $Id: PGMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Internal header file. */ @@ -22,19 +22,19 @@ #include <VBox/types.h> #include <VBox/err.h> #include <VBox/dbg.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <VBox/param.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pdmapi.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pdmapi.h> #include <VBox/dis.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/dbgf.h> #include <VBox/log.h> -#include <VBox/gmm.h> -#include <VBox/hwaccm.h> -#include <VBox/hwacc_vmx.h> -#include <include/internal/pgm.h> +#include <VBox/vmm/gmm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/hwacc_vmx.h> +#include "internal/pgm.h" #include <iprt/asm.h> #include <iprt/assert.h> #include <iprt/avl.h> @@ -184,7 +184,7 @@ #ifndef PGM_PTFLAGS_CSAM_VALIDATED /** Scanned and approved by CSAM (tm). * NOTE: Must be identical to the one defined in CSAMInternal.h!! - * @todo Move PGM_PTFLAGS_* and PGM_PDFLAGS_* to VBox/pgm.h. */ + * @todo Move PGM_PTFLAGS_* and PGM_PDFLAGS_* to VBox/vmm/pgm.h. */ #define PGM_PTFLAGS_CSAM_VALIDATED RT_BIT_64(11) #endif diff --git a/src/VBox/VMM/REMInternal.h b/src/VBox/VMM/include/REMInternal.h index 1bb5a4797..88206049c 100644 --- a/src/VBox/VMM/REMInternal.h +++ b/src/VBox/VMM/include/REMInternal.h @@ -1,4 +1,4 @@ -/* $Id: REMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: REMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * REM - Internal header file. */ @@ -18,12 +18,11 @@ #ifndef ___REMInternal_h #define ___REMInternal_h -#include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/cpum.h> -#include <VBox/stam.h> -#include <VBox/pgm.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/pdmcritsect.h> #ifdef REM_INCLUDE_CPU_H # include "target-i386/cpu.h" #endif diff --git a/src/VBox/VMM/SELMInternal.h b/src/VBox/VMM/include/SELMInternal.h index 50a05f31f..150cfac59 100644 --- a/src/VBox/VMM/SELMInternal.h +++ b/src/VBox/VMM/include/SELMInternal.h @@ -1,4 +1,4 @@ -/* $Id: SELMInternal.h 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: SELMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * SELM - Internal header file. */ @@ -20,8 +20,8 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/stam.h> -#include <VBox/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/cpum.h> diff --git a/src/VBox/VMM/SSMInternal.h b/src/VBox/VMM/include/SSMInternal.h index b6d94f76b..d00e6ff7e 100644 --- a/src/VBox/VMM/SSMInternal.h +++ b/src/VBox/VMM/include/SSMInternal.h @@ -1,4 +1,4 @@ -/* $Id: SSMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: SSMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * SSM - Internal header file. */ @@ -20,7 +20,7 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/ssm.h> +#include <VBox/vmm/ssm.h> #include <iprt/critsect.h> RT_C_DECLS_BEGIN diff --git a/src/VBox/VMM/STAMInternal.h b/src/VBox/VMM/include/STAMInternal.h index 6eb07dd89..8db31b338 100644 --- a/src/VBox/VMM/STAMInternal.h +++ b/src/VBox/VMM/include/STAMInternal.h @@ -1,4 +1,4 @@ -/* $Id: STAMInternal.h 32796 2010-09-28 14:54:41Z vboxsync $ */ +/* $Id: STAMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * STAM Internal Header. */ @@ -20,8 +20,8 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/stam.h> -#include <VBox/gvmm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/gvmm.h> #include <iprt/semaphore.h> diff --git a/src/VBox/VMM/TMInternal.h b/src/VBox/VMM/include/TMInternal.h index d3dd9af75..20b6019e5 100644 --- a/src/VBox/VMM/TMInternal.h +++ b/src/VBox/VMM/include/TMInternal.h @@ -1,4 +1,4 @@ -/* $Id: TMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: TMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TM - Internal header file. */ @@ -23,8 +23,8 @@ #include <iprt/time.h> #include <iprt/timer.h> #include <iprt/assert.h> -#include <VBox/stam.h> -#include <VBox/pdmcritsect.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/pdmcritsect.h> RT_C_DECLS_BEGIN diff --git a/src/VBox/VMM/TRPMInternal.h b/src/VBox/VMM/include/TRPMInternal.h index 723dddcba..c6ecc9e57 100644 --- a/src/VBox/VMM/TRPMInternal.h +++ b/src/VBox/VMM/include/TRPMInternal.h @@ -1,4 +1,4 @@ -/* $Id: TRPMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: TRPMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * TRPM - Internal header file. */ @@ -20,8 +20,8 @@ #include <VBox/cdefs.h> #include <VBox/types.h> -#include <VBox/stam.h> -#include <VBox/cpum.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/cpum.h> diff --git a/src/VBox/VMM/TRPMInternal.mac b/src/VBox/VMM/include/TRPMInternal.mac index f4ff0e520..ae7b97437 100644 --- a/src/VBox/VMM/TRPMInternal.mac +++ b/src/VBox/VMM/include/TRPMInternal.mac @@ -1,4 +1,4 @@ -; $Id: TRPMInternal.mac 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: TRPMInternal.mac 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; TRPM - Internal header file. ; @@ -16,7 +16,7 @@ ; %include "VBox/asmdefs.mac" -%include "VBox/stam.mac" +%include "VBox/vmm/stam.mac" %define TRPM_TRAP_IN_OP_MASK 0xffff %define TRPM_TRAP_IN_MOV_GS 1 diff --git a/src/VBox/VMM/VMInternal.h b/src/VBox/VMM/include/VMInternal.h index 98c28ed13..9f1e6ed14 100644 --- a/src/VBox/VMM/VMInternal.h +++ b/src/VBox/VMM/include/VMInternal.h @@ -1,4 +1,4 @@ -/* $Id: VMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VM - Internal header file. */ @@ -19,7 +19,7 @@ #define ___VMInternal_h #include <VBox/cdefs.h> -#include <VBox/vmapi.h> +#include <VBox/vmm/vmapi.h> #include <iprt/assert.h> #include <iprt/critsect.h> #include <setjmp.h> diff --git a/src/VBox/VMM/VMMInternal.h b/src/VBox/VMM/include/VMMInternal.h index 08b8d4cfd..4e410ab9f 100644 --- a/src/VBox/VMM/VMMInternal.h +++ b/src/VBox/VMM/include/VMMInternal.h @@ -1,4 +1,4 @@ -/* $Id: VMMInternal.h 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: VMMInternal.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - Internal header file. */ @@ -19,7 +19,7 @@ #define ___VMMInternal_h #include <VBox/cdefs.h> -#include <VBox/stam.h> +#include <VBox/vmm/stam.h> #include <VBox/log.h> #include <iprt/critsect.h> diff --git a/src/VBox/VMM/VMMInternal.mac b/src/VBox/VMM/include/VMMInternal.mac index 6cf15ae4b..4780e380c 100644 --- a/src/VBox/VMM/VMMInternal.mac +++ b/src/VBox/VMM/include/VMMInternal.mac @@ -1,4 +1,4 @@ -; $Id: VMMInternal.mac 33540 2010-10-28 09:27:05Z vboxsync $ +; $Id: VMMInternal.mac 35333 2010-12-27 12:10:56Z vboxsync $ ;; @file ; VMM - Internal header file. ; diff --git a/src/VBox/VMM/VMMSwitcher/VMMSwitcher.h b/src/VBox/VMM/include/VMMSwitcher.h index 4718e2ffa..9762aff33 100644 --- a/src/VBox/VMM/VMMSwitcher/VMMSwitcher.h +++ b/src/VBox/VMM/include/VMMSwitcher.h @@ -1,4 +1,4 @@ -/* $Id: VMMSwitcher.h 30145 2010-06-10 11:52:14Z vboxsync $ */ +/* $Id: VMMSwitcher.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM - World Switchers. */ @@ -18,7 +18,7 @@ #ifndef ___VMMSwitcher_h #define ___VMMSwitcher_h -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> /** @name Fixup Types. * @{ diff --git a/src/VBox/VMM/VMMSwitcher/VMMSwitcher.mac b/src/VBox/VMM/include/VMMSwitcher.mac index 704edadd6..5685a456d 100644 --- a/src/VBox/VMM/VMMSwitcher/VMMSwitcher.mac +++ b/src/VBox/VMM/include/VMMSwitcher.mac @@ -1,4 +1,4 @@ -; $Id: VMMSwitcher.mac 30145 2010-06-10 11:52:14Z vboxsync $ +; $Id: VMMSwitcher.mac 35333 2010-12-27 12:10:56Z vboxsync $ ;; @file ; VMM - World Switchers. ; diff --git a/src/VBox/VMM/include/internal/em.h b/src/VBox/VMM/include/internal/em.h index 2576734b7..ccadd97b0 100644 --- a/src/VBox/VMM/include/internal/em.h +++ b/src/VBox/VMM/include/internal/em.h @@ -1,4 +1,4 @@ -/* $Id: em.h 32953 2010-10-06 15:53:27Z vboxsync $ */ +/* $Id: em.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * EM - Internal VMM header file. */ @@ -18,7 +18,7 @@ #ifndef ___EM_include_internal_h #define ___EM_include_internal_h -#include <VBox/em.h> +#include <VBox/vmm/em.h> VMMR3DECL(int) EMR3NotifyResume(PVM pVM); VMMR3DECL(int) EMR3NotifySuspend(PVM pVM); diff --git a/src/VBox/VMM/include/internal/pgm.h b/src/VBox/VMM/include/internal/pgm.h index 5c16473d2..aa86631e5 100644 --- a/src/VBox/VMM/include/internal/pgm.h +++ b/src/VBox/VMM/include/internal/pgm.h @@ -1,4 +1,4 @@ -/* $Id: pgm.h 32302 2010-09-08 09:21:30Z vboxsync $ */ +/* $Id: pgm.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PGM - Internal VMM header file. */ @@ -18,7 +18,7 @@ #ifndef ___PGM_include_internal_h #define ___PGM_include_internal_h -#include <VBox/pgm.h> +#include <VBox/vmm/pgm.h> /** @defgroup grp_pgm_int Internals * @ingroup grp_pgm diff --git a/src/VBox/VMM/include/internal/vm.h b/src/VBox/VMM/include/internal/vm.h index caa5a5185..4b5dace98 100644 --- a/src/VBox/VMM/include/internal/vm.h +++ b/src/VBox/VMM/include/internal/vm.h @@ -1,4 +1,4 @@ -/* $Id: vm.h 32206 2010-09-02 14:13:13Z vboxsync $ */ +/* $Id: vm.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VM - Internal VMM header file. */ @@ -18,7 +18,7 @@ #ifndef ___VM_include_internal_h #define ___VM_include_internal_h -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> VMMR3DECL(int) VMR3SaveFT(PVM pVM, PCSSMSTRMOPS pStreamOps, void *pvStreamOpsUser, bool *pfSuspended, bool fSkipStateChanges); VMMR3DECL(int) VMR3LoadFromStreamFT(PVM pVM, PCSSMSTRMOPS pStreamOps, void *pvStreamOpsUser); diff --git a/src/VBox/VMM/testcase/Makefile.kmk b/src/VBox/VMM/testcase/Makefile.kmk index f947789fb..101d94ee9 100644 --- a/src/VBox/VMM/testcase/Makefile.kmk +++ b/src/VBox/VMM/testcase/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 34668 2010-12-02 23:33:28Z vboxsync $ +# $Id: Makefile.kmk 35346 2010-12-27 16:13:13Z vboxsync $ ## @file # Sub-Makefile for the VMM testcases. # @@ -119,7 +119,9 @@ ifdef VBOX_WITH_RAW_MODE tstVMStructRC_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI endif tstVMStructRC_SOURCES = tstVMStructRC.cpp - tstVMStructRC_INCS = $(VBOX_PATH_VMM_SRC) $(VBOX_PATH_VMM_SRC)/PATM + tstVMStructRC_INCS = \ + $(VBOX_PATH_VMM_SRC)/include \ + $(VBOX_PATH_VMM_SRC)/PATM endif tstVMStructSize_TEMPLATE= VBOXR3AUTOTST @@ -132,7 +134,10 @@ endif ifdef VBOX_WITH_RAW_MODE tstVMStructSize_DEFS += VBOX_WITH_RAW_MODE endif -tstVMStructSize_INCS = $(VBOX_PATH_VMM_SRC) $(VBOX_PATH_VMM_SRC)/PATM $(VBOX_VMM_TESTCASE_OUT_DIR) +tstVMStructSize_INCS = \ + $(VBOX_PATH_VMM_SRC)/include \ + $(VBOX_PATH_VMM_SRC)/PATM \ + $(VBOX_VMM_TESTCASE_OUT_DIR) tstVMStructSize_SOURCES = tstVMStructSize.cpp ifdef VBOX_WITH_RAW_MODE tstVMStructSize.cpp_DEPS= $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructRC.h @@ -155,7 +160,9 @@ endif ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI tstAsmStructs_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI endif -tstAsmStructs_INCS = $(VBOX_PATH_VMM_SRC) $(VBOX_VMM_TESTCASE_OUT_DIR) +tstAsmStructs_INCS = \ + $(VBOX_PATH_VMM_SRC)/include \ + $(VBOX_VMM_TESTCASE_OUT_DIR) tstAsmStructs_SOURCES = tstAsmStructs.cpp tstAsmStructs.cpp_DEPS = $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsHC.h @@ -168,7 +175,9 @@ ifdef VBOX_WITH_RAW_MODE ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI tstAsmStructsRC_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI endif - tstAsmStructsRC_INCS = $(VBOX_PATH_VMM_SRC) $(VBOX_VMM_TESTCASE_OUT_DIR) + tstAsmStructsRC_INCS = \ + $(VBOX_PATH_VMM_SRC)/include \ + $(VBOX_VMM_TESTCASE_OUT_DIR) tstAsmStructsRC_SOURCES = tstAsmStructs.cpp tstAsmStructs.cpp_DEPS += $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsRC.h endif # VBOX_WITH_RAW_MODE @@ -183,6 +192,7 @@ tstMMHyperHeap_SOURCES = tstMMHyperHeap.cpp tstMMHyperHeap_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME) tstSSM_TEMPLATE = VBOXR3TSTEXE +tstSSM_INCS = $(VBOX_PATH_VMM_SRC)/include tstSSM_SOURCES = tstSSM.cpp tstSSM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME) @@ -199,7 +209,7 @@ tstCompressionBenchmark_SOURCES = tstCompressionBenchmark.cpp tstVMMR0CallHost-1_TEMPLATE = VBOXR3TSTEXE tstVMMR0CallHost-1_DEFS = VMM_R0_NO_SWITCH_STACK -tstVMMR0CallHost-1_INCS = $(VBOX_PATH_VMM_SRC) +tstVMMR0CallHost-1_INCS = $(VBOX_PATH_VMM_SRC)/include tstVMMR0CallHost-1_SOURCES = \ tstVMMR0CallHost-1.cpp tstVMMR0CallHost-1_SOURCES.amd64 = \ @@ -253,7 +263,7 @@ ifdef VBOX_WITH_RAW_MODE $(PATH_LIB)/RuntimeRC$(VBOX_SUFF_LIB) ifeq ($(filter-out pe lx,$(VBOX_LDR_FMT32)),) tstMicroRC_LIBS += \ - $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) \ + $(PATH_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \ $(LIB_VMMGC) endif tstMicroRC_SOURCES.win = tstMicroRC.def @@ -262,10 +272,12 @@ endif # VBOX_WITH_RAW_MODE ifdef VBOX_WITH_PDM_ASYNC_COMPLETION tstPDMAsyncCompletion_TEMPLATE = VBOXR3EXE + tstPDMAsyncCompletion_INCS = $(VBOX_PATH_VMM_SRC)/include tstPDMAsyncCompletion_SOURCES = tstPDMAsyncCompletion.cpp tstPDMAsyncCompletion_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME) tstPDMAsyncCompletionStress_TEMPLATE = VBOXR3EXE + tstPDMAsyncCompletionStress_INCS = $(VBOX_PATH_VMM_SRC)/include tstPDMAsyncCompletionStress_SOURCES = tstPDMAsyncCompletionStress.cpp tstPDMAsyncCompletionStress_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME) endif @@ -309,20 +321,21 @@ MY_ASA_ASM_STUFF = \ $(if $(VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI),VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI,) \ ) \ -f $(if $(eq $(KBUILD_TARGET),darwin),macho,elf) \ - $(foreach inc,$(INCS) $(VBOX_PATH_VMM_SRC)/testcase $(VBOX_VMM_TESTCASE_OUT_DIR),-I$(inc)/) + $(foreach inc,$(INCS) $(VBOX_PATH_VMM_SRC)/testcase $(VBOX_PATH_VMM_SRC)/include $(VBOX_VMM_TESTCASE_OUT_DIR)\ + ,-I$(inc)/) # 1a. make a header file which makes all the structures+members globals. $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac: \ $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm.asm \ $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm-lst.sed \ $(DEPTH)/include/iprt/asmdefs.mac \ - $(DEPTH)/include/VBox/cpum.mac \ + $(DEPTH)/include/VBox/vmm/cpum.mac \ + $(DEPTH)/include/VBox/vmm/vm.mac \ $(DEPTH)/include/VBox/sup.mac \ - $(DEPTH)/include/VBox/vm.mac \ - $(VBOX_PATH_VMM_SRC)/CPUMInternal.mac \ - $(VBOX_PATH_VMM_SRC)/TRPMInternal.mac \ - $(VBOX_PATH_VMM_SRC)/HWACCMInternal.mac \ - $(VBOX_PATH_VMM_SRC)/VMMInternal.mac \ + $(VBOX_PATH_VMM_SRC)/include/CPUMInternal.mac \ + $(VBOX_PATH_VMM_SRC)/include/TRPMInternal.mac \ + $(VBOX_PATH_VMM_SRC)/include/HWACCMInternal.mac \ + $(VBOX_PATH_VMM_SRC)/include/VMMInternal.mac \ $(VBOX_PATH_VMM_SRC)/testcase/Makefile.kmk \ $(PATH_ROOT)/Config.kmk $(LOCALCFG) $(AUTOCFG) \ | $$(dir $$@) diff --git a/src/VBox/VMM/testcase/tstAnimate.cpp b/src/VBox/VMM/testcase/tstAnimate.cpp index 7832db942..11df3eb3e 100644 --- a/src/VBox/VMM/testcase/tstAnimate.cpp +++ b/src/VBox/VMM/testcase/tstAnimate.cpp @@ -1,4 +1,4 @@ -/* $Id: tstAnimate.cpp 32190 2010-09-02 12:20:06Z vboxsync $ */ +/* $Id: tstAnimate.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox Animation Testcase / Tool. */ @@ -19,17 +19,17 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/cpum.h> -#include <VBox/cfgm.h> -#include <VBox/em.h> -#include <VBox/pgm.h> -#include <VBox/rem.h> -#include <VBox/ssm.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/dbgf.h> #include <VBox/err.h> -#include <VBox/pdmifs.h> +#include <VBox/vmm/pdmifs.h> #include <VBox/param.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/testcase/tstAsmStructs.cpp b/src/VBox/VMM/testcase/tstAsmStructs.cpp index fd95e0ff6..b28479dcb 100644 --- a/src/VBox/VMM/testcase/tstAsmStructs.cpp +++ b/src/VBox/VMM/testcase/tstAsmStructs.cpp @@ -1,4 +1,4 @@ -/* $Id: tstAsmStructs.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: tstAsmStructs.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Testcase for checking offsets in the assembly structures shared with C/C++. */ @@ -18,14 +18,14 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/cpum.h> +#include <VBox/vmm/cpum.h> #include "CPUMInternal.h" -#include <VBox/trpm.h> +#include <VBox/vmm/trpm.h> #include "TRPMInternal.h" #include "HWACCMInternal.h" -#include "../VMMSwitcher/VMMSwitcher.h" +#include "VMMSwitcher.h" #include "VMMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include "tstHelp.h" #include <stdio.h> diff --git a/src/VBox/VMM/testcase/tstAsmStructsAsm.asm b/src/VBox/VMM/testcase/tstAsmStructsAsm.asm index a4a2f9c75..ce0c4b736 100644 --- a/src/VBox/VMM/testcase/tstAsmStructsAsm.asm +++ b/src/VBox/VMM/testcase/tstAsmStructsAsm.asm @@ -1,4 +1,4 @@ -; $Id: tstAsmStructsAsm.asm 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: tstAsmStructsAsm.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; Assembly / C structure layout testcase. ; @@ -22,14 +22,14 @@ BITS 64 %endif -%include "../CPUMInternal.mac" -%include "../HWACCMInternal.mac" -%include "../TRPMInternal.mac" -%include "../VMMInternal.mac" -%include "VBox/cpum.mac" -%include "VBox/vm.mac" +%include "CPUMInternal.mac" +%include "HWACCMInternal.mac" +%include "TRPMInternal.mac" +%include "VMMInternal.mac" +%include "VBox/vmm/cpum.mac" +%include "VBox/vmm/vm.mac" %include "VBox/sup.mac" -%include "../VMMSwitcher/VMMSwitcher.mac" +%include "VMMSwitcher.mac" %ifdef DO_GLOBALS %include "tstAsmStructsAsm.mac" %endif diff --git a/src/VBox/VMM/testcase/tstCFGM.cpp b/src/VBox/VMM/testcase/tstCFGM.cpp index f6544ce88..792ac9df4 100644 --- a/src/VBox/VMM/testcase/tstCFGM.cpp +++ b/src/VBox/VMM/testcase/tstCFGM.cpp @@ -1,4 +1,4 @@ -/* $Id: tstCFGM.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: tstCFGM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Testcase for CFGM. */ @@ -21,10 +21,10 @@ * Header Files * *******************************************************************************/ #include <VBox/sup.h> -#include <VBox/cfgm.h> -#include <VBox/mm.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/testcase/tstGlobalConfig.cpp b/src/VBox/VMM/testcase/tstGlobalConfig.cpp index 01a4fd62a..134873cba 100644 --- a/src/VBox/VMM/testcase/tstGlobalConfig.cpp +++ b/src/VBox/VMM/testcase/tstGlobalConfig.cpp @@ -1,4 +1,4 @@ -/* $Id: tstGlobalConfig.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: tstGlobalConfig.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Ring-3 Management program for the GCFGM mock-up. */ @@ -19,7 +19,7 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <iprt/assert.h> #include <iprt/initterm.h> diff --git a/src/VBox/VMM/testcase/tstHelp.h b/src/VBox/VMM/testcase/tstHelp.h index 242298f23..cc78b14ef 100644 --- a/src/VBox/VMM/testcase/tstHelp.h +++ b/src/VBox/VMM/testcase/tstHelp.h @@ -1,4 +1,4 @@ -/* $Id: tstHelp.h 30217 2010-06-16 01:43:23Z vboxsync $ */ +/* $Id: tstHelp.h 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM testcase - Helper stuff. */ @@ -19,7 +19,7 @@ #define ___tstHelp_h #include <VBox/cdefs.h> -#include <VBox/cpum.h> +#include <VBox/vmm/cpum.h> RT_C_DECLS_BEGIN void tstDumpCtx(PCPUMCTX pCtx, const char *pszComment); diff --git a/src/VBox/VMM/testcase/tstInstrEmul.cpp b/src/VBox/VMM/testcase/tstInstrEmul.cpp index e57746c1e..1caeab2b1 100644 --- a/src/VBox/VMM/testcase/tstInstrEmul.cpp +++ b/src/VBox/VMM/testcase/tstInstrEmul.cpp @@ -1,4 +1,4 @@ -/* $Id: tstInstrEmul.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: tstInstrEmul.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Micro Testcase, checking emulation of certain instructions */ @@ -19,9 +19,9 @@ * Header Files * *******************************************************************************/ #include <stdio.h> -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> -#include <VBox/em.h> +#include <VBox/vmm/em.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/testcase/tstMMHyperHeap.cpp b/src/VBox/VMM/testcase/tstMMHyperHeap.cpp index f17d562cf..d119d5dd5 100644 --- a/src/VBox/VMM/testcase/tstMMHyperHeap.cpp +++ b/src/VBox/VMM/testcase/tstMMHyperHeap.cpp @@ -1,4 +1,4 @@ -/* $Id: tstMMHyperHeap.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: tstMMHyperHeap.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * MM Hypervisor Heap testcase. */ @@ -18,10 +18,10 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/mm.h> -#include <VBox/stam.h> -#include <VBox/vm.h> -#include <VBox/uvm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> #include <VBox/sup.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/VBox/VMM/testcase/tstMicro.cpp b/src/VBox/VMM/testcase/tstMicro.cpp index 9b439ec7b..abd23771b 100644 --- a/src/VBox/VMM/testcase/tstMicro.cpp +++ b/src/VBox/VMM/testcase/tstMicro.cpp @@ -1,4 +1,4 @@ -/* $Id: tstMicro.cpp 32190 2010-09-02 12:20:06Z vboxsync $ */ +/* $Id: tstMicro.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Micro Testcase, profiling special CPU operations. */ @@ -18,13 +18,13 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/mm.h> -#include <VBox/cpum.h> -#include <VBox/pdmapi.h> -#include <VBox/dbgf.h> -#include <VBox/pgm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/dbgf.h> +#include <VBox/vmm/pgm.h> #include <VBox/err.h> #include <VBox/param.h> diff --git a/src/VBox/VMM/testcase/tstMicroRC.cpp b/src/VBox/VMM/testcase/tstMicroRC.cpp index 8e47b8640..a43461c78 100644 --- a/src/VBox/VMM/testcase/tstMicroRC.cpp +++ b/src/VBox/VMM/testcase/tstMicroRC.cpp @@ -1,4 +1,4 @@ -/* $Id: tstMicroRC.cpp 29250 2010-05-09 17:53:58Z vboxsync $ */ +/* $Id: tstMicroRC.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Micro Testcase, profiling special CPU operations - GC Code (hacks). */ @@ -18,9 +18,9 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/selm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/selm.h> #include "tstMicro.h" #include <VBox/err.h> diff --git a/src/VBox/VMM/testcase/tstMicroRCA.asm b/src/VBox/VMM/testcase/tstMicroRCA.asm index 1438deefa..1fc3bf851 100644 --- a/src/VBox/VMM/testcase/tstMicroRCA.asm +++ b/src/VBox/VMM/testcase/tstMicroRCA.asm @@ -1,4 +1,4 @@ -; $Id: tstMicroRCA.asm 28800 2010-04-27 08:22:32Z vboxsync $ +; $Id: tstMicroRCA.asm 35346 2010-12-27 16:13:13Z vboxsync $ ;; @file ; tstMicroRCA ; @@ -20,9 +20,9 @@ ;******************************************************************************* %include "VBox/asmdefs.mac" %include "VBox/x86.mac" -%include "VBox/cpum.mac" +%include "VBox/vmm/cpum.mac" %include "VBox/err.mac" -%include "VBox/vm.mac" +%include "VBox/vmm/vm.mac" %include "tstMicro.mac" diff --git a/src/VBox/VMM/testcase/tstPDMAsyncCompletion.cpp b/src/VBox/VMM/testcase/tstPDMAsyncCompletion.cpp index 758a202f0..e3513ebbf 100644 --- a/src/VBox/VMM/testcase/tstPDMAsyncCompletion.cpp +++ b/src/VBox/VMM/testcase/tstPDMAsyncCompletion.cpp @@ -1,4 +1,4 @@ -/* $Id: tstPDMAsyncCompletion.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: tstPDMAsyncCompletion.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Asynchronous Completion Testcase. * @@ -25,15 +25,15 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_ASYNC_COMPLETION -#include "../VMInternal.h" /* UVM */ -#include <VBox/vm.h> -#include <VBox/uvm.h> -#include <VBox/pdmasynccompletion.h> -#include <VBox/vmm.h> -#include <VBox/cpum.h> +#include "VMInternal.h" /* UVM */ +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> +#include <VBox/vmm/pdmasynccompletion.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/cpum.h> #include <VBox/err.h> #include <VBox/log.h> -#include <VBox/pdmapi.h> +#include <VBox/vmm/pdmapi.h> #include <iprt/alloc.h> #include <iprt/asm.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/testcase/tstPDMAsyncCompletionStress.cpp b/src/VBox/VMM/testcase/tstPDMAsyncCompletionStress.cpp index 40ddfad62..fb28df5e9 100644 --- a/src/VBox/VMM/testcase/tstPDMAsyncCompletionStress.cpp +++ b/src/VBox/VMM/testcase/tstPDMAsyncCompletionStress.cpp @@ -1,4 +1,4 @@ -/* $Id: tstPDMAsyncCompletionStress.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: tstPDMAsyncCompletionStress.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * PDM Asynchronous Completion Stresstest. * @@ -22,16 +22,16 @@ *******************************************************************************/ #define LOG_GROUP LOG_GROUP_PDM_ASYNC_COMPLETION -#include "../VMInternal.h" /* UVM */ -#include <VBox/vm.h> -#include <VBox/uvm.h> -#include <VBox/pdmasynccompletion.h> -#include <VBox/vmm.h> -#include <VBox/cpum.h> +#include "VMInternal.h" /* UVM */ +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> +#include <VBox/vmm/pdmasynccompletion.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/cpum.h> #include <VBox/err.h> #include <VBox/log.h> -#include <VBox/pdmapi.h> -#include <VBox/pdmthread.h> +#include <VBox/vmm/pdmapi.h> +#include <VBox/vmm/pdmthread.h> #include <iprt/alloc.h> #include <iprt/asm.h> #include <iprt/assert.h> @@ -470,7 +470,7 @@ static int tstPDMACStressTestFileOpen(PVM pVM, PPDMACTESTFILE pTestFile, unsigne { RTFileClose(FileTmp); - rc = PDMR3AsyncCompletionEpCreateForFile(&pTestFile->hEndpoint, szFile, PDMACEP_FILE_FLAGS_CACHING, pTestFile->pTemplate); + rc = PDMR3AsyncCompletionEpCreateForFile(&pTestFile->hEndpoint, szFile, 0, pTestFile->pTemplate); if (RT_SUCCESS(rc)) { char szThreadDesc[256]; diff --git a/src/VBox/VMM/testcase/tstSSM.cpp b/src/VBox/VMM/testcase/tstSSM.cpp index b68c8d56a..ccebc89ef 100644 --- a/src/VBox/VMM/testcase/tstSSM.cpp +++ b/src/VBox/VMM/testcase/tstSSM.cpp @@ -1,4 +1,4 @@ -/* $Id: tstSSM.cpp 31895 2010-08-24 09:00:14Z vboxsync $ */ +/* $Id: tstSSM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Saved State Manager Testcase. */ @@ -19,12 +19,12 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/ssm.h> -#include "../VMInternal.h" /* createFakeVM */ -#include <VBox/vm.h> -#include <VBox/uvm.h> -#include <VBox/mm.h> -#include <VBox/stam.h> +#include <VBox/vmm/ssm.h> +#include "VMInternal.h" /* createFakeVM */ +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/stam.h> #include <VBox/log.h> #include <VBox/sup.h> diff --git a/src/VBox/VMM/testcase/tstVMM-HwAccm.cpp b/src/VBox/VMM/testcase/tstVMM-HwAccm.cpp index ba7e444f3..497a7d0ed 100644 --- a/src/VBox/VMM/testcase/tstVMM-HwAccm.cpp +++ b/src/VBox/VMM/testcase/tstVMM-HwAccm.cpp @@ -1,4 +1,4 @@ -/* $Id: tstVMM-HwAccm.cpp 32190 2010-09-02 12:20:06Z vboxsync $ */ +/* $Id: tstVMM-HwAccm.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM Testcase. */ @@ -19,9 +19,9 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/cpum.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/cpum.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/testcase/tstVMM.cpp b/src/VBox/VMM/testcase/tstVMM.cpp index c52a47ed9..88413e5b1 100644 --- a/src/VBox/VMM/testcase/tstVMM.cpp +++ b/src/VBox/VMM/testcase/tstVMM.cpp @@ -1,4 +1,4 @@ -/* $Id: tstVMM.cpp 32190 2010-09-02 12:20:06Z vboxsync $ */ +/* $Id: tstVMM.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM Testcase. */ @@ -19,11 +19,11 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/cpum.h> -#include <VBox/tm.h> -#include <VBox/pdmapi.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/pdmapi.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/testcase/tstVMMFork.cpp b/src/VBox/VMM/testcase/tstVMMFork.cpp index 1059c0efb..d30eaea6d 100644 --- a/src/VBox/VMM/testcase/tstVMMFork.cpp +++ b/src/VBox/VMM/testcase/tstVMMFork.cpp @@ -1,4 +1,4 @@ -/* $Id: tstVMMFork.cpp 32190 2010-09-02 12:20:06Z vboxsync $ */ +/* $Id: tstVMMFork.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM Fork Test. */ @@ -19,8 +19,8 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vm.h> -#include <VBox/vmm.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/testcase/tstVMMR0CallHost-1.cpp b/src/VBox/VMM/testcase/tstVMMR0CallHost-1.cpp index b42d43e2e..2dc2dcf90 100644 --- a/src/VBox/VMM/testcase/tstVMMR0CallHost-1.cpp +++ b/src/VBox/VMM/testcase/tstVMMR0CallHost-1.cpp @@ -1,4 +1,4 @@ -/* $Id: tstVMMR0CallHost-1.cpp 28800 2010-04-27 08:22:32Z vboxsync $ */ +/* $Id: tstVMMR0CallHost-1.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * Testcase for the VMMR0JMPBUF operations. */ @@ -28,7 +28,7 @@ #define IN_VMM_R0 #define IN_RING0 /* pretent we're in Ring-0 to get the prototypes. */ -#include <VBox/vmm.h> +#include <VBox/vmm/vmm.h> #include "VMMInternal.h" diff --git a/src/VBox/VMM/testcase/tstVMREQ.cpp b/src/VBox/VMM/testcase/tstVMREQ.cpp index 70783f049..3e6c2c9d6 100644 --- a/src/VBox/VMM/testcase/tstVMREQ.cpp +++ b/src/VBox/VMM/testcase/tstVMREQ.cpp @@ -1,4 +1,4 @@ -/* $Id: tstVMREQ.cpp 32190 2010-09-02 12:20:06Z vboxsync $ */ +/* $Id: tstVMREQ.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VMM Testcase. */ @@ -19,9 +19,9 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/vm.h> -#include <VBox/vmm.h> -#include <VBox/cpum.h> +#include <VBox/vmm/vm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/cpum.h> #include <VBox/err.h> #include <VBox/log.h> #include <iprt/assert.h> diff --git a/src/VBox/VMM/testcase/tstVMStructRC.cpp b/src/VBox/VMM/testcase/tstVMStructRC.cpp index 1d8a544b3..55ef0280a 100644 --- a/src/VBox/VMM/testcase/tstVMStructRC.cpp +++ b/src/VBox/VMM/testcase/tstVMStructRC.cpp @@ -1,4 +1,4 @@ -/* $Id: tstVMStructRC.cpp 34163 2010-11-18 12:16:43Z vboxsync $ */ +/* $Id: tstVMStructRC.cpp 35601 2011-01-18 10:43:11Z vboxsync $ */ /** @file * tstVMMStructRC - Generate structure member and size checks from the * RC perspective. @@ -50,34 +50,34 @@ AssertCompileSize(RTHCPHYS, 8); * Header Files * *******************************************************************************/ #define IN_TSTVMSTRUCTGC 1 -#include <VBox/cfgm.h> -#include <VBox/cpum.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/trpm.h> -#include <VBox/vmm.h> -#include <VBox/stam.h> -#include "../PDMInternal.h" -#include <VBox/pdm.h> -#include "../CFGMInternal.h" -#include "../CPUMInternal.h" -#include "../MMInternal.h" -#include "../PGMInternal.h" -#include "../SELMInternal.h" -#include "../TRPMInternal.h" -#include "../TMInternal.h" -#include "../IOMInternal.h" -#include "../REMInternal.h" -#include "../HWACCMInternal.h" -#include "../PATM/PATMInternal.h" -#include "../VMMInternal.h" -#include "../DBGFInternal.h" -#include "../STAMInternal.h" -#include "../PATM/CSAMInternal.h" -#include "../EMInternal.h" -#include "../REMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/stam.h> +#include "PDMInternal.h" +#include <VBox/vmm/pdm.h> +#include "CFGMInternal.h" +#include "CPUMInternal.h" +#include "MMInternal.h" +#include "PGMInternal.h" +#include "SELMInternal.h" +#include "TRPMInternal.h" +#include "TMInternal.h" +#include "IOMInternal.h" +#include "REMInternal.h" +#include "HWACCMInternal.h" +#include "PATMInternal.h" +#include "VMMInternal.h" +#include "DBGFInternal.h" +#include "STAMInternal.h" +#include "CSAMInternal.h" +#include "EMInternal.h" +#include "REMInternal.h" +#include <VBox/vmm/vm.h> #include <VBox/param.h> #include <VBox/x86.h> #include <iprt/assert.h> @@ -124,11 +124,17 @@ int main() GEN_CHECK_OFF(DBGF, cBreakpoints); GEN_CHECK_OFF(DBGF, aHwBreakpoints); GEN_CHECK_OFF(DBGF, aBreakpoints); + GEN_CHECK_OFF(DBGF, hAsDbLock); + GEN_CHECK_OFF(DBGF, hRegDbLock); + GEN_CHECK_OFF(DBGF, RegSetSpace); + GEN_CHECK_OFF(DBGF, pCurOS); GEN_CHECK_SIZE(DBGFEVENT); GEN_CHECK_SIZE(DBGFCPU); GEN_CHECK_OFF(DBGFCPU, iActiveBp); GEN_CHECK_OFF(DBGFCPU, fSingleSteppingRaw); + GEN_CHECK_OFF(DBGFCPU, pGuestRegSet); + GEN_CHECK_OFF(DBGFCPU, pHyperRegSet); GEN_CHECK_SIZE(EM); GEN_CHECK_OFF(EM, offVM); diff --git a/src/VBox/VMM/testcase/tstVMStructSize.cpp b/src/VBox/VMM/testcase/tstVMStructSize.cpp index 7fdc262dd..d6ca0b79b 100644 --- a/src/VBox/VMM/testcase/tstVMStructSize.cpp +++ b/src/VBox/VMM/testcase/tstVMStructSize.cpp @@ -1,4 +1,4 @@ -/* $Id: tstVMStructSize.cpp 33935 2010-11-10 15:37:02Z vboxsync $ */ +/* $Id: tstVMStructSize.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * tstVMStructSize - testcase for check structure sizes/alignment * and to verify that HC and GC uses the same @@ -20,16 +20,16 @@ /******************************************************************************* * Header Files * *******************************************************************************/ -#include <VBox/cfgm.h> -#include <VBox/cpum.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/selm.h> -#include <VBox/trpm.h> -#include <VBox/vmm.h> -#include <VBox/stam.h> +#include <VBox/vmm/cfgm.h> +#include <VBox/vmm/cpum.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/selm.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/stam.h> #include "PDMInternal.h" -#include <VBox/pdm.h> +#include <VBox/vmm/pdm.h> #include "CFGMInternal.h" #include "CPUMInternal.h" #include "MMInternal.h" @@ -49,11 +49,11 @@ #include "CSAMInternal.h" #include "EMInternal.h" #include "REMInternal.h" -#include "VMMR0/GMMR0Internal.h" -#include "VMMR0/GVMMR0Internal.h" -#include <VBox/vm.h> -#include <VBox/uvm.h> -#include <VBox/gvm.h> +#include "../VMMR0/GMMR0Internal.h" +#include "../VMMR0/GVMMR0Internal.h" +#include <VBox/vmm/vm.h> +#include <VBox/vmm/uvm.h> +#include <VBox/vmm/gvm.h> #include <VBox/param.h> #include <VBox/x86.h> diff --git a/src/bldprogs/scm.cpp b/src/bldprogs/scm.cpp index 016219d60..fbf2283f6 100644 --- a/src/bldprogs/scm.cpp +++ b/src/bldprogs/scm.cpp @@ -1,4 +1,4 @@ -/* $Id: scm.cpp 33540 2010-10-28 09:27:05Z vboxsync $ */ +/* $Id: scm.cpp 35404 2011-01-05 11:32:29Z vboxsync $ */ /** @file * IPRT Testcase / Tool - Source Code Massager. */ @@ -3517,6 +3517,7 @@ static bool rewrite_Makefile_kmk(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM * - ensure new line at end of file. * - Indentation of precompiler statements (#ifdef, #defines). * - space between functions. + * - string.h -> iprt/string.h, stdarg.h -> iprt/stdarg.h, etc. */ static bool rewrite_C_and_CPP(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings) { @@ -4089,7 +4090,7 @@ int main(int argc, char **argv) case 'V': { /* The following is assuming that svn does it's job here. */ - static const char s_szRev[] = "$Revision: 33540 $"; + static const char s_szRev[] = "$Revision: 35404 $"; const char *psz = RTStrStripL(strchr(s_szRev, ' ')); RTPrintf("r%.*s\n", strchr(psz, ' ') - psz, psz); return 0; diff --git a/src/libs/xpcom18a4/Config.kmk b/src/libs/xpcom18a4/Config.kmk index 86aeccae8..c2e646d0a 100644 --- a/src/libs/xpcom18a4/Config.kmk +++ b/src/libs/xpcom18a4/Config.kmk @@ -1,4 +1,4 @@ -# $Id: Config.kmk 31259 2010-07-30 20:02:05Z vboxsync $ +# $Id: Config.kmk 35440 2011-01-09 23:43:10Z vboxsync $ ## @file # XPCOM kBuild Configuration file. # @@ -130,7 +130,7 @@ TEMPLATE_XPCOM_LDFLAGS.l4 = $(L4_DIR)/lib/x86_586/crt0.o \ # -Wl,--whole-archive,--no-allow-shlib-undefined TEMPLATE_XPCOM_LIBS.l4 = $(VBOX_GCC_LIBGCC) TEMPLATE_XPCOM_LIBS.solaris = sendfile -TEMPLATE_XPCOM_ORDERDEPS = $(foreach hdrinst, $(filter %-HEADERS, $(INSTALLS)), $(TARGET_$(hdrinst))) \ +TEMPLATE_XPCOM_ORDERDEPS = $(foreach hdrinst, $(filter %-HEADERS, $(INSTALLS)), $($(hdrinst)_1_TARGET)) \ $(PATH_TARGET)/VBox-xpcom-idl-timestamp ifeq ($(KBUILD_TARGET),os2) ifndef USE_OS2_TOOLKIT_HEADERS @@ -161,8 +161,8 @@ TEMPLATE_XPCOMEXE_INCS = ipc/ipcd/shared/src \ $(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd \ . TEMPLATE_XPCOMEXE_LIBS = \ - $(TARGET_VBox-xpcom-ipcshared) \ - $(TARGET_VBoxXPCOM) \ + $(VBox-xpcom-ipcshared_1_TARGET) \ + $(VBoxXPCOM_1_TARGET) \ $(TEMPLATE_XPCOM_LIBS) TEMPLATE_XPCOMEXE_LIBS.freebsd = $(LIB_PTHREAD) TEMPLATE_XPCOMEXE_LIBS.linux = dl $(LIB_PTHREAD) @@ -210,7 +210,7 @@ TEMPLATE_XPCOMBLDPROG_CFLAGS = $(filter-out -pedantic -Wshadow, $(TE TEMPLATE_XPCOMBLDPROG_CXXFLAGS.darwin = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.darwin) -fpascal-strings -fshort-wchar -fno-common -fno-rtti TEMPLATE_XPCOMBLDPROG_CXXFLAGS.solaris = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.solaris) -fno-omit-frame-pointer # for now anyway. TEMPLATE_XPCOMBLDPROG_LDFLAGS.darwin = $(TEMPLATE_VBOXBLDPROG_LDFLAGS.darwin) -fpascal-strings -fshort-wchar -fno-rtti -fno-exceptions -TEMPLATE_XPCOMBLDPROG_ORDERDEPS = $(foreach hdrinst, $(filter %-HEADERS, $(INSTALLS)), $(TARGET_$(hdrinst))) +TEMPLATE_XPCOMBLDPROG_ORDERDEPS = $(foreach hdrinst, $(filter %-HEADERS, $(INSTALLS)), $($(hdrinst)_1_TARGET)) ifeq ($(VBOX_DEF_MACOSX_VERSION_MIN),10.4) diff --git a/src/libs/xpcom18a4/Makefile.kmk b/src/libs/xpcom18a4/Makefile.kmk index 686e05ee2..f91c1a54f 100644 --- a/src/libs/xpcom18a4/Makefile.kmk +++ b/src/libs/xpcom18a4/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 31534 2010-08-10 13:17:52Z vboxsync $ +# $Id: Makefile.kmk 35440 2011-01-09 23:43:10Z vboxsync $ ## @file # Sub-Makefile for XPCOM. # @@ -458,7 +458,7 @@ ifeq ($(KBUILD_TARGET),os2) $(VBOX_PATH_LIBIDL)/lib/glib.lib # install necessary DLLs to the same place where xpidl goes INSTALLS += xpidl-DLLS - xpidl_ORDERDEPS = $(TARGET_xpidl-DLLS) + xpidl_ORDERDEPS = $(xpidl-DLLS_1_TARGET) xpidl-DLLS_INST = $(xpidl_INST) # static libraries of these may be provided instead, # so copy DLLs only when they are present @@ -540,7 +540,7 @@ VBox-xpcom-nspr_DEFS.solaris = \ _PR_PTHREADS VBox-xpcom-nspr_INCS = \ nsprpub/pr/include/private \ - $(PATH_VBox-xpcom-nspr) + $(VBox-xpcom-nspr_0_OUTDIR) VBox-xpcom-nspr_SOURCES = \ nsprpub/pr/src/io/prfdcach.c \ @@ -689,17 +689,17 @@ VBox-xpcom-nspr_SOURCES.solaris.x86 = nsprpub/pr/src/md/unix/os_SunOS_x86.s VBox-xpcom-nspr_SOURCES.solaris.amd64 = nsprpub/pr/src/md/unix/os_SunOS_x86_64.s # generate build stamps -nsprpub/pr/src/prvrsion.c_DEPS = $(PATH_VBox-xpcom-nspr)/_pr_bld.h -nsprpub/lib/ds/plvrsion.c_DEPS = $(PATH_VBox-xpcom-nspr)/_pl_bld.h +nsprpub/pr/src/prvrsion.c_DEPS = $(VBox-xpcom-nspr_0_OUTDIR)/_pr_bld.h +nsprpub/lib/ds/plvrsion.c_DEPS = $(VBox-xpcom-nspr_0_OUTDIR)/_pl_bld.h VBox-xpcom-nspr_CLEAN += \ - $(PATH_VBox-xpcom-nspr)/_pr_bld.h \ - $(PATH_VBox-xpcom-nspr)/_pl_bld.h + $(VBox-xpcom-nspr_0_OUTDIR)/_pr_bld.h \ + $(VBox-xpcom-nspr_0_OUTDIR)/_pl_bld.h -$$(PATH_VBox-xpcom-nspr)/_pr_bld.h: | $$(PATH_VBox-xpcom-nspr)/ +$$(VBox-xpcom-nspr_0_OUTDIR)/_pr_bld.h: | $$(VBox-xpcom-nspr_0_OUTDIR)/ $(call MSG_GENERATE,,$@) $(QUIET)$(APPEND) -t $@ '#define _BUILD_STRING "$(date +%Y-%m-%d %T)"' -$$(PATH_VBox-xpcom-nspr)/_pl_bld.h: | $$(PATH_VBox-xpcom-nspr)/ +$$(VBox-xpcom-nspr_0_OUTDIR)/_pl_bld.h: | $$(VBox-xpcom-nspr_0_OUTDIR)/ $(call MSG_GENERATE,,$@) $(QUIET)$(APPEND) -t $@ '#define _BUILD_STRING "$(date +%Y-%m-%d %T)"' @@ -946,7 +946,7 @@ VBoxXPCOMGlue_SOURCES = $(VBoxXPCOMGlue_COMMON_SOURCES) \ xpcom/glue/standalone/nsXPCOMGlue.cpp \ xpcom/glue/standalone/nsGREDirServiceProvider.cpp VBoxXPCOMGlue_SOURCES += \ - $(TARGET_VBox-xpcom-string) + $(VBox-xpcom-string_1_TARGET) #VBoxXPCOMGlue_INST = lib/ $(INST_SDK)lib/ @@ -972,51 +972,51 @@ VBoxXPCOM_SOURCES.os2 = \ VBoxXPCOM_SOURCES.solaris = \ vboxdeps.cpp VBoxXPCOM_LIBS = \ - $(TARGET_VBox-xpcom-typelib) \ - $(TARGET_VBox-xpcom-string) \ - $(TARGET_VBox-xpcom-base) \ - $(TARGET_VBox-xpcom-ds) \ - $(TARGET_VBox-xpcom-io) \ - $(TARGET_VBox-xpcom-components) \ - $(TARGET_VBox-xpcom-threads) \ - $(TARGET_VBox-xpcom-xptinfo) \ - $(TARGET_VBox-xpcom-xptcall) \ - $(TARGET_VBox-xpcom-proxy) \ - $(TARGET_VBox-xpcom-nspr) \ - $(TARGET_VBoxXPCOMGlue_s) + $(VBox-xpcom-typelib_1_TARGET) \ + $(VBox-xpcom-string_1_TARGET) \ + $(VBox-xpcom-base_1_TARGET) \ + $(VBox-xpcom-ds_1_TARGET) \ + $(VBox-xpcom-io_1_TARGET) \ + $(VBox-xpcom-components_1_TARGET) \ + $(VBox-xpcom-threads_1_TARGET) \ + $(VBox-xpcom-xptinfo_1_TARGET) \ + $(VBox-xpcom-xptcall_1_TARGET) \ + $(VBox-xpcom-proxy_1_TARGET) \ + $(VBox-xpcom-nspr_1_TARGET) \ + $(VBoxXPCOMGlue_s_1_TARGET) VBoxXPCOM_LIBS.linux = \ pthread dl ifeq ($(filter-out freebsd l4 linux netbsd openbsd,$(KBUILD_TARGET)),) # gnu ld. VBoxXPCOM_LDFLAGS = -Wl,--whole-archive \ - $(TARGET_VBox-xpcom-typelib) \ - $(TARGET_VBox-xpcom-string) \ - $(TARGET_VBox-xpcom-base) \ - $(TARGET_VBox-xpcom-ds) \ - $(TARGET_VBox-xpcom-io) \ - $(TARGET_VBox-xpcom-components) \ - $(TARGET_VBox-xpcom-threads) \ - $(TARGET_VBox-xpcom-xptinfo) \ - $(TARGET_VBox-xpcom-xptcall) \ - $(TARGET_VBox-xpcom-proxy) \ - $(TARGET_VBox-xpcom-nspr) \ - $(TARGET_VBoxXPCOMGlue_s) \ + $(VBox-xpcom-typelib_1_TARGET) \ + $(VBox-xpcom-string_1_TARGET) \ + $(VBox-xpcom-base_1_TARGET) \ + $(VBox-xpcom-ds_1_TARGET) \ + $(VBox-xpcom-io_1_TARGET) \ + $(VBox-xpcom-components_1_TARGET) \ + $(VBox-xpcom-threads_1_TARGET) \ + $(VBox-xpcom-xptinfo_1_TARGET) \ + $(VBox-xpcom-xptcall_1_TARGET) \ + $(VBox-xpcom-proxy_1_TARGET) \ + $(VBox-xpcom-nspr_1_TARGET) \ + $(VBoxXPCOMGlue_s_1_TARGET) \ -Wl,--no-whole-archive endif VBoxXPCOM_LDFLAGS.solaris += -Wl,-z,allextract \ - $(TARGET_VBox-xpcom-typelib) \ - $(TARGET_VBox-xpcom-string) \ - $(TARGET_VBox-xpcom-base) \ - $(TARGET_VBox-xpcom-ds) \ - $(TARGET_VBox-xpcom-io) \ - $(TARGET_VBox-xpcom-components) \ - $(TARGET_VBox-xpcom-threads) \ - $(TARGET_VBox-xpcom-xptinfo) \ - $(TARGET_VBox-xpcom-xptcall) \ - $(TARGET_VBox-xpcom-proxy) \ - $(TARGET_VBox-xpcom-nspr) \ - $(TARGET_VBoxXPCOMGlue_s) \ + $(VBox-xpcom-typelib_1_TARGET) \ + $(VBox-xpcom-string_1_TARGET) \ + $(VBox-xpcom-base_1_TARGET) \ + $(VBox-xpcom-ds_1_TARGET) \ + $(VBox-xpcom-io_1_TARGET) \ + $(VBox-xpcom-components_1_TARGET) \ + $(VBox-xpcom-threads_1_TARGET) \ + $(VBox-xpcom-xptinfo_1_TARGET) \ + $(VBox-xpcom-xptcall_1_TARGET) \ + $(VBox-xpcom-proxy_1_TARGET) \ + $(VBox-xpcom-nspr_1_TARGET) \ + $(VBoxXPCOMGlue_s_1_TARGET) \ -Wl,-z,defaultextract #VBoxXPCOM_LIBS.l4 = $(L4_LIBDIR)/libxpcomstubs.a $(L4_LIBDIR)/../libuc_c++.a \ @@ -1041,7 +1041,7 @@ ifdef IPC_LOGGING TEMPLATE_XPCOMIPC_DEFS += IPC_LOGGING endif -TEMPLATE_XPCOMIPC_LIBS = $(TARGET_VBoxXPCOM) $(TEMPLATE_XPCOM_LIBS) +TEMPLATE_XPCOMIPC_LIBS = $(VBoxXPCOM_1_TARGET) $(TEMPLATE_XPCOM_LIBS) TEMPLATE_XPCOMIPCEXE = XPCOM IPC executables TEMPLATE_XPCOMIPCEXE_EXTENDS = XPCOMEXE @@ -1106,11 +1106,11 @@ VBoxXPCOMIPCC_SOURCES += \ endif VBoxXPCOMIPCC_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/components/VBoxXPCOMIPCC.dylib VBoxXPCOMIPCC_LIBS = \ - $(TARGET_VBox-xpcom-ipcutils) \ - $(TARGET_VBox-xpcom-ipcshared) \ - $(TARGET_VBox-xpcom-ipcdlock) \ - $(TARGET_VBox-xpcom-ipctransmgr) \ - $(TARGET_VBox-xpcom-ipctmgrcom) + $(VBox-xpcom-ipcutils_1_TARGET) \ + $(VBox-xpcom-ipcshared_1_TARGET) \ + $(VBox-xpcom-ipcdlock_1_TARGET) \ + $(VBox-xpcom-ipctransmgr_1_TARGET) \ + $(VBox-xpcom-ipctmgrcom_1_TARGET) # EF #VBoxXPCOMIPCC_LIBS += $(LIB_RUNTIME) @@ -1309,10 +1309,10 @@ VBoxXPCOMBase-xpt-inst_CLEAN = \ $(PATH_TARGET)/VBox-xpcom-xpt-files/VBoxXPCOMBase.xpt # combined typelib library -$(PATH_TARGET)/VBox-xpcom-xpt-files/VBoxXPCOMBase.xpt: $$(VBOX_XPTFILES) | $$(TARGET_xpt_link) $(PATH_TARGET)/VBox-xpcom-xpt-files/ +$(PATH_TARGET)/VBox-xpcom-xpt-files/VBoxXPCOMBase.xpt: $$(VBOX_XPTFILES) | $$(xpt_link_1_TARGET) $(PATH_TARGET)/VBox-xpcom-xpt-files/ $(call MSG_LINK,XPCOM_TYPELIB,$@) $(QUIET)$(MKDIR) -p -- $(PATH_BIN)/components - $(QUIET)$(TARGET_xpt_link) $@ $^ + $(QUIET)$(xpt_link_1_TARGET) $@ $^ @@ -1332,12 +1332,12 @@ define def_IDL $(VBOX_PATH_SDK)/bindings/xpcom/include/$(notdir $(subst .idl,.h,$(idl))) \ + $(PATH_TARGET)/VBox-xpcom-xpt-files/$(notdir $(subst .idl,.xpt,$(idl))): \ $(VBOX_PATH_XPCOM_SRC)/$(idl) \ - | $$$$(TARGET_xpidl) \ + | $$$$(xpidl_1_TARGET) \ $(PATH_TARGET)/VBox-xpcom-xpt-files/ $$(call MSG_TOOL,xpidl,XPCOM,$$<,$$@) $$(QUIET)$(MKDIR) -p $(VBOX_PATH_SDK)/bindings/xpcom/include $(VBOX_PATH_SDK)/bindings/xpcom/idl - $$(QUIET)$$(TARGET_xpidl) -m header $(XPIDL_INCS) -e $$@ $$< - $$(QUIET)$$(TARGET_xpidl) -m typelib $(XPIDL_INCS) -e $(addprefix $(PATH_TARGET)/VBox-xpcom-xpt-files/,$(notdir $(subst .idl,.xpt,$(idl)))) $$< + $$(QUIET)$$(xpidl_1_TARGET) -m header $(XPIDL_INCS) -e $$@ $$< + $$(QUIET)$$(xpidl_1_TARGET) -m typelib $(XPIDL_INCS) -e $(addprefix $(PATH_TARGET)/VBox-xpcom-xpt-files/,$(notdir $(subst .idl,.xpt,$(idl)))) $$< $$(QUIET)$(CP) $$< $$(VBOX_PATH_SDK)/bindings/xpcom/idl endef diff --git a/src/recompiler/Makefile-old.kmk b/src/recompiler/Makefile-old.kmk index 5db0a3672..ad4e1b00c 100644 --- a/src/recompiler/Makefile-old.kmk +++ b/src/recompiler/Makefile-old.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile-old.kmk 29373 2010-05-11 16:12:52Z vboxsync $ +# $Id: Makefile-old.kmk 35572 2011-01-14 14:51:16Z vboxsync $ ## @file # The OLD Recompiler Sub-Makefile body. # @@ -124,7 +124,7 @@ $(REM_MOD)_INCS = \ tcg \ fpu \ $(PATH_$(REM_MOD)) \ - $(PATH_ROOT)/src/VBox/VMM \ + $(PATH_ROOT)/src/VBox/VMM/include \ . ifn1of ($($(REM_MOD)_DEFS),DEBUG_TMP_LOGGING) $(REM_MOD)_DEFS += LOG_USE_C99 @@ -201,7 +201,7 @@ if defined(VBOX_USE_REM2) || defined(VBOX_USE_REM64) # The VBoxREM2, VBoxREM32 and VBoxREM64 wrapper. # DLLS += VBoxREMWrapper -VBoxREMWrapper_TEMPLATE = VBOXR3 +VBoxREMWrapper_TEMPLATE = VBoxR3DllWarnNoPic VBoxREMWrapper_NAME = VBoxREM VBoxREMWrapper_DEFS = IN_REM_R3 ifdef VBOX_USE_REM64 @@ -256,7 +256,7 @@ endif # USE_VBOXREM64 # won't be built until after all the other DLLs. # IMPORT_LIBS += VBoxREMImp -VBoxREMImp_TEMPLATE = VBOXR3 +VBoxREMImp_TEMPLATE = VBoxR3Dll ifn1of ($(KBUILD_TARGET), os2 win) VBoxREMImp_NAME = VBoxREM endif diff --git a/src/recompiler/Makefile.kmk b/src/recompiler/Makefile.kmk index 7db6dd9aa..8e20d841c 100644 --- a/src/recompiler/Makefile.kmk +++ b/src/recompiler/Makefile.kmk @@ -1,4 +1,4 @@ -# $Id: Makefile.kmk 33540 2010-10-28 09:27:05Z vboxsync $ +# $Id: Makefile.kmk 35572 2011-01-14 14:51:16Z vboxsync $ ## @file # The Recompiler Sub-Makefile. # @@ -79,8 +79,8 @@ VBoxRemPrimary_INCS = \ target-i386 \ tcg \ fpu \ - $(PATH_VBoxRemPrimary) \ - $(PATH_ROOT)/src/VBox/VMM \ + $(VBoxRemPrimary_0_OUTDIR) \ + $(PATH_ROOT)/src/VBox/VMM/include \ . VBoxRemPrimary_INCS.amd64 += tcg/x86_64 VBoxRemPrimary_INCS.x86 += tcg/i386 @@ -106,7 +106,7 @@ VBoxRemPrimary_SOURCES = \ target-i386/translate.c VBoxRemPrimary_SOURCES.debug += \ Sun/testmath.c -VBoxRemPrimary_SOURCES.win.x86 = $(PATH_VBoxREMImp)/VBoxREMWin.def +VBoxRemPrimary_SOURCES.win.x86 = $(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def VBoxRemPrimary_LIBS = \ $(LIB_VMM) \ @@ -177,7 +177,7 @@ ifdef VBOX_REM_WRAPPER # VBoxREM - Wrapper for loading VBoxREM2, VBoxREM32 or VBoxREM64. # DLLS += VBoxREMWrapper - VBoxREMWrapper_TEMPLATE = VBOXR3 + VBoxREMWrapper_TEMPLATE = VBoxR3DllWarnNoPic VBoxREMWrapper_NAME = VBoxREM VBoxREMWrapper_DEFS = IN_REM_R3 if "$(KBUILD_TARGET_ARCH)" == "x86" && defined(VBOX_WITH_64_BITS_GUESTS) @@ -212,18 +212,18 @@ endif # won't be built until after all the other DLLs. # IMPORT_LIBS += VBoxREMImp -VBoxREMImp_TEMPLATE = VBOXR3 +VBoxREMImp_TEMPLATE = VBoxR3Dll ifn1of ($(KBUILD_TARGET), os2 win) VBoxREMImp_NAME = VBoxREM endif VBoxREMImp_INST = $(INST_LIB) -VBoxREMImp_SOURCES.win = $(PATH_VBoxREMImp)/VBoxREMWin.def -VBoxREMImp_CLEAN.win = $(PATH_VBoxREMImp)/VBoxREMWin.def -VBoxREMImp_SOURCES.os2 = $(PATH_VBoxREMImp)/VBoxREMOS2.def -VBoxREMImp_CLEAN.os2 = $(PATH_VBoxREMImp)/VBoxREMOS2.def +VBoxREMImp_SOURCES.win = $(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def +VBoxREMImp_CLEAN.win = $(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def +VBoxREMImp_SOURCES.os2 = $(VBoxREMImp_0_OUTDIR)/VBoxREMOS2.def +VBoxREMImp_CLEAN.os2 = $(VBoxREMImp_0_OUTDIR)/VBoxREMOS2.def ifn1of ($(KBUILD_TARGET), os2 win) -VBoxREMImp_SOURCES = $(PATH_VBoxREMImp)/VBoxREMImp.c -VBoxREMImp_CLEAN = $(PATH_VBoxREMImp)/VBoxREMImp.c +VBoxREMImp_SOURCES = $(VBoxREMImp_0_OUTDIR)/VBoxREMImp.c +VBoxREMImp_CLEAN = $(VBoxREMImp_0_OUTDIR)/VBoxREMImp.c endif ifn1of ($(KBUILD_TARGET), darwin os2 win) VBoxREMImp_SONAME = VBoxREM$(SUFF_DLL) @@ -235,7 +235,7 @@ else endif VBoxREMImp_LDFLAGS.l4 = -T$(L4_LIBDIR)/../main_rel.ld -nostdlib -$$(PATH_VBoxREMImp)/VBoxREMImp.c: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(VBOX_PATH_RECOMPILER_SRC)/Sun/deftoimp.sed $(MAKEFILE_CURRENT) | $$(dir $$@) +$$(VBoxREMImp_0_OUTDIR)/VBoxREMImp.c: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(VBOX_PATH_RECOMPILER_SRC)/Sun/deftoimp.sed $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_GENERATE,,$@) $(QUIET)$(APPEND) -t $@ '#ifdef VBOX_HAVE_VISIBILITY_HIDDEN' $(QUIET)$(APPEND) $@ '# define EXPORT __attribute__((visibility("default")))' @@ -245,7 +245,7 @@ $$(PATH_VBoxREMImp)/VBoxREMImp.c: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(VBOX $(QUIET)$(APPEND) $@ '' $(QUIET)$(SED) -f $(VBOX_PATH_RECOMPILER_SRC)/Sun/deftoimp.sed --append $@ $< -$$(PATH_VBoxREMImp)/VBoxREMOS2.def: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(MAKEFILE_CURRENT) | $$(dir $$@) +$$(VBoxREMImp_0_OUTDIR)/VBoxREMOS2.def: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(MAKEFILE_CURRENT) | $$(dir $$@) $(SED) \ -e 's/^[ \t][ \t]*REMR3/ _REMR3/' \ -e 's/\.[Dd][Ll][Ll]//' \ @@ -253,7 +253,7 @@ $$(PATH_VBoxREMImp)/VBoxREMOS2.def: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(MA --output $@ \ $< -$$(PATH_VBoxREMImp)/VBoxREMWin.def: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(MAKEFILE_CURRENT) | $$(dir $$@) +$$(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(MAKEFILE_CURRENT) | $$(dir $$@) $(CP) -f $< $@ diff --git a/src/recompiler/VBoxREMWrapper.cpp b/src/recompiler/VBoxREMWrapper.cpp index 44f3628e0..5b812cfc2 100644 --- a/src/recompiler/VBoxREMWrapper.cpp +++ b/src/recompiler/VBoxREMWrapper.cpp @@ -1,4 +1,4 @@ -/* $Id: VBoxREMWrapper.cpp 35191 2010-12-16 15:25:20Z vboxsync $ */ +/* $Id: VBoxREMWrapper.cpp 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * * VBoxREM Win64 DLL Wrapper. @@ -196,21 +196,21 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP LOG_GROUP_REM -#include <VBox/rem.h> -#include <VBox/vmm.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/vmm.h> +#include <VBox/vmm/dbgf.h> #include <VBox/dbg.h> -#include <VBox/csam.h> -#include <VBox/mm.h> -#include <VBox/em.h> -#include <VBox/ssm.h> -#include <VBox/hwaccm.h> -#include <VBox/patm.h> -#include <VBox/pdm.h> -#include <VBox/pdmcritsect.h> -#include <VBox/pgm.h> -#include <VBox/iom.h> -#include <VBox/vm.h> +#include <VBox/vmm/csam.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/pdmcritsect.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/vm.h> #include <VBox/err.h> #include <VBox/log.h> #include <VBox/dis.h> diff --git a/src/recompiler/VBoxRecompiler.c b/src/recompiler/VBoxRecompiler.c index 393205ed6..27a7a0d7e 100644 --- a/src/recompiler/VBoxRecompiler.c +++ b/src/recompiler/VBoxRecompiler.c @@ -1,4 +1,4 @@ -/* $Id: VBoxRecompiler.c 33595 2010-10-29 10:35:00Z vboxsync $ */ +/* $Id: VBoxRecompiler.c 35346 2010-12-27 16:13:13Z vboxsync $ */ /** @file * VBox Recompiler - QEMU. */ @@ -26,23 +26,23 @@ #include "config.h" #include "cpu-all.h" -#include <VBox/rem.h> -#include <VBox/vmapi.h> -#include <VBox/tm.h> -#include <VBox/ssm.h> -#include <VBox/em.h> -#include <VBox/trpm.h> -#include <VBox/iom.h> -#include <VBox/mm.h> -#include <VBox/pgm.h> -#include <VBox/pdm.h> -#include <VBox/dbgf.h> +#include <VBox/vmm/rem.h> +#include <VBox/vmm/vmapi.h> +#include <VBox/vmm/tm.h> +#include <VBox/vmm/ssm.h> +#include <VBox/vmm/em.h> +#include <VBox/vmm/trpm.h> +#include <VBox/vmm/iom.h> +#include <VBox/vmm/mm.h> +#include <VBox/vmm/pgm.h> +#include <VBox/vmm/pdm.h> +#include <VBox/vmm/dbgf.h> #include <VBox/dbg.h> -#include <VBox/hwaccm.h> -#include <VBox/patm.h> -#include <VBox/csam.h> +#include <VBox/vmm/hwaccm.h> +#include <VBox/vmm/patm.h> +#include <VBox/vmm/csam.h> #include "REMInternal.h" -#include <VBox/vm.h> +#include <VBox/vmm/vm.h> #include <VBox/param.h> #include <VBox/err.h> diff --git a/src/recompiler/cpu-all.h b/src/recompiler/cpu-all.h index e2698b50e..42573fea2 100644 --- a/src/recompiler/cpu-all.h +++ b/src/recompiler/cpu-all.h @@ -35,7 +35,7 @@ # define LOG_GROUP LOG_GROUP_REM # endif # include <VBox/log.h> -# include <VBox/pgm.h> /* PGM_DYNAMIC_RAM_ALLOC */ +# include <VBox/vmm/pgm.h> /* PGM_DYNAMIC_RAM_ALLOC */ #endif #if defined(__arm__) || defined(__sparc__) diff --git a/src/recompiler/exec-all.h b/src/recompiler/exec-all.h index 5840014ba..5e3af3382 100644 --- a/src/recompiler/exec-all.h +++ b/src/recompiler/exec-all.h @@ -33,14 +33,14 @@ #endif #ifdef VBOX -# include <VBox/tm.h> -# include <VBox/pgm.h> /* PGM_DYNAMIC_RAM_ALLOC */ +# include <VBox/vmm/tm.h> +# include <VBox/vmm/pgm.h> /* PGM_DYNAMIC_RAM_ALLOC */ # ifndef LOG_GROUP # define LOG_GROUP LOG_GROUP_REM # endif # include <VBox/log.h> # include "REMInternal.h" -# include <VBox/vm.h> +# include <VBox/vmm/vm.h> #endif /* VBOX */ /* is_jmp field values */ diff --git a/src/recompiler/exec.c b/src/recompiler/exec.c index ace524d72..96414248d 100644 --- a/src/recompiler/exec.c +++ b/src/recompiler/exec.c @@ -48,7 +48,7 @@ # include <iprt/alloc.h> # include <iprt/string.h> # include <iprt/param.h> -# include <VBox/pgm.h> /* PGM_DYNAMIC_RAM_ALLOC */ +# include <VBox/vmm/pgm.h> /* PGM_DYNAMIC_RAM_ALLOC */ #endif /* VBOX */ #include "cpu.h" diff --git a/src/recompiler/target-i386/cpu.h b/src/recompiler/target-i386/cpu.h index fef788097..68c817aee 100644 --- a/src/recompiler/target-i386/cpu.h +++ b/src/recompiler/target-i386/cpu.h @@ -61,8 +61,8 @@ # include <iprt/thread.h> # include <iprt/assert.h> # include <iprt/asm.h> -# include <VBox/vmm.h> -# include <VBox/stam.h> +# include <VBox/vmm/vmm.h> +# include <VBox/vmm/stam.h> #endif /* VBOX */ #define R_EAX 0 |